Create the PH1BPIPE geometry.
62 {
63
65
66
67 double pillar_height = 61.9 * CLHEP::cm / 2.;
68 double pillar_length = 3. * CLHEP::cm;
69 double pillar_width = pillar_length;
70 G4VSolid* s_bppillar = new G4Box("s_bppillar", pillar_length, pillar_height, pillar_width);
72 G4VisAttributes* white = new G4VisAttributes(G4Colour(1, 1, 1));
73 white->SetForceAuxEdgeVisible(true);
74 l_bppillar->SetVisAttributes(white);
75 double y_offset = -76. * CLHEP::cm + pillar_height;
76 G4ThreeVector Pillarpos = G4ThreeVector(0, y_offset, -154.0 * CLHEP::cm);
77 new G4PVPlacement(0, Pillarpos, l_bppillar, "p_bppilar1", &topVolume, false, 1);
78 Pillarpos = G4ThreeVector(0, y_offset, 154.0 * CLHEP::cm);
79 new G4PVPlacement(0, Pillarpos, l_bppillar, "p_bppilar2", &topVolume, false, 1);
80 Pillarpos = G4ThreeVector(11.4175236299 * CLHEP::cm, y_offset, -227.758203051 * CLHEP::cm);
81 new G4PVPlacement(0, Pillarpos, l_bppillar, "p_bppilar3", &topVolume, false, 1);
82 Pillarpos = G4ThreeVector(-10.4976636985 * CLHEP::cm, y_offset, 227.758203051 * CLHEP::cm);
83 new G4PVPlacement(0, Pillarpos, l_bppillar, "p_bppilar4", &topVolume, false, 1);
84 Pillarpos = G4ThreeVector(-8.71250756316 * CLHEP::cm, y_offset, -209.819190072 * CLHEP::cm);
85 new G4PVPlacement(0, Pillarpos, l_bppillar, "p_bppilar5", &topVolume, false, 1);
86 Pillarpos = G4ThreeVector(8.71248973173 * CLHEP::cm, y_offset, 209.819190072 * CLHEP::cm);
87 new G4PVPlacement(0, Pillarpos, l_bppillar, "p_bppilar6", &topVolume, false, 1);
88
89
90 double x_reih = 2. * CLHEP::cm / 2.;
91 double y_reih = 2.3 * CLHEP::cm / 2.;
92 double z_reih = 48. * CLHEP::cm / 2.;
93 G4VSolid* s_reih = new G4Box("s_reih", x_reih, y_reih, z_reih);
95 l_reih->SetVisAttributes(white);
96 G4ThreeVector Reihpos = G4ThreeVector(72.8780869619 * CLHEP::mm, 0, 1.35841468498 * CLHEP::mm);
97 new G4PVPlacement(0, Reihpos, l_reih, "p_Reih1", &topVolume, false, 1);
98 Reihpos = G4ThreeVector(-72.8780869619 * CLHEP::mm, 0, 1.35841468498 * CLHEP::mm);
99 new G4PVPlacement(0, Reihpos, l_reih, "p_Reih2", &topVolume, false, 1);
100
101 double x_reiv = 2. * CLHEP::cm / 2.;
102 double y_reiv = 5.2 * CLHEP::cm / 2.;
103 double z_reiv = 140. * CLHEP::cm / 2.;
104 G4VSolid* s_reiv = new G4Box("s_reiv", x_reiv, y_reiv, z_reiv);
106 l_reiv->SetVisAttributes(white);
107
108 G4ThreeVector Reivpos = G4ThreeVector(0, -83.0 * CLHEP::mm, 0);
109 new G4PVPlacement(0, Reivpos, l_reiv, "p_Reiv1", &topVolume, false, 1);
110
111 Reivpos = G4ThreeVector(0, 83.0 * CLHEP::mm, 0);
112 new G4PVPlacement(0, Reivpos, l_reiv, "p_Reiv2", &topVolume, false, 1);
113
114
115
116
117
118
119
120
121
122
123 double stepSize = content.getLength("stepSize", 5 * CLHEP::um);
124
125
126
127
128
129
130
131 double SafetyLength = 0.1 * CLHEP ::cm;
132
133 double xpipe_hz1 = content.getLength("xpipe_hz1") * CLHEP::cm;
134 double pipe_hz = content.getLength("pipe_hz") * CLHEP::cm;
135 double pipe_outerRadius_x = content.getLength("pipe_outerRadius_x") * CLHEP::cm;
136 double pipe_outerRadius_y = content.getLength("pipe_outerRadius_y") * CLHEP::cm;
137 double pipe_innerRadius_x = content.getLength("pipe_innerRadius_x") * CLHEP::cm;
138 double pipe_innerRadius_y = content.getLength("pipe_innerRadius_y") * CLHEP::cm;
139 double xpipe_innerRadius = content.getLength("xpipe_innerRadius") * CLHEP::cm;
140 double xpipe_outerRadius = content.getLength("xpipe_outerRadius") * CLHEP::cm;
141 double pipe_innerRadiusTiN_x = content.getLength("pipe_innerRadiusTiN_x") * CLHEP::cm;
142 double pipe_innerRadiusTiN_y = content.getLength("pipe_innerRadiusTiN_y") * CLHEP::cm;
143 double xpipe_innerRadiusTiN = content.getLength("xpipe_innerRadiusTiN") * CLHEP::cm;
144 double endcap_hz = content.getLength("endcap_hz") * CLHEP::cm;
145 double endcap_outerRadius = content.getLength("endcap_outerRadius") * CLHEP::cm;
146 double xpipePOS_hz = content.getLength("xpipePOS_hz") * CLHEP::cm;
147 double xpipeMIN_hz = content.getLength("xpipeMIN_hz") * CLHEP::cm;
148
149
150 double startAngle = 0.*CLHEP::deg;
151 double spanningAngle = 360.*CLHEP::deg;
152 double A1 = 0.0415 * CLHEP::rad;
153
154 double OBtemp =
sqrt(pow(xpipe_hz1, 2) + pow(xpipe_innerRadius / 2., 2));
155
156 double BCtemp = OBtemp * sin(A1);
157
158 double ABtemp =
sqrt(pow(pipe_hz, 2) + pow(OBtemp, 2) - 2 * pipe_hz * OBtemp * cos(A1));
159
160 double A2 = asin(BCtemp / ABtemp) * CLHEP::rad;
161
162 double xpipe_hz = ABtemp - 2 * endcap_hz / cos(A2);
163
164 double xcont2 = BCtemp + xpipe_outerRadius;
165 double xcont1 = xpipe_outerRadius + 2 * endcap_hz * tan(A2);
166 double xcont3 = xcont2 + xpipePOS_hz * sin(A1);
167 double xcont4 = xcont3 - 2 * xpipe_outerRadius;
168 double xcont5 = xcont2 - 2 * xpipe_outerRadius;
169 double xcont3M = xcont2 + xpipeMIN_hz * sin(A1);
170 double xcont4M = xcont3M - 2 * xpipe_outerRadius;
171
172
173
174 double dxtr = 0.5 * (ABtemp + 2 * endcap_hz / cos(A2)) * sin(2 * A2);
175 double dztr = (ABtemp + 2 * endcap_hz / cos(A2)) * sin(A2) * sin(A2);
176
177
178 string matPipe = content.getString("MaterialPipe");
179 string matTiN = content.getString("MaterialTiN");
180 string vacPipe = content.getString("MatVacuum");
181 G4double tubinR = 0.0 * CLHEP::cm;
182
183 G4VSolid* s_PH1BPIPE = new G4EllipticalTube("s_PH1BPIPE",
184 pipe_outerRadius_x,
185 pipe_outerRadius_y,
186 pipe_hz);
187 G4LogicalVolume* l_PH1BPIPE =
new G4LogicalVolume(s_PH1BPIPE,
geometry::Materials::get(matPipe),
"l_PH1BPIPE", 0, 0);
188
189 l_PH1BPIPE->SetUserLimits(new G4UserLimits(stepSize));
190
191 G4ThreeVector PH1BPIPEpos = G4ThreeVector(
192 content.getLength("x_ph1bpipe") * CLHEP::cm,
193 content.getLength("y_ph1bpipe") * CLHEP::cm,
194 content.getLength("z_ph1bpipe") * CLHEP::cm
195 );
196 new G4PVPlacement(0, PH1BPIPEpos, l_PH1BPIPE, "p_PH1BPIPE", &topVolume, false, 0);
197
198 G4VSolid* s_PH1BPIPETiN = new G4EllipticalTube("s_PH1BPIPETiN",
199 pipe_innerRadius_x,
200 pipe_innerRadius_y,
201 pipe_hz);
202 G4LogicalVolume* l_PH1BPIPETiN =
new G4LogicalVolume(s_PH1BPIPETiN,
geometry::Materials::get(matTiN),
"l_PH1BPIPETiN", 0, 0);
203 new G4PVPlacement(0, PH1BPIPEpos, l_PH1BPIPETiN, "p_PH1BPIPETiN", l_PH1BPIPE, false, 0);
204
205 G4VSolid* s_PH1BPIPEV = new G4EllipticalTube("s_PH1BPIPEV",
206 pipe_innerRadiusTiN_x,
207 pipe_innerRadiusTiN_y,
208 pipe_hz);
209 G4VSolid* s_PH1BPIPEVac = new G4IntersectionSolid("s_PH1BPIPEVac", s_PH1BPIPE, s_PH1BPIPEV);
210 G4LogicalVolume* l_PH1BPIPEVac =
new G4LogicalVolume(s_PH1BPIPEVac,
geometry::Materials::get(vacPipe),
"l_PH1BPIPEVac", 0, 0);
211
212 new G4PVPlacement(0, PH1BPIPEpos, l_PH1BPIPEVac, "p_PH1BPIPEVac", l_PH1BPIPETiN, false, 0);
213
214
215 G4VSolid* s_PH1BPIPEendcap = new G4Tubs("s_PH1BPIPEendcap", 0.,
216 endcap_outerRadius,
217 endcap_hz,
218 startAngle, spanningAngle);
220 "l_PH1BPIPEendcapTop", 0, 0);
222 "l_PH1BPIPEendcapBot", 0, 0);
223
224 G4ThreeVector PH1BPIPEendcapposTop = G4ThreeVector(
225 content.getLength("x_ph1bpipe") * CLHEP::cm,
226 content.getLength("y_ph1bpipe") * CLHEP::cm,
227 content.getLength("z_ph1bpipe") * CLHEP::cm + pipe_hz + endcap_hz
228 );
229
230 G4ThreeVector PH1BPIPEendcapposBot = G4ThreeVector(
231 content.getLength("x_ph1bpipe") * CLHEP::cm,
232 content.getLength("y_ph1bpipe") * CLHEP::cm,
233 content.getLength("z_ph1bpipe") * CLHEP::cm - pipe_hz - endcap_hz
234 );
235 new G4PVPlacement(0, PH1BPIPEendcapposTop, l_PH1BPIPEendcapTop, "p_PH1BPIPEendcapTop", &topVolume, false, 0);
236 new G4PVPlacement(0, PH1BPIPEendcapposBot, l_PH1BPIPEendcapBot, "p_PH1BPIPEendcapBot", &topVolume, false, 0);
237
238 G4VSolid* s_PH1BPIPEendcapTiN = new G4EllipticalTube("s_PH1BPIPEendcapTiN",
239 pipe_innerRadius_x,
240 pipe_innerRadius_y,
241 endcap_hz);
242 G4LogicalVolume* l_PH1BPIPEendcapTiNTop =
new G4LogicalVolume(s_PH1BPIPEendcapTiN,
geometry::Materials::get(matTiN),
243 "l_PH1BPIPEendcapTiNTop", 0, 0);
244 G4LogicalVolume* l_PH1BPIPEendcapTiNBot =
new G4LogicalVolume(s_PH1BPIPEendcapTiN,
geometry::Materials::get(matTiN),
245 "l_PH1BPIPEendcapTiNBot", 0, 0);
246 new G4PVPlacement(0, G4ThreeVector(0., 0., 0.), l_PH1BPIPEendcapTiNTop, "p_PH1BPIPEendcapTiNTop", l_PH1BPIPEendcapTop, false, 0);
247 new G4PVPlacement(0, G4ThreeVector(0., 0., 0.), l_PH1BPIPEendcapTiNBot, "p_PH1BPIPEendcapTiNBot", l_PH1BPIPEendcapBot, false, 0);
248
249 G4VSolid* s_PH1BPIPEendcapV = new G4EllipticalTube("s_PH1BPIPEendcapV",
250 pipe_innerRadiusTiN_x,
251 pipe_innerRadiusTiN_y,
252 endcap_hz);
253 G4VSolid* s_PH1BPIPEendcapVac = new G4IntersectionSolid("s_PH1BPIPEendcapVac", s_PH1BPIPEendcap, s_PH1BPIPEendcapV);
255 "l_PH1BPIPEendcapVac", 0, 0);
256
257 new G4PVPlacement(0, G4ThreeVector(0., 0., 0.), l_PH1BPIPEendcapVac, "p_PH1BPIPEendcapVacTop", l_PH1BPIPEendcapTiNTop, false, 0);
258 new G4PVPlacement(0, G4ThreeVector(0., 0., 0.), l_PH1BPIPEendcapVac, "p_PH1BPIPEendcapVacBot", l_PH1BPIPEendcapTiNBot, false, 0);
259
260
261
262 G4VSolid* AluCont_f = new G4Trd("AluCont_f", xcont1, xcont2, xcont1, xcont1, xpipe_hz / 2.0 * cos(A2));
263 G4LogicalVolume* logi_AluCont_f =
new G4LogicalVolume(AluCont_f,
geometry::Materials::get(matPipe),
"logi_AluCont_f", 0, 0);
264 new G4PVPlacement(0, G4ThreeVector(0, 0, pipe_hz + endcap_hz * 2.0 + 0.5 * xpipe_hz * cos(A2)),
265 logi_AluCont_f, "phys_AluCont_f", &topVolume, false, 0);
266
267
268
269
270 G4VSolid* s_Xshapef_11 = new G4Tubs("s_Xshapef_11",
271 tubinR,
272 xpipe_innerRadius,
273 xpipe_hz,
274 startAngle, spanningAngle);
275 G4VSolid* s_Xshapef_12 = new G4Tubs("s_Xshapef_12",
276 tubinR,
277 xpipe_innerRadius * 2.0,
278 xpipe_hz / 2.0,
279 startAngle, spanningAngle);
280 G4VSolid* s_Xshapef_21 = new G4Tubs("s_Xshapef_21",
281 tubinR,
282 xpipe_innerRadiusTiN,
283 xpipe_hz,
284 startAngle, spanningAngle);
285 G4VSolid* s_Xshapef_22 = new G4Tubs("s_Xshapef_22",
286 tubinR,
287 xpipe_innerRadiusTiN * 2.0,
288 xpipe_hz / 2.0,
289 startAngle, spanningAngle);
290
291
292 G4VSolid* s_XshapefTiN_11 = new G4Tubs("s_XshapefTiN_11",
293 tubinR,
294 xpipe_innerRadius,
295 xpipe_hz,
296 startAngle, spanningAngle);
297 G4VSolid* s_XshapefTiN_12 = new G4Tubs("s_XshapefTiN_12",
298 tubinR,
299 xpipe_innerRadius * 2.0,
300 xpipe_hz / 2.0,
301 startAngle, spanningAngle);
302 G4VSolid* s_XshapefTiN_21 = new G4Tubs("s_XshapefTiN_21",
303 tubinR,
304 xpipe_innerRadius,
305 xpipe_hz,
306 startAngle, spanningAngle);
307 G4VSolid* s_XshapefTiN_22 = new G4Tubs("s_XshapefTiN_22",
308 tubinR,
309 xpipe_innerRadius * 2.0,
310 xpipe_hz / 2.0,
311 startAngle, spanningAngle);
312
313 G4Transform3D transform_sXshapef_12 = G4Translate3D(0., 0., 0.);
314 transform_sXshapef_12 = transform_sXshapef_12 * G4RotateY3D(-A2);
315 G4IntersectionSolid* Xshapef1 = new G4IntersectionSolid("Xshapef1", s_Xshapef_11, s_Xshapef_12, transform_sXshapef_12);
316
317 G4Transform3D transform_sXshapef_22 = G4Translate3D(0., 0., 0.);
318 transform_sXshapef_22 = transform_sXshapef_22 * G4RotateY3D(A2);
319 G4IntersectionSolid* Xshapef2 = new G4IntersectionSolid("Xshapef2", s_Xshapef_21, s_Xshapef_22, transform_sXshapef_22);
320
321 G4Transform3D transform_sXshapefTiN_12 = G4Translate3D(0., 0., 0.);
322 transform_sXshapefTiN_12 = transform_sXshapefTiN_12 * G4RotateY3D(-A2);
323 G4IntersectionSolid* XshapefTiN1 = new G4IntersectionSolid("XshapefTiN1", s_XshapefTiN_11, s_XshapefTiN_12,
324 transform_sXshapefTiN_12);
325
326 G4Transform3D transform_sXshapefTiN_22 = G4Translate3D(0., 0., 0.);
327 transform_sXshapefTiN_22 = transform_sXshapefTiN_22 * G4RotateY3D(A2);
328 G4IntersectionSolid* XshapefTiN2 = new G4IntersectionSolid("XshapefTiN2", s_XshapefTiN_21, s_XshapefTiN_22,
329 transform_sXshapefTiN_22);
330
331
332 G4Transform3D transform_XshapefTiN1 = G4Translate3D(dxtr, 0., -dztr);
333 transform_XshapefTiN1 = transform_XshapefTiN1 * G4RotateY3D(2.*A2);
334 G4UnionSolid* XshapeTiNForwx = new G4UnionSolid("XshapeTiNForwx", XshapefTiN2, XshapefTiN1, transform_XshapefTiN1);
335
336 G4RotationMatrix* yRot = new G4RotationMatrix;
337 yRot->rotateY(A2);
338 G4ThreeVector transform_XshapeTiNForwx(-dxtr / 2., 0., 0.);
339 G4IntersectionSolid* XshapeTiNForw = new G4IntersectionSolid("XshapeTiNForw", AluCont_f, XshapeTiNForwx, yRot,
340 transform_XshapeTiNForwx);
341 G4LogicalVolume* l_XshapeTiNForw =
new G4LogicalVolume(XshapeTiNForw,
geometry::Materials::get(matTiN),
"l_XshapeTiNForw", 0, 0);
342 new G4PVPlacement(0, G4ThreeVector(0., 0., 0.), l_XshapeTiNForw, "p_XshapeTiNForw", logi_AluCont_f, false, 0);
343
344
345 G4Transform3D transform_Xshapef1 = G4Translate3D(dxtr, 0., -dztr);
346 transform_Xshapef1 = transform_Xshapef1 * G4RotateY3D(2.*A2);
347 G4UnionSolid* XshapeForwx = new G4UnionSolid("XshapeForwx", Xshapef2, Xshapef1, transform_Xshapef1);
348
349 G4Transform3D transform_XshapeForwx = G4Translate3D(-dxtr / 2., 0., 0.);
350 transform_XshapeForwx = transform_XshapeForwx * G4RotateY3D(-A2);
351 G4IntersectionSolid* XshapeForw = new G4IntersectionSolid("XshapeForw", AluCont_f, XshapeForwx, transform_XshapeForwx);
352 G4LogicalVolume* l_XshapeForw =
new G4LogicalVolume(XshapeForw,
geometry::Materials::get(vacPipe),
"l_XshapeForw", 0, 0);
353
354 new G4PVPlacement(0, G4ThreeVector(0., 0., 0.), l_XshapeForw, "p_XshapeForw", l_XshapeTiNForw, false, 0);
355
356
357
358 G4VSolid* AluCont_fpO = new G4Trd("AluCont_fpO", xcont2, xcont3, xcont1, xcont1, xpipePOS_hz / 2.0 * cos(A1));
359 G4VSolid* AluCont_fps = new G4Trd("AluCont_fps", xcont5, xcont4, xcont1, xcont1, xpipePOS_hz / 2.0 * cos(A1));
360 G4Transform3D transform_AluCont_fps = G4Translate3D(0., 0., 0.);
361 G4SubtractionSolid* AluCont_fp = new G4SubtractionSolid("AluCont_fp", AluCont_fpO, AluCont_fps, transform_AluCont_fps);
362 G4LogicalVolume* logi_AluCont_fp =
new G4LogicalVolume(AluCont_fp,
geometry::Materials::get(matPipe),
"logi_AluCont_fp", 0, 0);
363 new G4PVPlacement(0, G4ThreeVector(0, 0, pipe_hz + endcap_hz * 2.0 + xpipe_hz * cos(A2) + xpipePOS_hz / 2.0 * cos(A1)),
364 logi_AluCont_fp, "phys_AluCont_fp", &topVolume, false, 0);
365
366
367 G4VSolid* s_XshapefPOS_11 = new G4Tubs("s_XshapefPOS11",
368 tubinR,
369 xpipe_innerRadius,
370 xpipePOS_hz,
371 startAngle, spanningAngle);
372 G4VSolid* s_XshapefPOS_12 = new G4Tubs("s_XshapefPOS12",
373 tubinR,
374 xpipe_innerRadius * 2,
375 xpipePOS_hz / 2. - 0.7568202457 * SafetyLength,
376 startAngle, spanningAngle);
377 G4Transform3D transform_sXshapefPOS_12 = G4Translate3D(0., 0., 0.);
378 transform_sXshapefPOS_12 = transform_sXshapefPOS_12 * G4RotateY3D(-A1);
379 G4IntersectionSolid* XshapefPOS1 = new G4IntersectionSolid("XshapefPOS1", s_XshapefPOS_11, s_XshapefPOS_12,
380 transform_sXshapefPOS_12);
381
382 G4LogicalVolume* l_XshapefPOS1 =
new G4LogicalVolume(XshapefPOS1,
geometry::Materials::get(vacPipe),
"l_XshapefPOS1", 0, 0);
383
384 G4RotationMatrix* yRotP = new G4RotationMatrix;
385 yRotP->rotateY(-A1);
386 new G4PVPlacement(yRotP, G4ThreeVector(2 * endcap_hz * tan(A2) + xpipe_hz * sin(A2) + xpipePOS_hz / 2.*sin(A1), 0., 0.),
387 l_XshapefPOS1, "p_XshapefPOS1", logi_AluCont_fp, false, 0);
388
389
390 G4VSolid* s_XshapefPOS_21 = new G4Tubs("s_XshapefPOS21",
391 tubinR,
392 xpipe_innerRadius,
393 xpipePOS_hz,
394 startAngle, spanningAngle);
395 G4VSolid* s_XshapefPOS_22 = new G4Tubs("s_XshapefPOS22",
396 tubinR,
397 xpipe_innerRadius * 2,
398 xpipePOS_hz / 2. - 0.7568202457 * SafetyLength,
399 startAngle, spanningAngle);
400 G4Transform3D transform_sXshapefPOS_22 = G4Translate3D(0., 0., 0.);
401 transform_sXshapefPOS_22 = transform_sXshapefPOS_22 * G4RotateY3D(A1);
402 G4IntersectionSolid* XshapefPOS2 = new G4IntersectionSolid("XshapefPOS2", s_XshapefPOS_21, s_XshapefPOS_22,
403 transform_sXshapefPOS_22);
404
405 G4LogicalVolume* l_XshapefPOS2 =
new G4LogicalVolume(XshapefPOS2,
geometry::Materials::get(matTiN),
"l_XshapefPOS2", 0, 0);
406 G4RotationMatrix* yRotM = new G4RotationMatrix;
407 yRotM->rotateY(A1);
408 new G4PVPlacement(yRotM, G4ThreeVector(-(2 * endcap_hz * tan(A2) + xpipe_hz * sin(A2) + xpipePOS_hz / 2.*sin(A1)), 0., 0.),
409 l_XshapefPOS2, "p_XshapefPOS2", logi_AluCont_fp, false, 0);
410
411 G4VSolid* s_XshapefPOS_31 = new G4Tubs("s_XshapefPOS31",
412 tubinR,
413 xpipe_innerRadiusTiN,
414 xpipePOS_hz,
415 startAngle, spanningAngle);
416 G4VSolid* s_XshapefPOS_32 = new G4Tubs("s_XshapefPOS32",
417 tubinR,
418 xpipe_innerRadiusTiN * 2,
419 xpipePOS_hz / 2. - 0.7568202457 * SafetyLength,
420 startAngle, spanningAngle);
421 G4Transform3D transform_sXshapefPOS_32 = G4Translate3D(0., 0., 0.);
422 transform_sXshapefPOS_32 = transform_sXshapefPOS_32 * G4RotateY3D(A1);
423 G4IntersectionSolid* XshapefPOS3 = new G4IntersectionSolid("XshapefPOS3", s_XshapefPOS_31, s_XshapefPOS_32,
424 transform_sXshapefPOS_32);
425
426 G4LogicalVolume* l_XshapefPOS3 =
new G4LogicalVolume(XshapefPOS3,
geometry::Materials::get(vacPipe),
"l_XshapefPOS3", 0, 0);
427
428 new G4PVPlacement(0, G4ThreeVector(0., 0., 0.), l_XshapefPOS3, "p_XshapefPOS3", l_XshapefPOS2, false, 0);
429
430
431
432 G4VSolid* AluCont_b = new G4Trd("AluCont_b", xcont2, xcont1, xcont1, xcont1, xpipe_hz / 2.0 * cos(A2));
433 G4LogicalVolume* logi_AluCont_b =
new G4LogicalVolume(AluCont_b,
geometry::Materials::get(matPipe),
"logi_AluCont_b", 0, 0);
434 new G4PVPlacement(0, G4ThreeVector(0, 0, -pipe_hz - endcap_hz * 2.0 - xpipe_hz * cos(A2) / 2.), logi_AluCont_b, "phys_AluCont_b",
435 &topVolume, false, 1);
436
437
438
439
440 G4VSolid* s_Xshapeb_11 = new G4Tubs("s_Xshapeb_11",
441 tubinR,
442 xpipe_innerRadiusTiN,
443 xpipe_hz,
444 startAngle, spanningAngle);
445 G4VSolid* s_Xshapeb_12 = new G4Tubs("s_Xshapeb_12",
446 tubinR,
447 xpipe_innerRadiusTiN * 2.0,
448 xpipe_hz / 2.0,
449 startAngle, spanningAngle);
450 G4VSolid* s_Xshapeb_21 = new G4Tubs("s_Xshapeb_21",
451 tubinR,
452 xpipe_innerRadius,
453 xpipe_hz,
454 startAngle, spanningAngle);
455 G4VSolid* s_Xshapeb_22 = new G4Tubs("s_Xshapeb_22",
456 tubinR,
457 xpipe_innerRadius * 2.0,
458 xpipe_hz / 2.0,
459 startAngle, spanningAngle);
460
461 G4VSolid* s_XshapebTiN_11 = new G4Tubs("s_XshapebTiN_11",
462 tubinR,
463 xpipe_innerRadius,
464 xpipe_hz,
465 startAngle, spanningAngle);
466 G4VSolid* s_XshapebTiN_12 = new G4Tubs("s_XshapebTiN_12",
467 tubinR,
468 xpipe_innerRadius * 2.0,
469 xpipe_hz / 2.0,
470 startAngle, spanningAngle);
471 G4VSolid* s_XshapebTiN_21 = new G4Tubs("s_XshapebTiN_21",
472 tubinR,
473 xpipe_innerRadius,
474 xpipe_hz,
475 startAngle, spanningAngle);
476 G4VSolid* s_XshapebTiN_22 = new G4Tubs("s_XshapebTiN_22",
477 tubinR,
478 xpipe_innerRadius * 2.0,
479 xpipe_hz / 2.0,
480 startAngle, spanningAngle);
481
482 G4Transform3D transform_sXshapeb_12 = G4Translate3D(0., 0., 0.);
483 transform_sXshapeb_12 = transform_sXshapeb_12 * G4RotateY3D(A2);
484 G4IntersectionSolid* Xshapeb1 = new G4IntersectionSolid("Xshapeb1", s_Xshapeb_11, s_Xshapeb_12, transform_sXshapeb_12);
485
486 G4Transform3D transform_sXshapeb_22 = G4Translate3D(0., 0., 0.);
487 transform_sXshapeb_22 = transform_sXshapeb_22 * G4RotateY3D(-A2);
488 G4IntersectionSolid* Xshapeb2 = new G4IntersectionSolid("Xshapeb2", s_Xshapeb_21, s_Xshapeb_22, transform_sXshapeb_22);
489
490 G4Transform3D transform_sXshapebTiN_12 = G4Translate3D(0., 0., 0.);
491 transform_sXshapebTiN_12 = transform_sXshapebTiN_12 * G4RotateY3D(A2);
492 G4IntersectionSolid* XshapebTiN1 = new G4IntersectionSolid("XshapebTiN1", s_XshapebTiN_11, s_XshapebTiN_12,
493 transform_sXshapebTiN_12);
494
495 G4Transform3D transform_sXshapebTiN_22 = G4Translate3D(0., 0., 0.);
496 transform_sXshapebTiN_22 = transform_sXshapebTiN_22 * G4RotateY3D(-A2);
497 G4IntersectionSolid* XshapebTiN2 = new G4IntersectionSolid("XshapebTiN2", s_XshapebTiN_21, s_XshapebTiN_22,
498 transform_sXshapebTiN_22);
499
500
501 G4Transform3D transform_XshapebTiN1 = G4Translate3D(dxtr, 0., dztr);
502
503 transform_XshapebTiN1 = transform_XshapebTiN1 * G4RotateY3D(-2.*A2);
504 G4UnionSolid* XshapeTiNBackwx = new G4UnionSolid("XshapeTiNBackwx", XshapebTiN2, XshapebTiN1, transform_XshapebTiN1);
505
506 G4Transform3D transform_XshapeTiNBackwx = G4Translate3D(-dxtr / 2., 0., 0.);
507 transform_XshapeTiNBackwx = transform_XshapeTiNBackwx * G4RotateY3D(A2);
508 G4IntersectionSolid* XshapeTiNBackw = new G4IntersectionSolid("XshapeTiNBackw", AluCont_b, XshapeTiNBackwx,
509 transform_XshapeTiNBackwx);
510 G4LogicalVolume* l_XshapeTiNBackw =
new G4LogicalVolume(XshapeTiNBackw,
geometry::Materials::get(matTiN),
"l_XshapeTiNBackw", 0,
511 0);
512 new G4PVPlacement(0, G4ThreeVector(0., 0., 0.), l_XshapeTiNBackw, "p_XshapeTiNBackw", logi_AluCont_b, false, 0);
513
514
515 G4Transform3D transform_Xshapeb1 = G4Translate3D(dxtr, 0., dztr);
516 transform_Xshapeb1 = transform_Xshapeb1 * G4RotateY3D(-2.*A2);
517 G4UnionSolid* XshapeBackwx = new G4UnionSolid("XshapebBackwx", Xshapeb2, Xshapeb1, transform_Xshapeb1);
518 G4Transform3D transform_XshapeBackwx = G4Translate3D(-dxtr / 2., 0., 0.);
519 transform_XshapeBackwx = transform_XshapeBackwx * G4RotateY3D(A2);
520 G4IntersectionSolid* XshapeBackw = new G4IntersectionSolid("XshapeBackw", AluCont_b, XshapeBackwx, transform_XshapeBackwx);
521 G4LogicalVolume* l_XshapeBackw =
new G4LogicalVolume(XshapeBackw,
geometry::Materials::get(vacPipe),
"l_XshapeBackw", 0, 0);
522
523
524 new G4PVPlacement(0, G4ThreeVector(0., 0., 0.), l_XshapeBackw, "p_XshapeBackw", l_XshapeTiNBackw, false, 0);
525
526
527
528 G4VSolid* AluCont_bpO = new G4Trd("AluCont_bpO", xcont3M, xcont2, xcont1, xcont1, xpipeMIN_hz / 2.0 * cos(A1));
529 G4VSolid* AluCont_bps = new G4Trd("AluCont_bps", xcont4M, xcont5, xcont1, xcont1, xpipeMIN_hz / 2.0 * cos(A1));
530 G4Transform3D transform_AluCont_bps = G4Translate3D(0., 0., 0.);
531 G4SubtractionSolid* AluCont_bp = new G4SubtractionSolid("AluCont_bp", AluCont_bpO, AluCont_bps, transform_AluCont_bps);
532 G4LogicalVolume* logi_AluCont_bp =
new G4LogicalVolume(AluCont_bp,
geometry::Materials::get(matPipe),
"logi_AluCont_bp", 0, 0);
533 new G4PVPlacement(0, G4ThreeVector(0, 0, -(pipe_hz + endcap_hz * 2.0 + xpipe_hz * cos(A2) + xpipeMIN_hz / 2.0 * cos(A1))),
534 logi_AluCont_bp, "phys_AluCont_bp", &topVolume, false, 0);
535
536
537 G4VSolid* s_XshapebMIN_11 = new G4Tubs("s_XshapebMIN11",
538 tubinR,
539 xpipe_innerRadius,
540 xpipeMIN_hz,
541 startAngle, spanningAngle);
542 G4VSolid* s_XshapebMIN_12 = new G4Tubs("s_XshapebMIN12",
543 tubinR,
544 xpipe_innerRadius * 2,
545 xpipeMIN_hz / 2. - 0.525641366 * SafetyLength,
546 startAngle, spanningAngle);
547 G4Transform3D transform_sXshapebMIN_12 = G4Translate3D(0., 0., 0.);
548 transform_sXshapebMIN_12 = transform_sXshapebMIN_12 * G4RotateY3D(-A1);
549 G4IntersectionSolid* XshapebMIN1 = new G4IntersectionSolid("XshapebMIN1", s_XshapebMIN_11, s_XshapebMIN_12,
550 transform_sXshapebMIN_12);
551
552 G4LogicalVolume* l_XshapebMIN1 =
new G4LogicalVolume(XshapebMIN1,
geometry::Materials::get(vacPipe),
"l_XshapebMIN1", 0, 0);
553
554 new G4PVPlacement(yRotP, G4ThreeVector(-(2 * endcap_hz * tan(A2) + xpipe_hz * sin(A2) + xpipeMIN_hz / 2.*sin(A1)), 0., 0.),
555 l_XshapebMIN1, "p_XshapebMIN1", logi_AluCont_bp, false, 0);
556
557
558 G4VSolid* s_XshapebMIN_21 = new G4Tubs("s_XshapebMIN21",
559 tubinR,
560 xpipe_innerRadius,
561 xpipeMIN_hz,
562 startAngle, spanningAngle);
563 G4VSolid* s_XshapebMIN_22 = new G4Tubs("s_XshapebMIN22",
564 tubinR,
565 xpipe_innerRadius * 2,
566 xpipeMIN_hz / 2. - 0.525641366 * SafetyLength,
567 startAngle, spanningAngle);
568 G4Transform3D transform_sXshapebMIN_22 = G4Translate3D(0., 0., 0.);
569 transform_sXshapebMIN_22 = transform_sXshapebMIN_22 * G4RotateY3D(A1);
570 G4IntersectionSolid* XshapebMIN2 = new G4IntersectionSolid("XshapebMIN2", s_XshapebMIN_21, s_XshapebMIN_22,
571 transform_sXshapebMIN_22);
572
573 G4LogicalVolume* l_XshapebMIN2 =
new G4LogicalVolume(XshapebMIN2,
geometry::Materials::get(matTiN),
"l_XshapebMIN2", 0, 0);
574 new G4PVPlacement(yRotM, G4ThreeVector(2 * endcap_hz * tan(A2) + xpipe_hz * sin(A2) + xpipeMIN_hz / 2.*sin(A1), 0., 0.),
575 l_XshapebMIN2, "p_XshapebMIN2", logi_AluCont_bp, false, 0);
576
577 G4VSolid* s_XshapebMIN_31 = new G4Tubs("s_XshapebMIN31",
578 tubinR,
579 xpipe_innerRadiusTiN,
580 xpipeMIN_hz,
581 startAngle, spanningAngle);
582 G4VSolid* s_XshapebMIN_32 = new G4Tubs("s_XshapebMIN32",
583 tubinR,
584 xpipe_innerRadiusTiN * 2,
585 xpipeMIN_hz / 2. - 0.525641366 * SafetyLength,
586 startAngle, spanningAngle);
587 G4Transform3D transform_sXshapebMIN_32 = G4Translate3D(0., 0., 0.);
588 transform_sXshapebMIN_32 = transform_sXshapebMIN_32 * G4RotateY3D(A1);
589 G4IntersectionSolid* XshapebMIN3 = new G4IntersectionSolid("XshapebMIN3", s_XshapebMIN_31, s_XshapebMIN_32,
590 transform_sXshapebMIN_32);
591
592 G4LogicalVolume* l_XshapebMIN3 =
new G4LogicalVolume(XshapebMIN3,
geometry::Materials::get(vacPipe),
"l_XshapebMIN3", 0, 0);
593
594 new G4PVPlacement(0, G4ThreeVector(0., 0., 0.), l_XshapebMIN3, "p_XshapebMIN3", l_XshapebMIN2, false, 0);
595
596 }
static G4Material * get(const std::string &name)
Find given material.
double sqrt(double a)
sqrt for double
VXD::SensitiveDetector< PXDSimHit, PXDTrueHit > SensitiveDetector
The PXD Sensitive Detector class.