File indexing completed on 2025-01-18 03:42:22
0001 #ifndef TrackProducerBase_h
0002 #define TrackProducerBase_h
0003
0004
0005
0006
0007
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
0054 TrackProducerBase(bool trajectoryInEvent = false) : trajectoryInEvent_(trajectoryInEvent) {}
0055
0056
0057 virtual ~TrackProducerBase() noexcept(false);
0058
0059
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
0069 virtual void getFromEvt(edm::Event&, edm::Handle<TrackCandidateCollection>&, reco::BeamSpot&);
0070
0071 virtual void getFromEvt(edm::Event&, edm::Handle<TrackView>&, reco::BeamSpot&);
0072
0073
0074 virtual void produce(edm::Event&, const edm::EventSetup&) = 0;
0075
0076
0077 void initTrackProducerBase(const edm::ParameterSet& conf, edm::ConsumesCollector cc, const edm::EDGetToken& src);
0078
0079
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