|
1 Overview |
|
2 ======== |
|
3 |
|
4 This package provides utilities to handle raw (atmospheric) lidar input data. |
|
5 The main format supported are Licel binary files (including the Raymetrics modified format). |
|
6 |
|
7 The package provides a single command line tool, called licel2scc that can convert Licel binary files to the |
|
8 EARLINET's Single Calculus Chain NetCDF format. |
|
9 |
|
10 Installation |
|
11 ------------ |
|
12 |
|
13 The easiest way to install this module is from the python package index using ``pip``:: |
|
14 |
|
15 pip install atmospheric-lidar |
|
16 |
|
17 Using it as a Licel to SCC converter |
|
18 ------------------------------------ |
|
19 |
|
20 Parameter file |
|
21 ~~~~~~~~~~~~~~ |
|
22 Before converting Licel binary to SCC format, you need to create a file linking Licel channels to SCC channels. |
|
23 |
|
24 As an example, you can start by changing the file “cf_netcdf_parameters.py” that describe such |
|
25 parameters for the Clermont Ferrand lidar. |
|
26 |
|
27 Command line interface |
|
28 ~~~~~~~~~~~~~~~~~~~~~~ |
|
29 The usage of the ``licel2scc`` program is described below:: |
|
30 |
|
31 A program to convert Licel binary files to the SCC NetCDF format. |
|
32 |
|
33 positional arguments: |
|
34 parameter_file The path to a parameter file linking licel and SCC |
|
35 channels. |
|
36 files Location of licel files. Use relative path and |
|
37 filename wildcards. (default './*.*') |
|
38 |
|
39 optional arguments: |
|
40 -h, --help show this help message and exit |
|
41 -i, --id_as_name Use transient digitizer ids as channel names, instead |
|
42 of descriptive names |
|
43 -m MEASUREMENT_ID, --measurement_id MEASUREMENT_ID |
|
44 The new measurement id |
|
45 -n MEASUREMENT_NUMBER, --measurement_number MEASUREMENT_NUMBER |
|
46 The measurement number for the date from 00 to 99. |
|
47 Used if no id is provided |
|
48 -t TEMPERATURE, --temperature TEMPERATURE |
|
49 The temperature (in C) at lidar level, required if |
|
50 using US Standard atmosphere |
|
51 -p PRESSURE, --pressure PRESSURE |
|
52 The pressure (in hPa) at lidar level, required if |
|
53 using US Standard atmosphere |
|
54 -D DARK_FILES, --dark_files DARK_FILES |
|
55 Location of files containing dark measurements. |
|
56 Use relative path and filename wildcars, see 'files' |
|
57 parameter for example. |
|
58 -d, --debug Print dubuging information. |
|
59 -s, --silent Show only warning and error messages. |
|
60 --version Show current version. |
|
61 |
|
62 Similarly, the ``licel2scc-depol`` program can be used to convert |
|
63 Licel files from Delta45 depolarization calibration measurements:: |
|
64 |
|
65 A program to convert Licel binary files from depolarization calibration |
|
66 measurements to the SCC NetCDF format. |
|
67 |
|
68 positional arguments: |
|
69 parameter_file The path to a parameter file linking licel and SCC |
|
70 channels. |
|
71 plus45_string Search string for plus 45 degree files (default '*.*') |
|
72 minus45_string Search string for minus 45 degree files (default |
|
73 '*.*') |
|
74 |
|
75 optional arguments: |
|
76 -h, --help show this help message and exit |
|
77 -i, --id_as_name Use transient digitizer ids as channel names, instead |
|
78 of descriptive names |
|
79 -m MEASUREMENT_ID, --measurement_id MEASUREMENT_ID |
|
80 The new measurement id |
|
81 -n MEASUREMENT_NUMBER, --measurement_number MEASUREMENT_NUMBER |
|
82 The measurement number for the date from 00 to 99. |
|
83 Used if no id is provided |
|
84 -t TEMPERATURE, --temperature TEMPERATURE |
|
85 The temperature (in C) at lidar level, required if |
|
86 using US Standard atmosphere |
|
87 -p PRESSURE, --pressure PRESSURE |
|
88 The pressure (in hPa) at lidar level, required if |
|
89 using US Standard atmosphere |
|
90 -d, --debug Print dubuging information. |
|
91 -s, --silent Show only warning and error messages. |
|
92 --version Show current version. |
|
93 |
|
94 Usage in python code |
|
95 -------------------- |
|
96 System class |
|
97 ~~~~~~~~~~~~ |
|
98 To read data from a system, you need create a class that describes you system. |
|
99 This is very simple if your lidar data are in the Licel format, as you only need to specify |
|
100 the external file with the extra SCC parameters. You can use as an example the file ``cf_netcdf_parameters.py``: |
|
101 |
|
102 .. code-block:: python |
|
103 |
|
104 from licel import LicelLidarMeasurement |
|
105 import cf_netcdf_parameters |
|
106 |
|
107 class CfLidarMeasurement(LicelLidarMeasurement): |
|
108 extra_netcdf_parameters = cf_netcdf_parameters |
|
109 |
|
110 This code assumes that the ``cf_netcdf_parameters.py`` is in your python path. |
|
111 |
|
112 Using the class |
|
113 ~~~~~~~~~~~~~~~ |
|
114 |
|
115 Once you have made the above setup you can start using it. The best way to understand how |
|
116 it works is through an interactive shell (I suggest [ipython](http://ipython.org/)). |
|
117 In the following example I use the cf_raymetrics setup: |
|
118 |
|
119 .. code-block:: python |
|
120 |
|
121 import glob # This is needed to read a list of filenames |
|
122 import cf_lidar |
|
123 |
|
124 # Go to the folder where you files are stored |
|
125 cd /path/to/lidar/files |
|
126 |
|
127 # Read the filenames |
|
128 files = glob.glob("*") # The * reads all the files in the folder. |
|
129 |
|
130 # Read the files |
|
131 my_measurement = cf_lidar.CfLidarMeasurement(files) |
|
132 |
|
133 # Now the data have been read, and you have a measurement object to work with: |
|
134 # See what channels are present |
|
135 print(my_measurement.channels) |
|
136 |
|
137 # Quicklooks of all the channels |
|
138 my_measurements.plot() |
|
139 |
|
140 Converting to SCC format |
|
141 ~~~~~~~~~~~~~~~~~~~~~~~~ |
|
142 |
|
143 There are some extra info you need to put in before converting to SCC format, "Measurement_ID", "Temperature", "Pressure": |
|
144 |
|
145 .. code-block:: python |
|
146 |
|
147 my_measurement.info["Measurement_ID"] = "20101229op00" |
|
148 my_measurement.info["Temperature"] = "14" |
|
149 my_measurement.info["Pressure"] = "1010" |
|
150 |
|
151 You can use standard values of temperature and pressure by just calling: |
|
152 |
|
153 .. code-block:: python |
|
154 |
|
155 my_measurement.get_PT() |
|
156 |
|
157 You can specify the standard values by overriding your system's ``get_PT`` method: |
|
158 |
|
159 .. code-block:: python |
|
160 |
|
161 from licel import LicelLidarMeasurement |
|
162 import cf_netcdf_parameters |
|
163 |
|
164 class CfLidarMeasurement(LicelLidarMeasurement): |
|
165 extra_netcdf_parameters = cf_netcdf_parameters |
|
166 |
|
167 def get_PT(): |
|
168 self.info['Temperature'] = 25.0 |
|
169 self.info['Pressure'] = 1020.0 |
|
170 |
|
171 If you have an external source of temperature and pressure information (a meteorological station) you can automate |
|
172 this by reading the appropriate code in the ``get_PT`` method . |
|
173 |
|
174 |
|
175 After you have used this extra input, you save the file using this command: |
|
176 |
|
177 .. code-block:: python |
|
178 |
|
179 my_measurement.save_as_SCC_netcdf("filename") |
|
180 |
|
181 where you change the output filename to the filename you want to use. |