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 // $Id: B1DetectorConstruction.cc 80449 2014-04-22 08:35:50Z gcosmo $ 26 // 27 // 27 /// \file B1DetectorConstruction.cc 28 /// \file B1DetectorConstruction.cc 28 /// \brief Implementation of the B1DetectorCon 29 /// \brief Implementation of the B1DetectorConstruction class 29 30 30 #include "B1DetectorConstruction.hh" 31 #include "B1DetectorConstruction.hh" 31 32 >> 33 #include "G4RunManager.hh" >> 34 #include "G4NistManager.hh" 32 #include "G4Box.hh" 35 #include "G4Box.hh" 33 #include "G4Cons.hh" 36 #include "G4Cons.hh" 34 #include "G4LogicalVolume.hh" << 35 #include "G4NistManager.hh" << 36 #include "G4Orb.hh" 37 #include "G4Orb.hh" 37 #include "G4PVPlacement.hh" << 38 #include "G4RunManager.hh" << 39 #include "G4Sphere.hh" 38 #include "G4Sphere.hh" 40 #include "G4SystemOfUnits.hh" << 41 #include "G4Trd.hh" 39 #include "G4Trd.hh" >> 40 #include "G4LogicalVolume.hh" >> 41 #include "G4PVPlacement.hh" >> 42 #include "G4SystemOfUnits.hh" 42 43 43 //....oooOO0OOooo........oooOO0OOooo........oo 44 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 44 45 45 B1DetectorConstruction::B1DetectorConstruction << 46 B1DetectorConstruction::B1DetectorConstruction() 46 {} << 47 : G4VUserDetectorConstruction(), >> 48 fScoringVolume(0) >> 49 { } 47 50 48 //....oooOO0OOooo........oooOO0OOooo........oo 51 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 49 52 50 B1DetectorConstruction::~B1DetectorConstructio << 53 B1DetectorConstruction::~B1DetectorConstruction() >> 54 { } 51 55 52 //....oooOO0OOooo........oooOO0OOooo........oo 56 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 53 57 54 G4VPhysicalVolume* B1DetectorConstruction::Con 58 G4VPhysicalVolume* B1DetectorConstruction::Construct() 55 { << 59 { 56 // Get nist material manager 60 // Get nist material manager 57 G4NistManager* nist = G4NistManager::Instanc 61 G4NistManager* nist = G4NistManager::Instance(); 58 << 62 59 // Envelope parameters 63 // Envelope parameters 60 // 64 // 61 G4double env_sizeXY = 20 * cm, env_sizeZ = 3 << 65 G4double env_sizeXY = 20*cm, env_sizeZ = 30*cm; 62 G4Material* env_mat = nist->FindOrBuildMater 66 G4Material* env_mat = nist->FindOrBuildMaterial("G4_WATER"); 63 << 67 64 // Option to switch on/off checking of volum 68 // Option to switch on/off checking of volumes overlaps 65 // 69 // 66 G4bool checkOverlaps = true; 70 G4bool checkOverlaps = true; 67 71 68 // << 72 // 69 // World 73 // World 70 // 74 // 71 G4double world_sizeXY = 1.2 * env_sizeXY; << 75 G4double world_sizeXY = 1.2*env_sizeXY; 72 G4double world_sizeZ = 1.2 * env_sizeZ; << 76 G4double world_sizeZ = 1.2*env_sizeZ; 73 G4Material* world_mat = nist->FindOrBuildMat 77 G4Material* world_mat = nist->FindOrBuildMaterial("G4_AIR"); 74 << 78 75 G4Box* solidWorld = << 79 G4Box* solidWorld = 76 new G4Box("World", // its name << 80 new G4Box("World", //its name 77 0.5 * world_sizeXY, 0.5 * world_ << 81 0.5*world_sizeXY, 0.5*world_sizeXY, 0.5*world_sizeZ); //its size 78 << 82 79 G4LogicalVolume* logicWorld = new G4LogicalV << 83 G4LogicalVolume* logicWorld = 80 << 84 new G4LogicalVolume(solidWorld, //its solid 81 << 85 world_mat, //its material 82 << 86 "World"); //its name 83 G4VPhysicalVolume* physWorld = new G4PVPlace << 87 84 << 88 G4VPhysicalVolume* physWorld = 85 << 89 new G4PVPlacement(0, //no rotation 86 << 90 G4ThreeVector(), //at (0,0,0) 87 << 91 logicWorld, //its logical volume 88 << 92 "World", //its name 89 << 93 0, //its mother volume 90 << 94 false, //no boolean operation 91 << 95 0, //copy number 92 // << 96 checkOverlaps); //overlaps checking >> 97 >> 98 // 93 // Envelope 99 // Envelope 94 // << 100 // 95 G4Box* solidEnv = new G4Box("Envelope", // << 101 G4Box* solidEnv = 96 0.5 * env_sizeXY << 102 new G4Box("Envelope", //its name 97 << 103 0.5*env_sizeXY, 0.5*env_sizeXY, 0.5*env_sizeZ); //its size 98 G4LogicalVolume* logicEnv = new G4LogicalVol << 104 99 << 105 G4LogicalVolume* logicEnv = 100 << 106 new G4LogicalVolume(solidEnv, //its solid 101 << 107 env_mat, //its material 102 new G4PVPlacement(0, // no rotation << 108 "Envelope"); //its name 103 G4ThreeVector(), // at (0 << 109 104 logicEnv, // its logical << 110 new G4PVPlacement(0, //no rotation 105 "Envelope", // its name << 111 G4ThreeVector(), //at (0,0,0) 106 logicWorld, // its mother << 112 logicEnv, //its logical volume 107 false, // no boolean oper << 113 "Envelope", //its name 108 0, // copy number << 114 logicWorld, //its mother volume 109 checkOverlaps); // overla << 115 false, //no boolean operation 110 << 116 0, //copy number 111 // << 117 checkOverlaps); //overlaps checking >> 118 >> 119 // 112 // Shape 1 120 // Shape 1 113 // << 121 // 114 G4Material* shape1_mat = nist->FindOrBuildMa 122 G4Material* shape1_mat = nist->FindOrBuildMaterial("G4_A-150_TISSUE"); 115 G4ThreeVector pos1 = G4ThreeVector(0, 2 * cm << 123 G4ThreeVector pos1 = G4ThreeVector(0, 2*cm, -7*cm); >> 124 >> 125 // Conical section shape >> 126 G4double shape1_rmina = 0.*cm, shape1_rmaxa = 2.*cm; >> 127 G4double shape1_rminb = 0.*cm, shape1_rmaxb = 4.*cm; >> 128 G4double shape1_hz = 3.*cm; >> 129 G4double shape1_phimin = 0.*deg, shape1_phimax = 360.*deg; >> 130 G4Cons* solidShape1 = >> 131 new G4Cons("Shape1", >> 132 shape1_rmina, shape1_rmaxa, shape1_rminb, shape1_rmaxb, shape1_hz, >> 133 shape1_phimin, shape1_phimax); >> 134 >> 135 G4LogicalVolume* logicShape1 = >> 136 new G4LogicalVolume(solidShape1, //its solid >> 137 shape1_mat, //its material >> 138 "Shape1"); //its name >> 139 >> 140 new G4PVPlacement(0, //no rotation >> 141 pos1, //at position >> 142 logicShape1, //its logical volume >> 143 "Shape1", //its name >> 144 logicEnv, //its mother volume >> 145 false, //no boolean operation >> 146 0, //copy number >> 147 checkOverlaps); //overlaps checking 116 148 117 // Conical section shape << 118 G4double shape1_rmina = 0. * cm, shape1_rmax << 119 G4double shape1_rminb = 0. * cm, shape1_rmax << 120 G4double shape1_hz = 3. * cm; << 121 G4double shape1_phimin = 0. * deg, shape1_ph << 122 G4Cons* solidShape1 = new G4Cons("Shape1", s << 123 shape1_hz, << 124 << 125 G4LogicalVolume* logicShape1 = new G4Logical << 126 << 127 << 128 << 129 new G4PVPlacement(0, // no rotation << 130 pos1, // at position << 131 logicShape1, // its logic << 132 "Shape1", // its name << 133 logicEnv, // its mother << 134 false, // no boolean oper << 135 0, // copy number << 136 checkOverlaps); // overla << 137 149 138 // << 150 // 139 // Shape 2 151 // Shape 2 140 // 152 // 141 G4Material* shape2_mat = nist->FindOrBuildMa 153 G4Material* shape2_mat = nist->FindOrBuildMaterial("G4_BONE_COMPACT_ICRU"); 142 G4ThreeVector pos2 = G4ThreeVector(0, -1 * c << 154 G4ThreeVector pos2 = G4ThreeVector(0, -1*cm, 7*cm); 143 << 144 // Trapezoid shape << 145 G4double shape2_dxa = 12 * cm, shape2_dxb = << 146 G4double shape2_dya = 10 * cm, shape2_dyb = << 147 G4double shape2_dz = 6 * cm; << 148 G4Trd* solidShape2 = new G4Trd("Shape2", // << 149 0.5 * shape2_ << 150 0.5 * shape2_ << 151 << 152 G4LogicalVolume* logicShape2 = new G4Logical << 153 << 154 << 155 << 156 new G4PVPlacement(0, // no rotation << 157 pos2, // at position << 158 logicShape2, // its logic << 159 "Shape2", // its name << 160 logicEnv, // its mother << 161 false, // no boolean oper << 162 0, // copy number << 163 checkOverlaps); // overla << 164 155 >> 156 // Trapezoid shape >> 157 G4double shape2_dxa = 12*cm, shape2_dxb = 12*cm; >> 158 G4double shape2_dya = 10*cm, shape2_dyb = 16*cm; >> 159 G4double shape2_dz = 6*cm; >> 160 G4Trd* solidShape2 = >> 161 new G4Trd("Shape2", //its name >> 162 0.5*shape2_dxa, 0.5*shape2_dxb, >> 163 0.5*shape2_dya, 0.5*shape2_dyb, 0.5*shape2_dz); //its size >> 164 >> 165 G4LogicalVolume* logicShape2 = >> 166 new G4LogicalVolume(solidShape2, //its solid >> 167 shape2_mat, //its material >> 168 "Shape2"); //its name >> 169 >> 170 new G4PVPlacement(0, //no rotation >> 171 pos2, //at position >> 172 logicShape2, //its logical volume >> 173 "Shape2", //its name >> 174 logicEnv, //its mother volume >> 175 false, //no boolean operation >> 176 0, //copy number >> 177 checkOverlaps); //overlaps checking >> 178 165 // Set Shape2 as scoring volume 179 // Set Shape2 as scoring volume 166 // 180 // 167 fScoringVolume = logicShape2; 181 fScoringVolume = logicShape2; 168 182 169 // 183 // 170 // always return the physical World << 184 //always return the physical World 171 // 185 // 172 return physWorld; 186 return physWorld; 173 } 187 } 174 188 175 //....oooOO0OOooo........oooOO0OOooo........oo 189 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 176 190