ATLAS Offline Software
Loading...
Searching...
No Matches
Trigger/TrigAnalysis/TrigInDetAnalysis/TrigInDetAnalysis/TrackSelector.h
Go to the documentation of this file.
1/* emacs: this is -*- c++ -*- */
10
11
12
13#ifndef TRACKSELECTOR_H
14#define TRACKSELECTOR_H
15
16#include <string>
17#include <vector>
18#include <algorithm>
19
22
23
25
26public:
27
28 TrackSelector( TrackFilter* selector=0 ) : m_selector(selector) { }
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
73protected:
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
80protected:
81
82 std::vector<TIDA::Track*> m_tracks;
83
84 // selection function
86
87};
88
89
90
91#endif // TRACKSELECTOR_H
base class for a single track selection filter allowing parameter setting for complex track selection
std::vector< TIDA::Track * > tracks(TrackFilter *selector) const
virtual bool addTrack(TIDA::Track *t, bool(*f)(const TIDA::Track *)=0)
virtual void addTracks(std::vector< TIDA::Track * > &t, bool(*f)(const TIDA::Track *)=0)
virtual TrackSelector * clone()=0
DataModel_detail::iterator< DVL > remove(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end, const T &value)
Specialization of remove for DataVector/List.