Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 // 26 // 27 /// \file B1/src/DetectorConstruction.cc << 27 /// \file DetectorConstruction.cc 28 /// \brief Implementation of the B1::DetectorC 28 /// \brief Implementation of the B1::DetectorConstruction class 29 29 30 #include "DetectorConstruction.hh" 30 #include "DetectorConstruction.hh" 31 31 >> 32 #include "G4RunManager.hh" >> 33 #include "G4NistManager.hh" 32 #include "G4Box.hh" 34 #include "G4Box.hh" 33 #include "G4Cons.hh" 35 #include "G4Cons.hh" >> 36 #include "G4Orb.hh" >> 37 #include "G4Sphere.hh" >> 38 #include "G4Trd.hh" 34 #include "G4LogicalVolume.hh" 39 #include "G4LogicalVolume.hh" 35 #include "G4NistManager.hh" << 36 #include "G4PVPlacement.hh" 40 #include "G4PVPlacement.hh" 37 #include "G4SystemOfUnits.hh" 41 #include "G4SystemOfUnits.hh" 38 #include "G4Trd.hh" << 39 42 40 namespace B1 43 namespace B1 41 { 44 { 42 45 43 //....oooOO0OOooo........oooOO0OOooo........oo 46 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 44 47 >> 48 DetectorConstruction::DetectorConstruction() >> 49 {} >> 50 >> 51 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... >> 52 >> 53 DetectorConstruction::~DetectorConstruction() >> 54 {} >> 55 >> 56 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... >> 57 45 G4VPhysicalVolume* DetectorConstruction::Const 58 G4VPhysicalVolume* DetectorConstruction::Construct() 46 { 59 { 47 // Get nist material manager 60 // Get nist material manager 48 G4NistManager* nist = G4NistManager::Instanc 61 G4NistManager* nist = G4NistManager::Instance(); 49 62 50 // Envelope parameters 63 // Envelope parameters 51 // 64 // 52 G4double env_sizeXY = 20 * cm, env_sizeZ = 3 << 65 G4double env_sizeXY = 20*cm, env_sizeZ = 30*cm; 53 G4Material* env_mat = nist->FindOrBuildMater 66 G4Material* env_mat = nist->FindOrBuildMaterial("G4_WATER"); 54 67 55 // Option to switch on/off checking of volum 68 // Option to switch on/off checking of volumes overlaps 56 // 69 // 57 G4bool checkOverlaps = true; 70 G4bool checkOverlaps = true; 58 71 59 // 72 // 60 // World 73 // World 61 // 74 // 62 G4double world_sizeXY = 1.2 * env_sizeXY; << 75 G4double world_sizeXY = 1.2*env_sizeXY; 63 G4double world_sizeZ = 1.2 * env_sizeZ; << 76 G4double world_sizeZ = 1.2*env_sizeZ; 64 G4Material* world_mat = nist->FindOrBuildMat 77 G4Material* world_mat = nist->FindOrBuildMaterial("G4_AIR"); 65 78 66 auto solidWorld = << 79 G4Box* solidWorld = 67 new G4Box("World", // its name << 80 new G4Box("World", //its name 68 0.5 * world_sizeXY, 0.5 * world_ << 81 0.5*world_sizeXY, 0.5*world_sizeXY, 0.5*world_sizeZ); //its size 69 << 82 70 auto logicWorld = new G4LogicalVolume(solidW << 83 G4LogicalVolume* logicWorld = 71 world_ << 84 new G4LogicalVolume(solidWorld, //its solid 72 "World << 85 world_mat, //its material 73 << 86 "World"); //its name 74 auto physWorld = new G4PVPlacement(nullptr, << 87 75 G4ThreeVe << 88 G4VPhysicalVolume* physWorld = 76 logicWorl << 89 new G4PVPlacement(0, //no rotation 77 "World", << 90 G4ThreeVector(), //at (0,0,0) 78 nullptr, << 91 logicWorld, //its logical volume 79 false, / << 92 "World", //its name 80 0, // co << 93 0, //its mother volume 81 checkOver << 94 false, //no boolean operation >> 95 0, //copy number >> 96 checkOverlaps); //overlaps checking 82 97 83 // 98 // 84 // Envelope 99 // Envelope 85 // 100 // 86 auto solidEnv = new G4Box("Envelope", // it << 101 G4Box* solidEnv = 87 0.5 * env_sizeXY, << 102 new G4Box("Envelope", //its name 88 << 103 0.5*env_sizeXY, 0.5*env_sizeXY, 0.5*env_sizeZ); //its size 89 auto logicEnv = new G4LogicalVolume(solidEnv << 104 90 env_mat, << 105 G4LogicalVolume* logicEnv = 91 "Envelop << 106 new G4LogicalVolume(solidEnv, //its solid 92 << 107 env_mat, //its material 93 new G4PVPlacement(nullptr, // no rotation << 108 "Envelope"); //its name 94 G4ThreeVector(), // at (0 << 109 95 logicEnv, // its logical << 110 new G4PVPlacement(0, //no rotation 96 "Envelope", // its name << 111 G4ThreeVector(), //at (0,0,0) 97 logicWorld, // its mother << 112 logicEnv, //its logical volume 98 false, // no boolean oper << 113 "Envelope", //its name 99 0, // copy number << 114 logicWorld, //its mother volume 100 checkOverlaps); // overla << 115 false, //no boolean operation >> 116 0, //copy number >> 117 checkOverlaps); //overlaps checking 101 118 102 // 119 // 103 // Shape 1 120 // Shape 1 104 // 121 // 105 G4Material* shape1_mat = nist->FindOrBuildMa 122 G4Material* shape1_mat = nist->FindOrBuildMaterial("G4_A-150_TISSUE"); 106 G4ThreeVector pos1 = G4ThreeVector(0, 2 * cm << 123 G4ThreeVector pos1 = G4ThreeVector(0, 2*cm, -7*cm); 107 124 108 // Conical section shape 125 // Conical section shape 109 G4double shape1_rmina = 0. * cm, shape1_rmax << 126 G4double shape1_rmina = 0.*cm, shape1_rmaxa = 2.*cm; 110 G4double shape1_rminb = 0. * cm, shape1_rmax << 127 G4double shape1_rminb = 0.*cm, shape1_rmaxb = 4.*cm; 111 G4double shape1_hz = 3. * cm; << 128 G4double shape1_hz = 3.*cm; 112 G4double shape1_phimin = 0. * deg, shape1_ph << 129 G4double shape1_phimin = 0.*deg, shape1_phimax = 360.*deg; 113 auto solidShape1 = new G4Cons("Shape1", shap << 130 G4Cons* solidShape1 = 114 shape1_hz, sha << 131 new G4Cons("Shape1", 115 << 132 shape1_rmina, shape1_rmaxa, shape1_rminb, shape1_rmaxb, shape1_hz, 116 auto logicShape1 = new G4LogicalVolume(solid << 133 shape1_phimin, shape1_phimax); 117 shape << 134 118 "Shap << 135 G4LogicalVolume* logicShape1 = 119 << 136 new G4LogicalVolume(solidShape1, //its solid 120 new G4PVPlacement(nullptr, // no rotation << 137 shape1_mat, //its material 121 pos1, // at position << 138 "Shape1"); //its name 122 logicShape1, // its logic << 139 123 "Shape1", // its name << 140 new G4PVPlacement(0, //no rotation 124 logicEnv, // its mother << 141 pos1, //at position 125 false, // no boolean oper << 142 logicShape1, //its logical volume 126 0, // copy number << 143 "Shape1", //its name 127 checkOverlaps); // overla << 144 logicEnv, //its mother volume >> 145 false, //no boolean operation >> 146 0, //copy number >> 147 checkOverlaps); //overlaps checking 128 148 129 // 149 // 130 // Shape 2 150 // Shape 2 131 // 151 // 132 G4Material* shape2_mat = nist->FindOrBuildMa 152 G4Material* shape2_mat = nist->FindOrBuildMaterial("G4_BONE_COMPACT_ICRU"); 133 G4ThreeVector pos2 = G4ThreeVector(0, -1 * c << 153 G4ThreeVector pos2 = G4ThreeVector(0, -1*cm, 7*cm); 134 154 135 // Trapezoid shape 155 // Trapezoid shape 136 G4double shape2_dxa = 12 * cm, shape2_dxb = << 156 G4double shape2_dxa = 12*cm, shape2_dxb = 12*cm; 137 G4double shape2_dya = 10 * cm, shape2_dyb = << 157 G4double shape2_dya = 10*cm, shape2_dyb = 16*cm; 138 G4double shape2_dz = 6 * cm; << 158 G4double shape2_dz = 6*cm; 139 auto solidShape2 = << 159 G4Trd* solidShape2 = 140 new G4Trd("Shape2", // its name << 160 new G4Trd("Shape2", //its name 141 0.5 * shape2_dxa, 0.5 * shape2_d << 161 0.5*shape2_dxa, 0.5*shape2_dxb, 142 0.5 * shape2_dz); // its size << 162 0.5*shape2_dya, 0.5*shape2_dyb, 0.5*shape2_dz); //its size 143 << 163 144 auto logicShape2 = new G4LogicalVolume(solid << 164 G4LogicalVolume* logicShape2 = 145 shape << 165 new G4LogicalVolume(solidShape2, //its solid 146 "Shap << 166 shape2_mat, //its material 147 << 167 "Shape2"); //its name 148 new G4PVPlacement(nullptr, // no rotation << 168 149 pos2, // at position << 169 new G4PVPlacement(0, //no rotation 150 logicShape2, // its logic << 170 pos2, //at position 151 "Shape2", // its name << 171 logicShape2, //its logical volume 152 logicEnv, // its mother << 172 "Shape2", //its name 153 false, // no boolean oper << 173 logicEnv, //its mother volume 154 0, // copy number << 174 false, //no boolean operation 155 checkOverlaps); // overla << 175 0, //copy number >> 176 checkOverlaps); //overlaps checking 156 177 157 // Set Shape2 as scoring volume 178 // Set Shape2 as scoring volume 158 // 179 // 159 fScoringVolume = logicShape2; 180 fScoringVolume = logicShape2; 160 181 161 // 182 // 162 // always return the physical World << 183 //always return the physical World 163 // 184 // 164 return physWorld; 185 return physWorld; 165 } 186 } 166 187 167 //....oooOO0OOooo........oooOO0OOooo........oo 188 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 168 189 169 } // namespace B1 << 190 } 170 191