User will overwrite this function. Histogram booking is no longer done in C++. This function is called in execute once the filters are all passed.
50 {
51 using namespace Monitored;
52
53
54
55
56
58
59
61
62
64 auto lb_m = Monitored::Scalar<int>(
"m_lb",
lb );
65
66
68
69
70 if ( !(trackParticles.isValid()) ) {
72 return StatusCode::RECOVERABLE;
73 } else {
74 ATH_MSG_DEBUG(
"InDetGlobalMonitoringRun3Test: Track container "<< trackParticles.name() <<
" is found.");
75 }
76
77
78 int nBase = 0;
79 int nTight = 0;
80 int nNoIBL = 0;
81 int nNoBL = 0;
82 int nNoTRText = 0;
83
85
86 for (const auto trackPart: *trackParticles) {
87 const Trk::Track *
track = trackPart->track();
88 if ( !track )
89 {
90 ATH_MSG_DEBUG(
"InDetGlobalMonitoringRun3Test: NULL track pointer in collection" );
91 continue;
92 }
93
95 if ( !perigee )
96 {
97 ATH_MSG_DEBUG(
"InDetGlobalMonitoringRun3Test: NULL track->perigeeParameters pointer " );
98 continue;
99 }
100
101
102
103
104 float eta_perigee = perigee->
eta();
105 float phi_perigee = perigee->parameters()[
Trk::phi0];
106
107 auto eta_perigee_m = Monitored::Scalar<float>( "m_eta_perigee", eta_perigee);
108 auto phi_perigee_m = Monitored::Scalar<float>( "m_phi_perigee", phi_perigee);
109
110 auto eta_perigee_loose_m = Monitored::Scalar<float>( "m_eta_perigee_loose", eta_perigee);
111 auto phi_perigee_loose_m = Monitored::Scalar<float>( "m_phi_perigee_loose", phi_perigee);
112
113
115 fill(trackGroup, eta_perigee_loose_m, phi_perigee_loose_m);
116 }
117
118
120 continue;
121
122 nBase++;
123
124 fill(trackGroup, eta_perigee_m, phi_perigee_m);
125
127 {
129 auto numberOfInnermostPixelLayerHits_m = Monitored::Scalar<int>( "m_numberOfInnermostPixelLayerHits", numberOfInnermostPixelLayerHits);
130 fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfInnermostPixelLayerHits_m);
131
132 fill(trackGroup, lb_m, numberOfInnermostPixelLayerHits_m);
133 }
134
138 auto pixHits_m = Monitored::Scalar<int>( "m_pixHits", pixHits );
139 fill(trackGroup, eta_perigee_m, phi_perigee_m, pixHits_m);
140 fill(trackGroup, lb_m, pixHits_m);
141
142 auto numberOfPixelDeadSensors_m = Monitored::Scalar<int>( "m_numberOfPixelDeadSensors", numberOfPixelDeadSensors );
143 fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfPixelDeadSensors_m);
144
146 auto numberOfPixelSharedHits_m = Monitored::Scalar<int>( "m_numberOfPixelSharedHits", numberOfPixelSharedHits);
147 fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfPixelSharedHits_m);
148
150 auto numberOfPixelHoles_m = Monitored::Scalar<int>( "m_numberOfPixelHoles", numberOfPixelHoles);
151 fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfPixelHoles_m);
152
154 auto numberOfPixelSplitHits_m = Monitored::Scalar<int>( "m_numberOfPixelSplitHits", numberOfPixelSplitHits);
155 fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfPixelSplitHits_m);
156
160 auto sctHits_m = Monitored::Scalar<int>( "m_sctHits", sctHits );
161 fill(trackGroup, eta_perigee_m, phi_perigee_m, sctHits_m);
162 fill(trackGroup, lb_m, sctHits_m);
163
164 auto numberOfSCTDeadSensors_m = Monitored::Scalar<int>( "m_numberOfSCTDeadSensors", numberOfSCTDeadSensors );
165 fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfSCTDeadSensors_m);
166
168 auto numberOfSCTSharedHits_m = Monitored::Scalar<int>( "m_numberOfSCTSharedHits", numberOfSCTSharedHits);
169 fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfSCTSharedHits_m);
170
172 auto numberOfSCTHoles_m = Monitored::Scalar<int>( "m_numberOfSCTHoles", numberOfSCTHoles);
173 fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfSCTHoles_m);
174
178 auto trtHits_m = Monitored::Scalar<int>( "m_trtHits", trtHits );
179 fill(trackGroup, eta_perigee_m, phi_perigee_m, trtHits_m);
180 fill(trackGroup, lb_m, trtHits_m);
181
182 auto numberOfTRTDeadStraws_m = Monitored::Scalar<int>( "m_numberOfTRTDeadStraws", numberOfTRTDeadStraws);
183 fill(trackGroup, eta_perigee_m, phi_perigee_m, numberOfTRTDeadStraws_m);
184
185
186
187
188
189
190
191 int InnermostPixelLayerHit = 0;
192 int NextToInnermostPixelLayerHit = 0;
193
196
199 int expNInHit = trackPart->summaryValue(iSummaryValue, expNInHitField) ? iSummaryValue : 0;
200 int nNInHits = trackPart->summaryValue(iSummaryValue, nNInHitField) ? iSummaryValue : 0;
201
203 {
204
205 if ( expInHit==1 && nInHits==0 ) InnermostPixelLayerHit = 1;
206 auto InnermostPixelLayerHit_m = Monitored::Scalar<int>( "m_InnermostPixelLayerHit", InnermostPixelLayerHit);
207 fill(trackGroup, eta_perigee_m, phi_perigee_m, InnermostPixelLayerHit_m);
208 }
209
210
211 if ( expNInHit==1 && nNInHits==0 ) NextToInnermostPixelLayerHit = 1 ;
212 auto NextToInnermostPixelLayerHit_m = Monitored::Scalar<int>( "m_NextToInnermostPixelLayerHit", NextToInnermostPixelLayerHit);
213 fill(trackGroup, eta_perigee_m, phi_perigee_m, NextToInnermostPixelLayerHit_m);
214
215
216 int noTRTHits = 0;
217 if ( numberOfTRTHits == 0 ) noTRTHits = 1;
218 auto noTRTHits_m = Monitored::Scalar<int>( "m_noTRTHits", noTRTHits);
219 fill(trackGroup, eta_perigee_m, phi_perigee_m, noTRTHits_m);
220
221
222
223 int track_pass_tight = 0;
225 track_pass_tight = 1;
226 nTight++;
227 }
228 auto track_pass_tight_m = Monitored::Scalar<int>( "m_track_pass_tight", track_pass_tight);
229 fill(trackGroup, eta_perigee_m, phi_perigee_m, track_pass_tight_m);
230
231
232
233
234 int NoIBL = 0;
236 {
237
238 if ( expInHit==1 && nInHits==0 ) NoIBL = 1;
239 if (NoIBL == 1) nNoIBL++;
240 auto NoIBL_m = Monitored::Scalar<int>( "m_NoIBL_LB", NoIBL);
241 fill(trackGroup, lb_m, NoIBL_m);
242 }
243
244 int NoBL = 0;
245 if ( expNInHit==1 && nNInHits==0 ) NoBL = 1;
246 if (NoBL == 1) nNoBL++;
247 auto NoBL_m = Monitored::Scalar<int>( "m_NoBL_LB", NoBL);
248 fill(trackGroup, lb_m, NoBL_m);
249
250 int NoTRText = 0;
252 if ( numberOfTRTHits + numberOfTRTOutliers == 0 ) NoTRText = 1;
253 if (NoTRText == 1) nNoTRText++;
254 auto NoTRText_m = Monitored::Scalar<int>( "m_NoTRText_LB", NoTRText);
255 fill(trackGroup, lb_m, NoTRText_m);
256
257
258
259
260
261 }
262
263
264
266 {
267
270
271 if (!handle_vxContainer.isPresent()) {
272 ATH_MSG_DEBUG (
"InDetGlobalTrackMonAlg: StoreGate doesn't contain primary vertex container with key "+
m_vxContainerName.key()+
",may not be able to produce TIDE histograms");
273 }
274 if (!handle_vxContainer.isValid()) {
275 ATH_MSG_DEBUG (
"InDetGlobalTrackMonAlg: Could not retrieve primary vertex container with key "+
m_vxContainerName.key()+
",may not be able to produce TIDE histograms");
276 }
277 else {
278 vertexContainer = handle_vxContainer.cptr();
279 }
280
281
282
284
285 if (!handle_jetContainer.isPresent()) {
286 ATH_MSG_DEBUG (
"InDetGlobalTrackMonAlg: StoreGate doesn't contain jet container with key "+
m_jetContainerName.key()+
",may not be able to produce TIDE histograms");
287 }
288 if (!handle_jetContainer.isValid()) {
289 ATH_MSG_DEBUG (
"InDetGlobalTrackMonAlg: Could not retrieve jet container with key "+
m_jetContainerName.key()+
",may not be able to produce TIDE histograms");
290 }
291
292 auto jetContainer = handle_jetContainer.cptr();
293
294 if ( handle_jetContainer.isValid() ) {
295 for ( auto jetItr = jetContainer->begin(); jetItr != jetContainer->end(); ++jetItr )
296 {
297 if ( (*jetItr)->pt() < 20000. ){
298 continue;
299 }
300 std::vector<const xAOD::IParticle*> trackVector;
302 continue;
303 }
304
305 for ( std::vector<const xAOD::IParticle*>::const_iterator trkItr = trackVector.begin(); trkItr != trackVector.end() ; ++trkItr )
306 {
308 if ( !trackPart ){
309 continue;
310 }
315 {
318 if ( handle_vxContainer.isValid() ){
319 for ( const auto *const vx : *vertexContainer )
320 {
321 for ( const auto& tpLink : vx->trackParticleLinks() )
322 {
323 if ( *tpLink == trackPart )
324 {
325 foundVertex = vx;
326 break;
327 }
328 }
329 if (foundVertex) break;
330 }
331 }
332 if ( foundVertex )
333 {
334 std::unique_ptr<const Trk::ImpactParametersAndSigma>myIPandSigma(
m_trackToVertexIPEstimator->estimate(trackPart,foundVertex));
335
336 if ( myIPandSigma )
337 {
338 float jetassocdR = trackPart->
p4().DeltaR( (*jetItr)->p4());
339 float jetassocd0Reso = std::abs( myIPandSigma->IPd0 / std::sqrt( myIPandSigma->sigmad0*myIPandSigma->sigmad0 + myIPandSigma->PVsigmad0*myIPandSigma->PVsigmad0 ) );
340 float jetassocz0Reso = std::abs( myIPandSigma->IPz0 / std::sqrt( myIPandSigma->sigmaz0*myIPandSigma->sigmaz0 + myIPandSigma->PVsigmaz0*myIPandSigma->PVsigmaz0 ) );
341 float jetassocIPReso = std::abs( myIPandSigma->IPd0 / std::sqrt( myIPandSigma->sigmad0*myIPandSigma->sigmad0 + myIPandSigma->PVsigmad0*myIPandSigma->PVsigmad0 ) );
342 auto jetassocdR_m = Monitored::Scalar<float>("m_jetassocdR", jetassocdR);
343 auto jetassocd0Reso_m = Monitored::Scalar<float>("m_jetassocd0Reso", jetassocd0Reso);
344 auto jetassocz0Reso_m = Monitored::Scalar<float>("m_jetassocz0Reso", jetassocz0Reso);
345 auto jetassocIPReso_m = Monitored::Scalar<float>("m_jetassocd0Reso", jetassocIPReso);
346
347 fill(trackGroup, jetassocdR_m, jetassocd0Reso_m);
348 fill(trackGroup, jetassocdR_m, jetassocz0Reso_m);
349 fill(trackGroup, lb_m, jetassocIPReso_m);
350 }
351
352 }
355 float pixSplitdR = trackPart->
p4().DeltaR( (*jetItr)->p4() );
356 auto pixSplitFrac_m = Monitored::Scalar<float>("m_pixSplitFrac", frac);
357 auto pixSplitdR_m = Monitored::Scalar<float>("m_pixSplitdR", pixSplitdR);
358
359 fill(trackGroup, pixSplitdR_m, pixSplitFrac_m);
360 fill(trackGroup, lb_m, pixSplitFrac_m);
361 }
362
365 float pixShareddR = trackPart->
p4().DeltaR( (*jetItr)->p4() );
366 auto pixSharedFrac_m = Monitored::Scalar<float>("m_pixSharedFrac", frac);
367 auto pixShareddR_m = Monitored::Scalar<float>("m_pixShareddR", pixShareddR);
368
369 fill(trackGroup, pixShareddR_m, pixSharedFrac_m);
370 fill(trackGroup, lb_m, pixSharedFrac_m);
371 }
372 }
373 }
374 }
375 }
376 }
377
378
379
380
381
382 auto nBase_m = Monitored::Scalar<int>( "m_nBase", nBase);
383 fill(trackGroup, nBase_m);
384
385 auto nBaseLB_m = Monitored::Scalar<int>( "m_nBase_LB", nBase);
386 fill(trackGroup, lb_m, nBaseLB_m);
387
388 auto nTight_m = Monitored::Scalar<int>( "m_nTight_LB", nTight);
389 fill(trackGroup, lb_m, nTight_m);
390
392 auto nNoIBL_m = Monitored::Scalar<int>( "m_nNoIBL_LB", nNoIBL);
393 fill(trackGroup, lb_m, nNoIBL_m);
394 }
395
396 auto nNoBL_m = Monitored::Scalar<int>( "m_nNoBL_LB", nNoBL);
397 fill(trackGroup, lb_m, nNoBL_m);
398
399 auto nNoTRText_m = Monitored::Scalar<int>( "m_nNoTRText_LB", nNoTRText);
400 fill(trackGroup, lb_m, nNoTRText_m);
401
402
403
404
405
406
407
408
409 return StatusCode::SUCCESS;
410}
const ToolHandle< GenericMonitoringTool > & getGroup(const std::string &name) const
Get a specific monitoring tool from the tool handle array.
SG::ReadHandle< xAOD::EventInfo > GetEventInfo(const EventContext &) const
Return a ReadHandle for an EventInfo object (get run/event numbers, etc.)
ToolHandle< Trk::ITrackToVertexIPEstimator > m_trackToVertexIPEstimator
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_trackParticleName
ToolHandle< InDet::IInDetTrackSelectionTool > m_loose_trackSelTool
ToolHandle< InDet::IInDetTrackSelectionTool > m_trackSelTool
SG::ReadHandleKey< xAOD::JetContainer > m_jetContainerName
SG::ReadHandleKey< xAOD::VertexContainer > m_vxContainerName
ToolHandle< InDet::IInDetTrackSelectionTool > m_tight_trackSelTool
double eta() const
Access method for pseudorapidity - from momentum.
virtual FourMom_t p4() const override final
The full 4-momentum of the particle.
const Trk::Perigee & perigeeParameters() const
Returns the Trk::MeasuredPerigee track parameters.
bool summaryValue(uint8_t &value, const SummaryType &information) const
Accessor for TrackSummary values.
void fill(const ToolHandle< GenericMonitoringTool > &groupHandle, std::vector< std::reference_wrapper< Monitored::IMonitoredVariable > > &&variables) const
Fills a vector of variables to a group by reference.
std::vector< std::string > split(const std::string &s, const std::string &t=":")
StatusCode accept(const xAOD::Muon *mu)
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
ParametersT< TrackParametersDim, Charged, PerigeeSurface > Perigee
TrackParticle_v1 TrackParticle
Reference the current persistent version:
VertexContainer_v1 VertexContainer
Definition of the current "Vertex container version".
Vertex_v1 Vertex
Define the latest version of the vertex class.
SummaryType
Enumerates the different types of information stored in Summary.
@ expectInnermostPixelLayerHit
Do we expect a 0th-layer barrel hit for this track?
@ numberOfTRTDeadStraws
number of dead TRT straws crossed [unit8_t].
@ numberOfPixelHoles
number of pixel layers on track with absence of hits [unit8_t].
@ numberOfPixelSplitHits
number of Pixel all-layer hits split by cluster splitting [unit8_t].
@ numberOfTRTHits
number of TRT hits [unit8_t].
@ numberOfNextToInnermostPixelLayerHits
these are the hits in the 1st pixel barrel layer
@ numberOfSCTDeadSensors
number of dead SCT sensors crossed [unit8_t].
@ expectNextToInnermostPixelLayerHit
Do we expect a 1st-layer barrel hit for this track?
@ numberOfSCTHits
number of hits in SCT [unit8_t].
@ numberOfInnermostPixelLayerHits
these are the hits in the 0th pixel barrel layer
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].
@ numberOfPixelSharedHits
number of Pixel all-layer hits shared by several tracks [unit8_t].
@ numberOfSCTSharedHits
number of SCT hits shared by several tracks [unit8_t].
@ numberOfTRTOutliers
number of TRT outliers [unit8_t].
@ numberOfPixelDeadSensors
number of dead pixel sensors crossed [unit8_t].
@ numberOfSCTHoles
number of SCT holes [unit8_t].