@@ -77,6 +77,9 @@ def calibrate_l1a(self, measurandstring, dataset_l0, dataset_l0_bla, swir=False)
7777 if self .context .get_config_value ("plot_l1a_diff" ):
7878 self .plot .plot_diff_scans (measurandstring ,dataset_l1a )
7979
80+ if self .context .get_config_value ("plot_uncertainty" ):
81+ self .plot .plot_relative_uncertainty (measurandstring ,dataset_l1a )
82+
8083 return dataset_l1a
8184
8285 def prepare_calibration_data (self ,measurandstring , swir = False ):
@@ -153,9 +156,11 @@ def prepare_calibration_data(self,measurandstring, swir=False):
153156 return calibration_data , wavids
154157
155158 def find_nearest_black (self , dataset , acq_time , int_time ):
156- ids = np .where (
157- (abs (dataset ['acquisition_time' ] - acq_time ) == min (abs (dataset ['acquisition_time' ] - acq_time ))) & (
158- dataset ['integration_time' ] == int_time )) #todo check if interation time alwasy has to be same
159+ ids = np .where ((abs (dataset ['acquisition_time' ] - acq_time ) ==
160+ min (abs (dataset ['acquisition_time' ] - acq_time ))) &
161+ (dataset ['integration_time' ] == int_time ))
162+ #todo check if interation time alwasy has to be same
163+
159164 return np .mean (dataset ["digital_number" ].values [:, ids ], axis = 2 )[:, 0 ]
160165
161166 def find_input (self , variables , dataset , datasetbla , ancillary_dataset ):
@@ -259,17 +264,24 @@ def preprocess_l0(self, datasetl0, datasetl0_bla, wavids):
259264
260265 DN_rand = DatasetUtil .create_variable ([len (datasetl0 ["wavelength" ]), len (datasetl0 ["scan" ])],
261266 dim_names = ["wavelength" , "scan" ], dtype = np .uint32 , fill_value = 0 )
262- DN_syst = DatasetUtil .create_variable ([len (datasetl0 ["wavelength" ]), len (datasetl0 ["scan" ])],
263- dim_names = ["wavelength" , "scan" ], dtype = np .uint32 , fill_value = 0 )
264267
265268 datasetl0 ["u_random_digital_number" ] = DN_rand
266269
267- std = (datasetl0 ['digital_number' ].where (mask == 1 )- datasetl0 ['digital_number' ].where (datasetl0 .quality_flag == 0 )).std (dim = "scan" )
268270 rand = np .zeros_like (DN_rand .values )
269- for i in range (len (datasetl0 ["scan" ])):
270- rand [:, i ] = std
271+ series_ids = np .unique (datasetl0 ['series_id' ])
272+ for i in range (len (series_ids )):
273+ ids = np .where (datasetl0 ['series_id' ] == series_ids [i ])[0 ]
274+ ids_masked = np .where ((datasetl0 ['series_id' ] == series_ids [i ]) & (mask == 0 ))[0 ]
275+ dark_signals = np .zeros_like (datasetl0 ['digital_number' ].values [:,ids_masked ])
276+ for ii ,id in enumerate (ids_masked ):
277+ dark_signals [:,ii ] = self .find_nearest_black (datasetl0_bla ,
278+ datasetl0 ['acquisition_time' ].values [id ],
279+ datasetl0 ['integration_time' ].values [id ])
280+ std = np .std ((datasetl0 ['digital_number' ].values [:,ids_masked ]- dark_signals ), axis = 1 )
281+ for ii ,id in enumerate (ids ):
282+ rand [:, id ] = std
283+
271284 datasetl0 ["u_random_digital_number" ].values = rand
272- datasetl0 ["u_systematic_digital_number" ] = DN_syst
273285
274286 return datasetl0 , datasetl0_bla
275287
@@ -280,13 +292,13 @@ def clip_and_mask(self, dataset, dataset_bla, k_unc=3):
280292
281293 # check if integrated signal is outlier
282294 series_ids = np .unique (dataset ['series_id' ])
283- out = np .empty ((len (series_ids ), len (dataset ['wavelength' ])))
284295 for i in range (len (series_ids )):
285296 ids = np .where (dataset ['series_id' ] == series_ids [i ])
286297 dark_signals = self .find_nearest_black (dataset_bla ,np .mean (
287298 dataset ['acquisition_time' ].values [ids ]),np .mean (
288299 dataset ['integration_time' ].values [ids ]))
289- intsig = np .nanmean ((dataset ["digital_number" ].values [:, ids ]- dark_signals [:,None ,None ]), axis = 0 )[0 ]
300+ intsig = np .nanmean ((dataset ["digital_number" ].values [:, ids ]-
301+ dark_signals [:,None ,None ]), axis = 0 )[0 ]
290302 noisestd , noiseavg = self .sigma_clip (intsig ) # calculate std and avg for non NaN columns
291303 maski = np .zeros_like (intsig ) # mask the columns that have NaN
292304 maski [np .where (np .abs (intsig - noiseavg ) >= k_unc * noisestd )] = 1
0 commit comments