ATLAS Offline Software
GeoPixelCable.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 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 
15  GeoModelIO::ReadGeoModel* sqliteReader,
16  std::shared_ptr<std::map<std::string, GeoFullPhysVol*>> mapFPV,
17  std::shared_ptr<std::map<std::string, GeoAlignableTransform*>> mapAX)
18  : GeoVPixelFactory(ddmgr, mgr, sqliteReader, mapFPV, mapAX),
19  m_currentElement(-1)
20 {
22  if (m_elements.empty()) { // If no information for layer use layer 0 numbers.
23  fillElements(0, m_gmt_mgr->Phi());
24  }
25 }
26 
27 void
29 {
31  int biStaveType = m_gmt_mgr->PixelBiStaveType(layer, phiSector);
32 
33  for (int i = 0; i < nentries; i++) {
34  // bistave number
35  // 0 means both staves in bistave the same
36  // 1 means odd bistave
37  // 2 means even bistave
38  // If 0 then keep for all staves otherwise keep if odd/even correspond
39  int cableBiStaveNum = m_gmt_mgr->PixelCableBiStaveNum(i);
41  if (!cableBiStaveNum || ((cableBiStaveNum%2) == biStaveType%2)) {
42  m_elements.push_back(i);
43  }
44  }
45  }
46 }
47 
48 
49 GeoVPhysVol* GeoPixelCable::Build() {
50 
51  if (m_currentElement < 0){
52  std::cout << "ERROR: GeoPixelCableCurrent, current element not set." << std::endl;
53  return nullptr;
54  }
55 
56 
57  int tableIndex = m_elements[m_currentElement];
58  //std::cout << "GeoPixelCable: " << m_currentElement << ", " << tableIndex << std::endl;
59 
60  double zstart = m_gmt_mgr->PixelCableZStart(tableIndex);
61  double zend = m_gmt_mgr->PixelCableZEnd(tableIndex);
62  double length = std::abs(zend - zstart);
63  double width = m_gmt_mgr->PixelCableWidth(tableIndex);
64  double thickness = m_gmt_mgr->PixelCableThickness(tableIndex);
65  double weight = m_gmt_mgr->PixelCableWeight(tableIndex);
66  std::string label = m_gmt_mgr->PixelCableLabel(tableIndex);
67 
68  std::string matName = m_gmt_mgr->getMaterialName("Cable", m_gmt_mgr->GetLD());
69  const GeoMaterial* cableMat = m_mat_mgr->getMaterial(matName);
70 
71  // If weight supplied use it to calculate the required thickness
72  // otherwise use the suppled thickness
73  if (weight != 0) {
74  thickness = weight / (cableMat->getDensity() * length * width);
75  }
76 
77  const GeoBox* cableBox = new GeoBox(0.5*thickness,0.5*width,0.5*length);
78  std::string logName = "Cable";
79  std::ostringstream o;
80  o << m_gmt_mgr->getLD_Label() << label;
81  logName = logName+o.str();
82  //std::cout << logName << ": " << weight/Gaudi::Units::g << " g, " << thickness << std::endl;
83 
84  GeoLogVol* theCable = new GeoLogVol(logName,cableBox,cableMat);
85  GeoPhysVol* cablePhys = new GeoPhysVol(theCable);
86  return cablePhys;
87 }
88 
89 
91 
92  int tableIndex = m_elements[m_currentElement];
93  double zstart = m_gmt_mgr->PixelCableZStart(tableIndex);
94  double zend = m_gmt_mgr->PixelCableZEnd(tableIndex);
95  return 0.5*(zend + zstart);
96 }
97 
99  int tableIndex = m_elements[m_currentElement];
100  return m_gmt_mgr->PixelCableStackOffset(tableIndex);
101 
102 }
103 
GeoPixelCable::zpos
double zpos()
Definition: GeoPixelCable.cxx:90
GeoPixelCable::m_elements
std::vector< int > m_elements
Definition: GeoPixelCable.h:26
GeoPixelCable::Build
virtual GeoVPhysVol * Build() override
Definition: GeoPixelCable.cxx:49
PixelGeometryManager::PixelCableZEnd
virtual double PixelCableZEnd(int index)=0
PixelGeometryManager
Definition: PixelGeometryManager.h:28
PixelGeometryManager::PixelCableStackOffset
virtual double PixelCableStackOffset(int index)=0
PlotCalibFromCool.label
label
Definition: PlotCalibFromCool.py:78
GeoPixelCable::fillElements
void fillElements(int layer, int phiSector)
Definition: GeoPixelCable.cxx:28
PixelGeometryManager::PixelCableLabel
virtual std::string PixelCableLabel(int index)=0
GeoPixelCable::m_currentElement
int m_currentElement
Definition: GeoPixelCable.h:25
GeoVPixelFactory::m_gmt_mgr
PixelGeometryManager * m_gmt_mgr
Definition: GeoVPixelFactory.h:43
dqt_zlumi_pandas.weight
int weight
Definition: dqt_zlumi_pandas.py:200
BchCleanup.mgr
mgr
Definition: BchCleanup.py:294
PixelGeometryManager::PixelBiStaveType
virtual int PixelBiStaveType(int layer, int phi)=0
PixelGeometryManager::PixelCableWidth
virtual double PixelCableWidth(int index)=0
PlotCalibFromCool.nentries
nentries
Definition: PlotCalibFromCool.py:798
lumiFormat.i
int i
Definition: lumiFormat.py:92
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
PixelGeometryManager::getLD_Label
virtual std::string getLD_Label()=0
PixelGeometryManager::PixelCableLayerNum
virtual int PixelCableLayerNum(int index)=0
PixelGeometryManager::PixelCableElements
virtual int PixelCableElements()=0
InDetDD::PixelDetectorManager
Definition: PixelDetectorManager.h:47
GeoVPixelFactory::m_mat_mgr
InDetMaterialManager * m_mat_mgr
Definition: GeoVPixelFactory.h:44
GeoPixelCable.h
Base_Fragment.width
width
Definition: Sherpa_i/share/common/Base_Fragment.py:59
PixelGeometryManager::PixelCableZStart
virtual double PixelCableZStart(int index)=0
PixelGeometryManager::PixelCableWeight
virtual double PixelCableWeight(int index)=0
GeoVPixelFactory
This is the base class for all the pieces of the Pixel detector.
Definition: GeoVPixelFactory.h:31
PixelGeometryManager::getMaterialName
virtual std::string getMaterialName(const std::string &volumeName, int layerdisk=0, int typenum=0)=0
PixelGeometryManager::PixelCableBiStaveNum
virtual int PixelCableBiStaveNum(int index)=0
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
GeoPixelCable::getStackOffset
double getStackOffset()
Definition: GeoPixelCable.cxx:98
length
double length(const pvec &v)
Definition: FPGATrackSimLLPDoubletHoughTransformTool.cxx:26
PixelGeometryManager::PixelCableThickness
virtual double PixelCableThickness(int index)=0
PixelGeometryManager::GetLD
virtual int GetLD()=0
PixelGeometryManager::Phi
virtual int Phi()=0
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:13