File indexing completed on 2025-01-18 03:42:22
0001
0002
0003
0004
0005
0006
0007
0008 #ifndef DAFTrackProducerAlgorithm_h
0009 #define DAFTrackProducerAlgorithm_h
0010
0011 #include "AlgoProductTraits.h"
0012
0013 #include "DataFormats/BeamSpot/interface/BeamSpot.h"
0014 #include "DataFormats/TrackCandidate/interface/TrackCandidateCollection.h"
0015 #include "DataFormats/TrajectorySeed/interface/PropagationDirection.h"
0016 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0017 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0018 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0019 #include "RecoTracker/MeasurementDet/interface/MeasurementTrackerEvent.h"
0020 #include "TrackingTools/PatternTools/interface/TrajTrackAssociation.h"
0021 #include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHit.h"
0022
0023 class MagneticField;
0024 class TrackingGeometry;
0025 class TrajAnnealing;
0026 class TrajectoryFitter;
0027 class Trajectory;
0028 class TrajectoryStateOnSurface;
0029 class TransientTrackingRecHitBuilder;
0030 class MultiRecHitCollector;
0031 class SiTrackerMultiRecHitUpdator;
0032 namespace reco {
0033 class Track;
0034 }
0035
0036 class DAFTrackProducerAlgorithm : public AlgoProductTraits<reco::Track> {
0037 public:
0038 using Base = AlgoProductTraits<reco::Track>;
0039 using TrackCollection = typename Base::TrackCollection;
0040 using AlgoProductCollection = typename Base::AlgoProductCollection;
0041
0042 using TrajAnnealingCollection = std::vector<TrajAnnealing>;
0043
0044 public:
0045 DAFTrackProducerAlgorithm(const edm::ParameterSet& conf);
0046 ~DAFTrackProducerAlgorithm() {}
0047
0048
0049 void runWithCandidate(const TrackingGeometry*,
0050 const MagneticField*,
0051
0052 const TrajTrackAssociationCollection&,
0053 const MeasurementTrackerEvent* measTk,
0054 const TrajectoryFitter*,
0055 const TransientTrackingRecHitBuilder*,
0056 const MultiRecHitCollector* measurementTracker,
0057 const SiTrackerMultiRecHitUpdator*,
0058 const reco::BeamSpot&,
0059 AlgoProductCollection&,
0060 TrajAnnealingCollection&,
0061 bool,
0062 AlgoProductCollection&,
0063 AlgoProductCollection&) const;
0064
0065 static void fillPSetDescription(edm::ParameterSetDescription& desc);
0066
0067 private:
0068
0069 bool buildTrack(
0070 const Trajectory, AlgoProductCollection& algoResults, float, const reco::BeamSpot&, const reco::TrackRef*) const;
0071
0072
0073 Trajectory fit(const std::pair<TransientTrackingRecHit::RecHitContainer, TrajectoryStateOnSurface>& hits,
0074 const TrajectoryFitter* theFitter,
0075 Trajectory vtraj) const;
0076
0077
0078 float calculateNdof(const Trajectory vtraj) const;
0079
0080
0081 std::pair<TransientTrackingRecHit::RecHitContainer, TrajectoryStateOnSurface> collectHits(
0082 const Trajectory vtraj,
0083 const MultiRecHitCollector* measurementCollector,
0084 const MeasurementTrackerEvent* measTk) const;
0085
0086
0087 std::pair<TransientTrackingRecHit::RecHitContainer, TrajectoryStateOnSurface> updateHits(
0088 const Trajectory vtraj,
0089 const SiTrackerMultiRecHitUpdator* updator,
0090 const MeasurementTrackerEvent* theMTE,
0091 double annealing) const;
0092
0093
0094 void filter(const TrajectoryFitter* fitter,
0095 std::vector<Trajectory>& input,
0096 int minhits,
0097 std::vector<Trajectory>& output,
0098 const TransientTrackingRecHitBuilder* builder) const;
0099
0100 int countingGoodHits(const Trajectory traj) const;
0101
0102 int checkHits(Trajectory iInitTraj, const Trajectory iFinalTraj) const;
0103
0104 void PrintHit(const TrackingRecHit* const& hit, TrajectoryStateOnSurface& tsos) const;
0105
0106 edm::ParameterSet conf_;
0107 int minHits_;
0108 };
0109
0110 #endif