File indexing completed on 2024-05-23 03:13:32
0001 #ifndef RecoTracker_CkfPattern_BaseCkfTrajectoryBuilder_h
0002 #define RecoTracker_CkfPattern_BaseCkfTrajectoryBuilder_h
0003
0004 #include "TrackingTools/PatternTools/interface/TrajectoryMeasurement.h"
0005 #include "TrackingTools/PatternTools/interface/TrajectoryBuilder.h"
0006 #include "FWCore/Framework/interface/ConsumesCollector.h"
0007 #include "FWCore/Framework/interface/Event.h"
0008 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0009 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0010 #include "FWCore/Utilities/interface/ESGetToken.h"
0011 #include "DataFormats/TrajectorySeed/interface/TrajectorySeed.h"
0012
0013 #include <cassert>
0014 #include "TrackingTools/PatternTools/interface/TempTrajectory.h"
0015
0016 class CkfDebugger;
0017 class Chi2MeasurementEstimatorBase;
0018 class DetGroup;
0019 class FreeTrajectoryState;
0020 class IntermediateTrajectoryCleaner;
0021 class LayerMeasurements;
0022 class MeasurementTracker;
0023 class MeasurementTrackerEvent;
0024 class MeasurementEstimator;
0025 class NavigationSchool;
0026 class Propagator;
0027 class TrajectoryStateUpdator;
0028 class TrajectoryMeasurement;
0029 class TrajectoryContainer;
0030 class TrajectoryStateOnSurface;
0031 class TrajectoryFitter;
0032 class TransientRecHitRecord;
0033 class TransientTrackingRecHitBuilder;
0034 class Trajectory;
0035 class TempTrajectory;
0036 class TrajectoryFilter;
0037 class TrackingRegion;
0038 class TrajectoryMeasurementGroup;
0039 class TrajectoryCleaner;
0040 class TrackingComponentsRecord;
0041 namespace edm {
0042 class ConsumesCollector;
0043 }
0044
0045 #include "RecoTracker/CkfPattern/interface/PrintoutHelper.h"
0046
0047 #include <string>
0048
0049
0050
0051
0052
0053
0054
0055
0056 class BaseCkfTrajectoryBuilder : public TrajectoryBuilder {
0057 protected:
0058
0059 typedef FreeTrajectoryState FTS;
0060 typedef TrajectoryStateOnSurface TSOS;
0061 typedef TrajectoryMeasurement TM;
0062 typedef std::pair<TSOS, std::vector<const DetLayer*> > StateAndLayers;
0063
0064 public:
0065 typedef std::vector<Trajectory> TrajectoryContainer;
0066 typedef std::vector<TempTrajectory> TempTrajectoryContainer;
0067 typedef TrajectoryContainer::iterator TrajectoryIterator;
0068
0069
0070 BaseCkfTrajectoryBuilder(const edm::ParameterSet& conf,
0071 edm::ConsumesCollector iC,
0072 std::unique_ptr<TrajectoryFilter> filter,
0073 std::unique_ptr<TrajectoryFilter> inOutFilter = nullptr);
0074 BaseCkfTrajectoryBuilder(const BaseCkfTrajectoryBuilder&) = delete;
0075 BaseCkfTrajectoryBuilder& operator=(const BaseCkfTrajectoryBuilder&) = delete;
0076 ~BaseCkfTrajectoryBuilder() override;
0077
0078 static void fillPSetDescription(edm::ParameterSetDescription& iDesc);
0079
0080 virtual void buildTrajectories(const TrajectorySeed& seed,
0081 TrajectoryContainer& ret,
0082 unsigned int& nCandPerSeed,
0083 const TrajectoryFilter*) const {
0084 assert(0 == 1);
0085 }
0086
0087 virtual void rebuildTrajectories(const TrajectorySeed& seed, TrajectoryContainer& result) const { assert(0 == 1); }
0088
0089 void setNavigationSchool(NavigationSchool const* nv) { theNavigationSchool = nv; }
0090
0091 void setEvent(const edm::Event& event) const override;
0092 void unset() const override;
0093
0094 void setEvent(const edm::Event& iEvent, const edm::EventSetup& iSetup, const MeasurementTrackerEvent* data);
0095
0096 virtual void setDebugger(CkfDebugger* dbg) const { ; }
0097
0098
0099
0100
0101
0102
0103
0104 const TransientTrackingRecHitBuilder* hitBuilder() const { return theTTRHBuilder; }
0105
0106 protected:
0107 static std::unique_ptr<TrajectoryFilter> createTrajectoryFilter(const edm::ParameterSet& pset,
0108 edm::ConsumesCollector& iC);
0109
0110 virtual void setEvent_(const edm::Event& iEvent, const edm::EventSetup& iSetup) = 0;
0111
0112
0113 virtual bool analyzeMeasurementsDebugger(Trajectory& traj,
0114 const std::vector<TrajectoryMeasurement>& meas,
0115 const MeasurementTrackerEvent* theMeasurementTracker,
0116 const Propagator* theForwardPropagator,
0117 const Chi2MeasurementEstimatorBase* theEstimator,
0118 const TransientTrackingRecHitBuilder* theTTRHBuilder) const {
0119 return true;
0120 }
0121 virtual bool analyzeMeasurementsDebugger(TempTrajectory& traj,
0122 const std::vector<TrajectoryMeasurement>& meas,
0123 const MeasurementTrackerEvent* theMeasurementTracker,
0124 const Propagator* theForwardPropagator,
0125 const Chi2MeasurementEstimatorBase* theEstimator,
0126 const TransientTrackingRecHitBuilder* theTTRHBuilder) const {
0127 return true;
0128 }
0129 virtual void fillSeedHistoDebugger(std::vector<TrajectoryMeasurement>::iterator begin,
0130 std::vector<TrajectoryMeasurement>::iterator end) const {
0131 ;
0132 }
0133
0134 protected:
0135 TempTrajectory createStartingTrajectory(const TrajectorySeed& seed) const;
0136
0137
0138
0139
0140 bool toBeContinued(TempTrajectory& traj, bool inOut = false) const;
0141
0142
0143 bool qualityFilter(const TempTrajectory& traj, bool inOut = false) const;
0144
0145 void addToResult(std::shared_ptr<const TrajectorySeed> const& seed,
0146 TempTrajectory& traj,
0147 TrajectoryContainer& result,
0148 bool inOut = false) const;
0149 void addToResult(TempTrajectory const& traj, TempTrajectoryContainer& result, bool inOut = false) const;
0150 void moveToResult(TempTrajectory&& traj, TempTrajectoryContainer& result, bool inOut = false) const;
0151
0152 StateAndLayers findStateAndLayers(const TrajectorySeed& seed, const TempTrajectory& traj) const;
0153
0154 private:
0155 void seedMeasurements(const TrajectorySeed& seed, TempTrajectory& result, bool as5D) const;
0156
0157 protected:
0158 void setData(const MeasurementTrackerEvent* data);
0159
0160 const Propagator* forwardPropagator(const TrajectorySeed& seed) const {
0161 return seed.direction() == alongMomentum ? thePropagatorAlong : thePropagatorOpposite;
0162 }
0163 const Propagator* backwardPropagator(const TrajectorySeed& seed) const {
0164 return seed.direction() == alongMomentum ? thePropagatorOpposite : thePropagatorAlong;
0165 }
0166
0167 protected:
0168 typedef TrackingComponentsRecord Chi2MeasurementEstimatorRecord;
0169
0170 const TrajectoryStateUpdator* theUpdator = nullptr;
0171 const Propagator* thePropagatorAlong = nullptr;
0172 const Propagator* thePropagatorOpposite = nullptr;
0173 const Chi2MeasurementEstimatorBase* theEstimator = nullptr;
0174 const TransientTrackingRecHitBuilder* theTTRHBuilder = nullptr;
0175 const MeasurementTrackerEvent* theMeasurementTracker = nullptr;
0176 const NavigationSchool* theNavigationSchool = nullptr;
0177
0178 private:
0179 bool theSeedAs5DHit;
0180
0181 std::unique_ptr<TrajectoryFilter> theFilter;
0182 std::unique_ptr<TrajectoryFilter> theInOutFilter;
0183
0184
0185 const edm::ESGetToken<TrajectoryStateUpdator, TrackingComponentsRecord> theUpdatorToken;
0186 const edm::ESGetToken<Propagator, TrackingComponentsRecord> thePropagatorAlongToken;
0187 const edm::ESGetToken<Propagator, TrackingComponentsRecord> thePropagatorOppositeToken;
0188 const edm::ESGetToken<Chi2MeasurementEstimatorBase, TrackingComponentsRecord> theEstimatorToken;
0189 const edm::ESGetToken<TransientTrackingRecHitBuilder, TransientRecHitRecord> theRecHitBuilderToken;
0190 };
0191
0192 #endif