Files
2026-09-04 14:58:42 +08:00

62 lines
2.1 KiBLFS
Python

from datetime import datetime
import numpy as np
import pandas as pd
TIME_THRESHOLD = 5 # s
def timestamp(dt):
return (dt.replace(tzinfo=None) - datetime(2019, 1, 1)).total_seconds()
def calc_detection_performance(t_pred, t_true, time_accuracy_threshold=3):
# time_accuracy_threshold = 3 #s
evaluation_matrix = np.abs(t_pred[np.newaxis, :] - t_true[:, np.newaxis]) < time_accuracy_threshold # s
recalls = np.sum(evaluation_matrix, axis=1) > 0
num_recall = np.sum(recalls)
num_precision = np.sum(np.sum(evaluation_matrix, axis=0) > 0)
if (len(t_true) > 0) and (len(t_pred) > 0):
recall = num_recall / len(t_true)
precision = num_precision / len(t_pred)
f1 = 2 * recall * precision / (recall + precision)
return recall, precision, f1
def filter_catalog(catalog, start_datetime, end_datetime):
selected_catalog = catalog[(catalog["date"] >= start_datetime) & (catalog["date"] <= end_datetime)]
print(f"Filtered catalog {start_datetime}-{end_datetime}: {len(selected_catalog)} events")
t_event = []
for _, row in selected_catalog.iterrows():
t_event.append(timestamp(row["date"]))
t_event = np.array(t_event)
return t_event, selected_catalog
def load_catalog(fname):
catalog = pd.read_csv(fname)
catalog["date"] = catalog["time"].map(datetime.fromisoformat)
return catalog
def test(start_datetime: str = "2019-07-04T19:00:00", end_datetime: str = "2019-07-04T20:00:00"):
gamma_events_csv = "/root/results.csv"
scsn_events_csv = "/verifier/catalog.csv"
## read catalaogs
t_gamma, catalog_gamma = filter_catalog(
load_catalog(gamma_events_csv),
start_datetime,
end_datetime,
)
catalog_gamma["time"] = catalog_gamma["time"].apply(lambda x: datetime.fromisoformat(x))
t_scsn, catalog_scsn = filter_catalog(
load_catalog(scsn_events_csv),
start_datetime,
end_datetime,
)
time_threshold = TIME_THRESHOLD
recall, precision, f1 = calc_detection_performance(t_gamma, t_scsn, time_threshold)
return recall, precision, f1