File indexing completed on 2023-03-17 11:22:05
0001 #ifndef GroupedCkfTrajectoryBuilder_H
0002 #define GroupedCkfTrajectoryBuilder_H
0003
0004 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0005 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0006 #include "FWCore/Framework/interface/EventSetup.h"
0007
0008 #include "RecoTracker/CkfPattern/interface/BaseCkfTrajectoryBuilder.h"
0009 #include "DataFormats/TrajectorySeed/interface/PropagationDirection.h"
0010
0011 #include "TrackingTools/PatternTools/interface/TempTrajectory.h"
0012
0013 #include <vector>
0014
0015 #include "FWCore/Utilities/interface/Visibility.h"
0016
0017
0018
0019
0020
0021
0022 class dso_internal GroupedCkfTrajectoryBuilder final : public BaseCkfTrajectoryBuilder {
0023 public:
0024
0025 GroupedCkfTrajectoryBuilder(const edm::ParameterSet& conf, edm::ConsumesCollector& iC);
0026
0027
0028 ~GroupedCkfTrajectoryBuilder() override {}
0029
0030 static void fillPSetDescription(edm::ParameterSetDescription& iDesc);
0031
0032
0033
0034
0035
0036 TrajectoryContainer trajectories(const TrajectorySeed&) const override;
0037
0038
0039 void trajectories(const TrajectorySeed&, TrajectoryContainer& ret) const override;
0040
0041
0042 TrajectoryContainer trajectories(const TrajectorySeed&, const TrackingRegion&) const;
0043
0044
0045 void trajectories(const TrajectorySeed&, TrajectoryContainer& ret, const TrackingRegion&) const;
0046
0047
0048
0049 TempTrajectory buildTrajectories(const TrajectorySeed& seed,
0050 TrajectoryContainer& ret,
0051 unsigned int& nCandPerSeed,
0052 const TrajectoryFilter*) const override;
0053
0054
0055
0056
0057
0058
0059
0060 void rebuildSeedingRegion(const TrajectorySeed&, TrajectoryContainer& result) const override;
0061
0062
0063 void rebuildTrajectories(TempTrajectory const& startingTraj,
0064 const TrajectorySeed&,
0065 TrajectoryContainer& result) const override;
0066
0067
0068 const TrajectoryStateUpdator& updator() const { return *theUpdator; }
0069 const Chi2MeasurementEstimatorBase& estimator() const { return *theEstimator; }
0070
0071
0072
0073
0074 double chiSquareCut() { return theChiSquareCut; }
0075
0076
0077 int maxCand() { return theMaxCand; }
0078
0079
0080 float lostHitPenalty() { return theLostHitPenalty; }
0081
0082
0083
0084
0085
0086 double ptCut() { return theptCut; }
0087
0088
0089 double mass() { return theMass; }
0090
0091 protected:
0092 void setEvent_(const edm::Event& iEvent, const edm::EventSetup& iSetup) override;
0093
0094 virtual void analyseSeed(const TrajectorySeed& seed) const {}
0095
0096 virtual void analyseMeasurements(const std::vector<TM>& meas, const Trajectory& traj) const {}
0097 virtual void analyseResult(const TrajectoryContainer& result) const {}
0098
0099 private:
0100
0101
0102
0103
0104
0105
0106 inline bool tkxor(bool a, bool b) const dso_internal { return (a || b) && !(a && b); }
0107
0108
0109 bool advanceOneLayer(const TrajectorySeed& seed,
0110 TempTrajectory& traj,
0111 const TrajectoryFilter* regionalCondition,
0112 const Propagator* propagator,
0113 bool inOut,
0114 TempTrajectoryContainer& newCand,
0115 TempTrajectoryContainer& result) const dso_internal;
0116
0117 unsigned int groupedLimitedCandidates(const TrajectorySeed& seed,
0118 TempTrajectory const& startingTraj,
0119 const TrajectoryFilter* regionalCondition,
0120 const Propagator* propagator,
0121 bool inOut,
0122 TempTrajectoryContainer& result) const dso_internal;
0123
0124
0125 void rebuildSeedingRegion(const TrajectorySeed& seed,
0126 TempTrajectory const& startingTraj,
0127 TempTrajectoryContainer& result) const dso_internal;
0128
0129
0130
0131 int rebuildSeedingRegion(const TrajectorySeed& seed,
0132 const std::vector<const TrackingRecHit*>& seedHits,
0133 TempTrajectory& candidate,
0134 TempTrajectoryContainer& result) const dso_internal;
0135
0136
0137
0138 TempTrajectory backwardFit(TempTrajectory& candidate,
0139 unsigned int nSeed,
0140 const TrajectoryFitter& fitter,
0141 std::vector<const TrackingRecHit*>& remainingHits) const dso_internal;
0142
0143
0144 bool verifyHits(TempTrajectory::DataContainer::const_iterator rbegin,
0145 size_t maxDepth,
0146 const std::vector<const TrackingRecHit*>& hits) const dso_internal;
0147
0148
0149 void groupedIntermediaryClean(TempTrajectoryContainer& theTrajectories) const dso_internal;
0150
0151
0152 static inline PropagationDirection oppositeDirection(PropagationDirection dir) {
0153 if (dir == alongMomentum)
0154 return oppositeToMomentum;
0155 if (dir == oppositeToMomentum)
0156 return alongMomentum;
0157 return dir;
0158 }
0159
0160 private:
0161 TrajectoryFilter* theConfigurableCondition;
0162
0163
0164
0165
0166 double theChiSquareCut;
0167
0168 double theptCut;
0169
0170 double theMass;
0171
0172 int theMaxCand;
0173
0174 float theLostHitPenalty;
0175 float theFoundHitBonus;
0176
0177 bool theIntermediateCleaning;
0178
0179
0180 bool theAlwaysUseInvalid;
0181
0182 bool theLockHits;
0183 bool theBestHitOnly;
0184
0185 bool theRequireSeedHitsInRebuild;
0186
0187 unsigned int theMinNrOfHitsForRebuild;
0188
0189
0190 unsigned int theMinNrOf2dHitsForRebuild;
0191
0192 bool theKeepOriginalIfRebuildFails;
0193
0194
0195
0196
0197 float maxPt2ForLooperReconstruction;
0198
0199 float maxDPhiForLooperReconstruction;
0200
0201
0202 enum work_MaxSize_Size_ {
0203 work_MaxSize_ = 50
0204 };
0205 };
0206
0207 #endif