16 const int SummaryTypeNotSet = -1;
186 StatusCode
sc(StatusCode::SUCCESS);
261 int voidcutpos =
m_acceptInfo.addCut(
"VOID1",
"No Cut");
262 if (voidcutpos < 0)
sc = StatusCode::FAILURE;
353 if (
sc == StatusCode::FAILURE) {
354 ATH_MSG_ERROR(
"Exceeded the number of allowed cuts in TElectronIsEMSelector");
363 for (
int i = 0; i < 32; i++) {
364 const unsigned int mask = (0x1u << i) &
m_isEMMask;
409 bool passBLayerRequirement,
411 int nPixHitsPlusDeadSensors,
413 int nSiHitsPlusDeadSensors,
416 int nTRThighOutliers,
449 passBLayerRequirement,
450 nPixHitsPlusDeadSensors,
451 nSiHitsPlusDeadSensors,
505 bool passBLayerRequirement,
507 int nPixHitsPlusDeadSensors,
509 int nSiHitsPlusDeadSensors,
512 int nTRThighOutliers,
545 passBLayerRequirement,
546 nPixHitsPlusDeadSensors,
547 nSiHitsPlusDeadSensors,
600 double trigEtTh)
const
604 if(trigEtTh > 0)
et = trigEtTh*1.01;
606 int ibin_et=
bins.at(0);
607 int ibin_eta=
bins.at(1);
608 int ibin_combined=
bins.at(2);
621 if (ibin_eta>=0 && ibin_et>=0 && ibin_combined>=0) {
628 }
else if (eta2 >= 0.8 && eta2 < 1.37) {
639 if (f3 >
m_cutF3[ibin_combined]) {
662 if (f1 >
m_cutF1[0] && eta2 < 2.37 && (eta2 < 1.37 || eta2 > 1.52)) {
667 double deltaemax2 = emax2 / (1000. + 0.009 *
et);
674 if (emax2 > 0. && DeltaE >=
m_cutDeltaE[ibin_combined])
714 bool passBLayerRequirement,
716 int nPixHitsPlusDeadSensors,
718 int nSiHitsPlusDeadSensors,
722 int nTRThighOutliers,
734 unsigned int iflag)
const
738 int ibin_eta=
bins.at(1);
739 int ibin_combined=
bins.at(2);
741 if (ibin_eta >= 0 && ibin_combined >= 0) {
745 !passBLayerRequirement) {
750 if (nPixHitsPlusDeadSensors <
m_cutPi[ibin_eta])
755 if (nSiHitsPlusDeadSensors <
m_cutSi[ibin_eta])
760 if (trackd0 >
m_cutA0[ibin_eta])
771 deltaeta = std::abs(deltaeta);
805 nTRTTotal = nTRTXenonHits;
807 nTRTTotal = nTRT + nTRTOutliers;
809 rTRT = (nTRTTotal) > 0
810 ? ((
double)(nTRThigh + nTRThighOutliers) / (nTRTTotal))
814 rTRT = (nTRT) > 0 ? ((
double)(nTRThigh) / (nTRT)) : 0.;
818 double DeltaNum = -100;
821 const double a0 = 33.14 ;
const double b0 = -129.1 ;
const double c0 = 1455.;
823 const double a1 = 29.42 ;
const double b1 = 27.93 ;
const double c1 = -89.96;
const double d1 = 91.51;
825 const double a2 = 196.3;
const double b2 = -403.;
const double c2 = 230.2;
827 const double a3 = -10.59;
const double b3 = 37.29;
829 const double a4 = -640.9;
const double b4 = 1323.;
const double c4 = -851.8;
const double d4 = 180.8;
831 const double a5 = 159.8;
const double b5 = -70.9;
833 int ibin_eta_TRT = -1;
844 ibin_eta_TRT = ibinEta;
847 if (ibin_eta_TRT >= 0) {
848 switch (ibin_eta_TRT) {
850 DeltaNum = nTRTTotal - (
a0 + b0 * eta2 + c0 * eta2 * eta2);
853 DeltaNum = nTRTTotal - (a1 + b1 * eta2 + c1 * eta2 * eta2 +
854 d1 * eta2 * eta2 * eta2);
857 DeltaNum = nTRTTotal - (a2 + b2 * eta2 + c2 * eta2 * eta2);
860 DeltaNum = nTRTTotal - (a3 + b3 * eta2);
863 DeltaNum = nTRTTotal - (a4 + b4 * eta2 + c4 * eta2 * eta2 +
864 d4 * eta2 * eta2 * eta2);
867 DeltaNum = nTRTTotal - (a5 + b5 * eta2);
877 int ibin_et_TRT = -1;
885 ibin_et_TRT = ibinET;
888 int ibin_combined_TRT =ibin_eta_TRT;
894 ATH_MSG_WARNING(
"We apply both: TRT ratio and eProbabilityHT cuts, are "
895 "you sure you want that, if yes good luck");
907 if (rTRT <
m_cutTRTRatio[ibin_combined_TRT] && nTRTTotal > 0) {
937 while (ibinET < numBins && et >
m_cutBinET[ibinET]) {
953 while (ibinEta < numBins && eta2 >
m_cutBinEta[ibinEta]) {
959 const int ibin_combined = ibin_et *
m_cutBinEta.size() + ibin_eta;
961 std::vector<int>
bins{ ibin_et, ibin_eta, ibin_combined };
987 unsigned int combinedNB = 0;
988 unsigned int combinedTRTNB = 0;
991 combinedNB = etaNB * (etNB+1);
998 combinedTRTNB = etaTRTNB * (etTRTNB+1);
1001 combinedTRTNB = etaTRTNB;
1006 if (
vec.size() != 1) {
1008 <<
vec.size() <<
" but needs 1");
1015 if (
vec.size() != etaNB ) {
1017 <<
vec.size() <<
" but needs "
1024 if (
vec.size() != etaTRTNB ) {
1026 <<
vec.size() <<
" but needs "
1034 if (
vec.size() != etNB ) {
1036 <<
vec.size() <<
" but needs "
1044 if (
vec.size() != combinedNB ) {
1046 <<
vec.size() <<
" but needs "
1054 if (
vec.size() != combinedTRTNB ) {
1056 <<
vec.size() <<
" but needs "
#define ATH_MSG_WARNING(x)
std::vector< size_t > vec
static const std::vector< std::string > bins
std::vector< float > m_cutBinEta
range of eta bins for e-ID
bool CheckVar(const std::vector< T > &vec, int choice) const
int m_cutPositionTrackMatchPhi_Electron
phi difference between cluster and extrapolated track in the 2nd sampling
const std::string m_cutNameTrackTRTratio90_Electron
ratio of high to all TRT hits for non-isolated electrons (not for new ++ menus)
const std::string m_cutNameTrackPixel_Electron
number of Pixel hits
const std::string m_cutNameTrackMatchEoverP_Electron
energy-momentum match
std::vector< float > m_cutEProbabilityHT
cut on on eProbabilityHT new TRT PID tool
int m_cutPositionClusterStripsDEmaxs1_Electron
difference between max and 2nd max in strips
int m_cutPositionTrackMatchEta_Electron
eta difference between cluster and extrapolated track in the 1st sampling
std::vector< float > m_cutminEp
cut min on E/p for e-ID
std::vector< float > m_cutHadLeakage
cut on hadronic energy for e-ID
const std::string m_cutNameClusterEtaRange_Electron
cluster eta range
int m_cutPositionClusterStripsDeltaEmax2_Electron
energy of 2nd maximum in 1st sampling ~e2tsts1/(1000+const_lumi*et)
std::vector< float > m_cutNumTRT
cut on Number of TRT hits for e-ID
int m_cutPositionClusterStripsFracm_Electron
shower shape in shower core 1st sampling
int m_cutPositionClusterStripsEratio_Electron
fraction of energy found in 1st sampling (NB: not used in fact for electrons)
const std::string m_cutNameTrackMatchEta_Electron
eta difference between cluster and extrapolated track in the 1st sampling
std::vector< float > m_cutDeltaEtaTight
cut max on delta eta for Tight e-ID
const std::string m_cutNameTrackTRThits_Electron
number of TRT hits
std::vector< float > m_cutTRTRatio90
cut on Ratio of TR hits to Number of TRT hits for 10% loss due to TRT
std::vector< float > m_cutDeltaEta
cut max on delta eta for e-ID
std::vector< float > m_cutA0Tight
cut min on transverse impact parameter for Tight e-ID
std::vector< float > m_cutRphi33
cut on ratio e233/e277 for e-ID
unsigned int TrackCut(float eta2, double et, bool passBLayerRequirement, int nPixHitsPlusDeadSensors, int nSiHitsPlusDeadSensors, int nTRThigh, int nTRThighOutliers, int nTRT, int nTRTOutliers, int nTRTXenonHits, float TRT_PID, float trackd0, float deltaeta, float deltaphi, double ep, unsigned int iflag) const
std::vector< float > m_cutA0
cut min on transverse impact parameter for e-ID
const std::string m_cutNameClusterIsolation_Electron
calorimetric isolation
const std::string m_cutNameClusterHadronicLeakage_Electron
cluster leakage into the hadronic calorimeter
const std::string m_cutNameTrackIsolation_Electron
tracker isolation
int m_cutPositionClusterStripsDeltaE_Electron
difference between 2nd maximum and 1st minimum in strips (e2tsts1-emins1)
std::vector< float > m_cutBinET_TRT
Et binning for cuts on TRT for e-ID.
const std::string m_cutNameTrackA0_Electron
distance of closet approach
unsigned int m_isEMMask
which subset of cuts to apply
int m_cutPositionTrackTRThits_Electron
number of TRT hits
bool m_useTRTOutliers
use of TRT outliers
int m_cutPositionClusterMiddleEnergy_Electron
Et<0 cut.
TElectronIsEMSelector(const char *name="TElectronIsEMSelector")
Standard constructor.
int m_cutPositionClusterStripsWtot_Electron
shower width in 1st sampling
const std::string m_cutNameClusterMiddleEratio33_Electron
energy ratio in 2nd sampling (e.g E233/E237)
const std::string m_cutNameClusterMiddleEnergy_Electron
energy in 2nd sampling (e.g E277>0)
std::vector< float > m_cutFracm
cut on Fside in 1st sampling for e-ID
const std::string m_cutNameTrackSi_Electron
number of Pixel and SCT hits
int m_cutPositionConversionMatch_Electron
matching to photon (not necessarily conversion–the name is historical)
std::vector< float > m_cutBinET
range of ET bins for e-ID
const std::string m_cutNameClusterStripsFracm_Electron
shower shape in shower core 1st sampling
int m_cutPositionTrackA0Tight_Electron
distance of closet approach for tight selection (not to be used in new ++ menus)
const std::string m_cutNameTrackA0Tight_Electron
distance of closet approach for tight selection (not to be used in new ++ menus)
std::vector< float > m_cutDeltaEmax2
cut on Delta Emax2 in 1st sampling for e-ID
int m_cutPositionClusterBackEnergyFraction_Electron
energy fraction in the third layer
std::vector< float > m_cutmaxEp
cut max on E/p for e-ID
int m_cutPositionTrackMatchEoverP_Electron
energy-momentum match
std::vector< float > m_cutWeta2c
cut on shower width in 2nd sampling for e-ID
unsigned int calcIsEm(float eta2, double et, float Reta, float Rphi, float Rhad1, float Rhad, float e277, float weta1c, float weta2c, float f1, float emax2, float Eratio, float DeltaE, float wtot, float fracm, float f3, bool passBLayerRequirement, int nPixHitsPlusDeadSensors, int nSiHitsPlusDeadSensors, int nTRThigh, int nTRThighOutliers, int nTRT, int nTRTOutliers, int nTRTXenonHits, float TRT_PID, float trackd0, float deltaeta, float deltaphi, double ep) const
std::vector< float > m_cutTRTRatio
cut on Ratio of TR hits to Number of TRT hits for e-ID
const std::string m_cutNameClusterMiddleWidth_Electron
width in the second sampling (e.g Weta2)
const std::string m_cutNameClusterStripsWeta1c_Electron
shower width weighted by distance from the maximum one
asg::AcceptData fillAccept(unsigned int isEM) const
int m_cutPositionClusterMiddleEratio33_Electron
energy ratio in 2nd sampling (e.g E233/E237)
bool m_useTRTXenonHits
use of TRT Xenon Hits
asg::AcceptInfo m_acceptInfo
Accept info.
int m_cutPositionClusterMiddleEratio37_Electron
energy ratio in 2nd sampling (e.g E237/E277)
const std::string m_cutNameTrackMatchEtaTight_Electron
eta difference between cluster and extrapolated track in the 1st sampling for tight selection (not to...
int m_cutPositionTrackIsolation_Electron
tracker isolation
std::vector< float > m_cutWeta1c
cut on width in 1st sampling for e-ID
int m_cutPositionTrackTRTratio_Electron
ratio of high to all TRT hits for isolated electrons
const std::string m_cutNameClusterStripsDeltaE_Electron
difference between 2nd maximum and 1st minimum in strips (e2tsts1-emins1)
const std::string m_cutNameClusterStripsWtot_Electron
shower width in 1st sampling
std::vector< float > m_cutF1
cut on fraction of energy deposited in 1st sampling for e-ID
std::vector< float > m_cutReta37
cut on ratio e237/e277 for e-ID
const std::string m_cutNameTrackTRTratio_Electron
ratio of high to all TRT hits for isolated electrons
const std::string m_cutNameConversionMatch_Electron
matching to photon (not necessarily conversion–the name is historical)
unsigned int calocuts_electrons(float eta2, double et, float Reta, float Rphi, float Rhad1, float Rhad, float e277, float weta1c, float weta2c, float f1, float emax2, float Eratio, float DeltaE, float wtot, float fracm, float f3, unsigned int iflag, double trigEtTh=0) const
std::vector< int > m_cutSi
cut min on precision hits for e-ID
std::vector< float > m_cutmaxDeltaPhi
cut max on delta phi for e-ID
int m_cutPositionTrackTRTratio90_Electron
ratio of high to all TRT hits for non-isolated electrons (not for new ++ menus)
std::vector< int > FindEtEtaBin(double et, double eta2) const
std::vector< float > m_cutWtot
cut on total width in 1st sampling for e-ID
~TElectronIsEMSelector()
Standard destructor.
const std::string m_cutNameClusterBackEnergyFraction_Electron
energy fraction in the third layer
int m_cutPositionClusterIsolation_Electron
calorimetric isolation
asg::AcceptData accept() const
Return dummy accept with only info.
const std::string m_cutNameIsolation_Electron
isolation
int m_cutPositionTrackPixel_Electron
number of Pixel hits
int m_cutPositionClusterMiddleWidth_Electron
width in the second sampling (e.g Weta2)
std::vector< float > m_cutminDeltaPhi
cut min on delta phi for e-ID (this should be negative)
std::vector< float > m_cutDeltaE
cut on Emax2 - Emin in 1st sampling for e-ID
int m_cutPositionClusterStripsWeta1c_Electron
shower width weighted by distance from the maximum one
std::vector< int > m_cutBL
cut min on b-layer hits for e-ID
std::vector< int > m_cutPi
cut min on pixel hits for e-ID
int m_cutPositionTrackBlayer_Electron
B layer hit.
const std::string m_cutNameTrackMatchPhi_Electron
phi difference between cluster and extrapolated track in the 2nd sampling
int m_cutPositionTrackMatchEtaTight_Electron
eta difference between cluster and extrapolated track in the 1st sampling for tight selection (not to...
int m_cutPositionTrackTRTeProbabilityHT_Electron
Cut on the TRT eProbabilityHT_Electron.
int m_cutPositionTrackA0_Electron
distance of closet approach
const std::string m_cutNameTrackTRTeProbabilityHT_Electron
Cut on the TRT eProbabilityHT_Electron.
const std::string m_cutNameClusterMiddleEratio37_Electron
energy ratio in 2nd sampling (e.g E237/E277)
int m_cutPositionIsolation_Electron
isolation
int m_cutPositionTrackSi_Electron
number of Pixel and SCT hits
const std::string m_cutNameTrackBlayer_Electron
B layer hit.
std::vector< float > m_cutDEmaxs1
cut on (Emax1-Emax2)/(Emax1-Emax2) for e-ID
StatusCode initialize()
Initialize this class.
const std::string m_cutNameClusterStripsDEmaxs1_Electron
difference between max and 2nd max in strips
std::vector< float > m_cutBinEta_TRT
Eta binning for cuts on TRT for e-ID.
const std::string m_cutNameClusterStripsEratio_Electron
fraction of energy found in 1st sampling (NB: not used in fact for electrons)
int m_cutPositionClusterHadronicLeakage_Electron
cluster leakage into the hadronic calorimeter
const std::string m_cutNameClusterStripsDeltaEmax2_Electron
energy of 2nd maximum in 1st sampling ~e2tsts1/(1000+const_lumi*et)
int m_cutPositionClusterEtaRange_Electron
cluster eta range
std::vector< float > m_cutF3
cut values for cut on f3
void setCutResult(const std::string &cutName, bool cutResult)
Set the result of a cut, based on the cut name (safer)
AsgMessaging(const std::string &name)
Constructor with a name.
@ TrackBlayer_Electron
B layer hit.
@ TrackMatchPhi_Electron
phi difference between cluster and extrapolated track in the 2nd sampling
@ ClusterMiddleWidth_Electron
width in the second sampling (e.g Weta2)
@ ClusterStripsWeta1c_Electron
shower width weighted by distance from the maximum one
@ TrackA0_Electron
distance of closet approach
@ ClusterStripsFracm_Electron
shower shape in shower core 1st sampling
@ TrackMatchEta_Electron
eta difference between cluster and extrapolated track in the 1st sampling
@ TrackTRTeProbabilityHT_Electron
Cut on the TRT eProbabilityHT_Electron.
@ TrackSi_Electron
number of Pixel and SCT hits
@ ClusterStripsDeltaE_Electron
difference between 2nd maximum and 1st minimum in strips (e2tsts1-emins1)
@ TrackTRTratio_Electron
ratio of high to all TRT hits for isolated electrons
@ TrackTRTratio90_Electron
ratio of high to all TRT hits for non-isolated electrons (not for new ++ menus)
@ ClusterMiddleEratio37_Electron
energy ratio in 2nd sampling (e.g E237/E277)
@ ClusterBackEnergyFraction_Electron
energy fraction in the third layer
@ TrackPixel_Electron
number of Pixel hits
@ ClusterStripsDeltaEmax2_Electron
energy of 2nd maximum in 1st sampling ~e2tsts1/(1000+const_lumi*et)
@ TrackMatchEtaTight_Electron
eta difference between cluster and extrapolated track in the 1st sampling for tight selection (!
@ ClusterStripsDEmaxs1_Electron
difference between max and 2nd max in strips
@ TrackMatchEoverP_Electron
energy-momentum match
@ TrackA0Tight_Electron
distance of closet approach for tight selection (!
@ ClusterStripsWtot_Electron
shower width in 1st sampling
@ ClusterMiddleEratio33_Electron
energy ratio in 2nd sampling (e.g E233/E237)
@ ClusterMiddleEnergy_Electron
energy in 2nd sampling (e.g E277>0)
@ ClusterHadronicLeakage_Electron
cluster leakage into the hadronic calorimeter
@ ClusterEtaRange_Electron
cluster eta range
@ TrackTRThits_Electron
number of TRT hits
Extra patterns decribing particle interation process.