diff --git a/src/damaris/data/Accumulation.py b/src/damaris/data/Accumulation.py index de4395d..282a11b 100644 --- a/src/damaris/data/Accumulation.py +++ b/src/damaris/data/Accumulation.py @@ -1160,26 +1160,66 @@ def read_from_hdf(hdf_node): earliest_time=None if "earliest_time" in dir(hdf_node._v_attrs): timestring=hdf_node._v_attrs.__getattr__("earliest_time") - earliest_time=datetime.datetime(int(timestring[:4]), # year - int(timestring[4:6]), # month - int(timestring[6:8]), # day - int(timestring[9:11]), # hour - int(timestring[12:14]), # minute - int(timestring[15:17]), # second - int(timestring[18:21])*1000 # microsecond - ) + # Handle both formats: "20260705 19:13:59.162" and "2026-07-05 19:13:59.162" + if '-' in timestring: + # New format: "2026-07-05 19:13:59.162" + try: + earliest_time=datetime.datetime.strptime(str(timestring), '%Y-%m-%d %H:%M:%S.%f') + except ValueError: + # Fallback to manual parsing + parts = timestring.split() + if len(parts) >= 2: + date_parts = parts[0].split('-') + time_parts = parts[1].split(':') + if len(date_parts) == 3 and len(time_parts) >= 2: + year, month, day = int(date_parts[0]), int(date_parts[1]), int(date_parts[2]) + hour, minute = int(time_parts[0]), int(time_parts[1]) + second_parts = time_parts[2].split('.') if len(time_parts) > 2 else ['0'] + second = int(second_parts[0]) + microsecond = int(second_parts[1].ljust(6, '0')[:6]) if len(second_parts) > 1 else 0 + earliest_time=datetime.datetime(year, month, day, hour, minute, second, microsecond) + else: + # Old format: "20260705 19:13:59.162" + earliest_time=datetime.datetime(int(timestring[:4]), # year + int(timestring[4:6]), # month + int(timestring[6:8]), # day + int(timestring[9:11]), # hour + int(timestring[12:14]), # minute + int(timestring[15:17]), # second + int(timestring[18:21])*1000 # microsecond + ) oldest_time=None if "oldest_time" in dir(hdf_node._v_attrs): timestring=hdf_node._v_attrs.__getattr__("oldest_time") - oldest_time=datetime.datetime(int(timestring[:4]), # year - int(timestring[4:6]), # month - int(timestring[6:8]), # day - int(timestring[9:11]), # hour - int(timestring[12:14]), # minute - int(timestring[15:17]), # second - int(timestring[18:21])*1000 # microsecond - ) + # Handle both formats: "20260705 19:13:59.162" and "2026-07-05 19:13:59.162" + if '-' in timestring: + # New format: "2026-07-05 19:13:59.162" + try: + oldest_time=datetime.datetime.strptime(str(timestring), '%Y-%m-%d %H:%M:%S.%f') + except ValueError: + # Fallback to manual parsing + parts = timestring.split() + if len(parts) >= 2: + date_parts = parts[0].split('-') + time_parts = parts[1].split(':') + if len(date_parts) == 3 and len(time_parts) >= 2: + year, month, day = int(date_parts[0]), int(date_parts[1]), int(date_parts[2]) + hour, minute = int(time_parts[0]), int(time_parts[1]) + second_parts = time_parts[2].split('.') if len(time_parts) > 2 else ['0'] + second = int(second_parts[0]) + microsecond = int(second_parts[1].ljust(6, '0')[:6]) if len(second_parts) > 1 else 0 + oldest_time=datetime.datetime(year, month, day, hour, minute, second, microsecond) + else: + # Old format: "20260705 19:13:59.162" + oldest_time=datetime.datetime(int(timestring[:4]), # year + int(timestring[4:6]), # month + int(timestring[6:8]), # day + int(timestring[9:11]), # hour + int(timestring[12:14]), # minute + int(timestring[15:17]), # second + int(timestring[18:21])*1000 # microsecond + ) if oldest_time is None or earliest_time is None: accu.time_period=None @@ -1212,7 +1252,7 @@ def read_from_hdf(hdf_node): accu.y_square=[] accu.use_error=False - for ch in range(accu_data.shape[1]/2): + for ch in range(accu_data.shape[1] // 2): accu.y.append(accu_data[:,ch*2]*accu.n) if accu.n<2 or numpy.all(accu_data[:,ch*2+1]==0.0): accu.y_square.append(numpy.zeros((accu_data.shape[0]) ,dtype="float32"))