import pandas as pd import numpy as np from pathlib import Path def load_csv_with_standard_decimal(file_path): with open(file_path, 'r') as f: scene_line = f.readline().strip() scene_name = scene_line.split(': ')[1].split('_')[0] df = pd.read_csv(file_path, skiprows=1) return df, scene_name def calculate_distance(row): origin = np.array([row['XR_Origin_X'], row['XR_Origin_Y'], row['XR_Origin_Z']]) tracked = np.array([row['TrackedObject_X'], row['TrackedObject_Y'], row['TrackedObject_Z']]) return np.linalg.norm(tracked - origin) def process_position_data(data_dir): data_by_scene = {} all_distances = [] csv_files = list(Path(data_dir).glob('**/P*_PositionData*.csv')) for file_path in csv_files: df, scene_name = load_csv_with_standard_decimal(str(file_path)) df['Distance'] = df.apply(calculate_distance, axis=1) all_distances.extend(df['Distance']) if scene_name not in data_by_scene: data_by_scene[scene_name] = [] data_by_scene[scene_name].extend(df['Distance']) return all_distances, data_by_scene def print_stats(distances, label): distances = np.array(distances) print(f"\n--- {label} ---") print(f"Count: {len(distances)}") print(f"Mean: {np.mean(distances):.4f}") print(f"Std: {np.std(distances):.4f}") print(f"Min: {np.min(distances):.4f}") print(f"Max: {np.max(distances):.4f}") print(f"25th percentile: {np.percentile(distances, 25):.4f}") print(f"50th percentile (median): {np.percentile(distances, 50):.4f}") print(f"75th percentile: {np.percentile(distances, 75):.4f}") def main(): all_distances, data_by_scene = process_position_data('Recordings') print_stats(all_distances, 'All Scenes Combined') for scene, distances in data_by_scene.items(): print_stats(distances, f'Scene: {scene}') if __name__ == "__main__": main()