![]() |
![]() |
00001 #ifndef TrackParticleSelection_h 00002 #define TrackParticleSelection_h 00003 00004 #include "DataFormats/Common/interface/RefToBase.h" 00005 00006 #include "DataFormats/Common/interface/RefTraits.h" 00007 00008 #include "SimTracker/TrackHistory/interface/TrackClassifier.h" 00009 00014 #include "DataFormats/Common/interface/RefItem.h" 00015 00016 template <typename Collection, TrackCategories::Category Category> 00017 class TrackParticleSelector 00018 { 00019 00020 public: 00021 00022 // input collection type 00023 typedef Collection collection; 00024 00025 // type of the collection elements 00026 typedef typename Collection::value_type type; 00027 00028 // output collection type 00029 typedef std::vector<const type *> container; 00030 00031 // iterator over result collection type. 00032 typedef typename container::const_iterator const_iterator; 00033 00034 // constructor from parameter set configurability 00035 TrackParticleSelector( const edm::ParameterSet & pset ) : classifier_(pset) {} 00036 00037 // select object from a collection and 00038 // possibly event content 00039 void select( const edm::Handle<collection> & TPCH, const edm::Event & iEvent, const edm::EventSetup &iSetup) 00040 { 00041 selected_.clear(); 00042 00043 const collection & tpc = *(TPCH.product()); 00044 00045 classifier_.newEvent(iEvent, iSetup); 00046 00047 for (typename collection::size_type i=0; i<tpc.size(); i++) 00048 { 00049 edm::Ref<Collection> tp(TPCH, i); 00050 00051 if ( classifier_.evaluate(tp).is(Category) ) 00052 { 00053 const type * trap = &(tpc[i]); 00054 selected_.push_back(trap); 00055 } 00056 } 00057 } 00058 00059 // iterators over selected objects: collection begin 00060 const_iterator begin() const 00061 { 00062 return selected_.begin(); 00063 } 00064 00065 // iterators over selected objects: collection end 00066 const_iterator end() const 00067 { 00068 return selected_.end(); 00069 } 00070 00071 // true if no object has been selected 00072 size_t size() const 00073 { 00074 return selected_.size(); 00075 } 00076 00077 //private: 00078 00079 container selected_; 00080 00081 private: 00082 00083 TrackClassifier classifier_; 00084 00085 }; 00086 00087 00088 #endif