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 Attributes | Static Private Attributes
MultipleScatteringParametrisation Class Reference

#include <MultipleScatteringParametrisation.h>

Public Types

enum  Consecutive { notAssumeConsecutive, useConsecutive }
 
enum  X0Source { useDetLayer, useX0AtEta, useX0DataAveraged }
 

Public Member Functions

 MultipleScatteringParametrisation (const DetLayer *layer, const edm::EventSetup &iSetup, X0Source x0source=useX0AtEta)
 
float operator() (float pt, float cotTheta, float transverseIP=0.) const
 
float operator() (float pt, float cotTheta, const PixelRecoPointRZ &point, float transverseIP=0.) const
 
float operator() (float pt, const PixelRecoPointRZ &point1, const PixelRecoPointRZ &point2, Consecutive consecutive=notAssumeConsecutive, float transverseIP=0.) const
 

Private Attributes

MSLayer theLayer
 
MSLayersKeepertheLayerKeeper
 

Static Private Attributes

static const float x0ToSigma = 0.0136f
 

Detailed Description

Parametrisation of multiple scattering sigma in tracker.

Definition at line 18 of file MultipleScatteringParametrisation.h.

Member Enumeration Documentation

Constructor & Destructor Documentation

MultipleScatteringParametrisation::MultipleScatteringParametrisation ( const DetLayer layer,
const edm::EventSetup iSetup,
X0Source  x0source = useX0AtEta 
)

Definition at line 28 of file MultipleScatteringParametrisation.cc.

References gather_cfg::cout.

30 {
31  switch (x0Source) {
32  case useX0AtEta: {
33  static MSLayersKeeperX0AtEta x0AtEta;
34  theLayerKeeper = &x0AtEta;
35  break;
36  }
37  case useX0DataAveraged: {
38  static MSLayersKeeperX0Averaged x0Averaged;
39  theLayerKeeper = &x0Averaged;
40  break;
41  }
42 
43  case useDetLayer: {
44  static MSLayersKeeperX0DetLayer x0DetLayer;
45  theLayerKeeper = &x0DetLayer;
46  break;
47  }
48  default:
49  //FIXME should throw or similar
50  cout << "** MultipleScatteringParametrisation ** wrong x0Source"<<endl;
51  return;
52  }
53  theLayerKeeper->init(iSetup);
54  if (!layer) return;
55  theLayer = theLayerKeeper->layer(layer);
56 }
virtual void init(const edm::EventSetup &iSetup)
virtual MSLayer layer(const DetLayer *dl) const
tuple cout
Definition: gather_cfg.py:121

Member Function Documentation

float MultipleScatteringParametrisation::operator() ( float  pt,
float  cotTheta,
float  transverseIP = 0. 
) const

MS sigma at the layer for which parametrisation is initialised; particle assumed to come from nominal vertex, "fast" methods called

Definition at line 59 of file MultipleScatteringParametrisation.cc.

61 {
62  float sumX0D = theLayer.sumX0D(cotTheta);
63  return x0ToSigma * sumX0D /pT;
64 }
float sumX0D(float cotTheta) const
Definition: MSLayer.cc:169
float MultipleScatteringParametrisation::operator() ( float  pt,
float  cotTheta,
const PixelRecoPointRZ point,
float  transverseIP = 0. 
) const

MS sigma at the layer for which parametrisation is initialised; particle assumed to come from constraint point (inner to layer). layer by layer contribution is calculated

Definition at line 67 of file MultipleScatteringParametrisation.cc.

References MSLayersAtAngle::sumX0D().

69 {
70 
71  PixelRecoLineRZ lineIO(pointI, cotTheta, tip);
72  PixelRecoPointRZ pointO = theLayer.crossing(lineIO).first;
73 
74  const MSLayersAtAngle & layersAtEta = theLayerKeeper->layers(cotTheta);
75 
76  float sumX0D = layersAtEta.sumX0D(pointI, pointO);
77  return x0ToSigma * sumX0D /pT;
78 }
virtual const MSLayersAtAngle & layers(float cotTheta) const =0
std::pair< PixelRecoPointRZ, bool > crossing(const PixelRecoLineRZ &line) const
Definition: MSLayer.cc:76
float sumX0D(const PixelRecoPointRZ &pointI, const PixelRecoPointRZ &pointO, float tip=0.) const
float MultipleScatteringParametrisation::operator() ( float  pt,
const PixelRecoPointRZ point1,
const PixelRecoPointRZ point2,
Consecutive  consecutive = notAssumeConsecutive,
float  transverseIP = 0. 
) const

MS sigma at the layer for which parametrisation is initialised; particle assumed to be measured at point1 and point2, it is assumed that layer is between point1 and point2. layer by layer contribution is calculated

Definition at line 81 of file MultipleScatteringParametrisation.cc.

References PixelRecoLineRZ::cotLine(), PixelRecoPointRZ::r(), mathSSE::sqrt(), and MSLayersAtAngle::sumX0D().

87 {
88 
89 
90  PixelRecoLineRZ lineIO(pointI, pointO, tip);
91  PixelRecoPointRZ pointM = theLayer.crossing(lineIO).first;
92  float cotTheta = lineIO.cotLine();
93 
94  if (consecutive==useConsecutive) {
95  float dist = fabs( (pointO.r()-pointM.r())
96  * (pointM.r()-pointI.r())
97  / (pointO.r()-pointI.r()) );
98  return x0ToSigma * sqrt(theLayer.x0(cotTheta)) * dist /pT;
99  } else {
100  const MSLayersAtAngle & layersAtEta = theLayerKeeper->layers(cotTheta);
101  float sumX0D = layersAtEta.sumX0D(pointI, pointM, pointO);
102  return x0ToSigma * sumX0D /pT;
103  }
104 }
float x0(float cotTheta) const
Definition: MSLayer.cc:151
T sqrt(T t)
Definition: SSEVec.h:46
virtual const MSLayersAtAngle & layers(float cotTheta) const =0
std::pair< PixelRecoPointRZ, bool > crossing(const PixelRecoLineRZ &line) const
Definition: MSLayer.cc:76
float sumX0D(const PixelRecoPointRZ &pointI, const PixelRecoPointRZ &pointO, float tip=0.) const
float r() const

Member Data Documentation

MSLayer MultipleScatteringParametrisation::theLayer
private

Definition at line 54 of file MultipleScatteringParametrisation.h.

MSLayersKeeper* MultipleScatteringParametrisation::theLayerKeeper
private

Definition at line 55 of file MultipleScatteringParametrisation.h.

const float MultipleScatteringParametrisation::x0ToSigma = 0.0136f
staticprivate

Definition at line 56 of file MultipleScatteringParametrisation.h.