Skip to content
Snippets Groups Projects
Commit c641e4c2 authored by Aurelien Chauvigne's avatar Aurelien Chauvigne
Browse files

add ppb concentrations to output

parent d3c123cf
No related branches found
No related tags found
No related merge requests found
......@@ -133,11 +133,11 @@ class PtrmsConverter(Converter.Converter):
"""
# load data
self.reader = AMESReader(infiles[0])
year = int(self.reader.attributes['Startdate'][0:4])
ds_names = self.reader.get_ds_names()
indata = Converter.Converter.load_indata(self, infiles, ds_names, reader_interface=AMESReader)
self.var_ids_mz = []
self.var_ids_mz_name = []
self.var_ids_env_tag = []
self.var_ids_env = []
......@@ -146,6 +146,8 @@ class PtrmsConverter(Converter.Converter):
indata[Product.START_ACQ_ID] = indata[var_id]
elif 'end_time' in var_id:
indata[Product.END_ACQ_ID] = indata[var_id]
elif "status" in var_id:
indata["status"] = indata[var_id]
elif "temperature" in var_id and "Location=inlet" in var_id:
self.var_ids_env.append(var_id)
self.var_ids_env_tag.append('T_inlet')
......@@ -157,7 +159,6 @@ class PtrmsConverter(Converter.Converter):
if m != None:
mass_num = m.group(0).replace('_','')
indata['mz_' + mass_num] = indata[var_id]
self.var_ids_mz_name.append(var_id)
self.var_ids_mz.append('mz_' + mass_num)
else:
if 'methanal' in var_id:
......@@ -179,10 +180,16 @@ class PtrmsConverter(Converter.Converter):
indata['mz_' + mass_num] = indata[var_id]
self.var_ids_mz.append('mz_' + mass_num)
year = int(self.reader.attributes['Startdate'][0:4])
# filtering from status values
valid_status = (indata['status'] == 0)
for var_id in indata.keys():
indata[var_id] = indata[var_id][valid_status]
# convert to ppm concentration
prog_ptrms_lib = ptrms_lib(outdir, conf_file)
self.lev1_mz =prog_ptrms_lib.conf["cols_species"]
self.lev1_mz_name = [prog_ptrms_lib.conf["species"][s]["actris_name"] for s in prog_ptrms_lib.conf["cols_species"]]
ppb_data, lod, rsd, accuracy, uncertainty = prog_ptrms_lib.process(indata, valve_files, outdir, levels=[0])
# group outputs
......@@ -216,7 +223,7 @@ class PtrmsConverter(Converter.Converter):
i_sort = numpy.argsort(outdata[Product.START_ACQ_ID])
outdata["start_acq"] = [outdata["start_acq"][i] for i in i_sort]
outdata["end_acq"] = [outdata["end_acq"][i] for i in i_sort]
for var_id in self.var_ids_env + self.var_ids_mz:
for var_id in self.var_ids_env + self.lev1_mz:
outdata[var_id] = [outdata[var_id][i] for i in i_sort]
invalid_acq_val[var_id] = numpy.array(
[invalid_acq_val[var_id][i] for i in i_sort]
......@@ -237,7 +244,7 @@ class PtrmsConverter(Converter.Converter):
)
# concentrations coef
for var_id in self.var_ids_env + self.var_ids_mz:
for var_id in self.var_ids_env + self.lev1_mz:
conc = outdata[var_id][i]
qa = 0.0
......@@ -277,7 +284,7 @@ class PtrmsConverter(Converter.Converter):
"""
if var_id == self.QA_FLAGS_ID:
return 9.999
elif var_id in self.var_ids_mz:
elif var_id in self.lev1_mz:
return self.var_fills_conc
elif var_id in self.var_ids_env:
return self.var_fills_env
......@@ -296,7 +303,7 @@ class PtrmsConverter(Converter.Converter):
infill = self.var_fills_conc_native
# --- environmental property and concentration automatic QA
for var_id in self.var_ids_env + self.var_ids_mz:
for var_id in self.var_ids_env + self.lev1_mz:
data = indata[var_id]
# data = numpy.array([float(d.replace('E','e').replace(',','.')) for d in data])
data = numpy.array(data)
......@@ -336,7 +343,7 @@ class PtrmsConverter(Converter.Converter):
nvars = 1 # end time
nvars += 1 # status
nvars += len(self.var_ids_env) * 2 # T, P and QA
nvars += len(self.var_ids_mz) * 2 # m/e and QA flag
nvars += len(self.lev1_mz) * 2 # m/e and QA flag
return nvars
......@@ -375,7 +382,7 @@ class PtrmsConverter(Converter.Converter):
s += "9.999 "
s += str(self.var_fills_conc) + " " # P
s += "9.999 "
for me in self.var_ids_mz:
for me in self.lev1_mz:
s += str(self.var_fills_conc)
s += " "
s += "9.999 "
......@@ -400,8 +407,8 @@ class PtrmsConverter(Converter.Converter):
)
vars_long_name += "numflag_pressure, no unit" + os.linesep
for var_id in self.var_ids_mz_name:
vars_long_name += var_id + os.linesep
for var_id in self.lev1_mz_name:
vars_long_name += var_id + ", ppb" + os.linesep
vars_long_name += "numflag_" + var_id + ", no unit" + os.linesep
vars_long_name = vars_long_name.strip()
......@@ -413,7 +420,7 @@ class PtrmsConverter(Converter.Converter):
vars_tag += "{0:<20s}".format(var_id)
vars_tag += "{0:<20s}".format("numflag_" + var_id)
for var_id in self.var_ids_mz:
for var_id in self.lev1_mz:
vars_tag += "{0:<20s}".format(var_id)
vars_tag += "{0:<20s}".format(var_id + "_numflag")
vars_tag = vars_tag.strip()
......
......@@ -117,7 +117,7 @@ def main():
def test():
SRC_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)),'..')
infile = SRC_DIR + "/tests/SIRTA/inputs/FR0020R.20241028000550.20250108081653.PTR-MS.ion_count.air.1d.5mn.FR01L_PTR-MS_Ionicon_Analytik_H-S-PTR-QMS.FR01L_Ionicon_Analytik_H-S-PTR-QMS_GIF.lev0.nas"
infile = SRC_DIR + "/tests/SIRTA/inputs/FR0020R.20241028000550.20250113125332.PTR-MS.ion_count.air.1d.5mn.FR01L_PTR-MS_Ionicon_Analytik_H-S-PTR-QMS.FR01L_Ionicon_Analytik_H-S-PTR-QMS_GIF.lev0.nas"
conf_file = '/src/algo/ptrms_lib/conf/conf_ptrms.toml'
valve_files = "/tests/SIRTA/inputs/vanne_pos_20241028.csv"
outdir = SRC_DIR + "/tests/SIRTA/results/"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment