CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
Functions
MultipleScatteringUpdator.cc File Reference
#include "TrackingTools/MaterialEffects/interface/MultipleScatteringUpdator.h"
#include "DataFormats/GeometrySurface/interface/MediumProperties.h"
#include "DataFormats/Math/interface/approx_log.h"

Go to the source code of this file.

Functions

void oldMUcompute (const TrajectoryStateOnSurface &TSoS, const PropagationDirection propDir, double mass, double ptmin)
 
void oldMUcompute (const TrajectoryStateOnSurface &TSoS, const PropagationDirection propDir, float mass, float thePtMin)
 

Function Documentation

void oldMUcompute ( const TrajectoryStateOnSurface TSoS,
const PropagationDirection  propDir,
double  mass,
double  ptmin 
)
void oldMUcompute ( const TrajectoryStateOnSurface TSoS,
const PropagationDirection  propDir,
float  mass,
float  thePtMin 
)

Definition at line 103 of file MultipleScatteringUpdator.cc.

References a, beta, GetRecoTauVFromDQM_MC_cff::cl, gather_cfg::cout, ztail::d, alignCSCRings::e, TrajectoryStateOnSurface::globalMomentum(), MediumProperties::isValid(), TrajectoryStateOnSurface::localError(), TrajectoryStateOnSurface::localMomentum(), dqm-mbProfile::log, visualization-live-secondInstance_cfg::m, PV3DBase< T, PVType, FrameType >::mag(), MaterialEffectsUpdator::mass(), LocalTrajectoryError::matrix(), Surface::mediumProperties(), AlCaHLTBitMon_ParallelJobs::p, PV3DBase< T, PVType, FrameType >::perp(), HLT_25ns10e33_v2_cff::pMin, MediumProperties::radLen(), mathSSE::sqrt(), TrajectoryStateOnSurface::surface(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

105 {
106  //
107  // Get surface
108  //
109  const Surface& surface = TSoS.surface();
110  //
111  //
112  // Now get information on medium
113  //
114  if (surface.mediumProperties().isValid()) {
115  // Momentum vector
116  LocalVector d = TSoS.localMomentum();
117  float p = d.mag();
118  d *= 1./p;
119  // MediumProperties mp(0.02, .5e-4);
120  const MediumProperties& mp = surface.mediumProperties();
121  float xf = 1./fabs(d.z()); // increase of path due to angle of incidence
122  // calculate general physics things
123  const float amscon = 1.8496e-4; // (13.6MeV)**2
124  const float m = mass; // use mass hypothesis from constructor
125  float e = sqrt(p*p + m*m);
126  float beta = p/e;
127  // calculate the multiple scattering angle
128  float radLen = mp.radLen()*xf; // effective rad. length
129  float sigt2 = 0.; // sigma(alpha)**2
130  if (radLen > 0) {
131  // Calculated rms scattering angle squared.
132  float a = (1. + 0.038*log(radLen))/(beta*p); a *= a;
133  sigt2 = amscon*radLen*a;
134  if (thePtMin > 0) {
135 #ifdef DBG_MSU
136  std::cout<<"Original rms scattering = "<<sqrt(sigt2);
137 #endif
138  // Inflate estimated rms scattering angle, to take into account
139  // that 1/p is not known precisely.
140  AlgebraicSymMatrix55 covMatrix = TSoS.localError().matrix();
141  float error2_QoverP = covMatrix(0,0);
142  // Formula valid for ultra-relativistic particles.
143 // sigt2 *= (1. + (p*p) * error2_QoverP);
144  // Exact formula
145  sigt2 *= (1. + (p*p) * error2_QoverP *
146  (1. + 5*m*m/(e*e) + 3*m*m*beta*beta*error2_QoverP));
147 #ifdef DBG_MSU
148  std::cout<<" new = "<<sqrt(sigt2);
149 #endif
150  // Convert Pt constraint to P constraint, neglecting uncertainty in
151  // track angle.
152  float pMin = thePtMin*(TSoS.globalMomentum().mag()/TSoS.globalMomentum().perp());
153  // Use P constraint to calculate rms maximum scattering angle.
154  float betaMin = pMin/sqrt(pMin * pMin + m*m);
155  float a_max = (1. + 0.038*log(radLen))/(betaMin * pMin); a_max *= a_max;
156  float sigt2_max = amscon*radLen*a_max;
157  if (sigt2 > sigt2_max) sigt2 = sigt2_max;
158 #ifdef DBG_MSU
159  std::cout<<" after P constraint ("<<pMin<<") = "<<sqrt(sigt2);
160  std::cout<<" for track with 1/p="<<1/p<<"+-"<<sqrt(error2_QoverP)<<std::endl;
161 #endif
162  }
163  }
164  float sl = d.perp();
165  float cl = d.z();
166  float cf = d.x()/sl;
167  float sf = d.y()/sl;
168  // Create update (transformation of independant variations
169  // on angle in orthogonal planes to local parameters.
170  std::cout << "old " << sigt2*(sf*sf*cl*cl + cf*cf)/(cl*cl*cl*cl)
171  << " " << sigt2*(cf*sf*sl*sl )/(cl*cl*cl*cl)
172  << " " << sigt2*(cf*cf*cl*cl + sf*sf)/(cl*cl*cl*cl) << std::endl;
173  }
174 }
const double beta
float radLen() const
T perp() const
Definition: PV3DBase.h:72
T y() const
Definition: PV3DBase.h:63
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
LocalVector localMomentum() const
tuple d
Definition: ztail.py:151
const SurfaceType & surface() const
T mag() const
Definition: PV3DBase.h:67
T sqrt(T t)
Definition: SSEVec.h:18
T z() const
Definition: PV3DBase.h:64
const AlgebraicSymMatrix55 & matrix() const
const LocalTrajectoryError & localError() const
GlobalVector globalMomentum() const
double a
Definition: hdecay.h:121
tuple cout
Definition: gather_cfg.py:145
bool isValid() const
T x() const
Definition: PV3DBase.h:62
const MediumProperties & mediumProperties() const
Definition: Surface.h:112