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 | Private Member Functions | Private Attributes
InnerDeltaPhi Class Reference

#include <InnerDeltaPhi.h>

Public Types

typedef Basic2DVector< float > Point2D
 

Public Member Functions

 InnerDeltaPhi (const DetLayer &outlayer, const DetLayer &layer, const TrackingRegion &region, const edm::EventSetup &iSetup, bool precise=true, float extraTolerance=0.f)
 
PixelRecoRange< float > operator() (float xHit, float yHit, float zHit, float errRPhi) const
 
bool prefilter (float xHit, float yHit) const
 

Private Member Functions

void initBarrelLayer (const DetLayer &layer)
 
void initBarrelMS (const DetLayer &outLayer)
 
void initForwardLayer (const DetLayer &layer, float zMinOrigin, float zMaxOrigin)
 
void initForwardMS (const DetLayer &outLayer)
 
PixelRecoRange< float > phiRange (const Point2D &hitXY, float zHit, float errRPhi) const
 

Private Attributes

bool innerIsBarrel
 
int ol
 
bool outerIsBarrel
 
MultipleScatteringParametrisation sigma
 
float theA
 
float theB
 
float theDeltaScatt
 
float theExtraTolerance
 
bool thePrecise
 
float thePtMin
 
float theRCurvature
 
float theRLayer
 
float theROrigin
 
float theScatt0
 
float theThickness
 
Point2D theVtx
 
float theVtxZ
 

Detailed Description

Definition at line 19 of file InnerDeltaPhi.h.

Member Typedef Documentation

Definition at line 21 of file InnerDeltaPhi.h.

Constructor & Destructor Documentation

InnerDeltaPhi::InnerDeltaPhi ( const DetLayer outlayer,
const DetLayer layer,
const TrackingRegion region,
const edm::EventSetup iSetup,
bool  precise = true,
float  extraTolerance = 0.f 
)

Definition at line 83 of file InnerDeltaPhi.cc.

References PixelRecoUtilities::bendingRadius(), initBarrelLayer(), initBarrelMS(), initForwardLayer(), initForwardMS(), innerIsBarrel, TrackingRegion::originZBound(), outerIsBarrel, thePtMin, theRCurvature, and theVtxZ.

89  : innerIsBarrel(layer.isBarrel()),
90  outerIsBarrel(outlayer.isBarrel()),
92  ol(outlayer.seqNum()),
93  theROrigin(region.originRBound()),
94  theRLayer(0),
95  theThickness(0),
96  theExtraTolerance(extraTolerance),
97  theA(0),
98  theB(0),
99  theVtxZ(region.origin().z()),
100  thePtMin(region.ptMin()),
101  theVtx(region.origin().x(), region.origin().y()),
102  sigma(&layer, iSetup)
103 
104 {
105  float zMinOrigin = theVtxZ - region.originZBound();
106  float zMaxOrigin = theVtxZ + region.originZBound();
108 
109  if (innerIsBarrel)
110  initBarrelLayer(layer);
111  else
112  initForwardLayer(layer, zMinOrigin, zMaxOrigin);
113 
114  if (outerIsBarrel)
115  initBarrelMS(outlayer);
116  else
117  initForwardMS(outlayer);
118 }
float originRBound() const
bounds the particle vertex in the transverse plane
GlobalPoint const & origin() const
void initBarrelMS(const DetLayer &outLayer)
T y() const
Definition: PV3DBase.h:60
Point2D theVtx
Definition: InnerDeltaPhi.h:56
int seqNum() const
Definition: DetLayer.h:35
T z() const
Definition: PV3DBase.h:61
float originZBound() const
bounds the particle vertex in the longitudinal plane
bool isBarrel() const
Definition: DetLayer.h:31
void initForwardMS(const DetLayer &outLayer)
float theThickness
Definition: InnerDeltaPhi.h:44
void initBarrelLayer(const DetLayer &layer)
float theRCurvature
Definition: InnerDeltaPhi.h:48
void initForwardLayer(const DetLayer &layer, float zMinOrigin, float zMaxOrigin)
float ptMin() const
minimal pt of interest
T bendingRadius(T pt, const edm::EventSetup &iSetup)
float theExtraTolerance
Definition: InnerDeltaPhi.h:49
T x() const
Definition: PV3DBase.h:59
MultipleScatteringParametrisation sigma
Definition: InnerDeltaPhi.h:58

Member Function Documentation

void InnerDeltaPhi::initBarrelLayer ( const DetLayer layer)
private

Definition at line 148 of file InnerDeltaPhi.cc.

References Surface::bounds(), BarrelDetLayer::specificSurface(), GeometricSearchDet::surface(), theRLayer, theThickness, and Bounds::thickness().

Referenced by InnerDeltaPhi().

148  {
149  const BarrelDetLayer& bl = static_cast<const BarrelDetLayer&>(layer);
150  float rLayer = bl.specificSurface().radius();
151 
152  // the maximal delta phi will be for the innermost hits
153  theThickness = layer.surface().bounds().thickness();
154  theRLayer = rLayer - 0.5f * theThickness;
155 }
const Bounds & bounds() const
Definition: Surface.h:89
virtual const BoundCylinder & specificSurface() const final
Extension of the interface.
virtual const BoundSurface & surface() const =0
The surface of the GeometricSearchDet.
float theThickness
Definition: InnerDeltaPhi.h:44
virtual float thickness() const =0
void InnerDeltaPhi::initBarrelMS ( const DetLayer outLayer)
private

Definition at line 120 of file InnerDeltaPhi.cc.

References Surface::bounds(), Bounds::length(), ol, sigma, BarrelDetLayer::specificSurface(), GeometricSearchDet::surface(), theDeltaScatt, thePtMin, theScatt0, and SiStripMonitorCluster_cfi::zmax.

Referenced by InnerDeltaPhi().

120  {
121  const BarrelDetLayer& bl = static_cast<const BarrelDetLayer&>(outLayer);
122  float rLayer = bl.specificSurface().radius();
123  auto zmax = 0.5f * outLayer.surface().bounds().length();
124  PixelRecoPointRZ zero(0., 0.);
125  PixelRecoPointRZ point1(rLayer, 0.);
126  PixelRecoPointRZ point2(rLayer, zmax);
127  auto scatt1 = 3.f * sigma(thePtMin, zero, point1, ol);
128  auto scatt2 = 3.f * sigma(thePtMin, zero, point2, ol);
129  theDeltaScatt = (scatt2 - scatt1) / zmax;
130  theScatt0 = scatt1;
131 }
virtual float length() const =0
const Bounds & bounds() const
Definition: Surface.h:89
virtual const BoundCylinder & specificSurface() const final
Extension of the interface.
float theDeltaScatt
Definition: InnerDeltaPhi.h:46
virtual const BoundSurface & surface() const =0
The surface of the GeometricSearchDet.
MultipleScatteringParametrisation sigma
Definition: InnerDeltaPhi.h:58
void InnerDeltaPhi::initForwardLayer ( const DetLayer layer,
float  zMinOrigin,
float  zMaxOrigin 
)
private

Definition at line 157 of file InnerDeltaPhi.cc.

References Surface::bounds(), GeometricSearchDet::position(), ForwardDetLayer::specificSurface(), GeometricSearchDet::surface(), theA, theB, theRLayer, theThickness, Bounds::thickness(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by InnerDeltaPhi().

157  {
158  const ForwardDetLayer& fl = static_cast<const ForwardDetLayer&>(layer);
159  theRLayer = fl.specificSurface().innerRadius();
160  float layerZ = layer.position().z();
161  theThickness = layer.surface().bounds().thickness();
162  float layerZmin = layerZ > 0 ? layerZ - 0.5f * theThickness : layerZ + 0.5f * theThickness;
163  theB = layerZ > 0 ? zMaxOrigin : zMinOrigin;
164  theA = layerZmin - theB;
165 }
const Bounds & bounds() const
Definition: Surface.h:89
T z() const
Definition: PV3DBase.h:61
virtual const BoundSurface & surface() const =0
The surface of the GeometricSearchDet.
virtual const BoundDisk & specificSurface() const final
float theThickness
Definition: InnerDeltaPhi.h:44
virtual float thickness() const =0
virtual const Surface::PositionType & position() const
Returns position of the surface.
void InnerDeltaPhi::initForwardMS ( const DetLayer outLayer)
private

Definition at line 133 of file InnerDeltaPhi.cc.

References HLT_2018_cff::minR, ol, GeometricSearchDet::position(), sigma, ForwardDetLayer::specificSurface(), theDeltaScatt, thePtMin, theScatt0, theVtxZ, and PV3DBase< T, PVType, FrameType >::z().

Referenced by InnerDeltaPhi().

133  {
134  const ForwardDetLayer& fl = static_cast<const ForwardDetLayer&>(outLayer);
135  auto minR = fl.specificSurface().innerRadius();
136  auto maxR = fl.specificSurface().outerRadius();
137  auto layerZ = outLayer.position().z();
138  // compute min and max multiple scattering correction
139  PixelRecoPointRZ zero(0., theVtxZ);
140  PixelRecoPointRZ point1(minR, layerZ);
141  PixelRecoPointRZ point2(maxR, layerZ);
142  auto scatt1 = 3.f * sigma(thePtMin, zero, point1, ol);
143  auto scatt2 = 3.f * sigma(thePtMin, zero, point2, ol);
144  theDeltaScatt = (scatt2 - scatt1) / (maxR - minR);
145  theScatt0 = scatt1 - theDeltaScatt * minR;
146 }
float theDeltaScatt
Definition: InnerDeltaPhi.h:46
T z() const
Definition: PV3DBase.h:61
virtual const BoundDisk & specificSurface() const final
virtual const Surface::PositionType & position() const
Returns position of the surface.
MultipleScatteringParametrisation sigma
Definition: InnerDeltaPhi.h:58
PixelRecoRange<float> InnerDeltaPhi::operator() ( float  xHit,
float  yHit,
float  zHit,
float  errRPhi 
) const
inline

Definition at line 32 of file InnerDeltaPhi.h.

32  {
33  return phiRange(Point2D(xHit, yHit), zHit, errRPhi);
34  }
PixelRecoRange< float > phiRange(const Point2D &hitXY, float zHit, float errRPhi) const
Basic2DVector< float > Point2D
Definition: InnerDeltaPhi.h:21
PixelRecoRange< float > InnerDeltaPhi::phiRange ( const Point2D hitXY,
float  zHit,
float  errRPhi 
) const
private

Definition at line 167 of file InnerDeltaPhi.cc.

References funct::abs(), SiPixelRawToDigiRegional_cfi::deltaPhi, Basic2DVector< T >::dot(), dt, MillePedeFileConverter_cfg::e, f, dqmMemoryStats::float, innerIsBarrel, M_PI, Basic2DVector< T >::mag(), margin, SiStripPI::max, min(), EgammaValidation_cff::num, outerIsBarrel, funct::sqr(), mathSSE::sqrt(), OrderedSet::t, theA, theB, theDeltaScatt, theExtraTolerance, thePrecise, theRCurvature, theRLayer, theROrigin, theScatt0, theThickness, theVtx, Basic2DVector< T >::unit(), and w.

167  {
168  float rLayer = theRLayer;
169  Point2D crossing;
170 
171  Point2D dHit = hitXY - theVtx;
172  auto dHitmag = dHit.mag();
173  float dLayer = 0.;
174  float dL = 0.;
175 
176  // track is crossing layer with angle such as:
177  // this factor should be taken in computation of eror projection
178  float cosCross = 0;
179 
180  //
181  // compute crossing of stright track with inner layer
182  //
183  if (!innerIsBarrel) {
184  auto t = theA / (hitZ - theB);
185  auto dt = std::abs(theThickness / (hitZ - theB));
186  crossing = theVtx + t * dHit;
187  rLayer = crossing.mag();
188  dLayer = t * dHitmag;
189  dL = dt * dHitmag;
190  cosCross = std::abs(dHit.unit().dot(crossing.unit()));
191  } else {
192  //
193  // compute crossing of track with layer
194  // dHit - from VTX to outer hit
195  // rLayer - layer radius
196  // dLayer - distance from VTX to inner layer in direction of dHit
197  // vect(rLayer) = vect(rVTX) + vect(dHit).unit * dLayer
198  // rLayer^2 = (vect(rVTX) + vect(dHit).unit * dLayer)^2 and we have square eqation for dLayer
199  //
200  // barrel case
201  //
202  auto vtxmag2 = theVtx.mag2();
203  if (vtxmag2 < 1.e-10f) {
204  dLayer = rLayer;
205  } else {
206  // there are cancellation here....
207  double var_c = vtxmag2 - sqr(rLayer);
208  double var_b = theVtx.dot(dHit.unit());
209  double var_delta = sqr(var_b) - var_c;
210  if (var_delta <= 0.)
211  var_delta = 0;
212  dLayer = -var_b + std::sqrt(var_delta); //only the value along vector is OK.
213  }
214  crossing = theVtx + dHit.unit() * dLayer;
215  cosCross = std::abs(dHit.unit().dot(crossing.unit()));
216  dL = theThickness / cosCross;
217  }
218 
219 #ifdef USE_VECTORS_HERE
220  cms_float32x4_t num{dHitmag, dLayer, theROrigin * (dHitmag - dLayer), 1.f};
221  cms_float32x4_t den{2 * theRCurvature, 2 * theRCurvature, dHitmag * dLayer, 1.f};
222  auto phis = f_asin07f(num / den);
223  phis = phis * dLayer / (rLayer * cosCross);
224  auto deltaPhi = std::abs(phis[0] - phis[1]);
225  auto deltaPhiOrig = phis[2];
226 #else
227 #warning no vector!
228  auto alphaHit = cropped_asin(dHitmag / (2 * theRCurvature));
229  auto OdeltaPhi = std::abs(alphaHit - cropped_asin(dLayer / (2 * theRCurvature)));
230  OdeltaPhi *= dLayer / (rLayer * cosCross);
231  // compute additional delta phi due to origin radius
232  auto OdeltaPhiOrig = cropped_asin(theROrigin * (dHitmag - dLayer) / (dHitmag * dLayer));
233  OdeltaPhiOrig *= dLayer / (rLayer * cosCross);
234  // std::cout << "dphi " << OdeltaPhi<<'/'<<OdeltaPhiOrig << ' ' << deltaPhi<<'/'<<deltaPhiOrig << std::endl;
235 
236  auto deltaPhi = OdeltaPhi;
237  auto deltaPhiOrig = OdeltaPhiOrig;
238 #endif
239 
240  // additinal angle due to not perpendicular stright line crossing (for displaced beam)
241  // double dPhiCrossing = (cosCross > 0.9999) ? 0 : dL * sqrt(1-sqr(cosCross))/ rLayer;
242  Point2D crossing2 = theVtx + dHit.unit() * (dLayer + dL);
243  auto phicross2 = f_phi(crossing2);
244  auto phicross1 = f_phi(crossing);
245  auto dphicross = phicross2 - phicross1;
246  if (dphicross < -float(M_PI))
247  dphicross += float(2 * M_PI);
248  if (dphicross > float(M_PI))
249  dphicross -= float(2 * M_PI);
250  if (dphicross > float(M_PI / 2))
251  dphicross = 0.; // something wrong?
252  phicross2 = phicross1 + dphicross;
253 
254  // inner hit error taken as constant
255  auto deltaPhiHit = theExtraTolerance / rLayer;
256 
257  // outer hit error
258  // double deltaPhiHitOuter = errRPhi/rLayer;
259  auto deltaPhiHitOuter = errRPhi / hitXY.mag();
260 
261  auto margin = deltaPhi + deltaPhiOrig + deltaPhiHit + deltaPhiHitOuter;
262 
263  if (thePrecise) {
264  // add multiple scattering correction
265 
266  /*
267  PixelRecoPointRZ zero(0., theVtxZ);
268  PixelRecoPointRZ point(hitXY.mag(), hitZ);
269  auto scatt = 3.f*sigma(thePtMin,zero, point, ol);
270  */
271 
272  auto w = outerIsBarrel ? std::abs(hitZ) : hitXY.mag();
273  auto nscatt = theScatt0 + theDeltaScatt * w;
274 
275  // std::cout << "scatt " << (outerIsBarrel ? "B" : "F") << (innerIsBarrel ? "B " : "F ")
276  // << scatt << ' ' << nscatt << ' ' << nscatt/scatt << std::endl;
277 
278  margin += nscatt / rLayer;
279  }
280 
281  return PixelRecoRange<float>(std::min(phicross1, phicross2) - margin, std::max(phicross1, phicross2) + margin);
282 }
float dt
Definition: AMPTWrapper.h:136
const double w
Definition: UKUtility.cc:23
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
Point2D theVtx
Definition: InnerDeltaPhi.h:56
Basic2DVector unit() const
float theDeltaScatt
Definition: InnerDeltaPhi.h:46
T sqrt(T t)
Definition: SSEVec.h:19
Double_t margin
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
#define M_PI
float theThickness
Definition: InnerDeltaPhi.h:44
float theRCurvature
Definition: InnerDeltaPhi.h:48
Square< F >::type sqr(const F &f)
Definition: Square.h:14
float theExtraTolerance
Definition: InnerDeltaPhi.h:49
bool InnerDeltaPhi::prefilter ( float  xHit,
float  yHit 
) const
inline

Definition at line 30 of file InnerDeltaPhi.h.

Referenced by HitPairGeneratorFromLayerPair::doublets().

30 { return xHit * xHit + yHit * yHit > theRLayer * theRLayer; }

Member Data Documentation

bool InnerDeltaPhi::innerIsBarrel
private

Definition at line 37 of file InnerDeltaPhi.h.

Referenced by InnerDeltaPhi(), and phiRange().

int InnerDeltaPhi::ol
private

Definition at line 40 of file InnerDeltaPhi.h.

Referenced by initBarrelMS(), and initForwardMS().

bool InnerDeltaPhi::outerIsBarrel
private

Definition at line 38 of file InnerDeltaPhi.h.

Referenced by InnerDeltaPhi(), and phiRange().

MultipleScatteringParametrisation InnerDeltaPhi::sigma
private

Definition at line 58 of file InnerDeltaPhi.h.

Referenced by initBarrelMS(), and initForwardMS().

float InnerDeltaPhi::theA
private

Definition at line 50 of file InnerDeltaPhi.h.

Referenced by initForwardLayer(), and phiRange().

float InnerDeltaPhi::theB
private

Definition at line 51 of file InnerDeltaPhi.h.

Referenced by initForwardLayer(), and phiRange().

float InnerDeltaPhi::theDeltaScatt
private

Definition at line 46 of file InnerDeltaPhi.h.

Referenced by initBarrelMS(), initForwardMS(), and phiRange().

float InnerDeltaPhi::theExtraTolerance
private

Definition at line 49 of file InnerDeltaPhi.h.

Referenced by phiRange().

bool InnerDeltaPhi::thePrecise
private

Definition at line 39 of file InnerDeltaPhi.h.

Referenced by phiRange().

float InnerDeltaPhi::thePtMin
private

Definition at line 54 of file InnerDeltaPhi.h.

Referenced by initBarrelMS(), initForwardMS(), and InnerDeltaPhi().

float InnerDeltaPhi::theRCurvature
private

Definition at line 48 of file InnerDeltaPhi.h.

Referenced by InnerDeltaPhi(), and phiRange().

float InnerDeltaPhi::theRLayer
private

Definition at line 43 of file InnerDeltaPhi.h.

Referenced by initBarrelLayer(), initForwardLayer(), and phiRange().

float InnerDeltaPhi::theROrigin
private

Definition at line 42 of file InnerDeltaPhi.h.

Referenced by phiRange().

float InnerDeltaPhi::theScatt0
private

Definition at line 45 of file InnerDeltaPhi.h.

Referenced by initBarrelMS(), initForwardMS(), and phiRange().

float InnerDeltaPhi::theThickness
private

Definition at line 44 of file InnerDeltaPhi.h.

Referenced by initBarrelLayer(), initForwardLayer(), and phiRange().

Point2D InnerDeltaPhi::theVtx
private

Definition at line 56 of file InnerDeltaPhi.h.

Referenced by phiRange().

float InnerDeltaPhi::theVtxZ
private

Definition at line 53 of file InnerDeltaPhi.h.

Referenced by initForwardMS(), and InnerDeltaPhi().