CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Static Public Member Functions | Private Types | Private Member Functions | Private Attributes
RectangularEtaPhiTrackingRegion Class Referencefinal

#include <RectangularEtaPhiTrackingRegion.h>

Inheritance diagram for RectangularEtaPhiTrackingRegion:
TrackingRegion

Public Types

typedef TkTrackingRegionsMargin< float > Margin
 
enum  UseMeasurementTracker { UseMeasurementTracker::kNever = -1, UseMeasurementTracker::kForSiStrips = 0, UseMeasurementTracker::kAlways = 1 }
 
- Public Types inherited from TrackingRegion
using ctfHits = ctfseeding::SeedingLayer::Hits
 
typedef SeedingLayerSetsHits::ConstRecHitPointer Hit
 
typedef SeedingLayerSetsHits::Hits Hits
 
typedef PixelRecoRange< float > Range
 

Public Member Functions

virtual HitRZCompatibilitycheckRZ (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
 
virtual RectangularEtaPhiTrackingRegionclone () const override
 
const RangeetaRange () const
 allowed eta range [eta_min, eta_max] interval More...
 
virtual TrackingRegion::Hits hits (const edm::EventSetup &es, const SeedingLayerSetsHits::SeedingLayer &layer) const override
 get hits from layer compatible with region constraints More...
 
bool isPrecise () const
 is precise error calculation switched on More...
 
virtual std::string name () const override
 
RectangularEtaPhiTrackingRegionoperator= (RectangularEtaPhiTrackingRegion const &)=delete
 
RectangularEtaPhiTrackingRegionoperator= (RectangularEtaPhiTrackingRegion &&)=default
 
const MarginphiMargin () const
 
virtual std::string print () const override
 
 RectangularEtaPhiTrackingRegion (RectangularEtaPhiTrackingRegion const &rh)
 
 RectangularEtaPhiTrackingRegion (RectangularEtaPhiTrackingRegion &&)=default
 
 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)
 
 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, 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)
 
- Public Member Functions inherited from TrackingRegion
GlobalVector const & direction () const
 the direction around which region is constructed More...
 
Range invPtRange () const
 inverse pt range More...
 
GlobalPoint const & origin () const
 
float originRBound () const
 bounds the particle vertex in the transverse plane More...
 
float originZBound () const
 bounds the particle vertex in the longitudinal plane More...
 
float phiDirection () const
 
float ptMin () const
 minimal pt of interest More...
 
TrackingRegionrestrictedRegion (const GlobalPoint &originPos, const float &originRBound, const float &originZBound) const
 clone region with new vertex position More...
 
 TrackingRegion (const GlobalVector &direction, const GlobalPoint &originPos, const Range &invPtRange, const float &originRBound, const float &originZBound)
 
GlobalVector const & unitDirection () const
 
virtual ~TrackingRegion ()
 

Static Public Member Functions

static UseMeasurementTracker doubleToUseMeasurementTracker (double value)
 
static UseMeasurementTracker intToUseMeasurementTracker (int value)
 
static UseMeasurementTracker stringToUseMeasurementTracker (const std::string &name)
 

Private Types

using cacheHitPointer = mayown_ptr< BaseTrackerRecHit >
 
using cacheHits = std::vector< cacheHitPointer >
 

Private Member Functions

HitRZCompatibilitycheckRZOld (const DetLayer *layer, const Hit &outerHit, const edm::EventSetup &iSetup, const DetLayer *outerlayer) const
 
std::unique_ptr< MeasurementEstimatorestimator (const BarrelDetLayer *layer, const edm::EventSetup &iSetup) const
 
std::unique_ptr< MeasurementEstimatorestimator (const ForwardDetLayer *layer, const edm::EventSetup &iSetup) const
 
void initEtaRange (const GlobalVector &dir, const Margin &margin)
 
OuterHitPhiPrediction phiWindow (const edm::EventSetup &iSetup) const
 
HitRZConstraint rzConstraint () const
 

Private Attributes

cacheHits cache
 
Range theEtaRange
 
Range theLambdaRange
 
float theMeanLambda
 
const MeasurementTrackerEventtheMeasurementTracker = 0
 
const UseMeasurementTracker theMeasurementTrackerUsage = UseMeasurementTracker::kNever
 
Margin thePhiMargin
 
bool thePrecise =false
 
bool theUseEtaPhi =false
 
bool theUseMS =false
 

Detailed Description

A concrete implementation of TrackingRegion. Apart of vertex constraint from TrackingRegion in this implementation the region of interest is further constrainted in phi and eta around the direction of the region

Definition at line 28 of file RectangularEtaPhiTrackingRegion.h.

Member Typedef Documentation

Definition at line 206 of file RectangularEtaPhiTrackingRegion.h.

Definition at line 207 of file RectangularEtaPhiTrackingRegion.h.

Definition at line 65 of file RectangularEtaPhiTrackingRegion.h.

Member Enumeration Documentation

Enumerator
kNever 
kForSiStrips 
kAlways 

Definition at line 30 of file RectangularEtaPhiTrackingRegion.h.

30  {
31  kNever = -1,
32  kForSiStrips = 0,
33  kAlways = 1
34  };

Constructor & Destructor Documentation

RectangularEtaPhiTrackingRegion::RectangularEtaPhiTrackingRegion ( RectangularEtaPhiTrackingRegion const &  rh)
inline

Definition at line 50 of file RectangularEtaPhiTrackingRegion.h.

References operator=().

Referenced by clone().

50  :
51  TrackingRegion(rh),
52  theEtaRange(rh.theEtaRange),
53  theLambdaRange(rh.theLambdaRange),
54  thePhiMargin(rh.thePhiMargin),
55  theMeanLambda(rh.theMeanLambda),
56  theMeasurementTrackerUsage(rh.theMeasurementTrackerUsage),
57  thePrecise(rh.thePrecise),
58  theUseEtaPhi(rh.theUseEtaPhi),
59  theMeasurementTracker(rh.theMeasurementTracker) {}
const UseMeasurementTracker theMeasurementTrackerUsage
TrackingRegion(const GlobalVector &direction, const GlobalPoint &originPos, const Range &invPtRange, const float &originRBound, const float &originZBound)
const MeasurementTrackerEvent * theMeasurementTracker
RectangularEtaPhiTrackingRegion::RectangularEtaPhiTrackingRegion ( RectangularEtaPhiTrackingRegion &&  )
default
RectangularEtaPhiTrackingRegion::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 
)
inline

constructor (symmetric eta and phi margins).
dir - the direction around which region is constructed
the initial direction of the momentum of the particle should be in the range
phi of dir +- deltaPhi
eta of dir +- deltaEta

vertexPos - the position of the vertex (origin) of the of the region.
It is a centre of cylinder constraind with rVertex, zVertex. The track of the particle should cross the cylinder
WARNING: in the current implementaion the vertexPos is supposed to be placed on the beam line, i.e. to be of the form (0,0,float)

ptMin - minimal pt of interest
rVertex - radius of the cylinder around beam line where the tracks of interest should point to.
zVertex - half height of the cylinder around the beam line where the tracks of interest should point to.
deltaEta - allowed deviation of the initial direction of particle in eta in respect to direction of the region
deltaPhi - allowed deviation of the initial direction of particle in phi in respect to direction of the region whereToUseMeasurementTracker: 1=everywhere, 0=outside pixles, -1=nowhere

Definition at line 92 of file RectangularEtaPhiTrackingRegion.h.

100  : RectangularEtaPhiTrackingRegion(dir, vertexPos, Range( -1/ptMin, 1/ptMin), rVertex, zVertex,
104  measurementTracker, etaPhiRegion)
105  {}
static const double deltaEta
Definition: CaloConstants.h:8
PixelRecoRange< float > Range
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
float ptMin() const
minimal pt of interest
RectangularEtaPhiTrackingRegion(RectangularEtaPhiTrackingRegion const &rh)
TkTrackingRegionsMargin< float > Margin
RectangularEtaPhiTrackingRegion::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 
)
inline

constructor (asymmetrinc eta and phi margins).
non equal left-right eta and phi bounds around direction are possible. The ranges are defined using Margin. the meaning of other arguments is the same as in the case of symmetring bounds to direction of the region.

Definition at line 113 of file RectangularEtaPhiTrackingRegion.h.

RectangularEtaPhiTrackingRegion::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 
)
inline

constructor (explicit pt range, asymmetrinc eta and phi margins).
the meaning of other arguments is the same as in the case of symmetring bounds to direction of the region.

Definition at line 132 of file RectangularEtaPhiTrackingRegion.h.

References initEtaRange().

142  : TrackingRegionBase( dir, vertexPos, invPtRange, rVertex, zVertex),
144  thePrecise(precise),theUseMS(useMS),theUseEtaPhi(etaPhiRegion),
145  theMeasurementTracker(measurementTracker)
146  { initEtaRange(dir, etaMargin); }
const UseMeasurementTracker theMeasurementTrackerUsage
const MeasurementTrackerEvent * theMeasurementTracker
void initEtaRange(const GlobalVector &dir, const Margin &margin)
Range invPtRange() const
inverse pt range
TrackingRegion TrackingRegionBase

Member Function Documentation

virtual HitRZCompatibility* RectangularEtaPhiTrackingRegion::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
inlineoverridevirtual

utility to check eta/theta hit compatibility with region constraints and outer hit constraint

Implements TrackingRegion.

Definition at line 163 of file RectangularEtaPhiTrackingRegion.h.

References checkRZOld().

168  { return checkRZOld(layer,outerHit,iSetup, outerlayer); }
HitRZCompatibility * checkRZOld(const DetLayer *layer, const Hit &outerHit, const edm::EventSetup &iSetup, const DetLayer *outerlayer) const
HitRZCompatibility * RectangularEtaPhiTrackingRegion::checkRZOld ( const DetLayer layer,
const Hit outerHit,
const edm::EventSetup iSetup,
const DetLayer outerlayer 
) const
private

Definition at line 70 of file RectangularEtaPhiTrackingRegion.cc.

References funct::abs(), GeomDetEnumerators::barrel, corr, SimpleLineRZ::cotLine(), f, gedGsfElectrons_cfi::isBarrel, DetLayer::location(), hpstanc_transforms::max, min(), SurfaceOrientation::outer, ALCARECOTkAlBeamHalo_cff::ptMin, DetLayer::seqNum(), funct::sqr(), mathSSE::sqrt(), vtxMean(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), PixelRecoPointRZ::z(), PV3DBase< T, PVType, FrameType >::z(), and PixelRecoLineRZ::zAtR().

Referenced by checkRZ(), initEtaRange(), and name().

71 {
72 
73  bool isBarrel = (layer->location() == GeomDetEnumerators::barrel);
74  GlobalPoint ohit = outerHit->globalPosition();
75  float outerred_r = std::sqrt( sqr(ohit.x()-origin().x())+sqr(ohit.y()-origin().y()) );
76  PixelRecoPointRZ outer(outerred_r, ohit.z());
77 
78  float zMinOrigin = origin().z() - originZBound();
79  float zMaxOrigin = origin().z() + originZBound();
80 
81  if (!thePrecise) {
82  float vcotMin = (outer.z() > zMaxOrigin) ?
83  (outer.z()-zMaxOrigin)/(outer.r()+originRBound())
84  : (outer.z()-zMaxOrigin)/(outer.r()-originRBound());
85  float vcotMax = (outer.z() > zMinOrigin) ?
86  (outer.z()-zMinOrigin)/(outer.r()-originRBound())
87  : (outer.z()-zMinOrigin)/(outer.r()+originRBound());
88  float cotRight = std::max(vcotMin,theLambdaRange.min());
89  float cotLeft = std::min(vcotMax, theLambdaRange.max());
90  return new HitEtaCheck( isBarrel, outer, cotLeft, cotRight);
91  }
92 
93 
94 
95  float outerZscatt=0;
96  float innerScatt =0;
97  //CHECK
98  if (theUseMS) {
99  MultipleScatteringParametrisation oSigma(layer,iSetup);
100  float cotThetaOuter = theMeanLambda;
101  float sinThetaOuterInv = std::sqrt(1.f+sqr(cotThetaOuter));
102  outerZscatt = 3.f*oSigma(ptMin(),cotThetaOuter)*sinThetaOuterInv;
103  }
104 
107  float zMinLine = boundL.zAtR(0.)-outerZscatt;
108  float zMaxLine = boundR.zAtR(0.)+outerZscatt;
109  PixelRecoPointRZ vtxL(0.,max(zMinLine, zMinOrigin));
110  PixelRecoPointRZ vtxR(0.,min(zMaxLine, zMaxOrigin));
111  PixelRecoPointRZ vtxMean(0.,(vtxL.z()+vtxR.z())*0.5f);
112  //CHECK
113 
114  if (theUseMS) {
115  MultipleScatteringParametrisation iSigma(layer,iSetup);
116 
117  innerScatt = 3.f * ( outerlayer ?
118  iSigma( ptMin(), vtxMean, outer, outerlayer->seqNum())
119  : iSigma( ptMin(), vtxMean, outer) ) ;
120 
121  // innerScatt = 3.f *iSigma( ptMin(), vtxMean, outer);
122  }
123 
124  SimpleLineRZ leftLine( vtxL, outer);
125  SimpleLineRZ rightLine(vtxR, outer);
126 
127  HitRZConstraint rzConstraint(leftLine, rightLine);
128  auto cotTheta = std::abs(leftLine.cotLine()+rightLine.cotLine())*0.5f;
129 
130 
131  // std::cout << "RectangularEtaPhiTrackingRegion " << outer.r()<<','<< outer.z() << " " << innerScatt << " " << cotTheta << " " << hitZErr << std::endl;
132 
133  if (isBarrel) {
134  auto sinThetaInv = std::sqrt(1.f+sqr(cotTheta));
135  auto corr = innerScatt*sinThetaInv;
137  } else {
138  auto cosThetaInv = std::sqrt(1.f+sqr(1.f/cotTheta));
139  auto corr = innerScatt*cosThetaInv;
141  }
142 }
float originRBound() const
bounds the particle vertex in the transverse plane
GlobalPoint const & origin() const
T max() const
virtual Location location() const =0
Which part of the detector (barrel, endcap)
T y() const
Definition: PV3DBase.h:63
T min() const
float zAtR(float r) const
int seqNum() const
Definition: DetLayer.h:36
T sqrt(T t)
Definition: SSEVec.h:18
T z() const
Definition: PV3DBase.h:64
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
static GlobalPoint vtxMean(const GlobalPoint &p1, const GlobalError &e1, const GlobalPoint &p2, const GlobalError &e2)
double f[11][100]
T min(T a, T b)
Definition: MathUtil.h:58
float originZBound() const
bounds the particle vertex in the longitudinal plane
JetCorrectorParameters corr
Definition: classes.h:5
float ptMin() const
minimal pt of interest
Square< F >::type sqr(const F &f)
Definition: Square.h:13
T x() const
Definition: PV3DBase.h:62
virtual RectangularEtaPhiTrackingRegion* RectangularEtaPhiTrackingRegion::clone ( void  ) const
inlineoverridevirtual

Implements TrackingRegion.

Definition at line 170 of file RectangularEtaPhiTrackingRegion.h.

References RectangularEtaPhiTrackingRegion().

170  {
171  return new RectangularEtaPhiTrackingRegion(*this);
172  }
RectangularEtaPhiTrackingRegion(RectangularEtaPhiTrackingRegion const &rh)
static UseMeasurementTracker RectangularEtaPhiTrackingRegion::doubleToUseMeasurementTracker ( double  value)
inlinestatic
std::unique_ptr< MeasurementEstimator > RectangularEtaPhiTrackingRegion::estimator ( const BarrelDetLayer layer,
const edm::EventSetup iSetup 
) const
private

Definition at line 145 of file RectangularEtaPhiTrackingRegion.cc.

References funct::abs(), Surface::bounds(), PixelRecoRange< T >::empty(), f, reco::helper::VirtualJetProducerHelper::intersection(), PixelRecoRange< T >::intersection(), Bounds::length(), PixelRecoUtilities::longitudinalBendingCorrection(), hpstanc_transforms::max, PixelRecoRange< T >::max(), PixelRecoRange< T >::mean(), PixelRecoRange< T >::min(), min(), trackingPOGFilters_cfi::phiWindow, GeometricSearchDet::position(), ALCARECOTkAlBeamHalo_cff::ptMin, TCMET_cfi::radius, HitZCheck::range(), OuterHitPhiPrediction::setTolerance(), HitZCheck::setTolerance(), BarrelDetLayer::specificSurface(), funct::sqr(), mathSSE::sqrt(), BarrelDetLayer::surface(), Bounds::thickness(), w2, and PV3DBase< T, PVType, FrameType >::z().

Referenced by name().

146 {
147 
148  using Algo = HitZCheck;
149 
150  // det dimensions
151  float halfLength = 0.5f*layer->surface().bounds().length();
152  float halfThickness = 0.5f*layer->surface().bounds().thickness();
153  float z0 = layer->position().z();
154  float radius = layer->specificSurface().radius();
155 
156  // det ranges
157  Range detRWindow (radius-halfThickness, radius+halfThickness);
158  Range detZWindow(z0-halfLength,z0+halfLength);
159 
160  // z prediction, skip if not intersection
161  HitZCheck zPrediction(rzConstraint());
162  Range hitZWindow = zPrediction.range(detRWindow.min()).
163  intersection(detZWindow);
164  if (hitZWindow.empty()) return nullptr;
165 
166  // phi prediction
167  OuterHitPhiPrediction phiPrediction = phiWindow(iSetup);
168 
169  //
170  // optional corrections for tolerance (mult.scatt, error, bending)
171  //
173  if (thePrecise) {
174  auto invR = 1.f/ radius;
175  auto cotTheta = (hitZWindow.mean()-origin().z()) * invR;
176  auto sinThetaInv = std::sqrt(1.f+sqr(cotTheta));
177  MultipleScatteringParametrisation msSigma(layer,iSetup);
178  auto scatt = 3.f * msSigma(ptMin(), cotTheta);
179  auto bendR = longitudinalBendingCorrection(radius,ptMin(),iSetup);
180 
181  float hitErrRPhi = 0.;
182  float hitErrZ = 0.;
183  float corrPhi = (scatt+ hitErrRPhi)*invR;
184  float corrZ = scatt*sinThetaInv + bendR*std::abs(cotTheta) + hitErrZ;
185 
186  phiPrediction.setTolerance(corrPhi);
187  zPrediction.setTolerance(HitZCheck::Margin(corrZ,corrZ));
188 
189  //
190  // hit ranges in det
191  //
192  OuterHitPhiPrediction::Range phi1 = phiPrediction(detRWindow.min());
193  OuterHitPhiPrediction::Range phi2 = phiPrediction(detRWindow.max());
194  phiRange = Range( std::min(phi1.min(),phi2.min()), std::max(phi1.max(),phi2.max()));
195  Range w1 = zPrediction.range(detRWindow.min());
196  Range w2 = zPrediction.range(detRWindow.max());
197  hitZWindow = Range(std::min(w1.min(),w2.min()), std::max(w1.max(),w2.max())).intersection(detZWindow);
198  }
199  else {
200  phiRange = phiPrediction(detRWindow.mean());
201  }
202 
203  return std::make_unique<OuterEstimator<Algo>>(
204  OuterDetCompatibility( layer, phiRange, detRWindow, hitZWindow),
205  OuterHitCompatibility<Algo>( phiPrediction, zPrediction ),
206  iSetup);
207 }
void setTolerance(float tolerance)
virtual float length() const =0
common ppss p3p6s2 common epss epspn46 common const1 w2
Definition: inclppp.h:1
GlobalPoint const & origin() const
T max() const
virtual const BoundSurface & surface() const final
GeometricSearchDet interface.
const Bounds & bounds() const
Definition: Surface.h:120
virtual const BoundCylinder & specificSurface() const final
Extension of the interface.
T min() const
PixelRecoRange< float > Range
T sqrt(T t)
Definition: SSEVec.h:18
T z() const
Definition: PV3DBase.h:64
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double f[11][100]
T min(T a, T b)
Definition: MathUtil.h:58
OuterHitPhiPrediction phiWindow(const edm::EventSetup &iSetup) const
double longitudinalBendingCorrection(double radius, double pt, const edm::EventSetup &iSetup)
virtual float thickness() const =0
virtual const Surface::PositionType & position() const
Returns position of the surface.
float ptMin() const
minimal pt of interest
PixelRecoRange< T > intersection(const PixelRecoRange< T > &r) const
Square< F >::type sqr(const F &f)
Definition: Square.h:13
Definition: fakeMenu.h:6
std::unique_ptr< MeasurementEstimator > RectangularEtaPhiTrackingRegion::estimator ( const ForwardDetLayer layer,
const edm::EventSetup iSetup 
) const
private

Definition at line 210 of file RectangularEtaPhiTrackingRegion.cc.

References funct::abs(), Surface::bounds(), PixelRecoRange< T >::empty(), reco::helper::VirtualJetProducerHelper::intersection(), PixelRecoRange< T >::intersection(), PixelRecoUtilities::longitudinalBendingCorrection(), PixelRecoRange< T >::max(), PixelRecoRange< T >::mean(), PixelRecoRange< T >::min(), trackingPOGFilters_cfi::phiWindow, GeometricSearchDet::position(), ALCARECOTkAlBeamHalo_cff::ptMin, OuterHitPhiPrediction::setTolerance(), ForwardDetLayer::specificSurface(), funct::sqr(), mathSSE::sqrt(), ForwardDetLayer::surface(), Bounds::thickness(), w2, and PV3DBase< T, PVType, FrameType >::z().

211 {
212  using Algo=HitRCheck;
213  // det dimensions, ranges
214  float halfThickness = 0.5f*layer->surface().bounds().thickness();
215  float zLayer = layer->position().z() ;
216  Range detZWindow( zLayer-halfThickness, zLayer+halfThickness);
217  Range detRWindow( layer->specificSurface().innerRadius(),
218  layer->specificSurface().outerRadius());
219 
220  // r prediction, skip if not intersection
221  HitRCheck rPrediction(rzConstraint());
222  Range hitRWindow = rPrediction.range(zLayer).intersection(detRWindow);
223  if (hitRWindow.empty()) return 0;
224 
225  // phi prediction
226  OuterHitPhiPrediction phiPrediction = phiWindow(iSetup);
227  OuterHitPhiPrediction::Range phiRange = phiPrediction(detRWindow.max());
228 
229  //
230  // optional corrections for tolerance (mult.scatt, error, bending)
231  //
232  if (thePrecise) {
233  float cotTheta = (detZWindow.mean()-origin().z())/hitRWindow.mean();
234  float cosThetaInv = std::sqrt(1+sqr(cotTheta))/cotTheta;
235  MultipleScatteringParametrisation msSigma(layer,iSetup);
236  float scatt = 3.f * msSigma(ptMin(),cotTheta);
237  float bendR = longitudinalBendingCorrection(hitRWindow.max(),ptMin(),iSetup);
238  float hitErrRPhi = 0.;
239  float hitErrR = 0.;
240  float corrPhi = (scatt+hitErrRPhi)/detRWindow.min();
241  float corrR = scatt*std::abs(cosThetaInv) + bendR + hitErrR;
242 
243  phiPrediction.setTolerance(corrPhi);
244  rPrediction.setTolerance(HitRCheck::Margin(corrR,corrR));
245 
246  //
247  // hit ranges in det
248  //
249  Range w1,w2;
250  if (zLayer > 0) {
251  w1 = rPrediction.range(detZWindow.min());
252  w2 = rPrediction.range(detZWindow.max());
253  } else {
254  w1 = rPrediction.range(detZWindow.max());
255  w2 = rPrediction.range(detZWindow.min());
256  }
257  hitRWindow = Range(w1.min(),w2.max()).intersection(detRWindow);
258  }
259 
260  return std::make_unique<OuterEstimator<Algo>>(
261  OuterDetCompatibility( layer, phiRange, hitRWindow, detZWindow),
262  OuterHitCompatibility<Algo>( phiPrediction, rPrediction),iSetup );
263 }
void setTolerance(float tolerance)
virtual const BoundSurface & surface() const final
The surface of the GeometricSearchDet.
common ppss p3p6s2 common epss epspn46 common const1 w2
Definition: inclppp.h:1
GlobalPoint const & origin() const
const Bounds & bounds() const
Definition: Surface.h:120
PixelRecoRange< float > Range
T sqrt(T t)
Definition: SSEVec.h:18
T z() const
Definition: PV3DBase.h:64
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
OuterHitPhiPrediction phiWindow(const edm::EventSetup &iSetup) const
virtual const BoundDisk & specificSurface() const final
double longitudinalBendingCorrection(double radius, double pt, const edm::EventSetup &iSetup)
virtual float thickness() const =0
virtual const Surface::PositionType & position() const
Returns position of the surface.
float ptMin() const
minimal pt of interest
PixelRecoRange< T > intersection(const PixelRecoRange< T > &r) const
Square< F >::type sqr(const F &f)
Definition: Square.h:13
Definition: fakeMenu.h:6
const Range& RectangularEtaPhiTrackingRegion::etaRange ( ) const
inline
TrackingRegion::Hits RectangularEtaPhiTrackingRegion::hits ( const edm::EventSetup es,
const SeedingLayerSetsHits::SeedingLayer layer 
) const
overridevirtual

get hits from layer compatible with region constraints

Implements TrackingRegion.

Definition at line 302 of file RectangularEtaPhiTrackingRegion.cc.

References alongMomentum, GeomDetEnumerators::barrel, Plane::build(), funct::cos(), SeedingLayerSetsHits::SeedingLayer::detLayer(), dir, GeomDetEnumerators::endcap, gsfElectronCkfTrackCandidateMaker_cff::estimator, f, edm::EventSetup::get(), hfClusterShapes_cfi::hits, SeedingLayerSetsHits::SeedingLayer::hits(), GeomDetEnumerators::isBarrel(), GeomDetEnumerators::isEndcap(), GeomDetEnumerators::isTrackerPixel(), GeomDetEnumerators::isTrackerStrip(), DetLayer::location(), LogDebug, eostools::move(), edm::ESHandle< T >::product(), mps_fire::result, makeMuonMisalignmentScenario::rot, funct::sin(), DetLayer::subDetector(), and badGlobalMuonTaggersAOD_cff::vtx.

Referenced by ntupleDataFormat._TrackingParticleMatchAdaptor::bestMatchingTrackingParticle(), and isPrecise().

304  {
306 
307  //ESTIMATOR
308 
309  const DetLayer * detLayer = layer.detLayer();
310 
311  bool measurementMethod = false;
312  if(theMeasurementTrackerUsage == UseMeasurementTracker::kAlways) measurementMethod = true;
314  GeomDetEnumerators::isTrackerStrip(detLayer->subDetector())) measurementMethod = true;
315 
316  if(measurementMethod) {
318  es.get<IdealMagneticFieldRecord>().get(field);
319  const MagneticField * magField = field.product();
320 
321  const GlobalPoint vtx = origin();
323 
324  std::unique_ptr<MeasurementEstimator> est;
326  (!theUseEtaPhi && detLayer->location() == GeomDetEnumerators::barrel)) {
327  const BarrelDetLayer& bl = dynamic_cast<const BarrelDetLayer&>(*detLayer);
328  est = estimator(&bl,es);
330  (!theUseEtaPhi && detLayer->location() == GeomDetEnumerators::endcap)) {
331  const ForwardDetLayer& fl = dynamic_cast<const ForwardDetLayer&>(*detLayer);
332  est = estimator(&fl,es);
333  }
334 
335  EtaPhiMeasurementEstimator etaPhiEstimator ((theEtaRange.second-theEtaRange.first)*0.5f,
337  MeasurementEstimator * findDetAndHits = &etaPhiEstimator;
338  if (est){
339  LogDebug("RectangularEtaPhiTrackingRegion")<<"use pixel specific estimator.";
340  findDetAndHits = est.get();
341  }
342  else{
343  LogDebug("RectangularEtaPhiTrackingRegion")<<"use generic etat phi estimator.";
344  }
345 
346  // TSOS
347  float phi = phiDirection();
348  // std::cout << "dir " << direction().x()/direction().perp() <<','<< direction().y()/direction().perp() << " " << sin(phi) <<','<<cos(phi)<< std::endl;
349  Surface::RotationType rot( sin(phi), -cos(phi), 0,
350  0, 0, -1,
351  cos(phi), sin(phi), 0);
352 
353  Plane::PlanePointer surface = Plane::build(GlobalPoint(0.,0.,0.), rot);
354  //TrajectoryStateOnSurface tsos(lpar, *surface, magField);
355 
356  FreeTrajectoryState fts( GlobalTrajectoryParameters(vtx, dir, 1, magField) );
357  TrajectoryStateOnSurface tsos(fts, *surface);
358 
359  // propagator
360  StraightLinePropagator prop( magField, alongMomentum);
361 
363 
365  lm.recHits(hits,*detLayer, tsos, prop, *findDetAndHits);
366  /*
367  { // old code
368  vector<TrajectoryMeasurement> meas = lm.measurements(*detLayer, tsos, prop, *findDetAndHits);
369  auto n=0UL;
370  for (auto const & im : meas)
371  if(im.recHit()->isValid()) ++n;
372  assert(n==hits.size());
373  // std::cout << "old/new " << n <<'/'<<hits.size() << std::endl;
374  }
375  */
376 
377  result.reserve(hits.size());
378  for (auto h : hits) {
379  cache.emplace_back(h);
380  result.emplace_back(h);
381  }
382 
383  LogDebug("RectangularEtaPhiTrackingRegion")<<" found "<< hits.size()<<" minus one measurements on layer: "<<detLayer->subDetector();
384  // std::cout << "RectangularEtaPhiTrackingRegion" <<" found "<< meas.size()<<" minus one measurements on layer: "<<detLayer->subDetector() << std::endl;
385 
386  } else {
387  //
388  // temporary solution (actually heavily used for Pixels....)
389  //
390  if (detLayer->location() == GeomDetEnumerators::barrel) {
391  const BarrelDetLayer& bl = dynamic_cast<const BarrelDetLayer&>(*detLayer);
392  auto est = estimator(&bl,es);
393  if (!est) return result;
394  using Algo = HitZCheck;
395  auto const & hitComp = (reinterpret_cast<OuterEstimator<Algo> const&>(*est)).hitCompatibility();
396  auto layerHits = layer.hits();
397  result.reserve(layerHits.size());
398  for (auto && ih : layerHits) {
399  if ( hitComp(*ih) )
400  result.emplace_back( std::move(ih) );
401  }
402 
403  } else {
404  const ForwardDetLayer& fl = dynamic_cast<const ForwardDetLayer&>(*detLayer);
405  auto est = estimator(&fl,es);
406  if (!est) return result;
407  using Algo = HitRCheck;
408  auto const & hitComp = (reinterpret_cast<OuterEstimator<Algo> const&>(*est)).hitCompatibility();
409  auto layerHits = layer.hits();
410  result.reserve(layerHits.size());
411  for (auto && ih : layerHits) {
412  if ( hitComp(*ih) )
413  result.emplace_back( std::move(ih) );
414  }
415 
416  }
417 
418  }
419 
420  // std::cout << "RectangularEtaPhiTrackingRegion hits " << result.size() << std::endl;
421 
422  return result;
423 }
#define LogDebug(id)
GlobalPoint const & origin() const
std::vector< BaseTrackerRecHit * > SimpleHitContainer
virtual SubDetector subDetector() const =0
The type of detector (PixelBarrel, PixelEndcap, TIB, TOB, TID, TEC, CSC, DT, RPCBarrel, RPCEndcap)
bool isBarrel(GeomDetEnumerators::SubDetector m)
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
virtual Location location() const =0
Which part of the detector (barrel, endcap)
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
const UseMeasurementTracker theMeasurementTrackerUsage
virtual TrackingRegion::Hits hits(const edm::EventSetup &es, const SeedingLayerSetsHits::SeedingLayer &layer) const override
get hits from layer compatible with region constraints
std::unique_ptr< MeasurementEstimator > estimator(const BarrelDetLayer *layer, const edm::EventSetup &iSetup) const
bool isTrackerStrip(const GeomDetEnumerators::SubDetector m)
GlobalVector const & direction() const
the direction around which region is constructed
const MeasurementTrackerEvent * theMeasurementTracker
static PlanePointer build(Args &&...args)
Definition: Plane.h:33
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
double f[11][100]
float phiDirection() const
bool isEndcap(GeomDetEnumerators::SubDetector m)
SeedingLayerSetsHits::Hits Hits
const T & get() const
Definition: EventSetup.h:56
const DetLayer * detLayer() const
bool isTrackerPixel(const GeomDetEnumerators::SubDetector m)
dbl *** dir
Definition: mlp_gen.cc:35
T const * product() const
Definition: ESHandle.h:86
Definition: fakeMenu.h:6
def move(src, dest)
Definition: eostools.py:510
void RectangularEtaPhiTrackingRegion::initEtaRange ( const GlobalVector dir,
const Margin margin 
)
private
static UseMeasurementTracker RectangularEtaPhiTrackingRegion::intToUseMeasurementTracker ( int  value)
inlinestatic
bool RectangularEtaPhiTrackingRegion::isPrecise ( ) const
inline

is precise error calculation switched on

Definition at line 157 of file RectangularEtaPhiTrackingRegion.h.

References hits(), and thePrecise.

virtual std::string RectangularEtaPhiTrackingRegion::name ( void  ) const
inlineoverridevirtual
RectangularEtaPhiTrackingRegion& RectangularEtaPhiTrackingRegion::operator= ( RectangularEtaPhiTrackingRegion const &  )
delete
RectangularEtaPhiTrackingRegion& RectangularEtaPhiTrackingRegion::operator= ( RectangularEtaPhiTrackingRegion &&  )
default
const Margin& RectangularEtaPhiTrackingRegion::phiMargin ( ) const
inline

defined phi range around phi0, margin is [phi_left,phi_right]. region is defined in a range: [phi0-phi_left, phi0+phi_right]

Definition at line 154 of file RectangularEtaPhiTrackingRegion.h.

References thePhiMargin.

Referenced by FastTSGFromL2Muon::clean(), FastTSGFromIOHit::clean(), TrackerSeedCleaner::clean(), and SeedFromConsecutiveHitsCreator::makeSeed().

OuterHitPhiPrediction RectangularEtaPhiTrackingRegion::phiWindow ( const edm::EventSetup iSetup) const
private

Definition at line 268 of file RectangularEtaPhiTrackingRegion.cc.

References PixelRecoUtilities::curvature(), hpstanc_transforms::max, and min().

Referenced by name().

269 {
270  auto phi0 = phiDirection();
271  return OuterHitPhiPrediction(
273  phi0+thePhiMargin.right()),
275  curvature(invPtRange().max(),iSetup)),
276  originRBound());
277 }
float originRBound() const
bounds the particle vertex in the transverse plane
T curvature(T InversePt, const edm::EventSetup &iSetup)
T min(T a, T b)
Definition: MathUtil.h:58
float phiDirection() const
Range invPtRange() const
inverse pt range
std::string RectangularEtaPhiTrackingRegion::print ( void  ) const
overridevirtual

Reimplemented from TrackingRegion.

Definition at line 425 of file RectangularEtaPhiTrackingRegion.cc.

References TrackingRegion::print(), and harvestTrackValidationPlots::str.

Referenced by name().

425  {
426  std::ostringstream str;
427  str << TrackingRegionBase::print()
428  <<" eta: "<<theEtaRange<<" phi:"<<thePhiMargin
429  << "precise: "<<thePrecise;
430  return str.str();
431 }
virtual std::string print() const
HitRZConstraint RectangularEtaPhiTrackingRegion::rzConstraint ( ) const
private

Definition at line 281 of file RectangularEtaPhiTrackingRegion.cc.

References conversionPostprocessing_cfi::rMax, conversionPostprocessing_cfi::rMin, conversionPostprocessing_cfi::zMax, and conversionPostprocessing_cfi::zMin.

Referenced by name().

281  {
282  HitRZConstraint::Point pLeft,pRight;
283  float zMin = origin().z() - originZBound();
284  float zMax = origin().z() + originZBound();
285  float rMin = -originRBound();
286  float rMax = originRBound();
287  if(theEtaRange.max() > 0) {
288  pRight = HitRZConstraint::Point(rMin,zMax);
289  } else {
290  pRight = HitRZConstraint::Point(rMax,zMax);
291  }
292  if (theEtaRange.min() > 0.) {
293  pLeft = HitRZConstraint::Point(rMax, zMin);
294  } else {
295  pLeft = HitRZConstraint::Point(rMin, zMin);
296  }
297  return HitRZConstraint(pLeft, theLambdaRange.min(),
298  pRight,theLambdaRange.max()
299  );
300 }
float originRBound() const
bounds the particle vertex in the transverse plane
GlobalPoint const & origin() const
T max() const
T min() const
T z() const
Definition: PV3DBase.h:64
float originZBound() const
bounds the particle vertex in the longitudinal plane
SimpleLineRZ::Point Point
RectangularEtaPhiTrackingRegion::UseMeasurementTracker RectangularEtaPhiTrackingRegion::stringToUseMeasurementTracker ( const std::string &  name)
static

Definition at line 50 of file RectangularEtaPhiTrackingRegion.cc.

References Exception, dataset::name, AlCaHLTBitMon_QueryRunRegistry::string, tmp, and create_public_lumi_plots::transform.

Referenced by CandidateSeededTrackingRegionsProducer::CandidateSeededTrackingRegionsProducer(), doubleToUseMeasurementTracker(), L3MumuTrackingRegion::L3MumuTrackingRegion(), PointSeededTrackingRegionsProducer::PointSeededTrackingRegionsProducer(), TauRegionalPixelSeedGenerator::TauRegionalPixelSeedGenerator(), and TrackingRegionsFromBeamSpotAndL2Tau::TrackingRegionsFromBeamSpotAndL2Tau().

50  {
52  std::transform(tmp.begin(), tmp.end(), tmp.begin(), ::tolower);
53  if(tmp == "never")
55  if(tmp == "forsistrips")
57  if(tmp == "always")
59  throw cms::Exception("Configuration") << "Got invalid string '" << name << "', valid values are 'Never', 'ForSiStrips', 'Always' (case insensitive)";
60 }
virtual std::string name() const override
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100

Member Data Documentation

cacheHits RectangularEtaPhiTrackingRegion::cache
mutableprivate

Definition at line 215 of file RectangularEtaPhiTrackingRegion.h.

Range RectangularEtaPhiTrackingRegion::theEtaRange
private

Definition at line 194 of file RectangularEtaPhiTrackingRegion.h.

Referenced by etaRange().

Range RectangularEtaPhiTrackingRegion::theLambdaRange
private

Definition at line 195 of file RectangularEtaPhiTrackingRegion.h.

float RectangularEtaPhiTrackingRegion::theMeanLambda
private

Definition at line 197 of file RectangularEtaPhiTrackingRegion.h.

const MeasurementTrackerEvent* RectangularEtaPhiTrackingRegion::theMeasurementTracker = 0
private

Definition at line 202 of file RectangularEtaPhiTrackingRegion.h.

const UseMeasurementTracker RectangularEtaPhiTrackingRegion::theMeasurementTrackerUsage = UseMeasurementTracker::kNever
private

Definition at line 198 of file RectangularEtaPhiTrackingRegion.h.

Margin RectangularEtaPhiTrackingRegion::thePhiMargin
private

Definition at line 196 of file RectangularEtaPhiTrackingRegion.h.

Referenced by phiMargin().

bool RectangularEtaPhiTrackingRegion::thePrecise =false
private

Definition at line 199 of file RectangularEtaPhiTrackingRegion.h.

Referenced by isPrecise().

bool RectangularEtaPhiTrackingRegion::theUseEtaPhi =false
private

Definition at line 201 of file RectangularEtaPhiTrackingRegion.h.

bool RectangularEtaPhiTrackingRegion::theUseMS =false
private

Definition at line 200 of file RectangularEtaPhiTrackingRegion.h.