@@ -70,11 +70,47 @@ def load_variables(experiment):
7070 return (input_variables , output_variables , simulation_calibration )
7171
7272
73+ def create_date_filter (experiment_date_range ):
74+ # build date filter if date range is set
75+ date_filter = {}
76+ if experiment_date_range :
77+ start_date = pd .to_datetime (experiment_date_range [0 ].to_datetime ())
78+ start_date = start_date .to_pydatetime ().replace (hour = 0 , minute = 0 , second = 0 )
79+ # VDateInput returns exclusive end date for date ranges:
80+ # - subtract 1 day for multi-date ranges with different start/end dates
81+ # - do not subtract anything (use end date as is) for single-date ranges
82+ end_date = pd .to_datetime (experiment_date_range [- 1 ].to_datetime ())
83+ end_date_correction = (
84+ pd .Timedelta (days = 0 )
85+ if len (experiment_date_range ) == 1
86+ else pd .Timedelta (days = 1 )
87+ )
88+ end_date = end_date - end_date_correction
89+ end_date = end_date .to_pydatetime ().replace (hour = 23 , minute = 59 , second = 59 )
90+ # remove timezone info to match naive datetime in database
91+ start_date = (
92+ start_date .replace (tzinfo = None ) if start_date .tzinfo else start_date
93+ )
94+ end_date = end_date .replace (tzinfo = None ) if end_date .tzinfo else end_date
95+ date_filter = {
96+ "date" : {
97+ "$gte" : start_date ,
98+ "$lte" : end_date ,
99+ }
100+ }
101+ print (f"Filtering data between { start_date .date ()} and { end_date .date ()} ..." )
102+ return date_filter
103+
104+
73105@timer
74106def load_data (db ):
75107 print ("Loading data from database..." )
108+ # create date filter if date range is set
109+ date_filter = create_date_filter (state .experiment_date_range )
76110 # load experiment and simulation data points in dataframes
77- exp_data = pd .DataFrame (db [state .experiment ].find ({"experiment_flag" : 1 }))
111+ exp_data = pd .DataFrame (
112+ db [state .experiment ].find ({"experiment_flag" : 1 , ** date_filter })
113+ )
78114 sim_data = pd .DataFrame (db [state .experiment ].find ({"experiment_flag" : 0 }))
79115 # Store '_id', 'date' as string
80116 for key in ["_id" , "date" ]:
0 commit comments