![]() |
![]() |
00001 #ifndef TrackProducerAlgorithm_h 00002 #define TrackProducerAlgorithm_h 00003 00012 #include "FWCore/ParameterSet/interface/ParameterSet.h" 00013 #include "FWCore/Framework/interface/Event.h" 00014 #include "DataFormats/TrackCandidate/interface/TrackCandidateCollection.h" 00015 #include "DataFormats/TrackReco/interface/Track.h" 00016 #include "DataFormats/TrackReco/interface/TrackExtra.h" 00017 #include "DataFormats/GsfTrackReco/interface/GsfTrack.h" 00018 #include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHit.h" 00019 #include "TrackingTools/PatternTools/interface/TrackConstraintAssociation.h" 00020 #include "DataFormats/BeamSpot/interface/BeamSpot.h" 00021 00022 class MagneticField; 00023 class TrackingGeometry; 00024 class TrajectoryFitter; 00025 class Propagator; 00026 class Trajectory; 00027 class TrajectoryStateOnSurface; 00028 class TransientTrackingRecHitBuilder; 00029 00030 00031 template <class T> 00032 class TrackProducerAlgorithm { 00033 public: 00034 typedef std::vector<T> TrackCollection; 00035 typedef std::pair<Trajectory*, std::pair<T*,PropagationDirection> > AlgoProduct; 00036 typedef std::vector< AlgoProduct > AlgoProductCollection; 00037 typedef edm::RefToBase<TrajectorySeed> SeedRef; 00038 typedef edm::AssociationMap<edm::OneToOne<std::vector<T>,std::vector<VertexConstraint> > > 00039 VtxConstraintAssociationCollection; 00040 public: 00041 00043 TrackProducerAlgorithm(const edm::ParameterSet& conf) : 00044 conf_(conf), 00045 algoName_(conf_.getParameter<std::string>( "AlgorithmName" )), 00046 algo_(reco::TrackBase::algoByName(algoName_)), 00047 reMatchSplitHits_(false) 00048 { 00049 if (conf_.exists("reMatchSplitHits")) 00050 reMatchSplitHits_=conf_.getParameter<bool>("reMatchSplitHits"); 00051 } 00052 00054 ~TrackProducerAlgorithm() {} 00055 00057 void runWithCandidate(const TrackingGeometry *, 00058 const MagneticField *, 00059 const TrackCandidateCollection&, 00060 const TrajectoryFitter *, 00061 const Propagator *, 00062 const TransientTrackingRecHitBuilder*, 00063 const reco::BeamSpot&, 00064 AlgoProductCollection &); 00065 00067 void runWithTrack(const TrackingGeometry *, 00068 const MagneticField *, 00069 const TrackCollection&, 00070 const TrajectoryFitter *, 00071 const Propagator *, 00072 const TransientTrackingRecHitBuilder*, 00073 const reco::BeamSpot&, 00074 AlgoProductCollection &); 00075 00077 void runWithMomentum(const TrackingGeometry *, 00078 const MagneticField *, 00079 const TrackMomConstraintAssociationCollection&, 00080 const TrajectoryFitter *, 00081 const Propagator *, 00082 const TransientTrackingRecHitBuilder*, 00083 const reco::BeamSpot&, 00084 AlgoProductCollection &); 00085 00088 void runWithVertex(const TrackingGeometry *, 00089 const MagneticField *, 00090 const VtxConstraintAssociationCollection&, 00091 const TrajectoryFitter *, 00092 const Propagator *, 00093 const TransientTrackingRecHitBuilder*, 00094 const reco::BeamSpot&, 00095 AlgoProductCollection &); 00096 00099 void runWithTrackParameters(const TrackingGeometry *, 00100 const MagneticField *, 00101 const TrackParamConstraintAssociationCollection&, 00102 const TrajectoryFitter *, 00103 const Propagator *, 00104 const TransientTrackingRecHitBuilder*, 00105 const reco::BeamSpot&, 00106 AlgoProductCollection &); 00107 00109 bool buildTrack(const TrajectoryFitter *, 00110 const Propagator *, 00111 AlgoProductCollection& , 00112 TransientTrackingRecHit::RecHitContainer&, 00113 TrajectoryStateOnSurface& , 00114 const TrajectorySeed&, 00115 float, 00116 const reco::BeamSpot&, 00117 SeedRef seedRef = SeedRef(), 00118 int qualityMask=0); 00119 00120 private: 00121 edm::ParameterSet conf_; 00122 std::string algoName_; 00123 reco::TrackBase::TrackAlgorithm algo_; 00124 bool reMatchSplitHits_; 00125 00126 TrajectoryStateOnSurface getInitialState(const T * theT, 00127 TransientTrackingRecHit::RecHitContainer& hits, 00128 const TrackingGeometry * theG, 00129 const MagneticField * theMF); 00130 00131 }; 00132 00133 #include "RecoTracker/TrackProducer/interface/TrackProducerAlgorithm.icc" 00134 00135 template <> bool 00136 TrackProducerAlgorithm<reco::Track>::buildTrack(const TrajectoryFitter *, 00137 const Propagator *, 00138 AlgoProductCollection& , 00139 TransientTrackingRecHit::RecHitContainer&, 00140 TrajectoryStateOnSurface& , 00141 const TrajectorySeed&, 00142 float, 00143 const reco::BeamSpot&, 00144 SeedRef seedRef, 00145 int qualityMask); 00146 00147 00148 template <> bool 00149 TrackProducerAlgorithm<reco::GsfTrack>::buildTrack(const TrajectoryFitter *, 00150 const Propagator *, 00151 AlgoProductCollection& , 00152 TransientTrackingRecHit::RecHitContainer&, 00153 TrajectoryStateOnSurface& , 00154 const TrajectorySeed&, 00155 float, 00156 const reco::BeamSpot&, 00157 SeedRef seedRef, 00158 int qualityMask); 00159 00160 #endif