source: trunk/examples/advanced/cosmicray_charging/src/LISAInterferometerAssembly.icc@ 1036

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

update

File size: 30.2 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// * *
28// * Cosmicray_charging advanced example for Geant4 *
29// * (adapted simulation of test-mass charging in the LISA mission) *
30// * *
31// * Henrique Araujo (h.araujo@imperial.ac.uk) & Peter Wass *
32// * Imperial College London *
33// * *
34// * LISADetectorConstruction class *
35// * *
36// ********************************************************************
37//
38// HISTORY
39// 22/02/2004: migrated from LISA-V04
40// 24/11/2004: migrated to cmath
41// 24/11/2004: inner elec boxes made invisible
42// 24/11/2004: tweaked TelPriMir_phys (17 to 18mm) to avoid solid problem
43// 24/11/2004: G4Torus in SupportRing_sol still problematic!
44// 08/12/2005: removed compilation warnings
45//
46// ********************************************************************
47
48
49//***************************************************************************
50// Interferometer Assembly
51//***************************************************************************
52// Payload Shield (Y Tube)
53// Telescope Light Shields
54// Telescope Electronics Mounting
55// Telescope Mirrors Mounting
56// Telescope Actuator Mechanism
57// Optical Bench Mounting
58// Optical Bench
59//***************************************************************************
60
61
62
63 //***************************************************************************
64 // Payload Shield
65 //***************************************************************************
66
67 // Y-tube
68 G4double YTube_dia = 400.*mm;
69 G4double YTube_thi = 5.*mm;
70 G4double arm1_len = 900.*mm;
71 G4double arm2_len = 900.*mm;
72 G4double arm3_len = 900.*mm;
73 // G4double YTube_xoff = -800.*mm;
74 G4double tune_x = 800.*mm;
75 G4double tune_y = 250.*mm;
76
77 // outer volumes
78 G4Tubs* arm1_o_sol =
79 new G4Tubs("arm1_o_sol", 0., 0.5*YTube_dia, 0.5*arm1_len, 0., 360.*deg);
80 G4Tubs* arm2_o_sol =
81 new G4Tubs("arm2_o_sol", 0., 0.5*YTube_dia, 0.5*arm2_len, 0., 360.*deg);
82 G4Tubs* arm3_o_sol =
83 new G4Tubs("arm3_o_sol", 0., 0.5*YTube_dia, 0.5*arm3_len, 0., 360.*deg);
84 G4RotationMatrix ytube_rot1; ytube_rot1.rotateY(30.*deg);
85 G4UnionSolid* uni1_o_sol = new G4UnionSolid("uni1_o_sol", arm1_o_sol,
86 arm2_o_sol, G4Transform3D(ytube_rot1, G4ThreeVector(+tune_y,0,tune_x)));
87 G4RotationMatrix ytube_rot2; ytube_rot2.rotateY(-30.*deg);
88 G4UnionSolid* uni2_o_sol = new G4UnionSolid("uni2_o_sol", uni1_o_sol,
89 arm3_o_sol, G4Transform3D(ytube_rot2, G4ThreeVector(-tune_y,0,tune_x)));
90 G4LogicalVolume* arms_o_log =
91 new G4LogicalVolume(uni2_o_sol, CFRP, "arms_o_log");
92 G4RotationMatrix ytube_rot3;
93 ytube_rot3.rotateX(90.*deg); ytube_rot3.rotateZ(90.*deg);
94 G4VPhysicalVolume* arms_o_phys;
95 arms_o_phys = new G4PVPlacement
96 (G4Transform3D(ytube_rot3, spacecraft_pos + G4ThreeVector(YTube_xoff,0,0)),
97 "arms_o_phys", arms_o_log, wld_phys, false, 0);
98 arms_o_log->SetVisAttributes(yellow_vat);
99 // inner volumes
100 G4Tubs* arm1_i_sol = new G4Tubs("arm1_i_sol", 0., 0.5*YTube_dia-YTube_thi,
101 0.5*arm1_len, 0.*deg, 360.*deg);
102 G4Tubs* arm2_i_sol = new G4Tubs("arm2_i_sol", 0., 0.5*YTube_dia-YTube_thi,
103 0.5*arm2_len, 0.*deg, 360.*deg);
104 G4Tubs* arm3_i_sol = new G4Tubs("arm3_i_sol", 0., 0.5*YTube_dia-YTube_thi,
105 0.5*arm3_len, 0.*deg, 360.*deg);
106 G4UnionSolid* uni1_i_sol = new G4UnionSolid("uni1_i_sol", arm1_i_sol,
107 arm2_i_sol, G4Transform3D(ytube_rot1, G4ThreeVector(+tune_y,0,tune_x)));
108 G4UnionSolid* uni2_i_sol = new G4UnionSolid("uni2_i_sol", uni1_i_sol,
109 arm3_i_sol, G4Transform3D(ytube_rot2, G4ThreeVector(-tune_y,0,tune_x)));
110 G4LogicalVolume* arms_i_log =
111 new G4LogicalVolume(uni2_i_sol, vacuum, "arms_i_log");
112 G4VPhysicalVolume* arms_i_phys;
113 arms_i_phys = new G4PVPlacement(0, G4ThreeVector(0,0,0),
114 "arms_i_phys", arms_i_log, arms_o_phys, false, 0);
115 arms_i_log->SetVisAttributes(yellow_vat);
116
117
118
119 // Telescope Light Shields: ~5.5 kg
120 G4double TelShield_len = 730.*mm;
121 G4double TelShield_dia = 370.*mm;
122 G4double TelShield_thi = 5.*mm;
123 G4double TelShield_yoff = 663.*mm;
124 G4double TelShield_xoff = 1511.*mm;
125 G4double TelShieldCutout_len = 2000.*mm;
126 G4double TelShieldCutout_off = 1000.*mm;
127
128 G4Tubs* TelShield_tub = new G4Tubs("TelShield_sol", 0.5*TelShield_dia -
129 TelShield_thi, 0.5*TelShield_dia, 0.5*TelShield_len, 0., 360.*deg);
130 G4Box* TelShieldCutout_box = new G4Box("TelShieldCutout_box",
131 0.5*TelShieldCutout_len, 0.5*TelShieldCutout_len, 0.5*TelShieldCutout_len);
132 G4RotationMatrix ytube_rot4; ytube_rot4.rotateX(-30.*deg);
133 G4SubtractionSolid* TelShield_sol = new G4SubtractionSolid("TelShield_sol",
134 TelShield_tub, TelShieldCutout_box, G4Transform3D(ytube_rot4,
135 G4ThreeVector(0,0,-0.5*TelShield_len-TelShieldCutout_off)));
136 G4LogicalVolume* TelShield_log =
137 new G4LogicalVolume(TelShield_sol, CFRP, "TelShield_log");
138 G4VPhysicalVolume* TelShield_phys;
139 G4RotationMatrix telsh_rot1; telsh_rot1.rotateY(-90.*deg);
140 telsh_rot1.rotateX(90.*deg); telsh_rot1.rotateZ(-30.*deg);
141 TelShield_phys = new G4PVPlacement(G4Transform3D(telsh_rot1,
142 spacecraft_pos+G4ThreeVector(YTube_xoff+TelShield_xoff,-TelShield_yoff,0)),
143 "TelShield_phys", TelShield_log, wld_phys, false, 0);
144 G4RotationMatrix telsh_rot2; telsh_rot2.rotateY(-90.*deg);
145 telsh_rot2.rotateX(90.*deg); telsh_rot2.rotateZ(+30.*deg);
146 TelShield_phys = new G4PVPlacement(G4Transform3D(telsh_rot2,
147 spacecraft_pos+G4ThreeVector(YTube_xoff+TelShield_xoff,+TelShield_yoff,0)),
148 "TelShield_phys", TelShield_log, wld_phys, false, 1);
149 TelShield_log->SetVisAttributes(green_vat);
150
151
152
153 // Telescope actuator: 1.8 kg
154 // includes mass of Al arms
155 G4double TelActuatorCyl_dia = 76.*mm;
156 G4double TelActuatorCyl_len = 147.*mm;
157 // Actuator mount: 0.45 kg
158 G4double TelActuatorMount_hei = 147.*mm;
159 G4double TelActuatorMount_wid = 120.*mm;
160 G4double TelActuatorMount_thi = 7.5*mm;
161 G4ThreeVector TelActuator_pos1(-100.*mm,0.,550.*mm);
162 G4ThreeVector TelActuator_pos2( 100.*mm,0.,550.*mm);
163
164 // Telescope actuator 1: cylinder
165 G4Tubs* TelActuatorCyl_sol = new G4Tubs("TelActuatorCyl_sol",
166 0, 0.5*TelActuatorCyl_dia, 0.5*TelActuatorCyl_len, 0., 360.*deg);
167 G4LogicalVolume* TelActuatorCyl_log =
168 new G4LogicalVolume(TelActuatorCyl_sol, Al6061, "TelActuatorCyl_log");
169 G4RotationMatrix act_rot1; act_rot1.rotateY(60.*deg);
170 G4VPhysicalVolume* TelActuatorCyl_phys;
171 TelActuatorCyl_phys = new G4PVPlacement(G4Transform3D(act_rot1,
172 TelActuator_pos1), "TelActuatorCyl_phys", TelActuatorCyl_log,
173 arms_i_phys, false, 0);
174 TelActuatorCyl_log->SetVisAttributes(sol_red_vat);
175 // Telescope actuator 1: mount
176 G4Box* TelActuatorMount_box = new G4Box("TelActuatorMount_box",
177 .5*TelActuatorMount_wid, .5*TelActuatorMount_hei, .5*TelActuatorMount_thi);
178 G4SubtractionSolid* TelActuatorMount_sol = new G4SubtractionSolid
179 ("TelActuatorMount_sol", TelActuatorMount_box, TelActuatorCyl_sol,
180 0, G4ThreeVector(0,0.5*TelActuatorMount_hei,0));
181 G4LogicalVolume* TelActuatorMount_log =
182 new G4LogicalVolume(TelActuatorMount_sol, TiAlloy, "TelActuatorMount_log");
183 G4VPhysicalVolume* TelActuatorMount_phys;
184 TelActuatorMount_phys = new G4PVPlacement(G4Transform3D(act_rot1,
185 TelActuator_pos1 + G4ThreeVector(0,-0.5*TelActuatorMount_hei-2.*mm,0.)),
186 "TelActuatorMount_phys", TelActuatorMount_log, arms_i_phys, false, 0);
187 TelActuatorMount_log->SetVisAttributes(sol_yellow_vat);
188 // Telescope actuator 2
189 G4RotationMatrix act_rot2; act_rot2.rotateY(-60.*deg);
190 TelActuatorCyl_phys = new G4PVPlacement(G4Transform3D
191 (act_rot2, TelActuator_pos2), "TelActuatorCyl_phys",
192 TelActuatorCyl_log, arms_i_phys, false, 1);
193 TelActuatorMount_phys = new G4PVPlacement(G4Transform3D(act_rot2,
194 TelActuator_pos2 + G4ThreeVector(0,-0.5*TelActuatorMount_hei-2.*mm,0.)),
195 "TelActuatorMount_phys", TelActuatorMount_log, arms_i_phys, false, 1);
196
197
198
199
200 //***************************************************************************
201 // Telescope / GRS Assembly (in dummy wrapper volume)
202 //***************************************************************************
203
204
205 // Dummy (assembly) box for telescope
206 G4double TelBox_len = 620.*mm;
207 G4double TelBox_dia = 370.*mm;
208 // Dummy (assembly) box for telescope
209 G4Tubs* TelBox_sol =
210 new G4Tubs("TelBox_sol", 0., 0.5*TelBox_dia, 0.5*TelBox_len, 0., 360.*deg);
211 G4LogicalVolume* TelBox_log =
212 new G4LogicalVolume(TelBox_sol, vacuum, "TelBox_log");
213 G4VPhysicalVolume* TelBox_phys;
214 TelBox_phys =
215 new G4PVPlacement(G4Transform3D(tel_rot1, tel_pos1),
216 "TelBox1_phys", TelBox_log, arms_i_phys, false, 0);
217 TelBox_phys =
218 new G4PVPlacement(G4Transform3D(tel_rot2, tel_pos2),
219 "TelBox2_phys", TelBox_log, arms_i_phys, false, 1);
220 // TelBox_log->SetVisAttributes(white_vat);
221 TelBox_log->SetVisAttributes(G4VisAttributes::Invisible);
222
223
224 // all z-offsets referred to TM centre
225 // change OpticalBench_off to move telescope components along z-axis
226
227 // Optical Bench: 4.41 kg
228 G4double OpticalBench_len = 350.0*mm;
229 G4double OpticalBench_wid = 200.0*mm;
230 G4double OpticalBench_thi = 40.0*mm;
231 // Sensor Housing as in Solid Model
232 // G4double OpticalBenchCutout_len = 170.0*mm + 1.*mm;
233 // G4double OpticalBenchCutout_wid = 120.0*mm + 1.*mm;
234 // Sensor Housing to fit LTP Sensor
235 G4double OpticalBenchCutout_dia = 126.0*mm;
236 G4double OpticalBenchCutout_thi = 100.0*mm;
237 // G4double OpticalBench_off = 0.0*mm;
238
239 // Optical Bench
240 G4Box* OpticalBench_box = new G4Box("OpticalBench_box",
241 0.5*OpticalBench_wid, 0.5*OpticalBench_thi, 0.5*OpticalBench_len);
242 // old design cutout
243 // G4Box* OpticalBenchCutout_box = new G4Box("OpticalBenchCutout_box",
244 // 0.5*OpticalBenchCutout_wid, 0.5*OpticalBenchCutout_thi,
245 // 0.5*OpticalBenchCutout_len);
246 // LTP design cutout
247 G4Tubs* OpticalBenchCutout_box = new G4Tubs("OpticalBenchCutout_box",
248 0., 0.5*OpticalBenchCutout_dia, 0.5*OpticalBenchCutout_thi, 0., 360.*deg);
249 G4RotationMatrix cutout_rot; cutout_rot.rotateX(90.*deg);
250 G4SubtractionSolid* OpticalBench_sol = new G4SubtractionSolid
251 ("OpticalBench_sol", OpticalBench_box, OpticalBenchCutout_box,
252 G4Transform3D(cutout_rot, G4ThreeVector()));
253 G4LogicalVolume* OpticalBench_log =
254 new G4LogicalVolume(OpticalBench_sol, ULEglass, "OpticalBench_log");
255 G4VPhysicalVolume* OpticalBench_phys;
256 OpticalBench_phys=
257 new G4PVPlacement(0, G4ThreeVector(0,0, OpticalBench_off),
258 "OpticalBench_phys", OpticalBench_log, TelBox_phys, false, 0);
259 OpticalBench_log->SetVisAttributes(sol_white_vat);
260
261
262 // Support ring: 0.99 kg
263 G4double SupportRing_od = 359.*mm;
264 G4double SupportRing_dia_o = 23.*mm;
265 G4double SupportRing_dia_i = 10.*mm;
266 // Support yokes: 0.12 kg
267 // also accounts for pivot mass
268 G4double SupportYoke_thi = 5.*mm;
269 G4double SupportYoke_dia = 15.*mm;
270 G4double SupportYoke_len = 170.*mm;
271 G4double SupportYoke_xoff = 122.*mm;
272 G4double SupportYoke_yoff = 50.*mm;
273 G4double SupportYoke_zoff = 90.*mm;
274
275 // Support ring
276 G4Torus* SupportRing_sol = new G4Torus("SupportRing_sol",
277 0.5*SupportRing_dia_i,0.5*SupportRing_dia_o,
278 0.5*(SupportRing_od-SupportRing_dia_o), 0.,360.*deg);
279 G4LogicalVolume* SupportRing_log =
280 new G4LogicalVolume(SupportRing_sol, ULEglass, "SupportRing_log");
281 G4VPhysicalVolume* SupportRing_phys;
282 SupportRing_phys=
283 new G4PVPlacement(0, G4ThreeVector(0.,0.,OpticalBench_off),
284 "SupportRing_phys", SupportRing_log, TelBox_phys, false, 0);
285 SupportRing_log->SetVisAttributes(sol_red_vat);
286 // Support yokes
287 G4Tubs* SupportYoke_sol = new G4Tubs("SupportYoke_sol", 0.5*SupportYoke_dia
288 - SupportYoke_thi, 0.5*SupportYoke_dia, 0.5*SupportYoke_len, 0., 360.*deg);
289 G4LogicalVolume* SupportYoke_log =
290 new G4LogicalVolume(SupportYoke_sol, TiAlloy, "SupportYoke_log");
291 SupportYoke_log->SetVisAttributes(sol_red_vat);
292 G4VPhysicalVolume* SupportYoke_phys;
293 // upper
294 G4RotationMatrix tel_rot3;
295 tel_rot3.rotateX(+30.*deg); tel_rot3.rotateY(-10.*deg);
296 SupportYoke_phys = new G4PVPlacement(G4Transform3D(tel_rot3,
297 G4ThreeVector(+SupportYoke_xoff, +SupportYoke_yoff ,
298 OpticalBench_off + SupportYoke_zoff)), "SupportYoke_phys",
299 SupportYoke_log, TelBox_phys, false, 0);
300 G4RotationMatrix tel_rot4;
301 tel_rot4.rotateX(+30.*deg); tel_rot4.rotateY(+10.*deg);
302 SupportYoke_phys = new G4PVPlacement(G4Transform3D(tel_rot4,
303 G4ThreeVector(-SupportYoke_xoff, +SupportYoke_yoff ,
304 OpticalBench_off + SupportYoke_zoff)), "SupportYoke_phys",
305 SupportYoke_log, TelBox_phys, false, 1);
306 G4RotationMatrix tel_rot5;
307 tel_rot5.rotateX(-30.*deg); tel_rot5.rotateY(+10.*deg);
308 SupportYoke_phys = new G4PVPlacement(G4Transform3D(tel_rot5,
309 G4ThreeVector(+SupportYoke_xoff, +SupportYoke_yoff ,
310 OpticalBench_off - SupportYoke_zoff)), "SupportYoke_phys",
311 SupportYoke_log, TelBox_phys, false, 2);
312 G4RotationMatrix tel_rot6;
313 tel_rot6.rotateX(-30.*deg); tel_rot6.rotateY(-10.*deg);
314 SupportYoke_phys = new G4PVPlacement(G4Transform3D(tel_rot6,
315 G4ThreeVector(-SupportYoke_xoff, +SupportYoke_yoff ,
316 OpticalBench_off - SupportYoke_zoff)), "SupportYoke_phys",
317 SupportYoke_log, TelBox_phys, false, 3);
318 // lower
319 G4RotationMatrix tel_rot7;
320 tel_rot7.rotateX(-30.*deg); tel_rot7.rotateY(-10.*deg);
321 SupportYoke_phys = new G4PVPlacement(G4Transform3D(tel_rot7,
322 G4ThreeVector(+SupportYoke_xoff, -SupportYoke_yoff ,
323 OpticalBench_off + SupportYoke_zoff)), "SupportYoke_phys",
324 SupportYoke_log, TelBox_phys, false, 4);
325 G4RotationMatrix tel_rot8;
326 tel_rot8.rotateX(-30.*deg); tel_rot8.rotateY(+10.*deg);
327 SupportYoke_phys = new G4PVPlacement(G4Transform3D(tel_rot8,
328 G4ThreeVector(-SupportYoke_xoff, -SupportYoke_yoff ,
329 OpticalBench_off + SupportYoke_zoff)), "SupportYoke_phys",
330 SupportYoke_log, TelBox_phys, false, 5);
331 G4RotationMatrix tel_rot9;
332 tel_rot9.rotateX(+30.*deg); tel_rot9.rotateY(+10.*deg);
333 SupportYoke_phys = new G4PVPlacement(G4Transform3D(tel_rot9,
334 G4ThreeVector(+SupportYoke_xoff, -SupportYoke_yoff ,
335 OpticalBench_off - SupportYoke_zoff)), "SupportYoke_phys",
336 SupportYoke_log, TelBox_phys, false, 6);
337 G4RotationMatrix tel_rot10;
338 tel_rot10.rotateX(+30.*deg); tel_rot10.rotateY(-10.*deg);
339 SupportYoke_phys = new G4PVPlacement(G4Transform3D(tel_rot10,
340 G4ThreeVector(-SupportYoke_xoff, -SupportYoke_yoff ,
341 OpticalBench_off - SupportYoke_zoff)), "SupportYoke_phys",
342 SupportYoke_log, TelBox_phys, false, 7);
343
344
345
346 // Shield tube: 3.66 kg
347 G4double ShieldTube_len = 500.*mm;
348 G4double ShieldTube_thi = 4.*mm;
349 G4double ShieldTube_dia = 360.*mm + 2*ShieldTube_thi;
350 G4double ShieldTube_off = 60.*mm;
351
352 // Shield tube
353 G4Tubs* ShieldTube_sol = new G4Tubs("ShieldTube_sol",
354 0.5*ShieldTube_dia-ShieldTube_thi, 0.5*ShieldTube_dia,
355 0.5*ShieldTube_len, 0., 360.*deg);
356 G4LogicalVolume* ShieldTube_log =
357 new G4LogicalVolume(ShieldTube_sol, CFRP, "ShieldTube_log");
358 G4VPhysicalVolume* ShieldTube_phys;
359 ShieldTube_phys = new G4PVPlacement(0,
360 G4ThreeVector(0,0,OpticalBench_off-ShieldTube_off),
361 "ShieldTube_phys", ShieldTube_log, TelBox_phys, false, 0);
362 ShieldTube_log->SetVisAttributes(G4VisAttributes::Invisible);
363
364
365
366 // Mounting rings: 0.78 kg
367 G4double TelRing_dia = 360.0*mm;
368 G4double TelRing_thi = 15.0*mm;
369 G4double TelRing_len = 30.0*mm;
370 G4double TelRing_off1 = 0.5*OpticalBench_len - 0.5*TelRing_len + 0.5*mm;
371 G4double TelRing_off2 = 0.5*OpticalBench_len;
372
373 // Mounting rings
374 G4Tubs* TelRing_sol =
375 new G4Tubs("TelRing_sol", 0.5*TelRing_dia-TelRing_thi, 0.5*TelRing_dia,
376 0.5*TelRing_len, 0., 360.*deg);
377 G4LogicalVolume* TelRing_log =
378 new G4LogicalVolume(TelRing_sol, CFRP, "TelRing_log");
379 TelRing_log->SetVisAttributes(sol_white_vat);
380 G4VPhysicalVolume* TelRing_phys;
381 TelRing_phys = new G4PVPlacement(0, G4ThreeVector
382 (0,0,OpticalBench_off - TelRing_off1),
383 "TelRing_phys", TelRing_log, TelBox_phys, false, 0);
384 // Electronics mounting ring
385 TelRing_phys = new G4PVPlacement(0, G4ThreeVector
386 (0,0,OpticalBench_off + TelRing_off2),
387 "TelRing_phys", TelRing_log, TelBox_phys, false, 1);
388
389
390
391 // Shield/Mounting Plate: 1.54 kg
392 G4double ShieldPlate_dia = 350.*mm;
393 G4double ShieldPlate_thi = 10.*mm;
394 G4double ShieldPlate_off = TelRing_off2 +
395 0.5*(TelRing_len+ShieldPlate_thi) + 20.0*mm;
396 // Shield/Mounting Plate
397 G4Tubs* ShieldPlate_sol = new G4Tubs("ShieldPlate_sol",
398 0., 0.5*ShieldPlate_dia, 0.5*ShieldPlate_thi, 0., 360.*deg);
399 G4LogicalVolume* ShieldPlate_log =
400 new G4LogicalVolume(ShieldPlate_sol, CFRP, "ShieldPlate_log");
401 G4VPhysicalVolume* ShieldPlate_phys;
402 ShieldPlate_phys = new G4PVPlacement(0,
403 G4ThreeVector(0,0,OpticalBench_off + ShieldPlate_off),
404 "ShieldPlate_phys", ShieldPlate_log, TelBox_phys, false, 0);
405 ShieldPlate_log->SetVisAttributes(sol_white_vat);
406
407
408
409 // Telescope electronics boxes: 0.36 kg
410 G4double TelElecBox_wid = 100.0*mm;
411 G4double TelElecBox_len = 90.0*mm;
412 G4double TelElecBox_hei = 180.0*mm;
413 G4double TelElecBoxes_sep = 150.0*mm;
414 G4double TelElecBoxes_off = ShieldPlate_off +
415 0.5*(ShieldPlate_thi + TelElecBox_len);
416
417 // Telescope electronics boxes
418 G4Box* TelElecBox_sol = new G4Box("TelElecBox_sol", 0.5*TelElecBox_wid,
419 0.5*TelElecBox_hei, 0.5*TelElecBox_len);
420 G4LogicalVolume* TelElecBox_log =
421 new G4LogicalVolume(TelElecBox_sol, Al6061, "TelElecBox_log");
422 G4VPhysicalVolume* TelElecBox_phys;
423 // Interferometer electronics
424 TelElecBox_phys = new G4PVPlacement(0,
425 G4ThreeVector(-0.5*TelElecBoxes_sep, 0,OpticalBench_off+TelElecBoxes_off),
426 "TelElecBox_phys", TelElecBox_log, TelBox_phys, false, 0);
427 TelElecBox_log->SetVisAttributes(sol_red_vat);
428 // Accelerator electronics
429 TelElecBox_phys = new G4PVPlacement(0,
430 G4ThreeVector(0.5*TelElecBoxes_sep, 0, OpticalBench_off+TelElecBoxes_off),
431 "TelElecBox_phys", TelElecBox_log, TelBox_phys, false, 1);
432 // Each box is made from solid Al6061 from which a volume
433 // s times smaller is removed to match assigned mass;
434 G4double s = std::pow(1.-0.36/(2.70*TelElecBox_wid*TelElecBox_hei
435 *TelElecBox_len)*1.E6,1./3.);
436 G4Box* TelElecBoxIn_sol = new G4Box("TelElecBoxIn_sol", s*0.5*TelElecBox_wid,
437 s*0.5*TelElecBox_hei, s*0.5*TelElecBox_len);
438 G4LogicalVolume* TelElecBoxIn_log =
439 new G4LogicalVolume(TelElecBoxIn_sol, vacuum, "TelElecBoxIn_log");
440 G4VPhysicalVolume* TelElecBoxIn_phys;
441 TelElecBoxIn_phys = new G4PVPlacement
442 (0, 0, "TelElecBoxIn_i", TelElecBoxIn_log, TelElecBox_phys, false, 0);
443 TelElecBoxIn_log->SetVisAttributes(G4VisAttributes::Invisible);
444
445
446
447 // Front thermal shield: 0.15 kg
448 G4double FrontThermalShield_dia = 350.*mm;
449 G4double FrontThermalShield_thi = 1.*mm;
450 G4double FrontThermalShield_hol = 25.*mm;
451 G4double FrontThermalShield_roff = 30.*mm;
452 G4double FrontThermalShield_off = TelRing_off1 + 0.5*TelRing_len
453 + 0.5*FrontThermalShield_thi + 20.0*mm;
454
455 // Front thermal shield
456 G4Tubs* FrontThermalShield_tub = new G4Tubs("FrontThermalShield_tub",
457 0., 0.5*FrontThermalShield_dia, 0.5*FrontThermalShield_thi, 0., 360.*deg);
458 G4Tubs* FrontThermalShieldCutout_tub =
459 new G4Tubs("FrontThermalShieldCutout_tub",
460 0., 0.5*FrontThermalShield_hol, 2*FrontThermalShield_thi, 0., 360.*deg);
461 G4SubtractionSolid* FrontThermalShield_sol =
462 new G4SubtractionSolid("FrontThermalShield_sol", FrontThermalShield_tub,
463 FrontThermalShieldCutout_tub, G4Transform3D(G4RotationMatrix(),
464 G4ThreeVector(0,FrontThermalShield_roff,0)));
465 G4LogicalVolume* FrontThermalShield_log =
466 new G4LogicalVolume(FrontThermalShield_sol, CFRP,
467 "FrontThermalShield_log");
468 G4VPhysicalVolume* FrontThermalShield_phys;
469 FrontThermalShield_phys = new G4PVPlacement
470 (0, G4ThreeVector(0, 0, OpticalBench_off-FrontThermalShield_off),
471 "FrontThermalShield_phys", FrontThermalShield_log, TelBox_phys, false, 0);
472 FrontThermalShield_log->SetVisAttributes(sol_white_vat);
473
474
475
476 //***************************************************************************
477 // Telescope assembly
478 //***************************************************************************
479
480
481 // Primary mirror mount: ~1.9 kg
482 G4double TelPriMirMount_rad = 420.*mm;
483 G4double TelPriMirMount_yoff = 220.*mm;
484 G4double TelPriMirMount_thi = 13.*mm;
485 G4double TelPriMirMount_off = FrontThermalShield_off +
486 0.5*TelPriMirMount_thi + 20.*mm;
487 G4double TelPriMirMountCutout0_dia = 350.*mm;
488 G4double TelPriMirMountCutout0_yoff = 220.*mm;
489 G4double TelPriMirMountCutout1_dia = 60.*mm;
490 G4double TelPriMirMountCutout1_yoff = 190.*mm;
491 G4double TelPriMirMountCutout2_dia = 46.*mm;
492 G4double TelPriMirMountCutout2_yoff = 367.*mm;
493
494 // Primary mirror mount
495 // full thickness assumed; material density is decreased to conserve mass
496 G4Tubs* TelPriMirMount_tub = new G4Tubs("TelPriMirMount_tub",
497 0, TelPriMirMount_rad, 0.5*TelPriMirMount_thi, -115.*deg, 50.*deg);
498 G4Tubs* TelPriMirMountCutout0_tub = new G4Tubs
499 ("TelPriMirMountCutout0_tub", 0.5*TelPriMirMountCutout0_dia,
500 0.8*TelPriMirMountCutout0_dia, TelPriMirMount_thi, 0., 360.*deg);
501 G4SubtractionSolid* TelPriMirMount_sol0 = new G4SubtractionSolid
502 ("TelPriMirMount_sol1", TelPriMirMount_tub, TelPriMirMountCutout0_tub,
503 G4Transform3D(G4RotationMatrix(),
504 G4ThreeVector(0.,-TelPriMirMountCutout0_yoff,0.)));
505 G4Tubs* TelPriMirMountCutout1_tub = new G4Tubs("TelPriMirMountCutout1_tub",
506 0, 0.5*TelPriMirMountCutout1_dia, TelPriMirMount_thi, 0.*deg, 360.*deg);
507 G4SubtractionSolid* TelPriMirMount_sol1 = new G4SubtractionSolid
508 ("TelPriMirMount_sol1", TelPriMirMount_sol0, TelPriMirMountCutout1_tub,
509 G4Transform3D(G4RotationMatrix(),
510 G4ThreeVector(0., -TelPriMirMountCutout1_yoff,0.)));
511 G4Tubs* TelPriMirMountCutout2_tub = new G4Tubs("TelPriMirMountCutout2_tub",
512 0, 0.5*TelPriMirMountCutout2_dia, TelPriMirMount_thi, 0.*deg, 360.*deg);
513 G4SubtractionSolid* TelPriMirMount_sol2 = new G4SubtractionSolid
514 ("TelPriMirMount_sol2", TelPriMirMount_sol1, TelPriMirMountCutout2_tub,
515 G4Transform3D(G4RotationMatrix(),
516 G4ThreeVector(0., -TelPriMirMountCutout2_yoff, 0.)));
517 G4LogicalVolume* TelPriMirMount_log =
518 new G4LogicalVolume(TelPriMirMount_sol2, Al6061, "TelPriMirMount_log");
519 G4VPhysicalVolume* TelPriMirMount_phys;
520 TelPriMirMount_phys = new G4PVPlacement(0,
521 G4ThreeVector(0.,TelPriMirMount_yoff, OpticalBench_off-TelPriMirMount_off),
522 "TelPriMirMount_phys", TelPriMirMount_log, TelBox_phys, false, 0);
523 TelPriMirMount_log->SetVisAttributes(sol_blue_vat);
524
525
526 // primary mirror: 2.03 kg
527 G4double TelPriMir_thi = 9.0*mm;
528 G4double TelPriMir_rad = 500.0*mm;
529 G4double TelPriMir_dia = 304.0*mm;
530 G4double TelPriMir_yoff = 30.0*mm;
531 G4double TelPriMirHol_dia = 35.0*mm;
532 G4double TelPriMirHol_thi = 5.0*mm;
533 G4double TelPriMirHol_len = 45.0*mm;
534 G4double TelPriMir_off = TelPriMirMount_off +
535 0.5*TelPriMirMount_thi +2.*mm;
536 // primary mirror: cylinder
537 G4Tubs* TelPriMirCyl_sol = new G4Tubs("TelPriMirCyl_sol",
538 0.5*TelPriMirHol_dia, 0.5*TelPriMirHol_dia+TelPriMirHol_thi,
539 0.5*TelPriMirHol_len, 0., 360.*deg);
540 G4LogicalVolume* TelPriMirCyl_log =
541 new G4LogicalVolume(TelPriMirCyl_sol, SiC, "TelPriMirCyl_log");
542 G4VPhysicalVolume* TelPriMirCyl_phys;
543 TelPriMirCyl_phys= new G4PVPlacement(0, G4ThreeVector
544 (0,TelPriMir_yoff,OpticalBench_off-TelPriMir_off+0.5*TelPriMirMount_thi),
545 "TelPriMirCyl_phys", TelPriMirCyl_log, TelBox_phys, false, 0);
546 TelPriMirCyl_log->SetVisAttributes(sol_green_vat);
547 // primary mirror: dish
548 G4Sphere* TelPriMir_sol =
549 new G4Sphere("TelPriMir_sol", TelPriMir_rad - TelPriMir_thi,
550 TelPriMir_rad, 0., 360.*deg,
551 std::atan(0.5*TelPriMirHol_dia/TelPriMir_rad),
552 std::atan(0.5*TelPriMir_dia/TelPriMir_rad) -
553 std::atan(0.5*TelPriMirHol_dia/TelPriMir_rad));
554 G4LogicalVolume* TelPriMir_log =
555 new G4LogicalVolume(TelPriMir_sol, SiC, "TelPriMir_log");
556 G4VPhysicalVolume* TelPriMir_phys;
557 TelPriMir_phys= new G4PVPlacement(0, G4ThreeVector
558 (0,TelPriMir_yoff, OpticalBench_off-TelPriMir_off-TelPriMir_rad-18.*mm),
559 "TelPriMir_phys", TelPriMir_log, TelBox_phys, false, 0);
560 TelPriMir_log->SetVisAttributes(sol_green_vat);
561
562
563
564 // *** NOTE ***
565 // Following items are NOT in TelBox_phys but in TelShield_phys
566
567 G4ThreeVector offset(0,0,0.5*TelShield_len);
568
569 // Telescope mast: 0.41 kg
570 G4double TelMast_thi = 2.0*mm;
571 G4double TelMast_dia = 44.0*mm;
572 G4double TelMast_len = 500.*mm;
573 G4double TelMast_off = 0.5*TelMast_len;
574 // Telescope mast
575 G4Tubs* TelMast_sol =
576 new G4Tubs("TelMast_sol", 0.5*TelMast_dia-TelMast_thi, 0.5*TelMast_dia,
577 0.5*TelMast_len, 0., 360.*deg);
578 G4LogicalVolume* TelMast_log =
579 new G4LogicalVolume(TelMast_sol, SiC, "TelMast_log");
580 G4VPhysicalVolume* TelMast_phys;
581 TelMast_phys= new G4PVPlacement(0, offset+G4ThreeVector
582 (0,-0.5*TelPriMir_dia - 0.5*TelMast_dia + TelPriMir_yoff, -TelMast_off),
583 "TelMastTel_phys", TelMast_log, TelShield_phys, false, 0);
584 TelMast_log->SetVisAttributes(sol_grey_vat);
585
586
587 // secondary mirror: 0.27 kg
588 G4double TelSecMir_dia = 40.0*mm;
589 G4double TelSecMir_len = 70.0*mm;
590 G4double TelSecMir_off = TelMast_off + 0.5*TelMast_len
591 - 0.5*TelSecMir_len + 10.*mm;
592 // secondary mirror
593 G4Tubs* TelSecMir_sol =
594 new G4Tubs("TelSecMir_sol", 0., 0.5*TelSecMir_dia,
595 0.5*TelSecMir_len, 0., 360.*deg);
596 G4LogicalVolume* TelSecMir_log =
597 new G4LogicalVolume(TelSecMir_sol, SiC, "TelSecMir_log");
598 G4VPhysicalVolume* TelSecMir_phys;
599 TelSecMir_phys= new G4PVPlacement
600 (0, offset+G4ThreeVector(0,TelPriMir_yoff, -TelSecMir_off),
601 "TelSecMir_phys", TelSecMir_log, TelShield_phys, false, 0);
602 TelSecMir_log->SetVisAttributes(sol_green_vat);
603
604
605
606 // secondary mirror holder: 0.35 kg
607 G4double TelSecHol_top = 20.0*mm;
608 G4double TelSecHol_bot = 60.0*mm;
609 G4double TelSecHol_thi = 5.0*mm;
610 G4double TelSecHolCap1_thi = 5.0*mm;
611 G4double TelSecHolCap1_len = TelSecHol_bot;
612 G4double TelSecHolCap2_thi = 5.0*mm;
613 G4double TelSecHolCap2_len = TelSecHol_top;
614 G4double TelSecHol_len = 0.5*(TelPriMir_dia-TelSecMir_dia)
615 - TelSecHolCap1_thi - TelSecHolCap2_thi;
616 // secondary mirror holder
617 G4Trap* TelSecHol_sol = new G4Trap("TelSecHol_sol",
618 TelSecHol_thi, TelSecHol_len,
619 TelSecHol_bot, TelSecHol_top);
620 G4RotationMatrix tel_rot11; tel_rot11.rotateZ(-90.*deg);
621 tel_rot11.rotateY(-90.*deg); tel_rot11.rotateX(-90.*deg);
622 G4LogicalVolume* TelSecHol_log =
623 new G4LogicalVolume(TelSecHol_sol, SiC, "TelSecHol_log");
624 G4VPhysicalVolume* TelSecHol_phys;
625 TelSecHol_phys= new G4PVPlacement(G4Transform3D
626 (tel_rot11, offset + G4ThreeVector(0,
627 TelPriMir_yoff-0.5*TelSecHol_len-0.5*TelSecMir_dia-TelSecHolCap2_thi,
628 -TelMast_off-0.5*TelMast_len+TelSecHol_top)),
629 "TelSecHol_phys", TelSecHol_log, TelShield_phys, false, 0);
630 TelSecHol_log->SetVisAttributes(sol_grey_vat);
631 // cap1
632 G4Tubs* TelSecHolCap1_sol =
633 new G4Tubs("TelSecHolCap1_sol", 0.5*TelMast_dia,
634 0.5*TelMast_dia+TelSecHolCap1_thi, 0.5*TelSecHolCap1_len, 0., 360.*deg);
635 G4LogicalVolume* TelSecHolCap1_log =
636 new G4LogicalVolume(TelSecHolCap1_sol, SiC, "TelSecHolCap1_log");
637 G4VPhysicalVolume* TelSecHolCap1_phys;
638 TelSecHolCap1_phys= new G4PVPlacement(0,
639 offset + G4ThreeVector(0,-0.5*TelPriMir_dia-0.5*TelMast_dia+TelPriMir_yoff,
640 -TelMast_off-0.5*TelMast_len+0.5*TelSecHol_bot),
641 "TelSecHolCap1_phys", TelSecHolCap1_log, TelShield_phys, false, 0);
642 TelSecHolCap1_log->SetVisAttributes(sol_grey_vat);
643 // cap2
644 G4Tubs* TelSecHolCap2_sol =
645 new G4Tubs("TelSecHolCap2_sol", 0.5*TelSecMir_dia,
646 0.5*TelSecMir_dia+TelSecHolCap2_thi, 0.5*TelSecHolCap2_len, 0., 360.*deg);
647 G4LogicalVolume* TelSecHolCap2_log =
648 new G4LogicalVolume(TelSecHolCap2_sol, SiC, "TelSecHolCap2_log");
649 G4VPhysicalVolume* TelSecHolCap2_phys;
650 TelSecHolCap2_phys= new G4PVPlacement(0,
651 offset + G4ThreeVector(0,TelPriMir_yoff,
652 -TelMast_off-0.5*TelMast_len+0.5*TelSecHol_top),
653 "TelSecHolCap2_phys", TelSecHolCap2_log, TelShield_phys, false, 0);
654 TelSecHolCap2_log->SetVisAttributes(sol_grey_vat);
655
656
657 // make structure invisible
658 // arms_o_log->SetVisAttributes(G4VisAttributes::Invisible);
659 // arms_i_log->SetVisAttributes(G4VisAttributes::Invisible);
660 // TelShield_log->SetVisAttributes(G4VisAttributes::Invisible);
661
662 // make structure solid
663 // arms_o_log->SetVisAttributes(sol_yellow_vat);
664 // arms_i_log->SetVisAttributes(yellow_vat);
665 // TelShield_log->SetVisAttributes(sol_green_vat);
666
667
668// ****************************************************************************
Note: See TracBrowser for help on using the repository browser.