Source code for vibe.analysis_validation_modes.clustering.photonReconstruction

from typing import List
from copy import deepcopy

import basf2
import modularAnalysis as ma  # type: ignore
from variables import variables as vm  # type: ignore
import variables.collections as vc  # type: ignore
import variables.utils as vu  # type: ignore
import pandas as pd  # type: ignore

from vibe.core.utils.misc import fancy_validation_mode_header
from vibe.core.validation_mode import ValidationModeBaseClass
from vibe.core.helper.histogram_tools import HistVariable, Histogram, HistComponent
from vibe.core.helper.root_helper import makeROOTCompatible

__all__ = [
    "photonReconstruction",
]


[docs] @fancy_validation_mode_header class photonReconstruction(ValidationModeBaseClass): name = "photonReconstruction" latex_str = r"$e^+ e^- \rightarrow \mu^+ \mu^- \gamma$" plotting_strategies = ["multi_comparison_binned"]
[docs] def create_basf2_path(self, **kwargs): """ Reconstruction script for photons. """ main = basf2.create_path() ma.fillParticleList("gamma:selection", "", path=main) ma.applyCuts( "gamma:selection", "inECLAcceptance", path=main, ) ma.getFakePhotonProbability("gamma:selection", weight="MC16rd", path=main) ma.getBeamBackgroundProbability("gamma:selection", weight="MC16rd", path=main) vm.addAlias("beamBackgroundSuppressionScore", "extraInfo(beamBackgroundSuppression)") vm.addAlias("fakePhotonSuppressionScore", "extraInfo(fakePhotonSuppression)") self.variables_to_validation_ntuple( decay_str="gamma:selection", variables=vu.create_aliases_for_selected( self.base_particle_vars + self.cluster_vars + vc.mc_truth + vc.mc_kinematics + vc.mc_variables + [ "mcTheta", "clusterMCMatchWeight", "clusterTotalMCMatchWeight", "clusterBestMCMatchWeight", "mcSecPhysProc", "fakePhotonSuppressionScore", "beamBackgroundSuppressionScore", ], "^gamma:selection", ["gamma"], ), path=main, ) return main
@property def base_particle_vars(self): return vc.kinematics + vc.inv_mass + vc.momentum_uncertainty + vc.pid @property def cluster_vars(self): return vc.cluster + [ "clusterE", "clusterUncorrE", "clusterThetaID", "clusterMdstIndex", "clusterCellID", "clusterSecondMoment", "clusterTrackMatch", "maxWeightedDistanceFromAverageECLTime", ]
[docs] def generate_variables_for_list( self, particle_list: str, names: List[str], add_mc_matching: bool, variables: List[str], ): variables_to_store = deepcopy(variables) if add_mc_matching: variables_to_store += vc.mc_truth + vc.mc_kinematics + vc.mc_variables return vu.create_aliases_for_selected(variables_to_store, particle_list, names)
@property def analysis_validation_histograms(self) -> List[Histogram]: return [ Histogram( name="Theta", title="Theta of Photon", particle_list="gamma:selection", hist_variable=HistVariable( df_label=makeROOTCompatible(variable="gamma_clusterTheta"), label="clusterTheta", unit="rad", bins=50, scope=(0.0, 3.1416), ), hist_components=[ HistComponent( label="Signal", additional_cut_str="", ), ], ), Histogram( name="ClusterPhi", title="ClusterPhi", particle_list="gamma:selection", hist_variable=HistVariable( df_label=makeROOTCompatible(variable="gamma_clusterPhi"), label="clusterPhi", unit="rad", bins=50, scope=(-3.14159, 3.14159), ), hist_components=[ HistComponent( label="Signal", additional_cut_str="", ), ], ), Histogram( name="ClusterTiming", title="ClusterTiming", particle_list="gamma:selection", hist_variable=HistVariable( df_label=makeROOTCompatible(variable="gamma_clusterTiming"), label="clusterTiming", unit="ns", bins=50, scope=(-100, 100), ), hist_components=[ HistComponent( label="Signal", additional_cut_str="", ), ], ), Histogram( name="MinC2TDist", title="Minimum C2T Distance", particle_list="gamma:selection", hist_variable=HistVariable( df_label=makeROOTCompatible(variable="gamma_minC2TDist"), label="minC2TDist", unit="cm", bins=50, scope=(0, 250), ), hist_components=[ HistComponent( label="Signal", additional_cut_str="", ), ], ), Histogram( name="ClusterE1E9", title="Cluster E1/E9", particle_list="gamma:selection", hist_variable=HistVariable( df_label=makeROOTCompatible(variable="gamma_clusterE1E9"), label="clusterE1E9", unit="", bins=50, scope=(0, 1), ), hist_components=[ HistComponent( label="Signal", additional_cut_str="", ), ], ), Histogram( name="Cluster9E21", title="Cluster E9/E21", particle_list="gamma:selection", hist_variable=HistVariable( df_label=makeROOTCompatible(variable="gamma_clusterE9E21"), label="cluster9E21", unit="", bins=50, scope=(0, 1), ), hist_components=[ HistComponent( label="Signal", additional_cut_str="", ), ], ), Histogram( name="ClusterPSDMVA", title="Cluster PSD MVA", particle_list="gamma:selection", hist_variable=HistVariable( df_label=makeROOTCompatible(variable="gamma_clusterPulseShapeDiscriminationMVA"), label="clusterPulseShapeDiscriminationMVA", unit="", bins=50, scope=(0, 1), ), hist_components=[ HistComponent( label="Signal", additional_cut_str="", ), ], ), Histogram( name="ClusterLAT", title="Cluster LAT", particle_list="gamma:selection", hist_variable=HistVariable( df_label=makeROOTCompatible(variable="gamma_clusterLAT"), label="clusterLAT", unit="", bins=50, scope=(0, 1), ), hist_components=[ HistComponent( label="Signal", additional_cut_str="", ), ], ), Histogram( name="ClusterE", title="Cluster Energy", particle_list="gamma:selection", hist_variable=HistVariable( df_label=makeROOTCompatible(variable="gamma_clusterE"), label="clusterE", unit="GeV", bins=50, scope=(0, 2), ), hist_components=[ HistComponent( label="Signal", additional_cut_str="", ), ], ), Histogram( name="ClusterNHits", title="Cluster Number of Hits", particle_list="gamma:selection", hist_variable=HistVariable( df_label=makeROOTCompatible(variable="gamma_clusterNHits"), label="clusterNHits", unit="", bins=30, scope=(0, 30), ), hist_components=[ HistComponent( label="Signal", additional_cut_str="", ), ], ), Histogram( name="ClusterReg", title="Cluster Region", particle_list="gamma:selection", hist_variable=HistVariable( df_label=makeROOTCompatible(variable="gamma_clusterReg"), label="clusterReg", unit="", bins=13, scope=(0, 13), ), hist_components=[ HistComponent( label="Signal", additional_cut_str="", ), ], ), Histogram( name="ClusterSecondMoment", title="Cluster Second Moment", particle_list="gamma:selection", hist_variable=HistVariable( df_label=makeROOTCompatible(variable="gamma_clusterSecondMoment"), label="clusterSecondMoment", unit="", bins=50, scope=(0, 40), ), hist_components=[ HistComponent( label="Signal", additional_cut_str="", ), ], ), Histogram( name="ClusterTrackMatch", title="Cluster Track Match", particle_list="gamma:selection", hist_variable=HistVariable( df_label=makeROOTCompatible(variable="gamma_clusterTrackMatch"), label="clusterTrackMatch", unit="", bins=2, scope=(0, 1), ), hist_components=[ HistComponent( label="Signal", additional_cut_str="", ), ], ), Histogram( name="ClusterZernikeMVA", title="Cluster Zernike MVA", particle_list="gamma:selection", hist_variable=HistVariable( df_label=makeROOTCompatible(variable="gamma_clusterZernikeMVA"), label="clusterZernikeMVA", unit="", bins=50, scope=(0, 1), ), hist_components=[ HistComponent( label="Signal", additional_cut_str="", ), ], ), Histogram( name="ClusterAbsZernikeMoment40", title="Cluster Abs Zernike Moment 4 0", particle_list="gamma:selection", hist_variable=HistVariable( df_label=makeROOTCompatible(variable="gamma_clusterAbsZernikeMoment40"), label="clusterAbsZernikeMoment40", unit="", bins=50, scope=(0, 1.7), ), hist_components=[ HistComponent( label="Signal", additional_cut_str="", ), ], ), Histogram( name="ClusterAbsZernikeMoment51", title="Cluster Abs Zernike Moment 5 1", particle_list="gamma:selection", hist_variable=HistVariable( df_label=makeROOTCompatible(variable="gamma_clusterAbsZernikeMoment51"), label="clusterAbsZernikeMoment51", unit="", bins=50, scope=(0, 1.2), ), hist_components=[ HistComponent( label="Signal", additional_cut_str="", ), ], ), Histogram( name="ClusterEoP", title="Cluster E over P", particle_list="gamma:selection", hist_variable=HistVariable( df_label=makeROOTCompatible(variable="gamma_clusterEoP"), label="clusterEoP", unit="", bins=50, scope=(0, 2), ), hist_components=[ HistComponent( label="Signal", additional_cut_str="", ), ], ), Histogram( name="ClusterHasFailedTiming", title="Cluster Has Failed Timing", particle_list="gamma:selection", hist_variable=HistVariable( df_label=makeROOTCompatible(variable="gamma_clusterHasFailedTiming"), label="clusterHasFailedTiming", unit="", bins=2, scope=(0, 1), ), hist_components=[ HistComponent( label="Signal", additional_cut_str="", ), ], ), Histogram( name="ClusterHasFailedErrorTiming", title="Cluster Has Failed Error Timing", particle_list="gamma:selection", hist_variable=HistVariable( df_label=makeROOTCompatible(variable="gamma_clusterHasFailedErrorTiming"), label="clusterHasFailedErrorTiming", unit="", bins=2, scope=(0, 1), ), hist_components=[ HistComponent( label="Signal", additional_cut_str="", ), ], ), Histogram( name="ClusterHasNPhotons", title="Cluster Has N Photons", particle_list="gamma:selection", hist_variable=HistVariable( df_label=makeROOTCompatible(variable="gamma_clusterHasNPhotons"), label="clusterHasNPhotons", unit="", bins=2, scope=(0, 1), ), hist_components=[ HistComponent( label="Signal", additional_cut_str="", ), ], ), Histogram( name="ClusterHasNeutralHadron", title="Cluster Has Neutral Hadron", particle_list="gamma:selection", hist_variable=HistVariable( df_label=makeROOTCompatible(variable="gamma_clusterHasNeutralHadron"), label="clusterHasNeutralHadron", unit="", bins=2, scope=(0, 1), ), hist_components=[ HistComponent( label="Signal", additional_cut_str="", ), ], ), Histogram( name="ClusterHasPulseShapeDiscrimination", title="Cluster Has Pulse Shape Discrimination", particle_list="gamma:selection", hist_variable=HistVariable( df_label=makeROOTCompatible(variable="gamma_clusterHasPulseShapeDiscrimination"), label="clusterHasPulseShapeDiscrimination", unit="", bins=2, scope=(0, 1), ), hist_components=[ HistComponent( label="Signal", additional_cut_str="", ), ], ), Histogram( name="MaxWeightedDistanceFromAverageECLTime", title="Max Weighted Distance From Average ECL Time", particle_list="gamma:selection", hist_variable=HistVariable( df_label=makeROOTCompatible(variable="gamma_maxWeightedDistanceFromAverageECLTime"), label="maxWeightedDistanceFromAverageECLTime", unit="ns", bins=50, scope=(0, 5000), ), hist_components=[ HistComponent( label="Signal", additional_cut_str="", ), ], ), Histogram( name="NECLClusterTrackMatches", title="Number of ECL Cluster Track Matches", particle_list="gamma:selection", hist_variable=HistVariable( df_label=makeROOTCompatible(variable="gamma_nECLClusterTrackMatches"), label="nECLClusterTrackMatches", unit="", bins=10, scope=(0, 10), ), hist_components=[ HistComponent( label="Signal", additional_cut_str="", ), ], ), Histogram( name="beamBackgroundSuppressionScore", title="Beam Background Suppression Score", particle_list="gamma:selection", hist_variable=HistVariable( df_label=makeROOTCompatible(variable="gamma_beamBackgroundSuppressionScore"), label="beamBackgroundSuppressionScore", unit="", bins=50, scope=(0, 1), ), hist_components=[ HistComponent( label="Signal", additional_cut_str="", ), ], ), Histogram( name="fakePhotonSuppressionScore", title="Fake Photon Suppression Score", particle_list="gamma:selection", hist_variable=HistVariable( df_label=makeROOTCompatible(variable="gamma_fakePhotonSuppressionScore"), label="fakePhotonSuppressionScore", unit="", bins=50, scope=(0, 1), ), hist_components=[ HistComponent( label="Signal", additional_cut_str="", ), ], ), ]
[docs] def get_number_of_signal_for_efficiency(self, df: pd.DataFrame, particle_list: str = "gamma:selection") -> float: return df["gamma_isSignal"].sum()