00001 #ifndef TkNavigableSimElectronAssembler_h_ 00002 #define TkNavigableSimElectronAssembler_h_ 00003 00004 #include <vector> 00005 #include <list> 00006 00007 #include "SimDataFormats/TrackingAnalysis/interface/TrackingParticle.h" 00008 #include "SimDataFormats/TrackingAnalysis/interface/TrackingVertex.h" 00009 #include "SimDataFormats/TrackingAnalysis/interface/TrackingParticleFwd.h" 00010 #include "SimDataFormats/TrackingAnalysis/interface/TrackingVertexContainer.h" 00011 00016 class TkNavigableSimElectronAssembler { 00017 00018 public: 00019 typedef TrackingParticle* TrackPtr; 00020 typedef std::vector<TrackPtr> TrackPtrContainer; 00021 typedef TrackingVertex* VertexPtr; 00022 typedef std::list<TrackPtr> TrackList; 00023 typedef std::list<TrackList> ElectronList; 00024 00025 private: 00026 00027 public: 00029 TkNavigableSimElectronAssembler () {} 00031 virtual ~TkNavigableSimElectronAssembler () {} 00033 ElectronList assemble (TrackPtrContainer& simTracks) const; 00034 00035 private: 00038 TrackList electronFilter (TrackList& allTracks) const; 00040 void searchInwards (TrackList& electronTracks, 00041 const TrackPtr startSegment, 00042 TrackList& trackSegments) const; 00044 const TrackPtr findParent (const TrackingParticle& track) const; 00046 void searchOutwards (TrackList& electronTracks, 00047 const TrackPtr startSegment, 00048 TrackList& trackSegments) const; 00050 const TrackPtr findChild (const TrackingParticle& track) const; 00052 std::pair<TrackPtr, TrackPtr> checkVertex (const TrackingVertex*) const; 00053 00055 // TrackingParticleRef createTrack (const TrackList& segments) const; 00057 // TrackingParticleRef findInitialSegmentRef (const TrackPtr& firstSegment) 00058 // const; 00059 00060 00061 }; 00062 #endif // TkNavigableSimElectronAssembler_h_