ATLAS Offline Software
GeoPixelPigtail.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 <utility>
6 
7 #include "GeoPixelPigtail.h"
8 #include "GeoModelKernel/GeoTubs.h"
9 #include "GeoModelKernel/GeoLogVol.h"
10 #include "GeoModelKernel/GeoPhysVol.h"
11 #include "GeoModelKernel/GeoMaterial.h"
12 #include "GeoModelKernel/GeoTransform.h"
13 
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 {
21 }
22 
23 GeoVPhysVol* GeoPixelPigtail::Build() {
24  //this block was originally in the c'tor
25  const GeoMaterial* air = m_mat_mgr->getMaterial("std::Air");
27  double rmin = m_gmt_mgr->PixelPigtailBendRMin();
28  double rmax = m_gmt_mgr->PixelPigtailBendRMax();
30  double dphi = m_gmt_mgr->PixelPigtailBendPhiMax() - phi;
32  double posZ = m_gmt_mgr->PixelPigtailPosZ();
33 
34  double rminEps = rmin-m_epsilon;
35  double rmaxEps = rmax+m_epsilon;
36  const GeoTubs* tubs = new GeoTubs(rminEps,rmaxEps,0.5*length,phi,dphi);
37  GeoLogVol * thePigtail = new GeoLogVol("PigtailCylEnv",tubs,air);
38  //
39  GeoPhysVol* pigtailPhys = new GeoPhysVol(thePigtail);
40  for (int iModule = 0; iModule<m_gmt_mgr->PixelNModule(); iModule++) {
41  int moduleEta = m_gmt_mgr->PixelModuleEtaFromIndex(iModule);
42  double zShift = m_gmt_mgr->PixelModuleZPosition(moduleEta);
43  std::string logName = "PigtailCyl";
44  const GeoTubs* tubs = new GeoTubs(rmin,rmax,0.5*width,phi,dphi);
45  std::string matName = m_gmt_mgr->getMaterialName("PigtailCyl", m_gmt_mgr->GetLD());
46  const GeoMaterial* cyliMat = m_mat_mgr->getMaterialForVolume(matName,tubs->volume());
47  GeoLogVol* theTubs = new GeoLogVol(logName,tubs,cyliMat);
48  GeoPhysVol* pigtailPart = new GeoPhysVol(theTubs);
49 
50  double zpos = posZ + zShift;
51  GeoTransform* xform = new GeoTransform(GeoTrf::TranslateZ3D(zpos));
52  pigtailPhys->add(xform);
53  pigtailPhys->add(pigtailPart);
54  }
55  return pigtailPhys;
56 }
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:67
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:14
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:23
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