CMS 3D CMS Logo

List of all members | Public Member Functions
GsfMultipleScatteringUpdator Class Referencefinal

#include <GsfMultipleScatteringUpdator.h>

Inheritance diagram for GsfMultipleScatteringUpdator:
GsfMaterialEffectsUpdator

Public Member Functions

GsfMultipleScatteringUpdatorclone () const override
 
void compute (const TrajectoryStateOnSurface &, const PropagationDirection, Effect[]) const override
 Computation: generates vectors of weights, means and standard deviations. More...
 
 GsfMultipleScatteringUpdator (float mass)
 constructor with explicit mass More...
 
virtual size_t size () const
 
- Public Member Functions inherited from GsfMaterialEffectsUpdator
 GsfMaterialEffectsUpdator (float mass, uint32_t is)
 
float mass () const
 
size_t size () const
 
virtual TrajectoryStateOnSurface updateState (const TrajectoryStateOnSurface &TSoS, const PropagationDirection propDir) const
 
virtual ~GsfMaterialEffectsUpdator ()
 

Additional Inherited Members

- Public Types inherited from GsfMaterialEffectsUpdator
typedef materialEffect::Covariance Covariance
 
typedef materialEffect::CovIndex CovIndex
 
typedef materialEffect::Effect Effect
 
- Protected Member Functions inherited from GsfMaterialEffectsUpdator
void resize (size_t is)
 

Detailed Description

Description of multiple scattering with two Gaussian components as described in HEPHY-PUB 724-99. Gaussians as a function of x/X0 are parametrized as polynomials. The mixture is parametrized as a function of the thickness, velocity and Xs=X0*h(Z).

Definition at line 14 of file GsfMultipleScatteringUpdator.h.

Constructor & Destructor Documentation

◆ GsfMultipleScatteringUpdator()

GsfMultipleScatteringUpdator::GsfMultipleScatteringUpdator ( float  mass)
inline

constructor with explicit mass

Definition at line 17 of file GsfMultipleScatteringUpdator.h.

Referenced by clone().

Member Function Documentation

◆ clone()

GsfMultipleScatteringUpdator* GsfMultipleScatteringUpdator::clone ( void  ) const
inlineoverridevirtual

Implements GsfMaterialEffectsUpdator.

Definition at line 19 of file GsfMultipleScatteringUpdator.h.

References GsfMultipleScatteringUpdator().

19 { return new GsfMultipleScatteringUpdator(*this); }
GsfMultipleScatteringUpdator(float mass)
constructor with explicit mass

◆ compute()

void GsfMultipleScatteringUpdator::compute ( const TrajectoryStateOnSurface TSoS,
const PropagationDirection  propDir,
Effect  effects[] 
) const
overridevirtual

Computation: generates vectors of weights, means and standard deviations.

Implements GsfMaterialEffectsUpdator.

Definition at line 9 of file GsfMultipleScatteringUpdator.cc.

References haddnano::cl, materialEffect::Effect::deltaCov, h, MediumProperties::isValid(), TrajectoryStateOnSurface::localMomentum(), dqm-mbProfile::log, PV3DBase< T, PVType, FrameType >::mag(), GsfMaterialEffectsUpdator::mass(), Surface::mediumProperties(), materialEffect::msxx, materialEffect::msxy, materialEffect::msyy, AlCaHLTBitMon_ParallelJobs::p, PV3DBase< T, PVType, FrameType >::perp(), funct::pow(), MediumProperties::radLen(), mathSSE::sqrt(), TrajectoryStateOnSurface::surface(), trigObjTnPSource_cfi::var, w1, w2, materialEffect::Effect::weight, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), z, and PV3DBase< T, PVType, FrameType >::z().

11  {
12  //
13  // Get surface and check presence of medium properties
14  //
15  const Surface& surface = TSoS.surface();
16  //
17  // calculate components
18  //
19  if (surface.mediumProperties().isValid()) {
20  LocalVector pvec = TSoS.localMomentum();
21  float p = TSoS.localMomentum().mag();
22  pvec *= 1. / p;
23  // thickness in radiation lengths
24  float rl = surface.mediumProperties().radLen() / fabs(pvec.z());
25  // auxiliary variables for modified X0
26  constexpr float z = 14; // atomic number of silicon
27  const float logz = log(z);
28  const float h = (z + 1) / z * log(287 * sqrt(z)) / log(159 * pow(z, -1. / 3.));
29  float beta2 = 1. / (1. + mass() * mass() / p / p);
30  // reduced thickness
31  float dp1 = rl / beta2 / h;
32  float logdp1 = log(dp1);
33  float logdp2 = 2. / 3. * logz + logdp1;
34  // weights
35  float w2;
36  if (logdp2 < log(0.5))
37  w2 = 0.05283 + 0.0077 * logdp2 + 0.00069 * logdp2 * logdp2;
38  else
39  w2 = -0.01517 + 0.1151 * logdp2 - 0.00653 * logdp2 * logdp2;
40  float w1 = 1. - w2;
41  effects[0].weight *= w1;
42  effects[1].weight *= w2;
43  // reduced variances
44  float var1 = 0.8510 + 0.03314 * logdp1 - 0.001825 * logdp1 * logdp1;
45  float var2 = (1. - w1 * var1) / w2;
46  for (int ic = 0; ic < 2; ic++) {
47  // choose component and multiply with total variance
48  float var = ic == 0 ? var1 : var2;
49  var *= 225.e-6 * dp1 / p / p;
51  // transform from orthogonal planes containing the
52  // momentum vector to local parameters
53  float sl = pvec.perp();
54  float cl = pvec.z();
55  float cf = pvec.x() / sl;
56  float sf = pvec.y() / sl;
57  using namespace materialEffect;
58  effects[ic].deltaCov[msxx] += var * (sf * sf * cl * cl + cf * cf) / (cl * cl * cl * cl);
59  effects[ic].deltaCov[msxy] += var * (cf * sf * sl * sl) / (cl * cl * cl * cl);
60  effects[ic].deltaCov[msyy] += var * (cf * cf * cl * cl + sf * sf) / (cl * cl * cl * cl);
61  }
62  }
63 }
T perp() const
Definition: PV3DBase.h:69
common ppss p3p6s2 common epss epspn46 common const1 w2
Definition: inclppp.h:1
T z() const
Definition: PV3DBase.h:61
const SurfaceType & surface() const
T x() const
Definition: PV3DBase.h:59
T y() const
Definition: PV3DBase.h:60
T sqrt(T t)
Definition: SSEVec.h:19
float radLen() const
T mag() const
Definition: PV3DBase.h:64
weight_default_t w1[2000]
Definition: w1.h:9
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
const MediumProperties & mediumProperties() const
Definition: Surface.h:83
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:29
bool isValid() const

◆ size()

virtual size_t GsfMultipleScatteringUpdator::size ( void  ) const
inlinevirtual