diff --git a/.gitignore b/.gitignore index b7faf40..3684da4 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,17 @@ __pycache__/ # C extensions *.so +# Temporary files +*.log +*.tmp +*~ + +# Image files +*.pdf +*.png +*.jpg +*.gif + # Distribution / packaging .Python build/ diff --git a/TrkOnlyPID/.gitignore b/TrkOnlyPID/.gitignore new file mode 100644 index 0000000..7b57bd1 --- /dev/null +++ b/TrkOnlyPID/.gitignore @@ -0,0 +1,6 @@ +*.keras +*.csv +*.root +*.onnx +*.json +figures diff --git a/TrkOnlyPID/README.md b/TrkOnlyPID/README.md new file mode 100644 index 0000000..7483a3e --- /dev/null +++ b/TrkOnlyPID/README.md @@ -0,0 +1,35 @@ +# TrkOnlyPID + +## Introduction + +TrkOnlyPID is a machine learning algorithm is trained to differentiate between electrons and muons using information only from the tracker. + +## Workflow + +### Dataset creation +EventNtuple data files are used as input to the training. +The ntuples are skimmed using [make_inputs.py](make_inputs.py) which drops unnessary data as well as adds branches if any are needed. + +### Model training +The python code provided in the file [TrkOnlyPIDTrain.py](TrkOnlyPIDTrain.py) is used to: +* skim track information from the input ntuples and store the data in local csv files +* define the neural network architecture +* train the algorithm and save the model weights into an ONNX file named "TrkOnlyPID.onnx" +* test the algorithm, providing performance metrics +* generate plots to provide more information on the dataset, how the training went, and how the model perform + +Once the model is trained and the weights are saved in an ONNX file, this file can be used by TMVA:SOFIE to generate the inference code +that can be used in Offline (for details about this process, check [this documentation](https://github.com/Mu2e/MLTrain/blob/main/TrkQual/README.md#converting-a-model-for-use-in-offline)). + +## Version history + +### v0 (current version) +This version has been trained using MDC2025 datasets: +* signal: nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.root +* background: nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.root +It was trained using electrons and muons generated with a flat momentum spectrum from muon stop vertices in the target. +The input features are: +* p(chi^2) of the track +* tracker hit dt/dz slope divided by the expected slope from the track fit assuming an electron mass +* N(active hits) / N(hits) +* N(null ambiguity hits) / N(active hits) diff --git a/TrkOnlyPID/TrkOnlyPIDTrain.py b/TrkOnlyPID/TrkOnlyPIDTrain.py new file mode 100644 index 0000000..52e4d9c --- /dev/null +++ b/TrkOnlyPID/TrkOnlyPIDTrain.py @@ -0,0 +1,393 @@ +# TrkOnlyPIDTrain.py +# Make dataset, train and test artificial neural network for TrackPID without calo info +# Original author: Michael MacKenzie, based on TrkPID +# Date: 2026-06-23 + +import argparse +import numpy as np +import matplotlib as mpl +import matplotlib.pyplot as plt +import uproot +import awkward as ak +import pandas as pd +import tensorflow as tf +import json +from pathlib import Path + + +def import_evtntuple(filename, list_branches): + # Import EvenNtuple root file and transform it into an awkward array + + print(f'Importing {filename}...') + file = uproot.open(filename) + tree = file["EventNtuple/ntuple"] + + array = tree.arrays(list_branches, library='ak') + + return array + + +def apply_cut(array, array_mc, particle): + # Apply cuts on the dataset by iterating over events, tracks and track segments ; only keep a selected number of branches useful for training and testing + # array: awkward array containing the reco branches + # array_mc: awkward array containing the monte carlo branches + # particle: 'e' for conversion electron dataset, 'mu' for cosmic muon dataset + + if particle == "e": + mc_pdg = 11 + label_particle = 1 + elif particle == "mu": + mc_pdg = 13 + label_particle = 0 + + data_array = [] + for i_evt in range(ak.num(array, axis=0)): # iterate over events + if i_evt % 10000 == 0: print(f'Processing event {i_evt} for particle {particle}...') + evt_it = array[i_evt] + for i_trk in range(ak.num(evt_it['trk','trk.status'], axis=0)): # iterate over tracks + if evt_it['trk','trk.pdg'][i_trk] != 11: # mask pdg hypothesis + continue + if array_mc['trkmcsim','pdg'][i_evt,i_trk,0] != mc_pdg: #mask mc pdg + continue + if evt_it['trkqual','trkqual.result'][i_trk] < 0.2: # mask TrkQual + continue + trk_it = evt_it['trksegs'][i_trk] + for i_trksegs in range(ak.num(trk_it['sid'], axis=0)): # iterate over track segments + trksegs_it = trk_it[i_trksegs] + if trksegs_it['sid'] != 1: # mask sid + continue + if trksegs_it['mom','fCoordinates','fZ'] < 0: # mask downstream + continue + if trksegs_it['mom','mag'] < 80 or trksegs_it['mom','mag'] > 130: # mask momentum + continue + + data_array.append({ + 'trkqual': evt_it['trkqual','trkqual.result'][i_trk], + 'fitcon' : evt_it['trk', 'trk.fitcon'][i_trk], + 'nnullambig' : evt_it['trk', 'trk.nnullambig'][i_trk], + 'nmatactive' : evt_it['trk', 'trk.nmatactive'][i_trk], + 'nactive' : evt_it['trk', 'trk.nactive'][i_trk], + 'nhits' : evt_it['trk', 'trk.nhits'][i_trk], + 'dtdz_slope' : evt_it['trkdtdz_slope'][i_trk], + 'dtdz_chisq' : evt_it['trkdtdz_chisq'][i_trk], + 'mom': trksegs_it['mom','mag'], + 'time': trksegs_it['time'], + 'pt': np.sqrt(trksegs_it['mom','fCoordinates','fX']**2 + trksegs_it['mom','fCoordinates','fY']**2), + 'pz': trksegs_it['mom','fCoordinates','fZ'], + 'edep': evt_it['trkcalohit','trkcalohit.edep'][i_trk], + 'label': label_particle, + }) + + df_array = pd.DataFrame(data_array) + print(df_array) + print(df_array.describe()) + + return df_array + + +def make_dataset(particle, dataset_name, csv_name): + # Import EventNtuple data and apply a set of cuts ; the cut dataset with only useful branches is saved as a csv file to be used later in the training and test + # particle: 'e' for conversion electron dataset ; 'mu' for cosmic muon dataset + # dataset_name: path to the ROOT file containing the EventNtuple tree + # csv_name: name of the csv file in which the trimmed dataset will be saved in ; this is used to access the data easier later for training + + branches_reco = ['trk','trkqual','trksegs','trksegpars_lh','trkcalohit', 'trkdtdz_slope', 'trkdtdz_chisq'] + branches_mc = ['trkmc','trkmcsim','trksegsmc'] + array = import_evtntuple(dataset_name, branches_reco) + array_mc = import_evtntuple(dataset_name, branches_mc) + + # make mc time modulo event time + array_mc['trksegsmc','time_mod'] = np.mod(array_mc['trksegsmc','time'], 1695) + + # make momentum magnitude branches + array['trksegs','mom','mag'] = np.sqrt((array['trksegs','mom','fCoordinates','fX'])**2 + (array['trksegs','mom','fCoordinates','fY'])**2 + (array['trksegs','mom','fCoordinates','fZ'])**2) + array_mc['trksegsmc','mom','mag'] = np.sqrt((array_mc['trksegsmc','mom','fCoordinates','fX'])**2 + (array_mc['trksegsmc','mom','fCoordinates','fY'])**2 + (array_mc['trksegsmc','mom','fCoordinates','fZ'])**2) + + df_array = apply_cut(array, array_mc, particle) + + # Save cut array into csv file + df_array.to_csv(csv_name, index=True) + + +def train_model(dataframe): + # Reduce variable precision for training speed + tf.keras.mixed_precision.set_global_policy('mixed_float16') + + PID_model = tf.keras.Sequential([ + tf.keras.layers.Input(shape=(n_features,), batch_size=32), + tf.keras.layers.Dense(5, activation='relu'), + tf.keras.layers.Dense(10, activation='relu'), + tf.keras.layers.Dense(5, activation='relu'), + tf.keras.layers.Dense(1, activation='sigmoid', dtype='float32') + ]) + + # Setup loss, optimizer, metrics, and early stop condition for the model + model_loss = tf.keras.losses.BinaryCrossentropy(from_logits=False) + model_optimizer = tf.keras.optimizers.Adam() + model_metrics = [tf.keras.metrics.BinaryAccuracy(threshold=0.5), tf.keras.metrics.AUC(from_logits=False)] + PID_model.compile(loss = model_loss, optimizer = model_optimizer, metrics = model_metrics) + early_stop = tf.keras.callbacks.EarlyStopping(monitor = "val_loss", start_from_epoch = 10, patience = 15, restore_best_weights = True, verbose = 1) + + print(PID_model.summary()) + + n_epochs = 500 + train_history = PID_model.fit(dataframe[features], dataframe['label'], epochs = n_epochs, validation_split=0.2, callbacks=[early_stop]) + train_history = train_history.history # extract the training history (loss as function of epochs) + # Save model and training history + PID_model.save("TrkOnlyPID_model.keras") + with open("train_history.json",'w') as history_file: + json.dump(train_history, history_file) + + return PID_model + + +def make_results(model, dataset, dataset_name, threshold = 0.5): + # Print model performances + results = model.evaluate(dataset[features], dataset['label']) + print("\n", dataset_name, "loss,", dataset_name, "accuracy,", dataset_name, "AUC:", results, "\n") + + dataset['prediction'] = model.predict(dataset[features]) + dataset['predict_label'] = (dataset['prediction'] > threshold).astype(int) + + # Create confusion matrix + confusion_matrix = tf.math.confusion_matrix(dataset['label'], dataset['predict_label'], num_classes=2) + print("\n Confusion matrix: \n [ True negative (correctly labeled cosmic muons) ; False positive (mislabeled cosmic muons) ] \n [ False negative (mislabeled conversion electrons) ; True positive (correctly labeled conversion electron) ]\n", confusion_matrix) + + true_negative , false_positive = confusion_matrix[0].numpy() + false_negative , true_positive = confusion_matrix[1].numpy() + + TPR = true_positive / (true_positive + false_negative) + TNR = true_negative / (true_negative + false_positive) + + print("\n", dataset_name, " dataset results:\n") + print("True Positive Rate (correctly labeled conversion electrons / all conversion electrons): ", 100*TPR, "%") + print("True Negative Rate (correcly labeled cosmic muons / all cosmic muons): ", 100*TNR, "%") + print("False Positive Rate (mislabeled conversion electrons / all conversion electrons): ", 100*(1-TPR), "%") + print("False Negative Rate (mislabeled cosmic muons / all cosmic muons): ", 100*(1-TNR), "%\n") + + return dataset, results, confusion_matrix + +def add_variables(df): + df['cz'] = df['pz'] / df['mom'] + df['velocity'] = 300.*df['mom']/np.sqrt(df['mom']**2 + 0.511**2) + df['dtdz_exp'] = 1. / (df['velocity']*df['cz']) + df['dtdz_ratio'] = df['dtdz_slope'] / df['dtdz_exp'] + df['nActiveFrac'] = df['nactive'] / df['nhits'] + df['nMatActiveFrac'] = df['nmatactive'] / df['nhits'] + df['nNullFrac'] = df['nnullambig'] / df['nactive'] + return df + +def plot_dataset(csv_name, particle, figdir): + df = pd.read_csv(csv_name, index_col=0) + + # plot of training features + fig,ax = plt.subplots(1,1) + ax.hist(df['mom'], bins=100) + ax.set_xlabel("reco mom [MeV]") + ax.set_title("Reconstructed momentum of "+particle) + fig.savefig(f'{figdir}mom.png') + +def plot_model(model, figdir): + tf.keras.utils.plot_model(model, + to_file=f'{figdir}model.png', + show_shapes=True, + show_dtype=False, + show_layer_names=True, + rankdir='TB', + expand_nested=True, + dpi=96 + ) + # text-based summary + model.summary() + + +def plot_feature(dataset_e, dataset_mu, feature, figdir, scale = 'linear', tag = ''): + # Plot of a branch + min_x = min(min(dataset_e[feature]), min(dataset_mu[feature])) + max_x = max(max(dataset_e[feature]), max(dataset_mu[feature])) + + fig,ax = plt.subplots(1,1) + ax.hist(dataset_e[feature], color='b', alpha=0.5, range=(min_x,max_x), bins=100, density=True) + ax.hist(dataset_mu[feature], color='r', alpha=0.5, range=(min_x,max_x), bins=100, density=True) + + ax.set_xlabel(feature) + ax.set_xlim(min_x-0.05*(max_x-min_x), max_x+0.05*(max_x-min_x)) + ax.set_yscale(scale) + ax.set_ylabel("# of events") + ax.set_title(feature) + ax.legend(["Electrons", "Muons"], loc='best') + fig.savefig(f'{figdir}feature_{feature}{tag}.png') + + +def plot_ROC(dataset, figdir): + # Plot the ROC (Receiver Operating Characteristic) curve + + n_points = 101 + # Make a list of threshold values not equally distant (follow a power law to have more points close to 0 and 1 + list_threshold = np.concatenate((0.5 * np.power(np.linspace(0,1,n_points//2+1),4), 1 - 0.5 * np.power(np.linspace(1,0,n_points//2+1),4)), axis=0) + list_threshold = np.delete(list_threshold, n_points//2+1) + + true_negative = np.zeros(n_points) + false_positive = np.zeros(n_points) + false_negative = np.zeros(n_points) + true_positive = np.zeros(n_points) + dataset['predict_label_temp'] = dataset['label'] + + for i in range(n_points): + dataset['predict_label_temp'] = (dataset['prediction'] >= list_threshold[i]).astype(int) + confusion_matrix_temp = tf.math.confusion_matrix(dataset['label'], dataset['predict_label_temp'], num_classes=2) + + true_negative[i], false_positive[i] = confusion_matrix_temp[0].numpy() + false_negative[i], true_positive[i] = confusion_matrix_temp[1].numpy() + + TPR = true_positive / (true_positive + false_negative) + TNR = true_negative / (true_negative + false_positive) + FNR = 1 - TPR + FPR = 1 - TNR + + purity = true_positive / (true_positive + false_positive) + significance = true_positive / np.sqrt(true_positive + false_positive) + max_significance_idx = np.nanargmax(significance) + + print("\n Max significance at threshold = ", list_threshold[max_significance_idx]) + print("\n Accuracy at this threshold = ", TPR[max_significance_idx], "\n") + + fig,ax = plt.subplots(1,1) + ax.plot(TPR, TNR, '-b') + ax.set_xlabel("Signal efficiency (true positive rate)") + ax.set_ylabel("Background rejection (true negative rate)") + ax.set_title("ROC curve") + fig.savefig(f'{figdir}roc.png') + + fig,ax = plt.subplots(1,1) + ax.plot(list_threshold, TPR, '-k') + ax.plot(list_threshold, TNR, '-b') + ax.plot(list_threshold, purity, '-g') + + ax2 = ax.twinx() + ax2.plot(list_threshold, significance, '-r') + + ax.set_xlabel("Cut threshold value") + ax.set_ylabel("Efficiency / Purity") + ax2.set_ylabel("Significance") + ax.legend(["Signal efficiency", "Background rejection", "Signal purity"], loc="lower left") + ax2.legend(["Significance = S/sqrt(S+B)"], loc="lower right") + fig.savefig(f'{figdir}eff.png') + + return dataset + + +def plot_history(history_file, result, figdir): + # Plot loss history + with open(history_file, 'r') as json_file: + history = json.load(json_file) + fig,ax = plt.subplots(1,1) + ax.plot(history["loss"]) + ax.plot(history["val_loss"]) + ax.plot(len(history["loss"]), result[0], marker='o', linestyle='None') + + ax.set_xlabel("Epoch") + ax.set_ylabel("Loss") + ax.set_title("Binary cross entropy loss") + ax.legend(["Train", "Validation","Test"], loc='best') + fig.savefig(f'{figdir}history.png') + + +def make_arguments(): + parser = argparse.ArgumentParser(description='Train a NN PID model') + parser.add_argument("--data-dir", "-d", type=str, default="/exp/mu2e/data/users/mmackenz/trkpid/data/", help="Directory with data files") + parser.add_argument("--signal-file", "-s", type=str, default="nts.flate.root", help="Signal data file") + parser.add_argument("--background-file", "-b", type=str, default="nts.flatmu.root", help="Background data file") + parser.add_argument("--version", "-V", type=int, default=0, help="Training version") + parser.add_argument("--skip-import", "-I", action='store_true', help="Skip importing of data into csv file") + parser.add_argument("--skip-train", "-T", action='store_true', help="Skip training of the model") + parser.add_argument("--skip-export", "-E", action='store_true', help="Skip exporting the model to Onnx") + parser.add_argument("--n-train", "-n", type=int, default=70000, help="Number of events to use in training (min with fraction)") + parser.add_argument("--frac-train", "-f", type=float, default=0.7, help="Fraction of events to use in training (min with N(train))") + parser.add_argument("--skip-plot", "-P", action='store_true', help="Skip plotting of results") + args = parser.parse_args() + return args + +if __name__ == "__main__": + args = make_arguments() + data_dir = args.data_dir + + version = args.version # Version of the training features to use + figdir = f'figures/v{version}/' + sig_csv_name = "array_test_signal.csv" + bkg_csv_name = "array_test_background.csv" + if not args.skip_import: + make_dataset('e' , data_dir + args.signal_file , sig_csv_name) + make_dataset('mu', data_dir + args.background_file, bkg_csv_name) + + df_sig = pd.read_csv(sig_csv_name, index_col=0) + df_bkg = pd.read_csv(bkg_csv_name, index_col=0) + df_sig = add_variables(df_sig) + df_bkg = add_variables(df_bkg) + + # Make input features + if version == 0: + features = ['nActiveFrac', 'nNullFrac', 'fitcon', 'dtdz_ratio'] + else: + raise ValueError(f'Unknown training verion value {version}') + print(f'>>> Using input features {features}') + n_features = len(features) + + df_sig_feature = df_sig[features+['label']].copy() + df_bkg_feature = df_bkg[features+['label']].copy() + + n_sig = len(df_sig_feature) + n_bkg = len(df_bkg_feature) + + # Train with equal amounts of signal and background + frac_train = args.frac_train + max_train = int(2*int(min(int(2.*frac_train*min(n_sig,n_bkg)), args.n_train)/2)) + half_train = int(max_train/2) + df_sig_train = df_sig_feature.iloc[:half_train,:] + df_bkg_train = df_bkg_feature.iloc[:half_train,:] + df_sig_test = df_sig_feature.iloc[half_train:,:] + df_bkg_test = df_bkg_feature.iloc[half_train:,:] + df_train = pd.concat([df_sig_train, df_bkg_train]).sample(frac=1, random_state=90) # Shuffle the inputs + df_test = pd.concat([df_sig_test , df_bkg_test ]).sample(frac=1, random_state=90) + + print(f'>>> Performing training with {max_train} from the input {n_sig+n_bkg} events') + + if not args.skip_train: + PID_model = train_model(df_train) + else: # Use an already trained model saved in keras format + PID_model = tf.keras.models.load_model("TrkOnlyPID_model.keras") + with open("train_history.json",'r') as history_file: # open file containing the training history to plot later + train_history = json.load(history_file) + n_epochs = len(train_history['loss']) + + # export model in onnx format to be able to use it with SOFIE inference code ; manually enter name and shape of input and output for SOFIE + PID_model.output_names = ['output'] + if not args.skip_export: + print('>>> Loading ONXX packages') + import tf2onnx + import onnx + print('>>> Exporting to ONXX') + onnx_signature = [tf.TensorSpec(input.shape, dtype=input.dtype, name=input.name) for input in PID_model.inputs] + onnx_model, _ = tf2onnx.convert.from_keras(PID_model, input_signature=onnx_signature) + onnx.save(onnx_model, "TrkOnlyPID.onnx") + + df_train,results_train,confusion_matrix_train = make_results(PID_model, df_train, "train", 0.5) + df_test ,results_test ,confusion_matrix_test = make_results(PID_model, df_test , "test" , 0.5) + + df_train_e = df_train[df_train["label"] == 1] + df_train_mu = df_train[df_train["label"] == 0] + df_test_e = df_test [df_test ["label"] == 1] + df_test_mu = df_test [df_test ["label"] == 0] + + # Create plots + if not args.skip_plot: + path = Path(figdir) + path.mkdir(parents=True, exist_ok=True) + plot_dataset(sig_csv_name,"Electrons", figdir) + for feature in features: + plot_feature(df_sig_test, df_bkg_test, feature, figdir) + plot_feature(df_train_e, df_train_mu, "prediction", figdir, 'log', '_train') + plot_feature(df_test_e , df_test_mu , "prediction", figdir, 'log') + df_test = plot_ROC(df_test, figdir) + plot_history("train_history.json", results_test, figdir) + plot_model(PID_model, figdir) diff --git a/TrkOnlyPID/make_inputs.py b/TrkOnlyPID/make_inputs.py new file mode 100644 index 0000000..01ac808 --- /dev/null +++ b/TrkOnlyPID/make_inputs.py @@ -0,0 +1,112 @@ +import ROOT +import numpy as np +from scipy.optimize import curve_fit + +def linear_model(x, slope, intercept): + return slope*x + intercept + +def perform_tz_fit(hits): + t = np.array([ hit[0] for hit in hits ]) + z = np.array([ hit[1] for hit in hits ]) + e = np.array([ hit[2] for hit in hits ]) + popt, pconv = curve_fit(linear_model, z, t, sigma=e, absolute_sigma=True) + slope, intercept = popt + uncertainty = np.sqrt(pconv[0, 0]) # from the variance + residuals = linear_model(z, slope, intercept) - t + chi_sq = np.sum((residuals / e)**2) + dof = len(z) - len(popt) + return slope, uncertainty, chi_sq/dof + +def skim_tree_chain(file_list_path, input_tree_name, output_file_path, max_files): + # input file list + chain = ROOT.TChain(input_tree_name) + + nfiles = 0 + with open(file_list_path, 'r') as f: + for line in f: + file_path = line.strip() + if file_path and not file_path.startswith("#"): + print(f'Adding file {file_path}') + chain.Add(file_path) + nfiles += 1 + if max_files > 0 and nfiles >= max_files: break + + entries = chain.GetEntries() + if entries == 0: + print("Error: No entries found or files could not be opened.") + return + print(f'Input {nfiles} files for a total of {entries} entries') + + # Drop branches that aren't needed + if chain.GetBranch("trkhitscalibs" ): chain.SetBranchStatus("trkhitscalibs" , 0) + if chain.GetBranch("trkhitsmc" ): chain.SetBranchStatus("trkhitsmc" , 0) + if chain.GetBranch("trkhits" ): chain.SetBranchStatus("trkhits" , 0) + if chain.GetBranch("trkmats" ): chain.SetBranchStatus("trkmats" , 0) + if chain.GetBranch("trksegpars_ch" ): chain.SetBranchStatus("trksegpars_ch" , 0) + if chain.GetBranch("trksegpars_kl" ): chain.SetBranchStatus("trksegpars_kl" , 0) + if chain.GetBranch("calohits" ): chain.SetBranchStatus("calohits" , 0) + if chain.GetBranch("calodigis" ): chain.SetBranchStatus("calodigis" , 0) + if chain.GetBranch("calorecodigis" ): chain.SetBranchStatus("calorecodigis" , 0) + if chain.GetBranch("crvcoincmcplane"): chain.SetBranchStatus("crvcoincmcplane" , 0) + + + # Create the new output file and clone the chain structure + # Passing 0 to CloneTree copies only the active branch definitions + new_file = ROOT.TFile.Open(output_file_path, "RECREATE") + top_dir = new_file.mkdir('EventNtuple') + top_dir.cd() + new_tree = chain.CloneTree(0) + if chain.GetBranch("trkhits" ): chain.SetBranchStatus("trkhits" , 1) + + # Add a new branch for dt/dz slope + dtdz_vec = ROOT.std.vector('float')() + unc_vec = ROOT.std.vector('float')() + chisq_vec = ROOT.std.vector('float')() + new_tree.Branch("trkdtdz_slope", dtdz_vec) + new_tree.Branch("trkdtdz_unc" , unc_vec) + new_tree.Branch("trkdtdz_chisq", chisq_vec) + + # Loop over the events and clone the input, adding the tracker hit slope + for entry in range(entries): + if entry % 10000 == 0: print(f'Processing entry {entry}...') + chain.GetEntry(entry) + + # Clear last event's data + dtdz_vec.clear() + unc_vec.clear() + chisq_vec.clear() + + # Retrieve the tracks + tracks = chain.trk + trkhits = chain.trkhits + ntrks = tracks.size() + + # Fit each track's dt/dz slope + for itrk in range(ntrks): + track = tracks[itrk] + hits = trkhits[itrk] + hit_vals = [[hit.etime[hit.earlyend] - hit.tottdrift, hit.poca.z(), 5.] for hit in hits ] + dtdz, unc, chisq = perform_tz_fit(hit_vals) + dtdz_vec.push_back(dtdz) + unc_vec.push_back(unc) + chisq_vec.push_back(chisq) + + # Add the data to the output tree + new_tree.Fill() + + + # Save the new tree and close files + new_tree.Write("", ROOT.TObject.kOverwrite) + new_file.Close() + + print(f"Successfully processed chain. Output saved to {output_file_path}") + +# Run the function +if __name__ == "__main__": + ROOT.gSystem.Load("libmu2e_EventNtuple_EventNtuple") + ROOT.gInterpreter.Declare('#include "EventNtuple/inc/TrkInfo.hh"') + ROOT.std.vector('mu2e::TrkInfo')() + ROOT.gInterpreter.Declare('#include "EventNtuple/inc/TrkStrawHitInfo.hh"') + ROOT.std.vector('mu2e::TrkStrawHitInfo')() + skim_tree_chain("nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.root.files", "EventNtuple/ntuple", "nts.flatmu.root", 10) + skim_tree_chain("nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.root.files" , "EventNtuple/ntuple", "nts.flate.root" , 10) diff --git a/TrkOnlyPID/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.root.files b/TrkOnlyPID/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.root.files new file mode 100644 index 0000000..9de2257 --- /dev/null +++ b/TrkOnlyPID/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.root.files @@ -0,0 +1,150 @@ +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/fb/0a/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000000.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/77/a7/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000001.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/a9/c2/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000002.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/b5/67/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000003.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/eb/c3/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000004.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/c5/cc/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000005.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/1c/b7/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000006.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/cc/63/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000008.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/f0/2c/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000009.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/fc/d9/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000011.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/73/e5/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000013.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/96/cf/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000015.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/75/2c/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000016.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/9d/09/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000017.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/b9/42/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000018.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/e7/1d/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000019.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/cb/e1/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000020.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/01/31/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000022.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/b1/1a/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000023.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/f4/3d/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000025.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/f1/9d/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000026.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/72/44/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000027.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/eb/68/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000035.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/2f/9f/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000043.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/44/78/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000053.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/4b/d0/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000062.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/95/20/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000063.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/c7/93/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000065.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/eb/13/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000080.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/f7/ab/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000084.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/c4/50/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000092.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/19/5a/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000134.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/45/10/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000172.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/f8/cf/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000180.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/63/c6/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000235.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/c0/c3/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000256.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/ba/34/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000265.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/db/e9/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000310.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/c4/09/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000324.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/ed/d3/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000325.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/0e/f5/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000327.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/09/9c/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000328.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/04/ff/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000331.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/bd/b6/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000339.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/03/39/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000352.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/4b/49/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000353.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/cd/90/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000359.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/0b/1a/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000362.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/96/2c/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000365.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/7f/fc/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000369.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/3f/28/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000372.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/ee/21/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000376.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/56/5d/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000379.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/6e/6c/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000380.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/70/a8/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000382.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/c0/40/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000385.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/c1/00/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000389.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/94/8c/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000391.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/54/44/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000392.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/f7/5d/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000394.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/0d/bd/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000397.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/5f/45/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000406.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/cd/d1/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000412.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/fc/30/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000413.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/af/0d/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000417.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/a9/94/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000420.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/75/bf/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000424.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/cd/00/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000427.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/08/9f/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000428.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/0d/b5/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000430.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/bb/bb/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000436.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/67/39/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000439.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/dc/f7/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000451.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/9a/c2/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000476.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/0c/06/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000478.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/15/33/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000484.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/c5/19/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000508.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/63/d1/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000517.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/ad/8a/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000530.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/b6/e8/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000532.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/9b/79/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000539.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/93/48/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000548.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/ac/35/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000559.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/dc/af/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000560.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/ff/60/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000587.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/04/db/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000670.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/72/e6/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000706.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/a7/eb/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000709.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/23/e0/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000736.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/af/18/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000745.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/bc/b7/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000803.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/b8/12/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000812.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/06/9c/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000818.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/44/0d/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000826.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/92/45/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000827.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/ff/28/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000829.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/b8/bf/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000830.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/a7/81/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000832.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/a0/a4/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000833.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/56/51/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000835.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/5b/ee/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000838.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/35/22/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000839.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/70/c0/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000844.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/93/15/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000850.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/e7/0b/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000851.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/4e/59/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000852.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/f2/b1/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000853.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/0b/36/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000859.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/77/d0/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000860.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/19/51/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000862.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/c4/51/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000863.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/5e/cc/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000865.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/93/5c/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000868.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/6d/68/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000890.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/3a/f6/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000898.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/5f/4d/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000902.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/06/a4/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000908.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/19/27/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000909.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/1e/5d/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000923.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/49/f8/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000931.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/e5/77/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000938.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/82/a8/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000941.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/f8/f9/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000958.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/ff/a7/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000991.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/91/8e/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001007.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/81/dd/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001105.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/1c/0b/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001111.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/13/f7/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001114.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/25/a6/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001117.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/08/ef/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001147.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/5e/4e/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001168.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/96/4e/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001180.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/52/f6/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001198.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/d1/a6/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001202.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/8e/bd/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001222.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/8b/73/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001227.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/96/e6/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001228.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/25/e8/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001256.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/69/13/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001271.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/8b/bb/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001276.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/76/84/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001278.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/fa/f9/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001282.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/1b/47/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001285.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/2c/25/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001286.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/c5/96/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001291.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/e5/04/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001294.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/5b/f9/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001297.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/2b/a3/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001303.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/f2/95/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001312.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/80/47/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001337.root diff --git a/TrkOnlyPID/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.root.files b/TrkOnlyPID/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.root.files new file mode 100644 index 0000000..e89f990 --- /dev/null +++ b/TrkOnlyPID/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.root.files @@ -0,0 +1,150 @@ +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/a0/71/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000000.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/ae/76/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000001.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/4e/b6/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000002.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/76/e1/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000003.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/bb/04/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000005.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/cd/29/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000007.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/46/2e/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000009.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/d0/f8/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000010.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/64/36/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000013.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/26/12/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000014.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/67/22/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000015.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/23/c5/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000016.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/0e/7f/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000017.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/14/91/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000019.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/7b/69/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000020.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/d4/7c/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000024.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/a6/4a/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000031.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/0c/ae/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000037.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/34/37/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000039.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/06/cb/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000041.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/35/ca/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000042.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/dd/78/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000043.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/db/20/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000046.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/40/e1/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000049.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/28/20/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000058.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/cc/d1/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000067.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/67/d5/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000070.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/2b/c4/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000073.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/e7/c6/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000079.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/e6/1e/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000082.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/4d/2d/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000084.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/aa/3b/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000085.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/8a/2c/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000088.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/97/8d/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000097.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/52/ba/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000106.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/28/b1/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000112.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/d3/e8/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000119.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/fd/39/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000124.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/f0/6a/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000127.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/c3/a5/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000130.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/29/d3/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000142.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/f5/9b/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000151.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/a2/d8/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000178.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/e3/d9/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000186.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/e9/eb/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000189.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/91/6b/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000194.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/da/d8/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000195.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/c1/f3/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000203.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/e4/cc/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000208.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/63/af/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000218.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/8d/d7/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000229.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/fc/76/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000241.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/02/6a/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000250.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/85/70/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000253.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/91/4b/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000259.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/b5/59/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000262.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/2f/e3/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000263.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/c1/84/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000271.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/70/de/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000274.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/b9/d7/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000277.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/84/0c/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000280.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/4f/de/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000304.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/4b/8a/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000307.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/f2/05/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000309.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/2e/8a/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000310.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/a0/71/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000312.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/bb/66/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000313.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/92/32/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000315.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/d7/d9/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000318.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/61/11/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000321.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/54/1c/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000328.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/84/7b/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000330.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/a5/d9/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000336.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/9f/ef/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000345.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/ac/03/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000346.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/c6/9c/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000347.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/2c/a5/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000348.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/bd/48/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000352.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/5e/15/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000360.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/5c/b7/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000378.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/7a/d7/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000381.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/d1/d7/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000407.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/2c/9c/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000440.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/b5/68/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000493.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/e0/6f/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000527.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/e7/02/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000533.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/e1/8a/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000577.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/ac/64/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000583.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/6a/8d/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000592.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/ca/0d/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000610.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/28/b7/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000615.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/cc/4a/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000649.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/f3/7d/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000656.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/31/c1/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000662.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/76/3f/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000665.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/8b/38/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000674.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/36/52/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000676.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/e2/b1/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000679.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/98/a9/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000680.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/3c/2f/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000685.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/d9/3b/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000689.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/48/9b/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000703.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/2e/e5/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000706.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/68/aa/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000709.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/ae/90/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000713.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/2f/e2/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000717.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/7b/d8/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000736.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/39/31/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000742.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/9c/ad/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000748.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/f0/5d/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000751.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/f5/c3/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000760.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/84/f1/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000775.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/83/14/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000778.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/28/0b/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000784.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/c2/6b/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000796.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/63/98/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000802.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/d5/53/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000856.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/6d/8a/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000859.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/07/f5/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000914.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/69/af/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000925.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/70/9c/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000928.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/2a/a6/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000931.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/5c/1d/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000934.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/f4/b3/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000952.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/34/39/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000961.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/cb/c0/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000967.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/72/fc/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001060.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/7b/73/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001083.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/cc/0c/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001095.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/00/b6/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001106.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/08/ef/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001109.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/20/3a/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001111.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/5f/dd/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001115.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/ea/8d/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001121.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/b1/a1/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001124.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/94/ae/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001126.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/69/18/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001127.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/a7/01/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001130.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/89/eb/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001139.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/6c/2b/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001142.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/2f/f8/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001150.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/59/86/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001160.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/c3/38/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001168.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/94/2d/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001169.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/fb/94/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001172.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/3b/e3/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001175.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/70/b4/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001180.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/57/db/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001184.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/ba/1f/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001245.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/7e/1e/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001261.root diff --git a/TrkPID/.gitignore b/TrkPID/.gitignore new file mode 100644 index 0000000..7b57bd1 --- /dev/null +++ b/TrkPID/.gitignore @@ -0,0 +1,6 @@ +*.keras +*.csv +*.root +*.onnx +*.json +figures diff --git a/TrkPID/README.md b/TrkPID/README.md index c8abc40..ba862cf 100644 --- a/TrkPID/README.md +++ b/TrkPID/README.md @@ -2,19 +2,43 @@ ## Introduction -TrkPID is a machine learning algorithm is trained to differentiate between conversion electrons and cosmic ray muons using information from both the tracker and the calorimeter +TrkPID is a machine learning algorithm is trained to differentiate between electrons and muons using information from both the tracker and the calorimeter. ## Workflow +### Dataset creation +EventNtuple data files are used as input to the training. +The ntuples are skimmed using [make_inputs.py](make_inputs.py) which drops unnessary data as well as adds branches if any are needed. + +### Model training The python code provided in the file [TrackPIDTrain.py](TrkPIDTrain.py) is used to: -* make a dataset containing conversion electrons and cosmic ray muons -* define the neural network structure +* skim track information from the input ntuples and store the data in local csv files +* define the neural network architecture * train the algorithm and save the model weights into an ONNX file named "TrackPID.onnx" * test the algorithm, providing performance metrics * generate plots to provide more information on the dataset, how the training went, and how the model perform -Once the model is trained and the weights are saved in an ONNX file, this file can be used by TMVA:SOFIE to generate the inference code that can be used in Offline (for details about this process, check [this documentation](https://github.com/Mu2e/MLTrain/blob/main/TrkQual/README.md#converting-a-model-for-use-in-offline)). +Once the model is trained and the weights are saved in an ONNX file, this file can be used by TMVA:SOFIE to generate the inference code +that can be used in Offline (for details about this process, check [this documentation](https://github.com/Mu2e/MLTrain/blob/main/TrkQual/README.md#converting-a-model-for-use-in-offline)). ## Version history +### v0 This version has been trained using MDC2020au datasets, and tested on MDC2020au and MDC2020aw, generated using Offline v11_00_00 and EventNtuple v06_07_00. +It was trained using mono-energetic conversion electrons as signal and cosmic ray muons as background. +The input features are: +* E(cluster) - P(track) +* R(cluster) +* p(track) dot x(cluster) +* t(track) - t(cluster) + +### v1 (current version) +This version has been trained using MDC2025 datasets: +* signal: nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.root +* background: nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.root +It was trained using electrons and muons generated with a flat momentum spectrum from muon stop vertices in the target. +The input features are: +* E(cluster)/P(track) +* t(track) - t(cluster) +* p(chi^2) of the track +* tracker hit dt/dz slope divided by the expected slope from the track fit assuming an electron mass diff --git a/TrkPID/TrackPIDTrain.py b/TrkPID/TrackPIDTrain.py index b172b0d..199f83b 100644 --- a/TrkPID/TrackPIDTrain.py +++ b/TrkPID/TrackPIDTrain.py @@ -1,9 +1,9 @@ # TrackPIDTrain.py # Make dataset, train and test artificial neural network for TrackPID -# This code works with MDC2020au and MDC2020aw datasets generated using Offline v11_00_00, EventNtuple v06_07_00. -# Author: Leo Borrel +# Original author: Leo Borrel # Date: 2025-10-29 +import argparse import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt @@ -12,39 +12,18 @@ import pandas as pd import tensorflow as tf import json -import tf2onnx -import onnx - - -CE_dataset_name = "nts.lborrel.CeMLeadingLogOnSpillTriggered.MDC2020au_perfect_v1_3.root" # CE MDS2020au dataset used for training -CE_csv_name = "array_test_CE.csv" -MU1_dataset_name = "nts.lborrel.CosmicCRYSignalAllOnSpillTriggered.MDC2020au_perfect_v1_3_part1.root" # Cosmic MDS2020au dataset used for training (divided in 2 parts because too large) -MU1_csv_name = "array_test_MU_1.csv" -MU2_dataset_name = "nts.lborrel.CosmicCRYSignalAllOnSpillTriggered.MDC2020au_perfect_v1_3_part2.root" # Cosmic MDS2020au dataset used for training (part 2) -MU2_csv_name = "array_test_MU_2.csv" - -# Switches to turn on and off depending on which task needs to be performed -# Import the EventNtuple tree from the ROOT file, apply the cuts, and save the trimmed dataset into a csv file (one for conversion electron, one for cosmic muons) -# Use only once when using a new dataset -switch_make_dataset = False -# Train the machine learning model -# If false, it will use the model saved in a specific file named "" -switch_train = False -# Plot the result and the performance of the trained model -switch_plot = True +from pathlib import Path def import_evtntuple(filename, list_branches): # Import EvenNtuple root file and transform it into an awkward array + print(f'Importing {filename}...') file = uproot.open(filename) tree = file["EventNtuple/ntuple"] array = tree.arrays(list_branches, library='ak') - #print("# of events: ", ak.num(array, axis=0)) - #print("# of tracks: ", ak.count(array['trk','trk.status'])) - return array @@ -63,6 +42,7 @@ def apply_cut(array, array_mc, particle): data_array = [] for i_evt in range(ak.num(array, axis=0)): # iterate over events + if i_evt % 10000 == 0: print(f'Processing event {i_evt} for particle {particle}...') evt_it = array[i_evt] for i_trk in range(ak.num(evt_it['trk','trk.status'], axis=0)): # iterate over tracks if evt_it['trk','trk.pdg'][i_trk] != 11: # mask pdg hypothesis @@ -82,9 +62,20 @@ def apply_cut(array, array_mc, particle): continue if trksegs_it['mom','mag'] < 80 or trksegs_it['mom','mag'] > 130: # mask momentum continue + data_array.append({ 'trkqual': evt_it['trkqual','trkqual.result'][i_trk], - 'mom': trksegs_it['mom','mag'], 'time': trksegs_it['time'], + 'fitcon' : evt_it['trk', 'trk.fitcon'][i_trk], + 'nnullambig' : evt_it['trk', 'trk.nnullambig'][i_trk], + 'nmatactive' : evt_it['trk', 'trk.nmatactive'][i_trk], + 'nactive' : evt_it['trk', 'trk.nactive'][i_trk], + 'nhits' : evt_it['trk', 'trk.nhits'][i_trk], + 'dtdz_slope' : evt_it['trkdtdz_slope'][i_trk], + 'dtdz_chisq' : evt_it['trkdtdz_chisq'][i_trk], + 'mom': trksegs_it['mom','mag'], + 'time': trksegs_it['time'], + 'pt': np.sqrt(trksegs_it['mom','fCoordinates','fX']**2 + trksegs_it['mom','fCoordinates','fY']**2), + 'pz': trksegs_it['mom','fCoordinates','fZ'], 'edep': evt_it['trkcalohit','trkcalohit.edep'][i_trk], 'dt': evt_it['trkcalohit','trkcalohit.dt'][i_trk], 'trkdepth': evt_it['trkcalohit','trkcalohit.trkdepth'][i_trk], @@ -110,23 +101,18 @@ def make_dataset(particle, dataset_name, csv_name): # dataset_name: path to the ROOT file containing the EventNtuple tree # csv_name: name of the csv file in which the trimmed dataset will be saved in ; this is used to access the data easier later for training - branches_reco = ['trk','trkqual','trksegs','trksegpars_lh','trkcalohit'] + branches_reco = ['trk','trkqual','trksegs','trksegpars_lh','trkcalohit', 'trkdtdz_slope', 'trkdtdz_chisq'] branches_mc = ['trkmc','trkmcsim','trksegsmc'] - #array_evt = import_evtntuple(dataset_name, ['evtinfo']) array = import_evtntuple(dataset_name, branches_reco) array_mc = import_evtntuple(dataset_name, branches_mc) # make mc time modulo event time array_mc['trksegsmc','time_mod'] = np.mod(array_mc['trksegsmc','time'], 1695) - + # make momentum magnitude branches array['trksegs','mom','mag'] = np.sqrt((array['trksegs','mom','fCoordinates','fX'])**2 + (array['trksegs','mom','fCoordinates','fY'])**2 + (array['trksegs','mom','fCoordinates','fZ'])**2) array_mc['trksegsmc','mom','mag'] = np.sqrt((array_mc['trksegsmc','mom','fCoordinates','fX'])**2 + (array_mc['trksegsmc','mom','fCoordinates','fY'])**2 + (array_mc['trksegsmc','mom','fCoordinates','fZ'])**2) - # make branches for PID - #array['trkpid.deltaE'] = array['trkcalohit','trkcalohit.edep'] - array['trksegs','mom','mag'] - #array['trkcalohit','trkcalohit.dt'].show() - df_array = apply_cut(array, array_mc, particle) # Save cut array into csv file @@ -134,13 +120,15 @@ def make_dataset(particle, dataset_name, csv_name): def train_model(dataframe): - # Create the multilayer perceptron neural network + # Reduce variable precision for training speed + tf.keras.mixed_precision.set_global_policy('mixed_float16') + PID_model = tf.keras.Sequential([ tf.keras.layers.Input(shape=(n_features,), batch_size=32), tf.keras.layers.Dense(5, activation='relu'), tf.keras.layers.Dense(10, activation='relu'), tf.keras.layers.Dense(5, activation='relu'), - tf.keras.layers.Dense(1, activation='sigmoid') + tf.keras.layers.Dense(1, activation='sigmoid', dtype='float32') ]) # Setup loss, optimizer, metrics, and early stop condition for the model @@ -153,19 +141,13 @@ def train_model(dataframe): print(PID_model.summary()) n_epochs = 500 - train_history = PID_model.fit(dataframe[features], dataframe['label'], epochs = n_epochs, validation_split=0.1, callbacks=[early_stop]) + train_history = PID_model.fit(dataframe[features], dataframe['label'], epochs = n_epochs, validation_split=0.2, callbacks=[early_stop]) train_history = train_history.history # extract the training history (loss as function of epochs) # Save model and training history PID_model.save("PID_model.keras") with open("train_history.json",'w') as history_file: json.dump(train_history, history_file) - # export model in onnx format to be able to use it with SOFIE inference code ; manually enter name and shape of input and output for SOFIE - PID_model.output_names = ['output'] - onnx_signature = [tf.TensorSpec(input.shape, dtype=input.dtype, name=input.name) for input in PID_model.inputs] - onnx_model, _ = tf2onnx.convert.from_keras(PID_model, input_signature=onnx_signature) - onnx.save(onnx_model, "TrackPID.onnx") - return PID_model @@ -195,55 +177,23 @@ def make_results(model, dataset, dataset_name, threshold = 0.5): return dataset, results, confusion_matrix - -## Main code - -if switch_make_dataset: - make_dataset('e', CE_dataset_name, "CE_temp.csv") - make_dataset('mu', MU_dataset_name, "MU_temp.csv") - -df_CE = pd.read_csv(CE_csv_name, index_col=0) -df_MU1 = pd.read_csv(MU1_csv_name, index_col=0) -df_MU2 = pd.read_csv(MU2_csv_name, index_col=0) # if the cosmic dataset is too big, separate it in 2 pieces and add it it the concatenation list in the next line -df = pd.concat([df_CE, df_MU1, df_MU2], axis=0) - -# Make input features - -df['deltaE'] = df['edep'] - df['mom'] -df['rpoca'] = np.sqrt(np.power(df['pocaX'],2) + np.power(df['pocaY'],2)) -df['trkdir'] = ( df['pocaX'] * df['pocamomX'] + df['pocaY'] * df['pocamomY'] ) / ( np.sqrt(np.power(df['pocaX'],2) + np.power(df['pocaY'],2)) * np.sqrt(np.power(df['pocamomX'],2) + np.power(df['pocamomY'],2)) ) -features = ['deltaE','rpoca','trkdir','dt'] -n_features = len(features) -df_feature = df[features+['label']].copy() - - -# Shuffle and divide the dataset into a testing dataset with 5000 entries and a training dataset with the rest of the events -df_shuffle = df_feature.sample(frac=1) -df_test = df_shuffle.iloc[:5000,:] -df_train = df_shuffle.iloc[5000:,:] - - -if switch_train: - PID_model = train_model(df_train) -else: # Use an already trained model saved in keras format - PID_model = tf.keras.models.load_model("PID_model.keras") - with open("train_history.json",'r') as history_file: # open file containing the training history to plot later - train_history = json.load(history_file) - n_epochs = len(train_history['loss']) - -df_train,results_train,confusion_matrix_train = make_results(PID_model, df_train, "train", 0.5) -df_test,results_test,confusion_matrix_test = make_results(PID_model, df_test, "test", 0.5) - -# Create datasets based on MC particle information -df_train_e = df_train[df_train["label"] == 1] -df_train_mu = df_train[df_train["label"] == 0] -df_test_e = df_test[df_test["label"] == 1] -df_test_mu = df_test[df_test["label"] == 0] - +def add_variables(df): + df['deltaE'] = df['edep'] - df['mom'] + df['EoverP'] = df['edep'] / df['mom'] + df['cz'] = df['pz'] / df['mom'] + df['velocity'] = 300.*df['mom']/np.sqrt(df['mom']**2 + 0.511**2) + df['dtdz_exp'] = 1. / (df['velocity']*df['cz']) + df['dtdz_ratio'] = df['dtdz_slope'] / df['dtdz_exp'] + df['nActiveFrac'] = df['nactive'] / df['nhits'] + df['nMatActiveFrac'] = df['nmatactive'] / df['nhits'] + df['nNullFrac'] = df['nnullambig'] / df['nactive'] + df['rpoca'] = np.sqrt(np.power(df['pocaX'],2) + np.power(df['pocaY'],2)) + df['trkdir'] = ( df['pocaX'] * df['pocamomX'] + df['pocaY'] * df['pocamomY'] ) / ( np.sqrt(np.power(df['pocaX'],2) + np.power(df['pocaY'],2)) * np.sqrt(np.power(df['pocamomX'],2) + np.power(df['pocamomY'],2)) ) + return df ## Plots -def plot_dataset(csv_name, particle): +def plot_dataset(csv_name, particle, figdir): df = pd.read_csv(csv_name, index_col=0) # plot of training features @@ -251,36 +201,52 @@ def plot_dataset(csv_name, particle): ax.hist(df['mom'], bins=100) ax.set_xlabel("reco mom [MeV]") ax.set_title("Reconstructed momentum of "+particle) + fig.savefig(f'{figdir}mom.png') fig,ax = plt.subplots(1,1) ax.hist(df['edep']-df['mom'], bins=100) ax.set_xlabel("deltaE [MeV]") ax.set_title("Difference between calorimeter cluster energy and track momentum of "+particle) + fig.savefig(f'{figdir}deltaE.png') fig,ax = plt.subplots(1,1) ax.hist(df['dt'], bins=100) ax.set_xlabel("deltaT [MeV]") ax.set_title("Difference between calorimeter cluster time and tracker time of "+particle) - - -def plot_feature(dataset_e, dataset_mu, feature, scale = 'linear'): - # Plot of a branch + fig.savefig(f'{figdir}dt.png') + +def plot_model(model, figdir): + tf.keras.utils.plot_model(model, + to_file=f'{figdir}model.png', + show_shapes=True, + show_dtype=False, + show_layer_names=True, + rankdir='TB', + expand_nested=True, + dpi=96 + ) + # text-based summary + model.summary() + +def plot_feature(dataset_e, dataset_mu, feature, figdir, scale = 'linear', tag = ''): + # Plot of a branch min_x = min(min(dataset_e[feature]), min(dataset_mu[feature])) max_x = max(max(dataset_e[feature]), max(dataset_mu[feature])) fig,ax = plt.subplots(1,1) - ax.hist(dataset_e[feature], color='b', alpha=0.5, range=(min_x,max_x), bins=100, density=False) - ax.hist(dataset_mu[feature], color='r', alpha=0.5, range=(min_x,max_x), bins=100, density=False) + ax.hist(dataset_e[feature], color='b', alpha=0.5, range=(min_x,max_x), bins=100, density=True) + ax.hist(dataset_mu[feature], color='r', alpha=0.5, range=(min_x,max_x), bins=100, density=True) ax.set_xlabel(feature) ax.set_xlim(min_x-0.05*(max_x-min_x), max_x+0.05*(max_x-min_x)) ax.set_yscale(scale) ax.set_ylabel("# of events") ax.set_title(feature) - ax.legend(["conversion electrons", "cosmic muons"], loc='best') + ax.legend(["Electrons", "Muons"], loc='best') + fig.savefig(f'{figdir}feature_{feature}{tag}.png') -def plot_ROC(dataset): +def plot_ROC(dataset, figdir): # Plot the ROC (Receiver Operating Characteristic) curve n_points = 101 @@ -318,6 +284,7 @@ def plot_ROC(dataset): ax.set_xlabel("Signal efficiency (true positive rate)") ax.set_ylabel("Background rejection (true negative rate)") ax.set_title("ROC curve") + fig.savefig(f'{figdir}roc.png') fig,ax = plt.subplots(1,1) ax.plot(list_threshold, TPR, '-k') @@ -332,11 +299,12 @@ def plot_ROC(dataset): ax2.set_ylabel("Significance") ax.legend(["Signal efficiency", "Background rejection", "Signal purity"], loc="lower left") ax2.legend(["Significance = S/sqrt(S+B)"], loc="lower right") - + fig.savefig(f'{figdir}eff.png') + return dataset -def plot_history(history_file, result): +def plot_history(history_file, result, figdir): # Plot loss history with open(history_file, 'r') as json_file: history = json.load(json_file) @@ -349,18 +317,108 @@ def plot_history(history_file, result): ax.set_ylabel("Loss") ax.set_title("Binary cross entropy loss") ax.legend(["Train", "Validation","Test"], loc='best') + fig.savefig(f'{figdir}history.png') + + +def make_arguments(): + parser = argparse.ArgumentParser(description='Train a NN PID model') + parser.add_argument("--data-dir", "-d", type=str, default="/exp/mu2e/data/users/mmackenz/trkpid/data/", help="Directory with data files") + parser.add_argument("--signal-file", "-s", type=str, default="nts.flate.root", help="Signal data file") + parser.add_argument("--background-file", "-b", type=str, default="nts.flatmu.root", help="Background data file") + parser.add_argument("--version", "-V", type=int, default=1, help="Training version") + parser.add_argument("--skip-import", "-I", action='store_true', help="Skip importing of data into csv file") + parser.add_argument("--skip-train", "-T", action='store_true', help="Skip training of the model") + parser.add_argument("--skip-export", "-E", action='store_true', help="Skip exporting the model to Onnx") + parser.add_argument("--n-train", "-n", type=int, default=70000, help="Number of events to use in training (min with fraction)") + parser.add_argument("--frac-train", "-f", type=float, default=0.7, help="Fraction of events to use in training (min with N(train))") + parser.add_argument("--skip-plot", "-P", action='store_true', help="Skip plotting of results") + args = parser.parse_args() + return args + +if __name__ == "__main__": + args = make_arguments() + data_dir = args.data_dir + + version = args.version # Version of the training features to use + figdir = f'figures/v{version}/' + sig_csv_name = "array_test_signal.csv" + bkg_csv_name = "array_test_background.csv" + if not args.skip_import: + make_dataset('e' , data_dir + args.signal_file , sig_csv_name) + make_dataset('mu', data_dir + args.background_file, bkg_csv_name) + + df_sig = pd.read_csv(sig_csv_name, index_col=0) + df_bkg = pd.read_csv(bkg_csv_name, index_col=0) + df_sig = add_variables(df_sig) + df_bkg = add_variables(df_bkg) + + # Make input features + if version == 0: + features = ['deltaE','rpoca','trkdir','dt'] + elif version == 1: + # features = ['EoverP','dt', 'nActiveFrac', 'nNullFrac', 'fitcon', 'dtdz_ratio'] + features = ['EoverP','dt', 'fitcon', 'dtdz_ratio'] + # features = ['EoverP','dt'] + else: + raise ValueError(f'Unknown training verion value {version}') + print(f'>>> Using input features {features}') + n_features = len(features) + + df_sig_feature = df_sig[features+['label']].copy() + df_bkg_feature = df_bkg[features+['label']].copy() + + n_sig = len(df_sig_feature) + n_bkg = len(df_bkg_feature) + + # Train with equal amounts of signal and background + frac_train = args.frac_train + max_train = int(2*int(min(int(2.*frac_train*min(n_sig,n_bkg)), args.n_train)/2)) + half_train = int(max_train/2) + df_sig_train = df_sig_feature.iloc[:half_train,:] + df_bkg_train = df_bkg_feature.iloc[:half_train,:] + df_sig_test = df_sig_feature.iloc[half_train:,:] + df_bkg_test = df_bkg_feature.iloc[half_train:,:] + df_train = pd.concat([df_sig_train, df_bkg_train]).sample(frac=1, random_state=90) # Shuffle the inputs + df_test = pd.concat([df_sig_test , df_bkg_test ]).sample(frac=1, random_state=90) + + print(f'>>> Performing training with {max_train} from the input {n_sig+n_bkg} events') + + if not args.skip_train: + PID_model = train_model(df_train) + else: # Use an already trained model saved in keras format + PID_model = tf.keras.models.load_model("PID_model.keras") + with open("train_history.json",'r') as history_file: # open file containing the training history to plot later + train_history = json.load(history_file) + n_epochs = len(train_history['loss']) - -# Comment on and off to choose which group of plots to display -if switch_plot: - plot_dataset(CE_csv_name,"conversion electrons") - #plot_dataset(MU1_csv_name,"cosmic muons") - for feature in features: - plot_feature(df_test_e, df_test_mu, feature) - plot_feature(df_train_e, df_train_mu, "prediction", 'log') - plot_feature(df_test_e, df_test_mu, "prediction", 'log') - df_test = plot_ROC(df_test) - plot_history("train_history.json", results_test) - - plt.show() - + # export model in onnx format to be able to use it with SOFIE inference code ; manually enter name and shape of input and output for SOFIE + PID_model.output_names = ['output'] + if not args.skip_export: + print('>>> Loading ONXX packages') + import tf2onnx + import onnx + print('>>> Exporting to ONXX') + onnx_signature = [tf.TensorSpec(input.shape, dtype=input.dtype, name=input.name) for input in PID_model.inputs] + onnx_model, _ = tf2onnx.convert.from_keras(PID_model, input_signature=onnx_signature) + onnx.save(onnx_model, "TrackPID.onnx") + + df_train,results_train,confusion_matrix_train = make_results(PID_model, df_train, "train", 0.5) + df_test ,results_test ,confusion_matrix_test = make_results(PID_model, df_test , "test" , 0.5) + + df_train_e = df_train[df_train["label"] == 1] + df_train_mu = df_train[df_train["label"] == 0] + df_test_e = df_test [df_test ["label"] == 1] + df_test_mu = df_test [df_test ["label"] == 0] + + # Create plots + if not args.skip_plot: + path = Path(figdir) + path.mkdir(parents=True, exist_ok=True) + plot_dataset(sig_csv_name,"Electrons", figdir) + for feature in features: + plot_feature(df_sig_test, df_bkg_test, feature, figdir) + plot_feature(df_train_e, df_train_mu, "prediction", figdir, 'log', '_train') + plot_feature(df_test_e , df_test_mu , "prediction", figdir, 'log') + df_test = plot_ROC(df_test, figdir) + plot_history("train_history.json", results_test, figdir) + plot_model(PID_model, figdir) diff --git a/TrkPID/make_inputs.py b/TrkPID/make_inputs.py new file mode 100644 index 0000000..01ac808 --- /dev/null +++ b/TrkPID/make_inputs.py @@ -0,0 +1,112 @@ +import ROOT +import numpy as np +from scipy.optimize import curve_fit + +def linear_model(x, slope, intercept): + return slope*x + intercept + +def perform_tz_fit(hits): + t = np.array([ hit[0] for hit in hits ]) + z = np.array([ hit[1] for hit in hits ]) + e = np.array([ hit[2] for hit in hits ]) + popt, pconv = curve_fit(linear_model, z, t, sigma=e, absolute_sigma=True) + slope, intercept = popt + uncertainty = np.sqrt(pconv[0, 0]) # from the variance + residuals = linear_model(z, slope, intercept) - t + chi_sq = np.sum((residuals / e)**2) + dof = len(z) - len(popt) + return slope, uncertainty, chi_sq/dof + +def skim_tree_chain(file_list_path, input_tree_name, output_file_path, max_files): + # input file list + chain = ROOT.TChain(input_tree_name) + + nfiles = 0 + with open(file_list_path, 'r') as f: + for line in f: + file_path = line.strip() + if file_path and not file_path.startswith("#"): + print(f'Adding file {file_path}') + chain.Add(file_path) + nfiles += 1 + if max_files > 0 and nfiles >= max_files: break + + entries = chain.GetEntries() + if entries == 0: + print("Error: No entries found or files could not be opened.") + return + print(f'Input {nfiles} files for a total of {entries} entries') + + # Drop branches that aren't needed + if chain.GetBranch("trkhitscalibs" ): chain.SetBranchStatus("trkhitscalibs" , 0) + if chain.GetBranch("trkhitsmc" ): chain.SetBranchStatus("trkhitsmc" , 0) + if chain.GetBranch("trkhits" ): chain.SetBranchStatus("trkhits" , 0) + if chain.GetBranch("trkmats" ): chain.SetBranchStatus("trkmats" , 0) + if chain.GetBranch("trksegpars_ch" ): chain.SetBranchStatus("trksegpars_ch" , 0) + if chain.GetBranch("trksegpars_kl" ): chain.SetBranchStatus("trksegpars_kl" , 0) + if chain.GetBranch("calohits" ): chain.SetBranchStatus("calohits" , 0) + if chain.GetBranch("calodigis" ): chain.SetBranchStatus("calodigis" , 0) + if chain.GetBranch("calorecodigis" ): chain.SetBranchStatus("calorecodigis" , 0) + if chain.GetBranch("crvcoincmcplane"): chain.SetBranchStatus("crvcoincmcplane" , 0) + + + # Create the new output file and clone the chain structure + # Passing 0 to CloneTree copies only the active branch definitions + new_file = ROOT.TFile.Open(output_file_path, "RECREATE") + top_dir = new_file.mkdir('EventNtuple') + top_dir.cd() + new_tree = chain.CloneTree(0) + if chain.GetBranch("trkhits" ): chain.SetBranchStatus("trkhits" , 1) + + # Add a new branch for dt/dz slope + dtdz_vec = ROOT.std.vector('float')() + unc_vec = ROOT.std.vector('float')() + chisq_vec = ROOT.std.vector('float')() + new_tree.Branch("trkdtdz_slope", dtdz_vec) + new_tree.Branch("trkdtdz_unc" , unc_vec) + new_tree.Branch("trkdtdz_chisq", chisq_vec) + + # Loop over the events and clone the input, adding the tracker hit slope + for entry in range(entries): + if entry % 10000 == 0: print(f'Processing entry {entry}...') + chain.GetEntry(entry) + + # Clear last event's data + dtdz_vec.clear() + unc_vec.clear() + chisq_vec.clear() + + # Retrieve the tracks + tracks = chain.trk + trkhits = chain.trkhits + ntrks = tracks.size() + + # Fit each track's dt/dz slope + for itrk in range(ntrks): + track = tracks[itrk] + hits = trkhits[itrk] + hit_vals = [[hit.etime[hit.earlyend] - hit.tottdrift, hit.poca.z(), 5.] for hit in hits ] + dtdz, unc, chisq = perform_tz_fit(hit_vals) + dtdz_vec.push_back(dtdz) + unc_vec.push_back(unc) + chisq_vec.push_back(chisq) + + # Add the data to the output tree + new_tree.Fill() + + + # Save the new tree and close files + new_tree.Write("", ROOT.TObject.kOverwrite) + new_file.Close() + + print(f"Successfully processed chain. Output saved to {output_file_path}") + +# Run the function +if __name__ == "__main__": + ROOT.gSystem.Load("libmu2e_EventNtuple_EventNtuple") + ROOT.gInterpreter.Declare('#include "EventNtuple/inc/TrkInfo.hh"') + ROOT.std.vector('mu2e::TrkInfo')() + ROOT.gInterpreter.Declare('#include "EventNtuple/inc/TrkStrawHitInfo.hh"') + ROOT.std.vector('mu2e::TrkStrawHitInfo')() + skim_tree_chain("nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.root.files", "EventNtuple/ntuple", "nts.flatmu.root", 10) + skim_tree_chain("nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.root.files" , "EventNtuple/ntuple", "nts.flate.root" , 10) diff --git a/TrkPID/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.root.files b/TrkPID/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.root.files new file mode 100644 index 0000000..9de2257 --- /dev/null +++ b/TrkPID/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.root.files @@ -0,0 +1,150 @@ +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/fb/0a/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000000.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/77/a7/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000001.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/a9/c2/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000002.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/b5/67/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000003.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/eb/c3/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000004.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/c5/cc/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000005.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/1c/b7/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000006.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/cc/63/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000008.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/f0/2c/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000009.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/fc/d9/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000011.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/73/e5/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000013.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/96/cf/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000015.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/75/2c/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000016.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/9d/09/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000017.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/b9/42/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000018.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/e7/1d/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000019.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/cb/e1/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000020.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/01/31/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000022.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/b1/1a/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000023.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/f4/3d/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000025.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/f1/9d/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000026.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/72/44/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000027.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/eb/68/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000035.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/2f/9f/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000043.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/44/78/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000053.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/4b/d0/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000062.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/95/20/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000063.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/c7/93/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000065.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/eb/13/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000080.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/f7/ab/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000084.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/c4/50/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000092.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/19/5a/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000134.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/45/10/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000172.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/f8/cf/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000180.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/63/c6/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000235.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/c0/c3/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000256.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/ba/34/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000265.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/db/e9/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000310.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/c4/09/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000324.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/ed/d3/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000325.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/0e/f5/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000327.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/09/9c/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000328.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/04/ff/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000331.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/bd/b6/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000339.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/03/39/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000352.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/4b/49/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000353.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/cd/90/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000359.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/0b/1a/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000362.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/96/2c/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000365.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/7f/fc/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000369.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/3f/28/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000372.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/ee/21/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000376.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/56/5d/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000379.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/6e/6c/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000380.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/70/a8/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000382.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/c0/40/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000385.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/c1/00/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000389.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/94/8c/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000391.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/54/44/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000392.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/f7/5d/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000394.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/0d/bd/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000397.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/5f/45/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000406.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/cd/d1/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000412.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/fc/30/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000413.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/af/0d/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000417.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/a9/94/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000420.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/75/bf/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000424.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/cd/00/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000427.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/08/9f/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000428.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/0d/b5/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000430.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/bb/bb/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000436.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/67/39/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000439.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/dc/f7/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000451.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/9a/c2/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000476.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/0c/06/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000478.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/15/33/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000484.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/c5/19/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000508.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/63/d1/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000517.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/ad/8a/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000530.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/b6/e8/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000532.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/9b/79/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000539.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/93/48/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000548.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/ac/35/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000559.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/dc/af/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000560.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/ff/60/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000587.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/04/db/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000670.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/72/e6/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000706.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/a7/eb/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000709.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/23/e0/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000736.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/af/18/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000745.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/bc/b7/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000803.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/b8/12/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000812.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/06/9c/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000818.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/44/0d/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000826.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/92/45/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000827.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/ff/28/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000829.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/b8/bf/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000830.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/a7/81/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000832.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/a0/a4/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000833.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/56/51/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000835.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/5b/ee/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000838.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/35/22/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000839.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/70/c0/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000844.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/93/15/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000850.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/e7/0b/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000851.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/4e/59/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000852.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/f2/b1/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000853.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/0b/36/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000859.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/77/d0/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000860.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/19/51/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000862.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/c4/51/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000863.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/5e/cc/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000865.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/93/5c/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000868.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/6d/68/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000890.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/3a/f6/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000898.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/5f/4d/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000902.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/06/a4/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000908.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/19/27/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000909.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/1e/5d/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000923.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/49/f8/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000931.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/e5/77/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000938.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/82/a8/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000941.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/f8/f9/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000958.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/ff/a7/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000991.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/91/8e/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001007.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/81/dd/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001105.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/1c/0b/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001111.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/13/f7/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001114.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/25/a6/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001117.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/08/ef/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001147.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/5e/4e/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001168.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/96/4e/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001180.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/52/f6/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001198.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/d1/a6/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001202.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/8e/bd/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001222.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/8b/73/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001227.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/96/e6/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001228.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/25/e8/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001256.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/69/13/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001271.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/8b/bb/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001276.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/76/84/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001278.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/fa/f9/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001282.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/1b/47/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001285.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/2c/25/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001286.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/c5/96/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001291.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/e5/04/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001294.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/5b/f9/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001297.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/2b/a3/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001303.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/f2/95/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001312.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlatMuMinusOnSpill-reco-ntuple/MDC2025-004/root/80/47/nts.mu2e.FlatMuMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001337.root diff --git a/TrkPID/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.root.files b/TrkPID/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.root.files new file mode 100644 index 0000000..e89f990 --- /dev/null +++ b/TrkPID/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.root.files @@ -0,0 +1,150 @@ +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/a0/71/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000000.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/ae/76/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000001.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/4e/b6/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000002.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/76/e1/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000003.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/bb/04/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000005.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/cd/29/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000007.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/46/2e/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000009.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/d0/f8/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000010.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/64/36/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000013.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/26/12/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000014.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/67/22/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000015.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/23/c5/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000016.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/0e/7f/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000017.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/14/91/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000019.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/7b/69/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000020.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/d4/7c/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000024.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/a6/4a/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000031.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/0c/ae/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000037.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/34/37/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000039.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/06/cb/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000041.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/35/ca/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000042.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/dd/78/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000043.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/db/20/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000046.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/40/e1/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000049.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/28/20/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000058.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/cc/d1/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000067.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/67/d5/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000070.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/2b/c4/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000073.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/e7/c6/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000079.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/e6/1e/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000082.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/4d/2d/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000084.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/aa/3b/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000085.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/8a/2c/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000088.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/97/8d/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000097.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/52/ba/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000106.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/28/b1/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000112.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/d3/e8/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000119.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/fd/39/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000124.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/f0/6a/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000127.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/c3/a5/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000130.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/29/d3/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000142.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/f5/9b/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000151.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/a2/d8/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000178.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/e3/d9/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000186.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/e9/eb/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000189.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/91/6b/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000194.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/da/d8/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000195.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/c1/f3/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000203.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/e4/cc/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000208.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/63/af/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000218.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/8d/d7/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000229.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/fc/76/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000241.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/02/6a/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000250.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/85/70/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000253.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/91/4b/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000259.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/b5/59/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000262.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/2f/e3/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000263.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/c1/84/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000271.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/70/de/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000274.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/b9/d7/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000277.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/84/0c/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000280.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/4f/de/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000304.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/4b/8a/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000307.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/f2/05/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000309.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/2e/8a/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000310.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/a0/71/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000312.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/bb/66/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000313.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/92/32/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000315.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/d7/d9/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000318.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/61/11/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000321.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/54/1c/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000328.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/84/7b/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000330.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/a5/d9/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000336.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/9f/ef/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000345.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/ac/03/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000346.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/c6/9c/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000347.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/2c/a5/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000348.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/bd/48/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000352.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/5e/15/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000360.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/5c/b7/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000378.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/7a/d7/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000381.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/d1/d7/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000407.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/2c/9c/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000440.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/b5/68/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000493.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/e0/6f/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000527.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/e7/02/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000533.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/e1/8a/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000577.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/ac/64/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000583.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/6a/8d/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000592.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/ca/0d/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000610.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/28/b7/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000615.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/cc/4a/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000649.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/f3/7d/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000656.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/31/c1/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000662.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/76/3f/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000665.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/8b/38/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000674.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/36/52/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000676.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/e2/b1/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000679.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/98/a9/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000680.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/3c/2f/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000685.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/d9/3b/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000689.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/48/9b/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000703.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/2e/e5/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000706.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/68/aa/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000709.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/ae/90/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000713.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/2f/e2/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000717.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/7b/d8/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000736.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/39/31/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000742.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/9c/ad/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000748.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/f0/5d/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000751.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/f5/c3/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000760.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/84/f1/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000775.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/83/14/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000778.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/28/0b/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000784.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/c2/6b/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000796.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/63/98/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000802.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/d5/53/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000856.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/6d/8a/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000859.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/07/f5/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000914.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/69/af/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000925.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/70/9c/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000928.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/2a/a6/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000931.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/5c/1d/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000934.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/f4/b3/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000952.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/34/39/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000961.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/cb/c0/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00000967.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/72/fc/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001060.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/7b/73/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001083.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/cc/0c/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001095.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/00/b6/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001106.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/08/ef/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001109.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/20/3a/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001111.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/5f/dd/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001115.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/ea/8d/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001121.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/b1/a1/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001124.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/94/ae/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001126.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/69/18/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001127.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/a7/01/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001130.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/89/eb/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001139.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/6c/2b/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001142.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/2f/f8/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001150.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/59/86/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001160.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/c3/38/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001168.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/94/2d/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001169.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/fb/94/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001172.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/3b/e3/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001175.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/70/b4/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001180.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/57/db/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001184.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/ba/1f/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001245.root +/pnfs/mu2e/persistent/datasets/phy-nts/nts/mu2e/FlateMinusOnSpill-reco-ntuple/MDC2025-004/root/7e/1e/nts.mu2e.FlateMinusOnSpill-reco-ntuple.MDC2025-004.001430_00001261.root