test
CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
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
 
virtual
RectangularEtaPhiTrackingRegion
clone () const
 
const RangeetaRange () const
 allowed eta range [eta_min, eta_max] interval More...
 
virtual TrackingRegion::Hits hits (const edm::Event &ev, 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
 
RectangularEtaPhiTrackingRegionoperator= (RectangularEtaPhiTrackingRegion const &)=delete
 
RectangularEtaPhiTrackingRegionoperator= (RectangularEtaPhiTrackingRegion &&)=default
 
const MarginphiMargin () const
 
virtual std::string print () const
 
 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
< MeasurementEstimator
estimator (const BarrelDetLayer *layer, const edm::EventSetup &iSetup) const
 
std::unique_ptr
< MeasurementEstimator
estimator (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 207 of file RectangularEtaPhiTrackingRegion.h.

Definition at line 208 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.

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.

122  : RectangularEtaPhiTrackingRegion(dir, vertexPos, Range( -1/ptMin, 1/ptMin), rVertex, zVertex,
123  etaMargin, phiMargin,
125  measurementTracker, etaPhiRegion)
126  {}
PixelRecoRange< float > Range
float ptMin() const
minimal pt of interest
RectangularEtaPhiTrackingRegion(RectangularEtaPhiTrackingRegion const &rh)
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
inlinevirtual

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

Implements TrackingRegion.

Definition at line 164 of file RectangularEtaPhiTrackingRegion.h.

References checkRZOld().

169  { 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, GeomDetEnumerators::isBarrel(), DetLayer::location(), bookConverter::max, min(), SurfaceOrientation::outer, PtMinSelector_cfg::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().

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)
bool isBarrel(GeomDetEnumerators::SubDetector m)
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
inlinevirtual

Implements TrackingRegion.

Definition at line 171 of file RectangularEtaPhiTrackingRegion.h.

References RectangularEtaPhiTrackingRegion().

171  {
172  return new RectangularEtaPhiTrackingRegion(*this);
173  }
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(), PixelRecoRange< T >::max(), bookConverter::max, PixelRecoRange< T >::mean(), PixelRecoRange< T >::min(), min(), GeometricSearchDet::position(), PtMinSelector_cfg::ptMin, CosmicsPD_Skims::radius, HitZCheck::range(), OuterHitPhiPrediction::setTolerance(), HitZCheck::setTolerance(), BarrelDetLayer::specificSurface(), funct::sqr(), mathSSE::sqrt(), BarrelDetLayer::surface(), Bounds::thickness(), w2, and PV3DBase< T, PVType, FrameType >::z().

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
T min() const
virtual float thickness() const =0
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 const Surface::PositionType & position() const
Returns position of the surface.
virtual const BoundCylinder & specificSurface() const final
Extension of the interface.
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(), GeometricSearchDet::position(), PtMinSelector_cfg::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)
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
virtual float thickness() const =0
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
double longitudinalBendingCorrection(double radius, double pt, const edm::EventSetup &iSetup)
virtual const Surface::PositionType & position() const
Returns position of the surface.
float ptMin() const
minimal pt of interest
virtual const BoundSurface & surface() const final
The surface of the GeometricSearchDet.
PixelRecoRange< T > intersection(const PixelRecoRange< T > &r) const
Square< F >::type sqr(const F &f)
Definition: Square.h:13
virtual const BoundDisk & specificSurface() const final
Definition: fakeMenu.h:6
const Range& RectangularEtaPhiTrackingRegion::etaRange ( ) const
inline
TrackingRegion::Hits RectangularEtaPhiTrackingRegion::hits ( const edm::Event ev,
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(), compareJSON::const, funct::cos(), SeedingLayerSetsHits::SeedingLayer::detLayer(), dir, GeomDetEnumerators::endcap, HLT_25ns10e33_v2_cff::estimator, f, edm::EventSetup::get(), h, SeedingLayerSetsHits::SeedingLayer::hits(), GeomDetEnumerators::isBarrel(), GeomDetEnumerators::isEndcap(), GeomDetEnumerators::isTrackerPixel(), GeomDetEnumerators::isTrackerStrip(), DetLayer::location(), LogDebug, eostools::move(), phi(), edm::ESHandle< class >::product(), LayerMeasurements::recHits(), mps_fire::result, makeMuonMisalignmentScenario::rot, funct::sin(), and DetLayer::subDetector().

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

Definition at line 36 of file RectangularEtaPhiTrackingRegion.h.

References assert(), and relativeConstraints::value.

Referenced by MuonTrackingRegionBuilder::build(), and SeedFilter::SeedFilter().

36  {
37  assert(value >= -1 && value <= 1);
38  return static_cast<UseMeasurementTracker>(value);
39  }
assert(m_qm.get())
bool RectangularEtaPhiTrackingRegion::isPrecise ( ) const
inline

is precise error calculation switched on

Definition at line 157 of file RectangularEtaPhiTrackingRegion.h.

References thePrecise.

virtual std::string RectangularEtaPhiTrackingRegion::name ( void  ) const
inlinevirtual
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(), bookConverter::max, and min().

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
virtual

Reimplemented from TrackingRegion.

Definition at line 426 of file RectangularEtaPhiTrackingRegion.cc.

References TrackingRegion::print().

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

Definition at line 281 of file RectangularEtaPhiTrackingRegion.cc.

References PixelRecoPointRZ::z().

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, mergeVDriftHistosByStation::name, AlCaHLTBitMon_QueryRunRegistry::string, tmp, and create_public_lumi_plots::transform.

Referenced by CandidateSeededTrackingRegionsProducer::CandidateSeededTrackingRegionsProducer(), 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 }
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100

Member Data Documentation

cacheHits RectangularEtaPhiTrackingRegion::cache
mutableprivate

Definition at line 216 of file RectangularEtaPhiTrackingRegion.h.

Range RectangularEtaPhiTrackingRegion::theEtaRange
private

Definition at line 195 of file RectangularEtaPhiTrackingRegion.h.

Referenced by etaRange().

Range RectangularEtaPhiTrackingRegion::theLambdaRange
private

Definition at line 196 of file RectangularEtaPhiTrackingRegion.h.

float RectangularEtaPhiTrackingRegion::theMeanLambda
private

Definition at line 198 of file RectangularEtaPhiTrackingRegion.h.

const MeasurementTrackerEvent* RectangularEtaPhiTrackingRegion::theMeasurementTracker = 0
private

Definition at line 203 of file RectangularEtaPhiTrackingRegion.h.

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

Definition at line 199 of file RectangularEtaPhiTrackingRegion.h.

Margin RectangularEtaPhiTrackingRegion::thePhiMargin
private

Definition at line 197 of file RectangularEtaPhiTrackingRegion.h.

Referenced by phiMargin().

bool RectangularEtaPhiTrackingRegion::thePrecise =false
private

Definition at line 200 of file RectangularEtaPhiTrackingRegion.h.

Referenced by isPrecise().

bool RectangularEtaPhiTrackingRegion::theUseEtaPhi =false
private

Definition at line 202 of file RectangularEtaPhiTrackingRegion.h.

bool RectangularEtaPhiTrackingRegion::theUseMS =false
private

Definition at line 201 of file RectangularEtaPhiTrackingRegion.h.