Geant4 Cross Reference |
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 // Author: F. Poignant, floriane.poignant@gmail.com 27 // 28 /// file STCyclotronDetectorConstruction.cc 29 30 #ifndef STCyclotronDetectorConstruction_h 31 #define STCyclotronDetectorConstruction_h 1 32 33 #include "G4VUserDetectorConstruction.hh" 34 #include "globals.hh" 35 #include "G4PhysicalConstants.hh" 36 #include <fstream> 37 38 class G4VPhysicalVolume; 39 class G4LogicalVolume; 40 class G4Region; 41 class G4Tubs; 42 class G4Material; 43 class STCyclotronDetectorMessenger; 44 class G4Element; 45 46 /// Detector construction class to define materials and geometry. 47 48 class STCyclotronDetectorConstruction : public G4VUserDetectorConstruction 49 { 50 public: 51 STCyclotronDetectorConstruction(); 52 ~STCyclotronDetectorConstruction(); 53 54 G4VPhysicalVolume* Construct(); 55 void ConstructSDandField(); 56 57 void SetTargetDiameter(G4double ); 58 void SetTargetIsotopeName(G4String ); 59 void SetTargetIsotopeZ(G4double ); 60 void SetTargetIsotopeN(G4int ); 61 void SetTargetIsotopeA(G4double ); 62 void SetTargetElementName(G4String ); 63 void SetTargetElementSymbole(G4String ); 64 void SetTargetElementNComponents(G4int ); 65 void SetTargetElementAbundance(G4double ); 66 void SetTargetMaterialDensity(G4double ); 67 void SetTargetMaterialNComponents(G4int ); 68 void SetTargetMaterialFractionMass(G4double ); 69 void SetTargetNaturalElement(G4String ); 70 void SetTargetNaturalMaterialFractionMass(G4double ); 71 G4bool UpdateMaterial(); 72 void SetTargetMaterial(G4String ); 73 74 void SetFoilIsotopeName(G4String ); 75 void SetFoilIsotopeZ(G4double ); 76 void SetFoilIsotopeN(G4int ); 77 void SetFoilIsotopeA(G4double ); 78 void SetFoilElementName(G4String ); 79 void SetFoilElementSymbole(G4String ); 80 void SetFoilElementNComponents(G4int ); 81 void SetFoilElementAbundance(G4double ); 82 void SetFoilMaterialDensity(G4double ); 83 void SetFoilMaterialNComponents(G4int ); 84 void SetFoilMaterialFractionMass(G4double ); 85 void SetFoilNaturalElement(G4String ); 86 void SetFoilNaturalMaterialFractionMass(G4double ); 87 G4bool UpdateFoilMaterial(); 88 void SetFoilMaterial(G4String ); 89 90 void SetTargetThickness(G4double ); 91 void SetFoilThickness(G4double ); 92 93 //Get methods 94 inline G4double GetTargetPosition1(){return fLayer1_z_position_PART4 + 0.5*11.5 - fTarget_thickness;} 95 inline G4double GetTargetPosition2(){return fLayer1_z_position_PART4 + 0.5*11.5;} 96 inline G4double GetVolumeTarget(){return pi*fTarget_diameter*fTarget_diameter/4*fTarget_thickness;} 97 inline G4double GetFoilPosition1(){return fZ_foil_position - 0.5*fFoil_thickness;} 98 inline G4double GetTargetVolume(){return fTargetVolume;} 99 inline G4double GetFoilVolume(){return fFoilVolume;} 100 inline G4double GetFoilThickness(){return fFoil_thickness;} 101 inline G4double GetTargetThickness(){return fTarget_thickness;} 102 inline G4double GetTargetDiameter(){return fTarget_diameter;} 103 104 private: 105 106 STCyclotronDetectorMessenger* fDetectorMessenger; 107 108 //Messenger parameters 109 G4double fTarget_diameter; 110 std::vector<G4String> fIsotopeName; 111 std::vector<G4double> fIsotopeZ; 112 std::vector<G4int> fIsotopeN; 113 std::vector<G4double> fIsotopeA; 114 std::vector<G4String> fElementName; 115 std::vector<G4String> fElementSymbole; 116 std::vector<G4int> fElementNComponents; 117 std::vector<G4double> fElementAbundance; 118 std::vector<G4String> fNaturalElementName; 119 std::vector<G4double> fNaturalMaterialFractionMass; 120 G4double fDensity_target; 121 G4int fTarget_NComponents; 122 std::vector<G4double> fMaterialFractionMass; 123 124 std::vector<G4String> fIsotopeNameFoil; 125 std::vector<G4double> fIsotopeZFoil; 126 std::vector<G4int> fIsotopeNFoil; 127 std::vector<G4double> fIsotopeAFoil; 128 std::vector<G4String> fElementNameFoil; 129 std::vector<G4String> fElementSymboleFoil; 130 std::vector<G4int> fElementNComponentsFoil; 131 std::vector<G4double> fElementAbundanceFoil; 132 std::vector<G4String> fNaturalElementNameFoil; 133 std::vector<G4double> fNaturalMaterialFractionMassFoil; 134 G4double fDensity_foil; 135 G4int fFoil_NComponents; 136 std::vector<G4double> fMaterialFractionMassFoil; 137 138 G4double fTarget_thickness; 139 G4double fFoil_thickness; 140 141 //Parameters that are used/modified in the set methods 142 //When modifying the target parameters 143 144 //Material 145 G4Material* fTarget_Material; 146 G4Material* fFoil_Material; 147 //Foil 148 G4double fZ_foil_position; 149 G4Tubs* fSolidFoil; 150 G4LogicalVolume* fLogicFoil; 151 G4VPhysicalVolume* fPhysFoil; 152 //WORLD 153 G4LogicalVolume* fLogicWorld; 154 //PART 3 155 G4double fLayer_z_position_PART3; 156 G4VPhysicalVolume* fPhysLayer_PART3; 157 G4VPhysicalVolume* fPhysTube_PART3; 158 //PART 4 159 G4double fTube_outerRadius_PART4; 160 G4double fTube_length_PART4; 161 G4double fLayer_z_position_PART4; 162 G4VPhysicalVolume* fPhysTube_PART4; 163 G4VPhysicalVolume* fPhysLayer_PART4; 164 G4double fLayer1_z_position_PART4; 165 G4VPhysicalVolume* fPhysLayer1_PART4; 166 //Target 167 G4LogicalVolume* fLogicTarget; 168 G4double fTarget_z_position; 169 G4Tubs* fSolidTarget; 170 G4VPhysicalVolume* fPhysTarget; 171 //PART 5 172 G4double fLayer1_z_position_PART5; 173 G4VPhysicalVolume* fPhysLayer1_PART5; 174 G4double fLayer2_z_position_PART5; 175 G4VPhysicalVolume* fPhysLayer2_PART5; 176 G4double fLayer3_z_position_PART5; 177 G4VPhysicalVolume* fPhysLayer3_PART5; 178 179 G4Region* fRegionTarget; 180 G4Region* fRegionFoil; 181 182 G4double fTargetVolume; 183 G4double fFoilVolume; 184 185 std::ofstream fParametersSummary; 186 187 }; 188 #endif 189