ATLAS Offline Software
SimpleAmbiguityProcessorTool.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 
14 #include <map>
15 #include <memory>
17 
18 
19 //==================================================================================================
21  const std::string& n,
22  const IInterface* p )
23  :
25  // statistics stuff
26 
27  declareInterface<ITrackAmbiguityProcessorTool>(this);
28  declareProperty("DropDouble" , m_dropDouble = true);
29  declareProperty("ForceRefit" , m_forceRefit = true);
30  declareProperty("RefitPrds" , m_refitPrds = false);
31  declareProperty("MatEffects" , m_matEffects = 3); // pion
32  declareProperty("SuppressHoleSearch" , m_suppressHoleSearch = false);
33  declareProperty("SuppressTrackFit" , m_suppressTrackFit = false);
34  declareProperty("tryBremFit" , m_tryBremFit = false);
35  declareProperty("caloSeededBrem" , m_caloSeededBrem = false);
36  declareProperty("pTminBrem" , m_pTminBrem = 1000.);
37  declareProperty("etaBounds" , m_etaBounds,"eta intervals for internal monitoring");
38 
39 }
40 //==================================================================================================
41 
43 = default;
44 //==================================================================================================
45 
48  if (sc.isFailure()) {
49  ATH_MSG_FATAL( "AlgTool::initialise failed" );
50  return StatusCode::FAILURE;
51  }
52  // the association tool can be disabled if for this processor instance a PRD-to-track map is provided by the caller.
53  ATH_CHECK( m_assoTool.retrieve() );
54  ATH_CHECK( m_trackSummaryTool.retrieve( DisableTool{ m_trackSummaryTool.name().empty() } ) );
55  ATH_CHECK( m_scoringTool.retrieve());
56  ATH_CHECK( m_selectionTool.retrieve());
57  ATH_CHECK( m_fitterTool.retrieve());
58  // suppress refit overwrites force refit
59  if (m_forceRefit && m_suppressTrackFit ) {
60  ATH_MSG_WARNING( "Inconsistent parameter settings, forced refit is true, but fitting suppressed, resetting force refit !" );
61  m_forceRefit = false;
62  }
63  // Print out memo that tracks have to be fitted
64  if (!m_forceRefit) {
65  ATH_MSG_DEBUG( "The forced refit of Tracks is switched off." );
66  ATH_MSG_DEBUG( "Ensure that the tracks are fitted after the ambiguity processing!");
67  }
68  // Configuration of the material effects
69  m_particleHypothesis = Trk::ParticleSwitcher::particle[m_matEffects];
70  // brem fitting enabled ?
71  if (m_tryBremFit) {
72  ATH_MSG_DEBUG( "Try brem fit and recovery for electron like tracks.");
73  }
74 
75  // statistics
76  if (m_etaBounds.size() != Counter::nRegions) {
77  ATH_MSG_ERROR( "There must be exactly " << Counter::nRegions
78  << " etaBounds: barrel end, transition region end, end-cap end, forward, and the-restaurant-at-the-end-of-the-world." );
79  return StatusCode::FAILURE;
80  }
81  if (initializeClusterSplitProbContainer().isFailure()) {
82  sc=StatusCode::FAILURE;
83  }
84  return sc;
85 }
86 
87 //==================================================================================================
89  return StatusCode::SUCCESS;
90 }
91 
93  if (msgLvl(MSG::DEBUG)) {
94  MsgStream &out=msg(MSG::DEBUG);
95  out << " -- statistics:" << "\n";
96  std::lock_guard<std::mutex> lock( m_statMutex );
97  dumpStat(out);
98  out << endmsg;
99  }
100 }
101 
102 
103 //==================================================================================================
107 const TrackCollection*
109  return processVector(*trackCol, prdToTrackMap);
110 }
111 
112 
113 const TrackCollection*
116  tracks.reserve(tracksScores->size());
117  for(const std::pair<const Trk::Track *, float>& e: *tracksScores){
118  tracks.push_back(e.first);
119  }
120  const TrackCollection* re_tracks = processVector(*tracks.asDataVector(),nullptr /* no external PRD-to-track map*/);
121  return re_tracks;
122 }
123 
124 const TrackCollection*
126  TrackScoreMap trackScoreTrackMap;
127  std::unique_ptr<Trk::PRDtoTrackMap> prdToTrackMap_cleanup;
128  if (!prdToTrackMap) {
129  // create internal PRD-to-track map
130  prdToTrackMap_cleanup = m_assoTool->createPRDtoTrackMap();
131  prdToTrackMap = prdToTrackMap_cleanup.get();
132  }
133  //put tracks into maps etc
134  ATH_MSG_DEBUG ("Adding input track candidates to list");
135  Counter stat(m_etaBounds);
136  addNewTracks(tracks, trackScoreTrackMap, *prdToTrackMap);
137  // going to do simple algorithm for now:
138  // - take track with highest score
139  // - remove shared hits from all other tracks
140  // - take next highest scoring tracks, and repeat
141  ATH_MSG_DEBUG ("Solving Tracks");
142  std::vector<std::unique_ptr<const Trk::Track> > trackDustbin;
143  const TrackCollection* finalTracks = solveTracks(trackScoreTrackMap, *prdToTrackMap,trackDustbin, stat);
144  {
145  std::lock_guard<std::mutex> lock(m_statMutex);
146  m_stat += stat;
147  }
148  if (msgLvl(MSG::DEBUG)) dumpTracks(*finalTracks);
149  return finalTracks;
150 }
151 
152 //==================================================================================================
154  TrackScoreMap& trackScoreTrackMap,
155  Trk::PRDtoTrackMap &prdToTrackMap) const {
156  Counter stat(m_etaBounds);
157  stat.newEvent();
158  //
159  ATH_MSG_DEBUG ("Number of tracks at Input: "<<tracks.size());
161  PrdSignatureSet prdSigSet;
162  //map the two lowest categories (zero score, duplicate track) onto the counter categories
163  const std::array<CounterIndex, 2> categoryMapping {CounterIndex::kNcandScoreZero, CounterIndex::kNcandDouble};
164  for(const Track *pTrack : tracks) {
165  stat.incrementCounterByRegion(CounterIndex::kNcandidates,pTrack);
166  TrackScore score = m_scoringTool->score( *pTrack );
167  const auto category =
168  AmbiguityProcessor::categoriseTrack(*pTrack, score, m_dropDouble,
169  m_assoTool, prdToTrackMap, prdSigSet);
170  if (category < categoryMapping.size()) {
171  stat.incrementCounterByRegion(categoryMapping[category],pTrack);
172  }
173  ATH_MSG_DEBUG(AmbiguityProcessor::debugMessage[category]);
175  ATH_MSG_VERBOSE ("Track ("<< pTrack <<") has score "<<score);
176  TrackPtr ptr(pTrack);
177  if (!m_forceRefit) ptr.forceFitted();
178  trackScoreTrackMap.insert( std::make_pair(-score,std::move(ptr)) );
179  }
180  }
181  ATH_MSG_DEBUG ("Number of tracks in map:"<<trackScoreTrackMap.size());
182  {
183  std::lock_guard<std::mutex> lock(m_statMutex);
184  m_stat += stat;
185  }
186 }
187 
188 
189 
190 //==================================================================================================
191 
192 const TrackCollection *
194  Trk::PRDtoTrackMap &prdToTrackMap,
195  std::vector<std::unique_ptr<const Trk::Track> >& trackDustbin,
196  Counter &stat) const{
197  const EventContext& ctx = Gaudi::Hive::currentContext();
198  UniqueClusterSplitProbabilityContainerPtr splitProbContainer(createAndRecordClusterSplitProbContainer(ctx));
199 
200  std::unique_ptr<ConstDataVector<TrackCollection> > finalTracks(std::make_unique<ConstDataVector<TrackCollection> >());
201 
202  ATH_MSG_DEBUG ("Starting to solve tracks");
203  // now loop as long as map is not empty
204  while ( !trackScoreTrackMap.empty() ){
205  // get current best candidate
206  TrackScoreMap::iterator itnext = trackScoreTrackMap.begin();
207  TrackScore ascore(itnext->first);
208  TrackPtr atrack(std::move(itnext->second));
209  trackScoreTrackMap.erase(itnext);
210  // clean it out to make sure not to many shared hits
211  ATH_MSG_VERBOSE ("--- Trying next track "<<atrack.track()<<"\t with score "<<-ascore);
212  std::unique_ptr<Trk::Track> cleanedTrack;
213  auto [cleanedTrack_tmp,keep_orig] = m_selectionTool->getCleanedOutTrack( atrack.track() , -(ascore), *splitProbContainer, prdToTrackMap, -1, -1);
214  cleanedTrack.reset( cleanedTrack_tmp);
215  // cleaned track is input track and fitted
216  if (keep_orig && atrack.fitted() ){
217  // track can be kept as is and is already fitted
218  ATH_MSG_DEBUG ("Accepted track "<<atrack.track()<<"\t has score "<<-(ascore));
219  // statistic
220  stat.incrementCounterByRegion(CounterIndex::kNaccepted,atrack.track());
221  if (m_tryBremFit && atrack->info().trackProperties(Trk::TrackInfo::BremFit)) stat.incrementCounterByRegion(CounterIndex::kNacceptedBrem,atrack.track());
222  // add track to PRD_AssociationTool
223  if (m_assoTool->addPRDs(prdToTrackMap, *atrack.track()).isFailure()) ATH_MSG_ERROR("addPRDs() failed" );
224  // add to output list
225  finalTracks->push_back( atrack.release() );
226  } else if ( keep_orig ) {
227  // don't forget to drop track from map
228  // track can be kept as is, but is not yet fitted
229  ATH_MSG_DEBUG ("Good track, but need to fit this track first, score, add it into map again and retry !");
230  auto *pRefittedTrack = refitTrack(atrack.track(), prdToTrackMap, stat, -1, -1);
231  if(pRefittedTrack) {
232  addTrack( pRefittedTrack, true , trackScoreTrackMap, trackDustbin, stat, -1);
233  }
234  if (atrack.newTrack()) {
235  trackDustbin.emplace_back(atrack.release());
236  }
237  // delete original copy
238  } else if ( cleanedTrack ) {
239  // now delete original track
240  if (atrack.newTrack()) {
241  trackDustbin.emplace_back(atrack.release());
242  }
243  // don't forget to drop track from map
244  // stripped down version should be reconsidered
245  ATH_MSG_DEBUG ("Candidate excluded, add subtrack to map. Track "<<cleanedTrack.get());
246  // statistic
247  stat.incrementCounterByRegion(CounterIndex::kNsubTrack,cleanedTrack.get());
248  // track needs fitting !
249  addTrack( cleanedTrack.release(), false, trackScoreTrackMap, trackDustbin, stat, -1);
250  } else {
251  // track should be discarded
252  ATH_MSG_DEBUG ("Track "<< atrack.track() << " is excluded, no subtrack, reject");
253  // statistic
254  stat.incrementCounterByRegion(CounterIndex::kNnoSubTrack,atrack.track());
255  if (atrack.newTrack()) {
256  trackDustbin.emplace_back(atrack.release());
257  }
258  // don't forget to drop track from map
259  }
260  }
261  ATH_MSG_DEBUG ("Finished, number of track on output: "<<finalTracks->size());
262  return finalTracks.release()->asDataVector();
263 }
264 
265 
266 //==================================================================================================
267 
268 Trk::Track*
270  Trk::PRDtoTrackMap &prdToTrackMap,
271  Counter &stat) const{
272  // get vector of PRDs
273  std::vector<const Trk::PrepRawData*> prds = m_assoTool->getPrdsOnTrack(prdToTrackMap,*track);
274  if ( prds.empty() ) {
275  ATH_MSG_WARNING( "No PRDs on track");
276  return nullptr;
277  }
278  const TrackParameters* par = getTrackParameters(track);
279  if (not par) return nullptr;
280  // refit using first parameter, do outliers
281  Trk::Track* newTrack = nullptr;
282  if (m_tryBremFit && track->info().trackProperties(Trk::TrackInfo::BremFit)){
283  stat.incrementCounterByRegion(CounterIndex::kNbremFits,track);
284  ATH_MSG_VERBOSE ("Brem track, refit with electron brem fit");
285  newTrack = m_fitterTool->fit(Gaudi::Hive::currentContext(),prds, *par, true, Trk::electron).release();
286  } else {
287  stat.incrementCounterByRegion(CounterIndex::kNfits,track);
288  ATH_MSG_VERBOSE ("Normal track, refit");
289  newTrack = m_fitterTool->fit(Gaudi::Hive::currentContext(),prds, *par, true, m_particleHypothesis).release();
290  if ((not newTrack) and shouldTryBremRecovery(*track, par)){
291  stat.incrementCounterByRegion(CounterIndex::kNrecoveryBremFits,track);
292  ATH_MSG_VERBOSE ("Normal fit failed, try brem recovery");
293  newTrack = m_fitterTool->fit(Gaudi::Hive::currentContext(),prds, *par, true, Trk::electron).release();
294  }
295  }
296  if(newTrack){
297  stat.incrementCounterByRegion(CounterIndex::kNgoodFits,newTrack);
298  //keeping the track of previously accumulated TrackInfo
299  const Trk::TrackInfo& originalInfo = track->info();
300  newTrack->info().addPatternReco(originalInfo);
301  } else {
302  stat.incrementCounterByRegion(CounterIndex::kNfailedFits,track);
303  }
304  return newTrack;
305 }
306 
307 
308 //==================================================================================================
309 
311  ATH_MSG_VERBOSE ("Dumping tracks in collection");
312  int num=0;
313  TrackScore totalScore = 0;
315  TrackCollection::const_iterator itEnd = tracks.end();
316  for (; it != itEnd ; ++it){
317  // score track:
318  const TrackScore score = m_scoringTool->score( **it );
319  ATH_MSG_VERBOSE (num++<<"\tTrack :"<<*it<<"\tScore: "<<score);
320  totalScore+=score;
321  }
322  ATH_MSG_DEBUG ("Total event score : "<<totalScore);
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 = std::cout.precision();
335  out << "Output from ";
336  out << parseFileName(__FILE__);
337  out << "::";
338  out << __func__;
339  out << "\n";
340  out << "---------------------------------------------------------------------------------" << "\n";
341  out << " Number of events processed : "<< m_stat.numberOfEvents() << "\n";
342  out << " statistics by eta range ------All---Barrel---Trans.--- Endcap---Fwd---" << "\n";
343  out << "---------------------------------------------------------------------------------" << "\n";
344  out << m_stat.dumpRegions( " Number of candidates at input :", CounterIndex::kNcandidates);
345  out << m_stat.dumpRegions( " - candidates rejected score 0 :", CounterIndex::kNcandScoreZero);
346  out << m_stat.dumpRegions( " - candidates rejected as double :", CounterIndex::kNcandDouble);
347  out << "---------------------------------------------------------------------------------" << "\n";
348  out << m_stat.dumpRegions( " candidates with good score :", CounterIndex::kNscoreOk);
349  if (m_tryBremFit) {
350  out << m_stat.dumpRegions(" + recovered after brem refit :", CounterIndex::kNscoreZeroBremRefit);
351  }
352  out << m_stat.dumpRegions( " candidates rejected score 0 :", CounterIndex::kNscoreZero);
353  if (m_tryBremFit) {
354  out << m_stat.dumpRegions(" + rejected failed brem refit :", CounterIndex::kNscoreZeroBremRefitFailed);
355  }
356  out << "---------------------------------------------------------------------------------" << "\n";
357  out << m_stat.dumpRegions( " number of normal fits :", CounterIndex::kNfits);
358  if (m_tryBremFit) {
359  out << m_stat.dumpRegions(" + 2nd brem fit for failed fit :", CounterIndex::kNrecoveryBremFits);
360  out << m_stat.dumpRegions(" normal brem fits for electrons :", CounterIndex::kNbremFits);
361  }
362  out << "---------------------------------------------------------------------------------" << "\n";
363  out << m_stat.dumpRegions( " sum of succesful fits :", CounterIndex::kNgoodFits);
364  out << m_stat.dumpRegions( " sum of failed fits :", CounterIndex::kNfailedFits);
365  out << "---------------------------------------------------------------------------------" << "\n";
366  out << m_stat.dumpRegions( " Number of subtracks created :", CounterIndex::kNsubTrack);
367  out << m_stat.dumpRegions( " Number of candidates excluded :", CounterIndex::kNnoSubTrack);
368  out << "---------------------------------------------------------------------------------" << "\n";
369  out << m_stat.dumpRegions( " Number of tracks accepted :", CounterIndex::kNaccepted);
370  if (m_tryBremFit) {
371  out << m_stat.dumpRegions(" including number of brem fits :", CounterIndex::kNacceptedBrem);
372  }
373  out << "---------------------------------------------------------------------------------" << "\n";
374  out << std::setiosflags(std::ios::fixed | std::ios::showpoint) << std::setprecision(2)
375  << " definition: ( 0.0 < Barrel < " << m_etaBounds[Counter::iBarrel] << " < Transition < " << m_etaBounds[Counter::iTransi]
376  << " < Endcap < " << m_etaBounds[Counter::iEndcap] << " FWD )" << "\n";
377  out << "-------------------------------------------------------------------------------" << "\n";
378  out.precision (ss);
379 }
380 
381 
382 std::unique_ptr<Trk::Track>
384  return m_fitterTool->fit(Gaudi::Hive::currentContext(),track,true,Trk::electron);
385 }
386 
387 std::unique_ptr<Trk::Track>
389  return m_fitterTool->fit(Gaudi::Hive::currentContext(),track,flag,hypo);
390 }
391 
392 
393 
394 
395 
Trk::SimpleAmbiguityProcessorTool::processVector
const TrackCollection * processVector(const TrackCollection &tracks, Trk::PRDtoTrackMap *prdToTrackMap) const
Definition: SimpleAmbiguityProcessorTool.cxx:125
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
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
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
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
AmbiguityProcessor::TrackAccepted
@ TrackAccepted
Definition: AmbiguityProcessorUtility.h:24
TrackParameters.h
AmbiguityProcessor::categoriseTrack
TrackFilterCategory categoriseTrack(const Trk::Track &track, const Trk::TrackScore &score, const bool dropDuplicates, const AssociationTool &associate, AssociationMap &map, DuplicationCheckSet &set)
Definition: AmbiguityProcessorUtility.cxx:15
PowhegControl_ttHplus_NLO.ss
ss
Definition: PowhegControl_ttHplus_NLO.py:83
xAOD::addNewTracks
@ addNewTracks
Definition: TrackingPrimitives.h:461
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
Trk::SimpleAmbiguityProcessorTool::fit
std::unique_ptr< Trk::Track > fit(const Track &track, bool flag, Trk::ParticleHypothesis hypo) const override final
Definition: SimpleAmbiguityProcessorTool.cxx:388
Trk::AmbiguityProcessorBase::m_etaBounds
std::vector< float > m_etaBounds
eta intervals for internal monitoring
Definition: AmbiguityProcessorBase.h:128
SG::VIEW_ELEMENTS
@ VIEW_ELEMENTS
this data object is a view, it does not own its elmts
Definition: OwnershipPolicy.h:18
make_unique
std::unique_ptr< T > make_unique(Args &&... args)
Definition: SkimmingToolEXOT5.cxx:23
Trk::SimpleAmbiguityProcessorTool::refitPrds
Track * refitPrds(const Track *track, Trk::PRDtoTrackMap &prdToTrackMap, Counter &stat) const override final
refit PRDs
Definition: SimpleAmbiguityProcessorTool.cxx:269
Trk::PRDtoTrackMap
Definition: PRDtoTrackMap.h:17
ConstDataVector.h
DataVector adapter that acts like it holds const pointers.
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.
initialize
void initialize()
Definition: run_EoverP.cxx:894
Trk::AmbiguityProcessorBase::UniqueClusterSplitProbabilityContainerPtr
std::unique_ptr< Trk::ClusterSplitProbabilityContainer, void(*)(Trk::ClusterSplitProbabilityContainer *)> UniqueClusterSplitProbabilityContainerPtr
Definition: AmbiguityProcessorBase.h:115
skel.it
it
Definition: skel.GENtoEVGEN.py:423
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:71
Trk::SimpleAmbiguityProcessorTool::SimpleAmbiguityProcessorTool
SimpleAmbiguityProcessorTool(const std::string &, const std::string &, const IInterface *)
Definition: SimpleAmbiguityProcessorTool.cxx:20
Trk::SimpleAmbiguityProcessorTool::addNewTracks
void addNewTracks(const TrackCollection &tracks, TrackScoreMap &trackScoreTrackMap, Trk::PRDtoTrackMap &prdToTrackMap) const
Add passed TrackCollection, and Trk::PrepRawData from tracks to caches.
Definition: SimpleAmbiguityProcessorTool.cxx:153
Trk::SimpleAmbiguityProcessorTool::finalize
virtual StatusCode finalize() override final
Definition: SimpleAmbiguityProcessorTool.cxx:88
Trk::TrackPtr::newTrack
Trk::Track * newTrack()
Definition: TrackPtr.h:58
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::TrackPtr::forceFitted
void forceFitted()
Definition: TrackPtr.h:77
Trk::SimpleAmbiguityProcessorTool::statistics
virtual void statistics() override
statistics output to be called by algorithm during finalize.
Definition: SimpleAmbiguityProcessorTool.cxx:92
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
ConstDataVector::asDataVector
const DV * asDataVector() const
Return a pointer to this object, as a const DataVector.
Trk::TrackPtr::track
const Trk::Track * track() const
Definition: TrackPtr.h:54
Trk::ParticleHypothesis
ParticleHypothesis
Definition: ParticleHypothesis.h:25
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
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
ReweightUtils.category
category
Definition: ReweightUtils.py:15
master.flag
bool flag
Definition: master.py:29
TrackCollection.h
Trk::SimpleAmbiguityProcessorTool::process
virtual const TrackCollection * process(const TrackCollection *, Trk::PRDtoTrackMap *prdToTrackMap) const override
Returns a processed TrackCollection from the passed 'tracks'.
Definition: SimpleAmbiguityProcessorTool.cxx:108
Trk::TrackPtr
Definition: TrackPtr.h:10
Trk::SimpleAmbiguityProcessorTool::doBremRefit
virtual std::unique_ptr< Trk::Track > doBremRefit(const Trk::Track &track) const override final
do a refit assuming electron hypothesis
Definition: SimpleAmbiguityProcessorTool.cxx:383
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
Trk::ParametersBase
Definition: ParametersBase.h:55
Trk::SimpleAmbiguityProcessorTool::dumpStat
void dumpStat(MsgStream &out) const
dump the accumulated statistics
Definition: SimpleAmbiguityProcessorTool.cxx:326
DataVector< Trk::Track >
beamspotman.stat
stat
Definition: beamspotman.py:266
Trk::AmbiguityProcessorBase::m_tryBremFit
bool m_tryBremFit
brem recovery mode with brem fit ?
Definition: AmbiguityProcessorBase.h:158
IPRD_AssociationTool.h
trigbs_pickEvents.num
num
Definition: trigbs_pickEvents.py:76
Trk::SimpleAmbiguityProcessorTool::m_dropDouble
bool m_dropDouble
by default drop double tracks before refit
Definition: SimpleAmbiguityProcessorTool.h:112
TrackInfo.h
createCoolChannelIdFile.par
par
Definition: createCoolChannelIdFile.py:29
RIO_OnTrack.h
Trk::AmbiguityProcessorBase::m_suppressHoleSearch
bool m_suppressHoleSearch
Definition: AmbiguityProcessorBase.h:161
ConstDataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
Trk::AmbiguityProcessorBase::m_matEffects
int m_matEffects
read in as an integer and convert to particle hypothesis
Definition: AmbiguityProcessorBase.h:170
SimpleAmbiguityProcessorTool.h
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
xAOD::score
@ score
Definition: TrackingPrimitives.h:513
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
DiTauMassTools::MaxHistStrategyV2::e
e
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:26
Trk::SimpleAmbiguityProcessorTool::solveTracks
const TrackCollection * solveTracks(TrackScoreMap &trackScoreTrackMap, Trk::PRDtoTrackMap &prdToTrackMap, std::vector< std::unique_ptr< const Trk::Track > > &trackDustbin, Counter &stat) const
Definition: SimpleAmbiguityProcessorTool.cxx:193
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
ConstDataVector
DataVector adapter that acts like it holds const pointers.
Definition: ConstDataVector.h:76
Trk::SimpleAmbiguityProcessorTool::PrdSignatureSet
std::set< PrdSignature > PrdSignatureSet
Definition: SimpleAmbiguityProcessorTool.h:44
DEBUG
#define DEBUG
Definition: page_access.h:11
Trk::AmbiguityProcessorBase::m_suppressTrackFit
bool m_suppressTrackFit
Definition: AmbiguityProcessorBase.h:163
Trk::SimpleAmbiguityProcessorTool::dumpTracks
void dumpTracks(const TrackCollection &tracks) const
print out tracks and their scores for debugging
Definition: SimpleAmbiguityProcessorTool.cxx:310
Track
Definition: TriggerChamberClusterOnTrackCreator.h:21
Trk::TrackPtr::fitted
bool fitted() const
Definition: TrackPtr.h:76
AmbiguityProcessorUtility.h
Trk::SimpleAmbiguityProcessorTool::initialize
virtual StatusCode initialize() override final
Definition: SimpleAmbiguityProcessorTool.cxx:46
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
Trk::AmbiguityProcessorBase::m_caloSeededBrem
bool m_caloSeededBrem
Definition: AmbiguityProcessorBase.h:159
Trk::SimpleAmbiguityProcessorTool::~SimpleAmbiguityProcessorTool
virtual ~SimpleAmbiguityProcessorTool()
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
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
xAOD::solveTracks
@ solveTracks
Definition: TrackingPrimitives.h:459
AmbiCounter
Definition: AmbiCounter.h:16
Trk::AmbiguityProcessorBase::TrackScoreMap
std::multimap< TrackScore, TrackPtr > TrackScoreMap
Definition: AmbiguityProcessorBase.h:59