ppcpy.interface#

ppcpy.interface.picassoProc#

class ppcpy.interface.picassoProc.PicassoProc(rawdata_dict, polly_config_dict, picasso_config_dict)[source]#

initialize the data_cube

Parameters:
rawdata_dict

the dict returned by readPollyRawData.readPollyRawData(filename=rawfile)

polly_config_dict

the configuration specific to the specific polly loadConfigs.loadPollyConfig(polly_config_file_fullname, polly_default_config_file)

picasso_config_dict

the general picasso config loadConfigs.loadPicassoConfig(args.picasso_config_file,picasso_default_config_file)

Notes

The polly_default_dict is not longer available as a separate variable, but is included into the polly_config_dict

counter = 0#
mdate_filename()[source]#

get the date from filename in YYYYMMDD

gf(wavelength, meth, telescope)[source]#

get flag shorthand

i.e., the following two calls are equivalent ` data_cube.flag_532_total_FR data_cube.gf(532, 'total', 'FR') `

where the pattern {wavelength}_{total|cross|parallel|rr}_{NR|FR|DFOV} from PollyNET/Pollynet_Processing_Chain#303 is obeyed

Parameters:
wavelength

wavelength tag

meth

method

telescope

telescope

Returns:
array

with bool flag

mdate_infile()[source]#

first date in file as string

check_for_correct_mshots()[source]#

check if mshots are more than 1.1 * laser_prf * deltatime or smaller 0

filter_or_correct_false_mshots()[source]#

filter or correct the mshots (currently only logging)

Todo

that might be covered via the mcps conversion

mdate_consistency() bool[source]#

check mdate consistency

reset_date_infile()[source]#

correct the date in the file

setChannelTags()[source]#

set the channel tags

they are stored as dictionary in ` data_cube.channel_dict `

and as list in ` data_cube.retrievals_highres['channel'] data_cube.polly_config_dict['channelTags'] `

as an array of boolean flags in ` data_cube.flags `

as flags per channel in ` data_cube.flag_355_total_FR `

Returns:
self
preprocessing(collect_debug: bool = False)[source]#
Preprocessing of Lidar data. Including in the followin processes in order:

Dead time correction Background correction Range correction etc.

Returns:
  • Background corrected signal including the background per channel.

  • Range corrected signal.

  • etc.

Todo

This is just a first draft for a docstring. Improve it. There is more processes and outputs of the function.

SaturationDetect()[source]#

Saturation Detection

polarizationCaliD90()[source]#

calibration with the Delta-90 method

The stuff that starts here in the matlab version PollyNET/Pollynet_Processing_Chain

cloudScreen()[source]#

basic cloud screenting

PollyNET/Pollynet_Processing_Chain

cloudFreeSeg()[source]#

cloud free profile segmentation

PollyNET/Pollynet_Processing_Chain

data_cube.clFreGrps = [
    [35,300],
    [2500,2800]
]
aggregate_profiles(var=None)[source]#

Aggregate highres profiles over cloud free segments

Todo

Decide on a consistent way for doing the aggregation, do not mix mean and sum

loadMeteo()[source]#

Load meteorological data

loadAOD()[source]#

load the AOD from a co-located fotometer

Todo

Not yet implemented!

calcMolecular()[source]#

calculate the molecular scattering for the cloud free periods

with the strategy of first averaging the met data and then calculating the rayleigh scattering

rayleighFit()[source]#

do the rayleigh fit

direct translation from the matlab code. There might be noticeable numerical discrepancies (especially in the residual) seemed to work ok for 532, 1064, but with issues for 355

polarizationCaliMol()[source]#

calibration with molecular signal in reference height

transCor()[source]#

transmission correction

Todo

flagTransCor = True:

Fix the GHK - Transmission correction

flagTransCor = False:

Check if it is correct to use the BG corrected signal and find a better solution. It is a bit confusing to overwrite the signal as it is called sigTCor but actually is sigBGCor Like storing a dedicated signal dict to be used throuhot the processing, the dictionary could have elements like signal (sig), background (bg), and name. which we could overwrite each time a new correction is made. And by checking the name of the signal (TCor, BGCor) you can find out which signal it is.

retrievalKlett(oc=False, nr=False)[source]#

apply the klett retrieval

retrievalRaman(oc=False, nr=False, collect_debug=False)[source]#

apply the raman retrieval (nighttime only)

overlapCalc(collect_debug=False)[source]#

estimate the overlap function

different to the matlab version, where an average over all cloud free periods is taken, it is done here per cloud free segment

overlapFixLowestBins()[source]#

the lowest bins are affected by stange near range effects

overlapCor()[source]#

overlap correction

the overlap correction is implemented differently to the matlab version first a 2d (time, height) correction array is constructed then it is applied. In future this will allow for time varing overlap functions

calcDepol()[source]#

calculate the volume depol and the particle depol

estQualityMask()[source]#

estimate the quality mask

Angstroem()[source]#

calculate the angstrom exponent

LidarCalibration()[source]#

calculate the lidar constant

Todo

Add option to read constants from database.

Todo

Find out how we prioritise raman, klett, and database retrieved LC…

attBsc_volDepol()[source]#

highres attBsc and voldepol in 2d

molecularHighres()[source]#

calculate the molecular signal for the 2d high resolution

quasiV1()[source]#

quasiV1 retrivals and target categorisation.

quasiV2()[source]#

quasiV2 retrivals and target categorisation.

write_2_sql_db(db_path: str, parameter: str, method: str | None = None)[source]#

write LC or eta to sqlite db table

Paramters parameter (str): can be LC (Lidar-calibration-constant) or DC (Depol-calibration-constant) method (str): ‘raman’ or ‘klett’ db_path (str): location of the sqlite db-file

adding_retrieving_infos_2_polly_config_dict()[source]#

some infos from the polly_config_dict should have there own keys, e.g. reference_search_range

Parameters:
self
Returns:
self (with added polly_config dict_keys)