1111from hypernets_processor .data_io .dataset_util import DatasetUtil
1212from hypernets_processor .plotting .plotting import Plotting
1313import numpy as np
14+ import os
1415
1516'''___Authorship___'''
1617__author__ = "Pieter De Vis"
@@ -32,15 +33,15 @@ def __init__(self, context, MCsteps=1000, parallel_cores=0):
3233 def calibrate_l1a (self , measurandstring , dataset_l0 , dataset_l0_bla ):
3334
3435 if measurandstring != "radiance" and measurandstring != "irradiance" :
35- print ("the measurandstring needs to be either 'radiance' or 'irradiance" )
36+ self . context . logger . error ("the measurandstring needs to be either 'radiance' or 'irradiance" )
3637 exit ()
3738
3839 calibrate_function = self ._measurement_function_factory .get_measurement_function (
3940 self .context .get_config_value ("measurement_function_calibrate" ))
4041 input_vars = calibrate_function .get_argument_names ()
4142
43+ dataset_l0 = self .preprocess_l0 (dataset_l0 )
4244 dataset_l1a = self .l1a_template_from_l0_dataset (measurandstring , dataset_l0 )
43- dataset_l0 , dataset_l1a = self .preprocess_l0 (dataset_l0 , dataset_l1a )
4445
4546 calibration_data = self .prepare_calibration_data (measurandstring )
4647
@@ -72,16 +73,16 @@ def calibrate_l1a(self, measurandstring, dataset_l0, dataset_l0_bla):
7273 def prepare_calibration_data (self ,measurandstring ):
7374 hypstar = self .context .get_config_value ("hypstar_cal_number" )
7475 caldate = self .context .get_config_value ("cal_date" )
75- directory = self .context .get_config_value ("processor_directory " )
76- non_linear_cals = np .genfromtxt (directory + r"/../examples/calibration_files/ hypstar_"+
77- str (hypstar )+ "_nonlin_corr_coefs_" + str (caldate )+ ".dat" )
76+ directory = self .context .get_config_value ("calibration_directory " )
77+ non_linear_cals = np .genfromtxt (os . path . join ( directory , " hypstar_"+
78+ str (hypstar )+ "_nonlin_corr_coefs_" + str (caldate )+ ".dat" ))
7879
7980 if measurandstring == "radiance" :
80- gains = np .genfromtxt (directory + r"/../examples/calibration_files/ hypstar_"+
81- str (hypstar )+ "_radcal_L_" + str (caldate )+ ".dat" )
81+ gains = np .genfromtxt (os . path . join ( directory , " hypstar_"+
82+ str (hypstar )+ "_radcal_L_" + str (caldate )+ ".dat" ))
8283 else :
83- gains = np .genfromtxt (directory + r"/../examples/calibration_files/ hypstar_"+
84- str (hypstar )+ "_radcal_E_" + str (caldate )+ ".dat" )
84+ gains = np .genfromtxt (os . path . join ( directory , " hypstar_"+
85+ str (hypstar )+ "_radcal_E_" + str (caldate )+ ".dat" ))
8586
8687 # print(non_linear_cals)
8788 # print(gains[:,0])
@@ -128,7 +129,8 @@ def calc_mean_masked(self, dataset, var, rand_unc=False, corr=False):
128129 else :
129130 out = np .empty ((len (series_id ), len (dataset ['wavelength' ])))
130131 for i in range (len (series_id )):
131- ids = np .where ((dataset ['series_id' ] == series_id [i ]) & (dataset ['quality_flag' ] == 0 ))
132+ ids = np .where ((dataset ['series_id' ] == series_id [i ]) &
133+ np .invert (DatasetUtil .unpack_flags (dataset ["quality_flag" ])["outliers" ]))
132134 out [i ] = np .mean (dataset [var ].values [:, ids ], axis = 2 )[:, 0 ]
133135 if rand_unc :
134136 out [i ] = out [i ] / len (ids [0 ])
@@ -223,7 +225,7 @@ def find_u_systematic_input(self, variables, dataset, datasetbla, ancillary_data
223225
224226 return inputs
225227
226- def preprocess_l0 (self , datasetl0 , datasetl1a ):
228+ def preprocess_l0 (self , datasetl0 ):
227229 """
228230 Identifies and removes faulty measurements (e.g. due to cloud cover).
229231
@@ -232,36 +234,13 @@ def preprocess_l0(self, datasetl0, datasetl1a):
232234 :return:
233235 :rtype:
234236 """
235- dim_sizes_dict = {"wavelength" : len (datasetl0 ["wavelength" ]), "scan" : len (datasetl0 ["scan" ])}
236- du = DatasetUtil ()
237-
238237 mask = self .clip_and_mask (datasetl0 )
239- # datasetl0["quality_flag"].values = mask
240- # datasetl1a["quality_flag"].values = mask
241-
242- flagval = 2 ** (self .context .get_config_value ("outliers" ))
243-
244- print (np .where (mask > 0 ))
245-
246- break
247- datasetl0 ["quality_flag" ].values = [
248- flagval + datasetl0 ["quality_flag" ].values [i ] if mask [i ] == 1 else
249- datasetl0 ["quality_flag" ].values [i ] for i in range (len (mask ))]
250-
251238
239+ datasetl0 ["quality_flag" ][np .where (mask == 1 )] = DatasetUtil .set_flag (datasetl0 ["quality_flag" ][np .where (mask == 1 )],"outliers" ) #for i in range(len(mask))]
252240
253- datasetl0 ["quality_flag" ].values = [
254- flagval + datasetl0 ["quality_flag" ].values [i ] if mask [i ] == 1 else
255- datasetl0 ["quality_flag" ].values [i ] for i in range (len (mask ))]
256-
257-
258- datasetl1a ["quality_flag" ].values = [
259- flagval + datasetl1a ["quality_flag" ].values [i ] if mask [i ] == 1 else
260- datasetl1a ["quality_flag" ].values [i ] for i in range (len (mask ))]
261-
262- DN_rand = du .create_variable ([len (datasetl0 ["wavelength" ]), len (datasetl0 ["scan" ])],
241+ DN_rand = DatasetUtil .create_variable ([len (datasetl0 ["wavelength" ]), len (datasetl0 ["scan" ])],
263242 dim_names = ["wavelength" , "scan" ], dtype = np .uint32 , fill_value = 0 )
264- DN_syst = du .create_variable ([len (datasetl0 ["wavelength" ]), len (datasetl0 ["scan" ])],
243+ DN_syst = DatasetUtil .create_variable ([len (datasetl0 ["wavelength" ]), len (datasetl0 ["scan" ])],
265244 dim_names = ["wavelength" , "scan" ], dtype = np .uint32 , fill_value = 0 )
266245
267246 datasetl0 ["u_random_digital_number" ] = DN_rand
@@ -273,7 +252,7 @@ def preprocess_l0(self, datasetl0, datasetl1a):
273252 datasetl0 ["u_random_digital_number" ].values = rand
274253 datasetl0 ["u_systematic_digital_number" ] = DN_syst
275254
276- return datasetl0 , datasetl1a
255+ return datasetl0
277256
278257 def clip_and_mask (self , dataset , k_unc = 3 ):
279258 mask = []
@@ -290,7 +269,6 @@ def clip_and_mask(self, dataset, k_unc=3):
290269 maski = np .zeros_like (intsig ) # mask the columns that have NaN
291270 maski [np .where (np .abs (intsig - noiseavg ) >= k_unc * noisestd )] = 1
292271 mask = np .append (mask , maski )
293- # print("mask",mask)
294272
295273
296274 # check if 10% of pixels are outiers
@@ -351,7 +329,9 @@ def l1a_template_from_l0_dataset(self, measurandstring, dataset_l0):
351329 propagate_ds = dataset_l0 )
352330 elif measurandstring == "irradiance" :
353331 dataset_l1a = self .hdsb .create_ds_template (l1a_dim_sizes_dict , "L_L1A_IRR" , propagate_ds = dataset_l0 )
354- dataset_l1a ["wavelength" ]= dataset_l0 ["wavelength" ]
332+
333+ dataset_l1a = dataset_l1a .assign_coords (wavelength = dataset_l0 .wavelength )
334+
355335 return dataset_l1a
356336
357337 def l1b_template_from_l1a_dataset (self , measurandstring , dataset_l1a ):
@@ -371,7 +351,7 @@ def l1b_template_from_l1a_dataset(self, measurandstring, dataset_l1a):
371351 elif measurandstring == "irradiance" :
372352 dataset_l1b = self .hdsb .create_ds_template (l1b_dim_sizes_dict , "L_L1B_IRR" , propagate_ds = dataset_l1a )
373353
374- dataset_l1b [ "wavelength" ]. values = dataset_l1a [ "wavelength" ]. values
354+ dataset_l1b = dataset_l1b . assign_coords ( wavelength = dataset_l1a . wavelength )
375355
376356 series_id = np .unique (dataset_l1a ['series_id' ])
377357 dataset_l1b ["series_id" ].values = series_id
@@ -380,7 +360,8 @@ def l1b_template_from_l1a_dataset(self, measurandstring, dataset_l1a):
380360 "solar_azimuth_angle" , "solar_zenith_angle" ]:
381361 temp_arr = np .empty (len (series_id ))
382362 for i in range (len (series_id )):
383- ids = np .where ((dataset_l1a ['series_id' ] == series_id [i ]) & (dataset_l1a ['quality_flag' ] == 0 ))
363+ ids = np .where ((dataset_l1a ['series_id' ] == series_id [i ]) & np .invert (
364+ DatasetUtil .unpack_flags (dataset_l1a ["quality_flag" ])["outliers" ]))
384365 temp_arr [i ] = np .mean (dataset_l1a [variablestring ].values [ids ])
385366 dataset_l1b [variablestring ].values = temp_arr
386367
0 commit comments