CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups 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 MagneticField &field, const MultipleScatteringParametrisationMaker &msmaker, 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 18 of file InnerDeltaPhi.h.

Member Typedef Documentation

Definition at line 20 of file InnerDeltaPhi.h.

Constructor & Destructor Documentation

InnerDeltaPhi::InnerDeltaPhi ( const DetLayer outlayer,
const DetLayer layer,
const TrackingRegion region,
const MagneticField field,
const MultipleScatteringParametrisationMaker msmaker,
bool  precise = true,
float  extraTolerance = 0.f 
)

Definition at line 84 of file InnerDeltaPhi.cc.

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

91  : innerIsBarrel(layer.isBarrel()),
92  outerIsBarrel(outlayer.isBarrel()),
94  ol(outlayer.seqNum()),
95  theROrigin(region.originRBound()),
96  theRLayer(0),
97  theThickness(0),
98  theExtraTolerance(extraTolerance),
99  theA(0),
100  theB(0),
101  theVtxZ(region.origin().z()),
102  thePtMin(region.ptMin()),
103  theVtx(region.origin().x(), region.origin().y()),
104  sigma(msmaker.parametrisation(&layer)) {
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
MultipleScatteringParametrisation parametrisation(const DetLayer *layer, X0Source x0Source=X0Source::useX0AtEta) const
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
float theExtraTolerance
Definition: InnerDeltaPhi.h:49
T x() const
Definition: PV3DBase.h:59
T bendingRadius(T pt, const MagneticField &field)
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(), phase1PixelTopology::layer, 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 }
virtual const BoundSurface & surface() const =0
The surface of the GeometricSearchDet.
const Bounds & bounds() const
Definition: Surface.h:87
constexpr std::array< uint8_t, layerIndexSize > layer
virtual float thickness() const =0
float theThickness
Definition: InnerDeltaPhi.h:44
virtual const BoundCylinder & specificSurface() const final
Extension of the interface.
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 SiPixelPI::zero.

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 const BoundSurface & surface() const =0
The surface of the GeometricSearchDet.
virtual float length() const =0
const Bounds & bounds() const
Definition: Surface.h:87
float theDeltaScatt
Definition: InnerDeltaPhi.h:46
virtual const BoundCylinder & specificSurface() const final
Extension of the interface.
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(), phase1PixelTopology::layer, 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 }
virtual const BoundSurface & surface() const =0
The surface of the GeometricSearchDet.
const Bounds & bounds() const
Definition: Surface.h:87
constexpr std::array< uint8_t, layerIndexSize > layer
virtual float thickness() const =0
T z() const
Definition: PV3DBase.h:61
float theThickness
Definition: InnerDeltaPhi.h:44
virtual const Surface::PositionType & position() const
Returns position of the surface.
virtual const BoundDisk & specificSurface() const final
void InnerDeltaPhi::initForwardMS ( const DetLayer outLayer)
private

Definition at line 133 of file InnerDeltaPhi.cc.

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

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
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 Surface::PositionType & position() const
Returns position of the surface.
virtual const BoundDisk & specificSurface() const final
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:20
PixelRecoRange< float > InnerDeltaPhi::phiRange ( const Point2D hitXY,
float  zHit,
float  errRPhi 
) const
private

Definition at line 167 of file InnerDeltaPhi.cc.

References funct::abs(), srCondWrite_cfg::deltaPhi, Basic2DVector< T >::dot(), dt, alignCSCRings::e, validate-o2o-wbm::f, innerIsBarrel, M_PI, Basic2DVector< T >::mag(), margin, SiStripPI::max, min(), pileupDistInMC::num, outerIsBarrel, sqr(), mathSSE::sqrt(), submitPVValidationJobs::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())
int sqr(const T &t)
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
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
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().