ATLAS Offline Software
InDetExtensionProcessor.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3  */
4 
6 // InDetExtensionProcessor.cxx
7 // Implementation file for class InDetExtensionProcessor
9 // version 0.0 Markus Elsing
11 
18 #include <algorithm> //for std::transform
19 #include <cmath> //for std::abs
20 #include <functional> //for std::plus<>
21 #include <memory>
22 
23 
24 
25 //==================================================================================================
26 namespace {
27  template<typename T, size_t N>
28  std::array<T, N>& //overloaded += operator for std::array
29  operator += (std::array<T, N>& a1, const std::array<T, N>& a2) {
30  std::transform(std::begin(a1), std::end(a1), begin(a2), std::begin(a1), std::plus<int>());
31  return a1;
32  }
33 }
34 
35 //==================================================================================================
36 
37 // Constructor with parameters:
38 InDet::InDetExtensionProcessor::InDetExtensionProcessor(const std::string& name, ISvcLocator* pSvcLocator) :
39  AthReentrantAlgorithm(name, pSvcLocator),
40  m_counters{},
41  m_Nevents(0)
42 {}
43 
44 //==================================================================================================
45 
46 // Initialize method:
49  ATH_MSG_DEBUG("InDetExtensionProcessor::initialize()");
50  ATH_CHECK(m_trackFitter.retrieve());
51  ATH_MSG_DEBUG("Retrieved tool " << m_trackFitter);
52  // Configuration of the material effects
54  //
55  ATH_CHECK(m_trackSummaryTool.retrieve(DisableTool {m_trackSummaryTool.name().empty()}));
56  ATH_CHECK(m_scoringTool.retrieve());
57  ATH_MSG_DEBUG("Retrieved tool " << m_scoringTool);
58  // brem fitting enabled ?
59  if (m_tryBremFit) ATH_MSG_DEBUG("Try brem fit and recovery for electron like tracks.");
60  //
61  ATH_CHECK(m_trackName.initialize());
63  ATH_CHECK(m_newTrackName.initialize());
64  return StatusCode::SUCCESS;
65 }
66 
67 //==================================================================================================
68 
69 // Execute method:
71 InDet::InDetExtensionProcessor::execute(const EventContext& ctx) const {
72  // process the extensions
75  SG::WriteHandle<TrackCollection> extendedTracksResult(m_newTrackName, ctx);
76  const auto nTracks {tracks->size()};
77  ATH_MSG_DEBUG("Number of Tracks found : " << nTracks);
78  // input statistics
79  {
80  ++m_Nevents;
82  }
83  ATH_CHECK(extendedTracksResult.record(std::unique_ptr<TrackCollection>(
84  createExtendedTracks(ctx, tracks.cptr(), trackExtensionMap.cptr()))));
85  ATH_MSG_DEBUG("Container '" << m_newTrackName.key()
86  << "' recorded in StoreGate, size : "
87  << extendedTracksResult->size());
88  if (extendedTracksResult->size() != nTracks) ATH_MSG_WARNING("Lost tracks after extension ??? This is a bug !");
89  return StatusCode::SUCCESS;
90 }
91 
94  const TrackCollection* pTracks,
95  const TrackExtensionMap* trackExtensionMap) const {
96  std::unique_ptr<TrackCollection> newTracks(std::make_unique<TrackCollection>());
97  std::array< std::array<std::atomic<int>, Nregions>, nTypes> counters{};
98  // loop over tracks
99  for (const Trk::Track* thisTrack : *pTracks) {
100  // statistics
101  incrementRegionCounter(counters[nInput], thisTrack, false);
102  ATH_MSG_DEBUG("evaluate input track : " << thisTrack);
103  // try to find this track in extension map
104  TrackExtensionMap::const_iterator pThisExtensionPair = trackExtensionMap->find(thisTrack);
105  // copy input track if this track is not found in list
106  if (pThisExtensionPair == trackExtensionMap->end()) {
107  ATH_MSG_DEBUG("track not in extension map, copy original track to output");
108  // copy track, set pattern info
109  std::unique_ptr<Trk::Track> ntrk(std::make_unique<Trk::Track>(*thisTrack));
111  newTracks->push_back(std::move(ntrk));
112  // statistics
114  } else {
115  ATH_MSG_DEBUG("track found in extension map, processing...");
116  // statistics
118  // setup new track
119  std::unique_ptr<Trk::Track> newtrack;
120  // keep old track info
121  const Trk::TrackInfo oldTrackInfo = thisTrack->info();
122  // keep list of PRDs, initially assumed to be same size as pThisExtensionPair->second
123  const auto nRIO_OnTrack {pThisExtensionPair->second.size()};
124  std::vector<const Trk::PrepRawData*> vecPrd;
125  vecPrd.reserve(nRIO_OnTrack);
126  // --- refit PRD ?
127  if (m_refitPrds) {
128  auto getPrepRawDataPtr = [](const Trk::MeasurementBase* m) {
129  const auto& pRot = dynamic_cast <const Trk::RIO_OnTrack*>(m);
130  return pRot ? pRot->prepRawData() : nullptr;
131  };
132  const auto& theRIOs_OnTrack {pThisExtensionPair->second};
133  //NOTE: Assumes success; I don't remove any nullptrs which result! (could use copy_if)
134  std::transform(theRIOs_OnTrack.begin(), theRIOs_OnTrack.end(), std::back_inserter(vecPrd), getPrepRawDataPtr);
135  // we have the PRD Vector, we need to refit the track and see if it is better
136  ATH_MSG_DEBUG("fit track " << thisTrack << " with PRDs, number : " << vecPrd.size());
137  if (!m_cosmics) {
138  // normal event processing
139  if (m_tryBremFit && thisTrack->info().trackProperties(Trk::TrackInfo::BremFit)) {
140  ATH_MSG_DEBUG("brem fit of electron like track");
141  //statistics
143  // try brem fit of combined track
144  newtrack = m_trackFitter->fit(
145  ctx, *thisTrack, vecPrd, m_runOutlier, Trk::electron);
146  } else {
147  ATH_MSG_DEBUG("normal fit track");
148  //statistics
150  // normal fit of combined track
151  newtrack = m_trackFitter->fit(ctx,
152  *thisTrack, vecPrd, m_runOutlier, m_particleHypothesis);
153  if (!newtrack && m_tryBremFit &&
154  thisTrack->trackParameters()->front()->pT() > m_pTminBrem &&
155  (!m_caloSeededBrem || thisTrack->info().patternRecoInfo(
157  ATH_MSG_DEBUG("normal fit track failed, try to recover with brem fit");
158  // statistics
160  // try brem fit of combined track
161  newtrack=m_trackFitter->fit(ctx,*thisTrack, vecPrd, m_runOutlier, Trk::electron);
162  }
163  }
164  } else {
165  // ===> special case for cosmics
166  std::vector<const Trk::PrepRawData*> vecPrdComb;
167  // get track parameters
168  const Trk::Perigee* siPerigee = thisTrack->perigeeParameters();
169  if (!siPerigee) {
170  ATH_MSG_DEBUG("no perigee found on track, copy input");
171  // statistics
173  // copy track, set pattern info
174  std::unique_ptr<Trk::Track> ntrk(std::make_unique< Trk::Track>(*thisTrack));
176  newTracks->push_back(std::move(ntrk));
177  } else {
178  // loop over extension RIO-on-tracks and add PRD it into vecPrdComb
180  pThisExtensionPair->first->measurementsOnTrack()->begin();
181  for (; RIOit != pThisExtensionPair->first->measurementsOnTrack()->end(); ++RIOit) {
182  const Trk::RIO_OnTrack* rot = dynamic_cast <const Trk::RIO_OnTrack*> (*RIOit);
183  if (!rot) ATH_MSG_ERROR("cast to ROT failed, should not happen here !");
184  else vecPrdComb.push_back(rot->prepRawData());
185  }
186  // merge lists
187  for (auto & i : vecPrd) {
188  double inprod =
189  (i->detectorElement()->surface(i->identify()).center() - siPerigee->position()).dot(
190  siPerigee->momentum());
191  if (inprod < 0) {
192  vecPrdComb.insert(vecPrdComb.begin(), i);
193  } else {
194  vecPrdComb.push_back(i);
195  }
196  }
197  //statistics
199  // normal fit of combined track
200  newtrack = m_trackFitter->fit(
201  ctx, vecPrdComb, *siPerigee, m_runOutlier, m_particleHypothesis);
202  }
203  }
204  } else {
205  const auto& RIOs_OnTrack {pThisExtensionPair->second};
206  // we have an extension map with RIO-on-tracks, we need to refit the track and see if it is better
207  ATH_MSG_DEBUG("fit track " << thisTrack << " with ROTs, number : " << RIOs_OnTrack.size());
208  if (!m_cosmics) {
209  if (m_tryBremFit && thisTrack->info().trackProperties(Trk::TrackInfo::BremFit)) {
210  ATH_MSG_DEBUG("brem fit of electron like track");
211  //statistics
213  // try brem fit of combined track
214  newtrack=m_trackFitter->fit(ctx,*thisTrack, RIOs_OnTrack, m_runOutlier, Trk::electron);
215  } else {
216  ATH_MSG_DEBUG("normal fit track");
217  //statistics
219  // fit combined track
220  newtrack=m_trackFitter->fit(ctx,*thisTrack, RIOs_OnTrack, m_runOutlier, m_particleHypothesis);
221  if (!newtrack && m_tryBremFit &&
222  thisTrack->trackParameters()->front()->pT() > m_pTminBrem &&
223  (!m_caloSeededBrem || thisTrack->info().patternRecoInfo(Trk::TrackInfo::TrackInCaloROI))) {
224  ATH_MSG_DEBUG("normal fit track failed, try to recover with brem fit");
225  // statistics
227  // try to recover with brem fit
228  newtrack=m_trackFitter->fit(ctx,*thisTrack, RIOs_OnTrack, m_runOutlier, Trk::electron);
229  }
230  }//end-if of normal track fit
231  } else {
232  // special case for cosmics
233  Trk::MeasurementSet rotSet;
234  // get track parameters
235  const Trk::Perigee* siPerigee = thisTrack->perigeeParameters();
236  if (!siPerigee) {
237  ATH_MSG_DEBUG("no perigee found on track, copy input");
238  // statistics
240  // copy track, set pattern info
241  std::unique_ptr<Trk::Track> ntrk(std::make_unique< Trk::Track>(*thisTrack));
243  newTracks->push_back(std::move(ntrk));
244  } else {
245  // extract RIO-on-tracks from extension
247  pThisExtensionPair->first->measurementsOnTrack()->begin();
248  for (; RIOit != pThisExtensionPair->first->measurementsOnTrack()->end(); ++RIOit) {
249  rotSet.push_back(*RIOit);
250  }
251  // merge RIO-on-track lists
252  for (const auto *i : pThisExtensionPair->second) {
253  double inprod = (i->associatedSurface().center() - siPerigee->position()).dot(
254  siPerigee->momentum());
255  if (inprod < 0) {
256  rotSet.insert(rotSet.begin(), i);
257  } else {
258  rotSet.push_back(i);
259  }
260  }
261  ATH_MSG_DEBUG("normal fit track");
262  //statistics
264  // fit combined track
265  newtrack=m_trackFitter->fit(ctx,rotSet, *siPerigee, m_runOutlier, m_particleHypothesis);
266  }
267  }
268  }
269  if (!newtrack) {
270  ATH_MSG_DEBUG("refit of extended track failed, copy original track to output");
271  // statistics
273  // push track into output, does copy, needs fixing
275  newTracks->push_back(trackPlusExtension(ctx,thisTrack, pThisExtensionPair->second));
276  } else {
277  // copy track, set pattern info
278  std::unique_ptr<Trk::Track> ntrk(std::make_unique<Trk::Track>(*thisTrack));
280  newTracks->push_back(std::move(ntrk));
281  }
282  } else {
283  // score old and new tool and decide which one to push back
284  Trk::TrackScore oldScore = m_scoringTool->score(*thisTrack);
285  ATH_MSG_DEBUG("original track has score : " << oldScore);
286  Trk::TrackScore newScore = Trk::TrackScore(0);
287  bool passBasicSelections = m_scoringTool->passBasicSelections(*newtrack);
288  if(passBasicSelections){
289  if (m_trackSummaryTool.isEnabled()) {
290  m_trackSummaryTool->computeAndReplaceTrackSummary(ctx, *newtrack, m_suppressHoleSearch);
291  }
292  bool recheckBasicSel = false;
293  newScore = m_scoringTool->score(*newtrack, recheckBasicSel);
294  }
295  ATH_MSG_DEBUG("new track has score : " << newScore);
296  // do we need to recover with a brem fit
297  if (newScore < oldScore && m_tryBremFit &&
299  thisTrack->trackParameters()->front()->pT() > m_pTminBrem &&
300  (!m_caloSeededBrem || thisTrack->info().patternRecoInfo(Trk::TrackInfo::TrackInCaloROI))) {
301  ATH_MSG_DEBUG("new track has low score, try to recover track using brem fit");
302  // statistics
304  std::unique_ptr<Trk::Track> newBremTrack;
305  // try to recover with brem fit
306  if (m_refitPrds) {
307  newBremTrack=m_trackFitter->fit(ctx,*thisTrack, vecPrd, m_runOutlier, Trk::electron);
308  } else {
309  newBremTrack=m_trackFitter->fit(ctx,*thisTrack, pThisExtensionPair->second, m_runOutlier, Trk::electron);
310  }
311  if (newBremTrack) {
312  // score again
313  // @TODO should score newBremTrack + only replace summary if passBasicSelection
314  if (m_trackSummaryTool.isEnabled()) {
315  m_trackSummaryTool->computeAndReplaceTrackSummary(ctx, *newBremTrack, m_suppressHoleSearch);
316  }
317  newScore = m_scoringTool->score(*newtrack);
318  ATH_MSG_DEBUG("recovered new track has score : " << newScore);
319  // copy pointer
320  newtrack = std::move(newBremTrack);
321  }
322  }
323  if (newScore >= oldScore) {
324  ATH_MSG_DEBUG("take extended track, it's better !");
325  // statistics
329  }
330  //storing the precedent info
331  newtrack->info().addPatternReco(oldTrackInfo);
332  // push track into output
334  newTracks->push_back(std::move(newtrack));
335  } else {
336  ATH_MSG_DEBUG("take original track, new one is worse !");
337  // statistics
339  // push track into output, does copy
340  std::unique_ptr<Trk::Track> ntrk;
342  ntrk.reset(trackPlusExtension(ctx,thisTrack, pThisExtensionPair->second));
343  } else {
344  ntrk = std::make_unique<Trk::Track>(*thisTrack);
345  }
347  newTracks->push_back(std::move(ntrk));
348  }
349  }
350  }
351  }
352 
353  {
354 
355  for (unsigned int itype = 0; itype < InDet::InDetExtensionProcessor::nTypes; itype++) m_counters[itype] += counters[itype];
356  }
357  return newTracks.release();
358 }
359 
360 //==================================================================================================
361 
363  bool updateAll) const {
364  if (updateAll) Ntracks[InDet::InDetExtensionProcessor::iAll] += 1;
365  // test
366  if (!track) {
367  ATH_MSG_ERROR("track pointer zero, should not happen!");
368  return;
369  }
370  const auto *const pTrackParameters {track->trackParameters()};
371  // use first parameter
372  if (not pTrackParameters) {
373  ATH_MSG_WARNING("No track parameters, needed for statistics code in Trk::SimpleAmbiguityProcessorTool!");
374  } else {
375  const double absEta = std::abs(pTrackParameters->front()->eta());
379  }
380 }
381 
382 //==================================================================================================
383 
384 Trk::Track*
386  const EventContext& ctx,
387  const Trk::Track* siTrack,
388  const std::vector<const Trk::MeasurementBase*>& extension) const
389 {
390  const auto& trackStatesOnSurfaces{ *(siTrack->trackStateOnSurfaces()) };
391  auto pExtendedTrajectory = std::make_unique<Trk::TrackStates>();
392 
393  pExtendedTrajectory->reserve(trackStatesOnSurfaces.size() + extension.size());
394  int nSiStates = 0, nExtStates = 0;
395  // copy existing si track as first part to new track - including all track pars since fit does not change
396  auto cloneTSOS = [](const Trk::TrackStateOnSurface* pTSOS) {
397  return new Trk::TrackStateOnSurface(*pTSOS);
398  };
399  std::transform(trackStatesOnSurfaces.begin(), trackStatesOnSurfaces.end(), std::back_inserter(
400  *pExtendedTrajectory), cloneTSOS);
401  nSiStates += trackStatesOnSurfaces.size();
402  // copy proposed (but failed) extension as second part onto new track - all hits flagged as outliers.
403  constexpr auto outlierDigit {1 << Trk::TrackStateOnSurface::Outlier};
404  constexpr std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes> outlierPattern(outlierDigit);
405  //create new track state on surface
406  auto createNewTSOS = [outlierPattern](const Trk::MeasurementBase* pm) -> const Trk::TrackStateOnSurface*{
407  return new Trk::TrackStateOnSurface(pm->uniqueClone(), nullptr, nullptr, outlierPattern);
408  };
409  //Adding to cosmic tracks beginning or end depending on the direction of track
410  auto addNewTSOS_ForCosmics = [&pExtendedTrajectory, siTrack, createNewTSOS](const Trk::MeasurementBase* pm) {
411  const auto& perigee {siTrack->perigeeParameters()};
412  //the sign of this gives the direction
413  const double inprod = (pm->associatedSurface().center() - perigee->position()).dot(
414  perigee->momentum());
415  if (inprod < 0) {
416  pExtendedTrajectory->insert(pExtendedTrajectory->begin(), createNewTSOS(pm));
417  } else {
418  pExtendedTrajectory->push_back(createNewTSOS(pm));
419  }
420  };
421  //actual copying done here, using preceding lambda functions
422  if (not m_cosmics) {
423  std::transform(extension.begin(), extension.end(), std::back_inserter(*pExtendedTrajectory), createNewTSOS);
424  } else {
425  //difficult to use std::transform here, since don't know whether back or front are added to
426  for (const auto *const pMeasurementBase: extension) {
427  addNewTSOS_ForCosmics(pMeasurementBase);
428  }
429  }
430  nExtStates += pExtendedTrajectory->size();
431  const auto& pFitQuality {siTrack->fitQuality()};
432  Trk::Track* extTrack =
433  new Trk::Track(siTrack->info(), std::move(pExtendedTrajectory), (pFitQuality ? pFitQuality->uniqueClone() : nullptr));
434  if (m_trackSummaryTool.isEnabled()) {
435  m_trackSummaryTool->computeAndReplaceTrackSummary(ctx, *extTrack, m_suppressHoleSearch);
436  }
437  Trk::TrackScore extScore = m_scoringTool->score(*extTrack);
438  ATH_MSG_DEBUG("rejected extension saved as Trk::Track with " << nSiStates <<
439  " fitted hits and " << nExtStates << " additional Outliers, score :" << extScore);
440  return extTrack;
441 }
442 
443 //==================================================================================================
444 
445 // Finalize method:
447  if (msgLvl(MSG::INFO)) {
448  MsgStream &out = msg(MSG::INFO);
449  out << "::finalize() -- statistics:" << std::endl;
450  dumpStat(out);
451  out << endmsg;
452  }
453  return StatusCode::SUCCESS;
454 }
455 
456 MsgStream &InDet::InDetExtensionProcessor::dumpStat(MsgStream &out) const
457 {
458  int iw = 9;
459  out.width(9);
460  out << "-------------------------------------------------------------------------------" << std::endl;
461  out << " Number of events processed : " << m_Nevents << std::endl;
462  out << " statistics by eta range ------All---Barrel---Trans.-- Endcap-- " << std::endl;
463  out << "-------------------------------------------------------------------------------" << std::endl;
464  out << " Number of tracks at input :" << std::setiosflags(std::ios::dec) << std::setw(iw)
465  << m_counters[InDet::InDetExtensionProcessor::nInput][InDet::InDetExtensionProcessor::iAll] << std::setiosflags(std::ios::dec) << std::setw(iw)
466  << m_counters[InDet::InDetExtensionProcessor::nInput][InDet::InDetExtensionProcessor::iBarrel] << std::setiosflags(std::ios::dec) << std::setw(iw)
467  << m_counters[InDet::InDetExtensionProcessor::nInput][InDet::InDetExtensionProcessor::iTransi] << std::setiosflags(std::ios::dec) << std::setw(iw)
469  out << " Number of not extended tracks :" << std::setiosflags(std::ios::dec) << std::setw(iw)
470  << m_counters[InDet::InDetExtensionProcessor::nNotExtended][InDet::InDetExtensionProcessor::iAll] << std::setiosflags(std::ios::dec) <<
471  std::setw(iw)
472  << m_counters[InDet::InDetExtensionProcessor::nNotExtended][InDet::InDetExtensionProcessor::iBarrel] << std::setiosflags(std::ios::dec) <<
473  std::setw(iw)
474  << m_counters[InDet::InDetExtensionProcessor::nNotExtended][InDet::InDetExtensionProcessor::iTransi] << std::setiosflags(std::ios::dec) <<
475  std::setw(iw)
477  out << " Number of proposed ext. roads :" << std::setiosflags(std::ios::dec) << std::setw(iw)
478  << m_counters[InDet::InDetExtensionProcessor::nRecognised][InDet::InDetExtensionProcessor::iAll] << std::setiosflags(std::ios::dec) << std::setw(iw)
479  << m_counters[InDet::InDetExtensionProcessor::nRecognised][InDet::InDetExtensionProcessor::iBarrel] << std::setiosflags(std::ios::dec) << std::setw(
480  iw)
481  << m_counters[InDet::InDetExtensionProcessor::nRecognised][InDet::InDetExtensionProcessor::iTransi] << std::setiosflags(std::ios::dec) << std::setw(
482  iw)
484  out << "-------------------------------------------------------------------------------" << std::endl;
485  out << " Number of track fits :" << std::setiosflags(std::ios::dec) << std::setw(iw)
486  << m_counters[InDet::InDetExtensionProcessor::nFits][InDet::InDetExtensionProcessor::iAll] << std::setiosflags(std::ios::dec) << std::setw(iw)
487  << m_counters[InDet::InDetExtensionProcessor::nFits][InDet::InDetExtensionProcessor::iBarrel] << std::setiosflags(std::ios::dec) << std::setw(iw)
488  << m_counters[InDet::InDetExtensionProcessor::nFits][InDet::InDetExtensionProcessor::iTransi] << std::setiosflags(std::ios::dec) << std::setw(iw)
490  if (m_tryBremFit) {
491  out << " + brem fits for electron tracks :" << std::setiosflags(std::ios::dec) << std::setw(iw)
492  << m_counters[InDet::InDetExtensionProcessor::nBremFits][InDet::InDetExtensionProcessor::iAll] << std::setiosflags(std::ios::dec) << std::setw(iw)
493  << m_counters[InDet::InDetExtensionProcessor::nBremFits][InDet::InDetExtensionProcessor::iBarrel] << std::setiosflags(std::ios::dec) << std::setw(
494  iw)
495  << m_counters[InDet::InDetExtensionProcessor::nBremFits][InDet::InDetExtensionProcessor::iTransi] << std::setiosflags(std::ios::dec) << std::setw(
496  iw)
498  out << " + brem fit to recover failed fit:" << std::setiosflags(std::ios::dec) << std::setw(iw)
499  << m_counters[InDet::InDetExtensionProcessor::nRecoveryBremFits][InDet::InDetExtensionProcessor::iAll] << std::setiosflags(std::ios::dec) <<
500  std::setw(iw)
501  << m_counters[InDet::InDetExtensionProcessor::nRecoveryBremFits][InDet::InDetExtensionProcessor::iBarrel] << std::setiosflags(std::ios::dec) <<
502  std::setw(iw)
503  << m_counters[InDet::InDetExtensionProcessor::nRecoveryBremFits][InDet::InDetExtensionProcessor::iTransi] << std::setiosflags(std::ios::dec) <<
504  std::setw(iw)
506  out << " + brem fit to recover low score :" << std::setiosflags(std::ios::dec) << std::setw(iw)
507  << m_counters[InDet::InDetExtensionProcessor::nLowScoreBremFits][InDet::InDetExtensionProcessor::iAll] << std::setiosflags(std::ios::dec) <<
508  std::setw(iw)
509  << m_counters[InDet::InDetExtensionProcessor::nLowScoreBremFits][InDet::InDetExtensionProcessor::iBarrel] << std::setiosflags(std::ios::dec) <<
510  std::setw(iw)
511  << m_counters[InDet::InDetExtensionProcessor::nLowScoreBremFits][InDet::InDetExtensionProcessor::iTransi] << std::setiosflags(std::ios::dec) <<
512  std::setw(iw)
514  }
515  out << "-------------------------------------------------------------------------------" << std::endl;
516  out << " Number of track fit failing :" << std::setiosflags(std::ios::dec) << std::setw(iw)
517  << m_counters[InDet::InDetExtensionProcessor::nFailed][InDet::InDetExtensionProcessor::iAll] << std::setiosflags(std::ios::dec) << std::setw(iw)
518  << m_counters[InDet::InDetExtensionProcessor::nFailed][InDet::InDetExtensionProcessor::iBarrel] << std::setiosflags(std::ios::dec) << std::setw(iw)
519  << m_counters[InDet::InDetExtensionProcessor::nFailed][InDet::InDetExtensionProcessor::iTransi] << std::setiosflags(std::ios::dec) << std::setw(iw)
521  out << " Number of rejected extensions :" << std::setiosflags(std::ios::dec) << std::setw(iw)
522  << m_counters[InDet::InDetExtensionProcessor::nRejected][InDet::InDetExtensionProcessor::iAll] << std::setiosflags(std::ios::dec) << std::setw(iw)
523  << m_counters[InDet::InDetExtensionProcessor::nRejected][InDet::InDetExtensionProcessor::iBarrel] << std::setiosflags(std::ios::dec) <<
524  std::setw(iw)
525  << m_counters[InDet::InDetExtensionProcessor::nRejected][InDet::InDetExtensionProcessor::iTransi] << std::setiosflags(std::ios::dec) <<
526  std::setw(iw)
528  out << " Number of successful extensions :" << std::setiosflags(std::ios::dec) << std::setw(iw)
529  << m_counters[InDet::InDetExtensionProcessor::nExtended][InDet::InDetExtensionProcessor::iAll] << std::setiosflags(std::ios::dec) << std::setw(iw)
530  << m_counters[InDet::InDetExtensionProcessor::nExtended][InDet::InDetExtensionProcessor::iBarrel] << std::setiosflags(std::ios::dec) <<
531  std::setw(iw)
532  << m_counters[InDet::InDetExtensionProcessor::nExtended][InDet::InDetExtensionProcessor::iTransi] << std::setiosflags(std::ios::dec) <<
533  std::setw(iw)
535  if (m_tryBremFit) {
536  out << " including brem fitted tracks :" << std::setiosflags(std::ios::dec) << std::setw(iw)
537  << m_counters[InDet::InDetExtensionProcessor::nExtendedBrem][InDet::InDetExtensionProcessor::iAll] << std::setiosflags(std::ios::dec) <<
538  std::setw(iw)
539  << m_counters[InDet::InDetExtensionProcessor::nExtendedBrem][InDet::InDetExtensionProcessor::iBarrel] << std::setiosflags(std::ios::dec) <<
540  std::setw(iw)
541  << m_counters[InDet::InDetExtensionProcessor::nExtendedBrem][InDet::InDetExtensionProcessor::iTransi] << std::setiosflags(std::ios::dec) <<
542  std::setw(iw)
544  }
545  out << "-------------------------------------------------------------------------------" << std::endl;
546  out << std::setiosflags(std::ios::fixed | std::ios::showpoint) << std::setprecision(2)
547  << " definition: ( 0.0 < Barrel < " << m_etabounds[0] << " < Transition < " << m_etabounds[1]
548  << " < Endcap < " << m_etabounds[2] << " )" << std::setprecision(-1) << std::endl;
549  out << "-------------------------------------------------------------------------------" << std::endl;
550  return out;
551 }
Trk::TrackInfo
Contains information about the 'fitter' of this track.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:32
Trk::ParticleSwitcher::particle
constexpr ParticleHypothesis particle[PARTICLEHYPOTHESES]
the array of masses
Definition: ParticleHypothesis.h:76
InDet::InDetExtensionProcessor::m_trackFitter
PublicToolHandle< Trk::ITrackFitter > m_trackFitter
Definition: InDetExtensionProcessor.h:68
python.SystemOfUnits.m
int m
Definition: SystemOfUnits.py:91
InDet::InDetExtensionProcessor::m_trackSummaryTool
ToolHandle< Trk::IExtendedTrackSummaryTool > m_trackSummaryTool
Definition: InDetExtensionProcessor.h:72
TrackParameters.h
SG::ReadHandle::cptr
const_pointer_type cptr()
Dereference the pointer.
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
InDet::InDetExtensionProcessor::nInput
@ nInput
Definition: InDetExtensionProcessor.h:113
InDet::InDetExtensionProcessor::InDetExtensionProcessor
InDetExtensionProcessor(const std::string &name, ISvcLocator *pSvcLocator)
Default Algorithm constructor with parameters.
Definition: InDetExtensionProcessor.cxx:38
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
InDet::InDetExtensionProcessor::m_pTminBrem
FloatProperty m_pTminBrem
Definition: InDetExtensionProcessor.h:98
Trk::Track::trackStateOnSurfaces
const Trk::TrackStates * trackStateOnSurfaces() const
return a pointer to a const DataVector of const TrackStateOnSurfaces.
Trk::ParametersT
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
Definition: EMErrorDetail.h:25
Trk::Track::info
const TrackInfo & info() const
Returns a const ref to info of a const tracks.
xAOD::JetInput::Track
@ Track
Definition: JetContainerInfo.h:61
PlotCalibFromCool.begin
begin
Definition: PlotCalibFromCool.py:94
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:71
InDet::InDetExtensionProcessor::m_suppressHoleSearch
BooleanProperty m_suppressHoleSearch
Definition: InDetExtensionProcessor.h:92
AthCommonMsg< Gaudi::Algorithm >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
InDet::InDetExtensionProcessor::nRejected
@ nRejected
Definition: InDetExtensionProcessor.h:113
Trk::RIO_OnTrack
Definition: RIO_OnTrack.h:70
InDet::InDetExtensionProcessor::trackPlusExtension
Trk::Track * trackPlusExtension(const EventContext &ctx, const Trk::Track *, const std::vector< const Trk::MeasurementBase * > &) const
internal structuring: creates new track with original one plus extension as outliers
Definition: InDetExtensionProcessor.cxx:385
InDet::InDetExtensionProcessor::m_runOutlier
Gaudi::Property< Trk::RunOutlierRemoval > m_runOutlier
Definition: InDetExtensionProcessor.h:81
ITrackScoringTool.h
PrepRawData.h
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
InDet::InDetExtensionProcessor::nRecognised
@ nRecognised
Definition: InDetExtensionProcessor.h:113
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition: AthReentrantAlgorithm.h:83
Trk::TrackStateOnSurface::Outlier
@ Outlier
This TSoS contains an outlier, that is, it contains a MeasurementBase/RIO_OnTrack which was not used ...
Definition: TrackStateOnSurface.h:122
InDet::InDetExtensionProcessor::nExtended
@ nExtended
Definition: InDetExtensionProcessor.h:113
InDetExtensionProcessor.h
InDet::InDetExtensionProcessor::m_matEffects
IntegerProperty m_matEffects
Definition: InDetExtensionProcessor.h:89
Trk::TrackInfo::addPatternReco
void addPatternReco(const TrackInfo &)
A method adding just pattern recognition info without adding the actual properties.
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
InDet::InDetExtensionProcessor::m_keepFailedExtensionOnTrack
BooleanProperty m_keepFailedExtensionOnTrack
Definition: InDetExtensionProcessor.h:83
InDet::InDetExtensionProcessor::m_tryBremFit
BooleanProperty m_tryBremFit
Definition: InDetExtensionProcessor.h:94
lumiFormat.i
int i
Definition: lumiFormat.py:85
InDet::InDetExtensionProcessor::iTransi
@ iTransi
Definition: InDetExtensionProcessor.h:109
InDet::InDetExtensionProcessor::Nregions
@ Nregions
Definition: InDetExtensionProcessor.h:109
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
Trk::electron
@ electron
Definition: ParticleHypothesis.h:27
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
InDet::InDetExtensionProcessor::nLowScoreBremFits
@ nLowScoreBremFits
Definition: InDetExtensionProcessor.h:114
InDet::InDetExtensionProcessor::createExtendedTracks
TrackCollection * createExtendedTracks(const EventContext &ctx, const TrackCollection *tracks_in, const TrackExtensionMap *track_extension_map) const
process events
Definition: InDetExtensionProcessor.cxx:93
InDet::InDetExtensionProcessor::nTypes
@ nTypes
Definition: InDetExtensionProcessor.h:114
Amg::transform
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.
Definition: GeoPrimitivesHelpers.h:156
Trk::TrackInfo::InDetExtensionProcessor
@ InDetExtensionProcessor
Tracks with InDetExtensionProcessor used.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:111
Trk::TrackScore
float TrackScore
Definition: TrackScore.h:10
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
Trk::TrackInfo::BremFit
@ BremFit
A brem fit was performed on this track.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:78
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
InDet::InDetExtensionProcessor::iAll
@ iAll
Definition: InDetExtensionProcessor.h:109
Trk::TrackInfo::TrackInCaloROI
@ TrackInCaloROI
A track in a CaloROI.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:236
InDet::InDetExtensionProcessor::m_scoringTool
PublicToolHandle< Trk::ITrackScoringTool > m_scoringTool
Definition: InDetExtensionProcessor.h:75
InDet::InDetExtensionProcessor::m_refitPrds
BooleanProperty m_refitPrds
Definition: InDetExtensionProcessor.h:86
DataVector< Trk::Track >
InDet::InDetExtensionProcessor::nNotExtended
@ nNotExtended
Definition: InDetExtensionProcessor.h:114
dot.dot
def dot(G, fn, nodesToHighlight=[])
Definition: dot.py:5
InDet::InDetExtensionProcessor::iBarrel
@ iBarrel
Definition: InDetExtensionProcessor.h:109
InDet::InDetExtensionProcessor::incrementRegionCounter
void incrementRegionCounter(std::array< std::atomic< int >, 4 > &, const Trk::Track *, bool=true) const
monitoring and validation: does success/failure counting for each detector region
Definition: InDetExtensionProcessor.cxx:362
Trk::MeasurementSet
std::vector< const MeasurementBase * > MeasurementSet
vector of fittable measurements
Definition: FitterTypes.h:30
lumiFormat.array
array
Definition: lumiFormat.py:91
Trk::MeasurementBase
Definition: MeasurementBase.h:58
Trk::TrackStateOnSurface
represents the track state (measurement, material, fit parameters and quality) at a surface.
Definition: TrackStateOnSurface.h:71
InDet::InDetExtensionProcessor::execute
virtual StatusCode execute(const EventContext &ctx) const
Definition: InDetExtensionProcessor.cxx:71
InDet::InDetExtensionProcessor::m_etabounds
Gaudi::Property< std::vector< float > > m_etabounds
Definition: InDetExtensionProcessor.h:100
InDet::InDetExtensionProcessor::nRecoveryBremFits
@ nRecoveryBremFits
Definition: InDetExtensionProcessor.h:113
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
RIO_OnTrack.h
InDet::InDetExtensionProcessor::m_trackName
SG::ReadHandleKey< TrackCollection > m_trackName
Definition: InDetExtensionProcessor.h:61
InDet::InDetExtensionProcessor::nExtendedBrem
@ nExtendedBrem
Definition: InDetExtensionProcessor.h:114
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
InDet::InDetExtensionProcessor::dumpStat
MsgStream & dumpStat(MsgStream &out) const
Definition: InDetExtensionProcessor.cxx:456
InDet::InDetExtensionProcessor::nFits
@ nFits
Definition: InDetExtensionProcessor.h:114
InDet::InDetExtensionProcessor::initialize
virtual StatusCode initialize()
Definition: InDetExtensionProcessor.cxx:48
Trk::RIO_OnTrack::prepRawData
virtual const Trk::PrepRawData * prepRawData() const =0
returns the PrepRawData (also known as RIO) object to which this RIO_OnTrack is associated.
InDet::InDetExtensionProcessor::m_cosmics
BooleanProperty m_cosmics
Definition: InDetExtensionProcessor.h:79
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:76
SG::WriteHandle::record
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
TrackExtensionMap
AUTO - An Undocumented Tracking Object.
Definition: TrackExtensionMap.h:16
AthCommonMsg< Gaudi::Algorithm >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
InDet::InDetExtensionProcessor::finalize
virtual StatusCode finalize()
Definition: InDetExtensionProcessor.cxx:446
TauGNNUtils::Variables::absEta
bool absEta(const xAOD::TauJet &tau, double &out)
Definition: TauGNNUtils.cxx:234
InDet::InDetExtensionProcessor::m_caloSeededBrem
BooleanProperty m_caloSeededBrem
Definition: InDetExtensionProcessor.h:96
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
Trk::TrackInfo::setPatternRecognitionInfo
void setPatternRecognitionInfo(const TrackPatternRecoInfo &patternReco)
Method setting the pattern recognition algorithm.
InDet::InDetExtensionProcessor::m_extensionMapName
SG::ReadHandleKey< TrackExtensionMap > m_extensionMapName
Definition: InDetExtensionProcessor.h:63
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
ITrackFitter.h
Trk::TrackInfo::trackProperties
bool trackProperties(const TrackProperties &property) const
Access methods for track properties.
InDet::InDetExtensionProcessor::nBremFits
@ nBremFits
Definition: InDetExtensionProcessor.h:114
InDet::InDetExtensionProcessor::m_particleHypothesis
Trk::ParticleHypothesis m_particleHypothesis
nomen est omen
Definition: InDetExtensionProcessor.h:105
InDet::InDetExtensionProcessor::m_newTrackName
SG::WriteHandleKey< TrackCollection > m_newTrackName
Definition: InDetExtensionProcessor.h:65
InDet::InDetExtensionProcessor::iEndcap
@ iEndcap
Definition: InDetExtensionProcessor.h:109
InDet::InDetExtensionProcessor::nFailed
@ nFailed
Definition: InDetExtensionProcessor.h:113
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.