CMS 3D CMS Logo

Public Types | Public Member Functions | Static Public Member Functions | Private Attributes | Static Private Attributes

MultipleScatteringParametrisation Class Reference

#include <MultipleScatteringParametrisation.h>

List of all members.

Public Types

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

Public Member Functions

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

Static Public Member Functions

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

Private Attributes

MSLayer theLayer
MSLayersKeeper const * theLayerKeeper

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

Enumerator:
notAssumeConsecutive 
useConsecutive 

Definition at line 27 of file MultipleScatteringParametrisation.h.

Enumerator:
useDetLayer 
useX0AtEta 
useX0DataAveraged 

Definition at line 26 of file MultipleScatteringParametrisation.h.


Constructor & Destructor Documentation

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

Definition at line 52 of file MultipleScatteringParametrisation.cc.

References initKeepers(), MSLayersKeeper::layer(), theLayer, and theLayerKeeper.

                                                                                                         :
  theLayerKeeper(keepers(x0Source))
{

  // FIXME not thread safe: move elsewhere...
  initKeepers(iSetup);

  if (!layer) return;
  theLayer = theLayerKeeper->layer(layer);
} 

Member Function Documentation

void MultipleScatteringParametrisation::initKeepers ( const edm::EventSetup iSetup) [static]

Definition at line 45 of file MultipleScatteringParametrisation.cc.

References init.

Referenced by MultipleScatteringParametrisation().

                                                                              {
  const_cast<Keepers&>(keepers).init(iSetup);
}
float MultipleScatteringParametrisation::operator() ( float  pT,
const PixelRecoPointRZ pointV,
const PixelRecoPointRZ pointO,
int  ol 
) const

Definition at line 125 of file MultipleScatteringParametrisation.cc.

References PixelRecoLineRZ::cotLine(), MSLayer::crossing(), MSLayersKeeper::layers(), MSLayer::seqNum(), MSLayersAtAngle::sumX0D(), theLayer, theLayerKeeper, x0ToSigma, and PixelRecoPointRZ::z().

{   

  PixelRecoLineRZ lineIO(pointV, pointO);
  PixelRecoPointRZ pointI = theLayer.crossing(lineIO).first;
  float cotTheta = lineIO.cotLine();

  const MSLayersAtAngle & layersAtEta = theLayerKeeper->layers(cotTheta);
  float sumX0D = layersAtEta.sumX0D(pointV.z(), theLayer.seqNum(), ol, pointI, pointO);
  return x0ToSigma * sumX0D /pT;
}
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 100 of file MultipleScatteringParametrisation.cc.

References PixelRecoLineRZ::cotLine(), MSLayer::crossing(), MSLayersKeeper::layers(), PixelRecoPointRZ::r(), mathSSE::sqrt(), MSLayersAtAngle::sumX0D(), theLayer, theLayerKeeper, useConsecutive, MSLayer::x0(), and x0ToSigma.

{   


  PixelRecoLineRZ lineIO(pointI, pointO, tip);
  PixelRecoPointRZ pointM = theLayer.crossing(lineIO).first;
  float cotTheta = lineIO.cotLine();

  if (consecutive==useConsecutive) {
    float dist = fabs(  (pointO.r()-pointM.r())
                      * (pointM.r()-pointI.r())
                      / (pointO.r()-pointI.r()) );
    return  x0ToSigma * sqrt(theLayer.x0(cotTheta)) * dist /pT;
  } else {
    const MSLayersAtAngle & layersAtEta = theLayerKeeper->layers(cotTheta);
    float sumX0D = layersAtEta.sumX0D(pointI, pointM, pointO);
    return x0ToSigma * sumX0D /pT;
  }
}
float MultipleScatteringParametrisation::operator() ( float  pt,
float  cotTheta,
const PixelRecoPointRZ point,
int  ol 
) const

Definition at line 87 of file MultipleScatteringParametrisation.cc.

References MSLayer::crossing(), MSLayersKeeper::layers(), MSLayer::seqNum(), MSLayersAtAngle::sumX0D(), theLayer, theLayerKeeper, and x0ToSigma.

                                                                                                                      {

  PixelRecoLineRZ lineIO(pointI, cotTheta);
  PixelRecoPointRZ pointO = theLayer.crossing(lineIO).first;

  const MSLayersAtAngle & layersAtEta = theLayerKeeper->layers(cotTheta);
  
  float sumX0D = layersAtEta.sumX0D(il, theLayer.seqNum(), pointI, pointO);
  return x0ToSigma * sumX0D /pT;
}
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 72 of file MultipleScatteringParametrisation.cc.

References MSLayer::crossing(), MSLayersKeeper::layers(), MSLayersAtAngle::sumX0D(), theLayer, theLayerKeeper, and x0ToSigma.

{

  PixelRecoLineRZ lineIO(pointI, cotTheta, tip);
  PixelRecoPointRZ pointO = theLayer.crossing(lineIO).first;

  const MSLayersAtAngle & layersAtEta = theLayerKeeper->layers(cotTheta);
  
  float sumX0D = layersAtEta.sumX0D(pointI, pointO);
  return x0ToSigma * sumX0D /pT;
}
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 64 of file MultipleScatteringParametrisation.cc.

References MSLayer::sumX0D(), theLayer, and x0ToSigma.

{
  float sumX0D = theLayer.sumX0D(cotTheta); 
  return x0ToSigma * sumX0D /pT;
}

Member Data Documentation

const float MultipleScatteringParametrisation::x0ToSigma = 0.0136f [static, private]

Definition at line 72 of file MultipleScatteringParametrisation.h.

Referenced by operator()().