Back to home page

Project CMSSW displayed by LXR

 
 

    


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

0001 #ifndef TrackProducerBase_h
0002 #define TrackProducerBase_h
0003 
0004 /** \class TrackProducerBase
0005  *  Base Class To Produce Tracks
0006  *
0007  *  \author cerati
0008  */
0009 
0010 #include "AlgoProductTraits.h"
0011 
0012 #include "DataFormats/BeamSpot/interface/BeamSpot.h"
0013 #include "DataFormats/TrackCandidate/interface/TrackCandidateCollection.h"
0014 #include "DataFormats/TrackReco/interface/TrackExtra.h"
0015 #include "DataFormats/TrackerRecHit2D/interface/ClusterRemovalInfo.h"
0016 #include "FWCore/Framework/interface/ConsumesCollector.h"
0017 #include "FWCore/Framework/interface/ESHandle.h"
0018 #include "FWCore/Framework/interface/Event.h"
0019 #include "FWCore/Framework/interface/EventSetup.h"
0020 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0021 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0022 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0023 #include "FWCore/Utilities/interface/InputTag.h"
0024 #include "RecoTracker/MeasurementDet/interface/MeasurementTracker.h"
0025 #include "TrackingTools/PatternTools/interface/Trajectory.h"
0026 #include "TrackingTools/TrackFitters/interface/TrajectoryFitter.h"
0027 
0028 #include <tuple>
0029 
0030 class Propagator;
0031 class TrajectoryStateUpdator;
0032 class MeasurementEstimator;
0033 class TrackerGeometry;
0034 class TrajectoryFitter;
0035 class TransientTrackingRecHitBuilder;
0036 class NavigationSchool;
0037 class TrackerDigiGeometryRecord;
0038 class IdealMagneticFieldRecord;
0039 class TransientRecHitRecord;
0040 class TrackingComponentsRecord;
0041 class NavigationSchoolRecord;
0042 class CkfComponentsRecord;
0043 
0044 template <class T>
0045 class TrackProducerBase : public AlgoProductTraits<T> {
0046 public:
0047   using Base = AlgoProductTraits<T>;
0048   using TrackView = typename Base::TrackView;
0049   using TrackCollection = typename Base::TrackCollection;
0050   using AlgoProductCollection = typename Base::AlgoProductCollection;
0051 
0052 public:
0053   /// Constructor
0054   TrackProducerBase(bool trajectoryInEvent = false) : trajectoryInEvent_(trajectoryInEvent) {}
0055 
0056   /// Destructor
0057   virtual ~TrackProducerBase() noexcept(false);
0058 
0059   /// Get needed services from the Event Setup
0060   virtual void getFromES(const edm::EventSetup&,
0061                          edm::ESHandle<TrackerGeometry>&,
0062                          edm::ESHandle<MagneticField>&,
0063                          edm::ESHandle<TrajectoryFitter>&,
0064                          edm::ESHandle<Propagator>&,
0065                          edm::ESHandle<MeasurementTracker>&,
0066                          edm::ESHandle<TransientTrackingRecHitBuilder>&);
0067 
0068   /// Get TrackCandidateCollection from the Event (needed by TrackProducer)
0069   virtual void getFromEvt(edm::Event&, edm::Handle<TrackCandidateCollection>&, reco::BeamSpot&);
0070   /// Get TrackCollection from the Event (needed by TrackRefitter)
0071   virtual void getFromEvt(edm::Event&, edm::Handle<TrackView>&, reco::BeamSpot&);
0072 
0073   /// Method where the procduction take place. To be implemented in concrete classes
0074   virtual void produce(edm::Event&, const edm::EventSetup&) = 0;
0075 
0076   /// Call this method in inheriting class' constructor
0077   void initTrackProducerBase(const edm::ParameterSet& conf, edm::ConsumesCollector cc, const edm::EDGetToken& src);
0078 
0079   /// set the aliases of produced collections
0080   void setAlias(std::string alias) {
0081     alias.erase(alias.size() - 6, alias.size());
0082     alias_ = alias;
0083   }
0084 
0085   void setSecondHitPattern(Trajectory* traj,
0086                            T& track,
0087                            const Propagator* prop,
0088                            const MeasurementTrackerEvent* measTk,
0089                            const TrackerTopology* ttopo);
0090 
0091   const edm::ParameterSet& getConf() const { return conf_; }
0092 
0093   static void fillPSetDescription(edm::ParameterSetDescription& desc);
0094 
0095 protected:
0096   edm::ParameterSet conf_;
0097   edm::EDGetToken src_;
0098 
0099 protected:
0100   std::string alias_;
0101   bool trajectoryInEvent_;
0102   edm::OrphanHandle<TrackCollection> rTracks_;
0103   edm::EDGetTokenT<reco::BeamSpot> bsSrc_;
0104   edm::EDGetTokenT<MeasurementTrackerEvent> mteSrc_;
0105 
0106   edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> trackGeomSrc_;
0107   edm::ESGetToken<MagneticField, IdealMagneticFieldRecord> mfSrc_;
0108   edm::ESGetToken<TrajectoryFitter, TrajectoryFitter::Record> fitterSrc_;
0109   edm::ESGetToken<Propagator, TrackingComponentsRecord> propagatorSrc_;
0110   edm::ESGetToken<TransientTrackingRecHitBuilder, TransientRecHitRecord> builderSrc_;
0111   edm::ESGetToken<MeasurementTracker, CkfComponentsRecord> measTkSrc_;
0112   edm::ESGetToken<NavigationSchool, NavigationSchoolRecord> schoolSrc_;
0113 
0114   edm::ESHandle<NavigationSchool> theSchool;
0115   bool useSchool_ = false;
0116 };
0117 
0118 #include "RecoTracker/TrackProducer/interface/TrackProducerBase.icc"
0119 
0120 #endif