ATLAS Offline Software
GeoPixelPigtail.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 "GeoPixelPigtail.h"
6 #include "GeoModelKernel/GeoTubs.h"
7 #include "GeoModelKernel/GeoLogVol.h"
8 #include "GeoModelKernel/GeoPhysVol.h"
9 #include "GeoModelKernel/GeoMaterial.h"
10 #include "GeoModelKernel/GeoTransform.h"
11 
14  GeoModelIO::ReadGeoModel* sqliteReader,
15  std::shared_ptr<std::map<std::string, GeoFullPhysVol*>> mapFPV,
16  std::shared_ptr<std::map<std::string, GeoAlignableTransform*>> mapAX)
17  : GeoVPixelFactory (ddmgr, mgr, sqliteReader, mapFPV, mapAX)
18 {
19 }
20 
21 GeoVPhysVol* GeoPixelPigtail::Build() {
22  //this block was originally in the c'tor
23  const GeoMaterial* air = m_mat_mgr->getMaterial("std::Air");
25  double rmin = m_gmt_mgr->PixelPigtailBendRMin();
26  double rmax = m_gmt_mgr->PixelPigtailBendRMax();
28  double dphi = m_gmt_mgr->PixelPigtailBendPhiMax() - phi;
30  double posZ = m_gmt_mgr->PixelPigtailPosZ();
31 
32  double rminEps = rmin-m_epsilon;
33  double rmaxEps = rmax+m_epsilon;
34  const GeoTubs* tubs = new GeoTubs(rminEps,rmaxEps,0.5*length,phi,dphi);
35  GeoLogVol * thePigtail = new GeoLogVol("PigtailCylEnv",tubs,air);
36  //
37  GeoPhysVol* pigtailPhys = new GeoPhysVol(thePigtail);
38  for (int iModule = 0; iModule<m_gmt_mgr->PixelNModule(); iModule++) {
39  int moduleEta = m_gmt_mgr->PixelModuleEtaFromIndex(iModule);
40  double zShift = m_gmt_mgr->PixelModuleZPosition(moduleEta);
41  std::string logName = "PigtailCyl";
42  const GeoTubs* tubs = new GeoTubs(rmin,rmax,0.5*width,phi,dphi);
43  std::string matName = m_gmt_mgr->getMaterialName("PigtailCyl", m_gmt_mgr->GetLD());
44  const GeoMaterial* cyliMat = m_mat_mgr->getMaterialForVolume(matName,tubs->volume());
45  GeoLogVol* theTubs = new GeoLogVol(logName,tubs,cyliMat);
46  GeoPhysVol* pigtailPart = new GeoPhysVol(theTubs);
47 
48  double zpos = posZ + zShift;
49  GeoTransform* xform = new GeoTransform(GeoTrf::TranslateZ3D(zpos));
50  pigtailPhys->add(xform);
51  pigtailPhys->add(pigtailPart);
52  }
53  return pigtailPhys;
54 }
PixelGeometryManager::PixelPigtailBendPhiMin
virtual double PixelPigtailBendPhiMin()=0
PixelGeometryManager::PixelPigtailBendRMax
virtual double PixelPigtailBendRMax()=0
PixelGeometryManager::PixelPigtailEnvelopeLength
virtual double PixelPigtailEnvelopeLength()=0
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
PixelGeometryManager
Definition: PixelGeometryManager.h:28
PixelGeometryManager::PixelPigtailWidthZ
virtual double PixelPigtailWidthZ()=0
PixelGeometryManager::PixelPigtailBendRMin
virtual double PixelPigtailBendRMin()=0
GeoVPixelFactory::m_gmt_mgr
PixelGeometryManager * m_gmt_mgr
Definition: GeoVPixelFactory.h:43
PixelGeometryManager::PixelModuleEtaFromIndex
virtual int PixelModuleEtaFromIndex(int index)=0
BchCleanup.mgr
mgr
Definition: BchCleanup.py:294
PixelGeometryManager::PixelPigtailBendPhiMax
virtual double PixelPigtailBendPhiMax()=0
beamspotman.posZ
posZ
Definition: beamspotman.py:1624
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
GeoPixelPigtail.h
PixelGeometryManager::PixelNModule
virtual int PixelNModule()=0
InDetDD::PixelDetectorManager
Definition: PixelDetectorManager.h:47
GeoVPixelFactory::m_epsilon
const double m_epsilon
Definition: GeoVPixelFactory.h:49
GeoVPixelFactory::m_mat_mgr
InDetMaterialManager * m_mat_mgr
Definition: GeoVPixelFactory.h:44
GeoPixelPigtail::GeoPixelPigtail
GeoPixelPigtail(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: GeoPixelPigtail.cxx:12
PixelGeometryManager::PixelPigtailPosZ
virtual double PixelPigtailPosZ()=0
Base_Fragment.width
width
Definition: Sherpa_i/share/common/Base_Fragment.py:59
GeoVPixelFactory
This is the base class for all the pieces of the Pixel detector.
Definition: GeoVPixelFactory.h:31
GeoPixelPigtail::Build
virtual GeoVPhysVol * Build() override
Definition: GeoPixelPigtail.cxx:21
PixelGeometryManager::getMaterialName
virtual std::string getMaterialName(const std::string &volumeName, int layerdisk=0, int typenum=0)=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
length
double length(const pvec &v)
Definition: FPGATrackSimLLPDoubletHoughTransformTool.cxx:26
PixelGeometryManager::PixelModuleZPosition
virtual double PixelModuleZPosition(int)=0
PixelGeometryManager::GetLD
virtual int GetLD()=0