CMS 3D CMS Logo

RectangularEtaPhiTrackingRegion.h
Go to the documentation of this file.
1 #ifndef RectangularEtaPhiTrackingRegion_H
2 #define RectangularEtaPhiTrackingRegion_H
3 
13 //#include "CommonDet/TrajectoryParametrization/interface/GlobalTrajectoryParameters.h"
16 
19 
21 class BarrelDetLayer;
22 class ForwardDetLayer;
24 
26 public:
27  enum class UseMeasurementTracker { kNever = -1, kForSiStrips = 0, kAlways = 1 };
28 
30  assert(value >= -1 && value <= 1);
31  return static_cast<UseMeasurementTracker>(value);
32  }
33 
35  // mimic the old behaviour
36  if (value > 0.5)
38  if (value > -0.5)
41  }
42 
44 
46  : TrackingRegion(rh),
55 
59 
61 
88  const GlobalPoint& vertexPos,
89  float ptMin,
90  float rVertex,
91  float zVertex,
92  float deltaEta,
93  float deltaPhi,
95  bool precise = true,
97  bool etaPhiRegion = false)
99  vertexPos,
100  Range(-1 / ptMin, 1 / ptMin),
101  rVertex,
102  zVertex,
103  Margin(std::abs(deltaEta), std::abs(deltaEta)),
104  Margin(std::abs(deltaPhi), std::abs(deltaPhi)),
106  precise,
108  etaPhiRegion) {}
109 
117  const GlobalPoint& vertexPos,
118  float ptMin,
119  float rVertex,
120  float zVertex,
121  Margin etaMargin,
122  Margin phiMargin,
124  bool precise = true,
126  bool etaPhiRegion = false)
128  vertexPos,
129  Range(-1 / ptMin, 1 / ptMin),
130  rVertex,
131  zVertex,
132  etaMargin,
133  phiMargin,
135  precise,
137  etaPhiRegion) {}
138 
144  const GlobalPoint& vertexPos,
146  float rVertex,
147  float zVertex,
148  Margin etaMargin,
149  Margin phiMargin,
151  bool precise = true,
153  bool etaPhiRegion = false,
154  bool useMS = true)
155  : TrackingRegionBase(dir, vertexPos, invPtRange, rVertex, zVertex),
156  thePhiMargin(phiMargin),
159  theUseMS(useMS),
160  theUseEtaPhi(etaPhiRegion),
162  initEtaRange(dir, etaMargin);
163  }
164 
166  const Range& etaRange() const { return theEtaRange; }
167  const Range& tanLambdaRange() const { return theLambdaRange; }
168 
171  const Margin& phiMargin() const { return thePhiMargin; }
172 
174  bool isPrecise() const { return thePrecise; }
175 
176  TrackingRegion::Hits hits(const edm::EventSetup& es, const SeedingLayerSetsHits::SeedingLayer& layer) const override;
177 
179  const Hit& outerHit,
180  const edm::EventSetup& iSetup,
181  const DetLayer* outerlayer = nullptr,
182  float lr = 0,
183  float gz = 0,
184  float dr = 0,
185  float dz = 0) const override {
186  return checkRZOld(layer, outerHit, iSetup, outerlayer);
187  }
188 
190 
191  std::string name() const override { return "RectangularEtaPhiTrackingRegion"; }
192  std::string print() const override;
193 
194 private:
195  HitRZCompatibility* checkRZOld(const DetLayer* layer,
196  const Hit& outerHit,
197  const edm::EventSetup& iSetup,
198  const DetLayer* outerlayer) const;
199 
200  std::unique_ptr<MeasurementEstimator> estimator(const BarrelDetLayer* layer,
201  const edm::EventSetup& iSetup) const dso_internal;
202  std::unique_ptr<MeasurementEstimator> estimator(const ForwardDetLayer* layer,
203  const edm::EventSetup& iSetup) const dso_internal;
204 
207 
208  void initEtaRange(const GlobalVector& dir, const Margin& margin);
209 
210 private:
212  Range theLambdaRange; // this is actually tanLambda
213  Margin thePhiMargin;
216  bool thePrecise = false;
217  bool theUseMS = false;
218  bool theUseEtaPhi = false;
220 
222  using cacheHits = std::vector<cacheHitPointer>;
223 
224  /* wait... think!
225  * done? questions? think again, look where this region is constructed
226  * still question? study tracker code for the next couple of weeks, then we may discuss.
227  */
228  mutable cacheHits cache;
229 };
230 
231 #endif
HitRZCompatibility * checkRZOld(const DetLayer *layer, const Hit &outerHit, const edm::EventSetup &iSetup, const DetLayer *outerlayer) const
RectangularEtaPhiTrackingRegion & operator=(RectangularEtaPhiTrackingRegion const &)=delete
const UseMeasurementTracker theMeasurementTrackerUsage
TrackingRegion::Hits hits(const edm::EventSetup &es, const SeedingLayerSetsHits::SeedingLayer &layer) const override
get hits from layer compatible with region constraints
static UseMeasurementTracker stringToUseMeasurementTracker(const std::string &name)
HitRZCompatibility * checkRZ(const DetLayer *layer, const Hit &outerHit, const edm::EventSetup &iSetup, const DetLayer *outerlayer=0, float lr=0, float gz=0, float dr=0, float dz=0) const override
static const double deltaEta
Definition: CaloConstants.h:8
RectangularEtaPhiTrackingRegion(const GlobalVector &dir, const GlobalPoint &vertexPos, Range invPtRange, float rVertex, float zVertex, Margin etaMargin, Margin phiMargin, UseMeasurementTracker whereToUseMeasurementTracker=UseMeasurementTracker::kNever, bool precise=true, const MeasurementTrackerEvent *measurementTracker=0, bool etaPhiRegion=false, bool useMS=true)
std::unique_ptr< MeasurementEstimator > estimator(const BarrelDetLayer *layer, const edm::EventSetup &iSetup) const
RectangularEtaPhiTrackingRegion * clone() const override
const MeasurementTrackerEvent * theMeasurementTracker
void initEtaRange(const GlobalVector &dir, const Margin &margin)
Double_t margin
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
#define dso_internal
Definition: Visibility.h:13
Definition: value.py:1
OuterHitPhiPrediction phiWindow(const edm::EventSetup &iSetup) const
static UseMeasurementTracker doubleToUseMeasurementTracker(double value)
SeedingLayerSetsHits::Hits Hits
float ptMin() const
minimal pt of interest
RectangularEtaPhiTrackingRegion(const GlobalVector &dir, const GlobalPoint &vertexPos, float ptMin, float rVertex, float zVertex, Margin etaMargin, Margin phiMargin, UseMeasurementTracker whereToUseMeasurementTracker=UseMeasurementTracker::kNever, bool precise=true, const MeasurementTrackerEvent *measurementTracker=0, bool etaPhiRegion=false)
RectangularEtaPhiTrackingRegion(const GlobalVector &dir, const GlobalPoint &vertexPos, float ptMin, float rVertex, float zVertex, float deltaEta, float deltaPhi, UseMeasurementTracker whereToUseMeasurementTracker=UseMeasurementTracker::kNever, bool precise=true, const MeasurementTrackerEvent *measurementTracker=0, bool etaPhiRegion=false)
Range invPtRange() const
inverse pt range
RectangularEtaPhiTrackingRegion(RectangularEtaPhiTrackingRegion const &rh)
bool isPrecise() const
is precise error calculation switched on
static UseMeasurementTracker intToUseMeasurementTracker(int value)
TkTrackingRegionsMargin< float > Margin
const Range & etaRange() const
allowed eta range [eta_min, eta_max] interval