ATLAS Offline Software
MaterialEffectsOnTrack.icc
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 inline Trk::MaterialEffectsOnTrack::MaterialEffectsOnTrack(
6  const double tInX0,
7  std::optional<Trk::ScatteringAngles> scat,
8  std::unique_ptr<const Trk::EnergyLoss> eloss,
9  const Trk::Surface& sf,
10  const std::bitset<Trk::MaterialEffectsBase::NumberOfMaterialEffectsTypes>&
11  typePattern)
12  : Trk::MaterialEffectsBase(tInX0, sf, (typePattern == 0 ? 3 : typePattern))
13  , m_scatteringAngles(scat)
14  , m_energyLoss(std::move(eloss))
15 {}
16 
17 inline Trk::MaterialEffectsOnTrack::MaterialEffectsOnTrack(
18  const double tInX0,
19  std::optional<Trk::ScatteringAngles> scat,
20  const Trk::Surface& sf,
21  const std::bitset<Trk::MaterialEffectsBase::NumberOfMaterialEffectsTypes>&
22  typePattern)
23  : Trk::MaterialEffectsBase(
24  tInX0,
25  sf,
26  (typePattern == 0
27  ? 1 << static_cast<int>(Trk::MaterialEffectsBase::ScatteringEffects)
28  : typePattern))
29  , m_scatteringAngles(scat)
30  , m_energyLoss(nullptr)
31 {}
32 
33 inline Trk::MaterialEffectsOnTrack::MaterialEffectsOnTrack(
34  const double tInX0,
35  std::unique_ptr<const EnergyLoss> eloss,
36  const Surface& sf,
37  const std::bitset<MaterialEffectsBase::NumberOfMaterialEffectsTypes>& typePattern)
38  : Trk::MaterialEffectsBase(
39  tInX0,
40  sf,
41  (typePattern == 0
42  ? 1 << static_cast<int>(Trk::MaterialEffectsBase::EnergyLossEffects)
43  : typePattern))
44  , m_scatteringAngles(std::nullopt)
45  , m_energyLoss(std::move(eloss))
46 {}
47 
48 inline Trk::MaterialEffectsOnTrack::MaterialEffectsOnTrack(const double tInX0,
49  const Trk::Surface& sf)
50  : Trk::MaterialEffectsBase(
51  tInX0,
52  sf,
53  1 << static_cast<int>(Trk::MaterialEffectsBase::MaterialThickness))
54  , m_scatteringAngles(std::nullopt)
55  , m_energyLoss(nullptr)
56 {}
57 
58 inline Trk::MaterialEffectsOnTrack::MaterialEffectsOnTrack(
59  const Trk::MaterialEffectsOnTrack& emef)
60  : Trk::MaterialEffectsBase(emef)
61  , m_scatteringAngles(emef.m_scatteringAngles)
62  , m_energyLoss(emef.m_energyLoss ? emef.m_energyLoss->clone() : nullptr)
63 {}
64 
65 inline Trk::MaterialEffectsOnTrack&
66 Trk::MaterialEffectsOnTrack::operator=(const Trk::MaterialEffectsOnTrack& rhs)
67 {
68  if (this != &rhs) {
69  Trk::MaterialEffectsBase::operator=(rhs);
70  m_scatteringAngles = rhs.m_scatteringAngles;
71  m_energyLoss.reset(rhs.m_energyLoss ? rhs.m_energyLoss->clone() : nullptr);
72  }
73  return *this;
74 }
75 
76 //! NVI uniqueClone
77 inline std::unique_ptr<Trk::MaterialEffectsOnTrack>
78 Trk::MaterialEffectsOnTrack::uniqueClone() const
79 {
80  return std::unique_ptr<MaterialEffectsOnTrack>(clone());
81 }
82 
83 inline const Trk::ScatteringAngles*
84 Trk::MaterialEffectsOnTrack::scatteringAngles() const
85 {
86  if (m_scatteringAngles == std::nullopt) {
87  return nullptr;
88  }
89  return &(*m_scatteringAngles);
90 }
91 
92 inline const Trk::EnergyLoss*
93 Trk::MaterialEffectsOnTrack::energyLoss() const
94 {
95  return m_energyLoss.get();
96 }
97 
98 inline Trk::MaterialEffectsOnTrack*
99 Trk::MaterialEffectsOnTrack::clone() const
100 {
101  return new MaterialEffectsOnTrack(*this);
102 }
103