ATLAS Offline Software
Loading...
Searching...
No Matches
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
32 // add a track, do the selection while adding?
33 // or later with a method which loops through them all?
34 virtual bool addTrack(TIDA::Track* t, bool (*f)(const TIDA::Track*)=0 ) {
35 //std::cout << "addtrack() before f: t " << *t << " " << size() << "\t f " << f << std::endl;
36 if ( f==0 ) {
37 if ( m_selector && m_selector->select(t) ) { m_tracks.push_back(t); return true; }
38 else { cleanup(t); }
39 }
40 else {
41 if ( f(t) ) { m_tracks.push_back(t); return true; }
42 else { cleanup(t); }
43 }
44 return false;
45 }
46
47 virtual void addTracks(std::vector<TIDA::Track*>& t, bool (*f)(const TIDA::Track*)=0 ) {
48 for ( size_t i=0 ; i<t.size() ; i++ ) addTrack( t[i], f );
49 }
50
51 // get the selected tracks
52 const std::vector<TIDA::Track*>& tracks() const { return m_tracks; }
53
54 std::vector<TIDA::Track*> tracks( TrackFilter* selector ) const {
55 if ( selector==0 ) return m_tracks;
56 std::vector<TIDA::Track*> t;
57 for ( int i=m_tracks.size() ; i-- ; ) if ( selector->select(m_tracks[i]) ) t.push_back(m_tracks[i]);
58 return t;
59 }
60
61 // how many tracks in this selection
62 unsigned size() const { return m_tracks.size(); }
63
64 // clear tracks for this roi/event etc
65 // void clear() { for ( int i=m_tracks.size() ; i-- ; ) delete m_tracks[i]; m_tracks.clear(); }
66 virtual void clear() { m_tracks.clear(); }
67
69 m_tracks.erase( std::remove( m_tracks.begin(), m_tracks.end(), t ), m_tracks.end() );
70 }
71
72protected:
73
74 // can be used to delete tracks if they are not added to the selector to avoid memory
75 // leaks if the TrackSelector is managing the tracks itself.
76 virtual void cleanup(TIDA::Track* ) { }
77 // virtual void cleanup(TIDA::Track* t) { delete t; }
78
79protected:
80
81 std::vector<TIDA::Track*> m_tracks;
82
83 // selection function
85
86};
87
88
89
90#endif // TRACKSELECTOR_H
base class for a single track selection filter allowing parameter setting for complex track selection
virtual ~TrackSelector()
TrackFilter * m_selector
void delete_track(TIDA::Track *t)
virtual void cleanup(TIDA::Track *)
std::vector< TIDA::Track * > tracks(TrackFilter *selector) const
virtual bool addTrack(TIDA::Track *t, bool(*f)(const TIDA::Track *)=0)
unsigned size() const
TrackSelector(TrackFilter *selector=0)
virtual void addTracks(std::vector< TIDA::Track * > &t, bool(*f)(const TIDA::Track *)=0)
std::vector< TIDA::Track * > m_tracks
virtual void clear()
const std::vector< TIDA::Track * > & tracks() const
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.