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