Skip to content

Commit 937c465

Browse files
committed
fixing interpolate and other changes to make outdoor_test work and propagate the different types of uncertainties
1 parent 1b9efd6 commit 937c465

18 files changed

+2140
-96
lines changed
Binary file not shown.

hypernets_processor/calibration/calibrate.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,9 @@ def calibrate_l1a(self, measurandstring, dataset_l0, dataset_l0_bla, swir=False)
6767
if self.context.get_config_value("plot_l1a"):
6868
self.plot.plot_scans_in_series(measurandstring,dataset_l1a)
6969

70+
if self.context.get_config_value("plot_l1a_diff"):
71+
self.plot.plot_diff_scans(measurandstring,dataset_l1a)
72+
7073
return dataset_l1a
7174

7275
def prepare_calibration_data(self,measurandstring, swir=False):

hypernets_processor/combine_SWIR/combine_SWIR.py

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
from hypernets_processor.version import __version__
66
from hypernets_processor.data_utils.average import Average
7+
from hypernets_processor.plotting.plotting import Plotting
78
from hypernets_processor.data_io.hypernets_writer import HypernetsWriter
89
from hypernets_processor.data_io.data_templates import DataTemplates
910
from hypernets_processor.combine_SWIR.measurement_functions.combine_factory import CombineFactory
@@ -28,6 +29,7 @@ def __init__(self,context,MCsteps=1000,parallel_cores=1):
2829
self.avg = Average(context=context)
2930
self.templ = DataTemplates(context)
3031
self.writer=HypernetsWriter(context)
32+
self.plot=Plotting(context)
3133
self.context = context
3234

3335
def combine(self,measurandstring,dataset_l1a,dataset_l1a_swir):
@@ -60,19 +62,19 @@ def combine(self,measurandstring,dataset_l1a,dataset_l1a_swir):
6062
None]
6163
cov_systematic_input_qty_indep = [None,
6264
punpy.convert_corr_to_cov(dataset_l1b["corr_systematic_indep_" + measurandstring].values,
63-
dataset_l1b["u_systematic_indep_"+measurandstring].values),
65+
np.mean(dataset_l1b["u_systematic_indep_"+measurandstring].values,axis=1)),
6466
None,
6567
punpy.convert_corr_to_cov(dataset_l1b_swir["corr_systematic_indep_"+measurandstring].values,
66-
dataset_l1b_swir["u_systematic_indep_"+measurandstring].values),
68+
np.mean(dataset_l1b_swir["u_systematic_indep_"+measurandstring].values,axis=1)),
6769
None]
6870
cov_systematic_input_qty_corr = [None,
6971
punpy.convert_corr_to_cov(dataset_l1b["corr_systematic_corr_rad_irr_" + measurandstring].values,
70-
dataset_l1b["u_systematic_corr_rad_irr_"+measurandstring].values),
72+
np.mean(dataset_l1b["u_systematic_corr_rad_irr_"+measurandstring].values,axis=1)),
7173
None,
7274
punpy.convert_corr_to_cov(dataset_l1b_swir["corr_systematic_corr_rad_irr_"+measurandstring].values,
73-
dataset_l1b_swir["u_systematic_corr_rad_irr_"+measurandstring].values),
75+
np.mean(dataset_l1b_swir["u_systematic_corr_rad_irr_"+measurandstring].values,axis=1)),
7476
None]
75-
77+
#todo do this more consistently with other modules, and do a direct copy for ranges that don't overlap
7678
dataset_l1b_comb = self.templ.l1b_template_from_combine(measurandstring,dataset_l1b,dataset_l1b_swir)
7779

7880
self.process_measurement_function(measurandstring,dataset_l1b_comb,
@@ -84,15 +86,15 @@ def combine(self,measurandstring,dataset_l1a,dataset_l1a_swir):
8486
cov_systematic_input_qty_corr)
8587

8688
if self.context.get_config_value("write_l1b"):
87-
self.writer.write(dataset_l1b, overwrite=True)
89+
self.writer.write(dataset_l1b_comb, overwrite=True)
8890

8991
if self.context.get_config_value("plot_l1b"):
90-
self.plot.plot_series_in_sequence(measurandstring,dataset_l1b)
92+
self.plot.plot_series_in_sequence(measurandstring,dataset_l1b_comb)
9193

9294
# if self.context.get_config_value("plot_diff"):
9395
# self.plot.plot_diff_scans(measurandstring,dataset_l1a,dataset_l1b)
9496

95-
return dataset_l1b
97+
return dataset_l1b_comb
9698

9799
def find_input(self,variables,dataset):
98100
"""
@@ -192,16 +194,16 @@ def process_measurement_function(self,measurandstring,dataset,measurement_functi
192194
warnings.simplefilter("ignore")
193195
u_random_measurand = self.prop.propagate_random(measurement_function,
194196
input_quantities,
195-
u_random_input_quantities,
197+
u_random_input_quantities,param_fixed=[False,False,False,False,True],
196198
repeat_dims=1)
197199
u_syst_measurand_indep,corr_syst_measurand_indep = self.prop.propagate_systematic(
198200
measurement_function,input_quantities,
199201
u_systematic_input_quantities_indep,
200-
cov_x=cov_systematic_input_quantities_indep,return_corr=True,
202+
cov_x=cov_systematic_input_quantities_indep,return_corr=True,param_fixed=[False,False,False,False,True],
201203
repeat_dims=1,corr_axis=0)
202204
u_syst_measurand_corr,corr_syst_measurand_corr = self.prop.propagate_systematic(
203205
measurement_function,input_quantities,u_systematic_input_quantities_corr,
204-
cov_x=cov_systematic_input_quantities_corr,return_corr=True,
206+
cov_x=cov_systematic_input_quantities_corr,return_corr=True,param_fixed=[False,False,False,False,True],
205207
repeat_dims=1,corr_axis=0)
206208
dataset[measurandstring].values = measurand
207209
dataset["u_random_"+measurandstring].values = u_random_measurand

hypernets_processor/data_utils/average.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,9 @@ def average_l1b(self, measurandstring, dataset_l1a):
3636
dataset_l1b["corr_random_" + measurandstring].values = np.eye(
3737
len(dataset_l1b["u_random_" + measurandstring].values))
3838
dataset_l1b["corr_systematic_indep_"+measurandstring].values = \
39-
self.calc_mean_masked(dataset_l1a,"corr_systematic_indep_"+
40-
measurandstring,corr=True)
39+
dataset_l1a["corr_systematic_indep_"+measurandstring].values
4140
dataset_l1b["corr_systematic_corr_rad_irr_"+measurandstring].values = \
42-
self.calc_mean_masked(dataset_l1a,"corr_systematic_corr_rad_irr_"+
43-
measurandstring,corr=True)
41+
dataset_l1a["corr_systematic_corr_rad_irr_"+measurandstring].values
4442

4543
return dataset_l1b
4644

@@ -49,6 +47,15 @@ def calc_mean_masked(self, dataset, var, rand_unc=False, corr=False):
4947
if corr:
5048
out = np.empty\
5149
((len(series_id), len(dataset['wavelength']), len(dataset['wavelength'])))
50+
51+
print("corr",dataset[var].values)
52+
for i in range(len(series_id)):
53+
ids = np.where((dataset['series_id'] == series_id[i]) & np.invert(
54+
DatasetUtil.unpack_flags(dataset["quality_flag"])["outliers"]))
55+
out[i] = np.mean(dataset[var].values[:,:,ids],axis=3)[:,:,0]
56+
57+
out = np.mean(out, axis=0)
58+
5259
else:
5360
out = np.empty((len(series_id), len(dataset['wavelength'])))
5461

@@ -57,11 +64,8 @@ def calc_mean_masked(self, dataset, var, rand_unc=False, corr=False):
5764
np.invert
5865
(DatasetUtil.unpack_flags(dataset["quality_flag"])["outliers"]))
5966
out[i] = np.mean(dataset[var].values[:, ids], axis=2)[:, 0]
60-
print("ids",i,ids,out[i].shape)
6167

6268
if rand_unc:
6369
out[i] = out[i] / len(ids[0])
64-
if corr:
65-
out = np.mean(out, axis=0)
66-
print(i,out[0].shape,out.shape,out.T.shape)
70+
6771
return out.T

hypernets_processor/etc/processor.config

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[Processor]
2-
2+
archive_directory: C:\Users\pdv\PycharmProjects\hypernets_processor\hypernets_processor\out\
33
network: w
44

55
[Wavelength_cal]

hypernets_processor/etc/processor_2.config

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
[Processor]
22

33
network: l
4+
archive_directory: C:\Users\pdv\PycharmProjects\hypernets_processor\hypernets_processor\out\
5+
version: 0.1
46

57
[Wavelength_cal]
68
mapping_vis_a: +1.6499700E+02
@@ -24,10 +26,10 @@ measurement_function_calibrate: StandardMeasurementFunction
2426
model=series_rep,series_id,vaa,azimuth_ref,vza,mode,action,it,scan_total,series_time
2527

2628
[Interpolate]
27-
measurement_function_interpolate: WaterNetworkInterpolationLinear
29+
measurement_function_interpolate: LandNetworkInterpolationIrradianceLinear
2830

2931
[SurfaceReflectance]
30-
measurement_function_surface_reflectance: WaterNetworkProtocol
32+
measurement_function_surface_reflectance: LandNetworkProtocol
3133

3234
[CombineSWIR]
3335
combine_lim_wav: 1000
@@ -36,14 +38,15 @@ measurement_function_combine: StepCombine
3638
[Output]
3739
write_l0: False
3840
write_l1a: True
39-
write_l1b: False
40-
write_l1c: False
41+
write_l1b: True
42+
write_l1c: True
4143
write_l2a: True
4244

4345
plot_l0: False
44-
plot_l1a: False
46+
plot_l1a: True
47+
plot_l1a_diff: False
4548
plot_l1b: True
46-
plot_l1c: False
49+
plot_l1c: True
4750
plot_l2a: True
4851

4952
[Flags]

hypernets_processor/etc/processor_land_defaults.config

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ write_l2a: True
3737
plotting_format: png
3838
plot_l0: False
3939
plot_l1a: True
40-
plot_diff: True
40+
plot_l1a_diff: True
4141
plot_l1b: True
4242
plot_l1c: True
4343
plot_l2a: True

hypernets_processor/etc/processor_water_defaults.config

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ write_l2a: True
7575
plotting_format: png
7676
plot_l0: False
7777
plot_l1a: True
78-
plot_diff: True
78+
plot_l1a_diff: True
7979
plot_l1b: True
8080
plot_l1c: True
8181
plot_l2a: True

hypernets_processor/interpolation/interpolate.py

Lines changed: 63 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,15 @@ def interpolate_l1b_w(self,dataset_l1a_rad,dataset_l1b_uprad, dataset_l1b_irr):
3939
dataset_l1b["acquisition_time"] = dataset_l1a_rad["acquisition_time"].sel(scan=upscan)
4040
# is this correct????
4141
dataset_l1b["u_random_upwelling_radiance"] = dataset_l1a_rad["u_random_radiance"].sel(scan=upscan)
42-
dataset_l1b["u_systematic_upwelling_radiance"] = dataset_l1a_rad["u_systematic_radiance"].sel(scan=upscan)
42+
dataset_l1b["u_systematic_indep_upwelling_radiance"] = dataset_l1a_rad["u_systematic_indep_radiance"].sel(scan=upscan)
43+
dataset_l1b["u_systematic_corr_rad_irr_upwelling_radiance"] = dataset_l1a_rad["u_systematic_corr_rad_irr_radiance"].sel(scan=upscan)
4344
dataset_l1b["corr_random_upwelling_radiance"] = dataset_l1a_rad["corr_random_radiance"]
44-
dataset_l1b["corr_systematic_upwelling_radiance"] = dataset_l1a_rad["corr_systematic_radiance"]
45+
dataset_l1b["corr_systematic_indep_upwelling_radiance"] = dataset_l1a_rad["corr_systematic_indep_radiance"]
46+
dataset_l1b["corr_systematic_corr_rad_irr_upwelling_radiance"] = dataset_l1a_rad["corr_systematic_corr_rad_irr_radiance"]
4547

46-
print("interpolate sky radiance")
47-
print(dataset_l1b)
48+
self.context.logger.info("interpolate sky radiance")
4849
dataset_l1b=self.interpolate_skyradiance(dataset_l1b, dataset_l1b_uprad)
49-
print("interpolate irradiances")
50+
self.context.logger.info("interpolate irradiances")
5051
dataset_l1b=self.interpolate_irradiance(dataset_l1b, dataset_l1b_irr)
5152

5253
if self.context.get_config_value("write_l1b"):
@@ -57,7 +58,6 @@ def interpolate_l1c(self,dataset_l1b_rad,dataset_l1b_irr):
5758

5859

5960
dataset_l1c=self.templ.l1c_from_l1b_dataset(dataset_l1b_rad)
60-
print(dataset_l1b_rad["acquisition_time"])
6161
dataset_l1c["acquisition_time"].values = dataset_l1b_rad["acquisition_time"].values
6262

6363
dataset_l1c["radiance"].values = dataset_l1b_rad["radiance"].values
@@ -83,12 +83,14 @@ def interpolate_irradiance(self,dataset_l1c,dataset_l1b_irr):
8383

8484
acqui_irr = dataset_l1b_irr['acquisition_time'].values
8585
acqui_rad = dataset_l1c['acquisition_time'].values
86+
print("times",acqui_rad,acqui_irr)
87+
print(dataset_l1b_irr["u_systematic_indep_irradiance"].values.shape)
8688
cov_indep = punpy.convert_corr_to_cov(
8789
dataset_l1b_irr["corr_systematic_indep_irradiance"].values,
88-
dataset_l1b_irr["u_systematic_indep_irradiance"].values)
90+
np.mean(dataset_l1b_irr["u_systematic_indep_irradiance"].values,axis=1))
8991
cov_corr = punpy.convert_corr_to_cov(
9092
dataset_l1b_irr["corr_systematic_corr_rad_irr_irradiance"].values,
91-
dataset_l1b_irr["u_systematic_corr_rad_irr_irradiance"].values)
93+
np.mean(dataset_l1b_irr["u_systematic_corr_rad_irr_irradiance"].values,axis=1))
9294

9395
dataset_l1c = self.process_measurement_function("irradiance",dataset_l1c,interpolation_function.function,
9496
[acqui_rad,acqui_irr,dataset_l1b_irr['irradiance'].values],
@@ -106,10 +108,27 @@ def interpolate_skyradiance(self,dataset_l1c,dataset_l1a_skyrad):
106108
acqui_irr = dataset_l1a_skyrad['acquisition_time'].values
107109
acqui_rad = dataset_l1c['acquisition_time'].values
108110

109-
dataset_l1c = self.process_measurement_function("downwelling_radiance",dataset_l1c,interpolation_function.function,
110-
[acqui_rad,acqui_irr,dataset_l1a_skyrad['radiance'].values],
111-
[None,None,dataset_l1a_skyrad['u_random_radiance'].values],
112-
[None,None,dataset_l1a_skyrad['u_systematic_radiance'].values])
111+
cov_indep = punpy.convert_corr_to_cov(
112+
dataset_l1a_skyrad["corr_systematic_indep_radiance"].values,
113+
np.mean(dataset_l1a_skyrad["u_systematic_indep_radiance"].values,axis=1))
114+
cov_corr = punpy.convert_corr_to_cov(
115+
dataset_l1a_skyrad["corr_systematic_corr_rad_irr_radiance"].values,
116+
np.mean(dataset_l1a_skyrad["u_systematic_corr_rad_irr_radiance"].values,
117+
axis=1))
118+
119+
dataset_l1c = self.process_measurement_function("downwelling_radiance",dataset_l1c,
120+
interpolation_function.function,
121+
[acqui_rad,acqui_irr,
122+
dataset_l1a_skyrad[
123+
'radiance'].values],
124+
[None,None,dataset_l1a_skyrad[
125+
'u_random_radiance'].values],
126+
[None,None,dataset_l1a_skyrad[
127+
'u_systematic_indep_radiance'].values],
128+
[None,None,dataset_l1a_skyrad[
129+
'u_systematic_corr_rad_irr_radiance'].values],
130+
[None,None,cov_indep],
131+
[None,None,cov_corr])
113132
return dataset_l1c
114133

115134
def process_measurement_function(self,measurandstring,dataset,measurement_function,
@@ -118,22 +137,49 @@ def process_measurement_function(self,measurandstring,dataset,measurement_functi
118137
u_systematic_input_quantities_corr,
119138
cov_systematic_input_quantities_indep,
120139
cov_systematic_input_quantities_corr):
140+
141+
# datashape = input_quantities[0].shape
142+
# for i in range(len(input_quantities)):
143+
# if len(input_quantities[i].shape) > len(datashape):
144+
# datashape = input_quantities[0].shape
145+
#
146+
# for i in range(len(input_quantities)):
147+
# print(input_quantities[i].shape)
148+
# if len(input_quantities[i].shape) < len(datashape):
149+
# if input_quantities[i].shape[0]==datashape[1]:
150+
# input_quantities[i] = np.tile(input_quantities[i],(datashape[0],1))
151+
# else:
152+
# input_quantities[i] = np.tile(input_quantities[i],(datashape[1],1)).T
153+
# print(input_quantities[i].shape)
154+
#
155+
# if u_random_input_quantities[i] is not None:
156+
# if len(u_random_input_quantities[i].shape) < len(datashape):
157+
# u_random_input_quantities[i] = np.tile(u_random_input_quantities[i], (datashape[1], 1)).T
158+
# if u_systematic_input_quantities_indep[i] is not None:
159+
# if len(u_systematic_input_quantities_indep[i].shape) < len(datashape):
160+
# u_systematic_input_quantities_indep[i] = np.tile(u_systematic_input_quantities_indep[i], (datashape[1], 1)).T
161+
# if u_systematic_input_quantities_corr[i] is not None:
162+
# if len(u_systematic_input_quantities_corr[i].shape) < len(datashape):
163+
# u_systematic_input_quantities_corr[i] = np.tile(u_systematic_input_quantities_corr[i], (datashape[1], 1)).T
164+
print(*input_quantities)
121165
measurand = measurement_function(*input_quantities)
122166
with warnings.catch_warnings():
123167
warnings.simplefilter("ignore")
124168
u_random_measurand = self.prop.propagate_random(measurement_function,
125169
input_quantities,
126170
u_random_input_quantities,
127-
repeat_dims=1)
171+
param_fixed=[False,True,True],
172+
repeat_dims=1)
173+
print("shapes", cov_systematic_input_quantities_indep[2].shape,input_quantities[2].shape,u_systematic_input_quantities_indep[2].shape)
128174
u_syst_measurand_indep,corr_syst_measurand_indep = self.prop.propagate_systematic(
129175
measurement_function,input_quantities,
130176
u_systematic_input_quantities_indep,
131-
cov_x=cov_systematic_input_quantities_indep,return_corr=True,
132-
repeat_dims=1,corr_axis=0)
177+
cov_x=['rand']*len(u_random_input_quantities),return_corr=True,
178+
corr_axis=0,param_fixed=[False,True,True],repeat_dims=1)
133179
u_syst_measurand_corr,corr_syst_measurand_corr = self.prop.propagate_systematic(
134180
measurement_function,input_quantities,u_systematic_input_quantities_corr,
135-
cov_x=cov_systematic_input_quantities_corr,return_corr=True,
136-
repeat_dims=1,corr_axis=0)
181+
cov_x=['rand']*len(u_random_input_quantities),return_corr=True,
182+
corr_axis=0,param_fixed=[False,True,True],repeat_dims=1)
137183
dataset[measurandstring].values = measurand
138184
dataset["u_random_"+measurandstring].values = u_random_measurand
139185
dataset["u_systematic_indep_"+measurandstring].values = u_syst_measurand_indep
@@ -146,9 +192,3 @@ def process_measurement_function(self,measurandstring,dataset,measurement_functi
146192
"corr_systematic_corr_rad_irr_"+measurandstring].values = corr_syst_measurand_corr
147193

148194
return dataset
149-
150-
151-
152-
153-
154-

0 commit comments

Comments
 (0)