CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Static Public Member Functions | Private Attributes | Static Private Attributes
MultipleScatteringParametrisation Class Reference

#include <MultipleScatteringParametrisation.h>

Public Types

enum  Consecutive { notAssumeConsecutive, useConsecutive }
 
enum  X0Source { useDetLayer =0, useX0AtEta =1, useX0DataAveraged =2 }
 

Public Member Functions

void init (const DetLayer *layer, const edm::EventSetup &iSetup, X0Source x0source=useX0AtEta)
 
 MultipleScatteringParametrisation ()
 
 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, float cotTheta, const PixelRecoPointRZ &point, int ol) const
 
float operator() (float pt, const PixelRecoPointRZ &point1, const PixelRecoPointRZ &point2, Consecutive consecutive=notAssumeConsecutive, float transverseIP=0.) const
 
float operator() (float pT, const PixelRecoPointRZ &pointV, const PixelRecoPointRZ &pointO, int ol) const
 

Static Public Member Functions

static void initKeepers (const edm::EventSetup &iSetup)
 

Private Attributes

MSLayer theLayer
 
MSLayersKeeper const * theLayerKeeper = 0
 

Static Private Attributes

static const float x0ToSigma = 0.0136f
 

Detailed Description

Parametrisation of multiple scattering sigma in tracker.

Definition at line 20 of file MultipleScatteringParametrisation.h.

Member Enumeration Documentation

Constructor & Destructor Documentation

MultipleScatteringParametrisation::MultipleScatteringParametrisation ( )
inline

Definition at line 29 of file MultipleScatteringParametrisation.h.

29 {}
MultipleScatteringParametrisation::MultipleScatteringParametrisation ( const DetLayer layer,
const edm::EventSetup iSetup,
X0Source  x0source = useX0AtEta 
)
inline

Definition at line 31 of file MultipleScatteringParametrisation.h.

References init(), notAssumeConsecutive, operator()(), point, EnergyCorrector::pt, and useX0AtEta.

33  {
34  init(layer,iSetup,x0source);
35  }
void init(const DetLayer *layer, const edm::EventSetup &iSetup, X0Source x0source=useX0AtEta)

Member Function Documentation

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

Definition at line 56 of file MultipleScatteringParametrisation.cc.

Referenced by initKeepers(), and MultipleScatteringParametrisation().

56  {
57 
58  theLayerKeeper = keepers(x0Source);
59 
60  // FIXME not thread safe: move elsewhere...
61  initKeepers(iSetup);
62 
63  if (!layer) return;
64  theLayer = theLayerKeeper->layer(layer);
65 }
static void initKeepers(const edm::EventSetup &iSetup)
virtual MSLayer layer(const DetLayer *dl) const
void MultipleScatteringParametrisation::initKeepers ( const edm::EventSetup iSetup)
static

Definition at line 49 of file MultipleScatteringParametrisation.cc.

References init().

49  {
50  keepers.init(iSetup);
51 }
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 68 of file MultipleScatteringParametrisation.cc.

Referenced by MultipleScatteringParametrisation().

70 {
71  float sumX0D = theLayer.sumX0D(cotTheta);
72  return x0ToSigma * sumX0D /pT;
73 }
float sumX0D(float cotTheta) const
Definition: MSLayer.cc:152
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 76 of file MultipleScatteringParametrisation.cc.

References MSLayersAtAngle::sumX0D().

78 {
79 
80  PixelRecoLineRZ lineIO(pointI, cotTheta, tip);
81  PixelRecoPointRZ pointO = theLayer.crossing(lineIO).first;
82 
83  const MSLayersAtAngle & layersAtEta = theLayerKeeper->layers(cotTheta);
84 
85  float sumX0D = layersAtEta.sumX0D(pointI, pointO);
86  return x0ToSigma * sumX0D /pT;
87 }
virtual const MSLayersAtAngle & layers(float cotTheta) const =0
float sumX0D(const PixelRecoPointRZ &pointI, const PixelRecoPointRZ &pointO) const
std::pair< PixelRecoPointRZ, bool > crossing(const PixelRecoLineRZ &line) const
Definition: MSLayer.cc:90
float MultipleScatteringParametrisation::operator() ( float  pt,
float  cotTheta,
const PixelRecoPointRZ point,
int  ol 
) const

Definition at line 91 of file MultipleScatteringParametrisation.cc.

References MSLayersAtAngle::sumX0D().

91  {
92 
93  PixelRecoLineRZ lineIO(pointI, cotTheta);
94  PixelRecoPointRZ pointO = theLayer.crossing(lineIO).first;
95 
96  const MSLayersAtAngle & layersAtEta = theLayerKeeper->layers(cotTheta);
97 
98  float sumX0D = layersAtEta.sumX0D(il, theLayer.seqNum(), pointI, pointO);
99  return x0ToSigma * sumX0D /pT;
100 }
virtual const MSLayersAtAngle & layers(float cotTheta) const =0
float sumX0D(const PixelRecoPointRZ &pointI, const PixelRecoPointRZ &pointO) const
std::pair< PixelRecoPointRZ, bool > crossing(const PixelRecoLineRZ &line) const
Definition: MSLayer.cc:90
int seqNum() const
Definition: MSLayer.h:41
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 104 of file MultipleScatteringParametrisation.cc.

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

110 {
111 
112 
113  PixelRecoLineRZ lineIO(pointI, pointO, tip);
114  PixelRecoPointRZ pointM = theLayer.crossing(lineIO).first;
115  float cotTheta = lineIO.cotLine();
116 
117  if (consecutive==useConsecutive) {
118  float dist = fabs( (pointO.r()-pointM.r())
119  * (pointM.r()-pointI.r())
120  / (pointO.r()-pointI.r()) );
121  return x0ToSigma * sqrt(theLayer.x0(cotTheta)) * dist /pT;
122  } else {
123  const MSLayersAtAngle & layersAtEta = theLayerKeeper->layers(cotTheta);
124  float sumX0D = layersAtEta.sumX0D(pointI, pointM, pointO);
125  return x0ToSigma * sumX0D /pT;
126  }
127 }
float x0(float cotTheta) const
Definition: MSLayer.cc:137
virtual const MSLayersAtAngle & layers(float cotTheta) const =0
T sqrt(T t)
Definition: SSEVec.h:18
float sumX0D(const PixelRecoPointRZ &pointI, const PixelRecoPointRZ &pointO) const
std::pair< PixelRecoPointRZ, bool > crossing(const PixelRecoLineRZ &line) const
Definition: MSLayer.cc:90
float r() const
float MultipleScatteringParametrisation::operator() ( float  pT,
const PixelRecoPointRZ pointV,
const PixelRecoPointRZ pointO,
int  ol 
) const

Definition at line 129 of file MultipleScatteringParametrisation.cc.

References PixelRecoLineRZ::cotLine(), MSLayersAtAngle::sumX0D(), and PixelRecoPointRZ::z().

134 {
135 
136  PixelRecoLineRZ lineIO(pointV, pointO);
137  PixelRecoPointRZ pointI = theLayer.crossing(lineIO).first;
138  float cotTheta = lineIO.cotLine();
139 
140  const MSLayersAtAngle & layersAtEta = theLayerKeeper->layers(cotTheta);
141  float sumX0D = layersAtEta.sumX0D(pointV.z(), theLayer.seqNum(), ol, pointI, pointO);
142  return x0ToSigma * sumX0D /pT;
143 }
virtual const MSLayersAtAngle & layers(float cotTheta) const =0
float sumX0D(const PixelRecoPointRZ &pointI, const PixelRecoPointRZ &pointO) const
std::pair< PixelRecoPointRZ, bool > crossing(const PixelRecoLineRZ &line) const
Definition: MSLayer.cc:90
float z() const
int seqNum() const
Definition: MSLayer.h:41

Member Data Documentation

MSLayer MultipleScatteringParametrisation::theLayer
private

Definition at line 78 of file MultipleScatteringParametrisation.h.

MSLayersKeeper const* MultipleScatteringParametrisation::theLayerKeeper = 0
private

Definition at line 79 of file MultipleScatteringParametrisation.h.

const float MultipleScatteringParametrisation::x0ToSigma = 0.0136f
staticprivate

Definition at line 80 of file MultipleScatteringParametrisation.h.

Referenced by sqr().