ATLAS Offline Software
Trigger/TrigAnalysis/TrigInDetAnalysis/TrigInDetAnalysis/TrackSelector.h
Go to the documentation of this file.
1 /* emacs: this is -*- c++ -*- */
13 #ifndef TRACKSELECTOR_H
14 #define TRACKSELECTOR_H
15 
16 #include <string>
17 #include <vector>
18 #include <algorithm>
19 
22 
23 
25 
26 public:
27 
29  virtual ~TrackSelector() {}
30 
31  virtual TrackSelector* clone() = 0;
32 
33  // add a track, do the selection while adding?
34  // or later with a method which loops through them all?
35  virtual bool addTrack(TIDA::Track* t, bool (*f)(const TIDA::Track*)=0 ) {
36  //std::cout << "addtrack() before f: t " << *t << " " << size() << "\t f " << f << std::endl;
37  if ( f==0 ) {
38  if ( m_selector && m_selector->select(t) ) { m_tracks.push_back(t); return true; }
39  else { cleanup(t); }
40  }
41  else {
42  if ( f(t) ) { m_tracks.push_back(t); return true; }
43  else { cleanup(t); }
44  }
45  return false;
46  }
47 
48  virtual void addTracks(std::vector<TIDA::Track*>& t, bool (*f)(const TIDA::Track*)=0 ) {
49  for ( size_t i=0 ; i<t.size() ; i++ ) addTrack( t[i], f );
50  }
51 
52  // get the selected tracks
53  const std::vector<TIDA::Track*>& tracks() const { return m_tracks; }
54 
55  std::vector<TIDA::Track*> tracks( TrackFilter* selector ) const {
56  if ( selector==0 ) return m_tracks;
57  std::vector<TIDA::Track*> t;
58  for ( int i=m_tracks.size() ; i-- ; ) if ( selector->select(m_tracks[i]) ) t.push_back(m_tracks[i]);
59  return t;
60  }
61 
62  // how many tracks in this selection
63  unsigned size() const { return m_tracks.size(); }
64 
65  // clear tracks for this roi/event etc
66  // void clear() { for ( int i=m_tracks.size() ; i-- ; ) delete m_tracks[i]; m_tracks.clear(); }
67  virtual void clear() { m_tracks.clear(); }
68 
70  m_tracks.erase( std::remove( m_tracks.begin(), m_tracks.end(), t ), m_tracks.end() );
71  }
72 
73 protected:
74 
75  // can be used to delete tracks if they are not added to the selector to avoid memory
76  // leaks if the TrackSelector is managing the tracks itself.
77  virtual void cleanup(TIDA::Track* ) { }
78  // virtual void cleanup(TIDA::Track* t) { delete t; }
79 
80 protected:
81 
82  std::vector<TIDA::Track*> m_tracks;
83 
84  // selection function
86 
87 };
88 
89 
90 
91 #endif // TRACKSELECTOR_H
Track.h
python.CaloRecoConfig.f
f
Definition: CaloRecoConfig.py:127
TrackSelector::~TrackSelector
virtual ~TrackSelector()
Definition: Trigger/TrigAnalysis/TrigInDetAnalysis/TrigInDetAnalysis/TrackSelector.h:29
TrackSelector::tracks
std::vector< TIDA::Track * > tracks(TrackFilter *selector) const
Definition: Trigger/TrigAnalysis/TrigInDetAnalysis/TrigInDetAnalysis/TrackSelector.h:55
TrackSelector::TrackSelector
TrackSelector(TrackFilter *selector=0)
Definition: Trigger/TrigAnalysis/TrigInDetAnalysis/TrigInDetAnalysis/TrackSelector.h:28
TrackFilter
Definition: TrackFilter.h:26
TrackSelector::size
unsigned size() const
Definition: Trigger/TrigAnalysis/TrigInDetAnalysis/TrigInDetAnalysis/TrackSelector.h:63
TrackSelector::addTrack
virtual bool addTrack(TIDA::Track *t, bool(*f)(const TIDA::Track *)=0)
Definition: Trigger/TrigAnalysis/TrigInDetAnalysis/TrigInDetAnalysis/TrackSelector.h:35
TrackFilter.h
base class for a single track selection filter allowing parameter setting for complex track selection
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
TrackSelector::delete_track
void delete_track(TIDA::Track *t)
Definition: Trigger/TrigAnalysis/TrigInDetAnalysis/TrigInDetAnalysis/TrackSelector.h:69
TrackFilter::select
virtual bool select(const TIDA::Track *t, const TIDARoiDescriptor *r=0)=0
TrackSelector::cleanup
virtual void cleanup(TIDA::Track *)
Definition: Trigger/TrigAnalysis/TrigInDetAnalysis/TrigInDetAnalysis/TrackSelector.h:77
TrackSelector
Definition: Trigger/TrigAnalysis/TrigInDetAnalysis/TrigInDetAnalysis/TrackSelector.h:24
PixelModuleFeMask_create_db.remove
string remove
Definition: PixelModuleFeMask_create_db.py:83
TrackSelector::m_tracks
std::vector< TIDA::Track * > m_tracks
Definition: Trigger/TrigAnalysis/TrigInDetAnalysis/TrigInDetAnalysis/TrackSelector.h:82
lumiFormat.i
int i
Definition: lumiFormat.py:92
TrackSelector::m_selector
TrackFilter * m_selector
Definition: Trigger/TrigAnalysis/TrigInDetAnalysis/TrigInDetAnalysis/TrackSelector.h:85
TrackSelector::tracks
const std::vector< TIDA::Track * > & tracks() const
Definition: Trigger/TrigAnalysis/TrigInDetAnalysis/TrigInDetAnalysis/TrackSelector.h:53
TrackSelector::addTracks
virtual void addTracks(std::vector< TIDA::Track * > &t, bool(*f)(const TIDA::Track *)=0)
Definition: Trigger/TrigAnalysis/TrigInDetAnalysis/TrigInDetAnalysis/TrackSelector.h:48
TrackSelector::clear
virtual void clear()
Definition: Trigger/TrigAnalysis/TrigInDetAnalysis/TrigInDetAnalysis/TrackSelector.h:67
python.selector.AtlRunQuerySelectorLhcOlc.selector
selector
Definition: AtlRunQuerySelectorLhcOlc.py:611
TIDA::Track
Definition: Trigger/TrigAnalysis/TrigInDetAnalysis/TrigInDetAnalysis/Track.h:26
TrackSelector::clone
virtual TrackSelector * clone()=0