| [807] | 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 | // ****************************************************************************
|
|---|