CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
MultipleScatteringUpdator Class Referencefinal

#include <MultipleScatteringUpdator.h>

Inheritance diagram for MultipleScatteringUpdator:
MaterialEffectsUpdator

Public Member Functions

void compute (const TrajectoryStateOnSurface &, const PropagationDirection, Effect &effect) const override
 
 MultipleScatteringUpdator (float mass, float ptMin=-1.)
 
 ~MultipleScatteringUpdator () override
 destructor More...
 
- Public Member Functions inherited from MaterialEffectsUpdator
float mass () const
 
 MaterialEffectsUpdator (float mass)
 
virtual TrajectoryStateOnSurface updateState (const TrajectoryStateOnSurface &TSoS, const PropagationDirection propDir) const
 
virtual bool updateStateInPlace (TrajectoryStateOnSurface &TSoS, const PropagationDirection propDir) const
 
virtual ~MaterialEffectsUpdator ()
 

Private Member Functions

MultipleScatteringUpdatorclone () const override
 

Private Attributes

float thePtMin
 

Additional Inherited Members

- Public Types inherited from MaterialEffectsUpdator
typedef materialEffect::Covariance Covariance
 
typedef materialEffect::CovIndex CovIndex
 
typedef materialEffect::Effect Effect
 

Detailed Description

Adds effects from multiple scattering (standard Highland formula) to a trajectory state. Uses radiation length from medium properties. Ported from ORCA.

Author
todorov, cerati

Definition at line 15 of file MultipleScatteringUpdator.h.

Constructor & Destructor Documentation

MultipleScatteringUpdator::MultipleScatteringUpdator ( float  mass,
float  ptMin = -1. 
)
inline

Specify assumed mass of particle for material effects. If ptMin > 0, then the rms muliple scattering angle will be calculated taking into account the uncertainty in the reconstructed track momentum. (By default, it is neglected). However, a lower limit on the possible value of the track Pt will be applied at ptMin, to avoid the rms multiple scattering becoming too big.

Definition at line 26 of file MultipleScatteringUpdator.h.

Referenced by clone().

MultipleScatteringUpdator::~MultipleScatteringUpdator ( )
inlineoverride

destructor

Definition at line 30 of file MultipleScatteringUpdator.h.

References compute().

30 {}

Member Function Documentation

MultipleScatteringUpdator* MultipleScatteringUpdator::clone ( void  ) const
inlineoverrideprivatevirtual

Implements MaterialEffectsUpdator.

Definition at line 17 of file MultipleScatteringUpdator.h.

References MultipleScatteringUpdator().

17  {
18  return new MultipleScatteringUpdator(*this);
19  }
MultipleScatteringUpdator(float mass, float ptMin=-1.)
void MultipleScatteringUpdator::compute ( const TrajectoryStateOnSurface TSoS,
const PropagationDirection  propDir,
Effect effect 
) const
overridevirtual

Implements MaterialEffectsUpdator.

Definition at line 15 of file MultipleScatteringUpdator.cc.

References a, funct::abs(), GetRecoTauVFromDQM_MC_cff::cl2, constexpr, gather_cfg::cout, edmIntegrityCheck::d, materialEffect::Effect::deltaCov, fact, TrajectoryStateOnSurface::globalMomentum(), TrajectoryStateOnSurface::localError(), TrajectoryStateOnSurface::localMomentum(), MaterialEffectsUpdator::mass(), LocalTrajectoryError::matrix(), Surface::mediumProperties(), materialEffect::msxx, materialEffect::msxy, materialEffect::msyy, AlCaHLTBitMon_ParallelJobs::p, p2, PV3DBase< T, PVType, FrameType >::perp2(), ALCARECOTkAlMinBias_cff::pMin, MediumProperties::radLen(), mathSSE::sqrt(), TrajectoryStateOnSurface::surface(), thePtMin, and UNLIKELY.

Referenced by CombinedMaterialEffectsUpdator::compute(), and ~MultipleScatteringUpdator().

17 {
18  //
19  // Get surface
20  //
21  const Surface& surface = TSoS.surface();
22  //
23  //
24  // Now get information on medium
25  //
26  const MediumProperties& mp = surface.mediumProperties();
27  if UNLIKELY(mp.radLen()==0) return;
28 
29  // Momentum vector
30  LocalVector d = TSoS.localMomentum();
31  float p2 = d.mag2();
32  d *= 1.f/sqrt(p2);
33  float xf = 1.f/std::abs(d.z()); // increase of path due to angle of incidence
34  // calculate general physics things
35  constexpr float amscon = 1.8496e-4; // (13.6MeV)**2
36  const float m2 = mass()*mass(); // use mass hypothesis from constructor
37  float e2 = p2 + m2;
38  float beta2 = p2/e2;
39  // calculate the multiple scattering angle
40  float radLen = mp.radLen()*xf; // effective rad. length
41  float sigt2 = 0.; // sigma(alpha)**2
42 
43  // Calculated rms scattering angle squared.
44  float fact = 1.f + 0.038f*unsafe_logf<2>(radLen); fact *=fact;
45  float a = fact/(beta2*p2);
46  sigt2 = amscon*radLen*a;
47 
48  if (thePtMin > 0) {
49 #ifdef DBG_MSU
50  std::cout<<"Original rms scattering = "<<sqrt(sigt2);
51 #endif
52  // Inflate estimated rms scattering angle, to take into account
53  // that 1/p is not known precisely.
54  AlgebraicSymMatrix55 const & covMatrix = TSoS.localError().matrix();
55  float error2_QoverP = covMatrix(0,0);
56  // Formula valid for ultra-relativistic particles.
57  // sigt2 *= (1. + p2 * error2_QoverP);
58  // Exact formula
59  sigt2 *= 1.f + error2_QoverP *( p2 + m2*beta2*(5.f + 3.f*p2*error2_QoverP) ) ;
60 #ifdef DBG_MSU
61  std::cout<<" new = "<<sqrt(sigt2);
62 #endif
63  // Convert Pt constraint to P constraint, neglecting uncertainty in
64  // track angle.
65  float pMin2 = thePtMin*thePtMin*(p2/TSoS.globalMomentum().perp2());
66  // Use P constraint to calculate rms maximum scattering angle.
67  float betaMin2 = pMin2/(pMin2 + m2);
68  float a_max = fact/(betaMin2 * pMin2);
69  float sigt2_max = amscon*radLen*a_max;
70  if (sigt2 > sigt2_max) sigt2 = sigt2_max;
71 #ifdef DBG_MSU
72  std::cout<<" after P constraint ("<<pMin<<") = "<<sqrt(sigt2);
73  std::cout<<" for track with 1/p="<<1/p<<"+-"<<sqrt(error2_QoverP)<<std::endl;
74 #endif
75  }
76 
77  float isl2 = 1.f/d.perp2();
78  float cl2 = (d.z()*d.z());
79  float cf2 = (d.x()*d.x())*isl2;
80  float sf2 = (d.y()*d.y())*isl2;
81  // Create update (transformation of independant variations
82  // on angle in orthogonal planes to local parameters.
83  float den = 1.f/(cl2*cl2);
84  using namespace materialEffect;
85  effect.deltaCov[msxx] += (den*sigt2)*(sf2*cl2 + cf2);
86  effect.deltaCov[msxy] += (den*sigt2)*(d.x()*d.y() );
87  effect.deltaCov[msyy] += (den*sigt2)*(cf2*cl2 + sf2);
88 
89  /*
90  std::cout << "new " << theDeltaCov(1,1) << " " << theDeltaCov(1,2) << " " << theDeltaCov(2,2) << std::endl;
91  oldMUcompute(TSoS,propDir, mass(), thePtMin);
92  */
93 
94 }
float radLen() const
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
T perp2() const
Definition: PV3DBase.h:71
#define constexpr
LocalVector localMomentum() const
const SurfaceType & surface() const
T sqrt(T t)
Definition: SSEVec.h:18
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
const AlgebraicSymMatrix55 & matrix() const
const LocalTrajectoryError & localError() const
double p2[4]
Definition: TauolaWrapper.h:90
const double fact
GlobalVector globalMomentum() const
double a
Definition: hdecay.h:121
const MediumProperties & mediumProperties() const
Definition: Surface.h:112
#define UNLIKELY(x)

Member Data Documentation

float MultipleScatteringUpdator::thePtMin
private

Definition at line 39 of file MultipleScatteringUpdator.h.

Referenced by compute().