Function to actually create the geometry, has to be overridden by derived classes.
66 double pillar_height = 61.9 * CLHEP::cm / 2.;
67 double pillar_length = 3. * CLHEP::cm;
68 double pillar_width = pillar_length;
69 G4VSolid* s_bppillar =
new G4Box(
"s_bppillar", pillar_length, pillar_height, pillar_width);
71 G4VisAttributes* white =
new G4VisAttributes(G4Colour(1, 1, 1));
72 white->SetForceAuxEdgeVisible(
true);
73 l_bppillar->SetVisAttributes(white);
74 double y_offset = -76. * CLHEP::cm + pillar_height;
75 G4ThreeVector Pillarpos = G4ThreeVector(0, y_offset, -154.0 * CLHEP::cm);
76 new G4PVPlacement(0, Pillarpos, l_bppillar,
"p_bppilar1", &topVolume,
false, 1);
77 Pillarpos = G4ThreeVector(0, y_offset, 154.0 * CLHEP::cm);
78 new G4PVPlacement(0, Pillarpos, l_bppillar,
"p_bppilar2", &topVolume,
false, 1);
79 Pillarpos = G4ThreeVector(11.4175236299 * CLHEP::cm, y_offset, -227.758203051 * CLHEP::cm);
80 new G4PVPlacement(0, Pillarpos, l_bppillar,
"p_bppilar3", &topVolume,
false, 1);
81 Pillarpos = G4ThreeVector(-10.4976636985 * CLHEP::cm, y_offset, 227.758203051 * CLHEP::cm);
82 new G4PVPlacement(0, Pillarpos, l_bppillar,
"p_bppilar4", &topVolume,
false, 1);
83 Pillarpos = G4ThreeVector(-8.71250756316 * CLHEP::cm , y_offset, -209.819190072 * CLHEP::cm);
84 new G4PVPlacement(0, Pillarpos, l_bppillar,
"p_bppilar5", &topVolume,
false, 1);
85 Pillarpos = G4ThreeVector(8.71248973173 * CLHEP::cm, y_offset, 209.819190072 * CLHEP::cm);
86 new G4PVPlacement(0, Pillarpos, l_bppillar,
"p_bppilar6", &topVolume,
false, 1);
89 double x_reih = 2. * CLHEP::cm / 2.;
90 double y_reih = 2.3 * CLHEP::cm / 2.;
91 double z_reih = 48. * CLHEP::cm / 2.;
92 G4VSolid* s_reih =
new G4Box(
"s_reih", x_reih, y_reih, z_reih);
94 l_reih->SetVisAttributes(white);
95 G4ThreeVector Reihpos = G4ThreeVector(72.8780869619 * CLHEP::mm, 0, 1.35841468498 * CLHEP::mm);
96 new G4PVPlacement(0, Reihpos, l_reih,
"p_Reih1", &topVolume,
false, 1);
97 Reihpos = G4ThreeVector(-72.8780869619 * CLHEP::mm, 0, 1.35841468498 * CLHEP::mm);
98 new G4PVPlacement(0, Reihpos, l_reih,
"p_Reih2", &topVolume,
false, 1);
100 double x_reiv = 2. * CLHEP::cm / 2.;
101 double y_reiv = 5.2 * CLHEP::cm / 2.;
102 double z_reiv = 140. * CLHEP::cm / 2.;
103 G4VSolid* s_reiv =
new G4Box(
"s_reiv", x_reiv, y_reiv, z_reiv);
105 l_reiv->SetVisAttributes(white);
107 G4ThreeVector Reivpos = G4ThreeVector(0, -83.0 * CLHEP::mm, 0);
108 new G4PVPlacement(0, Reivpos, l_reiv,
"p_Reiv1", &topVolume,
false, 1);
110 Reivpos = G4ThreeVector(0, 83.0 * CLHEP::mm, 0);
111 new G4PVPlacement(0, Reivpos, l_reiv,
"p_Reiv2", &topVolume,
false, 1);
122 double stepSize = content.getLength(
"stepSize", 5 * CLHEP::um);
124 double stepMax = 50. *CLHEP::mm;
126 bool flag_limitStep =
false;
130 double SafetyLength = 0.1 * CLHEP ::cm;
132 double xpipe_hz1 = content.getLength(
"xpipe_hz1") * CLHEP::cm;
133 double pipe_hz = content.getLength(
"pipe_hz") * CLHEP::cm;
134 double pipe_outerRadius_x = content.getLength(
"pipe_outerRadius_x") * CLHEP::cm;
135 double pipe_outerRadius_y = content.getLength(
"pipe_outerRadius_y") * CLHEP::cm;
136 double pipe_innerRadius_x = content.getLength(
"pipe_innerRadius_x") * CLHEP::cm;
137 double pipe_innerRadius_y = content.getLength(
"pipe_innerRadius_y") * CLHEP::cm;
138 double xpipe_innerRadius = content.getLength(
"xpipe_innerRadius") * CLHEP::cm;
139 double xpipe_outerRadius = content.getLength(
"xpipe_outerRadius") * CLHEP::cm;
140 double pipe_innerRadiusTiN_x = content.getLength(
"pipe_innerRadiusTiN_x") * CLHEP::cm;
141 double pipe_innerRadiusTiN_y = content.getLength(
"pipe_innerRadiusTiN_y") * CLHEP::cm;
142 double xpipe_innerRadiusTiN = content.getLength(
"xpipe_innerRadiusTiN") * CLHEP::cm;
143 double endcap_hz = content.getLength(
"endcap_hz") * CLHEP::cm;
144 double endcap_outerRadius = content.getLength(
"endcap_outerRadius") * CLHEP::cm;
145 double xpipePOS_hz = content.getLength(
"xpipePOS_hz") * CLHEP::cm;
146 double xpipeMIN_hz = content.getLength(
"xpipeMIN_hz") * CLHEP::cm;
149 double startAngle = 0.*CLHEP::deg;
150 double spanningAngle = 360.*CLHEP::deg;
151 double A1 = 0.0415 * CLHEP::rad;
153 double OBtemp = sqrt(pow(xpipe_hz1, 2) + pow(xpipe_innerRadius / 2., 2));
155 double BCtemp = OBtemp * sin(A1);
157 double ABtemp = sqrt(pow(pipe_hz, 2) + pow(OBtemp, 2) - 2 * pipe_hz * OBtemp * cos(A1));
159 double A2 = asin(BCtemp / ABtemp) * CLHEP::rad;
161 double xpipe_hz = ABtemp - 2 * endcap_hz / cos(A2);
163 double xcont2 = BCtemp + xpipe_outerRadius;
164 double xcont1 = xpipe_outerRadius + 2 * endcap_hz * tan(A2);
165 double xcont3 = xcont2 + xpipePOS_hz * sin(A1);
166 double xcont4 = xcont3 - 2 * xpipe_outerRadius;
167 double xcont5 = xcont2 - 2 * xpipe_outerRadius;
168 double xcont3M = xcont2 + xpipeMIN_hz * sin(A1);
169 double xcont4M = xcont3M - 2 * xpipe_outerRadius;
173 double dxtr = 0.5 * (ABtemp + 2 * endcap_hz / cos(A2)) * sin(2 * A2);
174 double dztr = (ABtemp + 2 * endcap_hz / cos(A2)) * sin(A2) * sin(A2);
177 string matPipe = content.getString(
"MaterialPipe");
178 string matTiN = content.getString(
"MaterialTiN");
179 string vacPipe = content.getString(
"MatVacuum");
180 G4double tubinR = 0.0 * CLHEP::cm;
182 G4VSolid* s_PH1BPIPE =
new G4EllipticalTube(
"s_PH1BPIPE",
186 G4LogicalVolume* l_PH1BPIPE =
new G4LogicalVolume(s_PH1BPIPE,
geometry::Materials::get(matPipe),
"l_PH1BPIPE", 0, 0);
188 l_PH1BPIPE->SetUserLimits(
new G4UserLimits(stepSize));
190 G4ThreeVector PH1BPIPEpos = G4ThreeVector(
191 content.getLength(
"x_ph1bpipe") * CLHEP::cm,
192 content.getLength(
"y_ph1bpipe") * CLHEP::cm,
193 content.getLength(
"z_ph1bpipe") * CLHEP::cm
195 new G4PVPlacement(0, PH1BPIPEpos, l_PH1BPIPE,
"p_PH1BPIPE", &topVolume,
false, 0);
197 G4VSolid* s_PH1BPIPETiN =
new G4EllipticalTube(
"s_PH1BPIPETiN",
201 G4LogicalVolume* l_PH1BPIPETiN =
new G4LogicalVolume(s_PH1BPIPETiN,
geometry::Materials::get(matTiN),
"l_PH1BPIPETiN", 0, 0);
202 new G4PVPlacement(0, PH1BPIPEpos, l_PH1BPIPETiN,
"p_PH1BPIPETiN", l_PH1BPIPE ,
false, 0);
204 G4VSolid* s_PH1BPIPEV =
new G4EllipticalTube(
"s_PH1BPIPEV",
205 pipe_innerRadiusTiN_x,
206 pipe_innerRadiusTiN_y,
208 G4VSolid* s_PH1BPIPEVac =
new G4IntersectionSolid(
"s_PH1BPIPEVac", s_PH1BPIPE, s_PH1BPIPEV);
209 G4LogicalVolume* l_PH1BPIPEVac =
new G4LogicalVolume(s_PH1BPIPEVac,
geometry::Materials::get(vacPipe),
"l_PH1BPIPEVac", 0, 0);
210 if (flag_limitStep) l_PH1BPIPEVac->SetUserLimits(
new G4UserLimits(stepMax));
211 new G4PVPlacement(0, PH1BPIPEpos, l_PH1BPIPEVac,
"p_PH1BPIPEVac", l_PH1BPIPETiN ,
false, 0);
214 G4VSolid* s_PH1BPIPEendcap =
new G4Tubs(
"s_PH1BPIPEendcap", 0.,
217 startAngle, spanningAngle);
219 "l_PH1BPIPEendcapTop", 0, 0);
221 "l_PH1BPIPEendcapBot", 0, 0);
223 G4ThreeVector PH1BPIPEendcapposTop = G4ThreeVector(
224 content.getLength(
"x_ph1bpipe") * CLHEP::cm,
225 content.getLength(
"y_ph1bpipe") * CLHEP::cm,
226 content.getLength(
"z_ph1bpipe") * CLHEP::cm + pipe_hz + endcap_hz
229 G4ThreeVector PH1BPIPEendcapposBot = G4ThreeVector(
230 content.getLength(
"x_ph1bpipe") * CLHEP::cm,
231 content.getLength(
"y_ph1bpipe") * CLHEP::cm,
232 content.getLength(
"z_ph1bpipe") * CLHEP::cm - pipe_hz - endcap_hz
234 new G4PVPlacement(0, PH1BPIPEendcapposTop, l_PH1BPIPEendcapTop,
"p_PH1BPIPEendcapTop", &topVolume,
false, 0);
235 new G4PVPlacement(0, PH1BPIPEendcapposBot, l_PH1BPIPEendcapBot,
"p_PH1BPIPEendcapBot", &topVolume,
false, 0);
237 G4VSolid* s_PH1BPIPEendcapTiN =
new G4EllipticalTube(
"s_PH1BPIPEendcapTiN",
241 G4LogicalVolume* l_PH1BPIPEendcapTiNTop =
new G4LogicalVolume(s_PH1BPIPEendcapTiN,
geometry::Materials::get(matTiN),
242 "l_PH1BPIPEendcapTiNTop", 0, 0);
243 G4LogicalVolume* l_PH1BPIPEendcapTiNBot =
new G4LogicalVolume(s_PH1BPIPEendcapTiN,
geometry::Materials::get(matTiN),
244 "l_PH1BPIPEendcapTiNBot", 0, 0);
245 new G4PVPlacement(0, G4ThreeVector(0., 0., 0.), l_PH1BPIPEendcapTiNTop,
"p_PH1BPIPEendcapTiNTop", l_PH1BPIPEendcapTop ,
false, 0);
246 new G4PVPlacement(0, G4ThreeVector(0., 0., 0.), l_PH1BPIPEendcapTiNBot,
"p_PH1BPIPEendcapTiNBot", l_PH1BPIPEendcapBot ,
false, 0);
248 G4VSolid* s_PH1BPIPEendcapV =
new G4EllipticalTube(
"s_PH1BPIPEendcapV",
249 pipe_innerRadiusTiN_x,
250 pipe_innerRadiusTiN_y,
252 G4VSolid* s_PH1BPIPEendcapVac =
new G4IntersectionSolid(
"s_PH1BPIPEendcapVac", s_PH1BPIPEendcap , s_PH1BPIPEendcapV);
254 "l_PH1BPIPEendcapVac", 0, 0);
255 if (flag_limitStep) l_PH1BPIPEendcapVac->SetUserLimits(
new G4UserLimits(stepMax));
256 new G4PVPlacement(0, G4ThreeVector(0., 0., 0.), l_PH1BPIPEendcapVac,
"p_PH1BPIPEendcapVacTop", l_PH1BPIPEendcapTiNTop,
false, 0);
257 new G4PVPlacement(0, G4ThreeVector(0., 0., 0.), l_PH1BPIPEendcapVac,
"p_PH1BPIPEendcapVacBot", l_PH1BPIPEendcapTiNBot,
false, 0);
261 G4VSolid* AluCont_f =
new G4Trd(
"AluCont_f", xcont1, xcont2, xcont1, xcont1, xpipe_hz / 2.0 * cos(A2));
262 G4LogicalVolume* logi_AluCont_f =
new G4LogicalVolume(AluCont_f,
geometry::Materials::get(matPipe),
"logi_AluCont_f", 0 , 0);
263 new G4PVPlacement(0, G4ThreeVector(0, 0, pipe_hz + endcap_hz * 2.0 + 0.5 * xpipe_hz * cos(A2)),
264 logi_AluCont_f,
"phys_AluCont_f", &topVolume,
false, 0);
269 G4VSolid* s_Xshapef_11 =
new G4Tubs(
"s_Xshapef_11",
273 startAngle, spanningAngle);
274 G4VSolid* s_Xshapef_12 =
new G4Tubs(
"s_Xshapef_12",
276 xpipe_innerRadius * 2.0,
278 startAngle, spanningAngle);
279 G4VSolid* s_Xshapef_21 =
new G4Tubs(
"s_Xshapef_21",
281 xpipe_innerRadiusTiN,
283 startAngle, spanningAngle);
284 G4VSolid* s_Xshapef_22 =
new G4Tubs(
"s_Xshapef_22",
286 xpipe_innerRadiusTiN * 2.0,
288 startAngle, spanningAngle);
291 G4VSolid* s_XshapefTiN_11 =
new G4Tubs(
"s_XshapefTiN_11",
295 startAngle, spanningAngle);
296 G4VSolid* s_XshapefTiN_12 =
new G4Tubs(
"s_XshapefTiN_12",
298 xpipe_innerRadius * 2.0,
300 startAngle, spanningAngle);
301 G4VSolid* s_XshapefTiN_21 =
new G4Tubs(
"s_XshapefTiN_21",
305 startAngle, spanningAngle);
306 G4VSolid* s_XshapefTiN_22 =
new G4Tubs(
"s_XshapefTiN_22",
308 xpipe_innerRadius * 2.0,
310 startAngle, spanningAngle);
312 G4Transform3D transform_sXshapef_12 = G4Translate3D(0., 0., 0.);
313 transform_sXshapef_12 = transform_sXshapef_12 * G4RotateY3D(-A2);
314 G4IntersectionSolid* Xshapef1 =
new G4IntersectionSolid(
"Xshapef1", s_Xshapef_11, s_Xshapef_12, transform_sXshapef_12);
316 G4Transform3D transform_sXshapef_22 = G4Translate3D(0., 0., 0.);
317 transform_sXshapef_22 = transform_sXshapef_22 * G4RotateY3D(A2);
318 G4IntersectionSolid* Xshapef2 =
new G4IntersectionSolid(
"Xshapef2", s_Xshapef_21, s_Xshapef_22, transform_sXshapef_22);
320 G4Transform3D transform_sXshapefTiN_12 = G4Translate3D(0., 0., 0.);
321 transform_sXshapefTiN_12 = transform_sXshapefTiN_12 * G4RotateY3D(-A2);
322 G4IntersectionSolid* XshapefTiN1 =
new G4IntersectionSolid(
"XshapefTiN1", s_XshapefTiN_11, s_XshapefTiN_12,
323 transform_sXshapefTiN_12);
325 G4Transform3D transform_sXshapefTiN_22 = G4Translate3D(0., 0., 0.);
326 transform_sXshapefTiN_22 = transform_sXshapefTiN_22 * G4RotateY3D(A2);
327 G4IntersectionSolid* XshapefTiN2 =
new G4IntersectionSolid(
"XshapefTiN2", s_XshapefTiN_21, s_XshapefTiN_22,
328 transform_sXshapefTiN_22);
331 G4Transform3D transform_XshapefTiN1 = G4Translate3D(dxtr, 0. , -dztr);
332 transform_XshapefTiN1 = transform_XshapefTiN1 * G4RotateY3D(2.*A2);
333 G4UnionSolid* XshapeTiNForwx =
new G4UnionSolid(
"XshapeTiNForwx", XshapefTiN2 , XshapefTiN1 , transform_XshapefTiN1);
335 G4RotationMatrix* yRot =
new G4RotationMatrix;
337 G4ThreeVector transform_XshapeTiNForwx(-dxtr / 2., 0., 0.);
338 G4IntersectionSolid* XshapeTiNForw =
new G4IntersectionSolid(
"XshapeTiNForw", AluCont_f, XshapeTiNForwx, yRot,
339 transform_XshapeTiNForwx);
340 G4LogicalVolume* l_XshapeTiNForw =
new G4LogicalVolume(XshapeTiNForw,
geometry::Materials::get(matTiN),
"l_XshapeTiNForw", 0 , 0);
341 new G4PVPlacement(0, G4ThreeVector(0., 0., 0.), l_XshapeTiNForw,
"p_XshapeTiNForw", logi_AluCont_f ,
false, 0);
344 G4Transform3D transform_Xshapef1 = G4Translate3D(dxtr , 0. , -dztr);
345 transform_Xshapef1 = transform_Xshapef1 * G4RotateY3D(2.*A2);
346 G4UnionSolid* XshapeForwx =
new G4UnionSolid(
"XshapeForwx", Xshapef2 , Xshapef1 , transform_Xshapef1);
348 G4Transform3D transform_XshapeForwx = G4Translate3D(-dxtr / 2., 0., 0.);
349 transform_XshapeForwx = transform_XshapeForwx * G4RotateY3D(-A2);
350 G4IntersectionSolid* XshapeForw =
new G4IntersectionSolid(
"XshapeForw", AluCont_f, XshapeForwx, transform_XshapeForwx);
351 G4LogicalVolume* l_XshapeForw =
new G4LogicalVolume(XshapeForw,
geometry::Materials::get(vacPipe),
"l_XshapeForw", 0 , 0);
352 if (flag_limitStep) l_XshapeForw ->SetUserLimits(
new G4UserLimits(stepMax));
353 new G4PVPlacement(0, G4ThreeVector(0., 0., 0.), l_XshapeForw,
"p_XshapeForw", l_XshapeTiNForw ,
false, 0);
357 G4VSolid* AluCont_fpO =
new G4Trd(
"AluCont_fpO", xcont2, xcont3, xcont1, xcont1, xpipePOS_hz / 2.0 * cos(A1));
358 G4VSolid* AluCont_fps =
new G4Trd(
"AluCont_fps", xcont5, xcont4, xcont1, xcont1, xpipePOS_hz / 2.0 * cos(A1));
359 G4Transform3D transform_AluCont_fps = G4Translate3D(0., 0., 0.);
360 G4SubtractionSolid* AluCont_fp =
new G4SubtractionSolid(
"AluCont_fp", AluCont_fpO, AluCont_fps, transform_AluCont_fps);
361 G4LogicalVolume* logi_AluCont_fp =
new G4LogicalVolume(AluCont_fp,
geometry::Materials::get(matPipe),
"logi_AluCont_fp", 0 , 0);
362 new G4PVPlacement(0, G4ThreeVector(0, 0, pipe_hz + endcap_hz * 2.0 + xpipe_hz * cos(A2) + xpipePOS_hz / 2.0 * cos(A1)),
363 logi_AluCont_fp,
"phys_AluCont_fp", &topVolume,
false, 0);
366 G4VSolid* s_XshapefPOS_11 =
new G4Tubs(
"s_XshapefPOS11",
370 startAngle, spanningAngle);
371 G4VSolid* s_XshapefPOS_12 =
new G4Tubs(
"s_XshapefPOS12",
373 xpipe_innerRadius * 2,
374 xpipePOS_hz / 2. - 0.7568202457 * SafetyLength,
375 startAngle, spanningAngle);
376 G4Transform3D transform_sXshapefPOS_12 = G4Translate3D(0., 0., 0.);
377 transform_sXshapefPOS_12 = transform_sXshapefPOS_12 * G4RotateY3D(-A1);
378 G4IntersectionSolid* XshapefPOS1 =
new G4IntersectionSolid(
"XshapefPOS1", s_XshapefPOS_11, s_XshapefPOS_12,
379 transform_sXshapefPOS_12);
381 G4LogicalVolume* l_XshapefPOS1 =
new G4LogicalVolume(XshapefPOS1,
geometry::Materials::get(vacPipe),
"l_XshapefPOS1", 0 , 0);
382 if (flag_limitStep) l_XshapefPOS1 ->SetUserLimits(
new G4UserLimits(stepMax));
383 G4RotationMatrix* yRotP =
new G4RotationMatrix;
385 new G4PVPlacement(yRotP, G4ThreeVector(2 * endcap_hz * tan(A2) + xpipe_hz * sin(A2) + xpipePOS_hz / 2.*sin(A1), 0., 0.),
386 l_XshapefPOS1 ,
"p_XshapefPOS1", logi_AluCont_fp,
false, 0);
389 G4VSolid* s_XshapefPOS_21 =
new G4Tubs(
"s_XshapefPOS21",
393 startAngle, spanningAngle);
394 G4VSolid* s_XshapefPOS_22 =
new G4Tubs(
"s_XshapefPOS22",
396 xpipe_innerRadius * 2,
397 xpipePOS_hz / 2. - 0.7568202457 * SafetyLength,
398 startAngle, spanningAngle);
399 G4Transform3D transform_sXshapefPOS_22 = G4Translate3D(0., 0., 0.);
400 transform_sXshapefPOS_22 = transform_sXshapefPOS_22 * G4RotateY3D(A1);
401 G4IntersectionSolid* XshapefPOS2 =
new G4IntersectionSolid(
"XshapefPOS2", s_XshapefPOS_21, s_XshapefPOS_22,
402 transform_sXshapefPOS_22);
404 G4LogicalVolume* l_XshapefPOS2 =
new G4LogicalVolume(XshapefPOS2,
geometry::Materials::get(matTiN),
"l_XshapefPOS2", 0 , 0);
405 G4RotationMatrix* yRotM =
new G4RotationMatrix;
407 new G4PVPlacement(yRotM, G4ThreeVector(-(2 * endcap_hz * tan(A2) + xpipe_hz * sin(A2) + xpipePOS_hz / 2.*sin(A1)), 0., 0.),
408 l_XshapefPOS2 ,
"p_XshapefPOS2", logi_AluCont_fp,
false, 0);
410 G4VSolid* s_XshapefPOS_31 =
new G4Tubs(
"s_XshapefPOS31",
412 xpipe_innerRadiusTiN,
414 startAngle, spanningAngle);
415 G4VSolid* s_XshapefPOS_32 =
new G4Tubs(
"s_XshapefPOS32",
417 xpipe_innerRadiusTiN * 2,
418 xpipePOS_hz / 2. - 0.7568202457 * SafetyLength,
419 startAngle, spanningAngle);
420 G4Transform3D transform_sXshapefPOS_32 = G4Translate3D(0., 0., 0.);
421 transform_sXshapefPOS_32 = transform_sXshapefPOS_32 * G4RotateY3D(A1);
422 G4IntersectionSolid* XshapefPOS3 =
new G4IntersectionSolid(
"XshapefPOS3", s_XshapefPOS_31, s_XshapefPOS_32,
423 transform_sXshapefPOS_32);
425 G4LogicalVolume* l_XshapefPOS3 =
new G4LogicalVolume(XshapefPOS3,
geometry::Materials::get(vacPipe),
"l_XshapefPOS3", 0 , 0);
426 if (flag_limitStep) l_XshapefPOS3 ->SetUserLimits(
new G4UserLimits(stepMax));
427 new G4PVPlacement(0, G4ThreeVector(0. , 0., 0.), l_XshapefPOS3 ,
"p_XshapefPOS3", l_XshapefPOS2,
false, 0);
431 G4VSolid* AluCont_b =
new G4Trd(
"AluCont_b", xcont2, xcont1, xcont1, xcont1, xpipe_hz / 2.0 * cos(A2));
432 G4LogicalVolume* logi_AluCont_b =
new G4LogicalVolume(AluCont_b,
geometry::Materials::get(matPipe),
"logi_AluCont_b", 0 , 0);
433 new G4PVPlacement(0, G4ThreeVector(0, 0, -pipe_hz - endcap_hz * 2.0 - xpipe_hz * cos(A2) / 2.), logi_AluCont_b,
"phys_AluCont_b",
434 &topVolume,
false, 1);
439 G4VSolid* s_Xshapeb_11 =
new G4Tubs(
"s_Xshapeb_11",
441 xpipe_innerRadiusTiN,
443 startAngle, spanningAngle);
444 G4VSolid* s_Xshapeb_12 =
new G4Tubs(
"s_Xshapeb_12",
446 xpipe_innerRadiusTiN * 2.0,
448 startAngle, spanningAngle);
449 G4VSolid* s_Xshapeb_21 =
new G4Tubs(
"s_Xshapeb_21",
453 startAngle, spanningAngle);
454 G4VSolid* s_Xshapeb_22 =
new G4Tubs(
"s_Xshapeb_22",
456 xpipe_innerRadius * 2.0,
458 startAngle, spanningAngle);
460 G4VSolid* s_XshapebTiN_11 =
new G4Tubs(
"s_XshapebTiN_11",
464 startAngle, spanningAngle);
465 G4VSolid* s_XshapebTiN_12 =
new G4Tubs(
"s_XshapebTiN_12",
467 xpipe_innerRadius * 2.0,
469 startAngle, spanningAngle);
470 G4VSolid* s_XshapebTiN_21 =
new G4Tubs(
"s_XshapebTiN_21",
474 startAngle, spanningAngle);
475 G4VSolid* s_XshapebTiN_22 =
new G4Tubs(
"s_XshapebTiN_22",
477 xpipe_innerRadius * 2.0,
479 startAngle, spanningAngle);
481 G4Transform3D transform_sXshapeb_12 = G4Translate3D(0., 0., 0.);
482 transform_sXshapeb_12 = transform_sXshapeb_12 * G4RotateY3D(A2);
483 G4IntersectionSolid* Xshapeb1 =
new G4IntersectionSolid(
"Xshapeb1", s_Xshapeb_11, s_Xshapeb_12, transform_sXshapeb_12);
485 G4Transform3D transform_sXshapeb_22 = G4Translate3D(0., 0., 0.);
486 transform_sXshapeb_22 = transform_sXshapeb_22 * G4RotateY3D(-A2);
487 G4IntersectionSolid* Xshapeb2 =
new G4IntersectionSolid(
"Xshapeb2", s_Xshapeb_21, s_Xshapeb_22, transform_sXshapeb_22);
489 G4Transform3D transform_sXshapebTiN_12 = G4Translate3D(0., 0., 0.);
490 transform_sXshapebTiN_12 = transform_sXshapebTiN_12 * G4RotateY3D(A2);
491 G4IntersectionSolid* XshapebTiN1 =
new G4IntersectionSolid(
"XshapebTiN1", s_XshapebTiN_11, s_XshapebTiN_12,
492 transform_sXshapebTiN_12);
494 G4Transform3D transform_sXshapebTiN_22 = G4Translate3D(0., 0., 0.);
495 transform_sXshapebTiN_22 = transform_sXshapebTiN_22 * G4RotateY3D(-A2);
496 G4IntersectionSolid* XshapebTiN2 =
new G4IntersectionSolid(
"XshapebTiN2", s_XshapebTiN_21, s_XshapebTiN_22,
497 transform_sXshapebTiN_22);
500 G4Transform3D transform_XshapebTiN1 = G4Translate3D(dxtr, 0. , dztr);
502 transform_XshapebTiN1 = transform_XshapebTiN1 * G4RotateY3D(-2.*A2);
503 G4UnionSolid* XshapeTiNBackwx =
new G4UnionSolid(
"XshapeTiNBackwx", XshapebTiN2 , XshapebTiN1 , transform_XshapebTiN1);
505 G4Transform3D transform_XshapeTiNBackwx = G4Translate3D(-dxtr / 2., 0., 0.);
506 transform_XshapeTiNBackwx = transform_XshapeTiNBackwx * G4RotateY3D(A2);
507 G4IntersectionSolid* XshapeTiNBackw =
new G4IntersectionSolid(
"XshapeTiNBackw", AluCont_b, XshapeTiNBackwx,
508 transform_XshapeTiNBackwx);
509 G4LogicalVolume* l_XshapeTiNBackw =
new G4LogicalVolume(XshapeTiNBackw,
geometry::Materials::get(matTiN),
"l_XshapeTiNBackw", 0 ,
511 new G4PVPlacement(0, G4ThreeVector(0., 0., 0.), l_XshapeTiNBackw,
"p_XshapeTiNBackw", logi_AluCont_b ,
false, 0);
514 G4Transform3D transform_Xshapeb1 = G4Translate3D(dxtr, 0. , dztr);
515 transform_Xshapeb1 = transform_Xshapeb1 * G4RotateY3D(-2.*A2);
516 G4UnionSolid* XshapeBackwx =
new G4UnionSolid(
"XshapebBackwx", Xshapeb2 , Xshapeb1 , transform_Xshapeb1);
517 G4Transform3D transform_XshapeBackwx = G4Translate3D(-dxtr / 2., 0., 0.);
518 transform_XshapeBackwx = transform_XshapeBackwx * G4RotateY3D(A2);
519 G4IntersectionSolid* XshapeBackw =
new G4IntersectionSolid(
"XshapeBackw", AluCont_b, XshapeBackwx, transform_XshapeBackwx);
520 G4LogicalVolume* l_XshapeBackw =
new G4LogicalVolume(XshapeBackw,
geometry::Materials::get(vacPipe),
"l_XshapeBackw", 0 , 0);
521 if (flag_limitStep) l_XshapeBackw->SetUserLimits(
new G4UserLimits(stepMax));
523 new G4PVPlacement(0, G4ThreeVector(0., 0., 0.), l_XshapeBackw,
"p_XshapeBackw", l_XshapeTiNBackw ,
false, 0);
527 G4VSolid* AluCont_bpO =
new G4Trd(
"AluCont_bpO", xcont3M, xcont2, xcont1, xcont1, xpipeMIN_hz / 2.0 * cos(A1));
528 G4VSolid* AluCont_bps =
new G4Trd(
"AluCont_bps", xcont4M, xcont5, xcont1, xcont1, xpipeMIN_hz / 2.0 * cos(A1));
529 G4Transform3D transform_AluCont_bps = G4Translate3D(0., 0., 0.);
530 G4SubtractionSolid* AluCont_bp =
new G4SubtractionSolid(
"AluCont_bp", AluCont_bpO, AluCont_bps, transform_AluCont_bps);
531 G4LogicalVolume* logi_AluCont_bp =
new G4LogicalVolume(AluCont_bp,
geometry::Materials::get(matPipe),
"logi_AluCont_bp", 0 , 0);
532 new G4PVPlacement(0, G4ThreeVector(0, 0, -(pipe_hz + endcap_hz * 2.0 + xpipe_hz * cos(A2) + xpipeMIN_hz / 2.0 * cos(A1))),
533 logi_AluCont_bp,
"phys_AluCont_bp", &topVolume,
false, 0);
536 G4VSolid* s_XshapebMIN_11 =
new G4Tubs(
"s_XshapebMIN11",
540 startAngle, spanningAngle);
541 G4VSolid* s_XshapebMIN_12 =
new G4Tubs(
"s_XshapebMIN12",
543 xpipe_innerRadius * 2,
544 xpipeMIN_hz / 2. - 0.525641366 * SafetyLength,
545 startAngle, spanningAngle);
546 G4Transform3D transform_sXshapebMIN_12 = G4Translate3D(0., 0., 0.);
547 transform_sXshapebMIN_12 = transform_sXshapebMIN_12 * G4RotateY3D(-A1);
548 G4IntersectionSolid* XshapebMIN1 =
new G4IntersectionSolid(
"XshapebMIN1", s_XshapebMIN_11, s_XshapebMIN_12,
549 transform_sXshapebMIN_12);
551 G4LogicalVolume* l_XshapebMIN1 =
new G4LogicalVolume(XshapebMIN1,
geometry::Materials::get(vacPipe),
"l_XshapebMIN1", 0 , 0);
552 if (flag_limitStep) l_XshapebMIN1 ->SetUserLimits(
new G4UserLimits(stepMax));
553 new G4PVPlacement(yRotP, G4ThreeVector(-(2 * endcap_hz * tan(A2) + xpipe_hz * sin(A2) + xpipeMIN_hz / 2.*sin(A1)), 0., 0.),
554 l_XshapebMIN1 ,
"p_XshapebMIN1", logi_AluCont_bp,
false, 0);
557 G4VSolid* s_XshapebMIN_21 =
new G4Tubs(
"s_XshapebMIN21",
561 startAngle, spanningAngle);
562 G4VSolid* s_XshapebMIN_22 =
new G4Tubs(
"s_XshapebMIN22",
564 xpipe_innerRadius * 2,
565 xpipeMIN_hz / 2. - 0.525641366 * SafetyLength,
566 startAngle, spanningAngle);
567 G4Transform3D transform_sXshapebMIN_22 = G4Translate3D(0., 0., 0.);
568 transform_sXshapebMIN_22 = transform_sXshapebMIN_22 * G4RotateY3D(A1);
569 G4IntersectionSolid* XshapebMIN2 =
new G4IntersectionSolid(
"XshapebMIN2", s_XshapebMIN_21, s_XshapebMIN_22,
570 transform_sXshapebMIN_22);
572 G4LogicalVolume* l_XshapebMIN2 =
new G4LogicalVolume(XshapebMIN2,
geometry::Materials::get(matTiN),
"l_XshapebMIN2", 0 , 0);
573 new G4PVPlacement(yRotM, G4ThreeVector(2 * endcap_hz * tan(A2) + xpipe_hz * sin(A2) + xpipeMIN_hz / 2.*sin(A1), 0., 0.),
574 l_XshapebMIN2 ,
"p_XshapebMIN2", logi_AluCont_bp,
false, 0);
576 G4VSolid* s_XshapebMIN_31 =
new G4Tubs(
"s_XshapebMIN31",
578 xpipe_innerRadiusTiN,
580 startAngle, spanningAngle);
581 G4VSolid* s_XshapebMIN_32 =
new G4Tubs(
"s_XshapebMIN32",
583 xpipe_innerRadiusTiN * 2,
584 xpipeMIN_hz / 2. - 0.525641366 * SafetyLength,
585 startAngle, spanningAngle);
586 G4Transform3D transform_sXshapebMIN_32 = G4Translate3D(0., 0., 0.);
587 transform_sXshapebMIN_32 = transform_sXshapebMIN_32 * G4RotateY3D(A1);
588 G4IntersectionSolid* XshapebMIN3 =
new G4IntersectionSolid(
"XshapebMIN3", s_XshapebMIN_31, s_XshapebMIN_32,
589 transform_sXshapebMIN_32);
591 G4LogicalVolume* l_XshapebMIN3 =
new G4LogicalVolume(XshapebMIN3,
geometry::Materials::get(vacPipe),
"l_XshapebMIN3", 0 , 0);
592 if (flag_limitStep) l_XshapebMIN3 ->SetUserLimits(
new G4UserLimits(stepMax));
593 new G4PVPlacement(0, G4ThreeVector(0. , 0., 0.), l_XshapebMIN3 ,
"p_XshapebMIN3", l_XshapebMIN2,
false, 0);