ATLAS Offline Software
Public Member Functions | Protected Attributes | Private Attributes | List of all members
DBM_Module Class Reference

#include <DBM_Module.h>

Inheritance diagram for DBM_Module:
Collaboration diagram for DBM_Module:

Public Member Functions

 DBM_Module (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)
 
virtual GeoVPhysVol * Build () override
 

Protected Attributes

PixelGeometryManagerm_gmt_mgr
 
InDetMaterialManagerm_mat_mgr
 
InDetDD::PixelDetectorManagerm_DDmgr
 
GeoModelIO::ReadGeoModel * m_sqliteReader
 
std::shared_ptr< std::map< std::string, GeoFullPhysVol * > > m_mapFPV
 
std::shared_ptr< std::map< std::string, GeoAlignableTransform * > > m_mapAX
 
const double m_epsilon
 

Private Attributes

const InDetDD::SiDetectorDesignm_design
 

Detailed Description

Build the DBM Module consisting of diamond sensor, FEI4 and ceramic substrate

Definition at line 26 of file DBM_Module.h.

Constructor & Destructor Documentation

◆ DBM_Module()

DBM_Module::DBM_Module ( 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 at line 26 of file DBM_Module.cxx.

31  : GeoVPixelFactory (ddmgr, mgr, sqliteReader, std::move(mapFPV), std::move(mapAX))
32 {
33 
34  double thickness = 0.5;
35 
36  int circuitsPerPhi = 1;
37  int circuitsPerEta = 1;
38  int cellRowPerCirc = 80;
39  int cellColPerCirc = 336;
40  int rowsPerCircuit = 80;
41  int columnsPerCircuit = 336;
42  int readoutSide = 1;
43 
44  double pitchEtaLongEnd = 0.05;
45  double pitchEtaLong = 0.05;
46  double pitchPhi = 0.25;
47  double pitchEta = 0.05;
48 
49  constexpr auto readoutTechnology = InDetDD::PixelReadoutTechnology::FEI4;
53  readoutTechnology,
54  std::array<int,kNDirections>{circuitsPerPhi,circuitsPerEta}, // [0]=phi/row, [1]=eta/column
55  std::array<int,kNDirections>{rowsPerCircuit,columnsPerCircuit}, // [0]=phi/row, [1]=eta/column
56  std::array<std::array<double,kNDirections>,kNPixelLocations>{ // regular/central,longEnd/outer,long/inner
57  std::array<double,kNDirections>{pitchPhi,pitchEta},
58  std::array<double,kNDirections>{0.,pitchEtaLongEnd},
59  std::array<double,kNDirections>{0.,pitchEtaLong}});
60 
61  std::unique_ptr<PixelModuleDesign> p_dbmdesign = std::make_unique<PixelModuleDesign>(thickness,
62  circuitsPerPhi,
63  circuitsPerEta,
64  cellColPerCirc,
65  cellRowPerCirc,
66  columnsPerCircuit,
67  rowsPerCircuit,
68  std::move(diode_tree),
70  readoutSide,
71  false, /* 3D */
72  InDetDD::Undefined, /* detector type */
73  readoutTechnology);
74 
75 
76  m_design = m_DDmgr->addDesign(std::move(p_dbmdesign));
77 
78 
79 }

Member Function Documentation

◆ Build()

GeoVPhysVol * DBM_Module::Build ( )
overridevirtual

Implements GeoVPixelFactory.

Definition at line 81 of file DBM_Module.cxx.

82 {
83  const PixelID * idHelper = m_gmt_mgr->getIdHelper();
84  int dbmdet = 4*m_gmt_mgr->GetSide();
85  Identifier idwafer;
86  idwafer = idHelper->wafer_id(dbmdet,m_gmt_mgr->GetLD(),m_gmt_mgr->Phi(),m_gmt_mgr->Eta());
87 
88  if(m_sqliteReader) {
89  std::string key ="DBMDiamond_" + std::to_string(dbmdet) +"_"+ std::to_string(m_gmt_mgr->GetLD()) +"_"+ std::to_string(m_gmt_mgr->Phi()) +"_"+ std::to_string(m_gmt_mgr->Eta());
91  // add the element to the manager
92  m_DDmgr->addDetectorElement(element);
93  m_DDmgr->addAlignableTransform(0, idwafer, (*m_mapAX)[key], (*m_mapFPV)[key]);
94  return nullptr;
95  }
96  else {
97  GeoIdentifierTag* diamondTag = new GeoIdentifierTag(400);
98 
99 
100  double safety = 0.003*Gaudi::Units::mm;
101 
102  //diamond dimension
103  double diamond_X = m_gmt_mgr->DBMDiamondX();
104  double diamond_Y = m_gmt_mgr->DBMDiamondY();
105  double diamond_Z = m_gmt_mgr->DBMDiamondZ();
106  double air_gap = m_gmt_mgr->DBMAirGap();
107 
108  //chip, FEI4 dimension
109  double chip_X = m_gmt_mgr->DBMFEI4X();
110  double chip_Y = m_gmt_mgr->DBMFEI4Y();
111  double chip_thick = m_gmt_mgr->DBMFEI4Z();
112 
113  //ceramic dimension
114  double substrate_X = m_gmt_mgr->DBMCeramicX();
115  double substrate_Y = m_gmt_mgr->DBMCeramicY();
116  double substrate_Z = m_gmt_mgr->DBMCeramicZ();
117 
118  //distances from bottom of the ceramic
119  //Hardcoded!
120  double bot2Chip = 0.0*Gaudi::Units::mm;
121  double bot2Diamond = 1.685*Gaudi::Units::mm;
122 
123 
124  //---------------------------------------------
125  // Get parameters for alignable Transform
126 
127  // Position of the corner closest to IP and beamline
128  // Hardcoded, so if change then change in GeoPixelEnvelope and DBM_Det too
129  double ZToIP = 887.002*Gaudi::Units::mm;
130  double RToBeam = 46.678*Gaudi::Units::mm;
131 
132  // layer spacing
133  double Zspacing = m_gmt_mgr->DBMSpacingZ();
134  double Rspacing = m_gmt_mgr->DBMSpacingRadial();
135  // gap between V-slide and first main plate
136  double layer1Space = m_gmt_mgr->DBMSpace();
137 
138  // parameters for rotating the 3-layer unit
139  double angle = m_gmt_mgr->DBMAngle(); // telescope tilting angle in degree
140  double bracketZ = m_gmt_mgr->DBMBracketZ(); // total thickness of the bracket unit,
141  double trapBackY = m_gmt_mgr->DBMTrapezBackY();
142  double trapBackShortZ = m_gmt_mgr->DBMTrapezBackShortZ();
143  double coolingSidePlateY = m_gmt_mgr->DBMCoolingSidePlateY();
144  double brcktLockZ = m_gmt_mgr->DBMBrcktLockZ();
145 
146  //double lyRadius = sqrt(layerUnitY*layerUnitY/4 + layerUnitZ*layerUnitZ/4);
147  //double lyAngle = atan(layerUnitY/layerUnitZ);
148  // position of the 3-layer unit's corner closest to the IP and beamline, which is the rotation point
149  double layerUnitPos_Y = (trapBackY/cos(angle) - coolingSidePlateY)*cos(angle);
150  double layerUnitPos_Z = coolingSidePlateY*sin(angle) + trapBackShortZ + bracketZ - brcktLockZ;
151  //---------------------------------------------
152 
153 
154 
155  const GeoMaterial* air = m_mat_mgr->getMaterial("std::Air");
156  //first try the Diamond
157  const GeoMaterial* diamond = m_mat_mgr->getMaterial("pix::Diamond");
158  if(diamond == nullptr)
159  {
160  diamond = m_mat_mgr->getMaterial("std::Carbon");
161  }
162 
163  const GeoMaterial* chip_mat = m_mat_mgr->getMaterial("pix::ChipBase");
164 
165  double max_thick = diamond_Z + air_gap + chip_thick + substrate_Z;
166 
167  //create a outer box to contain all volumes
168  const GeoBox* dbmModuleBox = new GeoBox(substrate_X/2.0 + safety, substrate_Y/2.0 + safety, max_thick/2.0 + safety);
169  const GeoLogVol* dbmModuleLog = new GeoLogVol("dbmModuleLog", dbmModuleBox, air);
170  GeoPhysVol* dbmModulePhys = new GeoPhysVol(dbmModuleLog);
171 
172  GeoTrf::Transform3D rm = GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)*GeoTrf::RotateY3D(270.*Gaudi::Units::deg);
173 
174  //diamond
175  const GeoBox* dbmDiamondBox = new GeoBox(diamond_Z/2.0, diamond_X/2.0, diamond_Y/2.0 );
176  const GeoLogVol* dbmDiamondLog = new GeoLogVol("dbmDiamondLog", dbmDiamondBox, diamond);
177  GeoFullPhysVol* dbmDiamondPhys = new GeoFullPhysVol(dbmDiamondLog);
178 
179  SiDetectorElement* element= new SiDetectorElement(idwafer, m_design, dbmDiamondPhys, m_gmt_mgr->commonItems());
180  // add the element to the manager
181  m_DDmgr->addDetectorElement(element);
182 
183  GeoTrf::Translation3D dbmDiamondPos(0, bot2Diamond+diamond_Y/2.0-substrate_Y/2.0, diamond_Z/2.0-max_thick/2.0);
184  GeoTransform* xform = new GeoTransform(GeoTrf::Transform3D(dbmDiamondPos*rm));
185 
186  dbmModulePhys->add(diamondTag);
187  dbmModulePhys->add(xform);
188  dbmModulePhys->add(dbmDiamondPhys);
189 
190  //FEI4 chip
191  const GeoBox* dbmFEI4Box = new GeoBox(chip_thick/2.0, chip_X/2.0, chip_Y/2.0 );
192  const GeoLogVol* dbmFEI4Log = new GeoLogVol("dbmWallLogF4", dbmFEI4Box, chip_mat); //should this be "dbmdiamondLog"?
193  GeoPhysVol* dbmFEI4Phys = new GeoPhysVol(dbmFEI4Log);
194 
195  GeoTrf::Translation3D dbmFEI4Pos(0, bot2Chip+chip_Y/2.0-substrate_Y/2.0, max_thick/2.0-substrate_Z-chip_thick/2.0);
196  xform = new GeoTransform(GeoTrf::Transform3D(dbmFEI4Pos*rm));
197 
198  dbmModulePhys->add(xform);
199  dbmModulePhys->add(dbmFEI4Phys);
200 
201  //ceramic support
202  const GeoBox* dbmSubstBox = new GeoBox(substrate_X/2.0, substrate_Y/2.0, substrate_Z/2.0);
203  const GeoMaterial* aluminiumNitride = m_mat_mgr->getMaterialForVolume("pix::DBMCeramic", dbmSubstBox->volume());
204  const GeoLogVol* dbmSubstLog = new GeoLogVol("dbmWallLogCe", dbmSubstBox, aluminiumNitride);
205  GeoPhysVol* dbmSubstPhys = new GeoPhysVol(dbmSubstLog);
206 
207  GeoTrf::Translate3D dbmSubstPos(0, 0, max_thick/2.0-substrate_Z/2.0);
208  xform = new GeoTransform(dbmSubstPos);
209 
210  dbmModulePhys->add(xform);
211  dbmModulePhys->add(dbmSubstPhys);
212 
213  //-----------------------------------------------------
214  //Add to alignable transform
215  // DBM has only level 0 alignable transform.
216  // So, a transform w.r.t global position is created.
217  // This mean the alignable pos below should be
218  // the global position of the sensor
219 
220  int layer = m_gmt_mgr->GetLD();
221  double sensorPosInModuleCage_Z = layer1Space + layer*Zspacing - (substrate_Z + chip_thick + air_gap + diamond_Z/2.);
222  double sensorPosInModuleCage_Y = Rspacing + bot2Diamond + diamond_Y/2.;
223  double globPosZ = ZToIP + layerUnitPos_Z + (sensorPosInModuleCage_Z * cos(angle) - sensorPosInModuleCage_Y * sin(angle));
224  double globPosY = RToBeam + layerUnitPos_Y + (sensorPosInModuleCage_Z * sin(angle) + sensorPosInModuleCage_Y * cos(angle));
225 
226  GeoTrf::RotateX3D rmX10(-10.*Gaudi::Units::deg);
227  GeoTrf::Translation3D alignTransformPos(0, globPosY, globPosZ);
228  GeoAlignableTransform *xformAlign = new GeoAlignableTransform(GeoTrf::Transform3D(alignTransformPos*rmX10));
229  m_DDmgr->addAlignableTransform(0, idwafer, xformAlign, dbmDiamondPhys);
230  //-----------------------------------------------------
231 
232  return dbmModulePhys;
233  }
234 }

Member Data Documentation

◆ m_DDmgr

InDetDD::PixelDetectorManager* GeoVPixelFactory::m_DDmgr
protectedinherited

Definition at line 45 of file GeoVPixelFactory.h.

◆ m_design

const InDetDD::SiDetectorDesign* DBM_Module::m_design
private

Definition at line 38 of file DBM_Module.h.

◆ m_epsilon

const double GeoVPixelFactory::m_epsilon
protectedinherited

Definition at line 49 of file GeoVPixelFactory.h.

◆ m_gmt_mgr

PixelGeometryManager* GeoVPixelFactory::m_gmt_mgr
protectedinherited

Definition at line 43 of file GeoVPixelFactory.h.

◆ m_mapAX

std::shared_ptr<std::map<std::string, GeoAlignableTransform*> > GeoVPixelFactory::m_mapAX
protectedinherited

Definition at line 48 of file GeoVPixelFactory.h.

◆ m_mapFPV

std::shared_ptr<std::map<std::string, GeoFullPhysVol*> > GeoVPixelFactory::m_mapFPV
protectedinherited

Definition at line 47 of file GeoVPixelFactory.h.

◆ m_mat_mgr

InDetMaterialManager* GeoVPixelFactory::m_mat_mgr
protectedinherited

Definition at line 44 of file GeoVPixelFactory.h.

◆ m_sqliteReader

GeoModelIO::ReadGeoModel* GeoVPixelFactory::m_sqliteReader
protectedinherited

Definition at line 46 of file GeoVPixelFactory.h.


The documentation for this class was generated from the following files:
InDetDD::PixelDiodeTree
Tree structure to find the position, index or pitch of a pixel on a semi-regular grid The grid is con...
Definition: PixelDiodeTree.h:33
PixelGeometryManager::DBMBrcktLockZ
virtual double DBMBrcktLockZ()=0
PixelGeometryManager::DBMBracketZ
virtual double DBMBracketZ()=0
python.SystemOfUnits.mm
float mm
Definition: SystemOfUnits.py:98
PixelGeometryManager::DBMDiamondZ
virtual double DBMDiamondZ()=0
PixelGeometryManager::DBMSpacingRadial
virtual double DBMSpacingRadial()=0
PixelGeometryManager::DBMDiamondX
virtual double DBMDiamondX()=0
InDetDD::detail::kNPixelLocations
@ kNPixelLocations
Definition: PixelGeoUtils.h:19
PixelGeometryManager::DBMCeramicY
virtual double DBMCeramicY()=0
PixelGeometryManager::DBMTrapezBackShortZ
virtual double DBMTrapezBackShortZ()=0
deg
#define deg
Definition: SbPolyhedron.cxx:17
InDetDD::SiDetectorManager::addDesign
const SiDetectorDesign * addDesign(std::unique_ptr< const SiDetectorDesign > &&)
Access to module design; returns an observer pointer.
Definition: SiDetectorManager.cxx:134
PixelGeometryManager::DBMSpace
virtual double DBMSpace()=0
PixelGeometryManager::GetSide
virtual int GetSide()=0
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
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
PixelID::wafer_id
Identifier wafer_id(int barrel_ec, int layer_disk, int phi_module, int eta_module) const
For a single crystal.
Definition: PixelID.h:360
GeoVPixelFactory::m_DDmgr
InDetDD::PixelDetectorManager * m_DDmgr
Definition: GeoVPixelFactory.h:45
PixelGeometryManager::DBMAirGap
virtual double DBMAirGap()=0
GeoVPixelFactory::m_gmt_mgr
PixelGeometryManager * m_gmt_mgr
Definition: GeoVPixelFactory.h:43
GeoVPixelFactory::m_mapFPV
std::shared_ptr< std::map< std::string, GeoFullPhysVol * > > m_mapFPV
Definition: GeoVPixelFactory.h:47
BchCleanup.mgr
mgr
Definition: BchCleanup.py:294
angle
double angle(const GeoTrf::Vector2D &a, const GeoTrf::Vector2D &b)
Definition: TRTDetectorFactory_Full.cxx:68
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
PixelGeometryManager::Eta
virtual int Eta()=0
InDetMaterialManager::getMaterialForVolume
const GeoMaterial * getMaterialForVolume(const std::string &materialName, double volume, const std::string &newName="")
Create and get material with a density calculated to give weight in predefined weight table.
Definition: InDetMaterialManager.cxx:460
PixelGeometryManager::DBMAngle
virtual double DBMAngle()=0
PixelGeometryManager::DBMCoolingSidePlateY
virtual double DBMCoolingSidePlateY()=0
PixelGeometryManager::DBMSpacingZ
virtual double DBMSpacingZ()=0
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
PixelGeometryManager::DBMTrapezBackY
virtual double DBMTrapezBackY()=0
InDetDD::PixelDetectorManager::addAlignableTransform
virtual void addAlignableTransform(int level, const Identifier &id, GeoAlignableTransform *xf, const GeoVFullPhysVol *child)
Add alignable transforms.
Definition: PixelDetectorManager.cxx:274
PixelGeometryManager::DBMCeramicZ
virtual double DBMCeramicZ()=0
PixelGeometryManager::DBMCeramicX
virtual double DBMCeramicX()=0
ActsTrk::to_string
std::string to_string(const DetectorType &type)
Definition: GeometryDefs.h:34
InDetDD::SiDetectorElement
Definition: SiDetectorElement.h:109
InDetDD::PixelReadoutTechnology::FEI4
@ FEI4
GeoVPixelFactory::m_mat_mgr
InDetMaterialManager * m_mat_mgr
Definition: GeoVPixelFactory.h:44
DBM_Module::m_design
const InDetDD::SiDetectorDesign * m_design
Definition: DBM_Module.h:38
PixelGeometryManager::DBMDiamondY
virtual double DBMDiamondY()=0
Amg::Translation3D
Eigen::Translation< double, 3 > Translation3D
Definition: GeoPrimitives.h:44
PixelGeometryManager::DBMFEI4X
virtual double DBMFEI4X()=0
PixelGeometryManager::getIdHelper
virtual const PixelID * getIdHelper()=0
InDetDD::Undefined
@ Undefined
Definition: DetectorDesign.h:46
PixelGeometryManager::commonItems
virtual InDetDD::SiCommonItems * commonItems()=0
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
InDetDD::detail::kNDirections
@ kNDirections
Definition: PixelGeoUtils.h:20
InDetMaterialManager::getMaterial
const GeoMaterial * getMaterial(const std::string &materialName)
Get material. First looks for locally defined material and if not found looks in GeoModel material ma...
Definition: InDetMaterialManager.cxx:96
InDetDD::detail::makePixelDiodeTree
PixelDiodeTree makePixelDiodeTree(T_MsgParent *gmt_mgr, InDetDD::PixelReadoutTechnology readoutTechnology, const std::array< int, kNDirections > &circuits, const std::array< int, kNDirections > &dimPerCircuit, const std::array< std::array< double, kNDirections >, kNPixelLocations > &pitch)
Definition: PixelGeoUtils.h:46
PixelID
Definition: PixelID.h:67
PixelGeometryManager::DBMFEI4Z
virtual double DBMFEI4Z()=0
InDetDD::electrons
@ electrons
Definition: InDetDD_Defs.h:17
InDetDD::PixelDetectorManager::addDetectorElement
virtual void addDetectorElement(SiDetectorElement *element) override
Add elememts.
Definition: PixelDetectorManager.cxx:128
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
PixelGeometryManager::DBMFEI4Y
virtual double DBMFEI4Y()=0
PixelGeometryManager::GetLD
virtual int GetLD()=0
PixelGeometryManager::Phi
virtual int Phi()=0
Identifier
Definition: IdentifierFieldParser.cxx:14