@@ -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