114{
115
116
118 const GeoLogVol * cylinderLog =
new GeoLogVol(
getName(), cylinderShape,
m_materials->gasMaterial());
119 GeoPhysVol * cylinder = new GeoPhysVol(cylinderLog);
120
121
122
123
124
125
126
127
128
129
130
135 const GeoCons* coolingShape = new GeoCons(coolingRmin, coolingRmin, coolingRmax1, coolingRmax2,
137 -0.5 * coolingDPhi * Gaudi::Units::radian, coolingDPhi * Gaudi::Units::radian);
138 const GeoLogVol * coolingLog =
new GeoLogVol(
"CoolingPipe", coolingShape,
m_materials->getMaterialForVolume(
m_coolingMaterialName, coolingShape->volume()));
139 GeoPhysVol * coolingPipe = new GeoPhysVol(coolingLog);
140
141
146 const GeoCons* lmtShape =
new GeoCons(lmtRmin, lmtRmin, lmtRmax1, lmtRmax2, 0.5 *
m_length,
147 -0.5 * lmtDPhi * Gaudi::Units::radian, lmtDPhi * Gaudi::Units::radian);
149 GeoPhysVol * lmt = new GeoPhysVol(lmtLog);
150
151
152 double lmtCoolingRmin = lmtRmax2;
156 const GeoTubs* lmtCoolingShape = new GeoTubs(lmtCoolingRmin, lmtCoolingRmax, 0.5 * lmtLength,
157 -0.5 * lmtCoolingDPhi * Gaudi::Units::radian, lmtCoolingDPhi * Gaudi::Units::radian);
159 GeoPhysVol * lmtCooling = new GeoPhysVol(lmtCoolingLog);
160
161
166 const GeoCons* fibreShape =
new GeoCons(fibreRmin, fibreRmin, fibreRmax1, fibreRmax2, 0.5 *
m_length,
167 -0.5 * fibreDPhi * Gaudi::Units::radian, fibreDPhi * Gaudi::Units::radian);
169 GeoPhysVol * fibres = new GeoPhysVol(fibreLog);
170
171
175 const GeoTubs* nPipeShape =
new GeoTubs(nPipeRmin, nPipeRmax, 0.5 *
m_length,
176 -0.5 * nPipeDPhi * Gaudi::Units::radian, nPipeDPhi * Gaudi::Units::radian);
178 GeoPhysVol * nPipe = new GeoPhysVol(nPipeLog);
179
180
181 double railRmin = std::max(coolingRmax2, nPipeRmax);
184 const GeoTubs* railShape = new GeoTubs(railRmin, railRmax,
185 0.5 *
m_length, -0.5 * railDPhi * Gaudi::Units::radian, railDPhi * Gaudi::Units::radian);
187 GeoPhysVol * rail = new GeoPhysVol(railLog);
188
189
190 for (int iquad = 0; iquad < 4; iquad++) {
191
192
195 cylinder->add(new GeoTransform(GeoTrf::RotateZ3D(coolingAngle)));
196 cylinder->add(coolingPipe);
197 }
198
199
200 for (
unsigned int iLoc = 0; iLoc <
m_lmtLocAngle.size(); iLoc++) {
201 double lmtAngle =
m_lmtLocAngle[iLoc] + iquad * 90*Gaudi::Units::degree;
202 cylinder->add(new GeoTransform(GeoTrf::RotateZ3D(lmtAngle)));
203 cylinder->add(lmt);
204 cylinder->add(
new GeoTransform(GeoTrf::RotateZ3D(lmtAngle)*GeoTrf::TranslateZ3D(
m_lmtCoolingZOffset)));
205 cylinder->add(lmtCooling);
206 }
207
208
210 double fibreAngle =
m_fibreLocAngle[iLoc] + iquad * 90*Gaudi::Units::degree;
211 cylinder->add(new GeoTransform(GeoTrf::RotateZ3D(fibreAngle)));
212 cylinder->add(fibres);
213 }
214
215
217 double nPipeAngle =
m_nPipeLocAngle[iLoc] + iquad * 90*Gaudi::Units::degree;
218 cylinder->add(new GeoTransform(GeoTrf::RotateZ3D(nPipeAngle)));
219 cylinder->add(nPipe);
220 }
221
222
223 for (
unsigned int iLoc = 0; iLoc <
m_railLocAngle.size(); iLoc++) {
224 double railAngle =
m_railLocAngle[iLoc] + iquad * 90*Gaudi::Units::degree;
225 cylinder->add(new GeoTransform(GeoTrf::RotateZ3D(railAngle)));
226 cylinder->add(rail);
227 }
228
229 }
230
231 return cylinder;
232
233}
const std::string & getName() const
SCT_MaterialManager * m_materials
std::string m_nPipeMaterialName
std::vector< double > m_fibreLocAngle
std::vector< double > m_coolingLocAngle
std::string m_lmtMaterialName
std::string m_fibreMaterialName
std::vector< double > m_railLocAngle
double m_lmtCoolingZOffset
std::string m_lmtCoolingMaterialName
std::string m_coolingMaterialName
std::vector< double > m_nPipeLocAngle
double m_lmtCoolingDeltaR
std::vector< double > m_lmtLocAngle
std::string m_railMaterialName