ATLAS Offline Software
Loading...
Searching...
No Matches
MuonGM::Spacer Class Reference

#include <Spacer.h>

Inheritance diagram for MuonGM::Spacer:
Collaboration diagram for MuonGM::Spacer:

Public Member Functions

 Spacer (const MYSQL &mysql, Component *s)
GeoVPhysVol * build (StoredMaterialManager &matManager)
GeoVPhysVol * build (StoredMaterialManager &matManager, int cutoutson)
virtual void print () const override
void setLogVolName (const std::string &str)

Public Attributes

double width {0.}
double length {0.}
double thickness {0.}
double longWidth {0.}
std::string name {}
std::string logVolName {}

Private Attributes

SpaComponent m_component {}

Detailed Description

Constructor & Destructor Documentation

◆ Spacer()

MuonGM::Spacer::Spacer ( const MYSQL & mysql,
Component * s )

Member Function Documentation

◆ build() [1/2]

GeoVPhysVol * MuonGM::Spacer::build ( StoredMaterialManager & matManager)

Definition at line 43 of file MuonSpectrometer/MuonDetDescr/MuonGeoModel/src/Spacer.cxx.

43 {
44 int cutoutson = 0;
45 return build(matManager, cutoutson);
46 }
GeoVPhysVol * build(StoredMaterialManager &matManager)

◆ build() [2/2]

GeoVPhysVol * MuonGM::Spacer::build ( StoredMaterialManager & matManager,
int cutoutson )

Definition at line 48 of file MuonSpectrometer/MuonDetDescr/MuonGeoModel/src/Spacer.cxx.

48 {
49 if (name == "SPA06" || name == "SPA01") {
50 double excent = m_component.excent;
51 double maxwLength = m_component.maxwdy;
52
53 const GeoShape *strd = new GeoTrd(thickness / 2., thickness / 2., width / 2., longWidth / 2., maxwLength / 2.);
54 double upWidth = 0.;
55 if (excent > length)
56 upWidth = longWidth * (excent - length) / (excent - maxwLength);
57
58 if (excent > length && (length - maxwLength) > 0) {
59 // std::cout<<" Here is an exagonal SPA ***** named "<<name<<" excent = "
60 // <<excent<<" length = "<<length<<std::endl;
61 GeoTrd *upTrd = new GeoTrd(thickness / 2., thickness / 2., longWidth / 2., upWidth / 2., (length - maxwLength) / 2.);
62 strd = &((strd->add((*upTrd) << GeoTrf::TranslateZ3D(length / 2.))) << GeoTrf::TranslateZ3D((maxwLength - length) / 2.));
63 }
64
65 const GeoMaterial *mtrd = matManager.getMaterial("std::Aluminium");
66 const GeoLogVol *lspa = new GeoLogVol("CSCspacer", strd, mtrd);
67 GeoPhysVol *pspa = new GeoPhysVol(lspa);
68 return pspa;
69
70 } else {
71 const GeoShape *strd = new GeoTrd(thickness / 2, thickness / 2, width / 2, longWidth / 2, length / 2);
72 const GeoMaterial *mtrd = matManager.getMaterial("std::Air");
73 GeoLogVol *ltrd = new GeoLogVol("Spacer", strd, mtrd);
74 GeoPhysVol *ptrd = new GeoPhysVol(ltrd);
75
76 double tckibeam = thickness / 5.;
77 double dx = tckibeam;
78 double dy = 3. * tckibeam;
79
80 GeoVPhysVol *ptrdtemp = nullptr;
81
82 GeoTrd *strd1 = new GeoTrd(dx / 2, dx / 2, dy / 2, dy / 2, length / 2);
83 const GeoMaterial *mtrd1 = matManager.getMaterial("std::Aluminium");
84 GeoLogVol *ltrd1 = new GeoLogVol("ibeam1", strd1, mtrd1);
85 GeoPhysVol *ptrd1 = new GeoPhysVol(ltrd1);
86
87 GeoTrd *strd2 = new GeoTrd(dy / 2, dy / 2, dx / 2, dx / 2, length / 2);
88 const GeoMaterial *mtrd2 = matManager.getMaterial("std::Aluminium");
89 GeoLogVol *ltrd2 = new GeoLogVol("ibeam2", strd2, mtrd2);
90 GeoPhysVol *ptrd2 = new GeoPhysVol(ltrd2);
91
92 GeoSerialDenominator *sd = new GeoSerialDenominator(name + " ibeam");
93 if (!skip_spacer) {
94 ptrd->add(sd);
95 ptrd->add(new GeoSerialIdentifier(0));
96 }
97
98 double newpos = -thickness / 2.;
99 double wherepos = newpos;
100 double wherewidth = -width / 2.;
101 for (int j = 0; j < 3; j++) {
102 for (int i = 0; i < 3; i++) {
103 ptrdtemp = ptrd1;
104 if (i == 1) {
105 ptrdtemp = ptrd2;
106 tckibeam = dy;
107 }
108 GeoTransform *xf = new GeoTransform(GeoTrf::Translate3D(wherepos + tckibeam / 2, wherewidth + dy / 2, 0));
109 if (!skip_spacer) {
110 ptrd->add(xf);
111 ptrd->add(ptrdtemp);
112 }
113 wherepos += tckibeam;
114 tckibeam = dx;
115 }
116 wherepos -= thickness;
117 wherewidth += (width / 2. - dy / 2.);
118 }
119
120 double vtubl = (width - 5 * tckibeam) / 2.;
121
122 GeoSerialDenominator *ntube = new GeoSerialDenominator(name + " vbeam");
123 if (!skip_spacer) {
124 ptrd->add(ntube);
125 ptrd->add(new GeoSerialIdentifier(0));
126 }
127
128 for (int k1 = 0; k1 < 2; k1++) {
129 for (int k = 0; k < 2; k++) {
130 GeoTransform *ttube = new GeoTransform(GeoTrf::RotateX3D(-90 * Gaudi::Units::deg) *
131 GeoTrf::Translate3D(0., -(vtubl + tckibeam) / 2. - (k - 1) * (vtubl + tckibeam), -length / 4. - (k1 - 1) * length / 2));
132 if (!skip_spacer)
133 ptrd->add(ttube);
134 }
135 }
136
137 return ptrd;
138 }
139 }
virtual const GeoMaterial * getMaterial(const std::string &name)=0

◆ print()

void MuonGM::Spacer::print ( ) const
overridevirtual

Implements MuonGM::DetectorElement.

Definition at line 141 of file MuonSpectrometer/MuonDetDescr/MuonGeoModel/src/Spacer.cxx.

141 {
142 MsgStream log(Athena::getMessageSvc(), "MuGM:MuonChamber:Spacer");
143 log << MSG::INFO << "Spacer " << name << " :" << endmsg;
144 }
#define endmsg
IMessageSvc * getMessageSvc(bool quiet=false)

◆ setLogVolName()

void MuonGM::DetectorElement::setLogVolName ( const std::string & str)
inlineinherited

Member Data Documentation

◆ length

double MuonGM::Spacer::length {0.}

◆ logVolName

std::string MuonGM::DetectorElement::logVolName {}
inherited

Definition at line 18 of file DetectorElement.h.

18{};

◆ longWidth

double MuonGM::Spacer::longWidth {0.}

Definition at line 22 of file MuonSpectrometer/MuonDetDescr/MuonGeoModel/MuonGeoModel/Spacer.h.

22{0.}; // for trapezoidal layers

◆ m_component

SpaComponent MuonGM::Spacer::m_component {}
private

◆ name

std::string MuonGM::DetectorElement::name {}
inherited

Definition at line 17 of file DetectorElement.h.

17{};

◆ thickness

double MuonGM::Spacer::thickness {0.}

◆ width

double MuonGM::Spacer::width {0.}

The documentation for this class was generated from the following files: