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)
 
- 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 TrackingRecHit *outerHit, const edm::EventSetup &iSetup) const
 
std::unique_ptr< OuterEstimatorestimator (const BarrelDetLayer *layer, const edm::EventSetup &iSetup) const
 
std::unique_ptr< OuterEstimatorestimator (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
 
const UseMeasurementTracker theMeasurementTrackerUsage
 
Margin thePhiMargin
 
bool thePrecise
 
bool theUseEtaPhi
 

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 29 of file RectangularEtaPhiTrackingRegion.h.

Member Typedef Documentation

Definition at line 205 of file RectangularEtaPhiTrackingRegion.h.

Definition at line 206 of file RectangularEtaPhiTrackingRegion.h.

Definition at line 66 of file RectangularEtaPhiTrackingRegion.h.

Member Enumeration Documentation

Enumerator
kNever 
kForSiStrips 
kAlways 

Definition at line 31 of file RectangularEtaPhiTrackingRegion.h.

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

Constructor & Destructor Documentation

RectangularEtaPhiTrackingRegion::RectangularEtaPhiTrackingRegion ( RectangularEtaPhiTrackingRegion const &  rh)
inline

Definition at line 51 of file RectangularEtaPhiTrackingRegion.h.

Referenced by clone().

51  :
52  TrackingRegion(rh),
53  theEtaRange(rh.theEtaRange),
54  theLambdaRange(rh.theLambdaRange),
55  thePhiMargin(rh.thePhiMargin),
56  theMeanLambda(rh.theMeanLambda),
57  theMeasurementTrackerUsage(rh.theMeasurementTrackerUsage),
58  thePrecise(rh.thePrecise),
59  theUseEtaPhi(rh.theUseEtaPhi),
60  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 93 of file RectangularEtaPhiTrackingRegion.h.

101  : RectangularEtaPhiTrackingRegion(dir, vertexPos, Range( -1/ptMin, 1/ptMin), rVertex, zVertex,
105  measurementTracker, etaPhiRegion)
106  {}
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 114 of file RectangularEtaPhiTrackingRegion.h.

123  : RectangularEtaPhiTrackingRegion(dir, vertexPos, Range( -1/ptMin, 1/ptMin), rVertex, zVertex,
124  etaMargin, phiMargin,
126  measurementTracker, etaPhiRegion)
127  {}
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 
)
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 133 of file RectangularEtaPhiTrackingRegion.h.

References initEtaRange().

143  : TrackingRegionBase( dir, vertexPos, invPtRange, rVertex, zVertex),
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->hit(),iSetup); }
HitRZCompatibility * checkRZOld(const DetLayer *layer, const TrackingRecHit *outerHit, const edm::EventSetup &iSetup) const
HitRZCompatibility * RectangularEtaPhiTrackingRegion::checkRZOld ( const DetLayer layer,
const TrackingRecHit outerHit,
const edm::EventSetup iSetup 
) const
private

Definition at line 70 of file RectangularEtaPhiTrackingRegion.cc.

References funct::abs(), GeomDetEnumerators::barrel, SimpleLineRZ::cotLine(), f, TrackingRecHit::geographicalId(), edm::EventSetup::get(), GeomDetEnumerators::isBarrel(), TrackingRecHit::localPosition(), DetLayer::location(), bookConverter::max, min(), SurfaceOrientation::outer, PtMinSelector_cfg::ptMin, funct::sqr(), mathSSE::sqrt(), patCandidatesForDimuonsSequences_cff::tracker, 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 {
73  iSetup.get<TrackerDigiGeometryRecord>().get(tracker);
74 
75  bool isBarrel = (layer->location() == GeomDetEnumerators::barrel);
76  GlobalPoint ohit = tracker->idToDet(outerHit->geographicalId())->surface().toGlobal(outerHit->localPosition());
77  float outerred_r = sqrt( sqr(ohit.x()-origin().x())+sqr(ohit.y()-origin().y()) );
78  //PixelRecoPointRZ outer(ohit.perp(), ohit.z());
79  PixelRecoPointRZ outer(outerred_r, ohit.z());
80 
81  float zMinOrigin = origin().z() - originZBound();
82  float zMaxOrigin = origin().z() + originZBound();
83 
84  if (!thePrecise) {
85  float vcotMin = (outer.z() > zMaxOrigin) ?
86  (outer.z()-zMaxOrigin)/(outer.r()+originRBound())
87  : (outer.z()-zMaxOrigin)/(outer.r()-originRBound());
88  float vcotMax = (outer.z() > zMinOrigin) ?
89  (outer.z()-zMinOrigin)/(outer.r()-originRBound())
90  : (outer.z()-zMinOrigin)/(outer.r()+originRBound());
91  float cotRight = std::max(vcotMin,theLambdaRange.min());
92  float cotLeft = std::min(vcotMax, theLambdaRange.max());
93  return new HitEtaCheck( isBarrel, outer, cotLeft, cotRight);
94  }
95  float hitZErr = 0.;
96  float hitRErr = 0.;
97 
98  PixelRecoPointRZ outerL, outerR;
99  if (layer->location() == GeomDetEnumerators::barrel) {
100  outerL = PixelRecoPointRZ(outer.r(), outer.z()-hitZErr);
101  outerR = PixelRecoPointRZ(outer.r(), outer.z()+hitZErr);
102  } else if (outer.z() > 0) {
103  outerL = PixelRecoPointRZ(outer.r()+hitRErr, outer.z());
104  outerR = PixelRecoPointRZ(outer.r()-hitRErr, outer.z());
105  } else {
106  outerL = PixelRecoPointRZ(outer.r()-hitRErr, outer.z());
107  outerR = PixelRecoPointRZ(outer.r()+hitRErr, outer.z());
108  }
109  //CHECK
110  MultipleScatteringParametrisation oSigma(layer,iSetup);
111  float cotThetaOuter = theMeanLambda;
112  float sinThetaOuter = 1/std::sqrt(1+sqr(cotThetaOuter));
113  float outerZscatt = 3.f*oSigma(ptMin(),cotThetaOuter) / sinThetaOuter;
114 
115  PixelRecoLineRZ boundL(outerL, theLambdaRange.max());
116  PixelRecoLineRZ boundR(outerR, theLambdaRange.min());
117  float zMinLine = boundL.zAtR(0.)-outerZscatt;
118  float zMaxLine = boundR.zAtR(0.)+outerZscatt;
119  PixelRecoPointRZ vtxL(0.,max(zMinLine, zMinOrigin));
120  PixelRecoPointRZ vtxR(0.,min(zMaxLine, zMaxOrigin));
121  PixelRecoPointRZ vtxMean(0.,(vtxL.z()+vtxR.z())*0.5f);
122  //CHECK
123  MultipleScatteringParametrisation iSigma(layer,iSetup);
124  float innerScatt = 3.f * iSigma(ptMin(),vtxMean, outer);
125 
126  SimpleLineRZ leftLine( vtxL, outerL);
127  SimpleLineRZ rightLine( vtxR, outerR);
128 
129  HitRZConstraint rzConstraint(leftLine, rightLine);
130  float cotTheta = std::abs(leftLine.cotLine()+rightLine.cotLine())*0.5f;
131 
132 // float bendR = longitudinalBendingCorrection(outer.r(),ptMin());
133 
134  // std::cout << "RectangularEtaPhiTrackingRegion " << outer.r()<<','<< outer.z() << " " << innerScatt << " " << cotTheta << " " << hitZErr << std::endl;
135 
136  if (isBarrel) {
137  float sinTheta = 1/std::sqrt(1+sqr(cotTheta));
138  float corrZ = innerScatt/sinTheta + hitZErr;
139  return new HitZCheck(rzConstraint, HitZCheck::Margin(corrZ,corrZ));
140  } else {
141  float cosTheta = 1/std::sqrt(1+sqr(1/cotTheta));
142  float corrR = innerScatt/cosTheta + hitRErr;
143  return new HitRCheck( rzConstraint, HitRCheck::Margin(corrR,corrR));
144  }
145 }
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
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
const T & get() const
Definition: EventSetup.h:56
float ptMin() const
minimal pt of interest
Square< F >::type sqr(const F &f)
Definition: Square.h:13
DetId geographicalId() const
T x() const
Definition: PV3DBase.h:62
virtual LocalPoint localPosition() const =0
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< OuterEstimator > RectangularEtaPhiTrackingRegion::estimator ( const BarrelDetLayer layer,
const edm::EventSetup iSetup 
) const
private

Definition at line 148 of file RectangularEtaPhiTrackingRegion.cc.

References funct::abs(), Surface::bounds(), PixelRecoRange< T >::empty(), 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().

149 {
150 
151  // det dimensions
152  float halfLength = 0.5f*layer->surface().bounds().length();
153  float halfThickness = 0.5f*layer->surface().bounds().thickness();
154  float z0 = layer->position().z();
155  float radius = layer->specificSurface().radius();
156 
157  // det ranges
158  Range detRWindow (radius-halfThickness, radius+halfThickness);
159  Range detZWindow(z0-halfLength,z0+halfLength);
160 
161  // z prediction, skip if not intersection
162  HitZCheck zPrediction(rzConstraint());
163  Range hitZWindow = zPrediction.range(detRWindow.min()).
164  intersection(detZWindow);
165  if (hitZWindow.empty()) return 0;
166 
167  // phi prediction
168  OuterHitPhiPrediction phiPrediction = phiWindow(iSetup);
169 
170  //
171  // optional corrections for tolerance (mult.scatt, error, bending)
172  //
174  if (thePrecise) {
175  float cotTheta = (hitZWindow.mean()-origin().z()) / radius;
176  float sinTheta = 1/std::sqrt(1+sqr(cotTheta));
177  MultipleScatteringParametrisation msSigma(layer,iSetup);
178  float scatt = 3.f * msSigma(ptMin(), cotTheta);
179  float bendR = longitudinalBendingCorrection(radius,ptMin(),iSetup);
180 
181  float hitErrRPhi = 0.;
182  float hitErrZ = 0.;
183  float corrPhi = (scatt+ hitErrRPhi)/radius;
184  float corrZ = scatt/sinTheta + bendR*std::abs(cotTheta) + hitErrZ;
185 
186  phiPrediction.setTolerance(OuterHitPhiPrediction::Margin(corrPhi,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>(
204  OuterDetCompatibility( layer, phiRange, detRWindow, hitZWindow),
205  OuterHitCompatibility( phiPrediction, zPrediction ),
206  iSetup);
207 }
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
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
void setTolerance(const Margin &tolerance)
std::unique_ptr< OuterEstimator > 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 
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 cosTheta = cotTheta/std::sqrt(1+sqr(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(cosTheta) + bendR + hitErrR;
242 
243  phiPrediction.setTolerance(OuterHitPhiPrediction::Margin(corrPhi,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>(
261  OuterDetCompatibility( layer, phiRange, hitRWindow, detZWindow),
262  OuterHitCompatibility( phiPrediction, rPrediction),iSetup );
263 }
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
void setTolerance(const Margin &tolerance)
virtual const BoundDisk & specificSurface() const final
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(), funct::cos(), SeedingLayerSetsHits::SeedingLayer::detLayer(), dir, GeomDetEnumerators::endcap, HLT_FULL_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  std::unique_ptr<OuterEstimator> est;
312 
313  bool measurementMethod = false;
314  if(theMeasurementTrackerUsage == UseMeasurementTracker::kAlways) measurementMethod = true;
316  GeomDetEnumerators::isTrackerStrip(detLayer->subDetector())) measurementMethod = true;
317 
318  if(measurementMethod) {
320  es.get<IdealMagneticFieldRecord>().get(field);
321  const MagneticField * magField = field.product();
322 
323  const GlobalPoint vtx = origin();
325 
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
390  //
391  if (detLayer->location() == GeomDetEnumerators::barrel) {
392  const BarrelDetLayer& bl = dynamic_cast<const BarrelDetLayer&>(*detLayer);
393  est = estimator(&bl,es);
394  } else {
395  const ForwardDetLayer& fl = dynamic_cast<const ForwardDetLayer&>(*detLayer);
396  est = estimator(&fl,es);
397  }
398  if (!est) return result;
399 
400  auto layerHits = layer.hits();
401  result.reserve(layerHits.size());
402  for (auto && ih : layerHits) {
403  if ( est->hitCompatibility()(*ih) ) {
404  result.emplace_back( std::move(ih) );
405  }
406  }
407  }
408 
409  // std::cout << "RectangularEtaPhiTrackingRegion hits " << result.size() << std::endl;
410 
411  return result;
412 }
#define LogDebug(id)
std::unique_ptr< OuterEstimator > estimator(const BarrelDetLayer *layer, const edm::EventSetup &iSetup) const
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:95
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
const DetLayer * detLayer() const
bool isTrackerPixel(const GeomDetEnumerators::SubDetector m)
dbl *** dir
Definition: mlp_gen.cc:35
void RectangularEtaPhiTrackingRegion::initEtaRange ( const GlobalVector dir,
const Margin margin 
)
private
static UseMeasurementTracker RectangularEtaPhiTrackingRegion::intToUseMeasurementTracker ( int  value)
inlinestatic

Definition at line 37 of file RectangularEtaPhiTrackingRegion.h.

References assert(), and relativeConstraints::value.

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

37  {
38  assert(value >= -1 && value <= 1);
39  return static_cast<UseMeasurementTracker>(value);
40  }
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  float 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 414 of file RectangularEtaPhiTrackingRegion.cc.

References TrackingRegion::print().

414  {
415  std::ostringstream str;
416  str << TrackingRegionBase::print()
417  <<" eta: "<<theEtaRange<<" phi:"<<thePhiMargin
418  << "precise: "<<thePrecise;
419  return str.str();
420 }
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 214 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
private

Definition at line 201 of file RectangularEtaPhiTrackingRegion.h.

const UseMeasurementTracker RectangularEtaPhiTrackingRegion::theMeasurementTrackerUsage
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
private

Definition at line 199 of file RectangularEtaPhiTrackingRegion.h.

Referenced by isPrecise().

bool RectangularEtaPhiTrackingRegion::theUseEtaPhi
private

Definition at line 200 of file RectangularEtaPhiTrackingRegion.h.