14 #include "CaloGeoHelpers/CaloSampling.h"
17 #include "TLorentzVector.h"
31 if(
inTrigger())
return StatusCode::SUCCESS;
40 static const SG::Accessor<float> acc_EMFractionAtEMScaleMOVEE3(
"EMFRACTIONATEMSCALE_MOVEE3");
41 static const SG::Accessor<float> acc_seedTrkSecMaxStripEtOverPt(
"TAU_SEEDTRK_SECMAXSTRIPETOVERPT");
50 static const SG::Accessor<float> acc_etHotShotDR1OverPtLeadTrk(
"etHotShotDR1OverPtLeadTrk");
51 static const SG::Accessor<float> acc_etHotShotWinOverPtLeadTrk(
"etHotShotWinOverPtLeadTrk");
57 std::vector<CaloSampling::CaloSample> EMSamps = {
62 std::vector<CaloSampling::CaloSample> HadSamps = {
68 std::vector<CaloSampling::CaloSample> Had1Samps = {
71 float eEMAtEMScaleFixed = 0.;
72 float eHadAtEMScaleFixed = 0.;
73 float eHad1AtEMScaleFixed = 0.;
77 std::vector<xAOD::CaloVertexedTopoCluster> vertexedClusterList = tau.
vertexedClusters();
79 TLorentzVector clusterP4 = vertexedCluster.p4();
81 if( clusterP4.DeltaR(tauAxis) > 0.2 )
continue;
84 for(
auto samp : EMSamps )
85 eEMAtEMScaleFixed += cluster.
eSample(samp);
86 for(
auto samp : HadSamps )
87 eHadAtEMScaleFixed += cluster.
eSample(samp);
88 for(
auto samp : Had1Samps )
89 eHad1AtEMScaleFixed += cluster.
eSample(samp);
91 acc_EMFracFixed(tau) = ( eEMAtEMScaleFixed + eHadAtEMScaleFixed ) != 0. ?
92 eEMAtEMScaleFixed / ( eEMAtEMScaleFixed + eHadAtEMScaleFixed ) :
LOW_NUMBER;
96 acc_absEtaLead(tau) = std::abs(
track->eta() );
97 acc_absDeltaEta(tau) = std::abs(
track->eta() - tau.
eta() );
98 acc_absDeltaPhi(tau) = std::abs(
track->p4().DeltaPhi(tau.
p4()) );
100 float etEMScale1 = acc_etEMAtEMScale(tau);
101 float etEMScale2 = acc_etHadAtEMScale(tau);
102 float tau_sumETCellsLAr = acc_sumEMCellEtOverLeadTrkPt(tau) *
track->pt();
103 float tau_E3 = tau_sumETCellsLAr - etEMScale1;
104 float tau_seedCalo_etHadAtEMScale_noE3 = etEMScale2 - tau_E3;
105 float tau_seedCalo_etEMAtEMScale_yesE3 = etEMScale1 + tau_E3;
106 acc_EMFractionAtEMScaleMOVEE3(tau) = tau_seedCalo_etEMAtEMScale_yesE3 / (tau_seedCalo_etEMAtEMScale_yesE3 + tau_seedCalo_etHadAtEMScale_noE3);
108 acc_seedTrkSecMaxStripEtOverPt(tau) = (
track->pt() != 0.) ? acc_secMaxStripEt(tau) /
track->pt() :
LOW_NUMBER;
111 acc_hadLeakFracFixed(tau) = (
track->p4().P() != 0.) ? eHad1AtEMScaleFixed /
track->p4().P() :
LOW_NUMBER;
117 float etaCalo = -10.0;
118 float phiCalo = -10.0;
123 ATH_MSG_DEBUG(
"track EM " <<
", eta: " << etaCalo <<
", phi: " << phiCalo );
126 float etHotShotDR1 = 0.;
127 float etHotShotWin = 0.;
129 if( not shotLink.isValid() ){
139 etHotShotDR1 = etShot;
142 if(std::abs(shot->
eta() - etaCalo) > 0.012 )
continue;
144 if(etShot > etHotShotWin) etHotShotWin = etShot;
146 acc_etHotShotDR1(tau) = etHotShotDR1;
147 acc_etHotShotWin(tau) = etHotShotWin;
148 acc_etHotShotDR1OverPtLeadTrk(tau) = (
track->pt() != 0.) ? etHotShotDR1 /
track->pt() :
LOW_NUMBER;
149 acc_etHotShotWinOverPtLeadTrk(tau) = (
track->pt() != 0.) ? etHotShotWin /
track->pt() :
LOW_NUMBER;
156 acc_EMFractionAtEMScaleMOVEE3(tau) =
LOW_NUMBER;
157 acc_seedTrkSecMaxStripEtOverPt(tau) =
LOW_NUMBER;
161 acc_etHotShotDR1OverPtLeadTrk(tau) =
LOW_NUMBER;
162 acc_etHotShotWinOverPtLeadTrk(tau) =
LOW_NUMBER;
165 return StatusCode::SUCCESS;