77{
78 using namespace xAOD;
79
81
83 ATH_CHECK( trigElecColl.record (std::make_unique<xAOD::TrigElectronContainer>(),
84 std::make_unique<xAOD::TrigEMClusterAuxContainer>()) );
85
87
89
91 ATH_CHECK( trigDummyElecColl.record (std::make_unique<xAOD::TrigElectronContainer>(),
92 std::make_unique<xAOD::TrigEMClusterAuxContainer>()) );
93
96
97
98 if (roiCollection->size()==0) {
100 return StatusCode::SUCCESS;
101 }
102
104
106 <<
", Phi = " << (roiDescriptor)->
phi());
107
108 float calo_eta(999), calo_phi(999), calo_et(-1);
109
112
113
114
117
118
119 calo_eta = emCluster->
eta();
120 calo_phi = emCluster->
phi();
121 calo_et = emCluster->
et();
122
123
124
126 ATH_MSG_DEBUG(
"searching a matching track: loop over tracks");
127
130
131
132 if (tracks->size() == 0){
133 return StatusCode::SUCCESS;
134 }
135
136 size_t coll_size = tracks->size();
137 trigElecColl->reserve(coll_size);
138
139
140 std::vector<float> calotrkdeta_noextrap_mon;
141
147 auto caloTrackDEtaNoExtrapMon =
Monitored::Collection(
"CaloTrackdEtaNoExtrapMon", calotrkdeta_noextrap_mon );
148
149 auto mon = Monitored::Group(
m_monTool, caloPtMon, trackPtMon, caloTrackDEtaMon, caloTrackDPhiMon, etOverPtMon, caloTrackDEtaNoExtrapMon );
150
151
153
154 ElementLink<xAOD::TrackParticleContainer> trackDummyEL = ElementLink<xAOD::TrackParticleContainer> (*tracks, 0);
155
156 trigDummyElecColl->push_back(trigDummyElec);
157 trigDummyElec->
init( 0, 0, 0, 0, clusEL, trackDummyEL);
158
159
160 SG::ReadCondHandle<CaloDetDescrManager> caloDetDescrMgrHandle{
163 const CaloDetDescrManager* caloDD = *caloDetDescrMgrHandle;
164
165
166 for(unsigned int track_index = 0; track_index < tracks->size(); track_index++)
167 {
168 const xAOD::TrackParticle_v1* trkIter = (*tracks)[track_index];
177
178
179 float trkPt = std::abs((trkIter)->
pt());
180 float etoverpt = std::abs(calo_et/trkPt);
181 float calotrkdeta_noextrap = (trkIter)->
eta() - calo_eta;
182
183 double etaAtCalo=999.;
184 double phiAtCalo=999.;
186 if(!
extrapolate(ctx,*caloDD,emCluster,trkIter,etaAtCalo,phiAtCalo)){
188 continue;
189 }
190 else{
192 " eta = " << etaAtCalo << " phi = " << phiAtCalo);
193
195 trigElecColl->push_back(trigElec);
196 ElementLink<xAOD::TrackParticleContainer> trackEL = ElementLink<xAOD::TrackParticleContainer> (*tracks, track_index);
198 etaAtCalo, phiAtCalo, etoverpt,
199 clusEL,
200 trackEL);
201 calotrkdeta_noextrap_mon.push_back(calotrkdeta_noextrap);
202 }
203 }else {
204
205 ATH_MSG_DEBUG(
"Apply cuts on track with index: "<<track_index);
208 continue;
209 }
211 ATH_MSG_DEBUG(
"Failed pre extrapolation calo track deta " << calotrkdeta_noextrap);
212 continue;
213 }
217 continue;
218 }
220 ATH_MSG_DEBUG(
"Failed pre extrapolation calo track deta for high et");
221 continue;
222 }
223 }
226 continue;
227 }
230 continue;
231 }
232 if(!
extrapolate(ctx,*caloDD,emCluster,trkIter,etaAtCalo,phiAtCalo)){
234 continue;
235 }
236
237 ATH_MSG_DEBUG(
"extrapolated eta/phi=" << etaAtCalo <<
"/" << phiAtCalo);
238
239 float dEtaCalo = std::abs(etaAtCalo - calo_eta);
243 continue;
244 }
245
246 float dPhiCalo = std::abs(phiAtCalo - calo_phi);
247 dPhiCalo = ( dPhiCalo <
M_PI ? dPhiCalo : 2*
M_PI - dPhiCalo );
251 continue;
252 }
253
258 ElementLink<xAOD::TrackParticleContainer> trackEL = ElementLink<xAOD::TrackParticleContainer> (*tracks, track_index);
260
262 " track index= " << track_index << " eta = " << etaAtCalo << " phi = " << phiAtCalo <<
263 " deta = " << dEtaCalo << "dphi = " << dPhiCalo);
265 trigElecColl->push_back(trigElec);
267 etaAtCalo, phiAtCalo, etoverpt,
268 clusEL,
269 trackEL);
270
272 <<
" dphi = " << dPhiCalo <<
" dphi = " << trigElec->
trkClusDphi()
273 <<
" caloEta = " << calo_eta <<
" caloEta = " << trigElec->
caloEta()
274 <<
" caloPhi = " << calo_phi <<
" calophi = " << trigElec->
caloPhi()
275 <<
" etaAtCalo = " << etaAtCalo <<
" etaAtCalo = " << trigElec->
trkEtaAtCalo()
276 <<
" phiAtCalo = " << phiAtCalo <<
" phiAtCalo = " << trigElec->
trkPhiAtCalo()
277 );
278 calotrkdeta_noextrap_mon.push_back(calotrkdeta_noextrap);
279
280 }
281
282 }
283
284
285 ATH_MSG_DEBUG(
"REGTEST: returning an xAOD::TrigElectronContainer with size "<< trigElecColl->size() <<
".");
286
287 return StatusCode::SUCCESS;
288}
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
#define ATH_CHECK
Evaluate an expression and check for errors.
ElementLink()
Default constructor.
#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