![]() |
![]() |
00001 #ifndef RecoBTag_AnnealingGhostTrackFitter_h 00002 #define RecoBTag_AnnealingGhostTrackFitter_h 00003 00004 #include <vector> 00005 #include <memory> 00006 00007 #include "RecoVertex/VertexTools/interface/AnnealingSchedule.h" 00008 00009 #include "RecoVertex/GhostTrackFitter/interface/GhostTrackFitter.h" 00010 #include "RecoVertex/GhostTrackFitter/interface/SequentialGhostTrackFitter.h" 00011 00012 namespace reco { 00013 00014 class GhostTrackPrediction; 00015 class GhostTrackState; 00016 00017 class AnnealingGhostTrackFitter : public SequentialGhostTrackFitter { 00018 public: 00019 AnnealingGhostTrackFitter(); 00020 AnnealingGhostTrackFitter(const AnnealingGhostTrackFitter &orig) : 00021 annealing(orig.annealing->clone()), 00022 firstStep(orig.firstStep) {} 00023 ~AnnealingGhostTrackFitter() {} 00024 00025 private: 00026 virtual FitterImpl *clone() const 00027 { return new AnnealingGhostTrackFitter(*this); } 00028 00029 virtual bool stable(const GhostTrackPrediction &before, 00030 const GhostTrackPrediction &after) const 00031 { 00032 return SequentialGhostTrackFitter::stable(before, after) && 00033 annealing->isAnnealed(); 00034 } 00035 00036 virtual void reset() { annealing->resetAnnealing(); firstStep = true; } 00037 virtual void postFit( 00038 const GhostTrackFitter::PredictionUpdater &updater, 00039 const GhostTrackPrediction &pred, 00040 std::vector<GhostTrackState> &states); 00041 00042 std::auto_ptr<AnnealingSchedule> annealing; 00043 bool firstStep; 00044 }; 00045 00046 } 00047 00048 #endif // RecoBTag_AnnealingGhostTrackFitter_h