CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Protected Member Functions | Private Attributes
GsfMaterialEffectsUpdator Class Referenceabstract

#include <GsfMaterialEffectsUpdator.h>

Inheritance diagram for GsfMaterialEffectsUpdator:
GsfBetheHeitlerUpdator GsfCombinedMaterialEffectsUpdator GsfMaterialEffectsAdapter GsfMultipleScatteringUpdator

Public Types

typedef materialEffect::Covariance Covariance
 
typedef materialEffect::CovIndex CovIndex
 
typedef materialEffect::Effect Effect
 

Public Member Functions

virtual GsfMaterialEffectsUpdatorclone () const =0
 
virtual void compute (const TrajectoryStateOnSurface &, const PropagationDirection, Effect effects[]) const =0
 
 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 ()
 

Protected Member Functions

void resize (size_t is)
 

Private Attributes

uint32_t m_size
 
float theMass
 

Detailed Description

Interface for adding material effects during propagation as a Gaussian mixture. Similar to MaterialEffectsUpdator, but returns MultiTrajectoryState.

Definition at line 17 of file GsfMaterialEffectsUpdator.h.

Member Typedef Documentation

Definition at line 19 of file GsfMaterialEffectsUpdator.h.

Definition at line 21 of file GsfMaterialEffectsUpdator.h.

Definition at line 20 of file GsfMaterialEffectsUpdator.h.

Constructor & Destructor Documentation

GsfMaterialEffectsUpdator::GsfMaterialEffectsUpdator ( float  mass,
uint32_t  is 
)
inline

Constructor with explicit mass hypothesis

Definition at line 26 of file GsfMaterialEffectsUpdator.h.

virtual GsfMaterialEffectsUpdator::~GsfMaterialEffectsUpdator ( )
inlinevirtual

Definition at line 29 of file GsfMaterialEffectsUpdator.h.

References updateState().

29 {}

Member Function Documentation

virtual GsfMaterialEffectsUpdator* GsfMaterialEffectsUpdator::clone ( ) const
pure virtual
virtual void GsfMaterialEffectsUpdator::compute ( const TrajectoryStateOnSurface ,
const PropagationDirection  ,
Effect  effects[] 
) const
pure virtual
float GsfMaterialEffectsUpdator::mass ( ) const
inline

Particle mass assigned at construction.

Definition at line 39 of file GsfMaterialEffectsUpdator.h.

References clone(), compute(), and theMass.

Referenced by Particle.Particle::__str__(), DiObject.DiMuon::__str__(), and GsfMultipleScatteringUpdator::compute().

39  {
40  return theMass;
41  }
void GsfMaterialEffectsUpdator::resize ( size_t  is)
inlineprotected
size_t GsfMaterialEffectsUpdator::size ( void  ) const
inline
TrajectoryStateOnSurface GsfMaterialEffectsUpdator::updateState ( const TrajectoryStateOnSurface TSoS,
const PropagationDirection  propDir 
) const
virtual

Updates TrajectoryStateOnSurface with material effects (momentum and covariance matrix are potentially affected.

Definition at line 15 of file GsfMaterialEffectsUpdator.cc.

References MultiTrajectoryStateAssembler::addState(), SurfaceSideDefinition::afterSurface, alongMomentum, SurfaceSideDefinition::beforeSurface, MultiTrajectoryStateAssembler::combinedState(), bookConverter::compute(), ProxyBase11< T >::data(), materialEffect::elos, TrajectoryStateOnSurface::globalParameters(), TrajectoryStateOnSurface::hasError(), MediumProperties::isValid(), TrajectoryStateOnSurface::localError(), TrajectoryStateOnSurface::localParameters(), LogDebug, GlobalTrajectoryParameters::magneticField(), LocalTrajectoryError::matrix(), Surface::mediumProperties(), mps_fire::result, TrajectoryStateOnSurface::singleState(), findQualityFiles::size, mathSSE::sqrt(), TrajectoryStateOnSurface::surface(), LocalTrajectoryParameters::updateP(), and TrajectoryStateOnSurface::weight().

Referenced by FullConvolutionWithMaterial::operator()(), and ~GsfMaterialEffectsUpdator().

16  {
17  //
18  // get components of input state and check if material is associated to surface
19  //
20  const Surface& surface = TSoS.surface();
21  if ( !surface.mediumProperties().isValid() ) return TSoS;
23  // single input state?
24  if (!TSoS.singleState() )
25  throw cms::Exception("LogicError") << "GsfMaterialEffectsUpdator::updateState used with MultiTSOS";
26  auto weight = TSoS.weight();
27  //
28  // Get components (will force recalculation, if necessary)
29  //
30  #if __clang__
31  std::vector<Effect> effects(size());
32  compute(TSoS,propDir,effects.data());
33  #else
34  Effect effects[size()];
35  compute(TSoS,propDir,effects);
36  #endif
37 
38  //
39  // prepare output vector
40  //
42  //
43  // loop over components
44  //
45  LogDebug("GsfMaterialEffectsUpdator") << "found " << size() << " components "
46  << " input state has weight " << TSoS.weight();
47  for ( auto const & effect : effects ) {
48  LogDebug("GsfMaterialEffectsUpdatorDETAIL") << "w, dp, sigp = "
49  << effect.weight << ", "
50  << effect.deltaP << ", "
51  << std::sqrt(effect.deltaCov[materialEffect::elos]);
52  //
53  // Update momentum. In case of failure: return invalid state.
54  // Use deltaP method to ensure update of cache, if necessary!
55  //
57  if ( !lp.updateP(effect.deltaP) )
58  return TrajectoryStateOnSurface();
59  //
60  // Update covariance matrix?
61  //
62  if ( TSoS.hasError() ) {
63  AlgebraicSymMatrix55 eloc = TSoS.localError().matrix();
64  effect.deltaCov.add(eloc);
65  result.addState(TrajectoryStateOnSurface(weight*effect.weight,
66  lp,
68  surface,
69  &(TSoS.globalParameters().magneticField()),
70  side));
71  LogDebug("GsfMaterialEffectsUpdatorDETAIL")
72  << "adding state with weight " << weight*effect.weight;
73  }
74  else {
75  result.addState(TrajectoryStateOnSurface(lp,surface,
76  &(TSoS.globalParameters().magneticField()),
77  side));
78  }
79  }
80  LogDebug("GsfMaterialEffectsUpdator")
81  << " output state has weight " << result.combinedState().weight();
82  return result.combinedState();
83 }
#define LogDebug(id)
virtual void compute(const TrajectoryStateOnSurface &, const PropagationDirection, Effect effects[]) const =0
const LocalTrajectoryParameters & localParameters() const
void addState(const TrajectoryStateOnSurface)
Definition: weight.py:1
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
const T & data() const
Definition: ProxyBase11.h:54
const SurfaceType & surface() const
T sqrt(T t)
Definition: SSEVec.h:18
const AlgebraicSymMatrix55 & matrix() const
const LocalTrajectoryError & localError() const
const GlobalTrajectoryParameters & globalParameters() const
const MagneticField & magneticField() const
bool isValid() const
const MediumProperties & mediumProperties() const
Definition: Surface.h:112
bool updateP(float dP)
Update of momentum by a scalar dP.

Member Data Documentation

uint32_t GsfMaterialEffectsUpdator::m_size
private

Definition at line 54 of file GsfMaterialEffectsUpdator.h.

Referenced by resize(), and size().

float GsfMaterialEffectsUpdator::theMass
private

Definition at line 53 of file GsfMaterialEffectsUpdator.h.

Referenced by mass().