ATLAS Offline Software
DenseEnvironmentsAmbiguityProcessorTool.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 #include "TrackScoringTool.h"
11 #include "TrkTrack/TrackInfo.h"
13 #include <cmath>
14 #include <iterator>
15 
16 //TODO: to be improved
17 bool
19  if (!track )return true;
20  bool error=false;
21  if (track->trackParameters()){
22  int counter=0;
23  for (const Trk::TrackParameters *param: *(track->trackParameters())) {
24  if (param && param->covariance() && param->covariance()->determinant() < 0) {
25  ATH_MSG_DEBUG( " negative determinant for track param " << counter << " "
26  << *(param) << " cov=" << *(param->covariance())
27  << "\n"
28  << " det=" << param->covariance()->determinant() );
29  error=true;
30  }
31  ++counter;
32  if (counter>=2) break;
33  }
34  }
35  return !error;
36 }
37 
38 
39 //==================================================================================================
42  const std::string& n,
43  const IInterface* p)
45  , m_fitterTool(this)
46 {
47 
48  m_fitterTool.push_back("Trk::KalmanFitter/InDetTrackFitter");
49 
50  declareInterface<ITrackAmbiguityProcessorTool>(this);
51  declareProperty("RefitPrds" , m_refitPrds = true); // True to allow for updated NN information to be taken into account
52  declareProperty("MatEffects" , m_matEffects = 3); // pion
53  declareProperty("Fitter" , m_fitterTool );
54  declareProperty("SuppressHoleSearch" , m_suppressHoleSearch = false);
55  declareProperty("SuppressTrackFit" , m_suppressTrackFit = false);
56  declareProperty("ForceRefit" , m_forceRefit = true);
57  declareProperty("tryBremFit" , m_tryBremFit = false);
58  declareProperty("caloSeededBrem" , m_caloSeededBrem = false);
59  declareProperty("pTminBrem" , m_pTminBrem = 1000.);
60  declareProperty("etaBounds" , m_etaBounds,"eta intervals for internal monitoring");
61 }
62 //==================================================================================================
63 
65 //==================================================================================================
66 
69  StatusCode sc = StatusCode::SUCCESS;
70  ATH_CHECK( m_scoringTool.retrieve());
71  ATH_CHECK( m_assoMapName.initialize(!m_assoMapName.key().empty()));
72  ATH_CHECK( m_assoTool.retrieve() );
73  ATH_CHECK( m_trackSummaryTool.retrieve( DisableTool{ m_trackSummaryTool.name().empty() } ) );
74  ATH_CHECK( m_selectionTool.retrieve());
75  ATH_CHECK( m_fitterTool.retrieve());
76  if (m_fitterTool.empty()){
77  ATH_MSG_FATAL("Failed to retrieve tool " << m_fitterTool );
78  sc = StatusCode::FAILURE;
79  return sc;
80  }
81 
82 
83  if (initializeClusterSplitProbContainer().isFailure()) {
84  sc=StatusCode::FAILURE;
85  }
86  // Configuration of the material effects
87  m_particleHypothesis = Trk::ParticleSwitcher::particle[m_matEffects];
88 
90  ATH_CHECK(m_observerToolWriter.retrieve(DisableTool{m_observerToolWriter.empty()}));
91 
92  // brem fitting enabled ?
93  if (m_tryBremFit)
94  ATH_MSG_DEBUG( "Try brem fit and recovery for electron like tracks." );
95 
96  if (m_etaBounds.size() != Counter::nRegions) {
97  ATH_MSG_FATAL("There must be exactly " << (Counter::nRegions) << " eta bounds but "
98  << m_etaBounds.size() << " are set." );
99  return StatusCode::FAILURE;
100  }
101  ATH_MSG_DEBUG(m_fitterTool.size()<<" fitters was/were input");
102  for(const auto & i:m_fitterTool){
103  ATH_MSG_DEBUG(i.name());
104  }
105  return sc;
106 }
107 
110  return StatusCode::SUCCESS;
111 }
112 
113 void
115  if (msgLvl(MSG::INFO)) {
116  MsgStream &out=msg(MSG::INFO);
117  out << " -- statistics \n";
118  std::lock_guard<std::mutex> lock( m_statMutex );
119  dumpStat(out);
120  out << endmsg;
121  }
122 }
123 
124 //==================================================================================================
128 const TrackCollection*
130  if (!trackScoreTrackMap) return nullptr;
131  const EventContext& ctx = Gaudi::Hive::currentContext();
132  // clear prdAssociationTool via selection tool
133  // @TODO remove :
134  std::unique_ptr<Trk::PRDtoTrackMap> prdToTrackMap( m_assoTool->createPRDtoTrackMap() );
135  if (!m_assoMapName.key().empty()) {
136  SG::ReadHandle<Trk::PRDtoTrackMap> input_prd_map(m_assoMapName);
137  if (!input_prd_map.isValid()) {
138  ATH_MSG_ERROR("Failed to retrieve prd to track map " << m_assoMapName.key() );
139  }
140  }
141  std::vector<std::unique_ptr<const Trk::Track> > trackDustbin;
142  // going to do simple algorithm for now:
143  // - take track with highest score
144  // - remove shared hits from all other tracks
145  // - take next highest scoring tracks, and repeat
146  ATH_MSG_DEBUG ("Solving Tracks");
147  TrackCollection* finalTracks = new TrackCollection;
148  {
149  Counter stat(m_etaBounds);
150  stat.newEvent();
151  solveTracks(*trackScoreTrackMap, *prdToTrackMap, *finalTracks, trackDustbin,stat);
152  {
153  std::lock_guard<std::mutex> lock(m_statMutex);
154  m_stat += stat;
155  }
156  }
157 
158  if (AmbiguityProcessorBase::m_observerTool.isEnabled() && m_observerToolWriter.isEnabled()){
159  // Sanity check
160  ATH_MSG_DEBUG("Saving observed tracks to store");
161  unsigned int nFinalTracks;
162  if (!trackScoreTrackMap->empty()){
163  nFinalTracks = m_observerToolWriter->saveTracksToStore(ctx, AmbiguityProcessorBase::m_observerTool->getTrackMap(ctx));
164  }
165  else{
166  nFinalTracks = m_observerToolWriter->saveTracksToStore(ctx, nullptr);
167  }
168  if (finalTracks){
169  if (nFinalTracks != finalTracks->size()){
170  ATH_MSG_ERROR("Track observer recorded different number of final tracks: "<<nFinalTracks<<" vs. "<<finalTracks->size());
171  }
172  else {
173  ATH_MSG_DEBUG("Track observer recorded "<<nFinalTracks<<" final tracks");
174  }
175  }
176  }
177 
178  return finalTracks;
179 }
180 
181 
182 
183 void
185  Trk::PRDtoTrackMap &prdToTrackMap,
186  TrackCollection &finalTracks,
187  std::vector<std::unique_ptr<const Trk::Track> > &trackDustbin,
188  Counter &stat) const{
189  TrackScoreMap scoreTrackFitflagMap;
190  for(const std::pair< const Trk::Track *, float> &scoreTrack: trackScoreTrackMap){
192  int input_track_uid = AmbiguityProcessor::getUid();
193  AmbiguityProcessorBase::m_observerTool->addInputTrack(input_track_uid, *scoreTrack.first);
194  AmbiguityProcessorBase::m_observerTool->updateTrackMap(input_track_uid, static_cast<double>(scoreTrack.second), xAOD::RejectionStep::solveTracks, xAOD::RejectionReason::stillBeingProcessed);
195  int map_track_uid = AmbiguityProcessor::getUid();
196  scoreTrackFitflagMap.emplace(scoreTrack.second, TrackPtr(scoreTrack.first, map_track_uid) );
197  AmbiguityProcessorBase::m_observerTool->addSubTrack(map_track_uid, input_track_uid, *scoreTrack.first);
198  }
199  else{
200  scoreTrackFitflagMap.emplace(scoreTrack.second, TrackPtr(scoreTrack.first) );
201  }
202  stat.incrementCounterByRegion(CounterIndex::kNcandidates,scoreTrack.first);
203  }
204  const EventContext& ctx = Gaudi::Hive::currentContext();
205  UniqueClusterSplitProbabilityContainerPtr splitProbContainer(createAndRecordClusterSplitProbContainer(ctx));
206  ATH_MSG_DEBUG ("Starting to solve tracks");
207  // now loop as long as map is not empty
208  while ( !scoreTrackFitflagMap.empty() ){
209  // get current best candidate
210  TrackScoreMap::iterator itnext = scoreTrackFitflagMap.begin();
211  int uid = itnext->second.getUid();
212  TrackPtr atrack( std::move(itnext->second), uid );
213  float ascore = itnext->first;
214  scoreTrackFitflagMap.erase(itnext);
215  // clean it out to make sure not to many shared hits
216  ATH_MSG_DEBUG ("--- Trying next track "<<atrack.track()<<"\t with score "<<-ascore);
217  std::unique_ptr<Trk::Track> cleanedTrack;
218  int cleanedTrack_uid = AmbiguityProcessor::getUid();
219  const auto &[cleanedTrack_tmp, keepOriginal] = m_selectionTool->getCleanedOutTrack( atrack.track() , -ascore, *splitProbContainer, prdToTrackMap, uid, cleanedTrack_uid);
220  cleanedTrack.reset(cleanedTrack_tmp);
221  ATH_MSG_DEBUG ("--- cleaned next track "<< cleanedTrack.get());
222  // cleaned track is input track and fitted
223  if (keepOriginal && atrack.fitted()){
224  // track can be kept as is and is already fitted
225  ATH_MSG_DEBUG ("Accepted track "<<atrack.track()<<"\t has score "<<-ascore);
226  stat.incrementCounterByRegion(CounterIndex::kNaccepted, atrack.track() );
227  if (m_tryBremFit && atrack.track()->info().trackProperties(Trk::TrackInfo::BremFit)) {
228  stat.incrementCounterByRegion(CounterIndex::kNacceptedBrem,atrack.track());
229  }
230 
231  // add track to PRD_AssociationTool
232  StatusCode sc = m_assoTool->addPRDs(prdToTrackMap, *atrack);
233  if (sc.isFailure()) ATH_MSG_ERROR( "addPRDs() failed" );
234  // add to output list
235  finalTracks.push_back( atrack.release() );
236  } else if ( keepOriginal){
237  // track can be kept as is, but is not yet fitted
238  ATH_MSG_DEBUG ("Good track ("<< atrack.track() << ") but need to fit this track first, score, add it into map again and retry ! ");
239  int refittedTrack_uid = AmbiguityProcessor::getUid();
240  Trk::Track * pRefittedTrack = refitTrack(atrack.track(),prdToTrackMap, stat, uid, refittedTrack_uid);
241  if(pRefittedTrack) {
245  if (m_keepHolesFromBeforeFit && atrack.track()->trackSummary()) pRefittedTrack->setTrackSummary(std::make_unique<Trk::TrackSummary>(*atrack.track()->trackSummary()));
246  addTrack( pRefittedTrack, true , scoreTrackFitflagMap, trackDustbin, stat, refittedTrack_uid);
247  }
248  // remove original copy, but delay removal since some pointer to it or its constituents may still be in used
249  if (atrack.newTrack()) {
250  trackDustbin.emplace_back(atrack.release());
251  }
252  } else if ( cleanedTrack ) {//cleanedTrack != atrack
253  ATH_MSG_DEBUG ("Candidate excluded, add subtrack to map. Track "<<cleanedTrack.get());
254  stat.incrementCounterByRegion(CounterIndex::kNsubTrack,cleanedTrack.get());
255  // for this case clenedTrack is a new created object.
256  addTrack(cleanedTrack.release(), false, scoreTrackFitflagMap, trackDustbin, stat, cleanedTrack_uid);
257  // remove original copy, but delay removal since some pointer to it or its constituents may still be in used
258  if (atrack.newTrack()) {
259  trackDustbin.emplace_back(atrack.release() );
260  }
261  } else {
262  // track should be discarded
263  ATH_MSG_DEBUG ("Track "<< atrack.track() << " is excluded, no subtrack, reject");
264  stat.incrementCounterByRegion(CounterIndex::kNnoSubTrack,atrack.track());
265  // remove original copy, but delay removal since some pointer to it or its constituents may still be in used
266  if (atrack.newTrack()) {
267  trackDustbin.emplace_back(atrack.release());
268  }
269  }
270  }
271  ATH_MSG_DEBUG ("Finished, number of track on output: "<<finalTracks.size());
272 }
273 
274 
275 
276 //==================================================================================================
277 
278 Trk::Track*
280  Trk::PRDtoTrackMap &prdToTrackMap,
281  Counter &stat) const{
282  // get vector of PRDs
283  // @TODO ensured that prds on track are registered for this track ?
284  const auto & prds = m_assoTool->getPrdsOnTrack(prdToTrackMap,*track);
285  if ( prds.empty() ) {
286  ATH_MSG_WARNING( "No PRDs on track");
287  return nullptr;
288  }
289  ATH_MSG_VERBOSE ("Track "<<track<<"\t has "<<prds.size()<<"\t PRDs");
290  const TrackParameters* par = getTrackParameters(track);
291  if (not par) return nullptr;
292  //
293  // refit using first parameter, do outliers
294  std::unique_ptr<Trk::Track> newTrack;
295  if (m_tryBremFit and track->info().trackProperties(Trk::TrackInfo::BremFit)){
296  stat.incrementCounterByRegion(CounterIndex::kNbremFits,track);
297  ATH_MSG_VERBOSE ("Brem track, refit with electron brem fit");
298  //revert once GlobalChi2Fitter properly handles brem fits when starting from prds
299  // newTrack = fit(prds, *par, true, Trk::electron);
300  newTrack = doBremRefit(*track);
301  } else {
302  stat.incrementCounterByRegion(CounterIndex::kNfits,track);
303  ATH_MSG_VERBOSE ("Normal track, refit");
304  newTrack = fit(prds, *par, true, m_particleHypothesis);
305  if ((not newTrack) and shouldTryBremRecovery(*track, par)){
306  stat.incrementCounterByRegion(CounterIndex::kNrecoveryBremFits,track);
307  ATH_MSG_VERBOSE ("Normal fit failed, try brem recovery");
308  //revert once GlobalChi2Fitter properly handles brem fits when starting from prds
309  //newTrack = fit(prds, *par, true, Trk::electron);
310  newTrack = doBremRefit(*track);
311  }
312  }
313  if(newTrack) {
314  stat.incrementCounterByRegion(CounterIndex::kNgoodFits,newTrack.get());
315  //keeping the track of previously accumulated TrackInfo
316  const Trk::TrackInfo& originalInfo = track->info();
317  newTrack->info().addPatternReco(originalInfo);
318  } else {
319  stat.incrementCounterByRegion(CounterIndex::kNfailedFits,track);
320  }
321  return newTrack.release();
322 }
323 
324 
325 void
327  auto parseFileName=[](const std::string & fullname){
328  auto dotPosition = fullname.rfind('.');
329  auto slashPosition = fullname.rfind('/');
330  auto stringLength = dotPosition - slashPosition;
331  return fullname.substr(slashPosition, stringLength);
332  };
333  // @TODO restore ios
334  std::streamsize ss = out.precision();
335  int iw=9;
336  out << "Output from ";
337  out << parseFileName(__FILE__);
338  out << "::";
339  out << __func__;
340  out << "\n";
341  out << "------------------------------------------------------------------------------------" << "\n";
342  out << " Number of events processed : "<< m_stat.globalCount(Counter::nEvents) << "\n";
343  if (const auto nInvalid = m_stat.globalCount(Counter::nInvalidTracks); nInvalid>0) {
344  out << " Number of invalid tracks : "<< nInvalid<< "\n";
345  }
346  if (const auto nNoParams = m_stat.globalCount(Counter::nTracksWithoutParam); nNoParams>0) {
347  out << " Tracks without parameters : "<< nNoParams << "\n";
348  }
349  out << " statistics by eta range ------All---Barrel---Trans.-- Endcap-- Forwrd-- " << "\n";
350  out << "------------------------------------------------------------------------------------" << "\n";
351  out << m_stat.dumpRegions( " Number of candidates at input :", CounterIndex::kNcandidates,iw);
352  out << "------------------------------------------------------------------------------------" << "\n";
353  out << m_stat.dumpRegions( " candidates with good score :", CounterIndex::kNscoreOk,iw);
354  if (m_tryBremFit) {
355  out << m_stat.dumpRegions( " + recovered after brem refit :", CounterIndex::kNscoreZeroBremRefit,iw);
356  }
357  out << m_stat.dumpRegions( " candidates rejected score 0 :", CounterIndex::kNscoreZero,iw);
358  if (m_tryBremFit) {
359  out << m_stat.dumpRegions( " + m refit :", CounterIndex::kNscoreZeroBremRefitFailed,iw);
360  out << m_stat.dumpRegions( " + rejected brem refit score 0 :", CounterIndex::kNscoreZeroBremRefitScoreZero,iw);
361  }
362  out << "------------------------------------------------------------------------------------" << "\n";
363  out << m_stat.dumpRegions( " number of normal fits :" , CounterIndex::kNfits,iw);
364  if (m_tryBremFit) {
365  out << m_stat.dumpRegions( " + 2nd brem fit for failed fit :", CounterIndex::kNrecoveryBremFits,iw);
366  out << m_stat.dumpRegions( " normal brem fits for electrons :", CounterIndex::kNbremFits,iw);
367  }
368  out << "------------------------------------------------------------------------------------" << "\n";
369  out << m_stat.dumpRegions( " sum of succesful fits :", CounterIndex::kNgoodFits,iw);
370  out << m_stat.dumpRegions( " sum of failed fits :", CounterIndex::kNfailedFits,iw);
371  out << "------------------------------------------------------------------------------------" << "\n";
372  out << m_stat.dumpRegions( " Number of subtracks created :", CounterIndex::kNsubTrack,iw);
373  out << m_stat.dumpRegions( " Number of candidates excluded :", CounterIndex::kNnoSubTrack,iw);
374  out << "------------------------------------------------------------------------------------" << "\n";
375  out << m_stat.dumpRegions( " Number of tracks accepted :", CounterIndex::kNaccepted,iw);
376  if (m_tryBremFit) {
377  out << m_stat.dumpRegions( " including number of brem fits :", CounterIndex::kNacceptedBrem,iw);
378  }
379  out << "------------------------------------------------------------------------------------" << "\n";
380  out << std::setiosflags(std::ios::fixed | std::ios::showpoint) << std::setprecision(2)
381  << " definition: ( 0.0 < Barrel < " << m_etaBounds[Counter::iBarrel] << " < Transition < " << m_etaBounds[Counter::iTransi]
382  << " < Endcap < " << m_etaBounds[Counter::iEndcap] << " < Forward < " << m_etaBounds[Counter::iForwrd] << " )" << "\n";
383  out << "------------------------------------------------------------------------------------" << "\n";
384  out << std::setprecision(ss);
385 }
386 
387 std::unique_ptr<Trk::Track>
389  return std::unique_ptr<Trk::Track>(fit(track,true,Trk::electron));
390 }
391 
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
Trk::DenseEnvironmentsAmbiguityProcessorTool::DenseEnvironmentsAmbiguityProcessorTool
DenseEnvironmentsAmbiguityProcessorTool(const std::string &, const std::string &, const IInterface *)
Definition: DenseEnvironmentsAmbiguityProcessorTool.cxx:41
Trk::TrackInfo
Contains information about the 'fitter' of this track.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:32
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
Trk::AmbiguityProcessorBase::m_pTminBrem
float m_pTminBrem
Definition: AmbiguityProcessorBase.h:160
Trk::ParticleSwitcher::particle
constexpr ParticleHypothesis particle[PARTICLEHYPOTHESES]
the array of masses
Definition: ParticleHypothesis.h:76
TrackScoringTool.h
Trk::TrackPtr::release
Trk::Track * release()
Definition: TrackPtr.h:41
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
TrackParameters.h
PowhegControl_ttHplus_NLO.ss
ss
Definition: PowhegControl_ttHplus_NLO.py:83
Trk::DenseEnvironmentsAmbiguityProcessorTool::finalize
virtual StatusCode finalize() override
Definition: DenseEnvironmentsAmbiguityProcessorTool.cxx:109
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
Trk::AmbiguityProcessorBase::m_etaBounds
std::vector< float > m_etaBounds
eta intervals for internal monitoring
Definition: AmbiguityProcessorBase.h:128
Trk::PRDtoTrackMap
Definition: PRDtoTrackMap.h:17
SG::ReadHandle< Trk::PRDtoTrackMap >
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
Trk::Track::info
const TrackInfo & info() const
Returns a const ref to info of a const tracks.
Trk::AmbiguityProcessorBase::UniqueClusterSplitProbabilityContainerPtr
std::unique_ptr< Trk::ClusterSplitProbabilityContainer, void(*)(Trk::ClusterSplitProbabilityContainer *)> UniqueClusterSplitProbabilityContainerPtr
Definition: AmbiguityProcessorBase.h:115
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:71
Trk::DenseEnvironmentsAmbiguityProcessorTool::checkTrack
bool checkTrack(const Trk::Track *) const
Definition: DenseEnvironmentsAmbiguityProcessorTool.cxx:18
Trk::DenseEnvironmentsAmbiguityProcessorTool::dumpStat
void dumpStat(MsgStream &out) const
Definition: DenseEnvironmentsAmbiguityProcessorTool.cxx:326
Trk::TrackPtr::newTrack
Trk::Track * newTrack()
Definition: TrackPtr.h:58
Trk::DenseEnvironmentsAmbiguityProcessorTool::solveTracks
void solveTracks(const TracksScores &trackScoreTrackMap, Trk::PRDtoTrackMap &prd_to_track_map, TrackCollection &finalTracks, std::vector< std::unique_ptr< const Trk::Track > > &trackDustbin, Counter &stat) const
Definition: DenseEnvironmentsAmbiguityProcessorTool.cxx:184
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
Trk::AmbiguityProcessorBase::m_refitPrds
bool m_refitPrds
Definition: AmbiguityProcessorBase.h:164
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
Trk::AmbiguityProcessorBase::m_observerTool
PublicToolHandle< Trk::ITrkObserverTool > m_observerTool
Observer tool This tool is used to observe the tracks and their 'score'.
Definition: AmbiguityProcessorBase.h:140
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
Trk::TrackPtr::track
const Trk::Track * track() const
Definition: TrackPtr.h:54
Trk::DenseEnvironmentsAmbiguityProcessorTool::refitPrds
virtual Track * refitPrds(const Track *track, Trk::PRDtoTrackMap &prd_to_track_map, Counter &stat) const override final
refit PRDs
Definition: DenseEnvironmentsAmbiguityProcessorTool.cxx:279
Trk::TrackInfo::addPatternReco
void addPatternReco(const TrackInfo &)
A method adding just pattern recognition info without adding the actual properties.
xAOD::addTrack
@ addTrack
Definition: TrackingPrimitives.h:465
Trk::AmbiguityProcessorBase
Definition: AmbiguityProcessorBase.h:36
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
ActsUtils::dumpStat
void dumpStat(T_Stream &out, const Stat &stat)
Dump the given statistics object to the given output stream.
Definition: StatUtils.h:62
lumiFormat.i
int i
Definition: lumiFormat.py:92
TrackCollection
DataVector< Trk::Track > TrackCollection
This typedef represents a collection of Trk::Track objects.
Definition: TrackCollection.h:19
beamspotman.n
n
Definition: beamspotman.py:731
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
TrackCollection.h
Trk::TrackPtr
Definition: TrackPtr.h:10
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
nEvents
int nEvents
Definition: fbtTestBasics.cxx:77
xAOD::stillBeingProcessed
@ stillBeingProcessed
Definition: TrackingPrimitives.h:474
TrackSummary.h
Trk::DenseEnvironmentsAmbiguityProcessorTool::doBremRefit
virtual std::unique_ptr< Trk::Track > doBremRefit(const Trk::Track &track) const override final
Definition: DenseEnvironmentsAmbiguityProcessorTool.cxx:388
Trk::TrackInfo::BremFit
@ BremFit
A brem fit was performed on this track.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:78
Trk::ParametersBase
Definition: ParametersBase.h:55
Trk::DenseEnvironmentsAmbiguityProcessorTool::process
virtual const TrackCollection * process(const TracksScores *trackScoreTrackMap) const override
Returns a processed TrackCollection from the passed 'tracks'.
Definition: DenseEnvironmentsAmbiguityProcessorTool.cxx:129
DataVector< Trk::Track >
beamspotman.stat
stat
Definition: beamspotman.py:266
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
MuonValidation_CreateResolutionProfiles.fit
def fit(h, emin, emax)
Definition: MuonValidation_CreateResolutionProfiles.py:69
Trk::AmbiguityProcessorBase::m_tryBremFit
bool m_tryBremFit
brem recovery mode with brem fit ?
Definition: AmbiguityProcessorBase.h:158
IPRD_AssociationTool.h
TrackInfo.h
createCoolChannelIdFile.par
par
Definition: createCoolChannelIdFile.py:29
RIO_OnTrack.h
Trk::DenseEnvironmentsAmbiguityProcessorTool::statistics
virtual void statistics() override
statistics output to be called by algorithm during finalize.
Definition: DenseEnvironmentsAmbiguityProcessorTool.cxx:114
Trk::AmbiguityProcessorBase::m_suppressHoleSearch
bool m_suppressHoleSearch
Definition: AmbiguityProcessorBase.h:161
Trk::AmbiguityProcessorBase::m_matEffects
int m_matEffects
read in as an integer and convert to particle hypothesis
Definition: AmbiguityProcessorBase.h:170
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
Trk::DenseEnvironmentsAmbiguityProcessorTool::~DenseEnvironmentsAmbiguityProcessorTool
virtual ~DenseEnvironmentsAmbiguityProcessorTool()
Trk::TracksScores
std::vector< std::pair< const Track *, float > > TracksScores
Definition: ITrackAmbiguityProcessorTool.h:18
Trk::AmbiguityProcessorBase::m_forceRefit
bool m_forceRefit
by default tracks at input get refitted
Definition: AmbiguityProcessorBase.h:166
Trk::DenseEnvironmentsAmbiguityProcessorTool::initialize
virtual StatusCode initialize() override
Definition: DenseEnvironmentsAmbiguityProcessorTool.cxx:68
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
Trk::Track::trackSummary
const Trk::TrackSummary * trackSummary() const
Returns a pointer to the const Trk::TrackSummary owned by this const track (could be nullptr)
Trk::DenseEnvironmentsAmbiguityProcessorTool::m_fitterTool
ToolHandleArray< ITrackFitter > m_fitterTool
refitting tool - used to refit tracks once shared hits are removed.
Definition: DenseEnvironmentsAmbiguityProcessorTool.h:88
AmbiguityProcessor::getUid
int getUid()
Definition: AmbiguityProcessorUtility.cxx:60
Trk::AmbiguityProcessorBase::m_suppressTrackFit
bool m_suppressTrackFit
Definition: AmbiguityProcessorBase.h:163
Trk::Track::setTrackSummary
void setTrackSummary(std::unique_ptr< Trk::TrackSummary > input)
Set the track summary.
Trk::TrackPtr::fitted
bool fitted() const
Definition: TrackPtr.h:76
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
Trk::AmbiguityProcessorBase::m_caloSeededBrem
bool m_caloSeededBrem
Definition: AmbiguityProcessorBase.h:159
get_generator_info.error
error
Definition: get_generator_info.py:40
test_pyathena.counter
counter
Definition: test_pyathena.py:15
error
Definition: IImpactPoint3dEstimator.h:70
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
Trk::TrackInfo::trackProperties
bool trackProperties(const TrackProperties &property) const
Access methods for track properties.
python.AutoConfigFlags.msg
msg
Definition: AutoConfigFlags.py:7
xAOD::refitTrack
@ refitTrack
Definition: TrackingPrimitives.h:463
xAOD::solveTracks
@ solveTracks
Definition: TrackingPrimitives.h:459
AmbiCounter
Definition: AmbiCounter.h:16
DenseEnvironmentsAmbiguityProcessorTool.h
Trk::AmbiguityProcessorBase::TrackScoreMap
std::multimap< TrackScore, TrackPtr > TrackScoreMap
Definition: AmbiguityProcessorBase.h:59