CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Member Functions | Private Attributes
MultipleScatteringUpdator Class Reference

#include <MultipleScatteringUpdator.h>

Inheritance diagram for MultipleScatteringUpdator:
MaterialEffectsUpdator

Public Member Functions

virtual void compute (const TrajectoryStateOnSurface &, const PropagationDirection, Effect &effect) const
 
 MultipleScatteringUpdator (double mass, double ptMin=-1.)
 
 ~MultipleScatteringUpdator ()
 destructor More...
 
- Public Member Functions inherited from MaterialEffectsUpdator
double mass () const
 
 MaterialEffectsUpdator (double 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

virtual MultipleScatteringUpdatorclone () const
 

Private Attributes

double 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 ( double  mass,
double  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 ( )
inline

destructor

Definition at line 30 of file MultipleScatteringUpdator.h.

30 {}

Member Function Documentation

virtual MultipleScatteringUpdator* MultipleScatteringUpdator::clone ( void  ) const
inlineprivatevirtual

Implements MaterialEffectsUpdator.

Definition at line 17 of file MultipleScatteringUpdator.h.

References MultipleScatteringUpdator().

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

Implements MaterialEffectsUpdator.

Definition at line 15 of file MultipleScatteringUpdator.cc.

References a, funct::abs(), GetRecoTauVFromDQM_MC_cff::cl2, constexpr, gather_cfg::cout, 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(), HLT_25ns14e33_v1_cff::pMin, MediumProperties::radLen(), mathSSE::sqrt(), TrajectoryStateOnSurface::surface(), thePtMin, and unlikely.

Referenced by CombinedMaterialEffectsUpdator::compute().

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
#define unlikely(x)
const SurfaceType & surface() const
T sqrt(T t)
Definition: SSEVec.h:48
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
tuple cout
Definition: gather_cfg.py:121
const MediumProperties & mediumProperties() const
Definition: Surface.h:120

Member Data Documentation

double MultipleScatteringUpdator::thePtMin
private

Definition at line 39 of file MultipleScatteringUpdator.h.

Referenced by compute().