| 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 | //
|
|---|
| 42 | // ********************************************************************
|
|---|
| 43 |
|
|---|
| 44 |
|
|---|
| 45 | //***************************************************************************
|
|---|
| 46 | // Support systems
|
|---|
| 47 | //***************************************************************************
|
|---|
| 48 | // Star Trackers
|
|---|
| 49 | // FEEP Thrusters
|
|---|
| 50 | // Communications Antennas
|
|---|
| 51 | //***************************************************************************
|
|---|
| 52 |
|
|---|
| 53 |
|
|---|
| 54 | // Star Trackers ************************************************************
|
|---|
| 55 |
|
|---|
| 56 | G4double ST_rad = 0.5*2270*mm;
|
|---|
| 57 | G4RotationMatrix ST_rot1; ST_rot1.rotateZ(+30.*deg);
|
|---|
| 58 | G4ThreeVector ST_pos1(ST_rad*std::cos(56*deg),
|
|---|
| 59 | +ST_rad*std::sin(56*deg),180.*mm);
|
|---|
| 60 | G4RotationMatrix ST_rot2; ST_rot2.rotateZ(-30.*deg);
|
|---|
| 61 | G4ThreeVector ST_pos2(ST_rad*std::cos(56*deg),
|
|---|
| 62 | -ST_rad*std::sin(56*deg),180.*mm);
|
|---|
| 63 | G4RotationMatrix ST_rot3; ST_rot3.rotateY(90.*deg);
|
|---|
| 64 |
|
|---|
| 65 | // Star Tracker: 2 kg
|
|---|
| 66 | G4double StarTracker_dia_o = 100.*mm;
|
|---|
| 67 | G4double StarTracker_dia_i = 40.*mm;
|
|---|
| 68 | G4double StarTracker_len = 120.*mm;
|
|---|
| 69 | // Bracket: 0.25 kg
|
|---|
| 70 | G4double StarTrackerBracket_wid = 120.*mm;
|
|---|
| 71 | G4double StarTrackerBracket_hei = 104.*mm;
|
|---|
| 72 | G4double StarTrackerBracket_thi = 7.5*mm;
|
|---|
| 73 |
|
|---|
| 74 | G4Tubs* StarTracker_tub = new G4Tubs("StarTracker_tub",0.5*StarTracker_dia_i,
|
|---|
| 75 | 0.5*StarTracker_dia_o, 0.5*StarTracker_len, 0., 360.*deg);
|
|---|
| 76 | G4Box* StarTrackerBracket_box = new G4Box("StarTrackerBracket_box",
|
|---|
| 77 | 0.5*StarTrackerBracket_thi, 0.5*StarTrackerBracket_wid,
|
|---|
| 78 | 0.5*StarTrackerBracket_hei);
|
|---|
| 79 | G4UnionSolid* StarTracker_sol = new G4UnionSolid("StarTracker_sol",
|
|---|
| 80 | StarTrackerBracket_box, StarTracker_tub, G4Transform3D(ST_rot3,
|
|---|
| 81 | G4ThreeVector(0.5*(StarTracker_len + StarTrackerBracket_thi),0,0)));
|
|---|
| 82 | G4LogicalVolume* StarTracker_log =
|
|---|
| 83 | new G4LogicalVolume(StarTracker_sol, Al6061, "StarTracker_log");
|
|---|
| 84 | G4VPhysicalVolume* StarTracker_phys;
|
|---|
| 85 | StarTracker_phys = new G4PVPlacement(G4Transform3D(ST_rot1, spacecraft_pos
|
|---|
| 86 | + ST_pos1), "StarTracker_phys", StarTracker_log, wld_phys, false, 0);
|
|---|
| 87 | StarTracker_phys = new G4PVPlacement(G4Transform3D(ST_rot2, spacecraft_pos
|
|---|
| 88 | + ST_pos2), "StarTracker_phys", StarTracker_log, wld_phys, false, 1);
|
|---|
| 89 | StarTracker_log->SetVisAttributes(sol_cyan_vat);
|
|---|
| 90 |
|
|---|
| 91 |
|
|---|
| 92 |
|
|---|
| 93 | // FEEP Thrusters ***********************************************************
|
|---|
| 94 |
|
|---|
| 95 | G4double FEEP_rad = 0.5*2520*mm;
|
|---|
| 96 | G4RotationMatrix FEEP_rot1;
|
|---|
| 97 | FEEP_rot1.rotateZ(-90.*deg); FEEP_rot1.rotateX(180.*deg);
|
|---|
| 98 | G4ThreeVector FEEP_pos1(FEEP_rad,0,170.*mm);
|
|---|
| 99 | G4RotationMatrix FEEP_rot2;
|
|---|
| 100 | FEEP_rot2.rotateZ(+30.*deg); FEEP_rot2.rotateX(180.*deg);
|
|---|
| 101 | G4ThreeVector FEEP_pos2(-FEEP_rad*std::cos(60*deg),
|
|---|
| 102 | -FEEP_rad*std::sin(60*deg),170.*mm);
|
|---|
| 103 | G4RotationMatrix FEEP_rot3;
|
|---|
| 104 | FEEP_rot3.rotateZ(150.*deg); FEEP_rot3.rotateX(180.*deg);
|
|---|
| 105 | G4ThreeVector FEEP_pos3(-FEEP_rad*std::cos(60*deg),
|
|---|
| 106 | +FEEP_rad*std::sin(60*deg),170.*mm);
|
|---|
| 107 |
|
|---|
| 108 | // 1 support + 2 FEEPs: ~11 kg
|
|---|
| 109 | G4double FEEP_dia_o = 140.*mm;
|
|---|
| 110 | G4double FEEP_dia_i = 130.*mm;
|
|---|
| 111 | G4double FEEP_len = 105.*mm;
|
|---|
| 112 | G4double FEEP_xoff = 110.*mm;
|
|---|
| 113 | G4double FEEP_yoff = 70.*mm;
|
|---|
| 114 | G4double FEEP_zoff = 15.*mm;
|
|---|
| 115 | G4double FEEPSup_len = 245.*mm;
|
|---|
| 116 | G4double FEEPSup_wid = 276.*mm;
|
|---|
| 117 | G4double FEEPSup_hei = 146.*mm;
|
|---|
| 118 | G4double FEEPCut1_wid = 31.*mm;
|
|---|
| 119 | G4double FEEPCut1_yoff = 50.*mm;
|
|---|
| 120 | G4double FEEPCut2_len = 70.*mm;
|
|---|
| 121 | G4double FEEPCut2_zoff = 10.*mm;
|
|---|
| 122 | G4double FEEPCut3_xoff = 140.*mm;
|
|---|
| 123 |
|
|---|
| 124 | G4RotationMatrix FEEP_rot4;
|
|---|
| 125 | FEEP_rot4.rotateY((90.+15.)*deg); FEEP_rot4.rotateZ(-25.*deg);
|
|---|
| 126 | G4RotationMatrix FEEP_rot5;
|
|---|
| 127 | FEEP_rot5.rotateY((90.-15.)*deg); FEEP_rot5.rotateZ(+25.*deg);
|
|---|
| 128 |
|
|---|
| 129 | // Mounting bracket
|
|---|
| 130 | G4Box* FEEP_sol1 = new G4Box("FEEP_sol1",
|
|---|
| 131 | 0.5*FEEPSup_wid, 0.5*FEEPSup_len, 0.5*FEEPSup_hei);
|
|---|
| 132 | G4Box* FEEPSupCutout1 = new G4Box("FEEPSupCutout1",
|
|---|
| 133 | 0.5*FEEPCut1_wid, 0.5*FEEPSup_len, 0.6*FEEPSup_hei);
|
|---|
| 134 | G4SubtractionSolid* FEEP_sol2 = new G4SubtractionSolid("FEEP_sol2",
|
|---|
| 135 | FEEP_sol1, FEEPSupCutout1, G4Transform3D(G4RotationMatrix(),
|
|---|
| 136 | G4ThreeVector(0, -FEEPCut1_yoff, 0.)));
|
|---|
| 137 | G4Box* FEEPSupCutout2 = new G4Box("FEEPSupCutout2",
|
|---|
| 138 | 0.6*FEEPSup_wid, 0.5*FEEPCut2_len, 0.51*FEEPSup_hei);
|
|---|
| 139 | G4SubtractionSolid* FEEP_sol3 = new G4SubtractionSolid("FEEP_sol3",
|
|---|
| 140 | FEEP_sol2, FEEPSupCutout2, G4Transform3D(G4RotationMatrix(),
|
|---|
| 141 | G4ThreeVector(0,-0.5*FEEPSup_len+0.5*FEEPCut2_len-.5*mm, FEEPCut2_zoff)));
|
|---|
| 142 | G4Box* FEEPSupCutout3 = new G4Box("FEEPSupCutout3",
|
|---|
| 143 | FEEPSup_wid, FEEPSup_hei, FEEPCut2_len);
|
|---|
| 144 | G4SubtractionSolid* FEEP_sol4 = new G4SubtractionSolid("FEEP_sol4",
|
|---|
| 145 | FEEP_sol3, FEEPSupCutout3, G4Transform3D(FEEP_rot4,
|
|---|
| 146 | G4ThreeVector(-FEEPCut3_xoff,FEEPCut2_len,0)));
|
|---|
| 147 | G4SubtractionSolid* FEEP_sol5 = new G4SubtractionSolid("FEEP_sol5",
|
|---|
| 148 | FEEP_sol4, FEEPSupCutout3, G4Transform3D(FEEP_rot5,
|
|---|
| 149 | G4ThreeVector(+FEEPCut3_xoff,FEEPCut2_len,0)));
|
|---|
| 150 | // FEEPs
|
|---|
| 151 | G4Tubs* FEEP_tub = new G4Tubs("FEEP_tub", 0.5*FEEP_dia_i, 0.5*FEEP_dia_o,
|
|---|
| 152 | 0.5*FEEP_len, 0., 360.*deg);
|
|---|
| 153 | G4UnionSolid* FEEP_sol6 = new G4UnionSolid("FEEP_sol",
|
|---|
| 154 | FEEP_sol5, FEEP_tub, G4Transform3D(FEEP_rot4,
|
|---|
| 155 | G4ThreeVector(-FEEP_xoff,FEEP_yoff,FEEP_zoff)));
|
|---|
| 156 | G4UnionSolid* FEEP_sol7 = new G4UnionSolid("FEEP_sol",
|
|---|
| 157 | FEEP_sol6, FEEP_tub, G4Transform3D(FEEP_rot5,
|
|---|
| 158 | G4ThreeVector(+FEEP_xoff,FEEP_yoff,FEEP_zoff)));
|
|---|
| 159 | G4LogicalVolume* FEEP_log =
|
|---|
| 160 | new G4LogicalVolume(FEEP_sol7, Al6061, "FEEP_log");
|
|---|
| 161 | G4VPhysicalVolume* FEEP_phys;
|
|---|
| 162 | FEEP_phys = new G4PVPlacement(G4Transform3D(FEEP_rot1,
|
|---|
| 163 | spacecraft_pos+FEEP_pos1), "FEEP_phys", FEEP_log, wld_phys, false, 0);
|
|---|
| 164 | FEEP_phys = new G4PVPlacement(G4Transform3D(FEEP_rot2,
|
|---|
| 165 | spacecraft_pos+FEEP_pos2), "FEEP_phys", FEEP_log, wld_phys, false, 1);
|
|---|
| 166 | FEEP_phys = new G4PVPlacement(G4Transform3D(FEEP_rot3,
|
|---|
| 167 | spacecraft_pos+FEEP_pos3), "FEEP_phys", FEEP_log, wld_phys, false, 2);
|
|---|
| 168 | FEEP_log->SetVisAttributes(sol_cyan_vat);
|
|---|
| 169 |
|
|---|
| 170 |
|
|---|
| 171 | // Communications Antennas **************************************************
|
|---|
| 172 |
|
|---|
| 173 |
|
|---|
| 174 | // Antenna dish: ~1.4 kg
|
|---|
| 175 | G4double Antenna_dia = 295.*mm;
|
|---|
| 176 | G4double Antenna_thi = 7.*mm;
|
|---|
| 177 | G4double Antenna_rad = 300.*mm;
|
|---|
| 178 | // Antenna mount: 1 kg cylindrical shell
|
|---|
| 179 | G4double AntennaMount_dia_o = 90.*mm;
|
|---|
| 180 | G4double AntennaMount_dia_i = 77.*mm;
|
|---|
| 181 | G4double AntennaMount_len = 220.*mm;
|
|---|
| 182 |
|
|---|
| 183 | G4ThreeVector ant_pos1(Antenna_rad+0*mm,+1250*mm,+550.*mm);
|
|---|
| 184 | G4ThreeVector ant_pos2(Antenna_rad-0*mm,-1250*mm,+550.*mm);
|
|---|
| 185 | G4RotationMatrix ant_rot3; ant_rot3.rotateY(-90.*deg);
|
|---|
| 186 |
|
|---|
| 187 | // Dish
|
|---|
| 188 | G4Sphere* Antenna_sol = new G4Sphere("Antenna_sol", Antenna_rad-Antenna_thi,
|
|---|
| 189 | Antenna_rad, 0., 360.*deg, 0, std::asin(0.5*Antenna_dia/Antenna_rad));
|
|---|
| 190 | G4LogicalVolume* Antenna_log = new G4LogicalVolume
|
|---|
| 191 | (Antenna_sol, Al6061, "Antenna_log");
|
|---|
| 192 | G4VPhysicalVolume* Antenna_phys;
|
|---|
| 193 | Antenna_phys = new G4PVPlacement(G4Transform3D(ant_rot3, spacecraft_pos
|
|---|
| 194 | + ant_pos1), "Antenna_phys", Antenna_log, wld_phys, false, 0);
|
|---|
| 195 | Antenna_phys = new G4PVPlacement(G4Transform3D(ant_rot3, spacecraft_pos
|
|---|
| 196 | + ant_pos2), "Antenna_phys", Antenna_log, wld_phys, false, 1);
|
|---|
| 197 | Antenna_log->SetVisAttributes(sol_cyan_vat);
|
|---|
| 198 |
|
|---|
| 199 | // Mount
|
|---|
| 200 | G4Tubs* AntennaMount_tub = new G4Tubs("AntennaMount_sol",
|
|---|
| 201 | 0.5*AntennaMount_dia_i, 0.5*AntennaMount_dia_o, 0.5*AntennaMount_len,
|
|---|
| 202 | 0., 360.*deg);
|
|---|
| 203 | G4LogicalVolume* AntennaMount_log = new G4LogicalVolume
|
|---|
| 204 | (AntennaMount_tub, Al6061, "AntennaMount_log");
|
|---|
| 205 | G4VPhysicalVolume* AntennaMount_phys;
|
|---|
| 206 | AntennaMount_phys = new G4PVPlacement(0, spacecraft_pos+ant_pos1+
|
|---|
| 207 | G4ThreeVector(-Antenna_rad-60.*mm,0,-80.*mm),
|
|---|
| 208 | "AntennaMount_phys", AntennaMount_log, wld_phys, false, 0);
|
|---|
| 209 | AntennaMount_phys = new G4PVPlacement(0, spacecraft_pos+ant_pos2+
|
|---|
| 210 | G4ThreeVector(-Antenna_rad-60.*mm,0,-80.*mm),
|
|---|
| 211 | "AntennaMount_phys", AntennaMount_log, wld_phys, false, 1);
|
|---|
| 212 | AntennaMount_log->SetVisAttributes(sol_cyan_vat);
|
|---|
| 213 |
|
|---|
| 214 | //*****************************************************************************
|
|---|