CMS 3D CMS Logo

TrackParticleSelector.h

Go to the documentation of this file.
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

Generated on Tue Jun 9 17:48:02 2009 for CMSSW by  doxygen 1.5.4