CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
GsfMaterialEffectsUpdator.cc
Go to the documentation of this file.
2 
7 //
8 // Update of the trajectory state (implemented in base class since general for
9 // all classes returning deltaPs and deltaCovs.
10 //
11 
12 using namespace SurfaceSideDefinition;
13 
16  const PropagationDirection propDir) const {
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.components().size()>1 )
25  throw cms::Exception("LogicError") << "GsfMaterialEffectsUpdator::updateState used with MultiTSOS";
26  double 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  // edm::LogDebug("GsfMaterialEffectsUpdator") << "found " << Ws.size() << " components\n"
46  // << " input state has weight " << TSoS.weight();
47  for ( auto const & effect : effects ) {
48  // edm::LogDebug("GsfMaterialEffectsUpdator") << "w, dp, sigp = "
49  // << Ws[ic] << ", "
50  // << dPs[ic] << ", "
51  // << sqrt((deltaErrors[ic])[0][0]);
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 
72  // edm::LogDebug("GsfMaterialEffectsUpdator")
73  // << "adding state with weight " << weight*Ws[ic];
74  }
75  else {
76  result.addState(TrajectoryStateOnSurface(lp,surface,
77  &(TSoS.globalParameters().magneticField()),
78  side));
79  }
80  }
81  // edm::LogDebug("GsfMaterialEffectsUpdator")
82  // << " output state has weight " << result.combinedState().weight();
83  return result.combinedState();
84 }
85 
const LocalTrajectoryParameters & localParameters() const
void addState(const TrajectoryStateOnSurface)
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
PropagationDirection
const T & data() const
Definition: ProxyBase11.h:66
const SurfaceType & surface() const
tuple result
Definition: query.py:137
const AlgebraicSymMatrix55 & matrix() const
const LocalTrajectoryError & localError() const
virtual TrajectoryStateOnSurface updateState(const TrajectoryStateOnSurface &TSoS, const PropagationDirection propDir) const
const GlobalTrajectoryParameters & globalParameters() const
const MagneticField & magneticField() const
bool isValid() const
std::vector< TrajectoryStateOnSurface > components() const
const MediumProperties & mediumProperties() const
Definition: Surface.h:120
bool updateP(float dP)
Update of momentum by a scalar dP.
tuple size
Write out results.