Skip to content

Commit 17bf5c1

Browse files
committed
Read and format .pkl file for variance
1 parent 380ddaf commit 17bf5c1

1 file changed

Lines changed: 37 additions & 5 deletions

File tree

pipt/loop/ensemble.py

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -240,9 +240,12 @@ def _org_obs_data(self):
240240

241241
# Check if a csv file has been included in TRUEDATA. If so, we read it and make a 2D list, which we can use
242242
# in the below when assigning data to obs_data dictionary
243-
if isinstance(self.keys_da['truedata'], str) and self.keys_da['truedata'].endswith('.csv'):
244-
truedata = rcsv.read_data_csv(
245-
self.keys_da['truedata'], self.keys_da['datatype'], self.keys_da['truedataindex'])
243+
if isinstance(self.keys_da['truedata'], str) and (self.keys_da['truedata'].endswith('.csv') or self.keys_da['truedata'].endswith('.pkl')):
244+
self.obs_data, self.keys_da['datatype'], self.truedataindex = rcsv.read_data_df(self.keys_da['truedata'],outtype='list')
245+
self.keys_da['truedataindex'] = self.truedataindex
246+
247+
# This does not need any more adjustment
248+
return
246249

247250
# # Check if assimindex is given as a csv file. If so, we read and make a potential 2D list (if sequential).
248251
# if isinstance(self.keys_da['assimindex'], str) and self.keys_da['assimindex'].endswith('.csv'):
@@ -421,9 +424,38 @@ def _org_data_var(self):
421424
# extracted from the csv file
422425
if isinstance(self.keys_da['datavar'], str) and self.keys_da['datavar'].endswith('.csv'):
423426
datavar = rcsv.read_var_csv(self.keys_da['datavar'], datatype, true_prim)
427+
428+
if isinstance(self.keys_da['datavar'], str) and self.keys_da['datavar'].endswith('.pkl'):
429+
datavar = rcsv.read_var_df(self.keys_da['datavar'], datatype=self.keys_da['datatype'],
430+
truedataindex=self.keys_da['truedataindex'])
431+
432+
433+
# Initialize datavar output
434+
self.datavar = [None] * len(true_prim)
435+
for i in range(len(self.obs_data)): # TRUEDATAINDEX
436+
# Init. dict. with datatypes (do inside loop to avoid copy of same entry)
437+
self.datavar[i] = {}
438+
for j in range(len(datatype)): # DATATYPE
439+
if self.obs_data[i][datatype[j]] is not None:
440+
self.datavar[i][datatype[j]] = []
441+
for c,el in enumerate(self.obs_data[i][datatype[j]]):
442+
if datavar[i][datatype[j]][0].lower() == 'rel':
443+
self.datavar[i][datatype[j]].append((datavar[i][datatype[j]][1]*(el*0.01))**2)
444+
elif datavar[i][datatype[j]][0].lower() == 'abs':
445+
# Check if datavar[i][datatype[j]][1] is iterable
446+
var_value = datavar[i][datatype[j]][1]
447+
if hasattr(var_value, '__iter__') and not isinstance(var_value, str):
448+
self.datavar[i][datatype[j]].append(var_value[c])
449+
else:
450+
self.datavar[i][datatype[j]].append(var_value)
451+
else:
452+
print('\n\033[1;31mERROR: Cannot read data variance from pkl file! The first entry in the pkl file must be either "rel" or "abs"!\033[1;m')
453+
sys.exit()
454+
self.datavar[i][datatype[j]] = np.array(self.datavar[i][datatype[j]])
455+
else:
456+
self.datavar[i][datatype[j]] = None
424457

425-
# Initialize datavar output
426-
self.datavar = [None] * len(true_prim)
458+
return
427459

428460
# Loop over all entries in datavar and fill in values from "DATAVAR" (use obs_data values in the REL variance
429461
# cases)

0 commit comments

Comments
 (0)