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

Last change on this file since 1309 was 807, checked in by garnier, 16 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.