ATLAS Offline Software
Loading...
Searching...
No Matches
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
23GeoVPhysVol* GeoPixelPigtail::Build() {
24 //this block was originally in the c'tor
25 const GeoMaterial* air = m_mat_mgr->getMaterial("std::Air");
26 double length = m_gmt_mgr->PixelPigtailEnvelopeLength()+m_epsilon;
27 double rmin = m_gmt_mgr->PixelPigtailBendRMin();
28 double rmax = m_gmt_mgr->PixelPigtailBendRMax();
29 double phi = m_gmt_mgr->PixelPigtailBendPhiMin();
30 double dphi = m_gmt_mgr->PixelPigtailBendPhiMax() - phi;
31 double width = m_gmt_mgr->PixelPigtailWidthZ();
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}
Scalar phi() const
phi method
double length(const pvec &v)
const double width
virtual GeoVPhysVol * Build() override
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)
const double m_epsilon
PixelGeometryManager * m_gmt_mgr
InDetMaterialManager * m_mat_mgr
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)
Dedicated detector manager extending the functionality of the SiDetectorManager with dedicated pixel ...
STL namespace.