source: trunk/examples/advanced/underground_physics/src/DMXDetectorRoom.icc@ 1230

Last change on this file since 1230 was 807, checked in by garnier, 17 years ago

update

File size: 24.8 KB
Line 
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26//
27 // Window - AIR + glass ************************************************
28
29 G4double glassThick = 3.0*mm;
30 G4double sidepanelWidth = 43.*cm;
31 G4double windowWidth = labWidth - 2.*sidepanelWidth;
32 G4double windowHeight = labHeight - 112.0*cm;
33 G4double glassPosY = 0.5*(worldLength - glassThick);
34 G4double glassPosZ = 0.5*(labHeight - windowHeight);
35
36 G4Box* glass_box = new G4Box
37 ("glass_box",0.5*windowWidth, 0.5*glassThick, 0.5*windowHeight );
38 glass_log = new G4LogicalVolume(glass_box, glass_mat, "glass_log");
39 glass_phys = new G4PVPlacement
40 (0, G4ThreeVector(0., glassPosY, glassPosZ), "glass_phys", glass_log,
41 world_phys, false, 0);
42
43 G4VisAttributes* glass_vat= new G4VisAttributes(blue);
44 glass_vat->SetVisibility(true);
45 glass_vat->SetForceSolid(true);
46 glass_log->SetVisAttributes(glass_vat);
47
48 // hole in wall between glass and "lab": ************************************
49
50 G4double holeThick = wallThick - glassThick;
51 G4double windowPosY = 0.5*(worldLength - holeThick) - glassThick;
52 G4double windowPosZ = glassPosZ;
53
54 G4Box* window_box = new G4Box
55 ("window_box",0.5*windowWidth, 0.5*holeThick, 0.5*windowHeight );
56 window_log = new G4LogicalVolume(window_box, lab_mat, "window_log");
57 window_phys = new G4PVPlacement
58 (0, G4ThreeVector(0., windowPosY, windowPosZ), "window_phys",
59 window_log, world_phys, false, 0);
60
61 G4VisAttributes* window_vat= new G4VisAttributes(yellow);
62 // window_log->SetVisAttributes(G4VisAttributes::Invisible);
63 window_vat->SetVisibility(true);
64 window_log->SetVisAttributes(window_vat);
65
66
67 // Side panels of Window - AIR + Al ****************************************
68
69 G4double panelThick = 5.0*mm;
70// G4double sidepanelWidth = 43.*cm; // defined earlier
71 G4double sidepanelPosX = 0.5*(labWidth - sidepanelWidth);
72 G4double sidepanelPosY = 0.5*(worldLength - panelThick);
73 G4double sidepanelPosZ = glassPosZ;
74
75 G4Box* sidepanel_box = new G4Box
76 ("sidepanel_box",0.5*sidepanelWidth, 0.5*panelThick, 0.5*windowHeight );
77 sidepanel_log = new G4LogicalVolume
78 (sidepanel_box, panel_mat, "sidepanel_log");
79 sidepanel_phys = new G4PVPlacement
80 (0, G4ThreeVector(sidepanelPosX, sidepanelPosY, sidepanelPosZ),
81 "sidepanel_phys", sidepanel_log, world_phys, false, 0);
82
83 sidepanel_phys = new G4PVPlacement
84 (0, G4ThreeVector(-sidepanelPosX, sidepanelPosY, sidepanelPosZ),
85 "sidepanel_phys", sidepanel_log, world_phys, false, 1);
86
87 G4VisAttributes* panel_vat= new G4VisAttributes(grey);
88 panel_vat->SetVisibility(true);
89 panel_vat->SetForceSolid(true);
90 sidepanel_log->SetVisAttributes(panel_vat);
91
92 // panel hole in wall between Al and "lab": ******************************
93
94 G4double panelholePosX = sidepanelPosX;
95 G4double panelholeThick = wallThick - panelThick;
96 G4double panelholePosY = 0.5*(worldLength - panelholeThick) - panelThick;
97 G4double panelholePosZ = sidepanelPosZ;
98
99 G4Box* panelhole_box = new G4Box
100 ("panelhole_box",0.5*sidepanelWidth, 0.5*panelholeThick, 0.5*windowHeight );
101 panelhole_log = new G4LogicalVolume
102 (panelhole_box, lab_mat, "panelhole_log");
103
104 panelhole_phys = new G4PVPlacement
105 (0, G4ThreeVector(panelholePosX, panelholePosY, panelholePosZ),
106 "panelhole_phys", panelhole_log, world_phys, false, 0);
107 panelhole_phys = new G4PVPlacement
108 (0, G4ThreeVector(-panelholePosX, panelholePosY, panelholePosZ),
109 "panelhole_phys", panelhole_log, world_phys, false, 1);
110
111 panelhole_log->SetVisAttributes(window_vat);
112
113
114 // DOOR Window - AIR + glass ************************************************
115
116 G4double doorwindowWidth = 62.*cm;
117 G4double doorwindowHeight = 84.0*cm;
118 G4double doorglassPosX = 0.5*(labWidth - doorwindowWidth) - sidepanelWidth;
119 G4double doorglassPosY = 0.5*(worldLength - panelThick);
120 G4double doorglassPosZ = glassPosZ - 0.5*(windowHeight+doorwindowHeight);
121
122 G4Box* doorglass_box = new G4Box
123 ("doorglass_box",0.5*doorwindowWidth, 0.5*panelThick, 0.5*doorwindowHeight );
124 doorglass_log = new G4LogicalVolume
125 (doorglass_box, panel_mat, "doorglass_log");
126 doorglass_phys = new G4PVPlacement
127 (0, G4ThreeVector(doorglassPosX, doorglassPosY, doorglassPosZ),
128 "doorglass_phys", doorglass_log, world_phys, false, 0);
129
130 doorglass_log->SetVisAttributes(panel_vat);
131
132 // door hole in wall between glass and "lab": ******************************
133
134 G4double doorwindowPosX = doorglassPosX;
135 G4double doorwindowPosY = 0.5*(worldLength - panelholeThick) - panelThick;
136 G4double doorwindowPosZ = doorglassPosZ;
137
138 G4Box* doorwindow_box = new G4Box
139 ("doorwindow_box",0.5*doorwindowWidth, 0.5*panelholeThick, 0.5*doorwindowHeight );
140 doorwindow_log = new G4LogicalVolume
141 (doorwindow_box, lab_mat, "doorwindow_log");
142 doorwindow_phys = new G4PVPlacement
143 (0, G4ThreeVector(doorwindowPosX, doorwindowPosY, doorwindowPosZ),
144 "doorwindow_phys", doorwindow_log, world_phys, false, 0);
145
146 doorwindow_log->SetVisAttributes(window_vat);
147
148
149 // cupboards: ***************************************************************
150
151 // cupboard 1:
152 G4double cupboardDepth = 38.0*cm; //X
153 G4double cupboard1Width = 91.0*cm; //Y
154 G4double cupboard2Width = 153.0*cm; //Y
155 G4double cupboardHeight = 91.0*cm; //Z
156 G4double woodThick = 2.0*cm;
157 G4double insideDepth = cupboardDepth - 2.*woodThick;
158 G4double inside1Width = cupboard1Width - 2.*woodThick;
159 G4double inside2Width = cupboard2Width - 2.*woodThick;
160 G4double insideHeight = cupboardHeight - 2.*woodThick;
161
162 //nb: cupboard orientation is sideways because they are lined along the wall
163 G4Box* cupboard_box = new G4Box
164 ("cupboard_box", 0.5*cupboardDepth, 0.5*cupboard1Width, 0.5*cupboardHeight);
165 G4Box* inside_box = new G4Box
166 ("inside_box", 0.5*insideDepth, 0.5*inside1Width, 0.5*insideHeight);
167 G4Box* shelf_box = new G4Box
168 ("shelf_box", 0.5*insideDepth, 0.5*inside1Width, 0.5*woodThick);
169 G4Box* cupdoor_box = new G4Box
170 ("cupdoor_box", 0.5*woodThick+1.0*nanometer, 0.25*inside1Width, 0.5*insideHeight);
171// ("cupdoor_box", 0.5*woodThick, 0.25*inside1Width, 0.5*insideHeight);
172
173 G4RotationMatrix rotMatrixCupboard;
174 rotMatrixCupboard.rotateY(0.0*deg);
175
176 G4SubtractionSolid* cupboard_frame = new G4SubtractionSolid
177 ("cupboard_frame", cupboard_box, inside_box, G4Transform3D
178 (rotMatrixCupboard, G4ThreeVector(0.,0.,0.)));
179 G4UnionSolid* cupboard_shelf1 = new G4UnionSolid
180 ("cupboard_shelf1", cupboard_frame, shelf_box, G4Transform3D
181 (rotMatrixCupboard, G4ThreeVector(0.,0.,0.30*(insideHeight))));
182 G4UnionSolid* cupboard_shelf2 = new G4UnionSolid
183 ("cupboard_shelf2", cupboard_shelf1, shelf_box, G4Transform3D
184 (rotMatrixCupboard, G4ThreeVector(0.,0.,-0.05*(insideHeight))));
185 G4SubtractionSolid* cupboard_sol = new G4SubtractionSolid
186 ("cupboard_sol", cupboard_shelf2, cupdoor_box, G4Transform3D
187 (rotMatrixCupboard, G4ThreeVector
188 (-0.5*(insideDepth+woodThick),0.25*inside1Width,0.)));
189
190 cupboard_log = new G4LogicalVolume
191 (cupboard_sol, cupboard_mat, "cupboard_log");
192
193 G4double cupb_X = 0.5*(labWidth - cupboardDepth);
194 // G4double cupb_Y = 0.5*(labLength - cupboard1Width) - 2.0*cm;
195 G4double cupb_Y = 0.5*labLength;
196 G4double cupb_Z = 0.5*(labHeight - cupboardHeight) - 25.4*cm;
197
198 for (G4int i=0; i<5; i++)
199 {
200 cupb_Y -= cupboard1Width+2.0*cm;
201 cupboard_phys = new G4PVPlacement
202 (0, G4ThreeVector(cupb_X, cupb_Y, cupb_Z), "cupboard_phys",
203 cupboard_log, lab_phys, false, i);
204 }
205
206 cupb_X = -(0.5*(labWidth - cupboard1Width) - cupboardDepth - 2.0*cm);
207 G4double cupb_Y2 = -0.5*(labLength - cupboardDepth);
208
209 G4RotationMatrix rotMatrixWallcupboard;
210 rotMatrixWallcupboard.rotateZ(-90.0*deg);
211
212 cupboard_phys = new G4PVPlacement
213 (G4Transform3D
214 (rotMatrixWallcupboard,G4ThreeVector(cupb_X, cupb_Y2, cupb_Z)),
215 "cupboard_phys", cupboard_log, lab_phys, false, 5);
216
217
218 G4VisAttributes* cupboard_vat= new G4VisAttributes(yellow);
219 cupboard_vat->SetVisibility(true);
220 cupboard_vat->SetForceSolid(true);
221 cupboard_log->SetVisAttributes(cupboard_vat);
222
223 // cupboard 2 (bigger/wider) ***********************************************
224
225 G4Box* cupboard2_box = new G4Box
226 ("cupboard2_box", 0.5*cupboardDepth, 0.5*cupboard2Width, 0.5*cupboardHeight);
227 G4Box* inside2_box = new G4Box
228 ("inside2_box", 0.5*insideDepth, 0.5*inside2Width, 0.5*insideHeight);
229 G4Box* shelf2_box = new G4Box
230 ("shelf2_box", 0.5*insideDepth, 0.5*inside2Width, 0.5*woodThick);
231 G4Box* cupdoor_box2 = new G4Box
232 ("cupdoor_box2", 0.5*woodThick+1.0*nanometer, 0.25*inside2Width, 0.5*insideHeight);
233// ("cupdoor_box2", 0.5*woodThick, 0.25*inside2Width, 0.5*insideHeight);
234
235 G4SubtractionSolid* cupboard2_frame = new G4SubtractionSolid
236 ("cupboard2_frame", cupboard2_box, inside2_box, G4Transform3D
237 (rotMatrixCupboard, G4ThreeVector(0.,0.,0.)));
238 G4UnionSolid* cupboard2_shelf1 = new G4UnionSolid
239 ("cupboard2_shelf1", cupboard2_frame, shelf2_box, G4Transform3D
240 (rotMatrixCupboard, G4ThreeVector(0.,0.,0.30*(insideHeight))));
241 G4UnionSolid* cupboard2_shelf2 = new G4UnionSolid
242 ("cupboard2_shelf2", cupboard2_shelf1, shelf2_box, G4Transform3D
243 (rotMatrixCupboard, G4ThreeVector(0.,0.,0.10*(insideHeight))));
244 G4SubtractionSolid* cupboard2_sol = new G4SubtractionSolid
245 ("cupboard2_sol", cupboard2_shelf2, cupdoor_box2, G4Transform3D
246 (rotMatrixCupboard, G4ThreeVector
247 (-0.5*(insideDepth+woodThick),0.25*inside2Width,0.)));
248
249 cupboard2_log = new G4LogicalVolume
250 (cupboard2_sol, cupboard_mat, "cupboard2_log");
251
252 cupb_X = 0.5*(labWidth - cupboardDepth);
253 // cupb_Y = -(0.5*(labLength - cupboard2Width) - 2.0*cm);
254 cupb_Y -= 0.5*cupboard1Width + 0.5*cupboard2Width
255 + 2.0*cm; //using last cupboard posn on right...
256 // cupb_Z = 0.5*(labHeight - cupboardHeight) - 25.4*cm;
257
258 cupboard2_phys = new G4PVPlacement
259 (0,G4ThreeVector(cupb_X, cupb_Y, cupb_Z),
260 "cupboard2_phys", cupboard2_log, lab_phys, false, 0);
261
262 cupb_X = -0.5*(labWidth - cupboardDepth);
263 cupb_Y = -(0.5*(labLength - cupboard2Width) - cupboardDepth - 2.0*cm);
264
265 G4RotationMatrix rotMatrixWallcupboard2;
266 rotMatrixWallcupboard2.rotateZ(-180.0*deg);
267
268 cupboard2_phys = new G4PVPlacement
269 (G4Transform3D
270 (rotMatrixWallcupboard2,G4ThreeVector(cupb_X, cupb_Y, cupb_Z)),
271 "cupboard2_phys", cupboard2_log, lab_phys, false, 1);
272
273
274 cupboard2_log->SetVisAttributes(cupboard_vat);
275
276
277 // NOW add the (wooden) DOOR:
278
279 G4double doorWidth = 1.67*m; //X
280 G4double doorThick = 4.0*cm; //Y
281 G4double doorHeight = 2.09*m; //Z
282 G4double doorPosY = -0.5*(worldLength - doorThick);
283 G4double doorPosZ = -0.5*(worldHeight - doorHeight);
284
285 G4Box* door_box = new G4Box
286 ("door_box",0.5*doorWidth, 0.5*doorThick, 0.5*doorHeight );
287 door_log = new G4LogicalVolume(door_box, door_mat, "door_log");
288 door_phys = new G4PVPlacement
289 (0, G4ThreeVector(0., doorPosY, doorPosZ), "door_phys", door_log,
290 world_phys, false, 0);
291
292 G4VisAttributes* door_vat= new G4VisAttributes(brown);
293 door_vat->SetVisibility(true);
294 door_vat->SetForceSolid(true);
295 door_log->SetVisAttributes(door_vat);
296
297
298 // hole in wall between door and "lab": ************************************
299
300 G4double doorholeThick = wallThick - doorThick;
301 G4double doorholePosY = -(0.5*(worldLength - doorholeThick) - doorThick);
302 G4double doorholePosZ = doorPosZ;
303
304 G4Box* doorhole_box = new G4Box
305 ("doorhole_box",0.5*doorWidth, 0.5*doorholeThick, 0.5*doorHeight );
306 doorhole_log = new G4LogicalVolume(doorhole_box, lab_mat, "doorhole_log");
307 doorhole_phys = new G4PVPlacement
308 (0, G4ThreeVector(0., doorholePosY, doorholePosZ), "doorhole_phys",
309 doorhole_log, world_phys, false, 0);
310
311 G4VisAttributes* doorhole_vat= new G4VisAttributes(cyan);
312 // window_log->SetVisAttributes(G4VisAttributes::Invisible);
313 doorhole_vat->SetVisibility(true);
314 doorhole_log->SetVisAttributes(doorhole_vat);
315
316
317 // desks: *****************************************************************
318 //now add Desks - wood, but have the opportunity for three different woods -
319 // Cupboard, Door and then desks
320
321 // desk1 - no cupboard underneath - should be bigger subtraction?:
322
323 G4double desk1Depth = 57.0*cm; //X
324 G4double desk1Width = 160.0*cm; //Y
325 G4double desk1Height = 90.5*cm; //Z
326 G4double deskThick = 3.0*cm;
327 G4double desk1_insideDepth = desk1Depth - 2.*deskThick;
328 G4double desk1_insideWidth = desk1Width - 2.*deskThick;
329 G4double desk1_insideHeight = desk1Height - 2.*deskThick;
330
331 //nb: desk orientation is sideways because they are lined along the wall
332 G4Box* desk1_box = new G4Box
333 ("desk1_box", 0.5*desk1Depth, 0.5*desk1Width, 0.5*desk1Height);
334 G4Box* desk1_inside_box = new G4Box
335 ("desk1_inside_box", 0.5*desk1_insideDepth, 0.5*desk1_insideWidth,
336 0.5*desk1_insideHeight);
337 G4Box* desk1_door_box = new G4Box
338 ("desk1_door_box", 0.5*deskThick+1.0*nanometer, 0.25*desk1_insideWidth,
339 0.5*desk1_insideHeight);
340// ("desk1_door_box", 0.5*deskThick, 0.25*desk1_insideWidth,
341// 0.5*desk1_insideHeight);
342
343 G4RotationMatrix rotMatrixDesk;
344 rotMatrixDesk.rotateY(0.0*deg);
345
346 G4SubtractionSolid* desk1_frame = new G4SubtractionSolid
347 ("desk1_frame", desk1_box, desk1_inside_box, G4Transform3D
348 (rotMatrixCupboard, G4ThreeVector(0.,0.,0.)));
349 G4SubtractionSolid* desk1_sol = new G4SubtractionSolid
350 ("desk1_sol", desk1_frame, desk1_door_box, G4Transform3D
351 (rotMatrixCupboard, G4ThreeVector
352 (-0.5*(desk1_insideDepth+deskThick),-0.25*desk1_insideWidth,0.)));
353
354 desk1_log = new G4LogicalVolume(desk1_sol, desk_mat, "desk1_log");
355
356 G4double desk_X = 0.5*(labWidth - desk1Depth);
357 G4double desk_Y = -(0.5*(labLength - desk1Width) - 30.0*cm);
358 G4double desk_Z = 0.5*(desk1Height - labHeight);
359
360 desk1_phys = new G4PVPlacement
361 (0, G4ThreeVector(desk_X, desk_Y, desk_Z), "desk1_phys",
362 desk1_log, lab_phys, false, 0);
363
364 G4VisAttributes* desk_vat= new G4VisAttributes(brown);
365 desk_vat->SetVisibility(true);
366 desk_vat->SetForceSolid(true);
367 desk1_log->SetVisAttributes(desk_vat);
368
369 // *****************
370 // desk2 (drawers):
371
372 G4double desk2Depth = 57.0*cm; //X
373 G4double desk2Width = 156.0*cm; //Y
374 G4double desk2Height = desk1Height; //Z
375
376 G4double desk2_insideDepth = desk2Depth - 2.*deskThick;
377 G4double desk2_insideWidth = desk2Width - 2.*deskThick;
378 G4double desk2_insideHeight = desk2Height - 2.*deskThick;
379
380 //nb: desk orientation is sideways because they are lined along the wall
381 G4Box* desk2_box = new G4Box
382 ("desk2_box", 0.5*desk2Depth, 0.5*desk2Width, 0.5*desk2Height);
383 G4Box* desk2_inside_box = new G4Box
384 ("desk2_inside_box", 0.5*desk2_insideDepth, 0.5*desk2_insideWidth,
385 0.5*desk2_insideHeight);
386 G4Box* desk2_door_box = new G4Box
387 ("desk2_door_box", 0.5*deskThick+1.0*nanometer, 0.2*desk2_insideWidth,
388 0.5*desk2_insideHeight);
389// ("desk2_door_box", 0.5*deskThick, 0.2*desk2_insideWidth,
390// 0.5*desk2_insideHeight);
391
392 G4SubtractionSolid* desk2_frame = new G4SubtractionSolid
393 ("desk2_frame", desk2_box, desk2_inside_box, G4Transform3D
394 (rotMatrixCupboard, G4ThreeVector(0.,0.,0.)));
395 G4SubtractionSolid* desk2_sol = new G4SubtractionSolid
396 ("desk2_sol", desk2_frame, desk2_door_box, G4Transform3D
397 (rotMatrixCupboard, G4ThreeVector
398 (-0.5*(desk2_insideDepth+deskThick),-0.25*desk2_insideWidth,0.)));
399
400 desk2_log = new G4LogicalVolume(desk2_sol, desk_mat, "desk2_log");
401
402 desk_X = 0.5*(labWidth - desk2Depth);
403 desk_Y += 0.5*(desk2Width + desk1Width) + 2.0*cm;
404 desk_Z = 0.5*(desk2Height - labHeight);
405
406 desk2_phys = new G4PVPlacement
407 (0, G4ThreeVector(desk_X, desk_Y, desk_Z), "desk2_phys",
408 desk2_log, lab_phys, false, 0);
409
410 desk2_log->SetVisAttributes(desk_vat);
411
412 // *****************
413 // desk3 (cupboard underneath):
414
415 G4double desk3Depth = 79.0*cm; //X
416 G4double desk3Width = 160.0*cm; //Y
417 G4double desk3Height = desk1Height; //Z
418
419 G4double desk3_insideDepth = desk3Depth - 2.*deskThick;
420 G4double desk3_insideWidth = desk3Width - 2.*deskThick;
421 G4double desk3_insideHeight = desk3Height - 2.*deskThick;
422
423 //nb: desk orientation is sideways because they are lined along the wall
424 G4Box* desk3_box = new G4Box
425 ("desk3_box", 0.5*desk3Depth, 0.5*desk3Width, 0.5*desk3Height);
426 G4Box* desk3_inside_box = new G4Box
427 ("desk3_inside_box", 0.5*desk3_insideDepth, 0.5*desk3_insideWidth,
428 0.5*desk3_insideHeight);
429 G4Box* desk3_door_box = new G4Box
430 ("desk3_door_box", 0.5*deskThick+1.0*nanometer, 0.15*desk3_insideWidth, 0.5*desk1_insideHeight);
431// ("desk3_door_box", 0.5*deskThick, 0.15*desk3_insideWidth,
432// 0.5*desk1_insideHeight);
433
434 G4SubtractionSolid* desk3_frame = new G4SubtractionSolid
435 ("desk3_frame", desk3_box, desk3_inside_box, G4Transform3D
436 (rotMatrixCupboard, G4ThreeVector(0.,0.,0.)));
437 G4SubtractionSolid* desk3_sol = new G4SubtractionSolid
438 ("desk3_sol", desk3_frame, desk3_door_box, G4Transform3D
439 (rotMatrixCupboard, G4ThreeVector
440 (-0.5*(desk3_insideDepth+deskThick),-0.35*desk3_insideWidth,0.)));
441
442 desk3_log = new G4LogicalVolume(desk3_sol, desk_mat, "desk3_log");
443
444 desk_X = 0.5*(labWidth - desk3Depth);
445 desk_Y += 0.5*(desk3Width + desk3Width) + 2.0*cm;
446 desk_Z = 0.5*(desk3Height - labHeight);
447
448 desk3_phys = new G4PVPlacement
449 (0, G4ThreeVector(desk_X, desk_Y, desk_Z), "desk3_phys",
450 desk3_log, lab_phys, false, 0);
451
452 desk3_log->SetVisAttributes(desk_vat);
453
454
455 // *****************
456 // wooden radiator trunking - along LHS wall
457
458 G4double trunkDepth = 20.0*cm; //X
459 G4double trunkWidth = labLength; //Y
460 G4double trunkHeight = desk1Height; //Z
461 G4double trunkThick = 3.0*cm;
462
463 // not 2.*trunkThick since only 2 sides of box - top and front
464 G4double trunk_insideDepth = trunkDepth - trunkThick;
465 G4double trunk_insideWidth = trunkWidth;
466 G4double trunk_insideHeight = trunkHeight - trunkThick;
467
468 G4Box* trunk_box = new G4Box
469 ("trunk_box", 0.5*trunkDepth, 0.5*trunkWidth, 0.5*trunkHeight);
470 G4Box* trunk_inside_box = new G4Box
471 ("trunk_inside_box", 0.5*trunk_insideDepth, 0.5*trunk_insideWidth,
472 0.5*trunk_insideHeight);
473
474 trunk_log = new G4LogicalVolume(trunk_box, desk_mat, "trunk_log");
475 trunk_inside_log = new G4LogicalVolume
476 (trunk_inside_box, lab_mat, "trunk_inside_log");
477
478 G4double trunk_X = -0.5*(labWidth - trunkDepth);
479 G4double trunk_Y = 0.0*m;
480 G4double trunk_Z = -0.5*(labHeight - trunkHeight);
481
482 trunk_phys = new G4PVPlacement
483 (0, G4ThreeVector(trunk_X, trunk_Y, trunk_Z), "trunk_phys",
484 trunk_log, lab_phys, false, 0);
485
486 G4double trunkinside_X = -0.5*(trunkDepth - trunk_insideDepth);
487 G4double trunkinside_Y = 0.0*m;
488 G4double trunkinside_Z = -0.5*(trunkHeight - trunk_insideHeight);
489
490 trunk_inside_phys = new G4PVPlacement
491 (0, G4ThreeVector(trunkinside_X, trunkinside_Y, trunkinside_Z),
492 "trunk_inside_phys",trunk_inside_log, trunk_phys, false, 0);
493
494 trunk_log->SetVisAttributes(desk_vat);
495 trunk_inside_log->SetVisAttributes(window_vat);
496
497 // *****************
498 // desk4,5,6 (actually 4 with multi-place idx) LHS with cupboards underneath:
499
500 G4double desk4Depth = 79.0*cm; //X
501 G4double desk4Width = 79.0*cm; //Y
502 G4double desk4Height = desk1Height; //Z
503
504 G4double desk4_insideDepth = desk4Depth - 2.*deskThick;
505 G4double desk4_insideWidth = desk4Width - 2.*deskThick;
506 G4double desk4_insideHeight = desk4Height - 2.*deskThick;
507
508 //nb: desk orientation is sideways because they are lined along the wall
509 G4Box* desk4_box = new G4Box
510 ("desk4_box", 0.5*desk4Depth, 0.5*desk4Width, 0.5*desk4Height);
511 G4Box* desk4_inside_box = new G4Box
512 ("desk4_inside_box", 0.5*desk4_insideDepth, 0.5*desk4_insideWidth,
513 0.5*desk4_insideHeight);
514 G4Box* desk4_door_box = new G4Box
515 ("desk4_door_box", 0.5*deskThick+1.0*nanometer, 0.45*desk4_insideWidth,
516 0.5*desk4_insideHeight);
517// ("desk4_door_box", 0.5*deskThick, 0.45*desk4_insideWidth,
518// 0.5*desk4_insideHeight);
519
520 G4SubtractionSolid* desk4_frame = new G4SubtractionSolid
521 ("desk4_frame", desk4_box, desk4_inside_box, G4Transform3D
522 (rotMatrixCupboard, G4ThreeVector(0.,0.,0.)));
523 G4SubtractionSolid* desk4_sol = new G4SubtractionSolid
524 ("desk4_sol", desk4_frame, desk4_door_box, G4Transform3D
525 (rotMatrixCupboard, G4ThreeVector
526 (0.5*(desk4_insideDepth+deskThick),0.,0.)));
527
528 desk4_log = new G4LogicalVolume(desk4_sol, desk_mat, "desk4_log");
529
530 desk_X = -0.5*(labWidth - desk4Depth) + trunkDepth;
531 desk_Y = -(0.5*(labLength - desk4Width) - 5.0*cm);
532 desk_Z = 0.5*(desk4Height - labHeight);
533
534 G4double crateWidth = 60.0*cm; //Y
535 G4double crate_Y = 0.;
536
537 G4RotationMatrix rotMatrixDesk4;
538 rotMatrixDesk4.rotateZ(0.0*deg);
539
540 for (G4int j=0; j<3; j++)
541 {
542 if( j == 2)
543 {
544 desk_Y += crateWidth;
545 crate_Y = desk_Y - 0.5*(desk4Width + crateWidth);
546 }
547 desk4_phys = new G4PVPlacement
548 (G4Transform3D(rotMatrixDesk4, G4ThreeVector(desk_X, desk_Y, desk_Z)),
549 "desk4_phys", desk4_log, lab_phys, false, j);
550 desk_Y += desk4Width+2.0*cm;
551 }
552
553 desk4_log->SetVisAttributes(desk_vat);
554
555 // *****************
556 // aluminium crate rack:
557
558 G4double crateDepth = 64.0*cm; //X
559 // G4double crateWidth = 60.0*cm; //Y - moved above...........
560 G4double crateHeight = 128.0*cm; //Z
561 G4double crateThick = 3.0*cm;
562
563 G4double crate_insideDepth = crateDepth - 2.*crateThick;
564 G4double crate_insideWidth = crateWidth - 2.*crateThick;
565 G4double crate_insideHeight = crateHeight - 2.*crateThick;
566
567 //nb: crate orientation is sideways because they are lined along the wall
568 G4Box* crate_box = new G4Box
569 ("crate_box", 0.5*crateDepth, 0.5*crateWidth, 0.5*crateHeight);
570 G4Box* crate_inside_box = new G4Box
571 ("crate_inside_box", 0.5*crate_insideDepth, 0.5*crate_insideWidth,
572 0.5*crate_insideHeight);
573 G4Box* crate_front_box = new G4Box
574 ("crate_front_box", 0.5*crateThick+1.0*nanometer, 0.5*crate_insideWidth,
575 0.5*crate_insideHeight);
576
577 G4SubtractionSolid* crate_frame = new G4SubtractionSolid
578 ("crate_frame", crate_box, crate_inside_box, G4Transform3D
579 (rotMatrixCupboard, G4ThreeVector(0.,0.,0.)));
580 G4SubtractionSolid* crate_sol = new G4SubtractionSolid
581 ("crate_sol", crate_frame, crate_front_box, G4Transform3D
582 (rotMatrixCupboard, G4ThreeVector
583 (0.5*(crate_insideDepth+crateThick),0.,0.)));
584
585 crate_log = new G4LogicalVolume(crate_sol, crate_mat, "crate_log");
586
587 G4double crate_X = -0.5*(labWidth - crateDepth) + trunkDepth;
588 // crate_Y defined previously (by desk spacing.......)
589 G4double crate_Z = 0.5*(crateHeight - labHeight);
590
591 crate_phys = new G4PVPlacement
592 (0, G4ThreeVector(crate_X, crate_Y, crate_Z), "crate_phys",
593 crate_log, lab_phys, false, 0);
594
595 G4VisAttributes* crate_vat= new G4VisAttributes(grey);
596 crate_vat->SetVisibility(true);
597 crate_vat->SetForceSolid(true);
598 crate_log->SetVisAttributes(crate_vat);
599
600// clean room desks: ****************************************************
601
602// first oblong desk (type "3"):
603 desk_X = -0.5*(labWidth - desk3Width) + 50.0*cm;
604 desk_Y = 0.5*(labLength - desk3Width - 30.0*cm);
605 desk_Z = 0.5*(desk4Height - labHeight);
606
607 G4RotationMatrix rotMatrixCleanDesk;
608 rotMatrixCleanDesk.rotateZ(90.0*deg);
609
610 desk3_phys = new G4PVPlacement
611 (G4Transform3D
612 (rotMatrixCleanDesk,G4ThreeVector(desk_X, desk_Y, desk_Z)),
613 "desk3_phys", desk3_log, lab_phys, false, 1);
614
615// square desk (type "4"):
616
617 desk_X += 0.5*desk3Width + 0.5*desk4Width; // rotated hence Width
618
619 rotMatrixCleanDesk.rotateZ(-180.0*deg);
620 desk4_phys = new G4PVPlacement
621 (G4Transform3D
622 (rotMatrixCleanDesk, G4ThreeVector(desk_X, desk_Y, desk_Z)),
623 "desk4_phys", desk4_log, lab_phys, false, 3);
624
625
Note: See TracBrowser for help on using the repository browser.