def doubles_classification_stats(positions, energies, classification, close_max=1.0, scale=False): """Outputs calculated separation distances, relative energies, and energy differences for double events in the dataset. :param positions: event positions of interest, e.g validation positions :param energies: event energies of interest, e.g validation energies :param classification: event classification result :param close_max: Upper limit to what is to be considered a 'close' event. Defaults to 1.0 pixels. :return df_doubles: DataFrame containing information about double events """ s_idx, d_idx, c_idx = event_indices(positions, close_max) sep_dist = separation_distance(positions[d_idx]) energy_diff = energy_difference(energies[d_idx]) rel_energy = relative_energy(energies[d_idx], scale=scale) df_doubles = pd.DataFrame(data={ "close": np.isin(d_idx, c_idx), "separation distance": sep_dist.flatten(), "relative energy": rel_energy.flatten(), "energy difference": energy_diff.flatten(), "classification": classification[d_idx].flatten(), "indices": d_idx.flatten(), }, index=np.arange(d_idx.shape[0])) return df_doubles
def singles_classification_stats(positions, energies, classification): """Outputs calculated separation distances, relative energies, and energy differences for double events in the dataset. :param positions: event positions of interest, e.g validation positions :param energies: event energies of interest, e.g validation energies :param classification: event classification result :return df_singles: DataFrame containing information about single events """ s_idx, d_idx, c_idx = event_indices(positions) df_singles = pd.DataFrame(data={ "x_pos": positions[s_idx, 0].flatten(), "y_pos": positions[s_idx, 1].flatten(), "energy": energies[s_idx, 0].flatten(), "classification": classification[s_idx].flatten(), "indices": s_idx.flatten(), }, index=np.arange(s_idx.shape[0])) return df_singles
warnings.filterwarnings('ignore', category=FutureWarning) # ================== Config ======================= with open("results_experiment_config.json", 'r') as fp: config = json.load(fp) # ================== Callbacks ==================== # ================== Import Data ================== DATA_PATH = get_git_root() + "data/simulated/" images = np.load(DATA_PATH + config['data']['images']) images = images.reshape(images.shape[0], 256) energies = np.load(DATA_PATH + config['data']['energies']) positions = np.load(DATA_PATH + config['data']['positions']) single_indices, double_indices, close_indices = event_indices(positions) # log-scale the images if desireable config['scaling'] = "minmax" if "np.log" in config['scaling']: images = np.log1p(images) # set tf random seed tf.random.set_seed(config['random_seed']) # ================== Import Data ================== with tf.device(get_tf_device(20)): model = Sequential() model.add(Dense(2, activation='relu', input_shape=(256, ))) model.compile( loss='mse', optimizer='adam', )