ATLAS Offline Software
Public Member Functions | Protected Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
Trk::EnergyLossUpdator Class Referencefinal

#include <EnergyLossUpdator.h>

Inheritance diagram for Trk::EnergyLossUpdator:
Collaboration diagram for Trk::EnergyLossUpdator:

Public Member Functions

 EnergyLossUpdator (const std::string &, const std::string &, const IInterface *)
 AlgTool like constructor. More...
 
virtual ~EnergyLossUpdator ()=default
 Virtual destructor. More...
 
virtual double dEdX (const MaterialProperties &mat, double p, ParticleHypothesis particle=pion) const override final
 dEdX calculation when providing MaterialProperties, a momentum, a pathlength, and a ParicleHypothesis: More...
 
virtual EnergyLoss energyLoss (const MaterialProperties &mat, double p, double pathcorrection, PropDirection dir=alongMomentum, ParticleHypothesis particle=pion, bool useMPV=false) const override final
 deltaE calculation using dEdX and integrating along pathlength, assuming constant dEdX during for the path. More...
 
virtual EnergyLoss updateEnergyLoss (EnergyLoss &eLoss, double caloEnergy, double caloEnergyError, double pCaloEntry, double momentumError, int &elossFlag) const override final
 Method to recalculate Eloss values for the fit setting an elossFlag using as an input the detailed Eloss information Calorimeter energy, error momentum and momentum error. More...
 
virtual void getX0ElossScales (int icalo, double eta, double phi, double &X0Scale, double &ElossScale) const override final
 Routine to calculate X0 and Eloss scale factors for the Calorimeter and Muon System. More...
 
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc. More...
 
const ServiceHandle< StoreGateSvc > & evtStore () const
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc. More...
 
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc. More...
 
virtual StatusCode sysInitialize () override
 Perform system initialization for an algorithm. More...
 
virtual StatusCode sysStart () override
 Handle START transition. More...
 
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles. More...
 
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles. More...
 
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T > &t)
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleKey &hndl, const std::string &doc, const SG::VarHandleKeyType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleBase &hndl, const std::string &doc, const SG::VarHandleType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleKeyArray &hndArr, const std::string &doc, const SG::VarHandleKeyArrayType &)
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, T &property, const std::string &doc, const SG::NotHandleType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, T &property, const std::string &doc="none")
 Declare a new Gaudi property. More...
 
void updateVHKA (Gaudi::Details::PropertyBase &)
 
MsgStream & msg () const
 
MsgStream & msg (const MSG::Level lvl) const
 
bool msgLvl (const MSG::Level lvl) const
 
 DeclareInterfaceID (IEnergyLossUpdator, 1, 0)
 Creates the InterfaceID and interfaceID() method. More...
 
virtual void validationAction () const
 Validation Action: Can be implemented optionally, outside access to internal validation steps. More...
 

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution More...
 
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
 
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed. More...
 

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t
 

Private Member Functions

double varianceDeltaQoverP (const MaterialProperties &, double p, double pathcorrection, PropDirection direction=alongMomentum, ParticleHypothesis particleHypothesis=electron) const
 Method to return the variance of the change in q/p for the Bethe-Heitler parameterisation. More...
 
Trk::EnergyLoss ionizationEnergyLoss (const MaterialProperties &mat, double p, double pathcorrection, PropDirection dir=alongMomentum, ParticleHypothesis particle=pion) const
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyArrayType &)
 specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleType &)
 specialization for handling Gaudi::Property<SG::VarHandleBase> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &t, const SG::NotHandleType &)
 specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray> More...
 

Private Attributes

bool m_detailedEloss
 provide extended EnergyLoss info More...
 
bool m_optimalRadiation
 use calorimeter more optimal for radiation detection More...
 
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default) More...
 
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default) More...
 
std::vector< SG::VarHandleKeyArray * > m_vhka
 
bool m_varHandleArraysDeclared
 

Detailed Description

The mean Energy loss per unit length of a particle is calculated as

\( (dE/dx) = (dE/dX)_{io} + (dE/dX)_{rad} \)

Formulas used:

\( (dE/dX)_{io,mip} = K \cdot \frac{Z}{A} \frac{1/\beta^2} \cdot [\frac{1}{2}] \cdot \ln \frac{2 m_e c^2 \beta^2 \gamma^2 T_max}{I^2} - \beta^2] \), (1)

respectively

@f$ (dE/dX)_{io,e}  = \frac{1/2} \cdot K \cdot \frac{Z}{A}
[2\ln\frac{2m_e c^2}{I} + 3 \ln{\gamma} - 1.95] @f$ (2)

Alternatively, the most probable value instead of the mean value can be

taken (steared by boolean in the method signature), taken from (4)

 @f$ \_{L}\Delta_p = \xi \left[ln\frac{2mc^2\beta^2\gamma^2}{I} +

ln\frac{\xi}{I} - 0.8 + 4.447 \right] \( with \) \xi = Z N_a \frac{k}{\beta^2}\codt t \( The with of both distributions is given as the (crude) approximation, that the full width at half maximum of the landau distribution is : \) 4 \xi \( For the transformation into a parameterized sigma the factor \) 2\cdot\sqrt{2.\cdot ln(2.) } \( can be used Sigma can be multiplied by a form factor (given through job options) - <b>For radiation corrections: </b> The Bethe-Heitler parameterisation is in terms of \) Z = \frac{E_f}{E_i} \( (2) With this parameterisation the expected energy loss \) \langle Z \rangle = e^{-t} \( (2) where \) t = \frac{x}{X_0} \( or the fraction of a radiation length of material traversed by the particle. This formula can be transposed in terms of \) \Delta (E) \(. The transposition however depends on the direction of propagation. For forwards propagation we get: \) \langle \Delta (E) \rangle = E_i ( 1 - \langle Z \rangle ) \( (2) For the propagation against momentum we get: \) \langle \Delta (E) \rangle = E_i ( \frac{1}{\langle Z \rangle} - 1 ) \( (2) The variance of Z is also defined (2): \) Var(Z) = e^{-t ln(3) / ln(2)} - e^{-2t} \( Transposing this one dervies the following relations for 1. Forwards propagation \) Var ( \Delta \frac{q}{p} ) = \frac{Var(Z)}{\langle Z \rangle ^2 p^2} \( 2. Backwards propagation \) Var ( \Delta \frac{q}{p} ) = \frac{Var(Z)}{p^2} \( Where p is the global momentum. Bethe-Heitler formula \) (dE/dX)_{rad} = \frac{E_{initial}}{X_o}\cdot (\frac{m}{m_e})^2

Definition at line 113 of file EnergyLossUpdator.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< AlgTool > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ EnergyLossUpdator()

Trk::EnergyLossUpdator::EnergyLossUpdator ( const std::string &  t,
const std::string &  n,
const IInterface *  p 
)

AlgTool like constructor.

Definition at line 22 of file EnergyLossUpdator.cxx.

25  : AthAlgTool(t, n, p)
26  , m_detailedEloss(true)
27  , m_optimalRadiation(true)
28 {
29  declareInterface<Trk::IEnergyLossUpdator>(this);
30  // scale for the most probable value
31  declareProperty("DetailedEloss", m_detailedEloss);
32  declareProperty("OptimalRadiation", m_optimalRadiation);
33 }

◆ ~EnergyLossUpdator()

virtual Trk::EnergyLossUpdator::~EnergyLossUpdator ( )
virtualdefault

Virtual destructor.

Member Function Documentation

◆ declareGaudiProperty() [1/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T > &  hndl,
const SG::VarHandleKeyArrayType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKeyArray>

Definition at line 170 of file AthCommonDataStore.h.

172  {
173  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
174  hndl.value(),
175  hndl.documentation());
176 
177  }

◆ declareGaudiProperty() [2/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T > &  hndl,
const SG::VarHandleKeyType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158  {
159  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
160  hndl.value(),
161  hndl.documentation());
162 
163  }

◆ declareGaudiProperty() [3/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T > &  hndl,
const SG::VarHandleType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleBase>

Definition at line 184 of file AthCommonDataStore.h.

186  {
187  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
188  hndl.value(),
189  hndl.documentation());
190  }

◆ declareGaudiProperty() [4/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T > &  t,
const SG::NotHandleType  
)
inlineprivateinherited

specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray>

Definition at line 199 of file AthCommonDataStore.h.

200  {
201  return PBASE::declareProperty(t);
202  }

◆ DeclareInterfaceID()

Trk::IEnergyLossUpdator::DeclareInterfaceID ( IEnergyLossUpdator  ,
,
 
)
inherited

Creates the InterfaceID and interfaceID() method.

◆ declareProperty() [1/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
SG::VarHandleBase hndl,
const std::string &  doc,
const SG::VarHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation string for the property.

This is the version for types that derive from SG::VarHandleBase. The property value object is put on the input and output lists as appropriate; then we forward to the base class.

Definition at line 245 of file AthCommonDataStore.h.

249  {
250  this->declare(hndl.vhKey());
251  hndl.vhKey().setOwner(this);
252 
253  return PBASE::declareProperty(name,hndl,doc);
254  }

◆ declareProperty() [2/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
SG::VarHandleKey hndl,
const std::string &  doc,
const SG::VarHandleKeyType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation string for the property.

This is the version for types that derive from SG::VarHandleKey. The property value object is put on the input and output lists as appropriate; then we forward to the base class.

Definition at line 221 of file AthCommonDataStore.h.

225  {
226  this->declare(hndl);
227  hndl.setOwner(this);
228 
229  return PBASE::declareProperty(name,hndl,doc);
230  }

◆ declareProperty() [3/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
SG::VarHandleKeyArray hndArr,
const std::string &  doc,
const SG::VarHandleKeyArrayType  
)
inlineinherited

Definition at line 259 of file AthCommonDataStore.h.

263  {
264 
265  // std::ostringstream ost;
266  // ost << Algorithm::name() << " VHKA declareProp: " << name
267  // << " size: " << hndArr.keys().size()
268  // << " mode: " << hndArr.mode()
269  // << " vhka size: " << m_vhka.size()
270  // << "\n";
271  // debug() << ost.str() << endmsg;
272 
273  hndArr.setOwner(this);
274  m_vhka.push_back(&hndArr);
275 
276  Gaudi::Details::PropertyBase* p = PBASE::declareProperty(name, hndArr, doc);
277  if (p != 0) {
278  p->declareUpdateHandler(&AthCommonDataStore<PBASE>::updateVHKA, this);
279  } else {
280  ATH_MSG_ERROR("unable to call declareProperty on VarHandleKeyArray "
281  << name);
282  }
283 
284  return p;
285 
286  }

◆ declareProperty() [4/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc,
const SG::NotHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation string for the property.

This is the generic version, for types that do not derive from SG::VarHandleKey. It just forwards to the base class version of declareProperty.

Definition at line 333 of file AthCommonDataStore.h.

337  {
338  return PBASE::declareProperty(name, property, doc);
339  }

◆ declareProperty() [5/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc = "none" 
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation string for the property.

This dispatches to either the generic declareProperty or the one for VarHandle/Key/KeyArray.

Definition at line 352 of file AthCommonDataStore.h.

355  {
356  typedef typename SG::HandleClassifier<T>::type htype;
357  return declareProperty (name, property, doc, htype());
358  }

◆ declareProperty() [6/6]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( Gaudi::Property< T > &  t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145  {
146  typedef typename SG::HandleClassifier<T>::type htype;
148  }

◆ dEdX()

double Trk::EnergyLossUpdator::dEdX ( const MaterialProperties mat,
double  p,
ParticleHypothesis  particle = pion 
) const
finaloverridevirtual

dEdX calculation when providing MaterialProperties, a momentum, a pathlength, and a ParicleHypothesis:

Units: [MeV/mm]

Implements Trk::IEnergyLossUpdator.

Definition at line 37 of file EnergyLossUpdator.cxx.

40 {
42  return 0.;
43  }
44 
45  // preparation of kinetic constants
47  double E = std::sqrt(p * p + m * m);
48  double beta = p / E;
49  double gamma = E / m;
50 
51  // add ionization and radiation
52  double dEdX =
55 
56  // add e+e- pair production and photonuclear effect for muons at energies
57  // above 8 GeV
58  if ((particle == Trk::muon) && (E > 8000.)) {
59  if (E < 1.e6) {
60  dEdX += -0.5345 / mat.x0() + 6.803e-5 * E / mat.x0() +
61  2.278e-11 * E * E / mat.x0() -
62  9.899e-18 * E * E * E / mat.x0(); // E below 1 TeV
63  } else {
64  dEdX += -2.986 / mat.x0() + 9.253e-5 * E / mat.x0(); // E above 1 TeV
65  }
66  }
67  return dEdX;
68 }

◆ detStore()

const ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

95 { return m_detStore; }

◆ energyLoss()

Trk::EnergyLoss Trk::EnergyLossUpdator::energyLoss ( const MaterialProperties mat,
double  p,
double  pathcorrection,
PropDirection  dir = alongMomentum,
ParticleHypothesis  particle = pion,
bool  useMPV = false 
) const
finaloverridevirtual

deltaE calculation using dEdX and integrating along pathlength, assuming constant dEdX during for the path.

The sign depends on the given propagation direction

Units: [MeV]

mpv steers the most probable energy loss

Implements Trk::IEnergyLossUpdator.

Definition at line 72 of file EnergyLossUpdator.cxx.

78 {
79  if (particle == Trk::undefined) {
81  "undefined ParticleHypothesis, energy loss calculation cancelled");
82  return {};
83  }
84 
85  if (useMPV) {
86  return ionizationEnergyLoss(mat, p, pathcorrection, dir, particle);
87  }
88 
89  double deltaE = 0.;
90  // preparation
91  double sign = (dir == Trk::oppositeMomentum) ? -1. : 1.;
92 
93  double pathLength = pathcorrection * mat.thicknessInX0() * mat.x0();
94 
95  double sigIoni = 0.;
96  double sigRad = 0.;
97  double kazL = 0.;
99  p, (mat.material()), particle, sigIoni, kazL);
101  p, (mat.material()), particle, sigRad);
102 
103  meanIoni = sign * pathLength * meanIoni;
104  meanRad = sign * pathLength * meanRad;
105  sigIoni = pathLength * sigIoni;
106  sigRad = pathLength * sigRad;
107  kazL = pathLength * kazL;
108 
109  //
110  // include pathlength dependence of Landau ionization
111  //
112  sigIoni = sigIoni - kazL * std::log(pathLength);
113 
114  deltaE = meanIoni + meanRad;
115 
116  double sigmaDeltaE = std::sqrt(sigIoni * sigIoni + sigRad * sigRad);
117  ATH_MSG_DEBUG(" Energy loss updator deltaE "
118  << deltaE << " meanIoni " << meanIoni << " meanRad " << meanRad
119  << " sigIoni " << sigIoni << " sigRad " << sigRad << " sign "
120  << sign << " pathLength " << pathLength);
121  return (!m_detailedEloss ? Trk::EnergyLoss(deltaE, sigmaDeltaE)
122  : Trk::EnergyLoss(deltaE, sigmaDeltaE, sigmaDeltaE,
123  sigmaDeltaE, meanIoni, sigIoni,
124  meanRad, sigRad, pathLength));
125 }

◆ evtStore() [1/2]

ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

85 { return m_evtStore; }

◆ evtStore() [2/2]

const ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore ( ) const
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 90 of file AthCommonDataStore.h.

90 { return m_evtStore; }

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase &  ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ getX0ElossScales()

void Trk::EnergyLossUpdator::getX0ElossScales ( int  icalo,
double  eta,
double  phi,
double &  X0Scale,
double &  ElossScale 
) const
finaloverridevirtual

Routine to calculate X0 and Eloss scale factors for the Calorimeter and Muon System.

Implements Trk::IEnergyLossUpdator.

Definition at line 315 of file EnergyLossUpdator.cxx.

320 {
321  //
322  // for Calorimeter icalo = 1
323  // Muon System icalo = 0
324  // convention eta, phi is at Calorimeter Exit (or Muon Entry)
325  // eta and phi are from the position (not direction)
326  //
327  // input X0 and ElossScale = 1
328  // output updated X0Scale and ElossScale
329  //
330 
331  double X0CaloGirder[4] = {
332  -1.02877e-01, -2.74322e-02, 8.12989e-02, 9.73551e-01
333  };
334 
335  // R2012 to R2015 determined on ATLAS-R2-2015-03-01-00 to be used in rel 21
336  constexpr double X0CaloScale[60] = {
337  1.01685, 1.02092, 1.01875, 1.01812, 1.01791, 1.01345, 1.01354,
338  1.02145, 1.01645, 1.01585, 1.0172, 1.02262, 1.01464, 0.990931,
339  0.971953, 0.99845, 1.01433, 0.982143, 0.974015, 0.978742, 0.960029,
340  0.966766, 0.980199, 0.989586, 0.997144, 1.00169, 0.994166, 0.966332,
341  0.93671, 0.935656, 0.921994, 0.901489, 0.897799, 0.89638, 0.905629,
342  0.903374, 0.925922, 0.941203, 0.956273, 0.968618, 0.976883, 0.988349,
343  0.99855, 1.00212, 1.01456, 1.01541, 1.02532, 1.03238, 1.03688,
344  1.03783, 1.02078, 1.01529, 1.0156, 1.02212, 1.02226, 1.02406,
345  1.02188, 1.00661, 1.00661, 1.00661
346  };
347 
348  // R2012 to R2015 determined on ATLAS-R2-2015-03-01-00 to be used in rel 21
349  constexpr double ElossCaloScale[30] = {
350  1.06921, 1.06828, 1.06734, 1.06092, 1.06638, 1.06335, 1.07421, 1.05885,
351  1.07351, 1.07435, 1.06902, 1.07704, 1.08782, 1.09844, 1.115, 1.07609,
352  1.08233, 1.08764, 1.08209, 1.08255, 1.08008, 1.07573, 1.077, 1.07271,
353  1.07343, 1.07769, 1.07794, 1.08377, 1.08377, 1.08377
354  };
355 
356  //
357  constexpr double X0MuonScale[60] = {
358  -0.0320612, -0.0320612, -0.0320612, -0.0320612, -0.0693796, -0.0389677,
359  -0.0860891, -0.124606, -0.0882329, -0.100014, -0.0790912, -0.0745538,
360  -0.099088, -0.0933711, -0.0618782, -0.0619762, -0.0658361, -0.109704,
361  -0.129547, -0.143364, -0.0774768, -0.0739859, -0.0417835, -0.022119,
362  0.00308797, 0.0197657, -0.0137871, -0.036848, -0.0643794, -0.0514949,
363  -0.0317105, 0.016539, 0.0308435, -0.00056883, -0.00756813, -0.00760612,
364  -0.0234571, -0.0980915, -0.101175, -0.102354, -0.0920337, -0.100337,
365  -0.0887628, 0.0660931, 0.228999, 0.260675, 0.266301, 0.267907,
366  0.281668, 0.194433, 0.132954, 0.20707, 0.220466, 0.20936,
367  0.191441, 0.191441, 0.191441, 0.191441, 0.191441, 0.191441
368  };
369 
370  int i60 = std::abs(eta) * 20.;
371 
372  if (i60 < 0) {
373  i60 = 0;
374  }
375  if (i60 > 59) {
376  i60 = 59;
377  }
378 
379  if (icalo == 1) {
380  //
381  // Girder parametrization
382  //
383  double x =
384  phi + 3.1416 - 3.1416 / 32. * int((3.1416 + phi) / (3.1416 / 32.));
385  double scale = 0.;
386  if (x > M_PI / 64.) {
387  x = M_PI / 32. - x;
388  }
389 
390  if (x < 0.005) {
391  scale =
392  X0CaloGirder[0] * (1 - x / 0.005) + X0CaloGirder[1] + X0CaloGirder[3];
393  } else if (x < 0.017) {
394  scale = X0CaloGirder[1] + X0CaloGirder[3];
395  } else if (x < 0.028) {
396  scale = X0CaloGirder[2] + X0CaloGirder[3];
397  } else {
398  scale = X0CaloGirder[3];
399  }
400 
401  if (std::abs(eta) > 1.3) {
402  scale = 1.;
403  }
404  //
405  // eta dependence of X0
406  //
407  scale *= X0CaloScale[i60];
408  X0Scale = scale;
409  //
410  // eta dependence of Eloss
411  //
412  int i30 = std::abs(eta) * 10.;
413  if (i30 < 0) {
414  i30 = 0;
415  }
416  if (i30 > 29) {
417  i30 = 29;
418  }
419 
420  double nfactor = 0.987363 / 1.05471;
421 
422  ElossScale = nfactor * ElossCaloScale[i30] * scale;
423  } else {
424  //
425  // Muon system
426  //
427  // eta dependence of X0
428  //
429  double scale = 1. + X0MuonScale[i60];
430  //
431  // Muon scale is now 1 with MuonTrackingGeometry and TrkDetDescrGeoModelCnv
432  // fixes
433  //
434  scale = 1.0;
435  X0Scale = scale;
436  ElossScale = 0.93 * scale;
437  }
438 }

◆ inputHandles()

virtual std::vector<Gaudi::DataHandle*> AthCommonDataStore< AthCommonMsg< AlgTool > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ ionizationEnergyLoss()

Trk::EnergyLoss Trk::EnergyLossUpdator::ionizationEnergyLoss ( const MaterialProperties mat,
double  p,
double  pathcorrection,
PropDirection  dir = alongMomentum,
ParticleHypothesis  particle = pion 
) const
private

Definition at line 441 of file EnergyLossUpdator.cxx.

446 {
447  // preparation
448  double sign = (dir == Trk::oppositeMomentum) ? -1. : 1.;
449  double pathLength = pathcorrection * mat.thicknessInX0() * mat.x0();
450 
451  double sigIoni = 0.;
452  double kazL = 0.;
453 
454  double meanIoni =
456  p, (mat.material()), particle, sigIoni, kazL, pathLength);
457 
458  return (!m_detailedEloss
459  ? Trk::EnergyLoss(meanIoni, sigIoni)
460  : Trk::EnergyLoss(meanIoni,
461  sigIoni,
462  sigIoni,
463  sigIoni,
464  meanIoni,
465  sigIoni,
466  0.,
467  0.,
468  pathLength));
469 }

◆ msg() [1/2]

MsgStream& AthCommonMsg< AlgTool >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24  {
25  return this->msgStream();
26  }

◆ msg() [2/2]

MsgStream& AthCommonMsg< AlgTool >::msg ( const MSG::Level  lvl) const
inlineinherited

Definition at line 27 of file AthCommonMsg.h.

27  {
28  return this->msgStream(lvl);
29  }

◆ msgLvl()

bool AthCommonMsg< AlgTool >::msgLvl ( const MSG::Level  lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30  {
31  return this->msgLevel(lvl);
32  }

◆ outputHandles()

virtual std::vector<Gaudi::DataHandle*> AthCommonDataStore< AthCommonMsg< AlgTool > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ renounce()

std::enable_if_t<std::is_void_v<std::result_of_t<decltype(&T::renounce)(T)> > && !std::is_base_of_v<SG::VarHandleKeyArray, T> && std::is_base_of_v<Gaudi::DataHandle, T>, void> AthCommonDataStore< AthCommonMsg< AlgTool > >::renounce ( T &  h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381  {
382  h.renounce();
383  PBASE::renounce (h);
384  }

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::renounceArray ( SG::VarHandleKeyArray handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364  {
365  handlesArray.renounce();
366  }

◆ sysInitialize()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysInitialize ( )
overridevirtualinherited

Perform system initialization for an algorithm.

We override this to declare all the elements of handle key arrays at the end of initialization. See comments on updateVHKA.

Reimplemented in DerivationFramework::CfAthAlgTool, AthCheckedComponent< AthAlgTool >, AthCheckedComponent<::AthAlgTool >, and asg::AsgMetadataTool.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateEnergyLoss()

Trk::EnergyLoss Trk::EnergyLossUpdator::updateEnergyLoss ( Trk::EnergyLoss eLoss,
double  caloEnergy,
double  caloEnergyError,
double  pCaloEntry,
double  momentumError,
int &  elossFlag 
) const
finaloverridevirtual

Method to recalculate Eloss values for the fit setting an elossFlag using as an input the detailed Eloss information Calorimeter energy, error momentum and momentum error.

Implements Trk::IEnergyLossUpdator.

Definition at line 130 of file EnergyLossUpdator.cxx.

136 {
137  //
138  // Input: the detailed EnergyLoss object in the Calorimeter that contains the
139  // different Eloss terms and their uncertainties; caloEnergy and error; and
140  // the muon momentumError (all in MeV)
141  //
142  // For use in the MuonSystem
143  // Input: caloEnergy = 0. caloEnergyError = 0. and pCaloEntry = pMuonEntry
144  // momentum at MuonEntry
145  //
146  // Output: an updated Energy loss values deltaE()
147  // that can be used in the track fit and corresponds to the Most
148  // Probable EnergyLoss value taking into account the ionization,
149  // radiation and smearing due to the errors including the
150  // momentumError (in MeV)
151  //
152  // elossFlag = false if Calorimeter Energy is NOT stored (and later
153  // fitted) on the Eloss object
154  // = true Calorimeter Energy is stored and will be fitted
155  //
156  // deltaE is used in the final fit
157  //
158 
159  elossFlag = 0;
160 
161  int isign = 1;
162  if (eLoss.deltaE() < 0) {
163  isign = -1;
164  }
165 
166  double deltaE = eLoss.deltaE();
167  double sigmaDeltaE = eLoss.sigmaDeltaE();
168  // Detailed Eloss
169  double deltaE_ioni = eLoss.meanIoni();
170  double sigmaDeltaE_ioni = 0.45 * eLoss.sigmaIoni(); // sigma Landau
171  double deltaE_rad = eLoss.meanRad();
172  double sigmaDeltaE_rad =
173  eLoss.sigmaRad(); // rms and mean of steep exponential
174  double depth = eLoss.length();
175 
176  // Eloss radiative protection
177 
178  if (eLoss.meanRad() > 100000.) {
179  deltaE_rad = 100000.;
180  sigmaDeltaE_rad = eLoss.sigmaRad() * 100000. / eLoss.meanRad();
181  }
182 
183  double sigmaPlusDeltaE = eLoss.sigmaPlusDeltaE();
184  double sigmaMinusDeltaE = eLoss.sigmaMinusDeltaE();
185 
186  double MOP = deltaE_ioni - isign * 3.59524 * sigmaDeltaE_ioni;
187 
188  //
189  // MOP shift due to ionization and radiation
190  //
191  double MOPshift =
192  isign * 50 * 10000. / pCaloEntry +
193  isign * 0.75 * std::sqrt(sigmaDeltaE_ioni * sigmaDeltaE_rad);
194  double MOPshiftNoRad = isign * 50 * 10000. / pCaloEntry;
195  //
196  // define sigmas for Landau convoluted with exponential
197  //
198  double fracErad = sigmaDeltaE_rad +
199  std::abs(deltaE_rad) * pCaloEntry / (800000. + pCaloEntry);
200  double sigmaL = sigmaDeltaE_ioni + 0.8 * fracErad / 3.59524;
201  // double sigmaLNoRad = sigmaDeltaE_ioni;
202  double sigmaMinus = 1.02 * sigmaDeltaE_ioni + 0.08 * sigmaDeltaE_rad;
203  double sigmaPlus = 4.65 * sigmaDeltaE_ioni + 1.16 * sigmaDeltaE_rad;
204  // double sigmaMinusNoRad = 1.02 * sigmaDeltaE_ioni;
205  // double sigmaPlusNoRad = 4.65 * sigmaDeltaE_ioni;
206  double xc = momentumError / (sigmaL > 0. ? sigmaL : 1.);
207  double correction =
208  (0.3849 * xc * xc + 7.76672e-03 * xc * xc * xc) /
209  (1 + 2.8631 * xc + 0.3849 * xc * xc + 7.76672e-03 * xc * xc * xc);
210 
211  //
212  // Case where the measured Calorimeter energy is not available (e.g. low pT or
213  // not isolated)
214  //
215 
216  if (caloEnergyError <= 0) {
217  //
218  // Shift of MOP due to momentum resolution
219  //
220  double MOPreso = isign * 3.59524 * sigmaL * correction;
221 
222  deltaE = MOP + MOPshift + MOPreso;
223  sigmaMinusDeltaE = sigmaMinus;
224  sigmaPlusDeltaE = sigmaPlus;
225  sigmaDeltaE = std::sqrt(0.5 * sigmaMinusDeltaE * sigmaMinusDeltaE +
226  0.5 * sigmaPlusDeltaE * sigmaPlusDeltaE);
227  //
228  if (m_optimalRadiation && std::abs(deltaE) < caloEnergy &&
229  pCaloEntry > 100000) {
230  //
231  // Calorimeter measurement can be used as veto to say there was no
232  // significant radiation
233  //
234  // In that case the Eloss is taken as the ionization Eloss
235  // Use MOP after correction for landau tail (MOPshiftNoRad) and momentum
236  // resolution smearing (MOPreso)
237  //
238  sigmaL = sigmaDeltaE_ioni + 0.3 * fracErad / 3.59524;
239  xc = momentumError / (sigmaL > 0. ? sigmaL : 1.);
240  correction =
241  (0.3849 * xc * xc + 7.76672e-03 * xc * xc * xc) /
242  (1 + 2.8631 * xc + 0.3849 * xc * xc + 7.76672e-03 * xc * xc * xc);
243 
244  MOPreso = isign * 3.59524 * sigmaL * correction;
245  deltaE = MOP + MOPshift + MOPreso;
246  sigmaMinusDeltaE = sigmaMinus;
247  sigmaPlusDeltaE = sigmaPlus;
248  sigmaDeltaE = std::sqrt(0.5 * sigmaMinusDeltaE * sigmaMinusDeltaE +
249  0.5 * sigmaPlusDeltaE * sigmaPlusDeltaE);
250  }
251  } else {
252  double sigmaPlusTot =
253  std::sqrt(sigmaPlus * sigmaPlus + caloEnergyError * caloEnergyError);
254  if (m_optimalRadiation) {
255  sigmaPlusTot =
256  std::sqrt(4.65 * sigmaDeltaE_ioni * 4.65 * sigmaDeltaE_ioni +
257  caloEnergyError * caloEnergyError);
258  }
259  double MOPtot = std::abs(MOP + MOPshift);
260  if (m_optimalRadiation) {
261  MOPtot = std::abs(MOP + MOPshiftNoRad);
262  }
263 
264  if (caloEnergy > MOPtot + 2 * sigmaPlusTot) {
265  //
266  // Use measured Calorimeter energy
267  //
268  //
269  // take into account the tail in the Measured Eloss
270  //
271  double MOPreso = isign * 3.59524 * sigmaL * correction;
272  deltaE = isign * caloEnergy + MOPreso;
273  sigmaMinusDeltaE = caloEnergyError + 0.08 * sigmaDeltaE_rad;
274  sigmaPlusDeltaE = caloEnergyError + 1.16 * sigmaDeltaE_rad;
275  sigmaDeltaE = std::sqrt(0.5 * sigmaMinusDeltaE * sigmaMinusDeltaE +
276  0.5 * sigmaPlusDeltaE * sigmaPlusDeltaE);
277  elossFlag = 1;
278  } else {
279  // Use MOP after corrections
280 
281  //
282  // Shift of MOP due to momentum resolution smearing
283  //
284  sigmaL = sigmaDeltaE_ioni + 0.3 * fracErad / 3.59524;
285  xc = momentumError / (sigmaL > 0. ? sigmaL : 1);
286  correction =
287  (0.3849 * xc * xc + 7.76672e-03 * xc * xc * xc) /
288  (1 + 2.8631 * xc + 0.3849 * xc * xc + 7.76672e-03 * xc * xc * xc);
289  double MOPreso = isign * 3.59524 * sigmaL * correction;
290  //
291  // Use MOP after correction for landau tail (MOPshiftNoRad) and radiation
292  // (MOPshift) and momentum resolution smearing (MOPreso)
293  //
294  deltaE = MOP + MOPshift + MOPreso;
295  sigmaMinusDeltaE = sigmaMinus;
296  sigmaPlusDeltaE = sigmaPlus;
297  sigmaDeltaE = std::sqrt(0.5 * sigmaMinusDeltaE * sigmaMinusDeltaE +
298  0.5 * sigmaPlusDeltaE * sigmaPlusDeltaE);
299  }
300  }
301 
302  return {deltaE,
303  sigmaDeltaE,
304  sigmaMinusDeltaE,
305  sigmaPlusDeltaE,
306  deltaE_ioni,
307  sigmaDeltaE_ioni,
308  deltaE_rad,
309  sigmaDeltaE_rad,
310  depth};
311 }

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::updateVHKA ( Gaudi::Details::PropertyBase &  )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308  {
309  // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310  // << " size: " << m_vhka.size() << endmsg;
311  for (auto &a : m_vhka) {
312  std::vector<SG::VarHandleKey*> keys = a->keys();
313  for (auto k : keys) {
314  k->setOwner(this);
315  }
316  }
317  }

◆ validationAction()

virtual void Trk::IEnergyLossUpdator::validationAction ( ) const
inlinevirtualinherited

Validation Action: Can be implemented optionally, outside access to internal validation steps.

Definition at line 91 of file IEnergyLossUpdator.h.

91 {}

◆ varianceDeltaQoverP()

double Trk::EnergyLossUpdator::varianceDeltaQoverP ( const MaterialProperties ,
double  p,
double  pathcorrection,
PropDirection  direction = alongMomentum,
ParticleHypothesis  particleHypothesis = electron 
) const
private

Method to return the variance of the change in q/p for the Bethe-Heitler parameterisation.

Member Data Documentation

◆ m_detailedEloss

bool Trk::EnergyLossUpdator::m_detailedEloss
private

provide extended EnergyLoss info

Definition at line 187 of file EnergyLossUpdator.h.

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_optimalRadiation

bool Trk::EnergyLossUpdator::m_optimalRadiation
private

use calorimeter more optimal for radiation detection

Definition at line 188 of file EnergyLossUpdator.h.

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< AlgTool > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.


The documentation for this class was generated from the following files:
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
Trk::EnergyLoss::sigmaMinusDeltaE
double sigmaMinusDeltaE() const
returns the negative side
Trk::MaterialInteraction::dEdl_ionization
static double dEdl_ionization(double p, const Material &mat, ParticleHypothesis particle, double &sigma, double &kazL)
dE/dl ionization energy loss per path unit
Definition: MaterialInteraction.cxx:117
Trk::ParticleSwitcher::particle
constexpr ParticleHypothesis particle[PARTICLEHYPOTHESES]
the array of masses
Definition: ParticleHypothesis.h:76
egammaParameters::depth
@ depth
pointing depth of the shower as calculated in egammaqgcld
Definition: egammaParamDefs.h:276
python.SystemOfUnits.m
int m
Definition: SystemOfUnits.py:91
Trk::EnergyLossUpdator::m_optimalRadiation
bool m_optimalRadiation
use calorimeter more optimal for radiation detection
Definition: EnergyLossUpdator.h:188
Trk::EnergyLossUpdator::dEdX
virtual double dEdX(const MaterialProperties &mat, double p, ParticleHypothesis particle=pion) const override final
dEdX calculation when providing MaterialProperties, a momentum, a pathlength, and a ParicleHypothesis...
Definition: EnergyLossUpdator.cxx:37
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
Trk::oppositeMomentum
@ oppositeMomentum
Definition: PropDirection.h:21
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
Trk::MaterialInteraction::dE_MPV_ionization
static double dE_MPV_ionization(double p, const Trk::Material &mat, Trk::ParticleHypothesis particle, double &sigma, double &kazL, double path)
Most Propable dE ionization energly loss.
Definition: MaterialInteraction.cxx:205
mat
GeoMaterial * mat
Definition: LArDetectorConstructionTBEC.cxx:55
Trk::EnergyLoss::sigmaDeltaE
double sigmaDeltaE() const
returns the symmatric error
M_PI
#define M_PI
Definition: ActiveFraction.h:11
AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
Definition: AthCommonDataStore.h:390
AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
std::vector< SG::VarHandleKeyArray * > m_vhka
Definition: AthCommonDataStore.h:398
Trk::EnergyLoss::sigmaRad
double sigmaRad() const
Trk::undefined
@ undefined
Definition: ParticleHypothesis.h:38
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
Trk::EnergyLoss::meanIoni
double meanIoni() const
yodamerge_tmp.scale
scale
Definition: yodamerge_tmp.py:138
SG::VarHandleKeyArray::setOwner
virtual void setOwner(IDataHandleHolder *o)=0
IDTPMcnv.htype
htype
Definition: IDTPMcnv.py:29
Trk::EnergyLossUpdator::m_detailedEloss
bool m_detailedEloss
provide extended EnergyLoss info
Definition: EnergyLossUpdator.h:187
tools.zlumi_mc_cf.correction
def correction(mu, runmode, campaign, run=None)
Definition: zlumi_mc_cf.py:4
Trk::EnergyLoss::length
double length() const
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
AthCommonDataStore
Definition: AthCommonDataStore.h:52
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
TrigVtx::gamma
@ gamma
Definition: TrigParticleTable.h:26
beamspotman.n
n
Definition: beamspotman.py:731
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
pdg_comparison.kazL
kazL
Definition: pdg_comparison.py:325
Trk::EnergyLoss::deltaE
double deltaE() const
returns the
sign
int sign(int a)
Definition: TRT_StrawNeighbourSvc.h:107
AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
Definition: AthCommonDataStore.h:393
Trk::muon
@ muon
Definition: ParticleHypothesis.h:28
Trk::EnergyLoss::meanRad
double meanRad() const
AthAlgTool::AthAlgTool
AthAlgTool()
Default constructor:
beamspotman.dir
string dir
Definition: beamspotman.py:623
SG::VarHandleKeyArray::renounce
virtual void renounce()=0
SG::HandleClassifier::type
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
Definition: HandleClassifier.h:54
Trk::MaterialInteraction::dEdl_radiation
static double dEdl_radiation(double p, const Material &mat, ParticleHypothesis particle, double &sigma)
dE/dl radiation energy loss per path unit
Definition: MaterialInteraction.cxx:229
Trk::ParticleMasses::mass
constexpr double mass[PARTICLEHYPOTHESES]
the array of masses
Definition: ParticleHypothesis.h:53
merge_scale_histograms.doc
string doc
Definition: merge_scale_histograms.py:9
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
VP1PartSpect::E
@ E
Definition: VP1PartSpectFlags.h:21
Trk::nonInteracting
@ nonInteracting
Definition: ParticleHypothesis.h:25
Trk::EnergyLoss
This class describes energy loss material effects in the ATLAS tracking EDM.
Definition: EnergyLoss.h:34
a
TList * a
Definition: liststreamerinfos.cxx:10
h
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
Trk::MaterialInteraction::dEdXBetheBloch
static double dEdXBetheBloch(const Trk::MaterialProperties &mat, double beta, double gamma, Trk::ParticleHypothesis particle)
dE/dl ionization energy loss per path unit
Definition: MaterialInteraction.cxx:165
SG::VarHandleBase::vhKey
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
Definition: StoreGate/src/VarHandleBase.cxx:623
Trk::phi
@ phi
Definition: ParamDefs.h:75
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:798
Trk::MaterialInteraction::dEdXBetheHeitler
static double dEdXBetheHeitler(const Trk::MaterialProperties &mat, double initialE, Trk::ParticleHypothesis particle)
Definition: MaterialInteraction.cxx:266
Trk::x
@ x
Definition: ParamDefs.h:55
MuonParameters::beta
@ beta
Definition: MuonParamDefs.h:144
Trk::EnergyLossUpdator::ionizationEnergyLoss
Trk::EnergyLoss ionizationEnergyLoss(const MaterialProperties &mat, double p, double pathcorrection, PropDirection dir=alongMomentum, ParticleHypothesis particle=pion) const
Definition: EnergyLossUpdator.cxx:441
AthCommonDataStore::declareGaudiProperty
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition: AthCommonDataStore.h:156
Trk::EnergyLoss::sigmaPlusDeltaE
double sigmaPlusDeltaE() const
returns the positive side
fitman.k
k
Definition: fitman.py:528
Trk::EnergyLoss::sigmaIoni
double sigmaIoni() const