ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Tracking
TrkDetDescr
TrkGeometry
src
DetachedTrackingVolume.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3
*/
4
6
// DetachedTrackingVolume.cxx, (c) ATLAS Detector software
8
9
// Trk
10
#include "
TrkGeometry/DetachedTrackingVolume.h
"
11
12
#include <utility>
13
14
#include "
TrkGeometry/Layer.h
"
15
#include "
TrkGeometry/TrackingVolume.h
"
16
17
Trk::DetachedTrackingVolume::DetachedTrackingVolume
(std::string
name
,
18
std::unique_ptr<Trk::TrackingVolume> volume)
19
:
m_trkVolume
(
std
::
move
(volume))
20
,
m_name
(
std
::
move
(
name
))
21
{}
22
23
Trk::DetachedTrackingVolume::DetachedTrackingVolume
(
24
std::string
name
,
25
std::unique_ptr<Trk::TrackingVolume> volume,
26
std::unique_ptr<Trk::Layer> lay,
27
std::unique_ptr<
const
std::vector<Trk::Layer*>> multilay)
28
:
m_trkVolume
(
std
::
move
(volume))
29
,
m_layerRepresentation
(
std
::
move
(lay))
30
,
m_multilayerRepresentation
(
std
::
move
(multilay))
31
,
m_name
(
std
::
move
(
name
))
32
,
m_baseTransform
(nullptr)
33
{}
34
35
Trk::DetachedTrackingVolume::~DetachedTrackingVolume
() {
36
//These we have to delete manually
37
if
(
m_multilayerRepresentation
) {
38
for
(
auto
*layer : *
m_multilayerRepresentation
)
39
delete
layer;
40
}
41
}
42
43
void
44
Trk::DetachedTrackingVolume::move
(
Amg::Transform3D
& shift)
45
{
46
m_trkVolume
->moveTV(shift);
47
if
(
m_layerRepresentation
) {
48
m_layerRepresentation
->moveLayer(shift);
49
}
50
if
(
m_multilayerRepresentation
) {
51
for
(
auto
* layer : *
m_multilayerRepresentation
) {
52
layer->moveLayer(shift);
53
}
54
}
55
}
56
57
Trk::DetachedTrackingVolume
*
58
Trk::DetachedTrackingVolume::clone
(
const
std::string&
name
,
59
Amg::Transform3D
& shift)
const
60
{
61
auto
newTV = std::make_unique<TrackingVolume>(*(this->
trackingVolume
()), shift);
62
TrackingVolumeArray
* confinedVolumes = newTV->confinedVolumes();
63
LayerArray
* confinedLayers= newTV->confinedLayers();
64
Trk::ArraySpan<Trk::Layer* const>
confinedArbitraryLayers = newTV->confinedArbitraryLayers();
65
//
66
Trk::DetachedTrackingVolume
* newStat =
nullptr
;
67
// layer representation ?
68
std::unique_ptr<Trk::PlaneLayer> newLay =
nullptr
;
69
if
(this->
layerRepresentation
()) {
70
std::unique_ptr<std::vector<Trk::Layer*>> newMulti =
nullptr
;
71
const
Trk::PlaneLayer
* pl =
dynamic_cast<
const
Trk::PlaneLayer
*
>
(this->
layerRepresentation
());
72
if
(pl) {
73
newLay = std::make_unique<Trk::PlaneLayer>(*pl);
74
newLay->moveLayer(shift);
75
if
(!this->
multilayerRepresentation
().
empty
()) {
76
newMulti = std::make_unique<std::vector<Trk::Layer*>>();
77
for
(
unsigned
int
i = 0; i < this->
multilayerRepresentation
().size(); i++) {
78
const
Trk::PlaneLayer
* mpl =
dynamic_cast<
const
Trk::PlaneLayer
*
>
((this->
multilayerRepresentation
())[i]);
79
if
(mpl) {
80
Trk::PlaneLayer
* newPl =
new
Trk::PlaneLayer
(*mpl);
81
newPl->
moveLayer
(shift);
82
newMulti->push_back(newPl);
83
}
else
84
std::cout <<
"WARNING Trk::DetachedTrackingVolume::clone() "
85
"dynamic cast to 'const Trk::PlaneLayer* mpl' failed!"
86
<< std::endl;
87
}
88
}
89
newStat =
new
Trk::DetachedTrackingVolume
(
name
, std::move(newTV), std::move(newLay), std::move(newMulti));
90
}
else
{
91
std::cout <<
"WARNING Trk::DetachedTrackingVolume::clone() dynamic "
92
"cast to 'const Trk::PlaneLayer* pl' failed!"
93
<< std::endl;
94
newStat =
new
Trk::DetachedTrackingVolume
(
name
, std::move(newTV));
95
}
96
}
else
{
97
newStat =
new
Trk::DetachedTrackingVolume
(
name
, std::move(newTV));
98
}
99
//
100
// enclose layers
101
if
(confinedVolumes) {
102
std::span<Trk::TrackingVolume * const> vols = confinedVolumes->
arrayObjects
();
103
for
(
auto
*vol : vols) {
104
Trk::LayerArray
* layAr = vol->confinedLayers();
105
Trk::ArraySpan<Trk::Layer* const>
alays = vol->confinedArbitraryLayers();
106
if
(layAr) {
107
std::span<Trk::Layer* const> lays = layAr->
arrayObjects
();
108
for
(
auto
*lay : lays) {
109
lay->encloseDetachedTrackingVolume(*newStat);
110
}
111
}
112
if
(!alays.empty()) {
113
for
(
auto
*alay : alays) {
114
alay->encloseDetachedTrackingVolume(*newStat);
115
}
116
}
117
}
118
}
119
if
(confinedLayers) {
120
std::span<Trk::Layer* const> lays = confinedLayers->
arrayObjects
();
121
for
(
auto
*lay : lays){
122
lay->encloseDetachedTrackingVolume(*newStat);
123
}
124
}
125
if
(!confinedArbitraryLayers.empty()) {
126
for
(
auto
*alay : confinedArbitraryLayers) {
127
alay->encloseDetachedTrackingVolume(*newStat);
128
}
129
}
130
return
newStat;
131
}
132
133
void
134
Trk::DetachedTrackingVolume::compactify
(
size_t
& cSurfaces,
size_t
& tSurfaces)
135
{
136
// deal with the Tracking Volume representation
137
if
(
m_trkVolume
){
138
m_trkVolume
->compactify(cSurfaces, tSurfaces);
139
}
140
141
// deal with the layer representation
142
if
(
layerRepresentation
()) {
143
++tSurfaces;
144
if
(
layerRepresentation
()->surfaceRepresentation().owner() ==
Trk::noOwn
) {
145
layerRepresentation
()->surfaceRepresentation().setOwner(
Trk::TGOwn
);
146
++cSurfaces;
147
}
148
}
149
// deal with the multi-layer representation
150
if
(!
multilayerRepresentation
().
empty
()) {
151
tSurfaces +=
m_multilayerRepresentation
->size();
152
for
(
const
auto
& mLayerIter : (*
m_multilayerRepresentation
)) {
153
if
((*mLayerIter).surfaceRepresentation().owner() ==
Trk::noOwn
) {
154
(*mLayerIter).surfaceRepresentation().setOwner(
Trk::TGOwn
);
155
++cSurfaces;
156
}
157
}
158
}
159
}
160
161
void
162
Trk::DetachedTrackingVolume::sign
(
GeometrySignature
signat,
163
GeometryType
geotype)
164
{
165
m_trkVolume
->sign(signat, geotype);
166
}
167
168
Trk::GeometrySignature
Trk::DetachedTrackingVolume::geometrySignature
()
const
{
169
return
m_trkVolume
->geometrySignature();
170
}
171
172
Trk::GeometryType
Trk::DetachedTrackingVolume::geometryType
()
const
{
173
return
m_trkVolume
->geometryType();
174
}
175
176
void
Trk::DetachedTrackingVolume::setBaseTransform
(std::unique_ptr<Amg::Transform3D> transf) {
177
if
(transf){
178
m_baseTransform
= std::move(transf);
179
}
180
else
{
181
m_baseTransform
= std::make_unique<Amg::Transform3D>(this->
trackingVolume
()->transform());
182
}
183
}
184
DetachedTrackingVolume.h
Layer.h
TrackingVolume.h
empty
static const Attributes_t empty
Definition
XmlStreamer.cxx:16
Trk::BinnedArray::arrayObjects
virtual std::span< T *const > arrayObjects()=0
Return all objects of the Array non-const we can still modify the T.
Trk::DetachedTrackingVolume
Base Class for a navigation object (active/passive) in the Tracking realm.
Definition
DetachedTrackingVolume.h:37
Trk::DetachedTrackingVolume::m_layerRepresentation
std::unique_ptr< Layer > m_layerRepresentation
Definition
DetachedTrackingVolume.h:99
Trk::DetachedTrackingVolume::move
void move(Amg::Transform3D &shift)
moving object around
Definition
DetachedTrackingVolume.cxx:44
Trk::DetachedTrackingVolume::clone
DetachedTrackingVolume * clone(const std::string &name, Amg::Transform3D &shift) const
clone with transform
Definition
DetachedTrackingVolume.cxx:58
Trk::DetachedTrackingVolume::geometrySignature
GeometrySignature geometrySignature() const
return the Signature
Definition
DetachedTrackingVolume.cxx:168
Trk::DetachedTrackingVolume::DetachedTrackingVolume
DetachedTrackingVolume()
Default Constructor.
Trk::DetachedTrackingVolume::sign
void sign(GeometrySignature signat, GeometryType geotype)
sign the volume - the geometry builder has to do that
Definition
DetachedTrackingVolume.cxx:162
Trk::DetachedTrackingVolume::name
const std::string & name() const
returns the Name
Definition
DetachedTrackingVolume.h:115
Trk::DetachedTrackingVolume::geometryType
GeometryType geometryType() const
return the Type
Definition
DetachedTrackingVolume.cxx:172
Trk::DetachedTrackingVolume::m_name
const std::string m_name
Definition
DetachedTrackingVolume.h:102
Trk::DetachedTrackingVolume::layerRepresentation
const Layer * layerRepresentation() const
returns layer representation
Definition
DetachedTrackingVolume.h:117
Trk::DetachedTrackingVolume::m_baseTransform
std::unique_ptr< Amg::Transform3D > m_baseTransform
Definition
DetachedTrackingVolume.h:104
Trk::DetachedTrackingVolume::m_multilayerRepresentation
std::unique_ptr< const std::vector< Layer * > > m_multilayerRepresentation
Definition
DetachedTrackingVolume.h:101
Trk::DetachedTrackingVolume::trackingVolume
const TrackingVolume * trackingVolume() const
returns the TrackingVolume
Definition
DetachedTrackingVolume.h:107
Trk::DetachedTrackingVolume::setBaseTransform
void setBaseTransform(std::unique_ptr< Amg::Transform3D > transf=nullptr)
alignment methods: set base transform / default argument to current transform
Definition
DetachedTrackingVolume.cxx:176
Trk::DetachedTrackingVolume::m_trkVolume
std::unique_ptr< TrackingVolume > m_trkVolume
Definition
DetachedTrackingVolume.h:98
Trk::DetachedTrackingVolume::~DetachedTrackingVolume
~DetachedTrackingVolume()
Destructor.
Definition
DetachedTrackingVolume.cxx:35
Trk::DetachedTrackingVolume::compactify
void compactify(size_t &cSurfaces, size_t &tSurfaces)
Compactify – set TG as owner to surfaces.
Definition
DetachedTrackingVolume.cxx:134
Trk::DetachedTrackingVolume::multilayerRepresentation
std::span< Layer const *const > multilayerRepresentation() const
returns (multi)layer representation
Definition
DetachedTrackingVolume.h:127
Trk::PlaneLayer
Class to describe a planar detector layer for tracking, it inhertis from both, Layer base class and P...
Definition
PlaneLayer.h:40
Trk::PlaneLayer::moveLayer
virtual void moveLayer(Amg::Transform3D &shift) override final
move the Layer
Definition
PlaneLayer.cxx:80
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition
GeoPrimitives.h:46
Trk::LayerArray
BinnedArray< Layer > LayerArray
simply for the eye
Definition
TrackingVolume.h:55
Trk::ArraySpan
std::span< T > ArraySpan
Definition
TrackingVolume.h:59
Trk::TGOwn
@ TGOwn
Definition
Surface.h:58
Trk::noOwn
@ noOwn
Definition
Surface.h:57
Trk::TrackingVolumeArray
BinnedArray< TrackingVolume > TrackingVolumeArray
simply for the eye
Definition
ITrackingVolumeArrayCreator.h:27
Trk::GeometryType
GeometryType
Definition
GeometrySignature.h:37
Trk::GeometrySignature
GeometrySignature
Definition
GeometrySignature.h:24
std
STL namespace.
Generated on
for ATLAS Offline Software by
1.17.0