Wed, 06 Dec 2017 11:50:41 +0200
Merge from 89:c7ed2540212a
--- a/atmospheric_lidar/adam2016_depol.py Wed Dec 06 11:50:30 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -from licel_depol import LicelCalibrationMeasurement -import adam2016_depolarization_parameters - -class ADAM2017CalibrationMeasurement(LicelCalibrationMeasurement): - extra_netcdf_parameters = adam2016_depolarization_parameters
--- a/atmospheric_lidar/adam2016_depolarization_parameters.py Wed Dec 06 11:50:30 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,116 +0,0 @@ -general_parameters = \ -{'System': '\'ADAM 2012-2017\'', - 'Call sign': 'is', - 'Laser_Pointing_Angle': 0, - 'Molecular_Calc': 0, - 'Latitude_degrees_north': 45.8, - 'Longitude_degrees_east': 8.6, - 'Altitude_meter_asl': 209.0} # This should be float - -# Change to channel_parameters to use all channels. For testing I define only photon counting channels below. -channel_parameters = \ -{'BC1_p45': {'channel_ID': 647, - 'Background_Low': 45000, - 'Background_High': 60000, - 'Laser_Shots': 1501, - 'LR_Input': 1, - 'DAQ_Range': 0, - 'Pol_Calib_Range_Min': 2500, - 'Pol_Calib_Range_Max': 4000}, - 'BC2_p45': {'channel_ID': 649, - 'Background_Low': 45000, - 'Background_High': 60000, - 'Laser_Shots': 1501, - 'LR_Input': 1, - 'DAQ_Range': 0, - 'Pol_Calib_Range_Min': 2500, - 'Pol_Calib_Range_Max': 4000}, - 'BC1_m45': {'channel_ID': 646, - 'Background_Low': 45000, - 'Background_High': 60000, - 'Laser_Shots': 1501, - 'LR_Input': 1, - 'DAQ_Range': 0, - 'Pol_Calib_Range_Min': 2500, - 'Pol_Calib_Range_Max': 4000}, - 'BC2_m45': {'channel_ID': 648, - 'Background_Low': 45000, - 'Background_High': 60000, - 'Laser_Shots': 1501, - 'LR_Input': 1, - 'DAQ_Range': 0, - 'Pol_Calib_Range_Min': 2500, - 'Pol_Calib_Range_Max': 4000}, - } - -""" -{'00532.p_an_p45': {'channel_ID': 383, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3000, - 'LR_Input': 1, - 'DAQ_Range': 100.0, - 'Depolarization_Factor': 0, - 'Pol_Calib_Range_Min': 1000, - 'Pol_Calib_Range_Max': 3000}, - '00532.p_ph_p45': {'channel_ID': 378, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3000, - 'LR_Input': 1, - 'DAQ_Range': 0, - 'Depolarization_Factor': 0, - 'Pol_Calib_Range_Min': 1000, - 'Pol_Calib_Range_Max': 3000}, - '00532.s_an_p45': {'channel_ID': 385 , - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3000, - 'LR_Input': 1, - 'DAQ_Range': 20.0, - 'Pol_Calib_Range_Min': 1000, - 'Pol_Calib_Range_Max': 3000}, - '00532.s_ph_p45': {'channel_ID': 380, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3000, - 'LR_Input': 1, - 'DAQ_Range': 0, - 'Pol_Calib_Range_Min': 1000, - 'Pol_Calib_Range_Max': 3000}, - '00532.p_an_m45': {'channel_ID': 384, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3000, - 'LR_Input': 1, - 'DAQ_Range': 100.0, - 'Depolarization_Factor': 0, - 'Pol_Calib_Range_Min': 1000, - 'Pol_Calib_Range_Max': 3000}, - '00532.p_ph_m45': {'channel_ID': 379, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3000, - 'LR_Input': 1, - 'DAQ_Range': 0, - 'Depolarization_Factor': 0, - 'Pol_Calib_Range_Min': 1000, - 'Pol_Calib_Range_Max': 3000}, - '00532.s_an_m45': {'channel_ID': 386, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3000, - 'LR_Input': 1, - 'DAQ_Range': 20.0, - 'Pol_Calib_Range_Min': 1000, - 'Pol_Calib_Range_Max': 3000}, - '00532.s_ph_m45': {'channel_ID': 382, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3000, - 'LR_Input': 1, - 'DAQ_Range': 0, - 'Pol_Calib_Range_Min': 1000, - 'Pol_Calib_Range_Max': 3000}, - } -"""
--- a/atmospheric_lidar/adam2017.py Wed Dec 06 11:50:30 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,16 +0,0 @@ -from licel import LicelLidarMeasurement - -import adam2017_netcdf_parameters - -class ADAM2017LidarMeasurement(LicelLidarMeasurement): - extra_netcdf_parameters = adam2017_netcdf_parameters - - def _get_scc_mandatory_channel_variables(self): - channel_variables = \ - {'Background_Low': (('channels',), 'd'), - 'Background_High': (('channels',), 'd'), - 'LR_Input': (('channels',), 'i'), - 'DAQ_Range': (('channels',), 'd'), - 'First_Signal_Rangebin': (('channels',), 'i') - } - return channel_variables
--- a/atmospheric_lidar/adam2017_depol.py Wed Dec 06 11:50:30 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -from licel_depol import LicelCalibrationMeasurement -import adam2017_depolarization_parameters - -class ADAM2017CalibrationMeasurement(LicelCalibrationMeasurement): - extra_netcdf_parameters = adam2017_depolarization_parameters
--- a/atmospheric_lidar/adam2017_depolarization_parameters.py Wed Dec 06 11:50:30 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,116 +0,0 @@ -general_parameters = \ -{'System': '\'ADAM May 2017\'', - 'Call sign': 'is', - 'Laser_Pointing_Angle': 0, - 'Molecular_Calc': 0, - 'Latitude_degrees_north': 45.8, - 'Longitude_degrees_east': 8.6, - 'Altitude_meter_asl': 209.0} # This should be float - -# Change to channel_parameters to use all channels. For testing I define only photon counting channels below. -channel_parameters = \ -{'00532.p_ph_p45': {'channel_ID': 929, - 'Background_Low': 45000, - 'Background_High': 60000, - 'Laser_Shots': 1201, - 'LR_Input': 1, - 'DAQ_Range': 0, - 'Pol_Calib_Range_Min': 2000, - 'Pol_Calib_Range_Max': 3000}, - '00532.s_ph_p45': {'channel_ID': 931, - 'Background_Low': 45000, - 'Background_High': 60000, - 'Laser_Shots': 1201, - 'LR_Input': 1, - 'DAQ_Range': 0, - 'Pol_Calib_Range_Min': 2000, - 'Pol_Calib_Range_Max': 3000}, - '00532.p_ph_m45': {'channel_ID': 928, - 'Background_Low': 45000, - 'Background_High': 60000, - 'Laser_Shots': 1201, - 'LR_Input': 1, - 'DAQ_Range': 0, - 'Pol_Calib_Range_Min': 2000, - 'Pol_Calib_Range_Max': 3000}, - '00532.s_ph_m45': {'channel_ID': 930, - 'Background_Low': 45000, - 'Background_High': 60000, - 'Laser_Shots': 1201, - 'LR_Input': 1, - 'DAQ_Range': 0, - 'Pol_Calib_Range_Min': 2000, - 'Pol_Calib_Range_Max': 3000}, - } - -""" -{'00532.p_an_p45': {'channel_ID': 383, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3000, - 'LR_Input': 1, - 'DAQ_Range': 100.0, - 'Depolarization_Factor': 0, - 'Pol_Calib_Range_Min': 1000, - 'Pol_Calib_Range_Max': 3000}, - '00532.p_ph_p45': {'channel_ID': 378, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3000, - 'LR_Input': 1, - 'DAQ_Range': 0, - 'Depolarization_Factor': 0, - 'Pol_Calib_Range_Min': 1000, - 'Pol_Calib_Range_Max': 3000}, - '00532.s_an_p45': {'channel_ID': 385 , - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3000, - 'LR_Input': 1, - 'DAQ_Range': 20.0, - 'Pol_Calib_Range_Min': 1000, - 'Pol_Calib_Range_Max': 3000}, - '00532.s_ph_p45': {'channel_ID': 380, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3000, - 'LR_Input': 1, - 'DAQ_Range': 0, - 'Pol_Calib_Range_Min': 1000, - 'Pol_Calib_Range_Max': 3000}, - '00532.p_an_m45': {'channel_ID': 384, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3000, - 'LR_Input': 1, - 'DAQ_Range': 100.0, - 'Depolarization_Factor': 0, - 'Pol_Calib_Range_Min': 1000, - 'Pol_Calib_Range_Max': 3000}, - '00532.p_ph_m45': {'channel_ID': 379, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3000, - 'LR_Input': 1, - 'DAQ_Range': 0, - 'Depolarization_Factor': 0, - 'Pol_Calib_Range_Min': 1000, - 'Pol_Calib_Range_Max': 3000}, - '00532.s_an_m45': {'channel_ID': 386, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3000, - 'LR_Input': 1, - 'DAQ_Range': 20.0, - 'Pol_Calib_Range_Min': 1000, - 'Pol_Calib_Range_Max': 3000}, - '00532.s_ph_m45': {'channel_ID': 382, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3000, - 'LR_Input': 1, - 'DAQ_Range': 0, - 'Pol_Calib_Range_Min': 1000, - 'Pol_Calib_Range_Max': 3000}, - } -"""
--- a/atmospheric_lidar/adam2017_netcdf_parameters.py Wed Dec 06 11:50:30 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,89 +0,0 @@ -general_parameters = \ -{'System': '\'ADAM May 2017\'', - 'Call sign': 'is', - 'Laser_Pointing_Angle': 0, - 'Molecular_Calc': 0, - 'Latitude_degrees_north': 45.8, - 'Longitude_degrees_east': 8.6, - 'Altitude_meter_asl': 209.0} # This should be float - -channel_parameters = \ -{'01064.o_an': {'channel_ID': 917, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3001, - 'LR_Input': 1, - 'DAQ_Range': 500.0, - 'First_Signal_Rangebin': 9}, - '00532.p_an': {'channel_ID': 918, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3001, - 'LR_Input': 1, - 'DAQ_Range': 500.0, - 'First_Signal_Rangebin': 9}, -'00532.p_ph': {'channel_ID': 919, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3001, - 'LR_Input': 1, - 'DAQ_Range': 0, - 'First_Signal_Rangebin': 0}, - '00532.s_an': {'channel_ID': 920, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3001, - 'LR_Input': 1, - 'DAQ_Range': 500.0, - 'First_Signal_Rangebin': 9}, - '00532.s_ph': {'channel_ID': 921, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3001, - 'LR_Input': 1, - 'DAQ_Range': 0, - 'First_Signal_Rangebin': 0}, - '00607.o_an': {'channel_ID': 922, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3001, - 'LR_Input': 1, - 'DAQ_Range': 500.0, - 'First_Signal_Rangebin': 9}, - '00607.o_ph': {'channel_ID': 923, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3001, - 'LR_Input':1, - 'DAQ_Range':500.0, - 'First_Signal_Rangebin': 0}, - '00355.o_an': {'channel_ID': 924, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3001, - 'LR_Input': 1, - 'DAQ_Range': 500.0, - 'First_Signal_Rangebin': 8}, - '00355.o_ph': {'channel_ID': 925, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3001, - 'LR_Input': 1, - 'DAQ_Range': 0, - 'First_Signal_Rangebin': 0}, - '00387.o_an': {'channel_ID': 926, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3001, - 'LR_Input': 1, - 'DAQ_Range': 500.0, - 'First_Signal_Rangebin': 9}, - '00387.o_ph': {'channel_ID': 927, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3001, - 'LR_Input': 1, - 'DAQ_Range': 0, - 'First_Signal_Rangebin': 0}, -} -
--- a/atmospheric_lidar/adam2017_netcdf_parameters_2.py Wed Dec 06 11:50:30 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,89 +0,0 @@ -general_parameters = \ -{'System': '\'ADAM May 2017\'', - 'Call sign': 'is', - 'Laser_Pointing_Angle': 0, - 'Molecular_Calc': 0, - 'Latitude_degrees_north': 45.8, - 'Longitude_degrees_east': 8.6, - 'Altitude_meter_asl': 209.0} # This should be float - -channel_parameters = \ -{'01064.o_an': {'channel_ID': 917, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3001, - 'LR_Input': 1, - 'DAQ_Range': 100.0, - 'First_Signal_Rangebin': 9}, - '00532.p_an': {'channel_ID': 918, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3001, - 'LR_Input': 1, - 'DAQ_Range': 100.0, - 'First_Signal_Rangebin': 9}, -'00532.p_ph': {'channel_ID': 919, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3001, - 'LR_Input': 1, - 'DAQ_Range': 0, - 'First_Signal_Rangebin': 0}, - '00532.s_an': {'channel_ID': 920, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3001, - 'LR_Input': 1, - 'DAQ_Range': 100.0, - 'First_Signal_Rangebin': 9}, - '00532.s_ph': {'channel_ID': 921, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3001, - 'LR_Input': 1, - 'DAQ_Range': 0, - 'First_Signal_Rangebin': 0}, - '00607.o_an': {'channel_ID': 922, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3001, - 'LR_Input': 1, - 'DAQ_Range': 100.0, - 'First_Signal_Rangebin': 9}, - '00607.o_ph': {'channel_ID': 923, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3001, - 'LR_Input':1, - 'DAQ_Range':100.0, - 'First_Signal_Rangebin': 0}, - '00355.o_an': {'channel_ID': 924, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3001, - 'LR_Input': 1, - 'DAQ_Range': 100.0, - 'First_Signal_Rangebin': 8}, - '00355.o_ph': {'channel_ID': 925, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3001, - 'LR_Input': 1, - 'DAQ_Range': 0, - 'First_Signal_Rangebin': 0}, - '00387.o_an': {'channel_ID': 926, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3001, - 'LR_Input': 1, - 'DAQ_Range': 100.0, - 'First_Signal_Rangebin': 9}, - '00387.o_ph': {'channel_ID': 927, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3001, - 'LR_Input': 1, - 'DAQ_Range': 0, - 'First_Signal_Rangebin': 0}, -} -
--- a/atmospheric_lidar/aias_netcdf_parameters.py Wed Dec 06 11:50:30 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ -general_parameters = \ -{'System': '\'AIAS\'', - 'Laser_Pointing_Angle': 0, - 'Molecular_Calc': 0, - 'Latitude_degrees_north': 36.992, - 'Longitude_degrees_east': 21.649, - 'Altitude_meter_asl': 3} - -channel_parameters = \ -{'00532.p_an': {'channel_ID': 327, - 'Background_Low': 19000, - 'Background_High': 20000, - 'Laser_Shots': 1000, - 'LR_Input':1, - 'DAQ_Range':500.0, - 'Depolarization_Factor': 0,}, - '00532.p_ph': {'channel_ID': 328, - 'Background_Low': 19000, - 'Background_High': 20000, - 'Laser_Shots': 1000, - 'LR_Input':1, - 'DAQ_Range':0, - 'Depolarization_Factor': 0.06,}, - '00532.s_an': {'channel_ID': 329, - 'Background_Low': 19000, - 'Background_High': 20000, - 'Laser_Shots': 1000, - 'LR_Input':1, - 'DAQ_Range':500.0, - 'Depolarization_Factor': 0,}, - '00532.s_ph': {'channel_ID': 330, - 'Background_Low': 19000, - 'Background_High': 20000, - 'Laser_Shots': 1000, - 'LR_Input':1, - 'DAQ_Range':0, - 'Depolarization_Factor': 0.06,}, - } \ No newline at end of file
--- a/atmospheric_lidar/at_netcdf_parameters.py Wed Dec 06 11:50:30 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,55 +0,0 @@ -general_parameters = \ -{'System': '\'LAMP Lidar\'', - 'Laser_Pointing_Angle': 0, - 'Molecular_Calc': 0, - 'Latitude_degrees_north': 45.601039, - 'Longitude_degrees_east': 03.723771, - 'Altitude_meter_asl': 420} - -channel_parameters = \ -{'00387.o_ph': {'channel_ID': 316, - 'Background_Low': 15000, - 'Background_High': 20000, - 'Laser_Shots': 600, - 'LR_Input':1, - 'DAQ_Range':0, - 'Depolarization_Factor': 0,}, - '00355.p_ph': {'channel_ID': 315, - 'Background_Low': 15000, - 'Background_High': 20000, - 'Laser_Shots': 600, - 'LR_Input':1, - 'DAQ_Range':0, - 'Depolarization_Factor': 0,}, - '00355.s_an': {'channel_ID': 312, - 'Background_Low': 15000, - 'Background_High': 20000, - 'Laser_Shots': 600, - 'LR_Input':1, - 'DAQ_Range':500.0, - 'Depolarization_Factor': 0.17,}, - '00355.p_an': {'channel_ID': 314, - 'Background_Low': 15000, - 'Background_High': 20000, - 'Laser_Shots': 600, - 'LR_Input':1, - 'DAQ_Range':500.0, - 'Depolarization_Factor': 0,}, - '00355.s_ph': {'channel_ID': 313, - 'Background_Low': 15000, - 'Background_High': 20000, - 'Laser_Shots': 600, - 'LR_Input':1, - 'DAQ_Range':0, - 'Depolarization_Factor': 0.17,}, - } - -#For testing. To be read from milos files. -''' -measurement_parameters = \ -{'Pressure_at_Lidar_Station': 930, - 'Temperature_at_Lidar_Station': 15, - 'Measurement_ID': '12345'} -''' - -
--- a/atmospheric_lidar/cf_netcdf_parameters.py Wed Dec 06 11:50:30 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,55 +0,0 @@ -general_parameters = \ -{'System': '\'LAMP Lidar\'', - 'Laser_Pointing_Angle': 0, - 'Molecular_Calc': 0, - 'Latitude_degrees_north': 45.601039, - 'Longitude_degrees_east': 03.723771, - 'Altitude_meter_asl': 420} - -channel_parameters = \ -{'00387.o_ph': {'channel_ID': 316, - 'Background_Low': 15000, - 'Background_High': 20000, - 'Laser_Shots': 600, - 'LR_Input':1, - 'DAQ_Range':0, - 'Depolarization_Factor': 0,}, - '00355.p_ph': {'channel_ID': 315, - 'Background_Low': 15000, - 'Background_High': 20000, - 'Laser_Shots': 600, - 'LR_Input':1, - 'DAQ_Range':0, - 'Depolarization_Factor': 0,}, - '00355.s_an': {'channel_ID': 312, - 'Background_Low': 15000, - 'Background_High': 20000, - 'Laser_Shots': 600, - 'LR_Input':1, - 'DAQ_Range':500.0, - 'Depolarization_Factor': 0.17,}, - '00355.p_an': {'channel_ID': 314, - 'Background_Low': 15000, - 'Background_High': 20000, - 'Laser_Shots': 600, - 'LR_Input':1, - 'DAQ_Range':500.0, - 'Depolarization_Factor': 0,}, - '00355.s_ph': {'channel_ID': 313, - 'Background_Low': 15000, - 'Background_High': 20000, - 'Laser_Shots': 600, - 'LR_Input':1, - 'DAQ_Range':0, - 'Depolarization_Factor': 0.17,}, - } - -#For testing. To be read from milos files. -''' -measurement_parameters = \ -{'Pressure_at_Lidar_Station': 930, - 'Temperature_at_Lidar_Station': 15, - 'Measurement_ID': '12345'} -''' - -
--- a/atmospheric_lidar/cf_raymetrics.py Wed Dec 06 11:50:30 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,7 +0,0 @@ -from licel import LicelLidarMeasurement - -import cf_netcdf_parameters - -class CfLidarMeasurement(LicelLidarMeasurement): - - extra_netcdf_parameters = cf_netcdf_parameters
--- a/atmospheric_lidar/ciao.py Wed Dec 06 11:50:30 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,20 +0,0 @@ -import milos - -class CiaoMixin: - - def get_PT(self): - ''' Gets the pressure and temperature at station level from the Milos station. - The results are stored in the info dictionary. - ''' - - start_time = self.info['start_time'] - stop_time = self.info['stop_time'] - dt = stop_time - start_time - mean_time = start_time + dt/2 - - # this guarantees that more that half the measurement period is taken into account - atm = milos.Atmospheric_condition(mean_time) - temperature = atm.get_mean('Air_Temperature', start_time, stop_time) - pressure = atm.get_mean('Air_Pressure', start_time, stop_time) - self.info['Temperature'] = temperature - self.info['Pressure'] = pressure
--- a/atmospheric_lidar/eole.py Wed Dec 06 11:50:30 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,19 +0,0 @@ -from licel import LicelLidarMeasurement -import eole_netcdf_parameters - - -class EoleLidarMeasurement(LicelLidarMeasurement): - extra_netcdf_parameters = eole_netcdf_parameters - - def get_PT(self): - ''' Sets the pressure and temperature at station level . - The results are stored in the info dictionary. - ''' - - self.info['Temperature'] = 25.0 - self.info['Pressure'] = 1020.0 - - - #def save_netcdf_extra(self, f): - # CHARMEX CLOUD MIN ALTITUDE - # temp_v=f.createVariable('max_altitude_m_asl', 'd', ('time', 'nb_of_time_scales'))
--- a/atmospheric_lidar/eole_netcdf_parameters.py Wed Dec 06 11:50:30 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,67 +0,0 @@ -general_parameters = \ -{'System': '\'EOLE\'', - 'Laser_Pointing_Angle': 0, - 'Molecular_Calc': 0, - 'Latitude_degrees_north': 37.96, - 'Longitude_degrees_east': 23.78, - 'Altitude_meter_asl': 212.0} - -channel_parameters = \ -{'01064.o_an': {'channel_ID': 45, - 'Background_Low': 19000, - 'Background_High': 20000, - 'Laser_Shots': 1000, - 'LR_Input':1, - 'DAQ_Range':500.0, - 'Depolarization_Factor': 0,}, - '00355.o_an': {'channel_ID': 41, - 'Background_Low': 19000, - 'Background_High': 20000, - 'Laser_Shots': 1000, - 'LR_Input':1, - 'DAQ_Range':500.0, - 'Depolarization_Factor': 0,}, - '00355.o_ph': {'channel_ID': 42, - 'Background_Low': 19000, - 'Background_High': 20000, - 'Laser_Shots': 1000, - 'LR_Input':1, - 'DAQ_Range':0, - 'Depolarization_Factor': 0,}, - '00387.o_ph': {'channel_ID': 46, - 'Background_Low': 19000, - 'Background_High': 20000, - 'Laser_Shots': 1000, - 'LR_Input':1, - 'DAQ_Range':0, - 'Depolarization_Factor': 0,}, - '00532.o_an': {'channel_ID': 43, - 'Background_Low': 19000, - 'Background_High': 20000, - 'Laser_Shots': 1000, - 'LR_Input':1, - 'DAQ_Range':500.0, - 'Depolarization_Factor': 0,}, - '00532.o_ph': {'channel_ID': 44, - 'Background_Low': 19000, - 'Background_High': 20000, - 'Laser_Shots': 1000, - 'LR_Input':1, - 'DAQ_Range':0, - 'Depolarization_Factor': 0,}, - '00607.o_ph': {'channel_ID': 47, - 'Background_Low': 19000, - 'Background_High': 20000, - 'Laser_Shots': 1000, - 'LR_Input':1, - 'DAQ_Range':0, - 'Depolarization_Factor': 0,}, - '00407.o_ph': {'channel_ID': 444, - 'Background_Low': 19000, - 'Background_High': 20000, - 'Laser_Shots': 1000, - 'LR_Input':1, - 'DAQ_Range':0, - 'Depolarization_Factor': 0,}, - } -
--- a/atmospheric_lidar/generic.py Wed Dec 06 11:50:30 2017 +0200 +++ b/atmospheric_lidar/generic.py Wed Dec 06 11:50:41 2017 +0200 @@ -53,8 +53,8 @@ Reading of the scan_angles parameter is not implemented. ''' + # Initialize - # Initialize start_time = [] stop_time = [] points = [] @@ -136,7 +136,11 @@ m = self.__class__() # Create an object of the same type as this one. m.channels = dict([(channel, self.channels[channel]) for channel in channel_subset]) + + m.files = self.files + m.update() + return m def subset_by_scc_channels(self): @@ -304,6 +308,11 @@ input_values['Latitude_degrees_north'] = params.general_parameters['Latitude_degrees_north'] input_values['Longitude_degrees_east'] = params.general_parameters['Longitude_degrees_east'] input_values['Altitude_meter_asl'] = params.general_parameters['Altitude_meter_asl'] + + # Override general paremeters with those provided by any subclass + # in a custom fashion + for param in self.getCustomGeneralParameters(): + input_values[ param["name"] ] = param["value"] # Open a netCDF4 file f = netcdf.Dataset(filename, 'w', format=netcdf_format) # the format is specified in the begining of the file @@ -336,7 +345,7 @@ temp_v[n] = params.channel_parameters[channel][channel_var] # Write the custom subclass parameters: - for param in self.getCustomParameters(): + for param in self.getCustomChannelParameters(): temp_v = f.createVariable(param["name"], param["type"], param["dimensions"]) for (value, n) in zip(param["values"], range(len(param["values"]))): @@ -514,14 +523,23 @@ def get_dark_measurements(self): return None - def getCustomParameters(self): + def getCustomGeneralParameters(self): """ Abstract method to provide custom NetCDF parameters that should be included in the final NetCDF file. This method should be implemented by subclasses of BaseLidarMeasurement. """ - pass + return [] + + def getCustomChannelParameters(self): + """ + Abstract method to provide custom NetCDF parameters + for the channels in this measurement that should be + included in the final NetCDF file. This method should + be implemented by subclasses of BaseLidarMeasurement. + """ + return [] @property def mean_time(self):
--- a/atmospheric_lidar/ipral.py Wed Dec 06 11:50:30 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -from licel import LicelLidarMeasurement -import ipral_netcdf_parameters - - -class IpralLidarMeasurement(LicelLidarMeasurement): - extra_netcdf_parameters = ipral_netcdf_parameters - - def __init__(self, filelist=None, use_id_as_name=True): - super(IpralLidarMeasurement, self).__init__(filelist, use_id_as_name) - - def get_PT(self): - ''' Sets the pressure and temperature at station level . - The results are stored in the info dictionary. - ''' - - self.info['Temperature'] = 25.0 - self.info['Pressure'] = 1020.0 \ No newline at end of file
--- a/atmospheric_lidar/ipral_netcdf_parameters.py Wed Dec 06 11:50:30 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -# INSERT HERE THE SYSTEM PARAMETERS -general_parameters = \ - {'System': '\'IPRAL\'', - 'Laser_Pointing_Angle': 0, - 'Molecular_Calc': 0, # Use US standard atmosphere - 'Latitude_degrees_north': 50.63, - 'Longitude_degrees_east': 3.07, - 'Altitude_meter_asl': 0.4, - 'Call sign': 'mb',} - -# LINK YOUR LICEL CHANNELS TO SCC PARAMETERS. USE BT0, BC0 ETC AS NAMES (AS IN LICEL FILES). -channel_parameters = \ - {'BT0': {'channel_ID': 41, - 'Background_Low': 19000, - 'Background_High': 20000, - 'Laser_Shots': 1000, - 'LR_Input': 1, - 'DAQ_Range': 500.0,}, - 'BC0': {'channel_ID': 42, - 'Background_Low': 19000, - 'Background_High': 20000, - 'Laser_Shots': 1000, - 'LR_Input': 1, - 'DAQ_Range': 0,}, - 'BT1': {'channel_ID': 41, - 'Background_Low': 19000, - 'Background_High': 20000, - 'Laser_Shots': 1000, - 'LR_Input': 1, - 'DAQ_Range': 500.0,}, - 'BC1': {'channel_ID': 42, - 'Background_Low': 19000, - 'Background_High': 20000, - 'Laser_Shots': 1000, - 'LR_Input': 1, - 'DAQ_Range': 0,}, - }
--- a/atmospheric_lidar/licel.py Wed Dec 06 11:50:30 2017 +0200 +++ b/atmospheric_lidar/licel.py Wed Dec 06 11:50:41 2017 +0200 @@ -3,8 +3,9 @@ import numpy as np -import musa_2009_netcdf_parameters -import musa_netcdf_parameters +from .systems.musa import musa_2009_netcdf_parameters +from .systems.musa import musa_netcdf_parameters + from generic import BaseLidarMeasurement, LidarChannel licel_file_header_format = ['Filename', @@ -195,7 +196,6 @@ raw_info = {} # Keep the raw info from the files durations = {} # Keep the duration of the files laser_shots = [] - files = [] def __init__(self, filelist=None, use_id_as_name=False): self.use_id_as_name = use_id_as_name @@ -242,7 +242,7 @@ return duration_sec - def getCustomParameters(self): + def getCustomChannelParameters(self): params = [{ "name": "DAQ_Range", "dimensions": ('channels',), @@ -262,6 +262,21 @@ ] return params + + def getCustomGeneralParameters(self): + params = [{ + "name": "Altitude_meter_asl", + "value": self.raw_info[ self.files[0] ]["Altitude"] + }, { + "name": "Latitude_degrees_north", + "value": self.raw_info[ self.files[0] ]["Latitude"] + }, { + "name": "Longitude_degrees_east", + "value": self.raw_info[ self.files[0] ]["Longtitude"] + }, + ] + + return params class LicelChannel(LidarChannel):
--- a/atmospheric_lidar/lilas.py Wed Dec 06 11:50:30 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,14 +0,0 @@ -from licel import LicelLidarMeasurement -import lilas_netcdf_parameters - - -class LilasLidarMeasurement(LicelLidarMeasurement): - extra_netcdf_parameters = lilas_netcdf_parameters - - def get_PT(self): - ''' Sets the pressure and temperature at station level . - The results are stored in the info dictionary. - ''' - - self.info['Temperature'] = 25.0 - self.info['Pressure'] = 1020.0 \ No newline at end of file
--- a/atmospheric_lidar/lilas_netcdf_parameters.py Wed Dec 06 11:50:30 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,109 +0,0 @@ -general_parameters = \ - {'System': '\'Lilas\'', - 'Laser_Pointing_Angle': 0, - 'Molecular_Calc': 0, # Use US standard atmosphere - 'Latitude_degrees_north': 50.63, - 'Longitude_degrees_east': 3.07, - 'Altitude_meter_asl': 0.4, - 'Call sign': 'mb',} - -channel_parameters = \ - {'00355.p_an': {'channel_ID': 41, - 'Background_Low': 19000, - 'Background_High': 20000, - 'Laser_Shots': 1000, - 'LR_Input': 1, - 'DAQ_Range': 500.0, - 'Depolarization_Factor': 0,}, - '00355.p_ph': {'channel_ID': 42, - 'Background_Low': 19000, - 'Background_High': 20000, - 'Laser_Shots': 1000, - 'LR_Input': 1, - 'DAQ_Range': 0, - 'Depolarization_Factor': 0,}, - '00355.s_an': {'channel_ID': 41, - 'Background_Low': 19000, - 'Background_High': 20000, - 'Laser_Shots': 1000, - 'LR_Input': 1, - 'DAQ_Range': 500.0, - 'Depolarization_Factor': 0.88,}, - '00355.s_ph': {'channel_ID': 42, - 'Background_Low': 19000, - 'Background_High': 20000, - 'Laser_Shots': 1000, - 'LR_Input': 1, - 'DAQ_Range': 0, - 'Depolarization_Factor': 0.88}, - '00530.o_an': {'channel_ID': 43, - 'Background_Low': 19000, - 'Background_High': 20000, - 'Laser_Shots': 1000, - 'LR_Input': 1, - 'DAQ_Range': 500.0, - 'Depolarization_Factor': 0,}, - '00530.o_ph': {'channel_ID': 44, - 'Background_Low': 19000, - 'Background_High': 20000, - 'Laser_Shots': 1000, - 'LR_Input': 1, - 'DAQ_Range': 0, - 'Depolarization_Factor': 0,}, - '00532.p_an': {'channel_ID': 43, - 'Background_Low': 19000, - 'Background_High': 20000, - 'Laser_Shots': 1000, - 'LR_Input': 1, - 'DAQ_Range': 500.0, - 'Depolarization_Factor': 0,}, - '00532.p_ph': {'channel_ID': 44, - 'Background_Low': 19000, - 'Background_High': 20000, - 'Laser_Shots': 1000, - 'LR_Input': 1, - 'DAQ_Range': 0, - 'Depolarization_Factor': 0,}, - '00532.s_an': {'channel_ID': 43, - 'Background_Low': 19000, - 'Background_High': 20000, - 'Laser_Shots': 1000, - 'LR_Input': 1, - 'DAQ_Range': 500.0, - 'Depolarization_Factor': 0.77,}, - '00532.s_ph': {'channel_ID': 44, - 'Background_Low': 19000, - 'Background_High': 20000, - 'Laser_Shots': 1000, - 'LR_Input': 1, - 'DAQ_Range': 0, - 'Depolarization_Factor': 0.77,}, - '01064.o_an': {'channel_ID': 45, - 'Background_Low': 19000, - 'Background_High': 20000, - 'Laser_Shots': 1000, - 'LR_Input': 1, - 'DAQ_Range': 500.0, - 'Depolarization_Factor': 0,}, - '00387.o_an': {'channel_ID': 45, - 'Background_Low': 19000, - 'Background_High': 20000, - 'Laser_Shots': 1000, - 'LR_Input': 1, - 'DAQ_Range': 500.0, - 'Depolarization_Factor': 0,}, - '00387.o_ph': {'channel_ID': 46, - 'Background_Low': 19000, - 'Background_High': 20000, - 'Laser_Shots': 1000, - 'LR_Input': 1, - 'DAQ_Range': 0, - 'Depolarization_Factor': 0,}, - '00408.o_ph': {'channel_ID': 444, - 'Background_Low': 19000, - 'Background_High': 20000, - 'Laser_Shots': 1000, - 'LR_Input': 1, - 'DAQ_Range': 0, - 'Depolarization_Factor': 0,}, - }
--- a/atmospheric_lidar/musa.py Wed Dec 06 11:50:30 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -from licel import LicelLidarMeasurement -from ciao import CiaoMixin - -class MusaLidarMeasurement(CiaoMixin, LicelLidarMeasurement): - pass
--- a/atmospheric_lidar/musa_2009_netcdf_parameters.py Wed Dec 06 11:50:30 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,97 +0,0 @@ -general_parameters = \ -{'System': '\'MUSA\'', - 'Laser_Pointing_Angle': 0, - 'Molecular_Calc': 0, - 'Latitude_degrees_north': 40.601039, - 'Longitude_degrees_east': 15.723771, - 'Altitude_meter_asl': 760.0} # This should be float - -channel_parameters = \ -{'01064.o_an': {'channel_ID': 203, - 'Background_Low': 30000, - 'Background_High': 50000, - 'Laser_Shots': 1200, - 'LR_Input':1, - 'DAQ_Range':500.0, - 'Depolarization_Factor': 0,}, - '00355.o_an': {'channel_ID': 193, - 'Background_Low': 30000, - 'Background_High': 50000, - 'Laser_Shots': 1200, - 'LR_Input':1, - 'DAQ_Range':100.0, - 'Depolarization_Factor': 0,}, - '00355.o_ph': {'channel_ID': 194, - 'Background_Low': 30000, - 'Background_High': 50000, - 'Laser_Shots': 1200, - 'LR_Input':1, - 'DAQ_Range':0, - 'Depolarization_Factor': 0,}, - '00387.o_an': {'channel_ID': 195, - 'Background_Low': 30000, - 'Background_High': 50000, - 'Laser_Shots': 1200, - 'LR_Input':1, - 'DAQ_Range':20.0, - 'Depolarization_Factor': 0,}, - '00387.o_ph': {'channel_ID': 196, - 'Background_Low': 30000, - 'Background_High': 50000, - 'Laser_Shots': 1200, - 'LR_Input':1, - 'DAQ_Range':0, - 'Depolarization_Factor': 0,}, - '00532.p_an': {'channel_ID': 197, - 'Background_Low': 30000, - 'Background_High': 50000, - 'Laser_Shots': 1200, - 'LR_Input':1, - 'DAQ_Range':100.0, - 'Depolarization_Factor': 0,}, - '00532.p_ph': {'channel_ID': 198, - 'Background_Low': 30000, - 'Background_High': 50000, - 'Laser_Shots': 1200, - 'LR_Input':1, - 'DAQ_Range':0, - 'Depolarization_Factor': 0,}, - '00532.s_an': {'channel_ID': 199, - 'Background_Low': 30000, - 'Background_High': 50000, - 'Laser_Shots': 1200, - 'LR_Input':1, - 'DAQ_Range':100.0, - 'Depolarization_Factor': 0.0441,}, - '00532.s_ph': {'channel_ID': 200, - 'Background_Low': 30000, - 'Background_High': 50000, - 'Laser_Shots': 1200, - 'LR_Input':1, - 'DAQ_Range':0, - 'Depolarization_Factor': 0.0441,}, - '00607.o_an': {'channel_ID': 201, - 'Background_Low': 30000, - 'Background_High': 50000, - 'Laser_Shots': 1200, - 'LR_Input':1, - 'DAQ_Range':20.0, - 'Depolarization_Factor': 0,}, - '00607.o_ph': {'channel_ID': 202, - 'Background_Low': 30000, - 'Background_High': 50000, - 'Laser_Shots': 1200, - 'LR_Input':1, - 'DAQ_Range':0, - 'Depolarization_Factor': 0,}, - } - -#For testing. To be read from milos files. -''' -measurement_parameters = \ -{'Pressure_at_Lidar_Station': 930, - 'Temperature_at_Lidar_Station': 15, - 'Measurement_ID': '12345'} -''' - -
--- a/atmospheric_lidar/musa_netcdf_parameters.py Wed Dec 06 11:50:30 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,97 +0,0 @@ -general_parameters = \ -{'System': '\'MUSA\'', - 'Laser_Pointing_Angle': 0, - 'Molecular_Calc': 0, - 'Latitude_degrees_north': 40.601039, - 'Longitude_degrees_east': 15.723771, - 'Altitude_meter_asl': 760.0} # This should be float - -channel_parameters = \ -{'1064.o_an': {'channel_ID': 203, - 'Background_Low': 30000, - 'Background_High': 50000, - 'Laser_Shots': 1200, - 'LR_Input':1, - 'DAQ_Range':500.0, - 'Depolarization_Factor': 0,}, - '355.o_an': {'channel_ID': 193, - 'Background_Low': 30000, - 'Background_High': 50000, - 'Laser_Shots': 1200, - 'LR_Input':1, - 'DAQ_Range':100.0, - 'Depolarization_Factor': 0,}, - '355.o_ph': {'channel_ID': 194, - 'Background_Low': 30000, - 'Background_High': 50000, - 'Laser_Shots': 1200, - 'LR_Input':1, - 'DAQ_Range':0, - 'Depolarization_Factor': 0,}, - '387.o_an': {'channel_ID': 195, - 'Background_Low': 30000, - 'Background_High': 50000, - 'Laser_Shots': 1200, - 'LR_Input':1, - 'DAQ_Range':20.0, - 'Depolarization_Factor': 0,}, - '387.o_ph': {'channel_ID': 196, - 'Background_Low': 30000, - 'Background_High': 50000, - 'Laser_Shots': 1200, - 'LR_Input':1, - 'DAQ_Range':0, - 'Depolarization_Factor': 0,}, - '532.p_an': {'channel_ID': 197, - 'Background_Low': 30000, - 'Background_High': 50000, - 'Laser_Shots': 1200, - 'LR_Input':1, - 'DAQ_Range':100.0, - 'Depolarization_Factor': 0,}, - '532.p_ph': {'channel_ID': 198, - 'Background_Low': 30000, - 'Background_High': 50000, - 'Laser_Shots': 1200, - 'LR_Input':1, - 'DAQ_Range':0, - 'Depolarization_Factor': 0,}, - '532.s_an': {'channel_ID': 199, - 'Background_Low': 30000, - 'Background_High': 50000, - 'Laser_Shots': 1200, - 'LR_Input':1, - 'DAQ_Range':100.0, - 'Depolarization_Factor': 0.0441,}, - '532.s_ph': {'channel_ID': 200, - 'Background_Low': 30000, - 'Background_High': 50000, - 'Laser_Shots': 1200, - 'LR_Input':1, - 'DAQ_Range':0, - 'Depolarization_Factor': 0.0441,}, - '607.o_an': {'channel_ID': 201, - 'Background_Low': 30000, - 'Background_High': 50000, - 'Laser_Shots': 1200, - 'LR_Input':1, - 'DAQ_Range':20.0, - 'Depolarization_Factor': 0,}, - '607.o_ph': {'channel_ID': 202, - 'Background_Low': 30000, - 'Background_High': 50000, - 'Laser_Shots': 1200, - 'LR_Input':1, - 'DAQ_Range':0, - 'Depolarization_Factor': 0,}, - } - -#For testing. To be read from milos files. -''' -measurement_parameters = \ -{'Pressure_at_Lidar_Station': 930, - 'Temperature_at_Lidar_Station': 15, - 'Measurement_ID': '12345'} -''' - -
--- a/atmospheric_lidar/pearl.py Wed Dec 06 11:50:30 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,139 +0,0 @@ -import datetime -import os -import glob - -import numpy as np - -from generic import BaseLidarMeasurement, LidarChannel -from ciao import CiaoMixin - -import pearl_netcdf_parameters -from report_file import Report_file - - -repository = '/mnt/storage/lidar_data/pearl/' - - -class PearlLidarMeasurement(CiaoMixin, BaseLidarMeasurement): - - extra_netcdf_parameters = pearl_netcdf_parameters - - def import_file(self,filename): - ''' Import a pearl file. ''' - - if filename in self.files: - print "File has been imported already:" + filename - else: - parameters, channels_dict = self.read_pearl_data(filename) - start_time = self._gettime(parameters['Acq_date'],parameters['Acq_start_time']) - - for channel_info in channels_dict.itervalues(): - - if channel_info['name'] == '1064ALR': - name = '1064' - tm = start_time - elif channel_info['name'] == '1064BLR': - name = '1064' - tm = start_time + datetime.timedelta(seconds = 30) - else: - name = channel_info['name'] - tm = start_time - if name not in self.channels: - self.channels[name] = LidarChannel(channel_info) - self.channels[name].data[tm] = channel_info['data'] - self.files.append(filename) - - def read_pearl_data(self, filename): - ''' - Reads a pearl file. - - Returns: - parameters - a dictionary of general parameters - channels - a dictionary with keys the channel number and values lists - [channel name, channel bin width, channel data]. - ''' - f = open(filename,'r') # Open the file - s = f.read(26) # Read the first 26 bytes - - #Get the values in a dictionary - parameters = {} - parameters['Acq_date'] = s[0:10] # First 10 bytes are the acquisition date. - parameters['Acq_start_time'] = s[10:20].strip() # Next 10 bytes are start time. Strip from trailing spaces. - parameters['Channel_no'] = np.fromstring(s[20:22], dtype = np.int16) # Next 2 bytes are the number of channels. Short integer. - parameters['Point_no'] = np.fromstring(s[22:26], dtype = np.int32) # Next 4 bytes are the number of points. Integer. - p = parameters # Just for less typing - - # Read the channel parameters - len = 20*p['Channel_no'] - s = f.read(len) - channels = {} - for (c1,n) in zip(range(0,len, 20),range(p['Channel_no'])): - channels[str(n)] = {'name' : s[c1+10:c1+20].strip(), - 'binwidth' : s[c1:c1+10].strip()} - - #Read the data - data = np.fromfile(f,dtype = np.float32) - #print filename + ': ' + str(data.size) +',' + str(p['Point_no']) +str(p['Channel_no']) - data = data.reshape(p['Point_no'],p['Channel_no']) - for ch in channels.iterkeys(): - channels[ch]['data'] = data[:,int(ch)] - #Close the file - f.close() - return parameters,channels - - -def get_measurement_for_interval(start_time, stop_time): - ''' Searches for a pearl measurement based on a time interval - ''' - - correct_series = None - day = datetime.timedelta(hours = 24) - - if start_time > stop_time: - raise ValueError('Stop time should be after start time') - - - - #The list of directories based on the given time. Same, previous, Next day - possible_paths = [get_path(t) for t in [start_time - day, start_time, start_time + day] - if get_path(t) is not None] - for path in possible_paths: - try: - rf = Report_file(path) - except: - rf = None - - if rf is not None: - for serie in rf.series: - if (start_time > serie.starttime) and (stop_time < serie.endtime): - correct_series = serie - - if correct_series: - files = correct_series.files.get('apd', []) + correct_series.files.get('mcb', []) - m_series = PearlLidarMeasurement(files) - m_subset = m_series.subset_by_time(start_time, stop_time) - return m_subset - else: - return None - - -def get_channel(tim, channel = '1064'): - if channel =='1064': - extension = '*.apd' - else: - extension = '*.mcb' - - dirstr = get_path(tim) - - if not os.path.isdir(dirstr): - raise IOError('No measurement for that date (directory does not exist.).') - #No measurement for that date (directory does not exist.). - files = glob.glob(dirstr + extension) - m = PearlLidarMeasurement(files) - c = m.channels[channel] - return c - - -def get_path(tim): - dirstr = repository + tim.strftime('%Y')+ '/' +tim.strftime('%d%m%Y') + '/' - return dirstr
--- a/atmospheric_lidar/pearl_netcdf_parameters.py Wed Dec 06 11:50:30 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,98 +0,0 @@ -general_parameters = \ -{'System': '\'PEARL\'', - 'Laser_Pointing_Angle': 0, - 'Molecular_Calc': 0, - 'Latitude_degrees_north': 40.601039, - 'Longitude_degrees_east': 15.723771, - 'Altitude_meter_asl': 760.0} # This should be float - -channel_parameters = \ -{'355HR': {'channel_ID': 8, - 'Background_Low': 30000, - 'Background_High': 50000, - 'Laser_Shots': 3000, - 'LR_Input':1, - 'DAQ_Range':0, - 'Depolarization_Factor': 0,}, - '355LR': {'channel_ID': 14, - 'Background_Low': 30000, - 'Background_High': 50000, - 'Laser_Shots': 3000, - 'LR_Input':1, - 'DAQ_Range':0, - 'Depolarization_Factor': 0,}, - '386HR': {'channel_ID': 9, - 'Background_Low': 30000, - 'Background_High': 50000, - 'Laser_Shots': 3000, - 'LR_Input':1, - 'DAQ_Range':0, - 'Depolarization_Factor': 0,}, - '386LR': {'channel_ID': 15, - 'Background_Low': 30000, - 'Background_High': 50000, - 'Laser_Shots': 3000, - 'LR_Input':1, - 'DAQ_Range':0, - 'Depolarization_Factor': 0,}, - '407HR': {'channel_ID': 17, - 'Background_Low': 30000, - 'Background_High': 50000, - 'Laser_Shots': 3000, - 'LR_Input':1, - 'DAQ_Range':0, - 'Depolarization_Factor': 0,}, - '532HR': {'channel_ID': 7, - 'Background_Low': 30000, - 'Background_High': 50000, - 'Laser_Shots': 3000, - 'LR_Input':1, - 'DAQ_Range':0, - 'Depolarization_Factor': 0,}, - '532LR': {'channel_ID': 13, - 'Background_Low': 30000, - 'Background_High': 50000, - 'Laser_Shots': 3000, - 'LR_Input':1, - 'DAQ_Range':0, - 'Depolarization_Factor': 0,}, - '532SHR': {'channel_ID': 12, - 'Background_Low': 30000, - 'Background_High': 50000, - 'Laser_Shots': 3000, - 'LR_Input':1, - 'DAQ_Range':0, - 'Depolarization_Factor': 0,}, - '532PHR': {'channel_ID': 11, - 'Background_Low': 30000, - 'Background_High': 50000, - 'Laser_Shots': 3000, - 'LR_Input':1, - 'DAQ_Range':0, - 'Depolarization_Factor': 0,}, - '607HR': {'channel_ID': 10, - 'Background_Low': 30000, - 'Background_High': 50000, - 'Laser_Shots': 3000, - 'LR_Input':1, - 'DAQ_Range':0, - 'Depolarization_Factor': 0,}, - '1064': {'channel_ID': 6, - 'Background_Low': 30000, - 'Background_High': 50000, - 'Laser_Shots': 1500, - 'LR_Input':1, - 'DAQ_Range':100, - 'Depolarization_Factor': 0,}, - - } - -#For testing. To be read from milos files. -''' -measurement_parameters = \ -{'Pressure_at_Lidar_Station': 930, - 'Temperature_at_Lidar_Station': 15, - 'Measurement_ID': '12345'} -''' - -
--- a/atmospheric_lidar/rali.py Wed Dec 06 11:50:30 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -import radiometer - -from licel import LicelLidarMeasurement - -import rali_netcdf_parameters - -class RaliLidarMeasurement(LicelLidarMeasurement): - extra_netcdf_parameters = rali_netcdf_parameters - - def get_PT(self): - ''' Gets the pressure and temperature from Radiometer data. - If no data file is found, mean values from past measurements are - used. - ''' - - start_time = self.info['start_time'] - stop_time = self.info['stop_time'] - dt = stop_time - start_time - mean_time = start_time + dt/2 - - meteo_triplet = radiometer.get_mean_PT(mean_time) - - if meteo_triplet: - pressure, temperature, humidity = meteo_triplet - else: - print "Radiometer meteo data not available. Using past values." - pressure = radiometer.P_mean[mean_time.month - 1, mean_time.hour] - temperature = radiometer.T_mean[mean_time.month - 1, mean_time.hour] - - self.info['Temperature'] = temperature - 273.15 - self.info['Pressure'] = pressure - -
--- a/atmospheric_lidar/rali_depol.py Wed Dec 06 11:50:30 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -from licel_depol import LicelCalibrationMeasurement -import rali_depolarization_parameters - -class RALICalibrationMeasurement(LicelCalibrationMeasurement): - extra_netcdf_parameters = rali_depolarization_parameters
--- a/atmospheric_lidar/rali_depolarization_parameters.py Wed Dec 06 11:50:30 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,80 +0,0 @@ -general_parameters = \ -{'System': '\'RALI\'', - 'Call sign': 'bu', - 'Laser_Pointing_Angle': 0, - 'Molecular_Calc': 0, - 'Latitude_degrees_north': 44.348, - 'Longitude_degrees_east': 26.029, - 'Altitude_meter_asl': 93.0} # This should be float - -# Change to channel_parameters to use all channels. For testing I define only photon counting channels below. -channel_parameters = \ -{ '00532.p_an_p45': {'channel_ID': 383, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3000, - 'LR_Input': 1, - 'DAQ_Range': 100.0, - 'Depolarization_Factor': 0, - 'Pol_Calib_Range_Min': 1000, - 'Pol_Calib_Range_Max': 3000}, - '00532.p_ph_p45': {'channel_ID': 378, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3000, - 'LR_Input': 1, - 'DAQ_Range': 0, - 'Depolarization_Factor': 0, - 'Pol_Calib_Range_Min': 1000, - 'Pol_Calib_Range_Max': 3000}, - '00532.s_an_p45': {'channel_ID': 385 , - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3000, - 'LR_Input': 1, - 'DAQ_Range': 20.0, - 'Pol_Calib_Range_Min': 1000, - 'Pol_Calib_Range_Max': 3000}, - '00532.s_ph_p45': {'channel_ID': 380, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3000, - 'LR_Input': 1, - 'DAQ_Range': 0, - 'Pol_Calib_Range_Min': 1000, - 'Pol_Calib_Range_Max': 3000}, - '00532.p_an_m45': {'channel_ID': 384, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3000, - 'LR_Input': 1, - 'DAQ_Range': 100.0, - 'Depolarization_Factor': 0, - 'Pol_Calib_Range_Min': 1000, - 'Pol_Calib_Range_Max': 3000}, - '00532.p_ph_m45': {'channel_ID': 379, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3000, - 'LR_Input': 1, - 'DAQ_Range': 0, - 'Depolarization_Factor': 0, - 'Pol_Calib_Range_Min': 1000, - 'Pol_Calib_Range_Max': 3000}, - '00532.s_an_m45': {'channel_ID': 386, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3000, - 'LR_Input': 1, - 'DAQ_Range': 20.0, - 'Pol_Calib_Range_Min': 1000, - 'Pol_Calib_Range_Max': 3000}, - '00532.s_ph_m45': {'channel_ID': 382, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3000, - 'LR_Input': 1, - 'DAQ_Range': 0, - 'Pol_Calib_Range_Min': 1000, - 'Pol_Calib_Range_Max': 3000}, - } \ No newline at end of file
--- a/atmospheric_lidar/rali_netcdf_parameters.py Wed Dec 06 11:50:30 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,85 +0,0 @@ -general_parameters = \ -{'System': '\'RALI\'', - 'Laser_Pointing_Angle': 0, - 'Molecular_Calc': 0, - 'Latitude_degrees_north': 44.348, - 'Longitude_degrees_east': 26.029, - 'Altitude_meter_asl': 93.0, - 'Call sign': 'bu', } # This should be float - -channel_parameters = \ -{'01064.o_an': {'channel_ID': 89, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3000, - 'LR_Input': 1, - 'DAQ_Range': 100.0,}, - '00355.o_an': {'channel_ID': 98, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3000, - 'LR_Input': 1, - 'DAQ_Range': 100.0,}, - '00355.o_ph': {'channel_ID': 99, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3000, - 'LR_Input': 1, - 'DAQ_Range': 0, - 'Depolarization_Factor': 0,}, - '00387.o_an': {'channel_ID': 90, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3000, - 'LR_Input': 1, - 'DAQ_Range': 100.0,}, - '00387.o_ph': {'channel_ID': 91, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3000, - 'LR_Input': 1, - 'DAQ_Range': 0,}, - '00532.p_an': {'channel_ID': 94, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3000, - 'LR_Input': 1, - 'DAQ_Range': 100.0,}, - '00532.p_ph': {'channel_ID': 95, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3000, - 'LR_Input': 1, - 'DAQ_Range': 0,}, - '00532.s_an': {'channel_ID': 96, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3000, - 'LR_Input': 1, - 'DAQ_Range': 20.0,}, - '00532.s_ph': {'channel_ID': 97, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3000, - 'LR_Input': 1, - 'DAQ_Range': 0,}, - '00607.o_an': {'channel_ID': 92, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3000, - 'LR_Input': 1, - 'DAQ_Range': 20.0,}, - '00607.o_ph': {'channel_ID': 93, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3000, - 'LR_Input':1, - 'DAQ_Range':20.0,}, - '00408.o_ph': {'channel_ID': 170, - 'Background_Low': 50000, - 'Background_High': 60000, - 'Laser_Shots': 3000, - 'LR_Input': 1, - 'DAQ_Range': 0,}, - } -
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/atmospheric_lidar/systems/adam2016/adam2016_depol.py Wed Dec 06 11:50:41 2017 +0200 @@ -0,0 +1,5 @@ +from ...licel_depol import LicelCalibrationMeasurement +import adam2016_depolarization_parameters + +class ADAM2017CalibrationMeasurement(LicelCalibrationMeasurement): + extra_netcdf_parameters = adam2016_depolarization_parameters
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/atmospheric_lidar/systems/adam2016/adam2016_depolarization_parameters.py Wed Dec 06 11:50:41 2017 +0200 @@ -0,0 +1,116 @@ +general_parameters = \ +{'System': '\'ADAM 2012-2017\'', + 'Call sign': 'is', + 'Laser_Pointing_Angle': 0, + 'Molecular_Calc': 0, + 'Latitude_degrees_north': 45.8, + 'Longitude_degrees_east': 8.6, + 'Altitude_meter_asl': 209.0} # This should be float + +# Change to channel_parameters to use all channels. For testing I define only photon counting channels below. +channel_parameters = \ +{'BC1_p45': {'channel_ID': 647, + 'Background_Low': 45000, + 'Background_High': 60000, + 'Laser_Shots': 1501, + 'LR_Input': 1, + 'DAQ_Range': 0, + 'Pol_Calib_Range_Min': 2500, + 'Pol_Calib_Range_Max': 4000}, + 'BC2_p45': {'channel_ID': 649, + 'Background_Low': 45000, + 'Background_High': 60000, + 'Laser_Shots': 1501, + 'LR_Input': 1, + 'DAQ_Range': 0, + 'Pol_Calib_Range_Min': 2500, + 'Pol_Calib_Range_Max': 4000}, + 'BC1_m45': {'channel_ID': 646, + 'Background_Low': 45000, + 'Background_High': 60000, + 'Laser_Shots': 1501, + 'LR_Input': 1, + 'DAQ_Range': 0, + 'Pol_Calib_Range_Min': 2500, + 'Pol_Calib_Range_Max': 4000}, + 'BC2_m45': {'channel_ID': 648, + 'Background_Low': 45000, + 'Background_High': 60000, + 'Laser_Shots': 1501, + 'LR_Input': 1, + 'DAQ_Range': 0, + 'Pol_Calib_Range_Min': 2500, + 'Pol_Calib_Range_Max': 4000}, + } + +""" +{'00532.p_an_p45': {'channel_ID': 383, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3000, + 'LR_Input': 1, + 'DAQ_Range': 100.0, + 'Depolarization_Factor': 0, + 'Pol_Calib_Range_Min': 1000, + 'Pol_Calib_Range_Max': 3000}, + '00532.p_ph_p45': {'channel_ID': 378, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3000, + 'LR_Input': 1, + 'DAQ_Range': 0, + 'Depolarization_Factor': 0, + 'Pol_Calib_Range_Min': 1000, + 'Pol_Calib_Range_Max': 3000}, + '00532.s_an_p45': {'channel_ID': 385 , + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3000, + 'LR_Input': 1, + 'DAQ_Range': 20.0, + 'Pol_Calib_Range_Min': 1000, + 'Pol_Calib_Range_Max': 3000}, + '00532.s_ph_p45': {'channel_ID': 380, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3000, + 'LR_Input': 1, + 'DAQ_Range': 0, + 'Pol_Calib_Range_Min': 1000, + 'Pol_Calib_Range_Max': 3000}, + '00532.p_an_m45': {'channel_ID': 384, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3000, + 'LR_Input': 1, + 'DAQ_Range': 100.0, + 'Depolarization_Factor': 0, + 'Pol_Calib_Range_Min': 1000, + 'Pol_Calib_Range_Max': 3000}, + '00532.p_ph_m45': {'channel_ID': 379, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3000, + 'LR_Input': 1, + 'DAQ_Range': 0, + 'Depolarization_Factor': 0, + 'Pol_Calib_Range_Min': 1000, + 'Pol_Calib_Range_Max': 3000}, + '00532.s_an_m45': {'channel_ID': 386, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3000, + 'LR_Input': 1, + 'DAQ_Range': 20.0, + 'Pol_Calib_Range_Min': 1000, + 'Pol_Calib_Range_Max': 3000}, + '00532.s_ph_m45': {'channel_ID': 382, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3000, + 'LR_Input': 1, + 'DAQ_Range': 0, + 'Pol_Calib_Range_Min': 1000, + 'Pol_Calib_Range_Max': 3000}, + } +"""
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/atmospheric_lidar/systems/adam2017/adam2017.py Wed Dec 06 11:50:41 2017 +0200 @@ -0,0 +1,16 @@ +from ...licel import LicelLidarMeasurement + +import adam2017_netcdf_parameters + +class ADAM2017LidarMeasurement(LicelLidarMeasurement): + extra_netcdf_parameters = adam2017_netcdf_parameters + + def _get_scc_mandatory_channel_variables(self): + channel_variables = \ + {'Background_Low': (('channels',), 'd'), + 'Background_High': (('channels',), 'd'), + 'LR_Input': (('channels',), 'i'), + 'DAQ_Range': (('channels',), 'd'), + 'First_Signal_Rangebin': (('channels',), 'i') + } + return channel_variables
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/atmospheric_lidar/systems/adam2017/adam2017_depol.py Wed Dec 06 11:50:41 2017 +0200 @@ -0,0 +1,5 @@ +from ...licel_depol import LicelCalibrationMeasurement +import adam2017_depolarization_parameters + +class ADAM2017CalibrationMeasurement(LicelCalibrationMeasurement): + extra_netcdf_parameters = adam2017_depolarization_parameters
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/atmospheric_lidar/systems/adam2017/adam2017_depolarization_parameters.py Wed Dec 06 11:50:41 2017 +0200 @@ -0,0 +1,116 @@ +general_parameters = \ +{'System': '\'ADAM May 2017\'', + 'Call sign': 'is', + 'Laser_Pointing_Angle': 0, + 'Molecular_Calc': 0, + 'Latitude_degrees_north': 45.8, + 'Longitude_degrees_east': 8.6, + 'Altitude_meter_asl': 209.0} # This should be float + +# Change to channel_parameters to use all channels. For testing I define only photon counting channels below. +channel_parameters = \ +{'00532.p_ph_p45': {'channel_ID': 929, + 'Background_Low': 45000, + 'Background_High': 60000, + 'Laser_Shots': 1201, + 'LR_Input': 1, + 'DAQ_Range': 0, + 'Pol_Calib_Range_Min': 2000, + 'Pol_Calib_Range_Max': 3000}, + '00532.s_ph_p45': {'channel_ID': 931, + 'Background_Low': 45000, + 'Background_High': 60000, + 'Laser_Shots': 1201, + 'LR_Input': 1, + 'DAQ_Range': 0, + 'Pol_Calib_Range_Min': 2000, + 'Pol_Calib_Range_Max': 3000}, + '00532.p_ph_m45': {'channel_ID': 928, + 'Background_Low': 45000, + 'Background_High': 60000, + 'Laser_Shots': 1201, + 'LR_Input': 1, + 'DAQ_Range': 0, + 'Pol_Calib_Range_Min': 2000, + 'Pol_Calib_Range_Max': 3000}, + '00532.s_ph_m45': {'channel_ID': 930, + 'Background_Low': 45000, + 'Background_High': 60000, + 'Laser_Shots': 1201, + 'LR_Input': 1, + 'DAQ_Range': 0, + 'Pol_Calib_Range_Min': 2000, + 'Pol_Calib_Range_Max': 3000}, + } + +""" +{'00532.p_an_p45': {'channel_ID': 383, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3000, + 'LR_Input': 1, + 'DAQ_Range': 100.0, + 'Depolarization_Factor': 0, + 'Pol_Calib_Range_Min': 1000, + 'Pol_Calib_Range_Max': 3000}, + '00532.p_ph_p45': {'channel_ID': 378, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3000, + 'LR_Input': 1, + 'DAQ_Range': 0, + 'Depolarization_Factor': 0, + 'Pol_Calib_Range_Min': 1000, + 'Pol_Calib_Range_Max': 3000}, + '00532.s_an_p45': {'channel_ID': 385 , + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3000, + 'LR_Input': 1, + 'DAQ_Range': 20.0, + 'Pol_Calib_Range_Min': 1000, + 'Pol_Calib_Range_Max': 3000}, + '00532.s_ph_p45': {'channel_ID': 380, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3000, + 'LR_Input': 1, + 'DAQ_Range': 0, + 'Pol_Calib_Range_Min': 1000, + 'Pol_Calib_Range_Max': 3000}, + '00532.p_an_m45': {'channel_ID': 384, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3000, + 'LR_Input': 1, + 'DAQ_Range': 100.0, + 'Depolarization_Factor': 0, + 'Pol_Calib_Range_Min': 1000, + 'Pol_Calib_Range_Max': 3000}, + '00532.p_ph_m45': {'channel_ID': 379, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3000, + 'LR_Input': 1, + 'DAQ_Range': 0, + 'Depolarization_Factor': 0, + 'Pol_Calib_Range_Min': 1000, + 'Pol_Calib_Range_Max': 3000}, + '00532.s_an_m45': {'channel_ID': 386, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3000, + 'LR_Input': 1, + 'DAQ_Range': 20.0, + 'Pol_Calib_Range_Min': 1000, + 'Pol_Calib_Range_Max': 3000}, + '00532.s_ph_m45': {'channel_ID': 382, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3000, + 'LR_Input': 1, + 'DAQ_Range': 0, + 'Pol_Calib_Range_Min': 1000, + 'Pol_Calib_Range_Max': 3000}, + } +"""
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/atmospheric_lidar/systems/adam2017/adam2017_netcdf_parameters.py Wed Dec 06 11:50:41 2017 +0200 @@ -0,0 +1,89 @@ +general_parameters = \ +{'System': '\'ADAM May 2017\'', + 'Call sign': 'is', + 'Laser_Pointing_Angle': 0, + 'Molecular_Calc': 0, + 'Latitude_degrees_north': 45.8, + 'Longitude_degrees_east': 8.6, + 'Altitude_meter_asl': 209.0} # This should be float + +channel_parameters = \ +{'01064.o_an': {'channel_ID': 917, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3001, + 'LR_Input': 1, + 'DAQ_Range': 500.0, + 'First_Signal_Rangebin': 9}, + '00532.p_an': {'channel_ID': 918, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3001, + 'LR_Input': 1, + 'DAQ_Range': 500.0, + 'First_Signal_Rangebin': 9}, +'00532.p_ph': {'channel_ID': 919, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3001, + 'LR_Input': 1, + 'DAQ_Range': 0, + 'First_Signal_Rangebin': 0}, + '00532.s_an': {'channel_ID': 920, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3001, + 'LR_Input': 1, + 'DAQ_Range': 500.0, + 'First_Signal_Rangebin': 9}, + '00532.s_ph': {'channel_ID': 921, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3001, + 'LR_Input': 1, + 'DAQ_Range': 0, + 'First_Signal_Rangebin': 0}, + '00607.o_an': {'channel_ID': 922, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3001, + 'LR_Input': 1, + 'DAQ_Range': 500.0, + 'First_Signal_Rangebin': 9}, + '00607.o_ph': {'channel_ID': 923, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3001, + 'LR_Input':1, + 'DAQ_Range':500.0, + 'First_Signal_Rangebin': 0}, + '00355.o_an': {'channel_ID': 924, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3001, + 'LR_Input': 1, + 'DAQ_Range': 500.0, + 'First_Signal_Rangebin': 8}, + '00355.o_ph': {'channel_ID': 925, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3001, + 'LR_Input': 1, + 'DAQ_Range': 0, + 'First_Signal_Rangebin': 0}, + '00387.o_an': {'channel_ID': 926, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3001, + 'LR_Input': 1, + 'DAQ_Range': 500.0, + 'First_Signal_Rangebin': 9}, + '00387.o_ph': {'channel_ID': 927, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3001, + 'LR_Input': 1, + 'DAQ_Range': 0, + 'First_Signal_Rangebin': 0}, +} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/atmospheric_lidar/systems/adam2017/adam2017_netcdf_parameters_2.py Wed Dec 06 11:50:41 2017 +0200 @@ -0,0 +1,89 @@ +general_parameters = \ +{'System': '\'ADAM May 2017\'', + 'Call sign': 'is', + 'Laser_Pointing_Angle': 0, + 'Molecular_Calc': 0, + 'Latitude_degrees_north': 45.8, + 'Longitude_degrees_east': 8.6, + 'Altitude_meter_asl': 209.0} # This should be float + +channel_parameters = \ +{'01064.o_an': {'channel_ID': 917, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3001, + 'LR_Input': 1, + 'DAQ_Range': 100.0, + 'First_Signal_Rangebin': 9}, + '00532.p_an': {'channel_ID': 918, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3001, + 'LR_Input': 1, + 'DAQ_Range': 100.0, + 'First_Signal_Rangebin': 9}, +'00532.p_ph': {'channel_ID': 919, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3001, + 'LR_Input': 1, + 'DAQ_Range': 0, + 'First_Signal_Rangebin': 0}, + '00532.s_an': {'channel_ID': 920, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3001, + 'LR_Input': 1, + 'DAQ_Range': 100.0, + 'First_Signal_Rangebin': 9}, + '00532.s_ph': {'channel_ID': 921, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3001, + 'LR_Input': 1, + 'DAQ_Range': 0, + 'First_Signal_Rangebin': 0}, + '00607.o_an': {'channel_ID': 922, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3001, + 'LR_Input': 1, + 'DAQ_Range': 100.0, + 'First_Signal_Rangebin': 9}, + '00607.o_ph': {'channel_ID': 923, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3001, + 'LR_Input':1, + 'DAQ_Range':100.0, + 'First_Signal_Rangebin': 0}, + '00355.o_an': {'channel_ID': 924, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3001, + 'LR_Input': 1, + 'DAQ_Range': 100.0, + 'First_Signal_Rangebin': 8}, + '00355.o_ph': {'channel_ID': 925, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3001, + 'LR_Input': 1, + 'DAQ_Range': 0, + 'First_Signal_Rangebin': 0}, + '00387.o_an': {'channel_ID': 926, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3001, + 'LR_Input': 1, + 'DAQ_Range': 100.0, + 'First_Signal_Rangebin': 9}, + '00387.o_ph': {'channel_ID': 927, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3001, + 'LR_Input': 1, + 'DAQ_Range': 0, + 'First_Signal_Rangebin': 0}, +} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/atmospheric_lidar/systems/aias/aias_netcdf_parameters.py Wed Dec 06 11:50:41 2017 +0200 @@ -0,0 +1,38 @@ +general_parameters = \ +{'System': '\'AIAS\'', + 'Laser_Pointing_Angle': 0, + 'Molecular_Calc': 0, + 'Latitude_degrees_north': 36.992, + 'Longitude_degrees_east': 21.649, + 'Altitude_meter_asl': 3} + +channel_parameters = \ +{'00532.p_an': {'channel_ID': 327, + 'Background_Low': 19000, + 'Background_High': 20000, + 'Laser_Shots': 1000, + 'LR_Input':1, + 'DAQ_Range':500.0, + 'Depolarization_Factor': 0,}, + '00532.p_ph': {'channel_ID': 328, + 'Background_Low': 19000, + 'Background_High': 20000, + 'Laser_Shots': 1000, + 'LR_Input':1, + 'DAQ_Range':0, + 'Depolarization_Factor': 0.06,}, + '00532.s_an': {'channel_ID': 329, + 'Background_Low': 19000, + 'Background_High': 20000, + 'Laser_Shots': 1000, + 'LR_Input':1, + 'DAQ_Range':500.0, + 'Depolarization_Factor': 0,}, + '00532.s_ph': {'channel_ID': 330, + 'Background_Low': 19000, + 'Background_High': 20000, + 'Laser_Shots': 1000, + 'LR_Input':1, + 'DAQ_Range':0, + 'Depolarization_Factor': 0.06,}, + } \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/atmospheric_lidar/systems/ciao.py Wed Dec 06 11:50:41 2017 +0200 @@ -0,0 +1,20 @@ +import milos + +class CiaoMixin: + + def get_PT(self): + ''' Gets the pressure and temperature at station level from the Milos station. + The results are stored in the info dictionary. + ''' + + start_time = self.info['start_time'] + stop_time = self.info['stop_time'] + dt = stop_time - start_time + mean_time = start_time + dt/2 + + # this guarantees that more that half the measurement period is taken into account + atm = milos.Atmospheric_condition(mean_time) + temperature = atm.get_mean('Air_Temperature', start_time, stop_time) + pressure = atm.get_mean('Air_Pressure', start_time, stop_time) + self.info['Temperature'] = temperature + self.info['Pressure'] = pressure
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/atmospheric_lidar/systems/eole/eole.py Wed Dec 06 11:50:41 2017 +0200 @@ -0,0 +1,19 @@ +from ...licel import LicelLidarMeasurement +import eole_netcdf_parameters + + +class EoleLidarMeasurement(LicelLidarMeasurement): + extra_netcdf_parameters = eole_netcdf_parameters + + def get_PT(self): + ''' Sets the pressure and temperature at station level . + The results are stored in the info dictionary. + ''' + + self.info['Temperature'] = 25.0 + self.info['Pressure'] = 1020.0 + + + #def save_netcdf_extra(self, f): + # CHARMEX CLOUD MIN ALTITUDE + # temp_v=f.createVariable('max_altitude_m_asl', 'd', ('time', 'nb_of_time_scales'))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/atmospheric_lidar/systems/eole/eole_netcdf_parameters.py Wed Dec 06 11:50:41 2017 +0200 @@ -0,0 +1,67 @@ +general_parameters = \ +{'System': '\'EOLE\'', + 'Laser_Pointing_Angle': 0, + 'Molecular_Calc': 0, + 'Latitude_degrees_north': 37.96, + 'Longitude_degrees_east': 23.78, + 'Altitude_meter_asl': 212.0} + +channel_parameters = \ +{'01064.o_an': {'channel_ID': 45, + 'Background_Low': 19000, + 'Background_High': 20000, + 'Laser_Shots': 1000, + 'LR_Input':1, + 'DAQ_Range':500.0, + 'Depolarization_Factor': 0,}, + '00355.o_an': {'channel_ID': 41, + 'Background_Low': 19000, + 'Background_High': 20000, + 'Laser_Shots': 1000, + 'LR_Input':1, + 'DAQ_Range':500.0, + 'Depolarization_Factor': 0,}, + '00355.o_ph': {'channel_ID': 42, + 'Background_Low': 19000, + 'Background_High': 20000, + 'Laser_Shots': 1000, + 'LR_Input':1, + 'DAQ_Range':0, + 'Depolarization_Factor': 0,}, + '00387.o_ph': {'channel_ID': 46, + 'Background_Low': 19000, + 'Background_High': 20000, + 'Laser_Shots': 1000, + 'LR_Input':1, + 'DAQ_Range':0, + 'Depolarization_Factor': 0,}, + '00532.o_an': {'channel_ID': 43, + 'Background_Low': 19000, + 'Background_High': 20000, + 'Laser_Shots': 1000, + 'LR_Input':1, + 'DAQ_Range':500.0, + 'Depolarization_Factor': 0,}, + '00532.o_ph': {'channel_ID': 44, + 'Background_Low': 19000, + 'Background_High': 20000, + 'Laser_Shots': 1000, + 'LR_Input':1, + 'DAQ_Range':0, + 'Depolarization_Factor': 0,}, + '00607.o_ph': {'channel_ID': 47, + 'Background_Low': 19000, + 'Background_High': 20000, + 'Laser_Shots': 1000, + 'LR_Input':1, + 'DAQ_Range':0, + 'Depolarization_Factor': 0,}, + '00407.o_ph': {'channel_ID': 444, + 'Background_Low': 19000, + 'Background_High': 20000, + 'Laser_Shots': 1000, + 'LR_Input':1, + 'DAQ_Range':0, + 'Depolarization_Factor': 0,}, + } +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/atmospheric_lidar/systems/ipral/ipral.py Wed Dec 06 11:50:41 2017 +0200 @@ -0,0 +1,17 @@ +from ...licel import LicelLidarMeasurement +import ipral_netcdf_parameters + + +class IpralLidarMeasurement(LicelLidarMeasurement): + extra_netcdf_parameters = ipral_netcdf_parameters + + def __init__(self, filelist=None, use_id_as_name=True): + super(IpralLidarMeasurement, self).__init__(filelist, use_id_as_name) + + def get_PT(self): + ''' Sets the pressure and temperature at station level . + The results are stored in the info dictionary. + ''' + + self.info['Temperature'] = 25.0 + self.info['Pressure'] = 1020.0 \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/atmospheric_lidar/systems/ipral/ipral_netcdf_parameters.py Wed Dec 06 11:50:41 2017 +0200 @@ -0,0 +1,37 @@ +# INSERT HERE THE SYSTEM PARAMETERS +general_parameters = \ + {'System': '\'IPRAL\'', + 'Laser_Pointing_Angle': 0, + 'Molecular_Calc': 0, # Use US standard atmosphere + 'Latitude_degrees_north': 50.63, + 'Longitude_degrees_east': 3.07, + 'Altitude_meter_asl': 0.4, + 'Call sign': 'mb',} + +# LINK YOUR LICEL CHANNELS TO SCC PARAMETERS. USE BT0, BC0 ETC AS NAMES (AS IN LICEL FILES). +channel_parameters = \ + {'BT0': {'channel_ID': 41, + 'Background_Low': 19000, + 'Background_High': 20000, + 'Laser_Shots': 1000, + 'LR_Input': 1, + 'DAQ_Range': 500.0,}, + 'BC0': {'channel_ID': 42, + 'Background_Low': 19000, + 'Background_High': 20000, + 'Laser_Shots': 1000, + 'LR_Input': 1, + 'DAQ_Range': 0,}, + 'BT1': {'channel_ID': 41, + 'Background_Low': 19000, + 'Background_High': 20000, + 'Laser_Shots': 1000, + 'LR_Input': 1, + 'DAQ_Range': 500.0,}, + 'BC1': {'channel_ID': 42, + 'Background_Low': 19000, + 'Background_High': 20000, + 'Laser_Shots': 1000, + 'LR_Input': 1, + 'DAQ_Range': 0,}, + }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/atmospheric_lidar/systems/lamp_lidar/at_netcdf_parameters.py Wed Dec 06 11:50:41 2017 +0200 @@ -0,0 +1,55 @@ +general_parameters = \ +{'System': '\'LAMP Lidar\'', + 'Laser_Pointing_Angle': 0, + 'Molecular_Calc': 0, + 'Latitude_degrees_north': 45.601039, + 'Longitude_degrees_east': 03.723771, + 'Altitude_meter_asl': 420} + +channel_parameters = \ +{'00387.o_ph': {'channel_ID': 316, + 'Background_Low': 15000, + 'Background_High': 20000, + 'Laser_Shots': 600, + 'LR_Input':1, + 'DAQ_Range':0, + 'Depolarization_Factor': 0,}, + '00355.p_ph': {'channel_ID': 315, + 'Background_Low': 15000, + 'Background_High': 20000, + 'Laser_Shots': 600, + 'LR_Input':1, + 'DAQ_Range':0, + 'Depolarization_Factor': 0,}, + '00355.s_an': {'channel_ID': 312, + 'Background_Low': 15000, + 'Background_High': 20000, + 'Laser_Shots': 600, + 'LR_Input':1, + 'DAQ_Range':500.0, + 'Depolarization_Factor': 0.17,}, + '00355.p_an': {'channel_ID': 314, + 'Background_Low': 15000, + 'Background_High': 20000, + 'Laser_Shots': 600, + 'LR_Input':1, + 'DAQ_Range':500.0, + 'Depolarization_Factor': 0,}, + '00355.s_ph': {'channel_ID': 313, + 'Background_Low': 15000, + 'Background_High': 20000, + 'Laser_Shots': 600, + 'LR_Input':1, + 'DAQ_Range':0, + 'Depolarization_Factor': 0.17,}, + } + +#For testing. To be read from milos files. +''' +measurement_parameters = \ +{'Pressure_at_Lidar_Station': 930, + 'Temperature_at_Lidar_Station': 15, + 'Measurement_ID': '12345'} +''' + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/atmospheric_lidar/systems/lamp_lidar/cf_netcdf_parameters.py Wed Dec 06 11:50:41 2017 +0200 @@ -0,0 +1,55 @@ +general_parameters = \ +{'System': '\'LAMP Lidar\'', + 'Laser_Pointing_Angle': 0, + 'Molecular_Calc': 0, + 'Latitude_degrees_north': 45.601039, + 'Longitude_degrees_east': 03.723771, + 'Altitude_meter_asl': 420} + +channel_parameters = \ +{'00387.o_ph': {'channel_ID': 316, + 'Background_Low': 15000, + 'Background_High': 20000, + 'Laser_Shots': 600, + 'LR_Input':1, + 'DAQ_Range':0, + 'Depolarization_Factor': 0,}, + '00355.p_ph': {'channel_ID': 315, + 'Background_Low': 15000, + 'Background_High': 20000, + 'Laser_Shots': 600, + 'LR_Input':1, + 'DAQ_Range':0, + 'Depolarization_Factor': 0,}, + '00355.s_an': {'channel_ID': 312, + 'Background_Low': 15000, + 'Background_High': 20000, + 'Laser_Shots': 600, + 'LR_Input':1, + 'DAQ_Range':500.0, + 'Depolarization_Factor': 0.17,}, + '00355.p_an': {'channel_ID': 314, + 'Background_Low': 15000, + 'Background_High': 20000, + 'Laser_Shots': 600, + 'LR_Input':1, + 'DAQ_Range':500.0, + 'Depolarization_Factor': 0,}, + '00355.s_ph': {'channel_ID': 313, + 'Background_Low': 15000, + 'Background_High': 20000, + 'Laser_Shots': 600, + 'LR_Input':1, + 'DAQ_Range':0, + 'Depolarization_Factor': 0.17,}, + } + +#For testing. To be read from milos files. +''' +measurement_parameters = \ +{'Pressure_at_Lidar_Station': 930, + 'Temperature_at_Lidar_Station': 15, + 'Measurement_ID': '12345'} +''' + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/atmospheric_lidar/systems/lamp_lidar/cf_raymetrics.py Wed Dec 06 11:50:41 2017 +0200 @@ -0,0 +1,7 @@ +from ...licel import LicelLidarMeasurement + +import cf_netcdf_parameters + +class CfLidarMeasurement(LicelLidarMeasurement): + + extra_netcdf_parameters = cf_netcdf_parameters
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/atmospheric_lidar/systems/lilas/lilas.py Wed Dec 06 11:50:41 2017 +0200 @@ -0,0 +1,14 @@ +from ...licel import LicelLidarMeasurement +import lilas_netcdf_parameters + + +class LilasLidarMeasurement(LicelLidarMeasurement): + extra_netcdf_parameters = lilas_netcdf_parameters + + def get_PT(self): + ''' Sets the pressure and temperature at station level . + The results are stored in the info dictionary. + ''' + + self.info['Temperature'] = 25.0 + self.info['Pressure'] = 1020.0 \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/atmospheric_lidar/systems/lilas/lilas_netcdf_parameters.py Wed Dec 06 11:50:41 2017 +0200 @@ -0,0 +1,109 @@ +general_parameters = \ + {'System': '\'Lilas\'', + 'Laser_Pointing_Angle': 0, + 'Molecular_Calc': 0, # Use US standard atmosphere + 'Latitude_degrees_north': 50.63, + 'Longitude_degrees_east': 3.07, + 'Altitude_meter_asl': 0.4, + 'Call sign': 'mb',} + +channel_parameters = \ + {'00355.p_an': {'channel_ID': 41, + 'Background_Low': 19000, + 'Background_High': 20000, + 'Laser_Shots': 1000, + 'LR_Input': 1, + 'DAQ_Range': 500.0, + 'Depolarization_Factor': 0,}, + '00355.p_ph': {'channel_ID': 42, + 'Background_Low': 19000, + 'Background_High': 20000, + 'Laser_Shots': 1000, + 'LR_Input': 1, + 'DAQ_Range': 0, + 'Depolarization_Factor': 0,}, + '00355.s_an': {'channel_ID': 41, + 'Background_Low': 19000, + 'Background_High': 20000, + 'Laser_Shots': 1000, + 'LR_Input': 1, + 'DAQ_Range': 500.0, + 'Depolarization_Factor': 0.88,}, + '00355.s_ph': {'channel_ID': 42, + 'Background_Low': 19000, + 'Background_High': 20000, + 'Laser_Shots': 1000, + 'LR_Input': 1, + 'DAQ_Range': 0, + 'Depolarization_Factor': 0.88}, + '00530.o_an': {'channel_ID': 43, + 'Background_Low': 19000, + 'Background_High': 20000, + 'Laser_Shots': 1000, + 'LR_Input': 1, + 'DAQ_Range': 500.0, + 'Depolarization_Factor': 0,}, + '00530.o_ph': {'channel_ID': 44, + 'Background_Low': 19000, + 'Background_High': 20000, + 'Laser_Shots': 1000, + 'LR_Input': 1, + 'DAQ_Range': 0, + 'Depolarization_Factor': 0,}, + '00532.p_an': {'channel_ID': 43, + 'Background_Low': 19000, + 'Background_High': 20000, + 'Laser_Shots': 1000, + 'LR_Input': 1, + 'DAQ_Range': 500.0, + 'Depolarization_Factor': 0,}, + '00532.p_ph': {'channel_ID': 44, + 'Background_Low': 19000, + 'Background_High': 20000, + 'Laser_Shots': 1000, + 'LR_Input': 1, + 'DAQ_Range': 0, + 'Depolarization_Factor': 0,}, + '00532.s_an': {'channel_ID': 43, + 'Background_Low': 19000, + 'Background_High': 20000, + 'Laser_Shots': 1000, + 'LR_Input': 1, + 'DAQ_Range': 500.0, + 'Depolarization_Factor': 0.77,}, + '00532.s_ph': {'channel_ID': 44, + 'Background_Low': 19000, + 'Background_High': 20000, + 'Laser_Shots': 1000, + 'LR_Input': 1, + 'DAQ_Range': 0, + 'Depolarization_Factor': 0.77,}, + '01064.o_an': {'channel_ID': 45, + 'Background_Low': 19000, + 'Background_High': 20000, + 'Laser_Shots': 1000, + 'LR_Input': 1, + 'DAQ_Range': 500.0, + 'Depolarization_Factor': 0,}, + '00387.o_an': {'channel_ID': 45, + 'Background_Low': 19000, + 'Background_High': 20000, + 'Laser_Shots': 1000, + 'LR_Input': 1, + 'DAQ_Range': 500.0, + 'Depolarization_Factor': 0,}, + '00387.o_ph': {'channel_ID': 46, + 'Background_Low': 19000, + 'Background_High': 20000, + 'Laser_Shots': 1000, + 'LR_Input': 1, + 'DAQ_Range': 0, + 'Depolarization_Factor': 0,}, + '00408.o_ph': {'channel_ID': 444, + 'Background_Low': 19000, + 'Background_High': 20000, + 'Laser_Shots': 1000, + 'LR_Input': 1, + 'DAQ_Range': 0, + 'Depolarization_Factor': 0,}, + }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/atmospheric_lidar/systems/musa/musa.py Wed Dec 06 11:50:41 2017 +0200 @@ -0,0 +1,5 @@ +from ...licel import LicelLidarMeasurement +from ..ciao import CiaoMixin + +class MusaLidarMeasurement(CiaoMixin, LicelLidarMeasurement): + pass
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/atmospheric_lidar/systems/musa/musa_2009_netcdf_parameters.py Wed Dec 06 11:50:41 2017 +0200 @@ -0,0 +1,97 @@ +general_parameters = \ +{'System': '\'MUSA\'', + 'Laser_Pointing_Angle': 0, + 'Molecular_Calc': 0, + 'Latitude_degrees_north': 40.601039, + 'Longitude_degrees_east': 15.723771, + 'Altitude_meter_asl': 760.0} # This should be float + +channel_parameters = \ +{'01064.o_an': {'channel_ID': 203, + 'Background_Low': 30000, + 'Background_High': 50000, + 'Laser_Shots': 1200, + 'LR_Input':1, + 'DAQ_Range':500.0, + 'Depolarization_Factor': 0,}, + '00355.o_an': {'channel_ID': 193, + 'Background_Low': 30000, + 'Background_High': 50000, + 'Laser_Shots': 1200, + 'LR_Input':1, + 'DAQ_Range':100.0, + 'Depolarization_Factor': 0,}, + '00355.o_ph': {'channel_ID': 194, + 'Background_Low': 30000, + 'Background_High': 50000, + 'Laser_Shots': 1200, + 'LR_Input':1, + 'DAQ_Range':0, + 'Depolarization_Factor': 0,}, + '00387.o_an': {'channel_ID': 195, + 'Background_Low': 30000, + 'Background_High': 50000, + 'Laser_Shots': 1200, + 'LR_Input':1, + 'DAQ_Range':20.0, + 'Depolarization_Factor': 0,}, + '00387.o_ph': {'channel_ID': 196, + 'Background_Low': 30000, + 'Background_High': 50000, + 'Laser_Shots': 1200, + 'LR_Input':1, + 'DAQ_Range':0, + 'Depolarization_Factor': 0,}, + '00532.p_an': {'channel_ID': 197, + 'Background_Low': 30000, + 'Background_High': 50000, + 'Laser_Shots': 1200, + 'LR_Input':1, + 'DAQ_Range':100.0, + 'Depolarization_Factor': 0,}, + '00532.p_ph': {'channel_ID': 198, + 'Background_Low': 30000, + 'Background_High': 50000, + 'Laser_Shots': 1200, + 'LR_Input':1, + 'DAQ_Range':0, + 'Depolarization_Factor': 0,}, + '00532.s_an': {'channel_ID': 199, + 'Background_Low': 30000, + 'Background_High': 50000, + 'Laser_Shots': 1200, + 'LR_Input':1, + 'DAQ_Range':100.0, + 'Depolarization_Factor': 0.0441,}, + '00532.s_ph': {'channel_ID': 200, + 'Background_Low': 30000, + 'Background_High': 50000, + 'Laser_Shots': 1200, + 'LR_Input':1, + 'DAQ_Range':0, + 'Depolarization_Factor': 0.0441,}, + '00607.o_an': {'channel_ID': 201, + 'Background_Low': 30000, + 'Background_High': 50000, + 'Laser_Shots': 1200, + 'LR_Input':1, + 'DAQ_Range':20.0, + 'Depolarization_Factor': 0,}, + '00607.o_ph': {'channel_ID': 202, + 'Background_Low': 30000, + 'Background_High': 50000, + 'Laser_Shots': 1200, + 'LR_Input':1, + 'DAQ_Range':0, + 'Depolarization_Factor': 0,}, + } + +#For testing. To be read from milos files. +''' +measurement_parameters = \ +{'Pressure_at_Lidar_Station': 930, + 'Temperature_at_Lidar_Station': 15, + 'Measurement_ID': '12345'} +''' + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/atmospheric_lidar/systems/musa/musa_netcdf_parameters.py Wed Dec 06 11:50:41 2017 +0200 @@ -0,0 +1,97 @@ +general_parameters = \ +{'System': '\'MUSA\'', + 'Laser_Pointing_Angle': 0, + 'Molecular_Calc': 0, + 'Latitude_degrees_north': 40.601039, + 'Longitude_degrees_east': 15.723771, + 'Altitude_meter_asl': 760.0} # This should be float + +channel_parameters = \ +{'1064.o_an': {'channel_ID': 203, + 'Background_Low': 30000, + 'Background_High': 50000, + 'Laser_Shots': 1200, + 'LR_Input':1, + 'DAQ_Range':500.0, + 'Depolarization_Factor': 0,}, + '355.o_an': {'channel_ID': 193, + 'Background_Low': 30000, + 'Background_High': 50000, + 'Laser_Shots': 1200, + 'LR_Input':1, + 'DAQ_Range':100.0, + 'Depolarization_Factor': 0,}, + '355.o_ph': {'channel_ID': 194, + 'Background_Low': 30000, + 'Background_High': 50000, + 'Laser_Shots': 1200, + 'LR_Input':1, + 'DAQ_Range':0, + 'Depolarization_Factor': 0,}, + '387.o_an': {'channel_ID': 195, + 'Background_Low': 30000, + 'Background_High': 50000, + 'Laser_Shots': 1200, + 'LR_Input':1, + 'DAQ_Range':20.0, + 'Depolarization_Factor': 0,}, + '387.o_ph': {'channel_ID': 196, + 'Background_Low': 30000, + 'Background_High': 50000, + 'Laser_Shots': 1200, + 'LR_Input':1, + 'DAQ_Range':0, + 'Depolarization_Factor': 0,}, + '532.p_an': {'channel_ID': 197, + 'Background_Low': 30000, + 'Background_High': 50000, + 'Laser_Shots': 1200, + 'LR_Input':1, + 'DAQ_Range':100.0, + 'Depolarization_Factor': 0,}, + '532.p_ph': {'channel_ID': 198, + 'Background_Low': 30000, + 'Background_High': 50000, + 'Laser_Shots': 1200, + 'LR_Input':1, + 'DAQ_Range':0, + 'Depolarization_Factor': 0,}, + '532.s_an': {'channel_ID': 199, + 'Background_Low': 30000, + 'Background_High': 50000, + 'Laser_Shots': 1200, + 'LR_Input':1, + 'DAQ_Range':100.0, + 'Depolarization_Factor': 0.0441,}, + '532.s_ph': {'channel_ID': 200, + 'Background_Low': 30000, + 'Background_High': 50000, + 'Laser_Shots': 1200, + 'LR_Input':1, + 'DAQ_Range':0, + 'Depolarization_Factor': 0.0441,}, + '607.o_an': {'channel_ID': 201, + 'Background_Low': 30000, + 'Background_High': 50000, + 'Laser_Shots': 1200, + 'LR_Input':1, + 'DAQ_Range':20.0, + 'Depolarization_Factor': 0,}, + '607.o_ph': {'channel_ID': 202, + 'Background_Low': 30000, + 'Background_High': 50000, + 'Laser_Shots': 1200, + 'LR_Input':1, + 'DAQ_Range':0, + 'Depolarization_Factor': 0,}, + } + +#For testing. To be read from milos files. +''' +measurement_parameters = \ +{'Pressure_at_Lidar_Station': 930, + 'Temperature_at_Lidar_Station': 15, + 'Measurement_ID': '12345'} +''' + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/atmospheric_lidar/systems/pearl/pearl.py Wed Dec 06 11:50:41 2017 +0200 @@ -0,0 +1,139 @@ +import datetime +import os +import glob + +import numpy as np + +from ...generic import BaseLidarMeasurement, LidarChannel +from ..ciao import CiaoMixin + +import pearl_netcdf_parameters +from report_file import Report_file + + +repository = '/mnt/storage/lidar_data/pearl/' + + +class PearlLidarMeasurement(CiaoMixin, BaseLidarMeasurement): + + extra_netcdf_parameters = pearl_netcdf_parameters + + def import_file(self,filename): + ''' Import a pearl file. ''' + + if filename in self.files: + print "File has been imported already:" + filename + else: + parameters, channels_dict = self.read_pearl_data(filename) + start_time = self._gettime(parameters['Acq_date'],parameters['Acq_start_time']) + + for channel_info in channels_dict.itervalues(): + + if channel_info['name'] == '1064ALR': + name = '1064' + tm = start_time + elif channel_info['name'] == '1064BLR': + name = '1064' + tm = start_time + datetime.timedelta(seconds = 30) + else: + name = channel_info['name'] + tm = start_time + if name not in self.channels: + self.channels[name] = LidarChannel(channel_info) + self.channels[name].data[tm] = channel_info['data'] + self.files.append(filename) + + def read_pearl_data(self, filename): + ''' + Reads a pearl file. + + Returns: + parameters - a dictionary of general parameters + channels - a dictionary with keys the channel number and values lists + [channel name, channel bin width, channel data]. + ''' + f = open(filename,'r') # Open the file + s = f.read(26) # Read the first 26 bytes + + #Get the values in a dictionary + parameters = {} + parameters['Acq_date'] = s[0:10] # First 10 bytes are the acquisition date. + parameters['Acq_start_time'] = s[10:20].strip() # Next 10 bytes are start time. Strip from trailing spaces. + parameters['Channel_no'] = np.fromstring(s[20:22], dtype = np.int16) # Next 2 bytes are the number of channels. Short integer. + parameters['Point_no'] = np.fromstring(s[22:26], dtype = np.int32) # Next 4 bytes are the number of points. Integer. + p = parameters # Just for less typing + + # Read the channel parameters + len = 20*p['Channel_no'] + s = f.read(len) + channels = {} + for (c1,n) in zip(range(0,len, 20),range(p['Channel_no'])): + channels[str(n)] = {'name' : s[c1+10:c1+20].strip(), + 'binwidth' : s[c1:c1+10].strip()} + + #Read the data + data = np.fromfile(f,dtype = np.float32) + #print filename + ': ' + str(data.size) +',' + str(p['Point_no']) +str(p['Channel_no']) + data = data.reshape(p['Point_no'],p['Channel_no']) + for ch in channels.iterkeys(): + channels[ch]['data'] = data[:,int(ch)] + #Close the file + f.close() + return parameters,channels + + +def get_measurement_for_interval(start_time, stop_time): + ''' Searches for a pearl measurement based on a time interval + ''' + + correct_series = None + day = datetime.timedelta(hours = 24) + + if start_time > stop_time: + raise ValueError('Stop time should be after start time') + + + + #The list of directories based on the given time. Same, previous, Next day + possible_paths = [get_path(t) for t in [start_time - day, start_time, start_time + day] + if get_path(t) is not None] + for path in possible_paths: + try: + rf = Report_file(path) + except: + rf = None + + if rf is not None: + for serie in rf.series: + if (start_time > serie.starttime) and (stop_time < serie.endtime): + correct_series = serie + + if correct_series: + files = correct_series.files.get('apd', []) + correct_series.files.get('mcb', []) + m_series = PearlLidarMeasurement(files) + m_subset = m_series.subset_by_time(start_time, stop_time) + return m_subset + else: + return None + + +def get_channel(tim, channel = '1064'): + if channel =='1064': + extension = '*.apd' + else: + extension = '*.mcb' + + dirstr = get_path(tim) + + if not os.path.isdir(dirstr): + raise IOError('No measurement for that date (directory does not exist.).') + #No measurement for that date (directory does not exist.). + files = glob.glob(dirstr + extension) + m = PearlLidarMeasurement(files) + c = m.channels[channel] + return c + + +def get_path(tim): + dirstr = repository + tim.strftime('%Y')+ '/' +tim.strftime('%d%m%Y') + '/' + return dirstr
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/atmospheric_lidar/systems/pearl/pearl_netcdf_parameters.py Wed Dec 06 11:50:41 2017 +0200 @@ -0,0 +1,98 @@ +general_parameters = \ +{'System': '\'PEARL\'', + 'Laser_Pointing_Angle': 0, + 'Molecular_Calc': 0, + 'Latitude_degrees_north': 40.601039, + 'Longitude_degrees_east': 15.723771, + 'Altitude_meter_asl': 760.0} # This should be float + +channel_parameters = \ +{'355HR': {'channel_ID': 8, + 'Background_Low': 30000, + 'Background_High': 50000, + 'Laser_Shots': 3000, + 'LR_Input':1, + 'DAQ_Range':0, + 'Depolarization_Factor': 0,}, + '355LR': {'channel_ID': 14, + 'Background_Low': 30000, + 'Background_High': 50000, + 'Laser_Shots': 3000, + 'LR_Input':1, + 'DAQ_Range':0, + 'Depolarization_Factor': 0,}, + '386HR': {'channel_ID': 9, + 'Background_Low': 30000, + 'Background_High': 50000, + 'Laser_Shots': 3000, + 'LR_Input':1, + 'DAQ_Range':0, + 'Depolarization_Factor': 0,}, + '386LR': {'channel_ID': 15, + 'Background_Low': 30000, + 'Background_High': 50000, + 'Laser_Shots': 3000, + 'LR_Input':1, + 'DAQ_Range':0, + 'Depolarization_Factor': 0,}, + '407HR': {'channel_ID': 17, + 'Background_Low': 30000, + 'Background_High': 50000, + 'Laser_Shots': 3000, + 'LR_Input':1, + 'DAQ_Range':0, + 'Depolarization_Factor': 0,}, + '532HR': {'channel_ID': 7, + 'Background_Low': 30000, + 'Background_High': 50000, + 'Laser_Shots': 3000, + 'LR_Input':1, + 'DAQ_Range':0, + 'Depolarization_Factor': 0,}, + '532LR': {'channel_ID': 13, + 'Background_Low': 30000, + 'Background_High': 50000, + 'Laser_Shots': 3000, + 'LR_Input':1, + 'DAQ_Range':0, + 'Depolarization_Factor': 0,}, + '532SHR': {'channel_ID': 12, + 'Background_Low': 30000, + 'Background_High': 50000, + 'Laser_Shots': 3000, + 'LR_Input':1, + 'DAQ_Range':0, + 'Depolarization_Factor': 0,}, + '532PHR': {'channel_ID': 11, + 'Background_Low': 30000, + 'Background_High': 50000, + 'Laser_Shots': 3000, + 'LR_Input':1, + 'DAQ_Range':0, + 'Depolarization_Factor': 0,}, + '607HR': {'channel_ID': 10, + 'Background_Low': 30000, + 'Background_High': 50000, + 'Laser_Shots': 3000, + 'LR_Input':1, + 'DAQ_Range':0, + 'Depolarization_Factor': 0,}, + '1064': {'channel_ID': 6, + 'Background_Low': 30000, + 'Background_High': 50000, + 'Laser_Shots': 1500, + 'LR_Input':1, + 'DAQ_Range':100, + 'Depolarization_Factor': 0,}, + + } + +#For testing. To be read from milos files. +''' +measurement_parameters = \ +{'Pressure_at_Lidar_Station': 930, + 'Temperature_at_Lidar_Station': 15, + 'Measurement_ID': '12345'} +''' + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/atmospheric_lidar/systems/rali/rali.py Wed Dec 06 11:50:41 2017 +0200 @@ -0,0 +1,33 @@ +import radiometer + +from ...licel import LicelLidarMeasurement + +import rali_netcdf_parameters + +class RaliLidarMeasurement(LicelLidarMeasurement): + extra_netcdf_parameters = rali_netcdf_parameters + + def get_PT(self): + ''' Gets the pressure and temperature from Radiometer data. + If no data file is found, mean values from past measurements are + used. + ''' + + start_time = self.info['start_time'] + stop_time = self.info['stop_time'] + dt = stop_time - start_time + mean_time = start_time + dt/2 + + meteo_triplet = radiometer.get_mean_PT(mean_time) + + if meteo_triplet: + pressure, temperature, humidity = meteo_triplet + else: + print "Radiometer meteo data not available. Using past values." + pressure = radiometer.P_mean[mean_time.month - 1, mean_time.hour] + temperature = radiometer.T_mean[mean_time.month - 1, mean_time.hour] + + self.info['Temperature'] = temperature - 273.15 + self.info['Pressure'] = pressure + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/atmospheric_lidar/systems/rali/rali_depol.py Wed Dec 06 11:50:41 2017 +0200 @@ -0,0 +1,5 @@ +from ...licel_depol import LicelCalibrationMeasurement +import rali_depolarization_parameters + +class RALICalibrationMeasurement(LicelCalibrationMeasurement): + extra_netcdf_parameters = rali_depolarization_parameters
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/atmospheric_lidar/systems/rali/rali_depolarization_parameters.py Wed Dec 06 11:50:41 2017 +0200 @@ -0,0 +1,80 @@ +general_parameters = \ +{'System': '\'RALI\'', + 'Call sign': 'bu', + 'Laser_Pointing_Angle': 0, + 'Molecular_Calc': 0, + 'Latitude_degrees_north': 44.348, + 'Longitude_degrees_east': 26.029, + 'Altitude_meter_asl': 93.0} # This should be float + +# Change to channel_parameters to use all channels. For testing I define only photon counting channels below. +channel_parameters = \ +{ '00532.p_an_p45': {'channel_ID': 383, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3000, + 'LR_Input': 1, + 'DAQ_Range': 100.0, + 'Depolarization_Factor': 0, + 'Pol_Calib_Range_Min': 1000, + 'Pol_Calib_Range_Max': 3000}, + '00532.p_ph_p45': {'channel_ID': 378, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3000, + 'LR_Input': 1, + 'DAQ_Range': 0, + 'Depolarization_Factor': 0, + 'Pol_Calib_Range_Min': 1000, + 'Pol_Calib_Range_Max': 3000}, + '00532.s_an_p45': {'channel_ID': 385 , + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3000, + 'LR_Input': 1, + 'DAQ_Range': 20.0, + 'Pol_Calib_Range_Min': 1000, + 'Pol_Calib_Range_Max': 3000}, + '00532.s_ph_p45': {'channel_ID': 380, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3000, + 'LR_Input': 1, + 'DAQ_Range': 0, + 'Pol_Calib_Range_Min': 1000, + 'Pol_Calib_Range_Max': 3000}, + '00532.p_an_m45': {'channel_ID': 384, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3000, + 'LR_Input': 1, + 'DAQ_Range': 100.0, + 'Depolarization_Factor': 0, + 'Pol_Calib_Range_Min': 1000, + 'Pol_Calib_Range_Max': 3000}, + '00532.p_ph_m45': {'channel_ID': 379, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3000, + 'LR_Input': 1, + 'DAQ_Range': 0, + 'Depolarization_Factor': 0, + 'Pol_Calib_Range_Min': 1000, + 'Pol_Calib_Range_Max': 3000}, + '00532.s_an_m45': {'channel_ID': 386, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3000, + 'LR_Input': 1, + 'DAQ_Range': 20.0, + 'Pol_Calib_Range_Min': 1000, + 'Pol_Calib_Range_Max': 3000}, + '00532.s_ph_m45': {'channel_ID': 382, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3000, + 'LR_Input': 1, + 'DAQ_Range': 0, + 'Pol_Calib_Range_Min': 1000, + 'Pol_Calib_Range_Max': 3000}, + } \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/atmospheric_lidar/systems/rali/rali_netcdf_parameters.py Wed Dec 06 11:50:41 2017 +0200 @@ -0,0 +1,85 @@ +general_parameters = \ +{'System': '\'RALI\'', + 'Laser_Pointing_Angle': 0, + 'Molecular_Calc': 0, + 'Latitude_degrees_north': 44.348, + 'Longitude_degrees_east': 26.029, + 'Altitude_meter_asl': 93.0, + 'Call sign': 'bu', } # This should be float + +channel_parameters = \ +{'01064.o_an': {'channel_ID': 89, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3000, + 'LR_Input': 1, + 'DAQ_Range': 100.0,}, + '00355.o_an': {'channel_ID': 98, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3000, + 'LR_Input': 1, + 'DAQ_Range': 100.0,}, + '00355.o_ph': {'channel_ID': 99, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3000, + 'LR_Input': 1, + 'DAQ_Range': 0, + 'Depolarization_Factor': 0,}, + '00387.o_an': {'channel_ID': 90, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3000, + 'LR_Input': 1, + 'DAQ_Range': 100.0,}, + '00387.o_ph': {'channel_ID': 91, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3000, + 'LR_Input': 1, + 'DAQ_Range': 0,}, + '00532.p_an': {'channel_ID': 94, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3000, + 'LR_Input': 1, + 'DAQ_Range': 100.0,}, + '00532.p_ph': {'channel_ID': 95, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3000, + 'LR_Input': 1, + 'DAQ_Range': 0,}, + '00532.s_an': {'channel_ID': 96, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3000, + 'LR_Input': 1, + 'DAQ_Range': 20.0,}, + '00532.s_ph': {'channel_ID': 97, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3000, + 'LR_Input': 1, + 'DAQ_Range': 0,}, + '00607.o_an': {'channel_ID': 92, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3000, + 'LR_Input': 1, + 'DAQ_Range': 20.0,}, + '00607.o_ph': {'channel_ID': 93, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3000, + 'LR_Input':1, + 'DAQ_Range':20.0,}, + '00408.o_ph': {'channel_ID': 170, + 'Background_Low': 50000, + 'Background_High': 60000, + 'Laser_Shots': 3000, + 'LR_Input': 1, + 'DAQ_Range': 0,}, + } +