Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-01-18 03:42:22

0001 /** \class DAFTrackProducerAlgorithm
0002   *  All is needed to run the deterministic annealing algorithm. Ported from ORCA. 
0003   *
0004   *  \author tropiano, genta
0005   *  \review in May 2014 by brondolin 
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   /// Run the Final Fit taking TrackCandidates as input
0049   void runWithCandidate(const TrackingGeometry*,
0050                         const MagneticField*,
0051                         //const TrackCandidateCollection&,
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   /// Construct Tracks to be put in the event
0069   bool buildTrack(
0070       const Trajectory, AlgoProductCollection& algoResults, float, const reco::BeamSpot&, const reco::TrackRef*) const;
0071 
0072   /// accomplishes the fitting-smoothing step for each annealing value
0073   Trajectory fit(const std::pair<TransientTrackingRecHit::RecHitContainer, TrajectoryStateOnSurface>& hits,
0074                  const TrajectoryFitter* theFitter,
0075                  Trajectory vtraj) const;
0076 
0077   //calculates the ndof according to the DAF prescription
0078   float calculateNdof(const Trajectory vtraj) const;
0079 
0080   //creates MultiRecHits out of a KF trajectory
0081   std::pair<TransientTrackingRecHit::RecHitContainer, TrajectoryStateOnSurface> collectHits(
0082       const Trajectory vtraj,
0083       const MultiRecHitCollector* measurementCollector,
0084       const MeasurementTrackerEvent* measTk) const;
0085 
0086   //updates the hits with the specified annealing factor
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   //removes from the trajectory isolated hits with very low weight
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