source: trunk/examples/advanced/cosmicray_charging/src/LISASupportSystems.icc @ 1346

Last change on this file since 1346 was 807, checked in by garnier, 16 years ago

update

File size: 10.0 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//
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//*****************************************************************************
Note: See TracBrowser for help on using the repository browser.