Security News
Research
Data Theft Repackaged: A Case Study in Malicious Wrapper Packages on npm
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
This package provides utilities to handle raw (atmospheric) lidar input data. The main format supported are Licel binary files (including the Raymetrics modified format).
The package provides a single command line tool, called licel2scc that can convert Licel binary files to the EARLINET's Single Calculus Chain NetCDF format.
The easiest way to install this module is from the python package index using pip
::
pip install atmospheric-lidar
Before converting Licel binary to SCC format, you need to create a file linking Licel channels to SCC channels.
As an example, you can start by changing the file “cf_netcdf_parameters.py” that describe such parameters for the Clermont Ferrand lidar.
The usage of the licel2scc
program is described below::
A program to convert Licel binary files to the SCC NetCDF format.
positional arguments:
parameter_file The path to a parameter file linking licel and SCC
channels.
files Location of licel files. Use relative path and
filename wildcards. (default './*.*')
optional arguments:
-h, --help show this help message and exit
-i, --id_as_name Use transient digitizer ids as channel names, instead
of descriptive names
-m MEASUREMENT_ID, --measurement_id MEASUREMENT_ID
The new measurement id
-n MEASUREMENT_NUMBER, --measurement_number MEASUREMENT_NUMBER
The measurement number for the date from 00 to 99.
Used if no id is provided
-t TEMPERATURE, --temperature TEMPERATURE
The temperature (in C) at lidar level, required if
using US Standard atmosphere
-p PRESSURE, --pressure PRESSURE
The pressure (in hPa) at lidar level, required if
using US Standard atmosphere
-D DARK_FILES, --dark_files DARK_FILES
Location of files containing dark measurements.
Use relative path and filename wildcars, see 'files'
parameter for example.
-d, --debug Print dubuging information.
-s, --silent Show only warning and error messages.
--version Show current version.
Similarly, the licel2scc-depol
program can be used to convert
Licel files from Delta45 depolarization calibration measurements::
A program to convert Licel binary files from depolarization calibration
measurements to the SCC NetCDF format.
positional arguments:
parameter_file The path to a parameter file linking licel and SCC
channels.
plus45_string Search string for plus 45 degree files (default '*.*')
minus45_string Search string for minus 45 degree files (default
'*.*')
optional arguments:
-h, --help show this help message and exit
-i, --id_as_name Use transient digitizer ids as channel names, instead
of descriptive names
-m MEASUREMENT_ID, --measurement_id MEASUREMENT_ID
The new measurement id
-n MEASUREMENT_NUMBER, --measurement_number MEASUREMENT_NUMBER
The measurement number for the date from 00 to 99.
Used if no id is provided
-t TEMPERATURE, --temperature TEMPERATURE
The temperature (in C) at lidar level, required if
using US Standard atmosphere
-p PRESSURE, --pressure PRESSURE
The pressure (in hPa) at lidar level, required if
using US Standard atmosphere
-d, --debug Print dubuging information.
-s, --silent Show only warning and error messages.
--version Show current version.
System class
To read data from a system, you need create a class that describes you system.
This is very simple if your lidar data are in the Licel format, as you only need to specify
the external file with the extra SCC parameters. You can use as an example the file ``cf_netcdf_parameters.py``:
.. code-block:: python
from licel import LicelLidarMeasurement
import cf_netcdf_parameters
class CfLidarMeasurement(LicelLidarMeasurement):
extra_netcdf_parameters = cf_netcdf_parameters
This code assumes that the ``cf_netcdf_parameters.py`` is in your python path.
Using the class
Once you have made the above setup you can start using it. The best way to understand how it works is through an interactive shell (I suggest ipython). In the following example I use the cf_raymetrics setup:
.. code-block:: python
import glob # This is needed to read a list of filenames import cf_lidar
cd /path/to/lidar/files
files = glob.glob("*") # The * reads all the files in the folder.
my_measurement = cf_lidar.CfLidarMeasurement(files)
print(my_measurement.channels)
my_measurements.plot()
Converting to SCC format
There are some extra info you need to put in before converting to SCC format, "Measurement_ID", "Temperature", "Pressure":
.. code-block:: python
my_measurement.info["Measurement_ID"] = "20101229op00"
my_measurement.info["Temperature"] = "14"
my_measurement.info["Pressure"] = "1010"
You can use standard values of temperature and pressure by just calling:
.. code-block:: python
my_measurement.get_PT()
You can specify the standard values by overriding your system's ``get_PT`` method:
.. code-block:: python
from licel import LicelLidarMeasurement
import cf_netcdf_parameters
class CfLidarMeasurement(LicelLidarMeasurement):
extra_netcdf_parameters = cf_netcdf_parameters
def get_PT():
self.info['Temperature'] = 25.0
self.info['Pressure'] = 1020.0
If you have an external source of temperature and pressure information (a meteorological station) you can automate
this by reading the appropriate code in the ``get_PT`` method .
After you have used this extra input, you save the file using this command:
.. code-block:: python
my_measurement.save_as_SCC_netcdf("filename")
where you change the output filename to the filename you want to use.
FAQs
Package for reading raw atmospheric lidar data.
We found that atmospheric-lidar demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Research
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Research
Security News
Attackers used a malicious npm package typosquatting a popular ESLint plugin to steal sensitive data, execute commands, and exploit developer systems.
Security News
The Ultralytics' PyPI Package was compromised four times in one weekend through GitHub Actions cache poisoning and failure to rotate previously compromised API tokens.