00001 #ifndef _TrackerReco_MultiTrajectoryStateAssembler_h_ 00002 #define _TrackerReco_MultiTrajectoryStateAssembler_h_ 00003 00004 // #include "Utilities/Notification/interface/TimingReport.h" 00005 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h" 00006 #include <vector> 00007 // #include <map> 00008 00013 class MultiTrajectoryStateAssembler { 00014 00015 private: 00016 typedef TrajectoryStateOnSurface TSOS; 00017 typedef std::vector<TrajectoryStateOnSurface> MultiTSOS; 00018 00019 public: 00020 // 00021 // constructors 00022 // 00023 MultiTrajectoryStateAssembler (); 00024 00028 void addState (const TrajectoryStateOnSurface); 00029 00031 void addInvalidState (const double); 00032 00036 TrajectoryStateOnSurface combinedState (); 00040 TrajectoryStateOnSurface combinedState (const float weight); 00041 00042 00043 private: 00047 void addStateVector (const MultiTSOS&); 00049 inline bool invalidCombinedState () const 00050 { 00051 // 00052 // Protect against empty combination (no valid input state) 00053 // 00054 return theStates.empty(); 00055 } 00057 bool prepareCombinedState(); 00061 TrajectoryStateOnSurface reweightedCombinedState (const double) const; 00065 void removeSmallWeights (); 00067 void removeWrongPz (); 00068 00069 private: 00070 bool sortStates; 00071 float minValidFraction; 00072 float minFractionalWeight; 00073 00074 bool combinationDone; 00075 bool thePzError; 00076 00077 double theValidWeightSum; 00078 double theInvalidWeightSum; 00079 MultiTSOS theStates; 00080 00081 // static TimingReport::Item * theTimerAdd; 00082 // static TimingReport::Item * theTimerComb; 00083 00084 }; 00085 00086 #endif