Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:31:38

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 /** Interface class for trajectory fitters, i.e. computing
0014  *  Trajectories out of a seed and/or collection of RecHits.
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   // FIXME a prototype: final inplementaiton may differ
0030   virtual void setHitCloner(TkCloner const*) = 0;
0031 
0032   // new interface return one trajectory: if fit fails trajectory is invalid...
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   // backward compatible interface...
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