ATLAS Offline Software
Loading...
Searching...
No Matches
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
5inline 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
17inline 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
33inline 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
48inline 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
58inline 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
65inline Trk::MaterialEffectsOnTrack&
66Trk::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
77inline std::unique_ptr<Trk::MaterialEffectsOnTrack>
78Trk::MaterialEffectsOnTrack::uniqueClone() const
79{
80 return std::unique_ptr<MaterialEffectsOnTrack>(clone());
81}
82
83inline const Trk::ScatteringAngles*
84Trk::MaterialEffectsOnTrack::scatteringAngles() const
85{
86 if (m_scatteringAngles == std::nullopt) {
87 return nullptr;
88 }
89 return &(*m_scatteringAngles);
90}
91
92inline const Trk::EnergyLoss*
93Trk::MaterialEffectsOnTrack::energyLoss() const
94{
95 return m_energyLoss.get();
96}
97
98inline Trk::MaterialEffectsOnTrack*
99Trk::MaterialEffectsOnTrack::clone() const
100{
101 return new MaterialEffectsOnTrack(*this);
102}
103