ulalume3@99: .. _netcdf_file: ulalume3@99: ulalume3@99: The SCC input netCDF file format ulalume3@99: ================================ ulalume3@99: giuseppe@130: A more detailed version of this document can be found in this :download:`pdf file <../files/NetCDF_input_file_v3_5.pdf>`. ulalume3@99: ulalume3@99: .. note:: ulalume3@99: ioannis@120: You can check the format of the files you create using the linked `script `_ . ulalume3@99: ulalume3@99: ulalume3@99: Rationale ulalume3@99: --------- ulalume3@99: ulalume3@99: The Single Calculus Chain (SCC) is composed by three different modules: ulalume3@99: ulalume3@99: - pre-processing module (*ELPP*) ulalume3@99: ulalume3@99: - optical processing module (*ELDA*) ulalume3@99: ulalume3@99: - depolarization calibrator module (*ELDEC*) ulalume3@99: ulalume3@99: To perfom aerosol optical retrievals the SCC needs not only the raw ulalume3@99: lidar data but also a certain number of parameters to use in both ulalume3@99: pre-processing and optical processing stages. The SCC gets these ulalume3@99: parameters looking at two different locations: ulalume3@99: ulalume3@99: - Single Calculus Chain relational database (SCC\_DB) ulalume3@99: ulalume3@99: - Input files ulalume3@99: ulalume3@99: There are some paramenters that can be found only in the input files ulalume3@99: (those ones changing from measurement to measurement), others that can ulalume3@99: be found only in the SCC\_DB and other ones that can be found in both ulalume3@99: these locations. In the last case, if a particular parameter is needed, ulalume3@99: the SCC will search first in the input files and then in SCC\_DB. If the ulalume3@99: parameter is found in the input files, the SCC will keep it without ulalume3@99: looking into SCC\_DB. ulalume3@99: ulalume3@99: The input files have to be submitted to the SCC in NetCDF format. At ulalume3@99: present the SCC can handle four different types of input files: ulalume3@99: ulalume3@99: 1. Raw Lidar Data ulalume3@99: ulalume3@99: 2. Sounding Data ulalume3@99: ulalume3@99: 3. Overlap ulalume3@99: ulalume3@99: 4. Lidar Ratio ulalume3@99: ulalume3@99: As already mentioned, the *Raw lidar data* file contains not only the ulalume3@99: raw lidar data but also other parameters to use to perform the ulalume3@99: pre-processing and optical processing. The *Sounding Data* file contains ulalume3@99: the data coming from a correlative radiosounding and it is used by the ulalume3@99: SCC for molecular density calculation. The *Overlap* file contains the ulalume3@99: measured overlap function. The *Lidar Ratio* file contains a lidar ratio ulalume3@99: profile to use in elastic backscatter retrievals. The *Raw Lidar Data* ulalume3@99: file is of course mandatory and the *Sounding Data*, *Overlap* and ulalume3@99: *Lidar Ratio* files are optional. If *Sounding Data* file is not ulalume3@99: submitted by the user, the molecular density will be calculated by the giuseppe@128: SCC using model forecast/re-analysis or in case these are not available using the "US Standard Atmosphere 1976". If the *Overlap* file is ulalume3@99: not submitted by the user, the SCC will get the full overlap height from ulalume3@99: SCC\_DB and it will produce optical results starting from this height. ulalume3@99: If *Lidar Ratio* file is not submitted by the user, the SCC will ulalume3@99: consider a fixed value for lidar ratio got from SCC\_DB. ulalume3@99: ulalume3@99: The user can decide to submit all these files or any number of them (of ulalume3@99: course the file *Raw Lidar Data* is mandatory). For example the user can ulalume3@99: submit together with the *Raw Lidar Data* file only the *Sounding Data* ulalume3@99: file or only the *Overlap* file. ulalume3@99: ulalume3@99: This document provides a detailed example about the structure of ulalume3@99: the NetCDF input files to use for SCC data submission. All Earlinet ulalume3@99: groups should read it carefully because they have to produce such kind ulalume3@99: of input files if they want to use the SCC for their standard lidar ulalume3@99: retrievals. ulalume3@99: ulalume3@99: Additionaly, the linked :download:`pdf file <../files/NetCDF_input_file_v3.pdf>` contains ulalume3@99: tables with all mandatory and optional variables for the netcdf files ulalume3@99: accepted by the SCC. Table 1 contains a list of dimensions, variables and ulalume3@99: global attributes that can be used in the NetCDF *Raw Lidar Data* ulalume3@99: input file. For each of them it is indicated: ulalume3@99: ulalume3@99: - The name. For the multidimensional variables also the corresponding ulalume3@99: dimensions are reported ulalume3@99: ulalume3@99: - A description explaining the meaning ulalume3@99: ulalume3@99: - The type ulalume3@99: ulalume3@99: - If it is mandatory or optional ulalume3@99: ulalume3@99: As already mentioned, the SCC can get some parameters looking first in ulalume3@99: the *Raw Lidar Data* input file and then into SCC\_DB. This means that ulalume3@99: to use the parameters stored in SCC\_DB the optional variables or ulalume3@99: optional global attributes must not appear within *Raw Lidar Data* file. ulalume3@99: This is the suggested and recommended way to use the SCC. Please include ulalume3@99: optional parameters in the *Raw Lidar Data* only as an exception. ulalume3@99: ulalume3@99: Tables 2, 3, and 4 report all the ulalume3@99: information about the structure of *Sounding Data*, *Overlap* and *Lidar ulalume3@99: Ratio* input files respectively. ulalume3@99: ulalume3@99: ulalume3@99: Example ulalume3@99: ------- ulalume3@99: ulalume3@99: Let's now consider an example of *Raw Lidar Data* input file. Suppose ulalume3@99: we want to generate NetCDF input file corresponding to a measurement ulalume3@99: with the following properties: ulalume3@99: ulalume3@99: +----------------------+-------------------------------------------+ ulalume3@99: | Start Date | 30\ :sup:`th` January 2009 | ulalume3@99: +----------------------+-------------------------------------------+ ulalume3@99: | Start Time UT | 00:00:01 | ulalume3@99: +----------------------+-------------------------------------------+ ulalume3@99: | Stop Time UT | 00:05:01 | ulalume3@99: +----------------------+-------------------------------------------+ ulalume3@99: | Station Name | Dummy station | ulalume3@99: +----------------------+-------------------------------------------+ ulalume3@99: | Earlinet call-sign | cc | ulalume3@99: +----------------------+-------------------------------------------+ ulalume3@99: | Pointing angle | 5 degrees with respect to the zenith | ulalume3@99: +----------------------+-------------------------------------------+ ulalume3@99: ulalume3@99: ulalume3@99: Moreover suppose that this measurement is composed by the following ulalume3@99: lidar channels: ulalume3@99: ulalume3@99: #. 1064 lidar channel ulalume3@99: ulalume3@99: +------------------------------+-------------------------------+ ulalume3@99: | Emission wavelength=1064nm | Detection wavelength=1064nm | ulalume3@99: +------------------------------+-------------------------------+ ulalume3@99: | Time resolution=30s | Number of laser shots=1500 | ulalume3@99: +------------------------------+-------------------------------+ ulalume3@99: | Number of bins=3000 | Detection mode=analog | ulalume3@99: +------------------------------+-------------------------------+ ulalume3@99: | Range resolution=7.5m | Polarization state=total | ulalume3@99: +------------------------------+-------------------------------+ ulalume3@99: ulalume3@99: #. 532 cross lidar channel ulalume3@99: ulalume3@99: +-----------------------------+------------------------------------------+ ulalume3@99: | Emission wavelength=532nm | Detection wavelength=532nm | ulalume3@99: +-----------------------------+------------------------------------------+ ulalume3@99: | Time resolution=60s | Number of laser shots=3000 | ulalume3@99: +-----------------------------+------------------------------------------+ ulalume3@99: | Number of bins=5000 | Detection mode=photoncounting | ulalume3@99: +-----------------------------+------------------------------------------+ ulalume3@99: | Range resolution=15m | Polarization state=cross (transmitted) | ulalume3@99: +-----------------------------+------------------------------------------+ ulalume3@99: ulalume3@99: #. 532 parallel lidar channel ulalume3@99: ulalume3@99: +-----------------------------+-------------------------------------------+ ulalume3@99: | Emission wavelength=532nm | Detection wavelength=532nm | ulalume3@99: +-----------------------------+-------------------------------------------+ ulalume3@99: | Time resolution=60s | Number of laser shots=3000 | ulalume3@99: +-----------------------------+-------------------------------------------+ ulalume3@99: | Number of bins=5000 | Detection mode=photoncounting | ulalume3@99: +-----------------------------+-------------------------------------------+ ulalume3@99: | Range resolution=15m | Polarization state=parallel (reflected) | ulalume3@99: +-----------------------------+-------------------------------------------+ ulalume3@99: ulalume3@99: #. | 607 :math:`N_2` vibrational Raman channel ulalume3@99: ulalume3@99: +-----------------------------+---------------------------------+ ulalume3@99: | Emission wavelength=532nm | Detection wavelength=607nm | ulalume3@99: +-----------------------------+---------------------------------+ ulalume3@99: | Time resolution=60s | Number of laser shots=3000 | ulalume3@99: +-----------------------------+---------------------------------+ ulalume3@99: | Number of bins=5000 | Detection mode=photoncounting | ulalume3@99: +-----------------------------+---------------------------------+ ulalume3@99: | Range resolution=15m | | ulalume3@99: +-----------------------------+---------------------------------+ ulalume3@99: ulalume3@99: Finally let's assume we have also performed dark measurements before the ulalume3@99: lidar measurements from the 23:50:01 UT up to 23:53:01 UT of ulalume3@99: 29\ :sup:`th` January 2009. ulalume3@99: ulalume3@99: ulalume3@99: Dimensions ulalume3@99: ~~~~~~~~~~ ulalume3@99: ulalume3@99: Looking at table 1 of the pdf file we have to fix the following dimensions: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: points ulalume3@99: channels ulalume3@99: time ulalume3@99: nb_of_time_scales ulalume3@99: scan_angles ulalume3@99: time_bck ulalume3@99: ulalume3@99: The dimension ``time`` is unlimited so we don’t have to fix it. ulalume3@99: We have 4 lidar channels so: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: channels=4 ulalume3@99: ulalume3@99: Regarding the dimension ``points`` we have only one channel with a ulalume3@99: number of vertical bins equal to 3000 (the 1064nm) and all other ulalume3@99: channels with 5000 vertical bins. In cases like this the dimension ulalume3@99: ``points`` has to be fixed to the maximum number of vertical bins so: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: points=5000 ulalume3@99: ulalume3@99: Moreover only one channel (1064nm) is acquired with a time resolution of ulalume3@99: 30 seconds, all the other channels have a time resolution of 60 seconds. ulalume3@99: This means that we have to define two different time scales. We have to ulalume3@99: set: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: nb_of_time_scales=2 ulalume3@99: ulalume3@99: The measurement is performed only at one scan angle (5 degrees with ulalume3@99: respect to the zenith) so: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: scan_angles=1 ulalume3@99: ulalume3@99: We have 3 minutes of dark measurements and two different time scales one ulalume3@99: with 60 seconds time resolution and the other one with 30 seconds time ulalume3@99: resolution. So we will have 3 different dark profiles for the channels ulalume3@99: acquired with the first time scale and 6 for the lidar channels acquired ulalume3@99: with the second time scale. We have to fix the dimension ``time_bck`` as ulalume3@99: the maximum between these values: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: time_bck=6 ulalume3@99: ulalume3@99: ulalume3@99: Variables ulalume3@99: ~~~~~~~~~ ulalume3@99: ulalume3@99: In this section it will be explained how to fill all the possible ulalume3@99: variables either mandatory or optional of *Raw Lidar Data* input file. ulalume3@99: ulalume3@99: - | ``Raw_Data_Start_Time(time, nb_of_time_scales)`` ulalume3@99: | This 2 dimensional mandatory array has to contain the acquisition ulalume3@99: start time (in seconds from the time given by the global attribute ulalume3@99: ``RawData_Start_Time_UT``) of each lidar profile. In this example ulalume3@99: we have two different time scales: one is characterized by steps of ulalume3@99: 30 seconds (the 1064nm is acquired with this time scale) the other ulalume3@99: by steps of 60 seconds (532cross, 532parallel and 607nm). Moreover ulalume3@99: the measurement start time is 00:00:01 UT and the measurement stop ulalume3@99: time is 00:05:01 UT. In this case we have to define: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: Raw_Data_Start_Time = ulalume3@99: 0, 0, ulalume3@99: 60, 30, ulalume3@99: 120, 60, ulalume3@99: 180, 90, ulalume3@99: 240, 120, ulalume3@99: _, 150, ulalume3@99: _, 180, ulalume3@99: _, 210, ulalume3@99: _, 240, ulalume3@99: _, 270 ; ulalume3@99: ulalume3@99: The order used to fill this array defines the correspondence between ulalume3@99: the different time scales and the time scale index. In this example ulalume3@99: we have a time scale index of 0 for the time scale with steps of 60 ulalume3@99: seconds and a time scale index of 1 for the other one. ulalume3@99: ulalume3@99: - | ``Raw_Data_Stop_Time(time, nb_of_time_scales)`` ulalume3@99: | The same as previous item but for the data acquisition stop time. ulalume3@99: Following a similar procedure we have to define: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: Raw_Data_Stop_Time = ulalume3@99: 60, 30, ulalume3@99: 120, 60, ulalume3@99: 180, 90, ulalume3@99: 240, 120, ulalume3@99: 300, 150, ulalume3@99: _, 180, ulalume3@99: _, 210, ulalume3@99: _, 240, ulalume3@99: _, 270, ulalume3@99: _, 300 ; ulalume3@99: ulalume3@99: - | ``Raw_Lidar_Data(time, channels, points)`` ulalume3@99: | This 3 dimensional mandatory array has to be filled with the ulalume3@99: time-series of raw lidar data. The photoncounting profiles have to ulalume3@99: submitted in counts (so as integers) while the analog ones in mV. ulalume3@99: The order the user chooses to fill this array defines the ulalume3@99: correspondence between channel index and lidar data. ulalume3@99: | For example if we fill this array in such way that: ulalume3@99: ulalume3@99: +-------------------------------------+---------------------------------------+ ulalume3@99: | ``Raw_Lidar_Data(time,0,points)`` | is the time-series of 1064 nm | ulalume3@99: +-------------------------------------+---------------------------------------+ ulalume3@99: | ``Raw_Lidar_Data(time,1,points)`` | is the time-series of 532 cross | ulalume3@99: +-------------------------------------+---------------------------------------+ ulalume3@99: | ``Raw_Lidar_Data(time,2,points)`` | is the time-series of 532 parallel | ulalume3@99: +-------------------------------------+---------------------------------------+ ulalume3@99: | ``Raw_Lidar_Data(time,3,points)`` | is the time-series of 607 nm | ulalume3@99: +-------------------------------------+---------------------------------------+ ulalume3@99: ulalume3@99: | ulalume3@99: | from now on the channel index 0 is associated to the 1064 channel, ulalume3@99: 1 to the 532 cross, 2 to the 532 parallel and 3 to the 607nm. ulalume3@99: ulalume3@99: - | ``Raw_Bck_Start_Time(time_bck, nb_of_time_scales)`` ulalume3@99: | This 2 dimensional optional array has to contain the acquisition ulalume3@99: start time (in seconds from the time given by the global attribute ulalume3@99: ``RawBck_Start_Time_UT``) of each dark measurements profile. ulalume3@99: Following the same procedure used for the variable ulalume3@99: ``Raw_Data_Start_Time`` we have to define: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: Raw_Bck_Start_Time = ulalume3@99: 0, 0, ulalume3@99: 60, 30, ulalume3@99: 120, 60, ulalume3@99: _, 90, ulalume3@99: _, 120, ulalume3@99: _, 150; ulalume3@99: ulalume3@99: - | ``Raw_Bck_Stop_Time(time_bck, nb_of_time_scales)`` ulalume3@99: | The same as previous item but for the dark acquisition stop time. ulalume3@99: Following a similar procedure we have to define: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: Raw_Bck_Stop_Time = ulalume3@99: 60, 30, ulalume3@99: 120, 60, ulalume3@99: 180, 90, ulalume3@99: _, 120, ulalume3@99: _, 150, ulalume3@99: _, 180 ; ulalume3@99: ulalume3@99: - | ``Background_Profile(time_bck, channels, points)`` ulalume3@99: | This 3 dimensional optional array has to be filled with the ulalume3@99: time-series of the dark measurements data. The photoncounting ulalume3@99: profiles have to submitted in counts (so as integers) while the ulalume3@99: analog ones in mV. The user has to fill this array following the ulalume3@99: same order used in filling the array ``Raw_Lidar_Data``: ulalume3@99: ulalume3@99: +---------------------------------------------+-------------------------------------+ ulalume3@99: | ``Background_Profile(time_bck,0,points)`` | dark time-series at 1064 nm | ulalume3@99: +---------------------------------------------+-------------------------------------+ ulalume3@99: | ``Background_Profile(time_bck,1,points)`` | dark time-series at 532 cross | ulalume3@99: +---------------------------------------------+-------------------------------------+ ulalume3@99: | ``Background_Profile(time_bck,2,points)`` | dark time-series at 532 parallel | ulalume3@99: +---------------------------------------------+-------------------------------------+ ulalume3@99: | ``Background_Profile(time_bck,3,points)`` | dark time-series at 607 nm | ulalume3@99: +---------------------------------------------+-------------------------------------+ ulalume3@99: ulalume3@99: | ulalume3@99: ulalume3@99: - | ``channel_ID(channels)`` ulalume3@99: | This mandatory array provides the link between the channel index ulalume3@99: within the *Raw Lidar Data* input file and the channel ID in ulalume3@99: SCC\_DB. To fill this variable the user has to know which channel ulalume3@99: IDs in SCC\_DB correspond to his lidar channels. For this purpose ulalume3@99: the SCC, in its final version will provide to the user a special ulalume3@99: tool to get these channel IDs through a Web interface. At the ulalume3@99: moment this interface is not yet available and these channel IDs ulalume3@99: will be communicated directly to the user by the NA5 people. ulalume3@99: | Anyway to continue the example let’s suppose that the four lidar ulalume3@99: channels taken into account are mapped into SCC\_DB with the ulalume3@99: following channel IDs: ulalume3@99: ulalume3@99: +----------------+-----------------+ ulalume3@99: | 1064 nm | channel ID=7 | ulalume3@99: +----------------+-----------------+ ulalume3@99: | 532 cross | channel ID=5 | ulalume3@99: +----------------+-----------------+ ulalume3@99: | 532 parallel | channel ID=6 | ulalume3@99: +----------------+-----------------+ ulalume3@99: | 607 nm | channel ID=8 | ulalume3@99: +----------------+-----------------+ ulalume3@99: ulalume3@99: | ulalume3@99: | In this case we have to define: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: channel_ID = 7, 5, 6, 8 ; ulalume3@99: ulalume3@99: - | ``id_timescale(channels)`` ulalume3@99: | This mandatory array is introduced to determine which time scale is ulalume3@99: used for the acquisition of each lidar channel. In particular this ulalume3@99: array defines the link between the channel index and the time scale ulalume3@99: index. In our example we have two different time scales. Filling ulalume3@99: the arrays ``Raw_Data_Start_Time`` and ``Raw_Data_Stop_Time`` we ulalume3@99: have defined a time scale index of 0 for the time scale with steps ulalume3@99: of 60 seconds and a time scale index of 1 for the other one with ulalume3@99: steps of 30 seconds. In this way this array has to be set as: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: id_timescale = 1, 0, 0, 0 ; ulalume3@99: ulalume3@99: - | ``Laser_Pointing_Angle(scan_angles)`` ulalume3@99: | This mandatory array contains all the scan angles used in the ulalume3@99: measurement. In our example we have only one scan angle of 5 ulalume3@99: degrees with respect to the zenith, so we have to define: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: Laser_Pointing_Angle = 5 ; ulalume3@99: ulalume3@99: - | ``Laser_Pointing_Angle_of_Profiles(time, nb_of_time_scales)`` ulalume3@99: | This mandatory array is introduced to determine which scan angle is ulalume3@99: used for the acquisition of each lidar profile. In particular this ulalume3@99: array defines the link between the time and time scales indexes and ulalume3@99: the scan angle index. In our example we have a single scan angle ulalume3@99: that has to correspond to the scan angle index 0. So this array has ulalume3@99: to be defined as: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: Laser_Pointing_Angle_of_Profiles = ulalume3@99: 0, 0, ulalume3@99: 0, 0, ulalume3@99: 0, 0, ulalume3@99: 0, 0, ulalume3@99: 0, 0, ulalume3@99: _, 0, ulalume3@99: _, 0, ulalume3@99: _, 0, ulalume3@99: _, 0, ulalume3@99: _, 0 ; ulalume3@99: ulalume3@99: - | ``Laser_Shots(time, channels)`` ulalume3@99: | This mandatory array stores the laser shots accumulated at each ulalume3@99: time for each channel. In our example the number of laser shots ulalume3@99: accumulated is 1500 for the 1064nm channels and 3000 for all the ulalume3@99: other channels. Moreover the laser shots do not change with the ulalume3@99: time. So we have to define this array as: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: Laser_Shots = ulalume3@99: 1500, 3000, 3000, 3000, ulalume3@99: 1500, 3000, 3000, 3000, ulalume3@99: 1500, 3000, 3000, 3000, ulalume3@99: 1500, 3000, 3000, 3000, ulalume3@99: 1500, 3000, 3000, 3000, ulalume3@99: 1500, _, _, _, ulalume3@99: 1500, _, _, _, ulalume3@99: 1500, _, _, _, ulalume3@99: 1500, _, _, _, ulalume3@99: 1500, _, _, _ ; ulalume3@99: ulalume3@99: - | ``Emitted_Wavelength(channels)`` ulalume3@99: | This optional array defines the link between the channel index and ulalume3@99: the emission wavelength for each lidar channel. The wavelength has ulalume3@99: to be expressed in nm. This information can be also taken from ulalume3@99: SCC\_DB. In our example we have: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: Emitted_Wavelength = 1064, 532, 532, 532 ; ulalume3@99: ulalume3@99: - | ``Detected_Wavelength(channels)`` ulalume3@99: | This optional array defines the link between the channel index and ulalume3@99: the detected wavelength for each lidar channel. Here detected ulalume3@99: wavelength means the value of center of interferential filter ulalume3@99: expressed in nm. This information can be also taken from SCC\_DB. ulalume3@99: In our example we have: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: Detected_Wavelength = 1064, 532, 532, 607 ; ulalume3@99: ulalume3@99: - | ``Raw_Data_Range_Resolution(channels)`` ulalume3@99: | This optional array defines the link between the channel index and ulalume3@99: the raw range resolution for each channel. If the scan angle is ulalume3@99: different from zero this quantity is different from the vertical ulalume3@99: resolution. More precisely if :math:`\alpha` is the scan angle used ulalume3@99: and :math:`\Delta z` is the range resolution the vertical ulalume3@99: resolution is calculated as :math:`\Delta ulalume3@99: z'=\Delta z \cos\alpha`. This array has to be filled with ulalume3@99: :math:`\Delta z` and not with :math:`\Delta z'`. The unit is ulalume3@99: meters. This information can be also taken from SCC\_DB. In our ulalume3@99: example we have: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: Raw_Data_Range_Resolution = 7.5, 15.0, 15.0, 15.0 ; ulalume3@99: ulalume3@99: - | ``Scattering_Mechanism(channels)`` ulalume3@99: | This optional array defines the scattering mechanism involved in ulalume3@99: each lidar channel. In particular the following values are adopted: ulalume3@99: ulalume3@99: +-----+---------------------------------------------------+ ulalume3@99: | 0 | Total elastic backscatter | ulalume3@99: +-----+---------------------------------------------------+ ulalume3@99: | 1 | N\ :math:`_2` vibrational Raman backscatter | ulalume3@99: +-----+---------------------------------------------------+ ulalume3@99: | 2 | Cross polarization elastic backscatter | ulalume3@99: +-----+---------------------------------------------------+ ulalume3@99: | 3 | Parallel polarization elastic backscatter | ulalume3@99: +-----+---------------------------------------------------+ ulalume3@99: | 4 | H\ :math:`_2`\ O vibrational Raman backscatter | ulalume3@99: +-----+---------------------------------------------------+ ulalume3@99: | 5 | Rotational Raman low quantum number | ulalume3@99: +-----+---------------------------------------------------+ ulalume3@99: | 6 | Rotational Raman high quantum number | ulalume3@99: +-----+---------------------------------------------------+ ulalume3@99: ulalume3@99: | ulalume3@99: | This information can be also taken from SCC\_DB. In our example we ulalume3@99: have: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: Scattering_Mechanism = 0, 2, 3, 1 ; ulalume3@99: ulalume3@99: - | ``Signal_Type(channels)`` ulalume3@99: | This optional array defines the type of signal involved in each ulalume3@99: lidar channel. In particular the following values are adopted: ulalume3@99: ulalume3@99: +------+--------------------------------------------------------------+ ulalume3@99: | 0 | Total elastic | ulalume3@99: +------+--------------------------------------------------------------+ ulalume3@99: | 1 | Total elastic near range | ulalume3@99: +------+--------------------------------------------------------------+ ulalume3@99: | 2 | Total elastic far range | ulalume3@99: +------+--------------------------------------------------------------+ ulalume3@99: | 3 | N\ :math:`_2` vibrational Raman | ulalume3@99: +------+--------------------------------------------------------------+ ulalume3@99: | 4 | N\ :math:`_2` vibrational Raman near range | ulalume3@99: +------+--------------------------------------------------------------+ ulalume3@99: | 5 | N\ :math:`_2` vibrational Raman far range | ulalume3@99: +------+--------------------------------------------------------------+ ulalume3@99: | 6 | Elastic polarization reflected | ulalume3@99: +------+--------------------------------------------------------------+ ulalume3@99: | 7 | Elastic polarization transmitted | ulalume3@99: +------+--------------------------------------------------------------+ ulalume3@99: | 8 | Rotational Raman line close to elastic line | ulalume3@99: +------+--------------------------------------------------------------+ ulalume3@99: | 9 | Rotational Raman line far from elastic line | ulalume3@99: +------+--------------------------------------------------------------+ ulalume3@99: | 10 | Elastic polarization reflected near range | ulalume3@99: +------+--------------------------------------------------------------+ ulalume3@99: | 11 | Elastic polarization reflected far range | ulalume3@99: +------+--------------------------------------------------------------+ ulalume3@99: | 12 | Elastic polarization transmitted near range | ulalume3@99: +------+--------------------------------------------------------------+ ulalume3@99: | 13 | Elastic polarization transmitted far range | ulalume3@99: +------+--------------------------------------------------------------+ ulalume3@99: | 14 | H\ :math:`_2`\ O vibrational Raman backscatter | ulalume3@99: +------+--------------------------------------------------------------+ ulalume3@99: | 15 | Rotational Raman line far from elastic line near range | ulalume3@99: +------+--------------------------------------------------------------+ ulalume3@99: | 16 | Rotational Raman line far from elastic line far range | ulalume3@99: +------+--------------------------------------------------------------+ ulalume3@99: | 17 | Rotational Raman line close to elastic line near range | ulalume3@99: +------+--------------------------------------------------------------+ ulalume3@99: | 18 | Rotational Raman line close to elastic line far range | ulalume3@99: +------+--------------------------------------------------------------+ ulalume3@99: | 19 | H\ :math:`_2`\ O vibrational Raman backscatter near range | ulalume3@99: +------+--------------------------------------------------------------+ ulalume3@99: | 20 | H\ :math:`_2`\ O vibrational Raman backscatter far range | ulalume3@99: +------+--------------------------------------------------------------+ ulalume3@99: | 21 | Total elastic ultra near range | ulalume3@99: +------+--------------------------------------------------------------+ ulalume3@99: | 22 | +45 rotated elastic polarization transmitted | ulalume3@99: +------+--------------------------------------------------------------+ ulalume3@99: | 23 | +45 rotated elastic polarization reflected | ulalume3@99: +------+--------------------------------------------------------------+ ulalume3@99: | 24 | -45 rotated elastic polarization transmitted | ulalume3@99: +------+--------------------------------------------------------------+ ulalume3@99: | 25 | -45 rotated elastic polarization reflected | ulalume3@99: +------+--------------------------------------------------------------+ ulalume3@99: | 26 | +45 rotated elastic polarization transmitted near range | ulalume3@99: +------+--------------------------------------------------------------+ ulalume3@99: | 27 | +45 rotated elastic polarization transmitted far range | ulalume3@99: +------+--------------------------------------------------------------+ ulalume3@99: | 28 | +45 rotated elastic polarization reflected near range | ulalume3@99: +------+--------------------------------------------------------------+ ulalume3@99: | 29 | +45 rotated elastic polarization reflected far range | ulalume3@99: +------+--------------------------------------------------------------+ ulalume3@99: | 30 | -45 rotated elastic polarization transmitted near range | ulalume3@99: +------+--------------------------------------------------------------+ ulalume3@99: | 31 | -45 rotated elastic polarization transmitted far range | ulalume3@99: +------+--------------------------------------------------------------+ ulalume3@99: | 32 | -45 rotated elastic polarization reflected near range | ulalume3@99: +------+--------------------------------------------------------------+ ulalume3@99: | 33 | -45 rotated elastic polarization reflected far range | ulalume3@99: +------+--------------------------------------------------------------+ ulalume3@99: ulalume3@99: | ulalume3@99: | This information can be also taken from SCC\_DB. In our example we ulalume3@99: have: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: Signal_Type = 0, 7, 6, 3 ; ulalume3@99: ulalume3@99: - | ``Acquisition_Mode(channels)`` ulalume3@99: | This optional array defines the acquisition mode (analog or ulalume3@99: photoncounting) involved in each lidar channel. In particular a ulalume3@99: value of 0 means analog mode and 1 photoncounting mode. This ulalume3@99: information can be also taken from SCC\_DB. In our example we have: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: Acquisition_Mode = 0, 1, 1, 1 ; ulalume3@99: ulalume3@99: - | ``Laser_Repetition_Rate(channels)`` ulalume3@99: | This optional array defines the repetition rate in Hz used to ulalume3@99: acquire each lidar channel. This information can be also taken from ulalume3@99: SCC\_DB. In our example we are supposing we have only one laser ulalume3@99: with a repetition rate of 50 Hz so we have to set: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: Laser_Repetition_Rate = 50, 50, 50, 50 ; ulalume3@99: ulalume3@99: - | ``Dead_Time(channels)`` ulalume3@99: | This optional array defines the dead time in ns associated to each ulalume3@99: lidar channel. The SCC will use the values given by this array to ulalume3@99: correct the photoncounting signals for dead time. Of course for ulalume3@99: analog signals no dead time correction will be applied (for analog ulalume3@99: channels the corresponding dead time values have to be set to ulalume3@99: undefined value). This information can be also taken from SCC\_DB. ulalume3@99: In our example the 1064 nm channel is acquired in analog mode so ulalume3@99: the corresponding dead time value has to be undefined. If we ulalume3@99: suppose a dead time of 10 ns for all other channels we have to set: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: Dead_Time = _, 10, 10, 10 ; ulalume3@99: ulalume3@99: - | ``Dead_Time_Corr_Type(channels)`` ulalume3@99: | This optional array defines which kind of dead time correction has ulalume3@99: to be applied on each photoncounting channel. The SCC will correct ulalume3@99: the data supposing a not-paralyzable channel if a value of 0 is ulalume3@99: found while a paralyzable channel is supposed if a value of 1 is ulalume3@99: found. Of course for analog signals no dead time correction will be ulalume3@99: applied and so the corresponding values have to be set to undefined ulalume3@99: value. This information can be also taken from SCC\_DB. In our ulalume3@99: example the 1064 nm channel is acquired in analog mode so the ulalume3@99: corresponding has to be undefined. If we want to consider all the ulalume3@99: photoncounting signals as not-paralyzable ones: we have to set: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: Dead_Time_Corr_Type = _, 0, 0, 0 ; ulalume3@99: ulalume3@99: - | ``Trigger_Delay(channels)`` ulalume3@99: | This optional array defines the delay (in ns) of the middle of the ulalume3@99: first rangebin with respect to the output laser pulse for each ulalume3@99: lidar channel. The SCC will use the values given by this array to ulalume3@99: correct for trigger delay. This information can be also taken from ulalume3@99: SCC\_DB. Let’s suppose that in our example all the photoncounting ulalume3@99: channels are not affected by this delay and only the analog channel ulalume3@99: at 1064nm is acquired with a delay of 50ns. In this case we have to ulalume3@99: set: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: Trigger_Delay = 50, 0, 0, 0 ; ulalume3@99: ulalume3@99: - | ``Background_Mode(channels)`` ulalume3@99: | This optional array defines how the atmospheric background has to ulalume3@99: be subtracted from the lidar channel. Two options are available for ulalume3@99: the calculation of atmospheric background: ulalume3@99: ulalume3@99: #. Average in the far field of lidar channel. In this case the value ulalume3@99: of this variable has to be 1 ulalume3@99: ulalume3@99: #. Average within pre-trigger bins. In this case the value of this ulalume3@99: variable has to be 0 ulalume3@99: ulalume3@99: This information can be also taken from SCC\_DB. Let’s suppose in our ulalume3@99: example we use the pre-trigger for the 1064nm channel and the far ulalume3@99: field for all other channels. In this case we have to set: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: Background_Mode = 0, 1, 1, 1 ; ulalume3@99: ulalume3@99: - | ``Background_Low(channels)`` ulalume3@99: | This mandatory array defines the minimum altitude (in meters) to ulalume3@99: consider in calculating the atmospheric background for each ulalume3@99: channel. In case pre-trigger mode is used the corresponding value ulalume3@99: has to be set to the rangebin to be used as lower limit (within ulalume3@99: pre-trigger region) for background calculation. In our example, if ulalume3@99: we want to calculate the background between 30000 and 50000 meters ulalume3@99: for all photoncounting channels and we want to use the first 500 ulalume3@99: pre-trigger bins for the background calculation for the 1064nm ulalume3@99: channel we have to set: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: Background_Low= 0, 30000, 30000, 30000 ; ulalume3@99: ulalume3@99: - | ``Background_High(channels)`` ulalume3@99: | This mandatory array defines the maximum altitude (in meters) to ulalume3@99: consider in calculating the atmospheric background for each ulalume3@99: channel. In case pre-trigger mode is used the corresponding value ulalume3@99: has to be set to the rangebin to be used as upper limit (within ulalume3@99: pre-trigger region) for background calculation. In our example, if ulalume3@99: we want to calculate the background between 30000 and 50000 meters ulalume3@99: for all photoncounting channels and we want to use the first 500 ulalume3@99: pre-trigger bins for the background calculation for the 1064nm ulalume3@99: channel we have to set: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: Background_High = 500, 50000, 50000, 50000 ; ulalume3@99: ulalume3@99: - | ``Molecular_Calc`` ulalume3@99: | This mandatory variable defines the way used by SCC to calculate giuseppe@128: the molecular density profile. The following options are ulalume3@99: available: ulalume3@99: giuseppe@128: #. Automatic. In this case the value of this variable has to be 0. giuseppe@128: First the availablity of model forecast/re-analysis on Cloudnet data portal (https://cloudnet.fmi.fi/) is checked. giuseppe@128: In case no model data are found US Standard Atmosphere 1976 is used. giuseppe@128: giuseppe@128: #. Radiosounding. In this case the value of this variable has to be 1 giuseppe@128: giuseppe@128: #. Model forecast/re-analysis. In this case the value of this variable has to be 2. giuseppe@128: Model data are made available by Cloudnet data portal (https://cloudnet.fmi.fi/). giuseppe@128: ulalume3@99: #. US Standard Atmosphere 1976. In this case the value of this giuseppe@128: variable has to be 4 ulalume3@99: ulalume3@99: giuseppe@131: If we decide to use the option 1. or 4. we have to provide also the giuseppe@128: measured pressure and temperature at lidar station level. giuseppe@131: Options 1. and 3. are available only for the stations registered on Cloudnet data portal for giuseppe@128: the delivery of the required model data. giuseppe@128: The Cloudnet station registration status can be checked by looking at the field 'Cloudnet Station ID' giuseppe@128: in the station settings. If this field is filled the corresponding station is registered otherwise it is not. giuseppe@128: In case the station is not registered you can ask to be registered by contacting SCC responsible. giuseppe@128: Usually model data are made available with a delay of 24h. giuseppe@128: giuseppe@128: For the option 2. a radiosounding file has to be ulalume3@99: submitted separately in NetCDF format (the structure of this file is ulalume3@99: summarized in table 2 of the pdf file). Let’s suppose we want to use the ulalume3@99: option 1. so: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: Molecular_Calc = 0 ; ulalume3@99: ulalume3@99: - | ``Pressure_at_Lidar_Station`` giuseppe@128: | Because we have chosen the automatic calculation mode to compute the molecular density profile we need to provide giuseppe@128: the pressure in hPa at lidar station level (in case model data are not available). ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: Pressure_at_Lidar_Station = 1010 ; ulalume3@99: ulalume3@99: - | ``Temperature_at_Lidar_Station`` giuseppe@128: | Because we have chosen the automatic calculation mode to compute the molecular density profile we need to provide giuseppe@128: the temperature in C at lidar station level (in case model data are not available). ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: Temperature_at_Lidar_Station = 19.8 ; ulalume3@99: ulalume3@99: - | ``LR_Input(channels)`` ulalume3@99: | This array is required only for lidar channels for which elastic ulalume3@99: backscatter retrieval has to be performed. It defines the lidar ulalume3@99: ratio to be used within this retrieval. Two options are available: ulalume3@99: ulalume3@99: #. The user can submit a lidar ratio profile. In this case the value ulalume3@99: of this variable has to be 0. ulalume3@99: ulalume3@99: #. A fixed value of lidar ratio can be used. In this case the value ulalume3@99: of this variable has to be 1. ulalume3@99: ulalume3@99: If we decide to use the option 1. a lidar ratio file has to be ulalume3@99: submitted separately in NetCDF format (the structure of this file is ulalume3@99: summarized in table ). If we decide to use the option 2. the ulalume3@99: fixed value of lidar ratio will be taken from SCC\_DB. In our example ulalume3@99: we have to give a value of this array only for the 1064nm lidar ulalume3@99: channel because for the 532nm we will be able to retrieve a Raman ulalume3@99: backscatter coefficient. In case we want to use the fixed value ulalume3@99: stored in SCC\_DB we have to set: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: LR_Input = 1,_,_,_ ; ulalume3@99: ulalume3@99: - | ``DAQ_Range(channels)`` ulalume3@99: | This array is required only if one or more lidar signals are ulalume3@99: acquired in analog mode. It gives the analog scale in mV used to ulalume3@99: acquire the analog signals. In our example we have only the 1064nm ulalume3@99: channel acquired in analog mode. If we have used a 100mV analog ulalume3@99: scale to acquire this channel we have to set: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: DAQ_Range = 100,_,_,_ ; ulalume3@99: ulalume3@99: ulalume3@99: Global attributes ulalume3@99: ~~~~~~~~~~~~~~~~~ ulalume3@99: ulalume3@99: - | ``Measurement_ID`` ulalume3@99: | This mandatory global attribute defines the measurement ID ulalume3@99: corresponding to the actual lidar measurement. It is a string ulalume3@99: composed by 12 characters. The first 8 characters give the start ulalume3@99: date of measurement in the format YYYYMMDD. The next 2 characters ulalume3@99: give the Earlinet call-sign of the station. The last 2 characters ulalume3@99: are used to distinguish between different time-series within the ulalume3@99: same date. In our example we have to set: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: Measurement_ID= "20090130cc00" ; ulalume3@99: ulalume3@99: - | ``RawData_Start_Date`` ulalume3@99: | This mandatory global attribute defines the start date of lidar ulalume3@99: measurements in the format YYYYMMDD. In our case we have: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: RawData_Start_Date = "20090130" ; ulalume3@99: ulalume3@99: - | ``RawData_Start_Time_UT`` ulalume3@99: | This mandatory global attribute defines the UT start time of lidar ulalume3@99: measurements in the format HHMMSS. In our case we have: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: RawData_Start_Time_UT = "000001" ; ulalume3@99: ulalume3@99: - | ``RawData_Stop_Time_UT`` ulalume3@99: | This mandatory global attribute defines the UT stop time of lidar ulalume3@99: measurements in the format HHMMSS. In our case we have: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: RawData_Stop_Time_UT = "000501" ; ulalume3@99: ulalume3@99: - | ``RawBck_Start_Date`` ulalume3@99: | This optional global attribute defines the start date of dark ulalume3@99: measurements in the format YYYYMMDD. In our case we have: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: RawBck_Start_Date = "20090129" ; ulalume3@99: ulalume3@99: - | ``RawBck_Start_Time_UT`` ulalume3@99: | This optional global attribute defines the UT start time of dark ulalume3@99: measurements in the format HHMMSS. In our case we have: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: RawBck_Start_Time_UT = "235001" ; ulalume3@99: ulalume3@99: - | ``RawBck_Stop_Time_UT`` ulalume3@99: | This optional global attribute defines the UT stop time of dark ulalume3@99: measurements in the format HHMMSS. In our case we have: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: RawBck_Stop_Time_UT = "235301" ; ulalume3@99: ulalume3@99: ulalume3@99: Example of file (CDL format) ulalume3@99: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ulalume3@99: ulalume3@99: To summarize we have the following NetCDF *Raw Lidar Data* file (in CDL ulalume3@99: format): ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: dimensions: ulalume3@99: points = 5000 ; ulalume3@99: channels = 4 ; ulalume3@99: time = UNLIMITED ; // (10 currently) ulalume3@99: nb_of_time_scales = 2 ; ulalume3@99: scan_angles = 1 ; ulalume3@99: time_bck = 6 ; ulalume3@99: variables: ulalume3@99: int channel_ID(channels) ; ulalume3@99: int Laser_Repetition_Rate(channels) ; ulalume3@99: double Laser_Pointing_Angle(scan_angles) ; ulalume3@99: int Signal_Type(channels); ulalume3@99: double Emitted_Wavelength(channels) ; ulalume3@99: double Detected_Wavelength(channels) ; ulalume3@99: double Raw_Data_Range_Resolution(channels) ; ulalume3@99: int Background_Mode(channels) ; ulalume3@99: double Background_Low(channels) ; ulalume3@99: double Background_High(channels) ; ulalume3@99: int Molecular_Calc ; ulalume3@99: double Pressure_at_Lidar_Station ; ulalume3@99: double Temperature_at_Lidar_Station ; ulalume3@99: int id_timescale(channels) ; ulalume3@99: double Dead_Time(channels) ; ulalume3@99: int Dead_Time_Corr_Type(channels) ; ulalume3@99: int Acquisition_Mode(channels) ; ulalume3@99: double Trigger_Delay(channels) ; ulalume3@99: int LR_Input(channels) ; ulalume3@99: int Laser_Pointing_Angle_of_Profiles(time, nb_of_time_scales) ; ulalume3@99: int Raw_Data_Start_Time(time, nb_of_time_scales) ; ulalume3@99: int Raw_Data_Stop_Time(time, nb_of_time_scales) ; ulalume3@99: int Raw_Bck_Start_Time(time_bck, nb_of_time_scales) ; ulalume3@99: int Raw_Bck_Stop_Time(time_bck, nb_of_time_scales) ; ulalume3@99: int Laser_Shots(time, channels) ; ulalume3@99: double Raw_Lidar_Data(time, channels, points) ; ulalume3@99: double Background_Profile(time_bck, channels, points) ; ulalume3@99: double DAQ_Range(channels) ; ulalume3@99: ulalume3@99: // global attributes: ulalume3@99: :Measurement_ID = "20090130cc00" ; ulalume3@99: :RawData_Start_Date = "20090130" ; ulalume3@99: :RawData_Start_Time_UT = "000001" ; ulalume3@99: :RawData_Stop_Time_UT = "000501" ; ulalume3@99: :RawBck_Start_Date = "20090129" ; ulalume3@99: :RawBck_Start_Time_UT = "235001" ; ulalume3@99: :RawBck_Stop_Time_UT = "235301" ; ulalume3@99: ulalume3@99: data: ulalume3@99: ulalume3@99: channel_ID = 7, 5, 6, 8 ; ulalume3@99: ulalume3@99: Laser_Repetition_Rate = 50, 50, 50, 50 ; ulalume3@99: ulalume3@99: Laser_Pointing_Angle = 5 ; ulalume3@99: ulalume3@99: Signal_Type = 0, 7, 6, 3 ; ulalume3@99: ulalume3@99: Emitted_Wavelength = 1064, 532, 532, 532 ; ulalume3@99: ulalume3@99: Detected_Wavelength = 1064, 532, 532, 607 ; ulalume3@99: ulalume3@99: Raw_Data_Range_Resolution = 7.5, 15, 15, 15 ; ulalume3@99: ulalume3@99: Background_Mode = 0, 1, 1, 1 ; ulalume3@99: ulalume3@99: Background_Low = 0, 30000, 30000, 30000 ; ulalume3@99: ulalume3@99: Background_High = 500, 50000, 50000, 50000 ; ulalume3@99: ulalume3@99: Molecular_Calc = 0 ; ulalume3@99: ulalume3@99: Pressure_at_Lidar_Station = 1010 ; ulalume3@99: ulalume3@99: Temperature_at_Lidar_Station = 19.8 ; ulalume3@99: ulalume3@99: id_timescale = 1, 0, 0, 0 ; ulalume3@99: ulalume3@99: Dead_Time = _, 10, 10, 10 ; ulalume3@99: ulalume3@99: Dead_Time_Corr_Type = _, 0, 0, 0 ; ulalume3@99: ulalume3@99: Acquisition_Mode = 0, 1, 1, 1 ; ulalume3@99: ulalume3@99: Trigger_Delay = 50, 0, 0, 0 ; ulalume3@99: ulalume3@99: LR_Input = 1,_,_,_ ; ulalume3@99: ulalume3@99: DAQ_Range = 100,_,_,_ ; ulalume3@99: ulalume3@99: Laser_Pointing_Angle_of_Profiles = ulalume3@99: 0, 0, ulalume3@99: 0, 0, ulalume3@99: 0, 0, ulalume3@99: 0, 0, ulalume3@99: 0, 0, ulalume3@99: _, 0, ulalume3@99: _, 0, ulalume3@99: _, 0, ulalume3@99: _, 0, ulalume3@99: _, 0 ; ulalume3@99: ulalume3@99: ulalume3@99: Raw_Data_Start_Time = ulalume3@99: 0, 0, ulalume3@99: 60, 30, ulalume3@99: 120, 60, ulalume3@99: 180, 90, ulalume3@99: 240, 120, ulalume3@99: _, 150, ulalume3@99: _, 180, ulalume3@99: _, 210, ulalume3@99: _, 240, ulalume3@99: _, 270 ; ulalume3@99: ulalume3@99: Raw_Data_Stop_Time = ulalume3@99: 60, 30, ulalume3@99: 120, 60, ulalume3@99: 180, 90, ulalume3@99: 240, 120, ulalume3@99: 300, 150, ulalume3@99: _, 180, ulalume3@99: _, 210, ulalume3@99: _, 240, ulalume3@99: _, 270, ulalume3@99: _, 300 ; ulalume3@99: ulalume3@99: ulalume3@99: Raw_Bck_Start_Time = ulalume3@99: 0, 0, ulalume3@99: 60, 30, ulalume3@99: 120, 60, ulalume3@99: _, 90, ulalume3@99: _, 120, ulalume3@99: _, 150; ulalume3@99: ulalume3@99: ulalume3@99: Raw_Bck_Stop_Time = ulalume3@99: 60, 30, ulalume3@99: 120, 60, ulalume3@99: 180, 90, ulalume3@99: _, 120, ulalume3@99: _, 150, ulalume3@99: _, 180 ; ulalume3@99: ulalume3@99: ulalume3@99: Laser_Shots = ulalume3@99: 1500, 3000, 3000, 3000, ulalume3@99: 1500, 3000, 3000, 3000, ulalume3@99: 1500, 3000, 3000, 3000, ulalume3@99: 1500, 3000, 3000, 3000, ulalume3@99: 1500, 3000, 3000, 3000, ulalume3@99: 1500, _, _, _, ulalume3@99: 1500, _, _, _, ulalume3@99: 1500, _, _, _, ulalume3@99: 1500, _, _, _, ulalume3@99: 1500, _, _, _ ; ulalume3@99: ulalume3@99: ulalume3@99: Raw_Lidar_Data = ... ulalume3@99: ulalume3@99: Background_Profile = ... ulalume3@99: ulalume3@99: The name of the input file should have the following format: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: Measurement_ID.nc ulalume3@99: ulalume3@99: | so in the example the filename should be 20090130cc00.nc. ulalume3@99:   ulalume3@99: Please keep in mind that in case you submit a file like the previous ulalume3@99: one all the parameters present in it will be used by the SCC even if ulalume3@99: you have different values for the same parameters within the SCC\_DB. ulalume3@99: If you want to use the values already stored in SCC\_DB (this should ulalume3@99: be the usual way to use SCC) the *Raw Lidar Data* input file has to be ulalume3@99: modified as follows: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: dimensions: ulalume3@99: points = 5000 ; ulalume3@99: channels = 4 ; ulalume3@99: time = UNLIMITED ; // (10 currently) ulalume3@99: nb_of_time_scales = 2 ; ulalume3@99: scan_angles = 1 ; ulalume3@99: time_bck = 6 ; ulalume3@99: variables: ulalume3@99: int channel_ID(channels) ; ulalume3@99: double Laser_Pointing_Angle(scan_angles) ; ulalume3@99: double Background_Low(channels) ; ulalume3@99: double Background_High(channels) ; ulalume3@99: int Molecular_Calc ; ulalume3@99: double Pressure_at_Lidar_Station ; ulalume3@99: double Temperature_at_Lidar_Station ; ulalume3@99: int id_timescale(channels) ; ulalume3@99: int Laser_Pointing_Angle_of_Profiles(time, nb_of_time_scales) ; ulalume3@99: int Raw_Data_Start_Time(time, nb_of_time_scales) ; ulalume3@99: int Raw_Data_Stop_Time(time, nb_of_time_scales) ; ulalume3@99: int Raw_Bck_Start_Time(time_bck, nb_of_time_scales) ; ulalume3@99: int Raw_Bck_Stop_Time(time_bck, nb_of_time_scales) ; ulalume3@99: int LR_Input(channels) ; ulalume3@99: int Laser_Shots(time, channels) ; ulalume3@99: double Raw_Lidar_Data(time, channels, points) ; ulalume3@99: double Background_Profile(time_bck, channels, points) ; ulalume3@99: double DAQ_Range(channels) ; ulalume3@99: ulalume3@99: // global attributes: ulalume3@99: :Measurement_ID = "20090130cc00" ; ulalume3@99: :RawData_Start_Date = "20090130" ; ulalume3@99: :RawData_Start_Time_UT = "000001" ; ulalume3@99: :RawData_Stop_Time_UT = "000501" ; ulalume3@99: :RawBck_Start_Date = "20090129" ; ulalume3@99: :RawBck_Start_Time_UT = "235001" ; ulalume3@99: :RawBck_Stop_Time_UT = "235301" ; ulalume3@99: ulalume3@99: data: ulalume3@99: ulalume3@99: channel_ID = 7, 5, 6, 8 ; ulalume3@99: ulalume3@99: Laser_Pointing_Angle = 5 ; ulalume3@99: ulalume3@99: Background_Low = 0, 30000, 30000, 30000 ; ulalume3@99: ulalume3@99: Background_High = 500, 50000, 50000, 50000 ; ulalume3@99: ulalume3@99: Molecular_Calc = 0 ; ulalume3@99: ulalume3@99: Pressure_at_Lidar_Station = 1010 ; ulalume3@99: ulalume3@99: Temperature_at_Lidar_Station = 19.8 ; ulalume3@99: ulalume3@99: id_timescale = 1, 0, 0, 0 ; ulalume3@99: ulalume3@99: LR_Input = 1,_,_,_ ; ulalume3@99: ulalume3@99: DAQ_Range = 100,_,_,_ ; ulalume3@99: ulalume3@99: Laser_Pointing_Angle_of_Profiles = ulalume3@99: 0, 0, ulalume3@99: 0, 0, ulalume3@99: 0, 0, ulalume3@99: 0, 0, ulalume3@99: 0, 0, ulalume3@99: _, 0, ulalume3@99: _, 0, ulalume3@99: _, 0, ulalume3@99: _, 0, ulalume3@99: _, 0 ; ulalume3@99: ulalume3@99: ulalume3@99: Raw_Data_Start_Time = ulalume3@99: 0, 0, ulalume3@99: 60, 30, ulalume3@99: 120, 60, ulalume3@99: 180, 90, ulalume3@99: 240, 120, ulalume3@99: _, 150, ulalume3@99: _, 180, ulalume3@99: _, 210, ulalume3@99: _, 240, ulalume3@99: _, 270 ; ulalume3@99: ulalume3@99: Raw_Data_Stop_Time = ulalume3@99: 60, 30, ulalume3@99: 120, 60, ulalume3@99: 180, 90, ulalume3@99: 240, 120, ulalume3@99: 300, 150, ulalume3@99: _, 180, ulalume3@99: _, 210, ulalume3@99: _, 240, ulalume3@99: _, 270, ulalume3@99: _, 300 ; ulalume3@99: ulalume3@99: ulalume3@99: Raw_Bck_Start_Time = ulalume3@99: 0, 0, ulalume3@99: 60, 30, ulalume3@99: 120, 60, ulalume3@99: _, 90, ulalume3@99: _, 120, ulalume3@99: _, 150; ulalume3@99: ulalume3@99: ulalume3@99: Raw_Bck_Stop_Time = ulalume3@99: 60, 30, ulalume3@99: 120, 60, ulalume3@99: 180, 90, ulalume3@99: _, 120, ulalume3@99: _, 150, ulalume3@99: _, 180 ; ulalume3@99: ulalume3@99: ulalume3@99: Laser_Shots = ulalume3@99: 1500, 3000, 3000, 3000, ulalume3@99: 1500, 3000, 3000, 3000, ulalume3@99: 1500, 3000, 3000, 3000, ulalume3@99: 1500, 3000, 3000, 3000, ulalume3@99: 1500, 3000, 3000, 3000, ulalume3@99: 1500, _, _, _, ulalume3@99: 1500, _, _, _, ulalume3@99: 1500, _, _, _, ulalume3@99: 1500, _, _, _, ulalume3@99: 1500, _, _, _ ; ulalume3@99: ulalume3@99: ulalume3@99: Raw_Lidar_Data = ... ulalume3@99: ulalume3@99: Background_Profile = ... ulalume3@99: ulalume3@99: This example file contains the minimum collection of mandatory ulalume3@99: information that has to be found within the *Raw Lidar Data* input file. ulalume3@99: If it is really necessary, the user can decide to add to these mandatory ulalume3@99: parameters any number of additional parameters considered in the ulalume3@99: previous example. ulalume3@99: ulalume3@99: Finally, suppose we want to make the following changes with respect to ulalume3@99: the previous example: ulalume3@99: ulalume3@99: #. use a sounding file for molecular density calculation instead of “US ulalume3@99: Standar Atmosphere 1976” ulalume3@99: ulalume3@99: #. supply a lidar ratio profile to use in elastic backscatter retrieval ulalume3@99: instead of a fixed value ulalume3@99: ulalume3@99: #. provide a overlap function for overlap correction ulalume3@99: ulalume3@99: In this case we have to generate the following NetCDF additional files: ulalume3@99: ulalume3@99: - | ``rs_20090130cc00.nc`` ulalume3@99: | The name of *Sounding Data* file has to be computed as follows: ulalume3@99: | ``"rs_"``\ +\ ``Measurement_ID`` ulalume3@99: | The structure of this file is summarized in table 2 of the pdf. ulalume3@99: ulalume3@99: - | ``ov_20090130cc00.nc`` ulalume3@99: | The name of *Overlap* file has to be computed as follows: ulalume3@99: | ``"ov_"``\ +\ ``Measurement_ID`` ulalume3@99: | The structure of this file is summarized in table 3 of the pdf. ulalume3@99: ulalume3@99: - | ``lr_20090130cc00.nc`` ulalume3@99: | The name of *Lidar Ratio* file has to be computed as follows: ulalume3@99: | ``"lr_"``\ +\ ``Measurement_ID`` ulalume3@99: | The structure of this file is summarized in table 4 of the pdf. ulalume3@99: ulalume3@99: Moreover we need to apply the following changes to the *Raw Lidar Data* ulalume3@99: input file: ulalume3@99: ulalume3@99: #. Change the value of the variable ``Molecular_Calc`` as follows: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: Molecular_Calc = 1 ; ulalume3@99: ulalume3@99: Of course the variables ``Pressure_at_Lidar_Station`` and ulalume3@99: ``Temperature_at_Lidar_Station`` are not necessary anymore. ulalume3@99: ulalume3@99: #. Change the values of the array ``LR_Input`` as follows: ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: LR_Input = 0,_,_,_ ; ulalume3@99: ulalume3@99: #. Add the global attribute ``Sounding_File_Name`` ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: Sounding_File_Name = "rs_20090130cc00.nc" ; ulalume3@99: ulalume3@99: #. Add the global attribute ``LR_File_Name`` ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: LR_File_Name = "lr_20090130cc00.nc" ; ulalume3@99: ulalume3@99: #. Add the global attribute ``Overlap_File_Name`` ulalume3@99: ulalume3@99: :: ulalume3@99: ulalume3@99: Overlap_File_Name = "ov_20090130cc00.nc" ; ulalume3@99: