75{
76 using namespace xAOD;
77
79
81 ATH_CHECK( trigElecColl.record (std::make_unique<xAOD::TrigElectronContainer>(),
82 std::make_unique<xAOD::TrigEMClusterAuxContainer>()) );
83
85
87
89 ATH_CHECK( trigDummyElecColl.record (std::make_unique<xAOD::TrigElectronContainer>(),
90 std::make_unique<xAOD::TrigEMClusterAuxContainer>()) );
91
94
95
96 if (roiCollection->size()==0) {
98 return StatusCode::SUCCESS;
99 }
100
102
104 <<
", Phi = " << (roiDescriptor)->
phi());
105
106 float calo_eta(999), calo_phi(999), calo_et(-1);
107
110
111
112
114 ElementLink<xAOD::TrigEMClusterContainer> clusEL=ElementLink<xAOD::TrigEMClusterContainer> (*clusterCont,0);
115
116
117 calo_eta = emCluster->
eta();
118 calo_phi = emCluster->
phi();
119 calo_et = emCluster->
et();
120
121
122
124 ATH_MSG_DEBUG(
"searching a matching track: loop over tracks");
125
128
129
130 if (tracks->size() == 0){
131 return StatusCode::SUCCESS;
132 }
133
134 size_t coll_size = tracks->size();
135 trigElecColl->reserve(coll_size);
136
137
138 std::vector<float> calotrkdeta_noextrap_mon;
139
145 auto caloTrackDEtaNoExtrapMon =
Monitored::Collection(
"CaloTrackdEtaNoExtrapMon", calotrkdeta_noextrap_mon );
146
147 auto mon = Monitored::Group(
m_monTool, caloPtMon, trackPtMon, caloTrackDEtaMon, caloTrackDPhiMon, etOverPtMon, caloTrackDEtaNoExtrapMon );
148
149
151
152 ElementLink<xAOD::TrackParticleContainer> trackDummyEL = ElementLink<xAOD::TrackParticleContainer> (*tracks, 0);
153
154 trigDummyElecColl->push_back(trigDummyElec);
155 trigDummyElec->
init( 0, 0, 0, 0, clusEL, trackDummyEL);
156
157
158 SG::ReadCondHandle<CaloDetDescrManager> caloDetDescrMgrHandle{
161 const CaloDetDescrManager* caloDD = *caloDetDescrMgrHandle;
162
163
164 for(unsigned int track_index = 0; track_index < tracks->size(); track_index++)
165 {
166 const xAOD::TrackParticle_v1* trkIter = (*tracks)[track_index];
175
176
177 float trkPt = std::abs((trkIter)->
pt());
178 float etoverpt = std::abs(calo_et/trkPt);
179 float calotrkdeta_noextrap = (trkIter)->
eta() - calo_eta;
180
181 double etaAtCalo=999.;
182 double phiAtCalo=999.;
184 if(!
extrapolate(ctx,*caloDD,emCluster,trkIter,etaAtCalo,phiAtCalo)){
186 continue;
187 }
188 else{
190 " eta = " << etaAtCalo << " phi = " << phiAtCalo);
191
193 trigElecColl->push_back(trigElec);
194 ElementLink<xAOD::TrackParticleContainer> trackEL = ElementLink<xAOD::TrackParticleContainer> (*tracks, track_index);
196 etaAtCalo, phiAtCalo, etoverpt,
197 clusEL,
198 trackEL);
199 calotrkdeta_noextrap_mon.push_back(calotrkdeta_noextrap);
200 }
201 }else {
202
203 ATH_MSG_DEBUG(
"Apply cuts on track with index: "<<track_index);
206 continue;
207 }
209 ATH_MSG_DEBUG(
"Failed pre extrapolation calo track deta " << calotrkdeta_noextrap);
210 continue;
211 }
215 continue;
216 }
218 ATH_MSG_DEBUG(
"Failed pre extrapolation calo track deta for high et");
219 continue;
220 }
221 }
224 continue;
225 }
228 continue;
229 }
230 if(!
extrapolate(ctx,*caloDD,emCluster,trkIter,etaAtCalo,phiAtCalo)){
232 continue;
233 }
234
235 ATH_MSG_DEBUG(
"extrapolated eta/phi=" << etaAtCalo <<
"/" << phiAtCalo);
236
237 float dEtaCalo = std::abs(etaAtCalo - calo_eta);
241 continue;
242 }
243
244 float dPhiCalo = std::abs(phiAtCalo - calo_phi);
245 dPhiCalo = ( dPhiCalo <
M_PI ? dPhiCalo : 2*
M_PI - dPhiCalo );
249 continue;
250 }
251
256 ElementLink<xAOD::TrackParticleContainer> trackEL = ElementLink<xAOD::TrackParticleContainer> (*tracks, track_index);
258
260 " track index= " << track_index << " eta = " << etaAtCalo << " phi = " << phiAtCalo <<
261 " deta = " << dEtaCalo << "dphi = " << dPhiCalo);
263 trigElecColl->push_back(trigElec);
265 etaAtCalo, phiAtCalo, etoverpt,
266 clusEL,
267 trackEL);
268
270 <<
" dphi = " << dPhiCalo <<
" dphi = " << trigElec->
trkClusDphi()
271 <<
" caloEta = " << calo_eta <<
" caloEta = " << trigElec->
caloEta()
272 <<
" caloPhi = " << calo_phi <<
" calophi = " << trigElec->
caloPhi()
273 <<
" etaAtCalo = " << etaAtCalo <<
" etaAtCalo = " << trigElec->
trkEtaAtCalo()
274 <<
" phiAtCalo = " << phiAtCalo <<
" phiAtCalo = " << trigElec->
trkPhiAtCalo()
275 );
276 calotrkdeta_noextrap_mon.push_back(calotrkdeta_noextrap);
277
278 }
279
280 }
281
282
283 ATH_MSG_DEBUG(
"REGTEST: returning an xAOD::TrigElectronContainer with size "<< trigElecColl->size() <<
".");
284
285 return StatusCode::SUCCESS;
286}
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
Athena::TPCnvVers::Current TrigRoiDescriptor
index_type index() const
Get the index of the element inside of its container.
Gaudi::Property< float > m_calotrackdeoverp_high
SG::WriteHandleKey< xAOD::TrigElectronContainer > m_outputElectronsKey
static double getCaloPt(const xAOD::TrigElectron *el)
Gaudi::Property< float > m_calotrkdeta_noextrap_highet
Gaudi::Property< bool > m_acceptAll
SG::ReadCondHandleKey< CaloDetDescrManager > m_caloDetDescrMgrKey
Gaudi::Property< float > m_trackPtthr_highet
SG::ReadHandleKey< xAOD::TrigEMClusterContainer > m_TrigEMClusterContainerKey
bool extrapolate(const EventContext &ctx, const CaloDetDescrManager &caloDD, const xAOD::TrigEMCluster *, const xAOD::TrackParticle *, double &, double &) const
Gaudi::Property< float > m_calotrkdeta_noextrap
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_TrackParticleContainerKey
static double getTkPt(const xAOD::TrigElectron *el)
Gaudi::Property< float > m_calotrackdeoverp_low
SG::ReadHandleKey< TrigRoiDescriptorCollection > m_roiCollectionKey
Gaudi::Property< float > m_trackPtthr
Gaudi::Property< float > m_calotrackdeta
SG::WriteHandleKey< xAOD::TrigElectronContainer > m_outputDummyElectronsKey
ToolHandle< GenericMonitoringTool > m_monTool
Gaudi::Property< float > m_calotrackdphi
Gaudi::Property< float > m_clusEtthr
virtual unsigned int roiWord() const override final
float et() const
get Et (calibrated)
float eta() const
get Eta (calibrated)
float phi() const
get Phi (calibrated)
float trkClusDeta() const
The absolute value of the track-calo eta measurement difference.
float trkEtaAtCalo() const
Get the track's pseudorapidity extrapolated to the calorimeter.
float trkPhiAtCalo() const
Get the track's azimuthal angle extrapolated to the calorimeter.
float etOverPt() const
Get for the electron.
float caloEta() const
Pseudorapidity ( ) of the electron in the calorimeter.
void init(uint32_t roi, float trkEtaAtCalo, float trkPhiAtCalo, float etOverPt, const EMClusterLink_t &clLink, const TrackParticleLink_t &tpLink)
Initialisation function, setting most properties of the object.
float caloPhi() const
Azimuthal angle ( ) of the electron in the calorimeter.
float trkClusDphi() const
The absolute value of the track-calo phi measurement difference.
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
TrigElectron_v1 TrigElectron
Declare the latest version of the class.
TrigEMCluster_v1 TrigEMCluster
Define the latest version of the trigger EM cluster class.
setTeId setLumiBlock roiId