File indexing completed on 2024-04-06 12:29:08
0001 #ifndef RecoBTag_AnnealingGhostTrackFitter_h
0002 #define RecoBTag_AnnealingGhostTrackFitter_h
0003
0004 #include <vector>
0005 #include <memory>
0006
0007 #include "RecoVertex/VertexTools/interface/AnnealingSchedule.h"
0008
0009 #include "RecoVertex/GhostTrackFitter/interface/GhostTrackFitter.h"
0010 #include "RecoVertex/GhostTrackFitter/interface/SequentialGhostTrackFitter.h"
0011
0012 namespace reco {
0013
0014 class GhostTrackPrediction;
0015 class GhostTrackState;
0016
0017 class AnnealingGhostTrackFitter : public SequentialGhostTrackFitter {
0018 public:
0019 AnnealingGhostTrackFitter();
0020 AnnealingGhostTrackFitter(const AnnealingGhostTrackFitter &orig)
0021 : annealing(orig.annealing->clone()), firstStep(orig.firstStep) {}
0022 ~AnnealingGhostTrackFitter() override {}
0023
0024 private:
0025 FitterImpl *clone() const override { return new AnnealingGhostTrackFitter(*this); }
0026
0027 bool stable(const GhostTrackPrediction &before, const GhostTrackPrediction &after) const override {
0028 return SequentialGhostTrackFitter::stable(before, after) && annealing->isAnnealed();
0029 }
0030
0031 void reset() override {
0032 annealing->resetAnnealing();
0033 firstStep = true;
0034 }
0035 void postFit(const GhostTrackFitter::PredictionUpdater &updater,
0036 const GhostTrackPrediction &pred,
0037 std::vector<GhostTrackState> &states) override;
0038
0039 std::unique_ptr<AnnealingSchedule> annealing;
0040 bool firstStep;
0041 };
0042
0043 }
0044
0045 #endif