ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
InnerDetector
InDetDetDescr
PixelGeoModel
src
DBM_Det.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
DBM_Det.h
"
6
#include "
DBM_Telescope.h
"
7
#include "
DBM_Services.h
"
8
#include "GeoModelKernel/GeoTransform.h"
9
#include "GeoModelKernel/GeoNameTag.h"
10
#include "GeoModelKernel/GeoIdentifierTag.h"
11
#include "GeoModelKernel/GeoBox.h"
12
#include "GeoModelKernel/GeoTrd.h"
13
#include "GeoModelKernel/GeoTube.h"
14
#include "GaudiKernel/SystemOfUnits.h"
15
#include "
PixelReadoutGeometry/PixelDetectorManager.h
"
16
17
#include <iostream>
18
#include <utility>
19
20
DBM_Det::DBM_Det
(
InDetDD::PixelDetectorManager
* ddmgr
21
,
PixelGeometryManager
* mgr
22
, GeoModelIO::ReadGeoModel* sqliteReader
23
, std::shared_ptr<std::map<std::string, GeoFullPhysVol*>> mapFPV
24
, std::shared_ptr<std::map<std::string, GeoAlignableTransform*>> mapAX)
25
:
GeoVPixelFactory
(ddmgr,mgr,sqliteReader,
std
::move(mapFPV),
std
::move(mapAX))
26
{
27
double
Trans_Y = 0.;
28
29
// Radius to beamline
30
// Hardcoded, so if change then change in DBM_module too
31
double
trans_rad = 46.678*Gaudi::Units::mm + (
m_gmt_mgr
->DBMTelescopeY()) / 2.;
// 10-Gaudi::Units::degree version
32
33
// TRANS_X TRANS_Y TRANS_Z ROT_X ROT_Y ROT_Z
34
m_module
[0].push_back(trans_rad);
m_module
[0].push_back(0);
m_module
[0].push_back(Trans_Y);
m_module
[0].push_back(0);
m_module
[0].push_back(0);
m_module
[0].push_back(270);
35
m_module
[1].push_back(0);
m_module
[1].push_back(trans_rad);
m_module
[1].push_back(Trans_Y);
m_module
[1].push_back(0);
m_module
[1].push_back(0);
m_module
[1].push_back(0);
36
m_module
[2].push_back(-trans_rad);
m_module
[2].push_back(0);
m_module
[2].push_back(Trans_Y);
m_module
[2].push_back(0);
m_module
[2].push_back(0);
m_module
[2].push_back(90);
37
m_module
[3].push_back(0);
m_module
[3].push_back(-trans_rad);
m_module
[3].push_back(Trans_Y);
m_module
[3].push_back(0);
m_module
[3].push_back(0);
m_module
[3].push_back(180);
38
39
}
40
41
GeoVPhysVol*
DBM_Det::Build
()
42
{
43
GeoFullPhysVol* Phys{
nullptr
};
44
if
(!
m_sqliteReader
) {
45
double
safety = 0.001;
46
47
//create a cylinder 8mm smaller than the BPSS outer radius to place the 4 DBM telescopes
48
double
rmin = 45.*Gaudi::Units::mm;
//41.0*Gaudi::Units::mm;
49
double
rmax = 150.*Gaudi::Units::mm;
//244.*Gaudi::Units::mm;
50
double
halflength =
m_gmt_mgr
->DBMTelescopeZ()/2.;
//200.*Gaudi::Units::mm
51
GeoTube * Shape =
new
GeoTube(rmin,rmax,halflength);
52
const
GeoMaterial* air =
m_mat_mgr
->getMaterial(
"std::Air"
);
53
const
GeoLogVol* Log =
new
GeoLogVol(
"OutsideDBM"
,Shape,air);
54
Phys =
new
GeoFullPhysVol(Log);
55
56
// add PP0 board
57
DBM_PP0
pp0Board (
m_DDmgr
,
m_gmt_mgr
,
m_sqliteReader
,
m_mapFPV
,
m_mapAX
);
58
GeoVPhysVol* pp0BoardPhys = pp0Board.
Build
();
59
GeoTrf::Translate3D pp0Pos(0., 0., -halflength +
m_gmt_mgr
->DBMPP0Thick()/2. + safety);
60
GeoTransform* pp0xform =
new
GeoTransform(pp0Pos);
61
GeoNameTag* pp0tag =
new
GeoNameTag(
"DBM_PP0"
);
62
Phys->add(pp0tag);
63
Phys->add(pp0xform);
64
Phys->add(pp0BoardPhys);
65
}
66
67
//we are now adding four DBM telescopes
68
DBM_Telescope
dbm (
m_DDmgr
,
m_gmt_mgr
,
m_sqliteReader
,
m_mapFPV
,
m_mapAX
);
69
for
(
int
i=0; i<4; i++)
70
{
71
m_gmt_mgr
->SetEta(0);
72
m_gmt_mgr
->SetPhi(i);
73
// Fixing swaping of module 0 and 2 on side C (-4)
74
// sinceDBM side C is 180deg rotation around global Y
75
if
((
m_gmt_mgr
->GetSide() < 0) && (i == 0))
m_gmt_mgr
->SetPhi(2);
76
else
if
((
m_gmt_mgr
->GetSide() < 0) && (i == 2))
m_gmt_mgr
->SetPhi(0);
77
78
//setting transformation
79
if
(
m_sqliteReader
) {
80
dbm.
Build
();
81
}
82
else
{
83
GeoTrf::Transform3D rm = GeoTrf::RotateZ3D(
m_module
[i].at(5)*Gaudi::Units::deg)
84
* GeoTrf::RotateY3D(
m_module
[i].at(4)*Gaudi::Units::deg)
85
* GeoTrf::RotateX3D(
m_module
[i].at(3)*Gaudi::Units::deg);
86
GeoTrf::Translation3D pos(
m_module
[i].at(0),
m_module
[i].at(1),
m_module
[i].at(2));
87
GeoTransform* xform =
new
GeoTransform(GeoTrf::Transform3D(pos*rm));
88
89
GeoNameTag* tag =
new
GeoNameTag(
"DBM Module"
);
90
GeoVPhysVol* dbmModPhys = dbm.
Build
();
91
Phys->add(tag);
92
Phys->add(
new
GeoIdentifierTag(i));
93
Phys->add(xform);
94
Phys->add(dbmModPhys);
95
}
96
}
97
98
// Set numerology for the full DBM system
99
if
(
m_DDmgr
->numerology().numEndcapsDBM()==0) {
100
int
numDisk=3;
101
int
numPhiModules=4;
102
m_DDmgr
->numerology().setNumDisksDBM(numDisk);
103
m_DDmgr
->numerology().setNumBarrelDBM(0);
104
m_DDmgr
->numerology().addEndcapDBM(4);
105
m_DDmgr
->numerology().addEndcapDBM(-4);
106
for
(
int
disk=0; disk<numDisk; disk++){
107
m_DDmgr
->numerology().setNumPhiModulesForDiskRingDBM(disk, 0, numPhiModules);
108
}
109
}
110
111
return
Phys;
112
}
DBM_Det.h
DBM_Services.h
DBM_Telescope.h
PixelDetectorManager.h
DBM_Det::m_module
std::vector< double > m_module[4]
Definition
DBM_Det.h:25
DBM_Det::Build
virtual GeoVPhysVol * Build() override
Definition
DBM_Det.cxx:41
DBM_Det::DBM_Det
DBM_Det(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
DBM_Det.cxx:20
DBM_PP0
Definition
DBM_Services.h:18
DBM_PP0::Build
virtual GeoVPhysVol * Build() override
Definition
DBM_Services.cxx:12
DBM_Telescope
Diamond Beam Monitor telescope builder.
Definition
DBM_Telescope.h:16
DBM_Telescope::Build
virtual GeoVPhysVol * Build() override
Definition
DBM_Telescope.cxx:25
GeoVPixelFactory::m_mapFPV
std::shared_ptr< std::map< std::string, GeoFullPhysVol * > > m_mapFPV
Definition
GeoVPixelFactory.h:47
GeoVPixelFactory::m_mapAX
std::shared_ptr< std::map< std::string, GeoAlignableTransform * > > m_mapAX
Definition
GeoVPixelFactory.h:48
GeoVPixelFactory::m_sqliteReader
GeoModelIO::ReadGeoModel * m_sqliteReader
Definition
GeoVPixelFactory.h:46
GeoVPixelFactory::m_gmt_mgr
PixelGeometryManager * m_gmt_mgr
Definition
GeoVPixelFactory.h:43
GeoVPixelFactory::m_DDmgr
InDetDD::PixelDetectorManager * m_DDmgr
Definition
GeoVPixelFactory.h:45
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
std
STL namespace.
Generated on
for ATLAS Offline Software by
1.17.0