Loading python/aeFF.py +18 −15 Original line number Diff line number Diff line # va bene fare la media per ogni combinazione theta phi di energia? # dato che divido per gli eventi detected va bene cosi o devo dividere per il totale # dei generati e moltiplicare per l'area della sorgente? import os import astropy.io.fits as fits import pandas as pd Loading @@ -18,26 +21,26 @@ def get_data(file_path): return energy, ratio_X, ratio_S def write_raw_results(output_file, results): with open(output_file, "a") as f: def write_raw_results(output, results): with open(output, "a") as f: for energy, ratio_X, ratio_S in results: f.write(f"{energy:.1f}\t{ratio_X:.3f}\t{ratio_S:.3f}\n") # se vuoi i dati rough commenta questa funzione def write_results(output_file): # Questa riga legge il file .dat e crea un DataFrame data = pd.read_csv(output_file, delim_whitespace=True, header=None, names=['energy', 'ratio_X', 'ratio_S']) # Calcola la media per ogni valore unico di energia result = data.groupby('energy').mean().reset_index() # Approssima i risultati alla terza cifra decimale result = result.round(3) # Scrive il risultato nel file di output result.to_csv(output_file, sep='\t', index=False, header=False) #def write_results(output_file): # # Questa riga legge il file .dat e crea un DataFrame # data = pd.read_csv(output_file, delim_whitespace=True, header=None, names=['energy', 'ratio_X', 'ratio_S']) # # Calcola la media per ogni valore unico di energia # result = data.groupby('energy').mean().reset_index() # # Approssima i risultati alla terza cifra decimale # result = result.round(3) # # Scrive il risultato nel file di output # result.to_csv(output_file, sep='\t', index=False, header=False) # Funzione che processa tutti i file .fits presenti nella folder def process_folder_parallel(folder_path, output_file): def process_folder_parallel(folder, output): # Crea una lista di file FITS trovati nella folder. Sorted per leggerli in ordine files = sorted([os.path.join(folder_path, file) for file in os.listdir(folder_path) if file.endswith(".fits")], key=os.path.getmtime) files = sorted([os.path.join(folder, file) for file in os.listdir(folder) if file.endswith(".fits")], key=os.path.getmtime) # Crea un pool di processi che permette di eseguire funzioni in parallelo. # Usa il metodo map() del pool per eseguire la funzione get_data() su ciascun file FITS in parallelo. Loading @@ -45,9 +48,9 @@ def process_folder_parallel(folder_path, output_file): with Pool() as pool: results = pool.map(get_data, files) # qui files è l'argomento che passi a get_data write_raw_results(output_file, results) write_raw_results(output, results) write_results(output_file) #write_results(output_file) if __name__ == "__main__": folder = "/home/alfonso/Scrivania/THESEUS/xgis_m7-main/fits" Loading Loading
python/aeFF.py +18 −15 Original line number Diff line number Diff line # va bene fare la media per ogni combinazione theta phi di energia? # dato che divido per gli eventi detected va bene cosi o devo dividere per il totale # dei generati e moltiplicare per l'area della sorgente? import os import astropy.io.fits as fits import pandas as pd Loading @@ -18,26 +21,26 @@ def get_data(file_path): return energy, ratio_X, ratio_S def write_raw_results(output_file, results): with open(output_file, "a") as f: def write_raw_results(output, results): with open(output, "a") as f: for energy, ratio_X, ratio_S in results: f.write(f"{energy:.1f}\t{ratio_X:.3f}\t{ratio_S:.3f}\n") # se vuoi i dati rough commenta questa funzione def write_results(output_file): # Questa riga legge il file .dat e crea un DataFrame data = pd.read_csv(output_file, delim_whitespace=True, header=None, names=['energy', 'ratio_X', 'ratio_S']) # Calcola la media per ogni valore unico di energia result = data.groupby('energy').mean().reset_index() # Approssima i risultati alla terza cifra decimale result = result.round(3) # Scrive il risultato nel file di output result.to_csv(output_file, sep='\t', index=False, header=False) #def write_results(output_file): # # Questa riga legge il file .dat e crea un DataFrame # data = pd.read_csv(output_file, delim_whitespace=True, header=None, names=['energy', 'ratio_X', 'ratio_S']) # # Calcola la media per ogni valore unico di energia # result = data.groupby('energy').mean().reset_index() # # Approssima i risultati alla terza cifra decimale # result = result.round(3) # # Scrive il risultato nel file di output # result.to_csv(output_file, sep='\t', index=False, header=False) # Funzione che processa tutti i file .fits presenti nella folder def process_folder_parallel(folder_path, output_file): def process_folder_parallel(folder, output): # Crea una lista di file FITS trovati nella folder. Sorted per leggerli in ordine files = sorted([os.path.join(folder_path, file) for file in os.listdir(folder_path) if file.endswith(".fits")], key=os.path.getmtime) files = sorted([os.path.join(folder, file) for file in os.listdir(folder) if file.endswith(".fits")], key=os.path.getmtime) # Crea un pool di processi che permette di eseguire funzioni in parallelo. # Usa il metodo map() del pool per eseguire la funzione get_data() su ciascun file FITS in parallelo. Loading @@ -45,9 +48,9 @@ def process_folder_parallel(folder_path, output_file): with Pool() as pool: results = pool.map(get_data, files) # qui files è l'argomento che passi a get_data write_raw_results(output_file, results) write_raw_results(output, results) write_results(output_file) #write_results(output_file) if __name__ == "__main__": folder = "/home/alfonso/Scrivania/THESEUS/xgis_m7-main/fits" Loading