ATLAS Offline Software
InDetPhysValMonitoringTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
10 #include "GaudiKernel/SystemOfUnits.h"
11 
14 #include "InDetRttPlots.h"
15 #include "InDetPerfPlot_nTracks.h"
16 #include "AthTruthSelectionTool.h"
17 #include "CachedGetAssocTruth.h"
18 
19 #include "safeDecorator.h"
20 // #include "TrackTruthLookup.h"
21 //
28 #include "xAODTruth/TruthVertex.h"
32 
34 //
35 #include <algorithm>
36 #include <limits>
37 #include <cmath> // to get std::isnan(), std::abs etc.
38 // #include <functional> // to get std::plus
39 #include <utility>
40 #include <cstdlib> // to getenv
41 #include <vector>
42 
44 
45 namespace { // utility functions used here
46 
47  // get truth/track matching probability
48  float
49  getMatchingProbability(const xAOD::TrackParticle& trackParticle) {
50  float result(std::numeric_limits<float>::quiet_NaN());
51 
52  static const SG::ConstAccessor<float> truthMatchProbabilityAcc("truthMatchProbability");
53  if (truthMatchProbabilityAcc.isAvailable(trackParticle)) {
54  result = truthMatchProbabilityAcc(trackParticle);
55  }
56  return result;
57  }
58 
59  template <class T>
60  inline float
61  safelyGetEta(const T& pTrk, const float safePtThreshold = 0.1) {
62  return (pTrk->pt() > safePtThreshold) ? (pTrk->eta()) : std::nan("");
63  }
64 
65  // general utility function to check value is in range
66  template <class T>
67  inline bool
68  inRange(const T& value, const T& minVal, const T& maxVal) {
69  return not ((value < minVal)or(value > maxVal));
70  }
71 
72  template<class T>
73  inline bool
74  inRange(const T& value, const T& absoluteMax) {
75  return not (std::abs(value) > absoluteMax);
76  }
77 
78  // Cuts on various objects
79 
80  // general utility function to return bin index given a value and the upper endpoints of each bin
81  template <class T>
82  unsigned int
83  binIndex(const T& val, const std::vector<T>& partitions) {// signature should allow other containers
84  unsigned int i(0);
85  bool nf = true;
86 
87  while (nf and i != partitions.size()) {
88  nf = (val > partitions[i++]);
89  }
90  return nf ? i : i - 1;
91  }
92 
93  bool
94  acceptTruthVertex(const xAOD::TruthVertex* vtx) {
95  const float x(vtx->x()), y(vtx->y()), z(vtx->z());
96  const float vrtR2 = (x * x + y * y); // radial distance squared
97 
98  return inRange(z, 500.f) and not (vrtR2 > 1); // units?
99  }
100 
101  const std::vector<float> ETA_PARTITIONS = {
102  2.7, 3.5, std::numeric_limits<float>::infinity()
103  };
104 
105 }// namespace
106 
108 InDetPhysValMonitoringTool::InDetPhysValMonitoringTool(const std::string& type, const std::string& name,
109  const IInterface* parent) :
111 }
112 
114 
118  // Get the track selector tool only if m_useTrackSelection is true;
119  // first check for consistency i.e. that there is a trackSelectionTool if you ask
120  // for trackSelection
121  ATH_CHECK(m_trackSelectionTool.retrieve(EnableTool {m_useTrackSelection} ));
122  ATH_CHECK(m_truthSelectionTool.retrieve(EnableTool {not m_truthParticleName.key().empty()} ));
123  ATH_CHECK(m_vtxValidTool.retrieve(EnableTool {m_useVertexTruthMatchTool}));
124  ATH_CHECK(m_trackTruthOriginTool.retrieve( EnableTool {m_doTruthOriginPlots} ));
126  ATH_CHECK(m_grlTool.retrieve(EnableTool{m_useGRL}));
127 
128  ATH_MSG_DEBUG("m_useVertexTruthMatchTool ====== " <<m_useVertexTruthMatchTool);
129  if (m_truthSelectionTool.get() ) {
130  m_truthCutFlow = CutFlow(m_truthSelectionTool->nCuts());
131  }
132 
133  m_monPlots = std::make_unique<InDetRttPlots>
134  (nullptr, static_cast<std::string>(m_dirName) + static_cast<std::string>(m_folder),
135  getFilledPlotConfig()); // m_detailLevel := DEBUG, enable expert histograms
136 
138  ATH_CHECK( m_truthParticleName.initialize( (m_pileupSwitch == "HardScatter" or m_pileupSwitch == "All") and not m_truthParticleName.key().empty() ) );
139  ATH_CHECK( m_vertexContainerName.initialize( not m_vertexContainerName.empty() ) );
140  ATH_CHECK( m_truthVertexContainerName.initialize( not m_truthVertexContainerName.key().empty() ) );
142 
143  ATH_CHECK( m_truthEventName.initialize( (m_pileupSwitch == "HardScatter" or m_pileupSwitch == "All") and not m_truthEventName.key().empty() ) );
144  ATH_CHECK( m_truthPileUpEventName.initialize( (m_pileupSwitch == "PileUp" or m_pileupSwitch == "All") and not m_truthPileUpEventName.key().empty() ) );
145  ATH_CHECK( m_jetContainerName.initialize( m_doTrackInJetPlots and not m_jetContainerName.key().empty()) );
146 
147  std::vector<std::string> required_float_track_decorations {"d0","hitResiduals_residualLocX","d0err"};
148  std::vector<std::string> required_int_track_decorations {};
149  std::vector<std::string> required_float_truth_decorations {"d0"};
150  std::vector<std::string> required_int_truth_decorations {};
151  std::vector<std::string> required_int_jet_decorations {"HadronConeExclTruthLabelID"};
152 
153  std::string empty_prefix;
154  IDPVM::addReadDecoratorHandleKeys(*this, m_trkParticleName, empty_prefix, required_float_track_decorations, m_floatTrkDecor);
155  IDPVM::addReadDecoratorHandleKeys(*this, m_trkParticleName, empty_prefix, required_int_truth_decorations, m_intTrkDecor);
156  if (!m_truthParticleName.key().empty()) {
157  IDPVM::addReadDecoratorHandleKeys(*this, m_truthParticleName, empty_prefix, required_float_truth_decorations, m_floatTruthDecor);
158  IDPVM::addReadDecoratorHandleKeys(*this, m_truthParticleName, empty_prefix, required_int_truth_decorations, m_intTruthDecor);
159  }
161  IDPVM::addReadDecoratorHandleKeys(*this, m_jetContainerName, empty_prefix, required_int_jet_decorations, m_intJetDecor);
162  }
163 
165 
167  return StatusCode::SUCCESS;
168 }
169 
170 
172 
173 
174  InDetRttPlotConfig rttConfig;
175  rttConfig.detailLevel = m_detailLevel;
176 
177  rttConfig.isITk = m_isITk;
178 
183 
185  rttConfig.doHitEffPlot = m_doHitLevelPlots;
186 
191 
194 
196 
201 
203 
205 
207  if (m_truthParticleName.key().empty()){
208  rttConfig.doFakePlots = false;
209  rttConfig.doMissingTruthFakePlots = false;
210  rttConfig.doHitsFakeTracksPlots = false;
211  rttConfig.doHitsUnlinkedTracksPlots = false;
212  rttConfig.doEffPlots = false;
213  rttConfig.doResolutionPlotPrim = false;
214  rttConfig.doResolutionPlotPrim_truthFromB = false;
215  rttConfig.doResolutionPlotSecd = false;
216  rttConfig.doHitsMatchedTracksPlots = false;
217  rttConfig.doVertexTruthMatchingPlots = false;
218  rttConfig.doHardScatterVertexTruthMatchingPlots = false;
219  rttConfig.doEfficienciesPerAuthor = false;
220  rttConfig.doFakesPerAuthor = false;
221  rttConfig.doResolutionsPerAuthor = false;
222  rttConfig.doNtupleTruthToReco = false;
223  rttConfig.doTrkInJetPlots_fake_bjets = false;
224  rttConfig.doTrkInJetPlots_matched_bjets = false;
225  rttConfig.doTrkInJetPlots_unlinked_bjets = false;
226  rttConfig.doTrkInJetPlots_truthFromB = false;
227  rttConfig.doResolutionPlotPrim_truthFromB = false;
228  }
229 
231  if (m_onlyFillMatched){
232  rttConfig.doTrackParameters = false;
233  rttConfig.doNTracks = false;
234  rttConfig.doHitResidualPlot = false;
235  rttConfig.doHitEffPlot = false;
236  rttConfig.doHitsRecoTracksPlots = false;
237  rttConfig.doTrtExtensionPlots = false;
238  rttConfig.doFakePlots = false;
239  rttConfig.doMissingTruthFakePlots = false;
240  rttConfig.doHitsFakeTracksPlots = false;
241  rttConfig.doHitsUnlinkedTracksPlots = false;
242  rttConfig.doVertexPlots = false;
243  rttConfig.doVerticesVsMuPlots = false;
244  rttConfig.doHardScatterVertexPlots = false;
245  rttConfig.doVertexTruthMatchingPlots = false;
246  rttConfig.doHardScatterVertexTruthMatchingPlots = false;
247  rttConfig.doTrkInJetPlots = false;
248  rttConfig.doTrkInJetPlots_bjets = false;
249  rttConfig.doTrkInJetPlots_matched = false;
250  rttConfig.doTrkInJetPlots_matched_bjets = false;
251  rttConfig.doTrkInJetPlots_fake = false;
252  rttConfig.doTrkInJetPlots_fake_bjets = false;
253  rttConfig.doTrkInJetPlots_unlinked = false;
254  rttConfig.doTrkInJetPlots_unlinked_bjets = false;
255  rttConfig.doTrkInJetPlots_truthFromB = false;
256  }
257 
258  // For IDTIDE derivation
259  // disable the vertex plots since no covariance from IDTIDE
260  if (m_doIDTIDEPlots){
261  rttConfig.doVertexPlots = false;
262  rttConfig.doVerticesVsMuPlots = false;
263  rttConfig.doHardScatterVertexPlots = false;
264  rttConfig.doVertexTruthMatchingPlots = false;
265  rttConfig.doHardScatterVertexTruthMatchingPlots = false;
266  rttConfig.doTrkInJetPlots = true;
267  rttConfig.doTrkInJetPlots_bjets = true;
268  rttConfig.doTrkInJetPlots_matched = true;
269  rttConfig.doTrkInJetPlots_matched_bjets = true;
270  rttConfig.doTrkInJetPlots_fake = true;
271  rttConfig.doTrkInJetPlots_fake_bjets = true;
272  rttConfig.doTrkInJetPlots_unlinked = true;
273  rttConfig.doTrkInJetPlots_unlinked_bjets = true;
274  rttConfig.doTrkInJetPlots_truthFromB = true;
275  }
276 
278  if (m_detailLevel < 200){
279  rttConfig.doResolutionPlotSecd = false;
280  rttConfig.doHitsMatchedTracksPlots = false;
281  rttConfig.doHitsFakeTracksPlots = false;
282  rttConfig.doHitsUnlinkedTracksPlots = false;
283  rttConfig.doVertexTruthMatchingPlots = false;
284  rttConfig.doFakesPerAuthor = false;
285  rttConfig.doTrackParametersPerAuthor = false;
286  rttConfig.doEfficienciesPerAuthor = false;
287  rttConfig.doResolutionsPerAuthor = false;
288  rttConfig.doTrkInJetPlots_matched = false;
289  rttConfig.doTrkInJetPlots_fake = false;
290  rttConfig.doTrkInJetPlots_unlinked = false;
291  rttConfig.doTrkInJetPlots_matched_bjets = false;
292  rttConfig.doTrkInJetPlots_fake_bjets = false;
293  rttConfig.doTrkInJetPlots_unlinked_bjets = false;
294  }
295 
296  return rttConfig;
297 }
298 
301  ATH_MSG_DEBUG("Filling hists " << name() << "...");
302  // function object could be used to retrieve truth: IDPVM::CachedGetAssocTruth getTruth;
303 
304  // Get the Event Context
305  const EventContext& ctx = Gaudi::Hive::currentContext();
306 
307  // retrieve trackParticle container
309  if (not trackHandle.isValid()) {
310  ATH_MSG_ERROR("Invalid trackname = " << m_trkParticleName << "!");
311  return StatusCode::FAILURE;
312  }
313  const xAOD::TrackParticleContainer* tracks = trackHandle.cptr();
314 
315  SG::ReadHandle<xAOD::TruthPileupEventContainer> truthPileupEventContainer;
316  if( not m_truthPileUpEventName.key().empty()) {
318  }
319 
321  if (not pie.isValid()){
322  ATH_MSG_WARNING("Shouldn't happen - EventInfo is buggy, setting mu to 0");
323  }
324 
325  // FIX-ME: I'm not sure if we should stop execution if EventInfo is not valid ...
326  // it is used after as if they assume it is valid
327  if (m_useGRL and pie.isValid() and !pie->eventType(xAOD::EventInfo::IS_SIMULATION)) {
328  if (!m_grlTool->passRunLB(*pie)) {
329  ATH_MSG_VERBOSE("GRL veto");
330  return StatusCode::SUCCESS;
331  }
332  }
333 
334  std::vector<const xAOD::TruthParticle*> truthParticlesVec = getTruthParticles(ctx);
335 
336  // Mark the truth particles in our vector as "selected".
337  // This is needed because we later access the truth matching via xAOD decorations, where we do not 'know' about membership to this vector.
339 
340  IDPVM::CachedGetAssocTruth getAsTruth; // only cache one way, track->truth, not truth->tracks
341 
342  unsigned int truthMu = 0;
343  float actualMu = 0.;
344  if(not m_truthPileUpEventName.key().empty() and truthPileupEventContainer.isValid()){
345  truthMu = static_cast<int>( truthPileupEventContainer->size() );
346  }
347  if(pie.isValid()) actualMu = pie->actualInteractionsPerCrossing();
348 
349  // This is questionable but kept for backward compatibility for now
350  float puEvents = truthMu>0 ? truthMu : actualMu;
351 
352  const xAOD::Vertex* primaryvertex = nullptr;
353  unsigned int nVertices = 0;
354  float beamSpotWeight = 1;
355 
356  if(not m_vertexContainerName.key().empty()){
357  ATH_MSG_DEBUG("Getting number of pu interactings per event");
358 
359  ATH_MSG_DEBUG("Filling vertex plots");
361  ATH_CHECK(vertices.isValid());
362 
363  nVertices = not vertices->empty() ? vertices->size() : 0;
364  beamSpotWeight = pie->beamSpotWeight();
365  ATH_MSG_DEBUG("beamSpotWeight is equal to " << beamSpotWeight);
366  if(m_doPRW){
367  float prwWeight = 1;
369  if(readDecorHandle.isAvailable()) prwWeight = readDecorHandle(*pie);
370  ATH_MSG_DEBUG("Applying pileup weight equal to " << prwWeight);
371  beamSpotWeight *= prwWeight;
372  }
373 
374  if (vertices.isValid() and not vertices->empty()) {
375  ATH_MSG_DEBUG("Number of vertices retrieved for this event " << vertices->size());
376  //Find the HS vertex following the user-configured strategy
377  primaryvertex = m_hardScatterSelectionTool->getHardScatter(vertices.get());
378  if (!primaryvertex){
381  ATH_MSG_DEBUG("Failed to find a hard scatter vertex in this event.");
382  }
383  //Filling plots for all reconstructed vertices and the hard-scatter
384  ATH_MSG_DEBUG("Filling vertices info monitoring plots");
385 
386  // Fill vectors of truth HS and PU vertices
387  std::pair<std::vector<const xAOD::TruthVertex*>, std::vector<const xAOD::TruthVertex*>> truthVertices = getTruthVertices(ctx);
388  std::vector<const xAOD::TruthVertex*> truthHSVertices = truthVertices.first;
389  std::vector<const xAOD::TruthVertex*> truthPUVertices = truthVertices.second;
390 
391  // Decorate vertices
393  ATH_CHECK(m_vtxValidTool->matchVertices(*vertices));
394  ATH_MSG_DEBUG("Hard scatter classification type: " << InDetVertexTruthMatchUtils::classifyHardScatter(*vertices) << ", vertex container size = " << vertices->size());
395  }
396  m_monPlots->fill(*vertices, primaryvertex, truthHSVertices, truthPUVertices, actualMu, beamSpotWeight);
397 
398  ATH_MSG_DEBUG("Filling vertex/event info monitoring plots");
399  //Filling vertexing plots for the reconstructed hard-scatter as a function of mu
400  m_monPlots->fill(*vertices, truthMu, actualMu, beamSpotWeight);
401  } else {
402  //FIXME: Does this happen for single particles?
403  ATH_MSG_WARNING("Skipping vertexing plots.");
404  }
405  }
406 
407  if( not m_truthVertexContainerName.key().empty()){
408  // get truth vertex container name - m_truthVertexContainerName
410 
411  //
412  //Get the HS vertex position from the truthVertexContainer
413  //FIXME: Add plots w.r.t truth HS positions (vertexing plots)
414  //
415  const xAOD::TruthVertex* truthVertex = nullptr;
416  if (truthVrt.isValid()) {
417  const auto& stdVertexContainer = truthVrt->stdcont();
418  //First truth particle vertex?
419  auto findVtx = std::find_if(stdVertexContainer.rbegin(), stdVertexContainer.rend(), acceptTruthVertex);
420  truthVertex = (findVtx == stdVertexContainer.rend()) ? nullptr : *findVtx;
421  } else {
422  ATH_MSG_WARNING("Cannot open " << m_truthVertexContainerName.key() << " truth vertex container");
423  }
424  if (not truthVertex) ATH_MSG_INFO ("Truth vertex did not pass cuts");
425  }
426  //
427  //Counters for cutflow
428  //
429  unsigned int nSelectedTruthTracks(0), nSelectedRecoTracks(0), nSelectedMatchedTracks(0), nAssociatedTruth(0), nMissingAssociatedTruth(0), nTruths(0);
430 
431  CutFlow tmp_truth_cutflow( m_truthSelectionTool.get() ? m_truthSelectionTool->nCuts() : 0 );
432 
433  //
434  //Loop over all reconstructed tracks
435  //
436  // If writing ntuples, use a truth-to-track(s) cache to handle truth matching.
437  // Based on the assumption that multiple tracks can (albeit rarely) share the same truth association.
438  std::map<const xAOD::TruthParticle*, std::vector<const xAOD::TrackParticle*>> cacheTruthMatching {};
439  //
440  std::vector<const xAOD::TrackParticle*> selectedTracks {};
441  selectedTracks.reserve(tracks->size());
442  unsigned int nTrackTOT = 0;
443  unsigned int nTrackCentral = 0;
444  unsigned int nTrackPt1GeV = 0;
445  for (const auto *const thisTrack: *tracks) {
446  //FIXME: Why is this w.r.t the primary vertex?
447  const asg::AcceptData& accept = m_trackSelectionTool->accept(*thisTrack, primaryvertex);
448  if (m_useTrackSelection and not accept) continue;
449  fillTrackCutFlow(accept); //?? Is this equal???
450 
451  selectedTracks.push_back(thisTrack);
452  //Number of selected reco tracks
453  nSelectedRecoTracks++;
454 
455  //Fill plots for selected reco tracks, hits / perigee / ???
456  nTrackTOT++;
457  if (thisTrack->pt() >= (1 * Gaudi::Units::GeV))
458  nTrackPt1GeV++;
459  if (std::abs(thisTrack->eta()) < 2.5)
460  nTrackCentral++;
461  m_monPlots->fill(*thisTrack, beamSpotWeight);
462  m_monPlots->fill(*thisTrack, puEvents, nVertices, beamSpotWeight); //fill mu dependent plots
463  const xAOD::TruthParticle* associatedTruth = getAsTruth.getTruth(thisTrack);
464  float prob = getMatchingProbability(*thisTrack);
465 
466  // This is where the Fake, and Really Fake fillers need to go. Where would the really really fakes go?
467  if (associatedTruth) {
468  nAssociatedTruth++;
469 
470  // if there is associated truth also a truth selection tool was retrieved.
472  if (m_truthSelectionTool) {
473  //FIXME: What is this for???
474  tmp_truth_cutflow.update( passed.missingCuts() );
475  }
476 
477  if ((not std::isnan(prob)) and (prob > m_lowProb) and passed and (not m_usingSpecialPileupSwitch or isSelectedByPileupSwitch(*associatedTruth)) ) {
478  nSelectedMatchedTracks++;
479  bool truthIsFromB = false;
480  if ( m_doTruthOriginPlots and m_trackTruthOriginTool->isFrom(associatedTruth, 5) ) {
481  truthIsFromB = true;
482  }
483  m_monPlots->fill(*thisTrack, *associatedTruth, truthIsFromB, puEvents, beamSpotWeight); // Make plots requiring matched truth
484  }
485  }
486 
487  const bool isAssociatedTruth = associatedTruth != nullptr;
488  const bool isFake = not std::isnan(prob) ? (prob < m_lowProb) : true;
489 
490  if(!isAssociatedTruth) nMissingAssociatedTruth++;
491  m_monPlots->fillFakeRate(*thisTrack, isFake, isAssociatedTruth, puEvents, beamSpotWeight);
492 
494  // Decorate track particle with extra flags
495  decorateTrackParticle(*thisTrack, accept);
496 
497  if (isAssociatedTruth) {
498  // Decorate truth particle with extra flags
499  decorateTruthParticle(*associatedTruth, m_truthSelectionTool->accept(associatedTruth));
500 
501  // Cache truth-to-track associations
502  auto cachedAssoc = cacheTruthMatching.find(associatedTruth);
503  // Check if truth particle already present in cache
504  if (cachedAssoc == cacheTruthMatching.end()) {
505  // If not yet present, add truth-to-track association in cache
506  cacheTruthMatching[associatedTruth] = {thisTrack};
507  }
508  else {
509  // If already present, cache additional track associations (here multiple track particle can be linked to the same truth particle)
510  cachedAssoc->second.push_back(thisTrack);
511  }
512  }
513  else if(m_fillTruthToRecoNtuple){
514  // Fill track only entries with dummy truth values
515  m_monPlots->fillNtuple(*thisTrack, primaryvertex);
516  }
517  }
518  }
520  // Now fill all truth-to-track associations
521  // Involves some double-filling of truth particles in cases where multiple tracks share the same truth association,
522  // these duplicates can be filtered in the ntuple by selecting only the 'best matched' truth-associated track particles.
523  for (auto& cachedAssoc: cacheTruthMatching) {
524  const xAOD::TruthParticle* thisTruth = cachedAssoc.first;
525 
526  // Decorate that this truth particle is being filled to prevent double counting in truth particle loop
527  m_dec_hasTruthFilled(*thisTruth) = true;
528 
529  // Sort all associated tracks by truth match probability
530  std::sort(cachedAssoc.second.begin(), cachedAssoc.second.end(),
531  [](const xAOD::TrackParticle* t1, const xAOD::TrackParticle* t2) { return getMatchingProbability(*t1) > getMatchingProbability(*t2); }
532  );
533 
535  // Fill all tracks associated to to this truth particle, also recording 'truth match ranking' as index in probability-sorted vector of matched tracks
536  for (int itrack = 0; itrack < (int) cachedAssoc.second.size(); itrack++) {
537  const xAOD::TrackParticle* thisTrack = cachedAssoc.second[itrack];
538 
539  // Fill track entries with truth association
540  m_monPlots->fillNtuple(*thisTrack, *thisTruth, primaryvertex, itrack);
541  }
542  }
543  }
544  }
545 
546  m_monPlots->fill(nTrackTOT, nTrackCentral, nTrackPt1GeV, truthMu, actualMu, nVertices, beamSpotWeight);
547 
548  //FIXME: I don't get why... this is here
549  if (m_truthSelectionTool.get()) {
550  ATH_MSG_DEBUG( CutFlow(tmp_truth_cutflow).report(m_truthSelectionTool->names()) );
551  std::lock_guard<std::mutex> lock(m_mutex);
552  m_truthCutFlow.merge(std::move(tmp_truth_cutflow));
553  }
554 
555  //
556  //TruthParticle loop to fill efficiencies
557  //
558  for (int itruth = 0; itruth < (int) truthParticlesVec.size(); itruth++) { // Outer loop over all truth particles
559  nTruths++;
560  const xAOD::TruthParticle* thisTruth = truthParticlesVec[itruth];
561 
562  // if the vector of truth particles is not empty also a truthSelectionTool was retrieved
563  const IAthSelectionTool::CutResult accept = m_truthSelectionTool->accept(thisTruth);
564  if (accept) {
565  ++nSelectedTruthTracks; // total number of truth which pass cuts per event
566  bool isEfficient(false); // weight for the trackeff histos
567  m_monPlots->fill(*thisTruth, beamSpotWeight); // This is filling truth-only plots
568 
569  if(m_doDuplicatePlots){
570  auto cachedAssoc = cacheTruthMatching.find(thisTruth);
571  // Check if truth particle already present in cache
572  if (cachedAssoc == cacheTruthMatching.end()) {
573  // If not yet present, then no track associated
574  cacheTruthMatching[thisTruth] = {};
575  }
576  m_monPlots->fillDuplicate(*thisTruth, cacheTruthMatching[thisTruth], beamSpotWeight);
577  }
578 
579  //
580  //Loop over reco tracks to find the match
581  //
582  const xAOD::TrackParticle* matchedTrack = nullptr;
583  for (const auto& thisTrack: selectedTracks) { // Inner loop over selected track particleis
584  const xAOD::TruthParticle* associatedTruth = getAsTruth.getTruth(thisTrack);
585  if (associatedTruth && associatedTruth == thisTruth) {
586  float prob = getMatchingProbability(*thisTrack);
587  if (not std::isnan(prob) && prob > m_lowProb) {
588  isEfficient = true;
589  matchedTrack = thisTrack;
590  break;
591  }
592  }
593  }
594  if (!thisTruth){
595  ATH_MSG_ERROR("An error occurred: Truth particle for tracking efficiency calculation is a nullptr");
596  }
597  else if (isEfficient && !matchedTrack){
598  ATH_MSG_ERROR("Something went wrong - we log a truth particle as reconstructed, but the reco track is a nullptr! Bailing out... ");
599  }
600  else{
601  ATH_MSG_DEBUG("Filling efficiency plots info monitoring plots");
602  m_monPlots->fillEfficiency(*thisTruth, matchedTrack, isEfficient, truthMu, actualMu, beamSpotWeight);
604  ATH_MSG_DEBUG("Filling technical efficiency plots info monitoring plots");
605  static const SG::ConstAccessor< float > nSilHitsAcc("nSilHits");
606  if (nSilHitsAcc.isAvailable(*thisTruth)) {
607  if (nSilHitsAcc(*thisTruth) >= m_minHits.value().at(getIndexByEta(*thisTruth))){
608  m_monPlots->fillTechnicalEfficiency(*thisTruth, isEfficient,
609  truthMu, actualMu, beamSpotWeight);
610  }
611  } else {
612  ATH_MSG_DEBUG("Cannot fill technical efficiency. Missing si hit information for truth particle.");
613  }
614  }
615  }
616  }
617 
619  // Skip if already filled in track loop
620  if (hasTruthFilled(*thisTruth)) continue;
621 
622  // Decorate truth particle with extra flags
623  decorateTruthParticle(*thisTruth, accept);
624 
625  // Fill truth only entries with dummy track values
626  m_monPlots->fillNtuple(*thisTruth);
627  }
628  }
629 
630  if (nSelectedRecoTracks == nMissingAssociatedTruth) {
631  if (not m_truthParticleName.key().empty()) {
632  ATH_MSG_DEBUG("NO TRACKS had associated truth.");
633  }
634  } else {
635  ATH_MSG_DEBUG(nAssociatedTruth << " tracks out of " << tracks->size() << " had associated truth.");
636  }
637 
638  m_monPlots->fillCounter(nSelectedRecoTracks, InDetPerfPlot_nTracks::SELECTEDRECO, beamSpotWeight);
639  m_monPlots->fillCounter(tracks->size(), InDetPerfPlot_nTracks::ALLRECO, beamSpotWeight);
640  m_monPlots->fillCounter(nSelectedTruthTracks, InDetPerfPlot_nTracks::SELECTEDTRUTH, beamSpotWeight);
641  m_monPlots->fillCounter(nTruths, InDetPerfPlot_nTracks::ALLTRUTH, beamSpotWeight);
642  m_monPlots->fillCounter(nAssociatedTruth, InDetPerfPlot_nTracks::ALLASSOCIATEDTRUTH, beamSpotWeight);
643  m_monPlots->fillCounter(nSelectedMatchedTracks, InDetPerfPlot_nTracks::MATCHEDRECO, beamSpotWeight);
644 
645  // Tracking In Dense Environment
646  if (m_doTrackInJetPlots) {
648  getAsTruth,
649  truthParticlesVec,
650  *tracks,
651  primaryvertex,
652  beamSpotWeight) );
653  }
654  return StatusCode::SUCCESS;
655 }
656 
658  // Decorate outcome of track selection
660 }
661 
663  // Decorate outcome of truth selection
665 
666  // Decorate if selected by pileup switch
668 }
669 
671  if (!m_acc_hasTruthFilled.isAvailable(truth)) {
672  ATH_MSG_DEBUG("Truth particle not yet filled in ntuple");
673  return false;
674  }
675  return m_acc_hasTruthFilled(truth);
676 }
677 
679  if (!m_acc_selectedByPileupSwitch.isAvailable(truth)) {
680  ATH_MSG_DEBUG("Selected by pileup switch decoration requested from a truth particle but not available");
681  return false;
682  }
683  return m_acc_selectedByPileupSwitch(truth);
684 }
685 
686 void InDetPhysValMonitoringTool::markSelectedByPileupSwitch(const std::vector<const xAOD::TruthParticle*> & truthParticles) const{
687  for (const auto& thisTruth: truthParticles) {
688  m_dec_selectedByPileupSwitch(*thisTruth) = true;
689  }
690 }
691 
694  ATH_MSG_INFO("Booking hists " << name() << "with detailed level: " << m_detailLevel);
695  m_monPlots->initialize();
696  std::vector<HistData> hists = m_monPlots->retrieveBookedHistograms();
697  for (const auto& hist : hists) {
698  ATH_CHECK(regHist(hist.first, hist.second, all)); // ??
699  }
700  // do the same for Efficiencies, but there's a twist:
701  std::vector<EfficiencyData> effs = m_monPlots->retrieveBookedEfficiencies();
702  for (auto& eff : effs) {
703  // reg**** in the monitoring baseclass doesnt have a TEff version, but TGraph *
704  // pointers just get passed through, so we use that method after an ugly cast
705  ATH_CHECK(regGraph(reinterpret_cast<TGraph*>(eff.first), eff.second, all)); // ??
706  }
707  // register trees for ntuple writing
709  std::vector<TreeData> trees = m_monPlots->retrieveBookedTrees();
710  for (auto& t : trees) {
711  ATH_CHECK(regTree(t.first, t.second, all));
712  }
713  }
714 
715  return StatusCode::SUCCESS;
716 }
717 
720  ATH_MSG_INFO("Finalising hists " << name() << "...");
721  //TODO: ADD Printouts for Truth??
722  if (m_useTrackSelection) {
723  ATH_MSG_INFO("");
724  ATH_MSG_INFO("Now Cutflow for track cuts:");
725  ATH_MSG_INFO("");
726  for (int i = 0; i < (int) m_trackCutflow.size(); ++i) {
727  ATH_MSG_INFO("number after " << m_trackCutflowNames[i] << ": " << m_trackCutflow[i]);
728  }
729  }
730 
731  ATH_MSG_INFO("");
732  ATH_MSG_INFO("Cutflow for truth tracks:");
733  if (m_truthSelectionTool.get()) {
734  ATH_MSG_INFO("Truth selection report: " << m_truthCutFlow.report( m_truthSelectionTool->names()) );
735  }
736  if (endOfRunFlag()) {
737  m_monPlots->finalize();
738  }
739  ATH_MSG_INFO("Successfully finalized hists");
740  return StatusCode::SUCCESS;
741 }
742 
743 const std::vector<const xAOD::TruthParticle*>
744 InDetPhysValMonitoringTool::getTruthParticles(const EventContext& ctx) const {
745 
746  std::vector<const xAOD::TruthParticle*> tempVec {};
747 
748  if (m_pileupSwitch == "All") {
749  if (m_truthParticleName.key().empty()) {
750  return tempVec;
751  }
753  if (not truthParticleContainer.isValid()) {
754  return tempVec;
755  }
756  tempVec.insert(tempVec.begin(), truthParticleContainer->begin(), truthParticleContainer->end());
757  } else {
758  if (m_pileupSwitch == "HardScatter") {
759  // get truthevent container to separate out pileup and hardscatter truth particles
760  if (not m_truthEventName.key().empty()) {
762  const xAOD::TruthEvent* event = (truthEventContainer.isValid()) ? truthEventContainer->at(0) : nullptr;
763  if (not event) {
764  return tempVec;
765  }
766  const auto& links = event->truthParticleLinks();
767  tempVec.reserve(event->nTruthParticles());
768  for (const auto& link : links) {
769  if (link.isValid()){
770  tempVec.push_back(*link);
771  }
772  }
773  }
774  } else if (m_pileupSwitch == "PileUp") {
775  if (not m_truthPileUpEventName.key().empty()) {
776  ATH_MSG_VERBOSE("getting TruthPileupEvents container");
777  // get truth particles from all pileup events
779  if (truthPileupEventContainer.isValid()) {
780  const unsigned int nPileup = truthPileupEventContainer->size();
781  tempVec.reserve(nPileup * 200); // quick initial guess, will still save some time
782  for (unsigned int i(0); i != nPileup; ++i) {
783  const auto *eventPileup = truthPileupEventContainer->at(i);
784  // get truth particles from each pileup event
785  int ntruth = eventPileup->nTruthParticles();
786  ATH_MSG_VERBOSE("Adding " << ntruth << " truth particles from TruthPileupEvents container");
787  const auto& links = eventPileup->truthParticleLinks();
788  for (const auto& link : links) {
789  if (link.isValid()){
790  tempVec.push_back(*link);
791  }
792  }
793  }
794  } else {
795  ATH_MSG_ERROR("no entries in TruthPileupEvents container!");
796  }
797  }
798  } else {
799  ATH_MSG_ERROR("bad value for PileUpSwitch");
800  }
801  }
802  return tempVec;
803 }
804 
805 std::pair<const std::vector<const xAOD::TruthVertex*>, const std::vector<const xAOD::TruthVertex*>>
806 InDetPhysValMonitoringTool::getTruthVertices(const EventContext& ctx) const {
807 
808  std::vector<const xAOD::TruthVertex*> truthHSVertices = {};
809  truthHSVertices.reserve(5);
810  std::vector<const xAOD::TruthVertex*> truthPUVertices = {};
811  truthPUVertices.reserve(100);
812  const xAOD::TruthVertex* truthVtx = nullptr;
813 
814  bool doHS = false;
815  bool doPU = false;
816  if (m_pileupSwitch == "All") {
817  doHS = true;
818  doPU = true;
819  }
820  else if (m_pileupSwitch == "HardScatter") {
821  doHS = true;
822  }
823  else if (m_pileupSwitch == "PileUp") {
824  doPU = true;
825  }
826  else {
827  ATH_MSG_ERROR("Bad value for PileUpSwitch: " << m_pileupSwitch);
828  }
829 
830  if (doHS) {
831  if (not m_truthEventName.key().empty()) {
832  ATH_MSG_VERBOSE("Getting HS TruthEvents container.");
834  if (truthEventContainer.isValid()) {
835  for (const auto *const evt : *truthEventContainer) {
836  truthVtx = evt->signalProcessVertex();
837  if (truthVtx) {
838  truthHSVertices.push_back(truthVtx);
839  }
840  }
841  }
842  else {
843  ATH_MSG_ERROR("No entries in TruthEvents container!");
844  }
845  }
846  }
847 
848  if (doPU) {
849  if (not m_truthPileUpEventName.key().empty()) {
850  ATH_MSG_VERBOSE("Getting PU TruthEvents container.");
852  if (truthPileupEventContainer.isValid()) {
853  for (const auto *const evt : *truthPileupEventContainer) {
854  // Get the PU vertex
855  // In all cases tested i_vtx=2 for PU
856  // but better to keep something generic
857  truthVtx = nullptr;
858  size_t i_vtx = 0; size_t n_vtx = evt->nTruthVertices();
859  while(!truthVtx && i_vtx<n_vtx){
860  truthVtx = evt->truthVertex(i_vtx);
861  i_vtx++;
862  }
863 
864  if (truthVtx) {
865  truthPUVertices.push_back(truthVtx);
866  }
867  }
868  }
869  else {
870  ATH_MSG_DEBUG("No entries in TruthPileupEvents container");
871  }
872  }
873  }
874 
875  return std::make_pair<const std::vector<const xAOD::TruthVertex*>, const std::vector<const xAOD::TruthVertex*>>((const std::vector<const xAOD::TruthVertex*>)truthHSVertices, (const std::vector<const xAOD::TruthVertex*>)truthPUVertices);
876 
877 }
878 
879 void
882 }
883 
884 void
886  std::vector<int>& cutFlow) {
887  // initialise cutflows
888  if (cutFlow.empty()) {
889  names.emplace_back("preCut");
890  cutFlow.push_back(0);
891  for (unsigned int i = 0; i != accept.getNCuts(); ++i) {
892  cutFlow.push_back(0);
893  names.push_back((std::string) accept.getCutName(i));
894  }
895  }
896  // get cutflow
897  cutFlow[0] += 1;
898  bool cutPositive = true;
899  for (unsigned int i = 0; i != (accept.getNCuts() + 1); ++i) {
900  if (!cutPositive) {
901  continue;
902  }
903  if (accept.getCutResult(i)) {
904  cutFlow[i + 1] += 1;
905  } else {
906  cutPositive = false;
907  }
908  }
909  }
910 
912  double absEta = std::abs(truth.eta());
913  if (absEta > m_etaBins.value().back() || absEta < m_etaBins.value().front()) {
914  absEta = std::clamp(absEta, m_etaBins.value().front(), m_etaBins.value().back());
915  ATH_MSG_INFO("Requesting cut value outside of configured eta range: clamping eta = "
916  << std::abs(truth.eta()) << " to eta= " << absEta);
917  } else
918  absEta = std::clamp(absEta, m_etaBins.value().front(), m_etaBins.value().back());
919  const auto pVal = std::lower_bound(m_etaBins.value().begin(), m_etaBins.value().end(), absEta);
920  const int bin = std::distance(m_etaBins.value().begin(), pVal) - 1;
921  ATH_MSG_DEBUG("Checking (abs(eta)/bin) = (" << absEta << "," << bin << ")");
922  return bin;
923 }
924 
926  IDPVM::CachedGetAssocTruth& getAsTruth,
927  const std::vector<const xAOD::TruthParticle*>& truthParticles,
928  const xAOD::TrackParticleContainer& tracks,
929  const xAOD::Vertex* primaryvertex,
930  float beamSpotWeight) {
931  // Define accessors
932  static const SG::ConstAccessor<std::vector<ElementLink<xAOD::IParticleContainer> > > ghosttruth("GhostTruth");
933  static const SG::ConstAccessor<int> btagLabel("HadronConeExclTruthLabelID");
934 
935  if (truthParticles.empty()) {
936  ATH_MSG_WARNING("No entries in TruthParticles truth particle container. Skipping jet plots.");
937  return StatusCode::SUCCESS;
938  }
939 
941  if (not jetHandle.isValid()) {
942  ATH_MSG_WARNING("Cannot open jet container " << m_jetContainerName.key() << ". Skipping jet plots.");
943  return StatusCode::SUCCESS;
944  }
945  const xAOD::JetContainer* jets = jetHandle.cptr();
946 
947  // loop on jets
948  for (const xAOD::Jet *const thisJet: *jets) {
949  // pass jet cuts
950  if (not passJetCuts(*thisJet)) continue;
951  // check if b-jet
952  bool isBjet = false;
953  if (not btagLabel.isAvailable(*thisJet)){
954  ATH_MSG_WARNING("Failed to extract b-tag truth label from jet");
955  } else {
956  isBjet = (btagLabel(*thisJet) == 5);
957  }
958 
959  // Retrieve associated ghost truth particles
960  if(not ghosttruth.isAvailable(*thisJet)) {
961  ATH_MSG_WARNING("Failed to extract ghost truth particles from jet");
962  } else {
963  for(const ElementLink<xAOD::IParticleContainer>& el : ghosttruth(*thisJet)) {
964  if (not el.isValid()) continue;
965 
966  const xAOD::TruthParticle *truth = static_cast<const xAOD::TruthParticle*>(*el);
967  // Check delta R between track and jet axis
968  if (thisJet->p4().DeltaR(truth->p4()) > m_maxTrkJetDR) {
969  continue;
970  }
971  // Apply truth selection cuts
973  if(!accept) continue;
974 
975  bool isEfficient(false);
976 
977  for (const auto *thisTrack: tracks) {
978  if (m_useTrackSelection and not (m_trackSelectionTool->accept(*thisTrack, primaryvertex))) {
979  continue;
980  }
981 
982  const xAOD::TruthParticle* associatedTruth = getAsTruth.getTruth(thisTrack);
983  if (associatedTruth and associatedTruth == truth) {
984  float prob = getMatchingProbability(*thisTrack);
985  if (not std::isnan(prob) && prob > m_lowProb) {
986  isEfficient = true;
987  break;
988  }
989  }
990  }
991 
992  bool truthIsFromB = false;
993  if ( m_doTruthOriginPlots and m_trackTruthOriginTool->isFrom(truth, 5) ) {
994  truthIsFromB = true;
995  }
996  m_monPlots->fillEfficiency(*truth, *thisJet, isEfficient, isBjet, truthIsFromB, beamSpotWeight);
997  }
998  } // ghost truth
999 
1000  // loop on tracks
1001  for (const xAOD::TrackParticle *thisTrack: tracks) {
1002  if (m_useTrackSelection and not (m_trackSelectionTool->accept(*thisTrack, primaryvertex))) {
1003  continue;
1004  }
1005 
1006  if (thisJet->p4().DeltaR(thisTrack->p4()) > m_maxTrkJetDR) {
1007  continue;
1008  }
1009 
1010  float prob = getMatchingProbability(*thisTrack);
1011  if(std::isnan(prob)) prob = 0.0;
1012 
1013  const xAOD::TruthParticle* associatedTruth = getAsTruth.getTruth(thisTrack);
1014  const bool unlinked = (associatedTruth==nullptr);
1015  const bool isFake = (associatedTruth && prob < m_lowProb);
1016  bool truthIsFromB = false;
1017  if ( m_doTruthOriginPlots and m_trackTruthOriginTool->isFrom(associatedTruth, 5) ) {
1018  truthIsFromB = true;
1019  }
1020  m_monPlots->fill(*thisTrack, *thisJet, isBjet, isFake, unlinked, truthIsFromB, beamSpotWeight);
1021  if (associatedTruth){
1022  m_monPlots->fillFakeRate(*thisTrack, *thisJet, isFake, isBjet, truthIsFromB, beamSpotWeight);
1023  }
1024  }
1025 
1026  } // loop on jets
1027 
1028  return StatusCode::SUCCESS;
1029 }
1030 
1031 bool
1033  const float jetPt = jet.pt();
1034  const float jetEta = std::abs(jet.eta());
1035 
1036  if (jetEta < m_jetAbsEtaMin) return false;
1037  if (jetEta > m_jetAbsEtaMax) return false;
1038  if (jetPt < m_jetPtMin) return false;
1039  if (jetPt > m_jetPtMax) return false;
1040  return true;
1041 }
InDetPhysValMonitoringTool::m_jetPtMax
FloatProperty m_jetPtMax
Definition: InDetPhysValMonitoringTool.h:201
InDetPhysValMonitoringTool::m_dec_passedTruthSelection
SG::AuxElement::Decorator< bool > m_dec_passedTruthSelection
Definition: InDetPhysValMonitoringTool.h:107
InDetPhysValMonitoringTool::decorateTrackParticle
void decorateTrackParticle(const xAOD::TrackParticle &track, const asg::AcceptData &passed) const
Definition: InDetPhysValMonitoringTool.cxx:657
InDetPhysValMonitoringTool::getIndexByEta
int getIndexByEta(const xAOD::TruthParticle &truth) const
Utility function for evaluation of technical efficiency.
Definition: InDetPhysValMonitoringTool.cxx:911
InDetPhysValMonitoringTool::m_fillTechnicalEfficiency
BooleanProperty m_fillTechnicalEfficiency
Definition: InDetPhysValMonitoringTool.h:186
InDetPhysValMonitoringTool::m_jetAbsEtaMin
FloatProperty m_jetAbsEtaMin
Definition: InDetPhysValMonitoringTool.h:198
InDetPhysValMonitoringTool::m_pileupSwitch
StringProperty m_pileupSwitch
Definition: InDetPhysValMonitoringTool.h:192
InDetPhysValMonitoringTool::m_usingSpecialPileupSwitch
bool m_usingSpecialPileupSwitch
Definition: InDetPhysValMonitoringTool.h:222
GeV
#define GeV
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx:17
InDetPhysValMonitoringTool::m_grlTool
ToolHandle< IGoodRunsListSelectionTool > m_grlTool
Definition: InDetPhysValMonitoringTool.h:210
InDetPhysValMonitoringTool::m_hardScatterSelectionTool
ToolHandle< InDet::IInDetHardScatterSelectionTool > m_hardScatterSelectionTool
Definition: InDetPhysValMonitoringTool.h:209
InDetPhysValMonitoringTool::m_trackSelectionTool
ToolHandle< InDet::IInDetTrackSelectionTool > m_trackSelectionTool
Definition: InDetPhysValMonitoringTool.h:205
InDetPhysValMonitoringTool::m_monPlots
std::unique_ptr< InDetRttPlots > m_monPlots
histograms
Definition: InDetPhysValMonitoringTool.h:169
get_generator_info.result
result
Definition: get_generator_info.py:21
NSWL1::nVertices
int nVertices(const Polygon &p)
Definition: GeoUtils.cxx:35
InDetPhysValMonitoringTool::m_minHits
IntegerArrayProperty m_minHits
Definition: InDetPhysValMonitoringTool.h:196
InDetPhysValMonitoringTool::bookHistograms
virtual StatusCode bookHistograms()
An inheriting class should either override this function or bookHists().
Definition: InDetPhysValMonitoringTool.cxx:693
InDetRttPlotConfig::doResolutionsPerAuthor
bool doResolutionsPerAuthor
Definition: InDetRttPlots.h:104
TrigCompositeUtils::passed
bool passed(DecisionID id, const DecisionIDContainer &idSet)
checks if required decision ID is in the set of IDs in the container
Definition: TrigCompositeUtilsRoot.cxx:117
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
SG::ReadHandle::cptr
const_pointer_type cptr()
Dereference the pointer.
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
InDetSecVtxTruthMatchUtils::isFake
bool isFake(int matchInfo)
Definition: InDetSecVtxTruthMatchTool.h:60
InDetRttPlotConfig::doTrkInJetPlots_matched_bjets
bool doTrkInJetPlots_matched_bjets
Definition: InDetRttPlots.h:93
ManagedMonitorToolBase
Provides functionality for users to implement and save histograms, ntuples, and summary data,...
Definition: ManagedMonitorToolBase.h:73
InDetRttPlotConfig::doResolutionPlotSecd
bool doResolutionPlotSecd
Definition: InDetRttPlots.h:77
IAthSelectionTool::CutResult
Definition: IAthSelectionTool.h:30
InDetPhysValMonitoringTool::m_useGRL
BooleanProperty m_useGRL
Definition: InDetPhysValMonitoringTool.h:184
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
InDetPhysValMonitoringTool::m_doPRW
BooleanProperty m_doPRW
Definition: InDetPhysValMonitoringTool.h:187
ManagedMonitorToolBase::regTree
virtual StatusCode regTree(TTree *t, const std::string &system, Interval_t interval, MgmtAttr_t histo_mgmt=ATTRIB_MANAGED, const std::string &chain="", const std::string &merge="")
Registers a TTree to be included in the output stream using logical parameters that describe it.
Definition: ManagedMonitorToolBase.cxx:1547
InDetRttPlotConfig::doHitsUnlinkedTracksPlots
bool doHitsUnlinkedTracksPlots
Definition: InDetRttPlots.h:66
InDetPhysValMonitoringTool::m_maxTrkJetDR
FloatProperty m_maxTrkJetDR
Definition: InDetPhysValMonitoringTool.h:189
InDetRttPlotConfig::doHardScatterVertexTruthMatchingPlots
bool doHardScatterVertexTruthMatchingPlots
Definition: InDetRttPlots.h:87
InDetRttPlotConfig::doHardScatterVertexPlots
bool doHardScatterVertexPlots
Definition: InDetRttPlots.h:83
plotmaker.hist
hist
Definition: plotmaker.py:148
IDPVM::CachedGetAssocTruth
Definition: CachedGetAssocTruth.h:21
InDetPhysValMonitoringTool::m_truthParticleName
SG::ReadHandleKey< xAOD::TruthParticleContainer > m_truthParticleName
TruthParticle container's name.
Definition: InDetPhysValMonitoringTool.h:137
CutsMETMaker::accept
StatusCode accept(const xAOD::Muon *mu)
Definition: CutsMETMaker.cxx:18
RTTAlgmain.trees
list trees
Definition: RTTAlgmain.py:40
InDetPhysValMonitoringTool::passJetCuts
bool passJetCuts(const xAOD::Jet &jet) const
Definition: InDetPhysValMonitoringTool.cxx:1032
InDetRttPlotConfig::doNTracks
bool doNTracks
Definition: InDetRttPlots.h:56
ALFA_EventTPCnv_Dict::t1
std::vector< ALFA_RawDataCollection_p1 > t1
Definition: ALFA_EventTPCnvDict.h:43
TruthPileupEvent.h
InDetVertexTruthMatchUtils::classifyHardScatter
HardScatterType classifyHardScatter(const xAOD::VertexContainer &vxContainer)
Definition: InDetVertexTruthMatchUtils.cxx:70
InDetRttPlotConfig::doTrtExtensionPlots
bool doTrtExtensionPlots
Definition: InDetRttPlots.h:60
bin
Definition: BinsDiffFromStripMedian.h:43
checkTP.report
report
Definition: checkTP.py:127
safeDecorator.h
InDetPhysValMonitoringTool::getTruthParticles
const std::vector< const xAOD::TruthParticle * > getTruthParticles(const EventContext &ctx) const
Definition: InDetPhysValMonitoringTool.cxx:744
InDetPhysValMonitoringTool::fillHistograms
virtual StatusCode fillHistograms()
An inheriting class should either override this function or fillHists().
Definition: InDetPhysValMonitoringTool.cxx:300
InDetPhysValMonitoringTool::m_acc_selectedByPileupSwitch
SG::AuxElement::Accessor< bool > m_acc_selectedByPileupSwitch
Definition: InDetPhysValMonitoringTool.h:109
athena.value
value
Definition: athena.py:124
InDetPhysValMonitoringTool::m_useTrackSelection
BooleanProperty m_useTrackSelection
Properties to fine-tune the tool behaviour.
Definition: InDetPhysValMonitoringTool.h:173
InDetPhysValMonitoringTool::m_intTruthDecor
std::vector< SG::ReadDecorHandleKey< xAOD::TruthParticleContainer > > m_intTruthDecor
Definition: InDetPhysValMonitoringTool.h:165
InDetRttPlotConfig::doTrkInJetPlots_unlinked_bjets
bool doTrkInJetPlots_unlinked_bjets
Definition: InDetRttPlots.h:97
ManagedMonitorToolBase::regGraph
virtual StatusCode regGraph(TGraph *g, const std::string &system, Interval_t interval, MgmtAttr_t histo_mgmt=ATTRIB_MANAGED, const std::string &chain="", const std::string &merge="")
Registers a TGraph to be included in the output stream using logical parameters that describe the gra...
Definition: ManagedMonitorToolBase.cxx:1491
LArG4FSStartPointFilter.evt
evt
Definition: LArG4FSStartPointFilter.py:42
SG::ConstAccessor< float >
InDetPhysValMonitoringTool::m_eventInfoContainerName
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfoContainerName
EventInfo container name.
Definition: InDetPhysValMonitoringTool.h:149
InDetRttPlotConfig::doHitEffPlot
bool doHitEffPlot
Definition: InDetRttPlots.h:58
InDetRttPlotConfig::doTrkInJetPlots_truthFromB
bool doTrkInJetPlots_truthFromB
Definition: InDetRttPlots.h:98
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
InDetPerfPlot_nTracks::ALLASSOCIATEDTRUTH
@ ALLASSOCIATEDTRUTH
Definition: InDetPerfPlot_nTracks.h:25
InDetRttPlotConfig::doHitResidualPlot
bool doHitResidualPlot
Definition: InDetRttPlots.h:57
InDetRttPlotConfig::doTrkInJetPlots
bool doTrkInJetPlots
Plots for tracks in jets.
Definition: InDetRttPlots.h:90
InDetPhysValMonitoringTool::m_jetAbsEtaMax
FloatProperty m_jetAbsEtaMax
Definition: InDetPhysValMonitoringTool.h:199
covarianceTool.prob
prob
Definition: covarianceTool.py:678
InDetRttPlotConfig::doTrkInJetPlots_matched
bool doTrkInJetPlots_matched
Definition: InDetRttPlots.h:92
xAOD::EventInfo_v1::IS_SIMULATION
@ IS_SIMULATION
true: simulation, false: data
Definition: EventInfo_v1.h:151
x
#define x
TrackStateValidation.h
InDetPhysValMonitoringTool::m_intJetDecor
std::vector< SG::ReadDecorHandleKey< xAOD::JetContainer > > m_intJetDecor
Definition: InDetPhysValMonitoringTool.h:166
InDetPhysValMonitoringTool::m_truthVertexContainerName
SG::ReadHandleKey< xAOD::TruthVertexContainer > m_truthVertexContainerName
Truth vertex container's name.
Definition: InDetPhysValMonitoringTool.h:145
xAOD::TruthVertex_v1::y
float y() const
Vertex y displacement.
InDetPhysValMonitoringTool::m_jetPtMin
FloatProperty m_jetPtMin
Definition: InDetPhysValMonitoringTool.h:200
InDetPhysValMonitoringTool::m_lowProb
FloatProperty m_lowProb
Definition: InDetPhysValMonitoringTool.h:193
CutFlow::update
void update(bool)
Definition: CutFlow.h:192
InDetRttPlotConfig::doFakesPerAuthor
bool doFakesPerAuthor
Definition: InDetRttPlots.h:102
IDPVM::addReadDecoratorHandleKeys
void addReadDecoratorHandleKeys(T_Parent &parent, const SG::ReadHandleKey< T_Cont > &container_key, const std::string &prefix, const std::vector< std::string > &decor_names, std::vector< SG::ReadDecorHandleKey< T_Cont > > &decor_out)
Definition: safeDecorator.h:145
InDetPhysValMonitoringTool::m_jetContainerName
SG::ReadHandleKey< xAOD::JetContainer > m_jetContainerName
Definition: InDetPhysValMonitoringTool.h:158
InDetPhysValMonitoringTool::m_dec_passedTrackSelection
SG::AuxElement::Decorator< bool > m_dec_passedTrackSelection
Definition: InDetPhysValMonitoringTool.h:108
InDetPhysValMonitoringTool.h
InDetPhysValMonitoringTool::m_truthPileUpEventName
SG::ReadHandleKey< xAOD::TruthPileupEventContainer > m_truthPileUpEventName
Definition: InDetPhysValMonitoringTool.h:155
InDetPhysValMonitoringTool::isSelectedByPileupSwitch
bool isSelectedByPileupSwitch(const xAOD::TruthParticle &truth) const
Definition: InDetPhysValMonitoringTool.cxx:678
InDetVertexTruthMatchUtils.h
jet
Definition: JetCalibTools_PlotJESFactors.cxx:23
InDetPhysValMonitoringTool::markSelectedByPileupSwitch
void markSelectedByPileupSwitch(const std::vector< const xAOD::TruthParticle * > &truthParticles) const
Definition: InDetPhysValMonitoringTool.cxx:686
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
CachedGetAssocTruth.h
SG::ReadDecorHandle
Handle class for reading a decoration on an object.
Definition: StoreGate/StoreGate/ReadDecorHandle.h:94
InDetPhysValMonitoringTool::m_doTruthOriginPlots
BooleanProperty m_doTruthOriginPlots
Definition: InDetPhysValMonitoringTool.h:174
ManagedMonitorToolBase::initialize
virtual StatusCode initialize()
Definition: ManagedMonitorToolBase.cxx:617
InDetRttPlotConfig::doTrkInJetPlots_bjets
bool doTrkInJetPlots_bjets
Definition: InDetRttPlots.h:91
MuonPhysValMonitoring::getMatchingProbability
float getMatchingProbability(const xAOD::TrackParticle &trackParticle)
Definition: MuonPhysValMonitoringTool.cxx:57
InDetPhysValMonitoringTool::m_doTrackInJetPlots
BooleanProperty m_doTrackInJetPlots
Definition: InDetPhysValMonitoringTool.h:177
event
POOL::TEvent event(POOL::TEvent::kClassAccess)
InDetPhysValMonitoringTool::m_trackCutflow
std::vector< int > m_trackCutflow
Definition: InDetPhysValMonitoringTool.h:220
lumiFormat.i
int i
Definition: lumiFormat.py:85
z
#define z
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
SG::ReadHandle::get
const_pointer_type get() const
Dereference the pointer, but don't cache anything.
DMTest::links
links
Definition: CLinks_v1.cxx:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
python.subdetectors.mmg.names
names
Definition: mmg.py:8
InDetRttPlotConfig
helper struct - steer the configuration from the parent tool's side
Definition: InDetRttPlots.h:51
InDetRttPlotConfig::doResolutionPlotPrim_truthFromB
bool doResolutionPlotPrim_truthFromB
Definition: InDetRttPlots.h:76
InDetRttPlots.h
InDetRttPlotConfig::doFakePlots
bool doFakePlots
Fake plots (and unlinked)
Definition: InDetRttPlots.h:63
xAOD::TruthParticle_v1
Class describing a truth particle in the MC record.
Definition: TruthParticle_v1.h:37
InDetPhysValMonitoringTool::initialize
virtual StatusCode initialize()
Definition: InDetPhysValMonitoringTool.cxx:116
InDetPhysValMonitoringTool::procHistograms
virtual StatusCode procHistograms()
An inheriting class should either override this function or finalHists().
Definition: InDetPhysValMonitoringTool.cxx:719
InDetPhysValMonitoringTool::getFilledPlotConfig
InDetRttPlotConfig getFilledPlotConfig() const
Generate an Rtt config struct based on the user-passed properties.
Definition: InDetPhysValMonitoringTool.cxx:171
TrackCollection.h
InDetPhysValMonitoringTool::m_floatTrkDecor
std::vector< SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > > m_floatTrkDecor
Definition: InDetPhysValMonitoringTool.h:162
CutFlow
Definition: CutFlow.h:166
test_pyathena.parent
parent
Definition: test_pyathena.py:15
plotIsoValidation.el
el
Definition: plotIsoValidation.py:197
xAOD::TruthEvent_v1
Class describing a signal truth event in the MC record.
Definition: TruthEvent_v1.h:35
InDetPhysValMonitoringTool::m_onlyFillMatched
BooleanProperty m_onlyFillMatched
Definition: InDetPhysValMonitoringTool.h:182
IDPVM::CachedGetAssocTruth::getTruth
const xAOD::TruthParticle * getTruth(const xAOD::TrackParticle *const trackParticle)
Definition: CachedGetAssocTruth.cxx:22
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
InDetPhysValMonitoringTool::m_truthSelectionTool
ToolHandle< IAthSelectionTool > m_truthSelectionTool
Definition: InDetPhysValMonitoringTool.h:207
MakeTH3DFromTH2Ds.hists
hists
Definition: MakeTH3DFromTH2Ds.py:72
hist_file_dump.f
f
Definition: hist_file_dump.py:135
InDetPhysValMonitoringTool::m_vertexContainerName
SG::ReadHandleKey< xAOD::VertexContainer > m_vertexContainerName
Primary vertex container's name.
Definition: InDetPhysValMonitoringTool.h:141
AthTruthSelectionTool.h
IDPVM::binIndex
unsigned int binIndex(const T &val, const std::vector< T > &partitions)
general utility function to return bin index given a value and the upper endpoints of each bin
Definition: InDetPhysValMonitoringUtilities.h:43
InDetPhysValMonitoringTool::m_useVertexTruthMatchTool
BooleanProperty m_useVertexTruthMatchTool
Definition: InDetPhysValMonitoringTool.h:181
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
InDetPhysValMonitoringTool::m_truthEventName
SG::ReadHandleKey< xAOD::TruthEventContainer > m_truthEventName
Definition: InDetPhysValMonitoringTool.h:152
InDetRttPlotConfig::doTrkInJetPlots_fake_bjets
bool doTrkInJetPlots_fake_bjets
Definition: InDetRttPlots.h:95
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
DeMoScan.partitions
dictionary partitions
Definition: DeMoScan.py:67
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
InDetRttPlotConfig::doEfficienciesPerAuthor
bool doEfficienciesPerAuthor
per author plots
Definition: InDetRttPlots.h:101
inRange
bool inRange(const double *boundaries, const double value, const double tolerance=0.02)
Definition: LArSCIdVsIdTest.cxx:5
InDetRttPlotConfig::doNtupleTruthToReco
bool doNtupleTruthToReco
Ntuple functionality.
Definition: InDetRttPlots.h:107
InDetPhysValMonitoringTool::~InDetPhysValMonitoringTool
virtual ~InDetPhysValMonitoringTool()
Destructor.
InDetPhysValMonitoringTool::InDetPhysValMonitoringTool
InDetPhysValMonitoringTool()
prevent default construction
TruthVertex.h
InDetPhysValMonitoringTool::m_fillTruthToRecoNtuple
BooleanProperty m_fillTruthToRecoNtuple
Definition: InDetPhysValMonitoringTool.h:180
InDetRttPlotConfig::doDuplicatePlots
bool doDuplicatePlots
Definition: InDetRttPlots.h:71
InDetPhysValMonitoringTool::fillCutFlow
static void fillCutFlow(const asg::AcceptData &accept, std::vector< std::string > &names, std::vector< int > &cutFlow)
Definition: InDetPhysValMonitoringTool.cxx:885
xAOD::TruthVertex_v1
Class describing a truth vertex in the MC record.
Definition: TruthVertex_v1.h:37
InDetRttPlotConfig::doHitsMatchedTracksPlots
bool doHitsMatchedTracksPlots
Definition: InDetRttPlots.h:78
InDetRttPlotConfig::doResolutionPlotPrim
bool doResolutionPlotPrim
Resolution and "matched track" plots - filled if both reco and truth exist.
Definition: InDetRttPlots.h:75
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:221
InDetPhysValMonitoringTool::m_weight_pileup_key
SG::ReadDecorHandleKey< xAOD::EventInfo > m_weight_pileup_key
Definition: InDetPhysValMonitoringTool.h:212
plotBeamSpotVxVal.bin
int bin
Definition: plotBeamSpotVxVal.py:83
InDetRttPlotConfig::doVertexTruthMatchingPlots
bool doVertexTruthMatchingPlots
Vertexing plots - truth requirement.
Definition: InDetRttPlots.h:86
InDetPhysValMonitoringTool::m_dirName
StringProperty m_dirName
Definition: InDetPhysValMonitoringTool.h:190
InDetRttPlotConfig::doMissingTruthFakePlots
bool doMissingTruthFakePlots
Definition: InDetRttPlots.h:64
xAOD::TruthParticle_v1::eta
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
Definition: TruthParticle_v1.cxx:174
IDPVM::safelyGetEta
float safelyGetEta(const T &pTrk, const float safePtThreshold=0.1)
Safely get eta.
Definition: InDetPhysValMonitoringUtilities.h:56
InDetRttPlotConfig::doVerticesVsMuPlots
bool doVerticesVsMuPlots
Definition: InDetRttPlots.h:82
InDetPhysValMonitoringTool::fillHistogramsTrackingInDenseEnvironment
StatusCode fillHistogramsTrackingInDenseEnvironment(const EventContext &ctx, IDPVM::CachedGetAssocTruth &getAsTruth, const std::vector< const xAOD::TruthParticle * > &truthParticles, const xAOD::TrackParticleContainer &tracks, const xAOD::Vertex *primaryvertex, float beamSpotWeight)
Definition: InDetPhysValMonitoringTool.cxx:925
InDetPhysValMonitoringTool::decorateTruthParticle
void decorateTruthParticle(const xAOD::TruthParticle &truth, const IAthSelectionTool::CutResult &passed) const
Definition: InDetPhysValMonitoringTool.cxx:662
TrackStateValidationContainer.h
xAOD::TruthVertex_v1::x
float x() const
Vertex x displacement.
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
InDetPhysValMonitoringTool::m_trackTruthOriginTool
ToolHandle< InDet::IInDetTrackTruthOriginTool > m_trackTruthOriginTool
Definition: InDetPhysValMonitoringTool.h:208
TrackParticle.h
DataVector::stdcont
const PtrVector & stdcont() const
Return the underlying std::vector of the container.
InDetRttPlotConfig::doHitsRecoTracksPlots
bool doHitsRecoTracksPlots
Definition: InDetRttPlots.h:59
xAOD::Jet_v1
Class describing a jet.
Definition: Jet_v1.h:57
ALFA_EventTPCnv_Dict::t2
std::vector< ALFA_RawDataContainer_p1 > t2
Definition: ALFA_EventTPCnvDict.h:44
InDetPhysValMonitoringTool::m_intTrkDecor
std::vector< SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > > m_intTrkDecor
Definition: InDetPhysValMonitoringTool.h:163
InDetPhysValMonitoringTool::m_dec_hasTruthFilled
SG::AuxElement::Decorator< bool > m_dec_hasTruthFilled
Definition: InDetPhysValMonitoringTool.h:106
InDetRttPlotConfig::doEffPlots
bool doEffPlots
Efficiency and duplicate plots - require truth, optionally matching reco
Definition: InDetRttPlots.h:70
y
#define y
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
InDetPerfPlot_nTracks::MATCHEDRECO
@ MATCHEDRECO
Definition: InDetPerfPlot_nTracks.h:25
InDetPhysValMonitoringTool::fillTrackCutFlow
void fillTrackCutFlow(const asg::AcceptData &accept)
Definition: InDetPhysValMonitoringTool.cxx:880
InDetRttPlotConfig::doTrkInJetPlots_fake
bool doTrkInJetPlots_fake
Definition: InDetRttPlots.h:94
InDetRttPlotConfig::detailLevel
int detailLevel
detail level (kept for compatibility)
Definition: InDetRttPlots.h:110
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
InDetPhysValMonitoringTool::m_trkParticleName
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_trkParticleName
TrackParticle container's name.
Definition: InDetPhysValMonitoringTool.h:133
ManagedMonitorToolBase::endOfRunFlag
bool endOfRunFlag() const
Definition: ManagedMonitorToolBase.h:797
InDetPhysValMonitoringTool::m_doHitLevelPlots
BooleanProperty m_doHitLevelPlots
Definition: InDetPhysValMonitoringTool.h:178
InDetRttPlotConfig::doTrackParameters
bool doTrackParameters
Plots for (selected) tracks, not necessarily truth matched.
Definition: InDetRttPlots.h:55
Pythia8_RapidityOrderMPI.val
val
Definition: Pythia8_RapidityOrderMPI.py:14
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
xAOD::TruthVertex_v1::z
float z() const
Vertex longitudinal distance along the beam line form the origin.
InDetPhysValMonitoringTool::m_vtxValidTool
ToolHandle< IInDetVertexTruthMatchTool > m_vtxValidTool
Definition: InDetPhysValMonitoringTool.h:206
ManagedMonitorToolBase::all
@ all
Definition: ManagedMonitorToolBase.h:115
InDetPhysValMonitoringTool::m_etaBins
DoubleArrayProperty m_etaBins
Definition: InDetPhysValMonitoringTool.h:195
InDetPhysHitDecoratorAlg.h
InDetPhysValMonitoringTool::getTruthVertices
std::pair< const std::vector< const xAOD::TruthVertex * >, const std::vector< const xAOD::TruthVertex * > > getTruthVertices(const EventContext &ctx) const
Definition: InDetPhysValMonitoringTool.cxx:806
InDetPhysValMonitoringTool::m_folder
StringProperty m_folder
Definition: InDetPhysValMonitoringTool.h:191
TauGNNUtils::Variables::absEta
bool absEta(const xAOD::TauJet &tau, double &out)
Definition: TauGNNUtils.cxx:234
InDetPhysValMonitoringTool::m_doBjetPlots
BooleanProperty m_doBjetPlots
Definition: InDetPhysValMonitoringTool.h:179
InDetPhysValMonitoringTool::m_floatTruthDecor
std::vector< SG::ReadDecorHandleKey< xAOD::TruthParticleContainer > > m_floatTruthDecor
Definition: InDetPhysValMonitoringTool.h:164
SG::ConstAccessor::isAvailable
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
InDetPhysValMonitoringTool::m_doTRTExtensionPlots
BooleanProperty m_doTRTExtensionPlots
Definition: InDetPhysValMonitoringTool.h:183
TruthPileupEventAuxContainer.h
defineDB.jets
list jets
Definition: JetTagCalibration/share/defineDB.py:24
dqt_zlumi_alleff_HIST.eff
int eff
Definition: dqt_zlumi_alleff_HIST.py:113
ManagedMonitorToolBase::m_detailLevel
unsigned int m_detailLevel
Definition: ManagedMonitorToolBase.h:836
InDetPhysValMonitoringTool::m_mutex
std::mutex m_mutex
Definition: InDetPhysValMonitoringTool.h:214
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
InDetPerfPlot_nTracks.h
DataVector::at
const T * at(size_type n) const
Access an element, as an rvalue.
xAOD::TruthParticle_v1::p4
virtual FourMom_t p4() const override final
The full 4-momentum of the particle.
Definition: TruthParticle_v1.cxx:196
ConstAccessor.h
Helper class to provide constant type-safe access to aux data.
InDetPerfPlot_nTracks::SELECTEDRECO
@ SELECTEDRECO
Definition: InDetPerfPlot_nTracks.h:25
TruthParticle.h
ITrackSelectorTool.h
asg::AcceptData
Definition: AcceptData.h:30
InDetPhysValMonitoringTool::hasTruthFilled
bool hasTruthFilled(const xAOD::TruthParticle &truth) const
Definition: InDetPhysValMonitoringTool.cxx:670
InDetPhysValMonitoringTool::m_doIDTIDEPlots
BooleanProperty m_doIDTIDEPlots
Definition: InDetPhysValMonitoringTool.h:185
xAOD::bool
setBGCode setTAP setLVL2ErrorBits bool
Definition: TrigDecision_v1.cxx:60
SG::ReadDecorHandle::isAvailable
bool isAvailable()
Test to see if this variable exists in the store, for the referenced object.
Amg::distance
float distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
calculates the distance between two point in 3D space
Definition: GeoPrimitivesHelpers.h:54
InDetPhysValMonitoringTool::m_trackCutflowNames
std::vector< std::string > m_trackCutflowNames
Definition: InDetPhysValMonitoringTool.h:219
InDetRttPlotConfig::doVertexPlots
bool doVertexPlots
Vertexing plots - no truth requirement.
Definition: InDetRttPlots.h:81
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
xAOD::EventInfo_v1::beamSpotWeight
float beamSpotWeight() const
Weight for beam spot size reweighting.
Definition: EventInfo_v1.cxx:970
ManagedMonitorToolBase::regHist
virtual StatusCode regHist(TH1 *h, const std::string &system, Interval_t interval, MgmtAttr_t histo_mgmt=ATTRIB_MANAGED, const std::string &chain="", const std::string &merge="")
Registers a TH1 (including TH2, TH3, and TProfile) to be included in the output stream using logical ...
Definition: ManagedMonitorToolBase.cxx:1346
InDetPerfPlot_nTracks::ALLRECO
@ ALLRECO
Definition: InDetPerfPlot_nTracks.h:25
DataVector::empty
bool empty() const noexcept
Returns true if the collection is empty.
InDetPhysValMonitoringTool::m_doPerAuthorPlots
BooleanProperty m_doPerAuthorPlots
Definition: InDetPhysValMonitoringTool.h:176
TrackParticleContainer.h
InDetRttPlotConfig::doHitsFakeTracksPlots
bool doHitsFakeTracksPlots
Definition: InDetRttPlots.h:65
InDetRttPlotConfig::doTrackParametersPerAuthor
bool doTrackParametersPerAuthor
Definition: InDetRttPlots.h:103
InDetPhysValMonitoringTool::m_doDuplicatePlots
BooleanProperty m_doDuplicatePlots
Definition: InDetPhysValMonitoringTool.h:175
InDetPhysValMonitoringTool::m_acc_hasTruthFilled
SG::AuxElement::Accessor< bool > m_acc_hasTruthFilled
Definition: InDetPhysValMonitoringTool.h:105
TSU::T
unsigned long long T
Definition: L1TopoDataTypes.h:35
InDetPerfPlot_nTracks::ALLTRUTH
@ ALLTRUTH
Definition: InDetPerfPlot_nTracks.h:25
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
InDetPerfPlot_nTracks::SELECTEDTRUTH
@ SELECTEDTRUTH
Definition: InDetPerfPlot_nTracks.h:25
xAOD::EventInfo_v1::eventType
bool eventType(EventType type) const
Check for one particular bitmask value.
xAOD::EventInfo_v1::actualInteractionsPerCrossing
float actualInteractionsPerCrossing() const
Average interactions per crossing for the current BCID - for in-time pile-up.
Definition: EventInfo_v1.cxx:380
InDetPhysValMonitoringTool::m_dec_selectedByPileupSwitch
SG::AuxElement::Decorator< bool > m_dec_selectedByPileupSwitch
Definition: InDetPhysValMonitoringTool.h:110
InDetPhysValMonitoringTool::m_isITk
BooleanProperty m_isITk
Definition: InDetPhysValMonitoringTool.h:203
InDetRttPlotConfig::isITk
bool isITk
Definition: InDetRttPlots.h:52
InDetRttPlotConfig::doTrkInJetPlots_unlinked
bool doTrkInJetPlots_unlinked
Definition: InDetRttPlots.h:96