ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
InnerDetector
InDetDetDescr
PixelGeoModel
src
GeoPixelCable.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
GeoPixelCable.h
"
6
#include "GeoModelKernel/GeoBox.h"
7
#include "GeoModelKernel/GeoLogVol.h"
8
#include "GeoModelKernel/GeoPhysVol.h"
9
#include "GeoModelKernel/GeoMaterial.h"
10
11
#include <sstream>
12
#include <utility>
13
14
GeoPixelCable::GeoPixelCable
(
InDetDD::PixelDetectorManager
* ddmgr,
15
PixelGeometryManager
* mgr,
16
GeoModelIO::ReadGeoModel* sqliteReader,
17
std::shared_ptr<std::map<std::string, GeoFullPhysVol*>> mapFPV,
18
std::shared_ptr<std::map<std::string, GeoAlignableTransform*>> mapAX)
19
:
GeoVPixelFactory
(ddmgr, mgr, sqliteReader,
std
::move(mapFPV),
std
::move(mapAX)),
20
m_currentElement
(-1)
21
{
22
fillElements
(
m_gmt_mgr
->GetLD(),
m_gmt_mgr
->Phi());
23
if
(
m_elements
.empty()) {
// If no information for layer use layer 0 numbers.
24
fillElements
(0,
m_gmt_mgr
->Phi());
25
}
26
}
27
28
void
29
GeoPixelCable::fillElements
(
int
layer,
int
phiSector)
30
{
31
int
nentries =
m_gmt_mgr
->PixelCableElements();
32
int
biStaveType =
m_gmt_mgr
->PixelBiStaveType(layer, phiSector);
33
34
for
(
int
i = 0; i < nentries; i++) {
35
// bistave number
36
// 0 means both staves in bistave the same
37
// 1 means odd bistave
38
// 2 means even bistave
39
// If 0 then keep for all staves otherwise keep if odd/even correspond
40
int
cableBiStaveNum =
m_gmt_mgr
->PixelCableBiStaveNum(i);
41
if
(
m_gmt_mgr
->PixelCableLayerNum(i) == layer) {
42
if
(!cableBiStaveNum || ((cableBiStaveNum%2) == biStaveType%2)) {
43
m_elements
.push_back(i);
44
}
45
}
46
}
47
}
48
49
50
GeoVPhysVol*
GeoPixelCable::Build
() {
51
52
if
(
m_currentElement
< 0){
53
std::cout <<
"ERROR: GeoPixelCableCurrent, current element not set."
<< std::endl;
54
return
nullptr
;
55
}
56
57
58
int
tableIndex =
m_elements
[
m_currentElement
];
59
//std::cout << "GeoPixelCable: " << m_currentElement << ", " << tableIndex << std::endl;
60
61
double
zstart =
m_gmt_mgr
->PixelCableZStart(tableIndex);
62
double
zend =
m_gmt_mgr
->PixelCableZEnd(tableIndex);
63
double
length
= std::abs(zend - zstart);
64
double
width
=
m_gmt_mgr
->PixelCableWidth(tableIndex);
65
double
thickness =
m_gmt_mgr
->PixelCableThickness(tableIndex);
66
double
weight =
m_gmt_mgr
->PixelCableWeight(tableIndex);
67
std::string
label
=
m_gmt_mgr
->PixelCableLabel(tableIndex);
68
69
std::string matName =
m_gmt_mgr
->getMaterialName(
"Cable"
,
m_gmt_mgr
->GetLD());
70
const
GeoMaterial* cableMat =
m_mat_mgr
->getMaterial(matName);
71
72
// If weight supplied use it to calculate the required thickness
73
// otherwise use the suppled thickness
74
if
(weight != 0) {
75
thickness = weight / (cableMat->getDensity() *
length
*
width
);
76
}
77
78
const
GeoBox* cableBox =
new
GeoBox(0.5*thickness,0.5*
width
,0.5*
length
);
79
std::string logName =
"Cable"
;
80
std::ostringstream o;
81
o <<
m_gmt_mgr
->getLD_Label() <<
label
;
82
logName = logName+o.str();
83
//std::cout << logName << ": " << weight/Gaudi::Units::g << " g, " << thickness << std::endl;
84
85
GeoLogVol* theCable =
new
GeoLogVol(logName,cableBox,cableMat);
86
GeoPhysVol* cablePhys =
new
GeoPhysVol(theCable);
87
return
cablePhys;
88
}
89
90
91
double
GeoPixelCable::zpos
() {
92
93
int
tableIndex =
m_elements
[
m_currentElement
];
94
double
zstart =
m_gmt_mgr
->PixelCableZStart(tableIndex);
95
double
zend =
m_gmt_mgr
->PixelCableZEnd(tableIndex);
96
return
0.5*(zend + zstart);
97
}
98
99
double
GeoPixelCable::getStackOffset
() {
100
int
tableIndex =
m_elements
[
m_currentElement
];
101
return
m_gmt_mgr
->PixelCableStackOffset(tableIndex);
102
103
}
104
length
double length(const pvec &v)
Definition
FPGATrackSimLLPDoubletHoughTransformTool.cxx:26
GeoPixelCable.h
width
const double width
Definition
TTileTripReader.cxx:24
GeoPixelCable::Build
virtual GeoVPhysVol * Build() override
Definition
GeoPixelCable.cxx:50
GeoPixelCable::getStackOffset
double getStackOffset()
Definition
GeoPixelCable.cxx:99
GeoPixelCable::GeoPixelCable
GeoPixelCable(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr, GeoModelIO::ReadGeoModel *sqliteReader, std::shared_ptr< std::map< std::string, GeoFullPhysVol * > > mapFPV, std::shared_ptr< std::map< std::string, GeoAlignableTransform * > > mapAX)
Definition
GeoPixelCable.cxx:14
GeoPixelCable::zpos
double zpos()
Definition
GeoPixelCable.cxx:91
GeoPixelCable::m_currentElement
int m_currentElement
Definition
GeoPixelCable.h:25
GeoPixelCable::fillElements
void fillElements(int layer, int phiSector)
Definition
GeoPixelCable.cxx:29
GeoPixelCable::m_elements
std::vector< int > m_elements
Definition
GeoPixelCable.h:26
GeoVPixelFactory::m_gmt_mgr
PixelGeometryManager * m_gmt_mgr
Definition
GeoVPixelFactory.h:43
GeoVPixelFactory::m_mat_mgr
InDetMaterialManager * m_mat_mgr
Definition
GeoVPixelFactory.h:44
GeoVPixelFactory::GeoVPixelFactory
GeoVPixelFactory(InDetDD::PixelDetectorManager *ddmgr, PixelGeometryManager *mgr, GeoModelIO::ReadGeoModel *sqliteReader, std::shared_ptr< std::map< std::string, GeoFullPhysVol * > > mapFPV, std::shared_ptr< std::map< std::string, GeoAlignableTransform * > > mapAX)
Definition
GeoVPixelFactory.cxx:11
InDetDD::PixelDetectorManager
Dedicated detector manager extending the functionality of the SiDetectorManager with dedicated pixel ...
Definition
PixelDetectorManager.h:47
PixelGeometryManager
Definition
PixelGeometryManager.h:28
label
std::string label(const std::string &format, int i)
Definition
label.h:19
std
STL namespace.
Generated on
for ATLAS Offline Software by
1.17.0