// // ******************************************************************** // * License and Disclaimer * // * * // * The Geant4 software is copyright of the Copyright Holders of * // * the Geant4 Collaboration. It is provided under the terms and * // * conditions of the Geant4 Software License, included in the file * // * LICENSE and available at http://cern.ch/geant4/license . These * // * include a list of copyright holders. * // * * // * Neither the authors of this software system, nor their employing * // * institutes,nor the agencies providing financial support for this * // * work make any representation or warranty, express or implied, * // * regarding this software system or assume any liability for its * // * use. Please see the license in the file LICENSE and URL above * // * for the full disclaimer and the limitation of liability. * // * * // * This code implementation is the result of the scientific and * // * technical work of the GEANT4 collaboration. * // * By using, copying, modifying or distributing the software (or * // * any work based on the software) you agree to acknowledge its * // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // // ******************************************************************** // * * // * cosmicray_charging advanced example for Geant4 * // * (adapted simulation of test-mass charging in the LISA mission) * // * * // * Henrique Araujo (h.araujo@imperial.ac.uk) & Peter Wass * // * Imperial College London * // * * // * LISADetectorConstruction class * // * * // ******************************************************************** // // HISTORY // 22/02/2004: migrated from LISA-V04 // 24/11/2004: migrated to cmath // // ******************************************************************** //*************************************************************************** // Support systems //*************************************************************************** // Star Trackers // FEEP Thrusters // Communications Antennas //*************************************************************************** // Star Trackers ************************************************************ G4double ST_rad = 0.5*2270*mm; G4RotationMatrix ST_rot1; ST_rot1.rotateZ(+30.*deg); G4ThreeVector ST_pos1(ST_rad*std::cos(56*deg), +ST_rad*std::sin(56*deg),180.*mm); G4RotationMatrix ST_rot2; ST_rot2.rotateZ(-30.*deg); G4ThreeVector ST_pos2(ST_rad*std::cos(56*deg), -ST_rad*std::sin(56*deg),180.*mm); G4RotationMatrix ST_rot3; ST_rot3.rotateY(90.*deg); // Star Tracker: 2 kg G4double StarTracker_dia_o = 100.*mm; G4double StarTracker_dia_i = 40.*mm; G4double StarTracker_len = 120.*mm; // Bracket: 0.25 kg G4double StarTrackerBracket_wid = 120.*mm; G4double StarTrackerBracket_hei = 104.*mm; G4double StarTrackerBracket_thi = 7.5*mm; G4Tubs* StarTracker_tub = new G4Tubs("StarTracker_tub",0.5*StarTracker_dia_i, 0.5*StarTracker_dia_o, 0.5*StarTracker_len, 0., 360.*deg); G4Box* StarTrackerBracket_box = new G4Box("StarTrackerBracket_box", 0.5*StarTrackerBracket_thi, 0.5*StarTrackerBracket_wid, 0.5*StarTrackerBracket_hei); G4UnionSolid* StarTracker_sol = new G4UnionSolid("StarTracker_sol", StarTrackerBracket_box, StarTracker_tub, G4Transform3D(ST_rot3, G4ThreeVector(0.5*(StarTracker_len + StarTrackerBracket_thi),0,0))); G4LogicalVolume* StarTracker_log = new G4LogicalVolume(StarTracker_sol, Al6061, "StarTracker_log"); G4VPhysicalVolume* StarTracker_phys; StarTracker_phys = new G4PVPlacement(G4Transform3D(ST_rot1, spacecraft_pos + ST_pos1), "StarTracker_phys", StarTracker_log, wld_phys, false, 0); StarTracker_phys = new G4PVPlacement(G4Transform3D(ST_rot2, spacecraft_pos + ST_pos2), "StarTracker_phys", StarTracker_log, wld_phys, false, 1); StarTracker_log->SetVisAttributes(sol_cyan_vat); // FEEP Thrusters *********************************************************** G4double FEEP_rad = 0.5*2520*mm; G4RotationMatrix FEEP_rot1; FEEP_rot1.rotateZ(-90.*deg); FEEP_rot1.rotateX(180.*deg); G4ThreeVector FEEP_pos1(FEEP_rad,0,170.*mm); G4RotationMatrix FEEP_rot2; FEEP_rot2.rotateZ(+30.*deg); FEEP_rot2.rotateX(180.*deg); G4ThreeVector FEEP_pos2(-FEEP_rad*std::cos(60*deg), -FEEP_rad*std::sin(60*deg),170.*mm); G4RotationMatrix FEEP_rot3; FEEP_rot3.rotateZ(150.*deg); FEEP_rot3.rotateX(180.*deg); G4ThreeVector FEEP_pos3(-FEEP_rad*std::cos(60*deg), +FEEP_rad*std::sin(60*deg),170.*mm); // 1 support + 2 FEEPs: ~11 kg G4double FEEP_dia_o = 140.*mm; G4double FEEP_dia_i = 130.*mm; G4double FEEP_len = 105.*mm; G4double FEEP_xoff = 110.*mm; G4double FEEP_yoff = 70.*mm; G4double FEEP_zoff = 15.*mm; G4double FEEPSup_len = 245.*mm; G4double FEEPSup_wid = 276.*mm; G4double FEEPSup_hei = 146.*mm; G4double FEEPCut1_wid = 31.*mm; G4double FEEPCut1_yoff = 50.*mm; G4double FEEPCut2_len = 70.*mm; G4double FEEPCut2_zoff = 10.*mm; G4double FEEPCut3_xoff = 140.*mm; G4RotationMatrix FEEP_rot4; FEEP_rot4.rotateY((90.+15.)*deg); FEEP_rot4.rotateZ(-25.*deg); G4RotationMatrix FEEP_rot5; FEEP_rot5.rotateY((90.-15.)*deg); FEEP_rot5.rotateZ(+25.*deg); // Mounting bracket G4Box* FEEP_sol1 = new G4Box("FEEP_sol1", 0.5*FEEPSup_wid, 0.5*FEEPSup_len, 0.5*FEEPSup_hei); G4Box* FEEPSupCutout1 = new G4Box("FEEPSupCutout1", 0.5*FEEPCut1_wid, 0.5*FEEPSup_len, 0.6*FEEPSup_hei); G4SubtractionSolid* FEEP_sol2 = new G4SubtractionSolid("FEEP_sol2", FEEP_sol1, FEEPSupCutout1, G4Transform3D(G4RotationMatrix(), G4ThreeVector(0, -FEEPCut1_yoff, 0.))); G4Box* FEEPSupCutout2 = new G4Box("FEEPSupCutout2", 0.6*FEEPSup_wid, 0.5*FEEPCut2_len, 0.51*FEEPSup_hei); G4SubtractionSolid* FEEP_sol3 = new G4SubtractionSolid("FEEP_sol3", FEEP_sol2, FEEPSupCutout2, G4Transform3D(G4RotationMatrix(), G4ThreeVector(0,-0.5*FEEPSup_len+0.5*FEEPCut2_len-.5*mm, FEEPCut2_zoff))); G4Box* FEEPSupCutout3 = new G4Box("FEEPSupCutout3", FEEPSup_wid, FEEPSup_hei, FEEPCut2_len); G4SubtractionSolid* FEEP_sol4 = new G4SubtractionSolid("FEEP_sol4", FEEP_sol3, FEEPSupCutout3, G4Transform3D(FEEP_rot4, G4ThreeVector(-FEEPCut3_xoff,FEEPCut2_len,0))); G4SubtractionSolid* FEEP_sol5 = new G4SubtractionSolid("FEEP_sol5", FEEP_sol4, FEEPSupCutout3, G4Transform3D(FEEP_rot5, G4ThreeVector(+FEEPCut3_xoff,FEEPCut2_len,0))); // FEEPs G4Tubs* FEEP_tub = new G4Tubs("FEEP_tub", 0.5*FEEP_dia_i, 0.5*FEEP_dia_o, 0.5*FEEP_len, 0., 360.*deg); G4UnionSolid* FEEP_sol6 = new G4UnionSolid("FEEP_sol", FEEP_sol5, FEEP_tub, G4Transform3D(FEEP_rot4, G4ThreeVector(-FEEP_xoff,FEEP_yoff,FEEP_zoff))); G4UnionSolid* FEEP_sol7 = new G4UnionSolid("FEEP_sol", FEEP_sol6, FEEP_tub, G4Transform3D(FEEP_rot5, G4ThreeVector(+FEEP_xoff,FEEP_yoff,FEEP_zoff))); G4LogicalVolume* FEEP_log = new G4LogicalVolume(FEEP_sol7, Al6061, "FEEP_log"); G4VPhysicalVolume* FEEP_phys; FEEP_phys = new G4PVPlacement(G4Transform3D(FEEP_rot1, spacecraft_pos+FEEP_pos1), "FEEP_phys", FEEP_log, wld_phys, false, 0); FEEP_phys = new G4PVPlacement(G4Transform3D(FEEP_rot2, spacecraft_pos+FEEP_pos2), "FEEP_phys", FEEP_log, wld_phys, false, 1); FEEP_phys = new G4PVPlacement(G4Transform3D(FEEP_rot3, spacecraft_pos+FEEP_pos3), "FEEP_phys", FEEP_log, wld_phys, false, 2); FEEP_log->SetVisAttributes(sol_cyan_vat); // Communications Antennas ************************************************** // Antenna dish: ~1.4 kg G4double Antenna_dia = 295.*mm; G4double Antenna_thi = 7.*mm; G4double Antenna_rad = 300.*mm; // Antenna mount: 1 kg cylindrical shell G4double AntennaMount_dia_o = 90.*mm; G4double AntennaMount_dia_i = 77.*mm; G4double AntennaMount_len = 220.*mm; G4ThreeVector ant_pos1(Antenna_rad+0*mm,+1250*mm,+550.*mm); G4ThreeVector ant_pos2(Antenna_rad-0*mm,-1250*mm,+550.*mm); G4RotationMatrix ant_rot3; ant_rot3.rotateY(-90.*deg); // Dish G4Sphere* Antenna_sol = new G4Sphere("Antenna_sol", Antenna_rad-Antenna_thi, Antenna_rad, 0., 360.*deg, 0, std::asin(0.5*Antenna_dia/Antenna_rad)); G4LogicalVolume* Antenna_log = new G4LogicalVolume (Antenna_sol, Al6061, "Antenna_log"); G4VPhysicalVolume* Antenna_phys; Antenna_phys = new G4PVPlacement(G4Transform3D(ant_rot3, spacecraft_pos + ant_pos1), "Antenna_phys", Antenna_log, wld_phys, false, 0); Antenna_phys = new G4PVPlacement(G4Transform3D(ant_rot3, spacecraft_pos + ant_pos2), "Antenna_phys", Antenna_log, wld_phys, false, 1); Antenna_log->SetVisAttributes(sol_cyan_vat); // Mount G4Tubs* AntennaMount_tub = new G4Tubs("AntennaMount_sol", 0.5*AntennaMount_dia_i, 0.5*AntennaMount_dia_o, 0.5*AntennaMount_len, 0., 360.*deg); G4LogicalVolume* AntennaMount_log = new G4LogicalVolume (AntennaMount_tub, Al6061, "AntennaMount_log"); G4VPhysicalVolume* AntennaMount_phys; AntennaMount_phys = new G4PVPlacement(0, spacecraft_pos+ant_pos1+ G4ThreeVector(-Antenna_rad-60.*mm,0,-80.*mm), "AntennaMount_phys", AntennaMount_log, wld_phys, false, 0); AntennaMount_phys = new G4PVPlacement(0, spacecraft_pos+ant_pos2+ G4ThreeVector(-Antenna_rad-60.*mm,0,-80.*mm), "AntennaMount_phys", AntennaMount_log, wld_phys, false, 1); AntennaMount_log->SetVisAttributes(sol_cyan_vat); //*****************************************************************************