34 template <
class T>
T sqr(
T t) {
return t*
t;}
37 using namespace PixelRecoUtilities;
39 using namespace ctfseeding;
56 float outerred_r =
sqrt(
sqr(ohit.
x()-origin().x())+
sqr(ohit.
y()-origin().y()) );
60 float zMinOrigin = origin().z() - originZBound();
61 float zMaxOrigin = origin().z() + originZBound();
64 double vcotMin = (
outer.z() > zMaxOrigin) ?
65 (
outer.z()-zMaxOrigin)/(
outer.r()+originRBound())
66 : (
outer.z()-zMaxOrigin)/(
outer.r()-originRBound());
67 double vcotMax = (
outer.z() > zMinOrigin) ?
68 (
outer.z()-zMinOrigin)/(
outer.r()-originRBound())
69 : (
outer.z()-zMinOrigin)/(
outer.r()+originRBound());
70 float cotRight =
max(vcotMin,(
double) sinh(theEtaRange.min()));
71 float cotLeft =
min(vcotMax, (
double) sinh(theEtaRange.max()));
81 }
else if (
outer.z() > 0) {
90 float cotThetaOuter = sinh(theEtaRange.mean());
91 float sinThetaOuter = 1/
sqrt(1+
sqr(cotThetaOuter));
92 float outerZscatt = 3*oSigma(
ptMin(),cotThetaOuter) / sinThetaOuter;
96 float zMinLine = boundL.
zAtR(0.)-outerZscatt;
97 float zMaxLine = boundR.
zAtR(0.)+outerZscatt;
103 float innerScatt = 3 * iSigma(
ptMin(),vtxMean,
outer);
114 float sinTheta = 1/
sqrt(1+
sqr(cotTheta));
115 float corrZ = innerScatt/sinTheta + hitZErr;
118 float cosTheta = 1/
sqrt(1+
sqr(1/cotTheta));
119 float corrR = innerScatt/cosTheta + hitRErr;
135 Range detRWindow (radius-halfThickness, radius+halfThickness);
136 Range detZWindow(z0-halfLength,z0+halfLength);
142 if (hitZWindow.
empty())
return 0;
152 float cotTheta = (hitZWindow.
mean()-origin().z()) / radius;
153 float sinTheta = 1/
sqrt(1+
sqr(cotTheta));
155 float scatt = 3 * msSigma(
ptMin(), cotTheta);
158 float hitErrRPhi = 0.;
160 float corrPhi = (scatt+ hitErrRPhi)/radius;
161 float corrZ = scatt/sinTheta + bendR*fabs(cotTheta) + hitErrZ;
178 phiRange = phiPrediction(detRWindow.
mean());
194 Range detZWindow( zLayer-halfThickness, zLayer+halfThickness);
201 if (hitRWindow.
empty())
return 0;
211 float cotTheta = (detZWindow.
mean()-origin().z())/hitRWindow.
mean();
212 float cosTheta = cotTheta/
sqrt(1+
sqr(cotTheta));
214 float scatt = 3 * msSigma(
ptMin(),cotTheta);
216 float hitErrRPhi = 0.;
218 float corrPhi = (scatt+hitErrRPhi)/detRWindow.min();
219 float corrR = scatt/fabs(cosTheta) + bendR + hitErrR;
229 w1 = rPrediction.range(detZWindow.
min());
230 w2 = rPrediction.range(detZWindow.
max());
232 w1 = rPrediction.range(detZWindow.
max());
233 w2 = rPrediction.range(detZWindow.
min());
248 float phi0 = direction().phi();
251 phi0+thePhiMargin.left()),
262 float zMin = origin().
z() - originZBound();
263 float zMax = origin().z() + originZBound();
264 float rMin = -originRBound();
265 float rMax = originRBound();
266 if(theEtaRange.max() > 0) {
271 if (theEtaRange.min() > 0.) {
277 pRight, sinh(theEtaRange.max()) );
293 bool measurementMethod =
false;
294 if ( theMeasurementTrackerUsage > 0.5) measurementMethod =
true;
295 if ( theMeasurementTrackerUsage > -0.5 &&
299 if(measurementMethod) {
309 est = estimator(&bl,es);
312 est = estimator(&fl,es);
316 (thePhiMargin.left()+thePhiMargin.right())/2.);
319 LogDebug(
"RectangularEtaPhiTrackingRegion")<<
"use pixel specific estimator.";
320 findDetAndHits =*est;
323 LogDebug(
"RectangularEtaPhiTrackingRegion")<<
"use generic etat phi estimator.";
344 measurementTracker->update(ev);
348 vector<TrajectoryMeasurement> meas = lm.
measurements(*detLayer, tsos, prop, findDetAndHits);
349 typedef vector<TrajectoryMeasurement>::const_iterator IM;
350 for (IM im = meas.begin(); im != meas.end(); im++) {
352 if (ptrHit->isValid()) result.push_back( ptrHit );
355 LogDebug(
"RectangularEtaPhiTrackingRegion")<<
" found "<< meas.size()<<
" minus one measurements on layer: "<<detLayer->
subDetector();
363 est = estimator(&bl,es);
366 est = estimator(&fl,es);
371 for (TrackingRegion::Hits::const_iterator ih= layerHits.begin(); ih != layerHits.end(); ih++) {
374 result.push_back( *ih );
384 std::ostringstream str;
386 <<
" eta: "<<theEtaRange<<
" phi:"<<thePhiMargin
387 <<
"precise: "<<thePrecise;
std::vector< TrajectoryMeasurement > measurements(const DetLayer &layer, const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const
OuterEstimator * estimator(const BarrelDetLayer *layer, const edm::EventSetup &iSetup) const
virtual float length() const =0
virtual std::string print() const
common ppss p3p6s2 common epss epspn46 common const1 w2
virtual Location location() const =0
Which part of the detector (barrel, endcap)
const OuterHitCompatibility & hitCompatibility() const
const DetLayer * detLayer() const
virtual const BoundSurface & surface() const
The surface of the GeometricSearchDet.
Sin< T >::type sin(const T &t)
Geom::Phi< T > phi() const
Global3DPoint GlobalPoint
virtual SubDetector subDetector() const =0
The type of detector (PixelBarrel, PixelEndcap, TIB, TOB, TID, TEC, CSC, DT, RPCBarrel, RPCEndcap)
static PlanePointer build(const PositionType &pos, const RotationType &rot, MediumProperties *mp=0)
virtual std::string print() const
HitRZConstraint rzConstraint() const
PixelRecoLineRZ::LineOrigin LineOrigin
HitRZCompatibility * checkRZOld(const DetLayer *layer, const TrackingRecHit *outerHit, const edm::EventSetup &iSetup) const
virtual float thickness() const =0
float zAtR(float r) const
void initEtaRange(const GlobalVector &dir, const Margin &margin)
double intersection(double r12)
T curvature(T InversePt, const edm::EventSetup &iSetup)
Scalar radius() const
Radius of the cylinder.
const T & max(const T &a, const T &b)
virtual const BoundDisk & specificSurface() const
Cos< T >::type cos(const T &t)
static GlobalPoint vtxMean(const GlobalPoint &p1, const GlobalError &e1, const GlobalPoint &p2, const GlobalError &e2)
OuterHitPhiPrediction phiWindow(const edm::EventSetup &iSetup) const
void hits(const edm::Event &ev, const edm::EventSetup &es, Hits &) const
const Bounds & bounds() const
PixelRecoRange< float > Range
virtual const BoundSurface & surface() const
GeometricSearchDet interface.
double longitudinalBendingCorrection(double radius, double pt, const edm::EventSetup &iSetup)
virtual const Surface::PositionType & position() const
Returns position of the surface.
T const * product() const
virtual const BoundCylinder & specificSurface() const
Extension of the interface.
PixelRecoRange< T > intersection(const PixelRecoRange< T > &r) const
Square< F >::type sqr(const F &f)
void setTolerance(const Margin &tolerance)
float outerRadius() const
The outer radius of the disk.
float innerRadius() const
The inner radius of the disk.
DetId geographicalId() const
virtual TrackingRegion::Hits hits(const edm::Event &ev, const edm::EventSetup &es, const ctfseeding::SeedingLayer *layer) const
get hits from layer compatible with region constraints
virtual LocalPoint localPosition() const =0
void setTolerance(const Margin &tolerance)
virtual Range range(const float &radius) const