00001 #ifndef DAFTrackProducerAlgorithm_h
00002 #define DAFTrackProducerAlgorithm_h
00003
00004 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00005 #include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHit.h"
00006 #include "DataFormats/TrackCandidate/interface/TrackCandidateCollection.h"
00007 #include "DataFormats/TrajectorySeed/interface/PropagationDirection.h"
00008 #include "DataFormats/BeamSpot/interface/BeamSpot.h"
00009
00010 class MagneticField;
00011 class TrackingGeometry;
00012 class TrajectoryFitter;
00013 class Trajectory;
00014 class TrajectoryStateOnSurface;
00015 class TransientTrackingRecHitBuilder;
00016 class MultiRecHitCollector;
00017 class SiTrackerMultiRecHitUpdator;
00018 namespace reco{
00019 class Track;
00020 }
00021
00022 class DAFTrackProducerAlgorithm {
00023
00024 typedef std::pair<Trajectory*, std::pair<reco::Track*,PropagationDirection> > AlgoProduct;
00025 typedef std::vector< AlgoProduct > AlgoProductCollection;
00026
00027 public:
00028
00030 DAFTrackProducerAlgorithm(const edm::ParameterSet& pset):conf_(pset){}
00031
00033 ~DAFTrackProducerAlgorithm() {}
00034
00036 void runWithCandidate(const TrackingGeometry *,
00037 const MagneticField *,
00038 const TrackCandidateCollection&,
00039 const TrajectoryFitter *,
00040 const TransientTrackingRecHitBuilder*,
00041 const MultiRecHitCollector* measurementTracker,
00042 const SiTrackerMultiRecHitUpdator*,
00043 const reco::BeamSpot&,
00044 AlgoProductCollection &) const;
00045
00046 private:
00048 bool buildTrack(const std::vector<Trajectory>&,
00049 AlgoProductCollection& algoResults,
00050 float,
00051 const reco::BeamSpot&) const;
00052
00054 void fit(const std::pair<TransientTrackingRecHit::RecHitContainer, TrajectoryStateOnSurface>& hits,
00055 const TrajectoryFitter * theFitter,
00056 std::vector<Trajectory>& vtraj) const;
00057
00058
00059 float calculateNdof(const std::vector<Trajectory>& vtraj) const;
00060
00061
00062 std::pair<TransientTrackingRecHit::RecHitContainer, TrajectoryStateOnSurface>
00063 collectHits(const std::vector<Trajectory>& vtraj,
00064 const MultiRecHitCollector* measurementCollector) const;
00065
00066
00067 std::pair<TransientTrackingRecHit::RecHitContainer, TrajectoryStateOnSurface>
00068 updateHits(const std::vector<Trajectory>& vtraj,
00069 const SiTrackerMultiRecHitUpdator* updator,
00070 double annealing) const;
00071
00072
00073 void filter(const TrajectoryFitter* fitter,
00074 std::vector<Trajectory>& input,
00075 int minhits, std::vector<Trajectory>& output) const;
00076
00077 edm::ParameterSet conf_;
00078 };
00079
00080 #endif