File indexing completed on 2023-03-17 11:26:35
0001 #ifndef _TrajectoryFitter_H_
0002 #define _TrajectoryFitter_H_
0003
0004 #include "TrackingTools/PatternTools/interface/Trajectory.h"
0005 #include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHit.h"
0006
0007 #include <memory>
0008
0009 class TrajectorySeed;
0010 class TrajectoryStateOnSurface;
0011 class TkCloner;
0012
0013
0014
0015
0016
0017 #include "TrackingTools/TrackFitters/interface/TrajectoryFitterRecord.h"
0018
0019 class TrajectoryFitter {
0020 public:
0021 enum fitType { standard = 0, looper = 1 };
0022
0023 typedef TrajectoryFitterRecord Record;
0024 typedef Trajectory::RecHitContainer RecHitContainer;
0025
0026 virtual ~TrajectoryFitter() {}
0027 virtual std::unique_ptr<TrajectoryFitter> clone() const = 0;
0028
0029
0030 virtual void setHitCloner(TkCloner const*) = 0;
0031
0032
0033 virtual Trajectory fitOne(const Trajectory& traj, fitType type = standard) const = 0;
0034 virtual Trajectory fitOne(const TrajectorySeed& seed,
0035 const RecHitContainer& hits,
0036 fitType typee = standard) const = 0;
0037 virtual Trajectory fitOne(const TrajectorySeed& seed,
0038 const RecHitContainer& hits,
0039 const TrajectoryStateOnSurface& tsos,
0040 fitType type = standard) const = 0;
0041
0042
0043 std::vector<Trajectory> fit(const Trajectory& traj, fitType type = standard) const {
0044 return makeVect(fitOne(traj, type));
0045 }
0046
0047 std::vector<Trajectory> fit(const TrajectorySeed& seed, const RecHitContainer& hits, fitType type = standard) const {
0048 return makeVect(fitOne(seed, hits, type));
0049 }
0050 std::vector<Trajectory> fit(const TrajectorySeed& seed,
0051 const RecHitContainer& hits,
0052 const TrajectoryStateOnSurface& tsos,
0053 fitType type = standard) const {
0054 return makeVect(fitOne(seed, hits, tsos, type));
0055 }
0056
0057 private:
0058 static std::vector<Trajectory> makeVect(Trajectory&& outTraj) {
0059 if (outTraj.isValid())
0060 return std::vector<Trajectory>(1, outTraj);
0061 return std::vector<Trajectory>();
0062 }
0063 };
0064
0065 #endif