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 // This example is provided by the Geant4-DNA 26 // This example is provided by the Geant4-DNA collaboration 27 // Any report or published results obtained us 27 // Any report or published results obtained using the Geant4-DNA software 28 // shall cite the following Geant4-DNA collabo 28 // shall cite the following Geant4-DNA collaboration publication: 29 // Med. Phys. 37 (2010) 4692-4708 29 // Med. Phys. 37 (2010) 4692-4708 30 // The Geant4-DNA web site is available at htt 30 // The Geant4-DNA web site is available at http://geant4-dna.org 31 // 31 // 32 // If you use this example, please cite the fo 32 // If you use this example, please cite the following publication: 33 // Rad. Prot. Dos. 133 (2009) 2-11 33 // Rad. Prot. Dos. 133 (2009) 2-11 34 34 35 #include "DetectorConstruction.hh" 35 #include "DetectorConstruction.hh" 36 #include "G4PhysicalConstants.hh" 36 #include "G4PhysicalConstants.hh" 37 #include "G4SystemOfUnits.hh" 37 #include "G4SystemOfUnits.hh" 38 #include "G4MagIntegratorDriver.hh" << 38 39 #include "G4AutoDelete.hh" << 39 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 40 >> 41 G4ThreadLocal EMField* DetectorConstruction::fField = 0; >> 42 >> 43 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 40 44 41 DetectorConstruction::DetectorConstruction() 45 DetectorConstruction::DetectorConstruction() 42 46 43 :fDefaultMaterial(nullptr),fCollimatorMateri << 47 :fDefaultMaterial(NULL),fCollimatorMaterial(NULL),fBoiteMaterial(NULL), 44 fCathodeMaterial(nullptr),fVerreMaterial(nu << 48 fCathodeMaterial(NULL),fVerreMaterial(NULL),fVerre2Material(NULL), 45 fKgmMaterial(nullptr),fBoite2Material(nullp << 49 fKgmMaterial(NULL),fBoite2Material(NULL),fBoite3Material(NULL), 46 fNucleusMaterial1(nullptr),fCytoplasmMateri << 50 fNucleusMaterial1(NULL),fCytoplasmMaterial1(NULL), 47 fNucleusMaterial2(nullptr),fCytoplasmMateri << 51 fNucleusMaterial2(NULL),fCytoplasmMaterial2(NULL), 48 fNucleusMaterial3(nullptr),fCytoplasmMateri << 52 fNucleusMaterial3(NULL),fCytoplasmMaterial3(NULL), 49 fPhysiWorld(nullptr),fLogicWorld(nullptr),f << 53 fPhysiWorld(NULL),fLogicWorld(NULL),fSolidWorld(NULL), 50 fPhysiVol(nullptr),fLogicVol(nullptr),fSoli << 54 fPhysiVol(NULL),fLogicVol(NULL),fSolidVol(NULL), 51 fPhysiBoite(nullptr),fLogicBoite(nullptr),f << 55 fPhysiBoite(NULL),fLogicBoite(NULL),fSolidBoite(NULL), 52 fPhysiYoke1(nullptr),fLogicYoke1(nullptr),f << 56 fPhysiYoke1(NULL),fLogicYoke1(NULL),fSolidYoke1(NULL), 53 fPhysi1Gap(nullptr),fLogic1Gap(nullptr),fSo << 57 fPhysi1Gap(NULL),fLogic1Gap(NULL),fSolid1Gap(NULL), 54 fPhysi2Gap(nullptr),fLogic2Gap(nullptr),fSo << 58 fPhysi2Gap(NULL),fLogic2Gap(NULL),fSolid2Gap(NULL), 55 fPhysi3Gap(nullptr),fLogic3Gap(nullptr),fSo << 59 fPhysi3Gap(NULL),fLogic3Gap(NULL),fSolid3Gap(NULL), 56 fPhysiYoke2(nullptr),fLogicYoke2(nullptr),f << 60 fPhysiYoke2(NULL),fLogicYoke2(NULL),fSolidYoke2(NULL), 57 fPhysi4Gap(nullptr),fLogic4Gap(nullptr),fSo << 61 fPhysi4Gap(NULL),fLogic4Gap(NULL),fSolid4Gap(NULL), 58 fPhysi5Gap(nullptr),fLogic5Gap(nullptr),fSo << 62 fPhysi5Gap(NULL),fLogic5Gap(NULL),fSolid5Gap(NULL), 59 fPhysiBoiteIso(nullptr),fLogicBoiteIso(null << 63 fPhysiBoiteIso(NULL),fLogicBoiteIso(NULL),fSolidBoiteIso(NULL), 60 fPhysiCathode(nullptr),fLogicCathode(nullpt << 64 fPhysiCathode(NULL),fLogicCathode(NULL),fSolidCathode(NULL), 61 fPhysiIso(nullptr),fLogicIso(nullptr),fSoli << 65 fPhysiIso(NULL),fLogicIso(NULL),fSolidIso(NULL), 62 fPhysiVerre(nullptr),fLogicVerre(nullptr),f << 66 fPhysiVerre(NULL),fLogicVerre(NULL),fSolidVerre(NULL), 63 fPhysiBoite2(nullptr),fLogicBoite2(nullptr) << 67 fPhysiBoite2(NULL),fLogicBoite2(NULL),fSolidBoite2(NULL), 64 fPhysiBoite3(nullptr),fLogicBoite3(nullptr) << 68 fPhysiBoite3(NULL),fLogicBoite3(NULL),fSolidBoite3(NULL), 65 fPhysiKgm(nullptr),fLogicKgm(nullptr),fSoli << 69 fPhysiKgm(NULL),fLogicKgm(NULL),fSolidKgm(NULL), 66 fPhysiVerre2(nullptr),fLogicVerre2(nullptr) << 70 fPhysiVerre2(NULL),fLogicVerre2(NULL),fSolidVerre2(NULL), 67 fPhysiPhantom(nullptr),fLogicPhantom(nullpt << 71 fPhysiPhantom(NULL),fLogicPhantom(NULL),fSolidPhantom(NULL) 68 72 69 { 73 { 70 DefineMaterials(); << 74 fWorldSizeXY=fWorldSizeZ=0; 71 << 72 // Initialisation of variables which << 73 // will then be appropriately fixed in metho << 74 // to implement the simulation geometry set- << 75 fDensityPhantom = 0.; // in g/cm3 << 76 fDensityNucleus = 0.; // in g/cm3 << 77 fDensityCytoplasm = 0.; // in g/cm3 << 78 fWorldSizeXY=fWorldSizeZ=0.; << 79 fCollObjSizeXY = 0.; << 80 fCollObjSizeZ = 0.; << 81 << 82 // TARGET POSITION << 83 fCiblePositionX = 0.; << 84 fCiblePositionY = 0.; << 85 fCiblePositionZ = 0.; << 86 << 87 // MICROBEAM LINE ANGLE << 88 fLineAngle = 0.; << 89 << 90 fNbOfPixelsInPhantom=0; << 91 } 75 } 92 76 >> 77 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 78 93 DetectorConstruction::~DetectorConstruction() 79 DetectorConstruction::~DetectorConstruction() 94 {} << 80 { >> 81 delete fDefaultMaterial; >> 82 delete fCollimatorMaterial; >> 83 delete fBoiteMaterial; >> 84 delete fCathodeMaterial; >> 85 delete fVerreMaterial; >> 86 delete fVerre2Material; >> 87 delete fKgmMaterial; >> 88 delete fBoite2Material; >> 89 delete fBoite3Material; >> 90 delete fNucleusMaterial1; >> 91 delete fCytoplasmMaterial1; >> 92 delete fNucleusMaterial2; >> 93 delete fCytoplasmMaterial2; >> 94 delete fNucleusMaterial3; >> 95 delete fCytoplasmMaterial3; >> 96 } >> 97 >> 98 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 95 99 96 G4VPhysicalVolume* DetectorConstruction::Const 100 G4VPhysicalVolume* DetectorConstruction::Construct() >> 101 97 { 102 { 98 if(fPhysiWorld) { return fPhysiWorld; } << 103 DefineMaterials(); 99 return ConstructLine(); 104 return ConstructLine(); 100 } 105 } 101 106 >> 107 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 108 102 void DetectorConstruction::DefineMaterials() 109 void DetectorConstruction::DefineMaterials() 103 { 110 { >> 111 104 G4String name, symbol; 112 G4String name, symbol; 105 G4double density; 113 G4double density; 106 114 107 G4int ncomponents, natoms,nel; 115 G4int ncomponents, natoms,nel; 108 G4double z, a; 116 G4double z, a; 109 G4double fractionmass; 117 G4double fractionmass; 110 G4double temperature, pressure; 118 G4double temperature, pressure; 111 119 112 // Define Elements 120 // Define Elements 113 121 114 G4Element* H = new G4Element ("Hydrogen", 122 G4Element* H = new G4Element ("Hydrogen", "H", 1. , 1.01*g/mole); 115 G4Element* N = new G4Element ("Nitrogen", 123 G4Element* N = new G4Element ("Nitrogen", "N", 7., 14.01*g/mole); 116 G4Element* O = new G4Element ("Oxygen" , 124 G4Element* O = new G4Element ("Oxygen" , "O", 8. , 16.00*g/mole); 117 G4Element* Ar = new G4Element ("Argon" , " 125 G4Element* Ar = new G4Element ("Argon" , "Ar", 18., 39.948*g/mole ); 118 G4Element* C = new G4Element ("Carbon","C 126 G4Element* C = new G4Element ("Carbon","C", 6., 12.011*g/mole); 119 G4Element * Si = new G4Element ("Silicon"," 127 G4Element * Si = new G4Element ("Silicon","Si",14., 28.0855*g/mole); 120 G4Element * Cu = new G4Element ("Cuivre","C 128 G4Element * Cu = new G4Element ("Cuivre","Cu",29., 63.546*g/mole); 121 G4Element * Zn = new G4Element ("Zinc","Zn" 129 G4Element * Zn = new G4Element ("Zinc","Zn",30.,65.409*g/mole); 122 G4Element * P = new G4Element ("Phosphorus 130 G4Element * P = new G4Element ("Phosphorus","P",15.,30.973761*g/mole); 123 131 124 // Vacuum standard definition... 132 // Vacuum standard definition... 125 133 126 density = universe_mean_density; 134 density = universe_mean_density; 127 G4Material* vacuum = new G4Material(name="Va 135 G4Material* vacuum = new G4Material(name="Vacuum", z=1., a=1.01*g/mole, 128 density); 136 density); 129 // Water 137 // Water 130 138 131 density = 1.000*g/cm3; 139 density = 1.000*g/cm3; 132 G4Material* H2O = new G4Material(name="H2O" 140 G4Material* H2O = new G4Material(name="H2O" , density, ncomponents=2); 133 H2O->AddElement(H, natoms=2); 141 H2O->AddElement(H, natoms=2); 134 H2O->AddElement(O, natoms=1); 142 H2O->AddElement(O, natoms=1); 135 143 136 // Air 144 // Air 137 145 138 density = 1.290*mg/cm3; 146 density = 1.290*mg/cm3; 139 pressure = 1*atmosphere; 147 pressure = 1*atmosphere; 140 temperature = 293.16*kelvin; 148 temperature = 293.16*kelvin; 141 G4Material* Air = new G4Material(name="Air" 149 G4Material* Air = new G4Material(name="Air" , density, ncomponents=2, kStateGas, temperature, pressure); 142 Air->AddElement(N, fractionmass=0.7); 150 Air->AddElement(N, fractionmass=0.7); 143 Air->AddElement(O, fractionmass=0.3); 151 Air->AddElement(O, fractionmass=0.3); 144 152 145 // Low Pressure air 153 // Low Pressure air 146 154 147 density = (5e-6/1013.)*1.290*mg/cm3; // 5e-6 155 density = (5e-6/1013.)*1.290*mg/cm3; // 5e-6 mbar is the usual beam pipe air pressure 148 pressure = 1*atmosphere; 156 pressure = 1*atmosphere; 149 temperature = 293.16*kelvin; 157 temperature = 293.16*kelvin; 150 G4Material* LPAir = new G4Material(name="LPA 158 G4Material* LPAir = new G4Material(name="LPAir" , density, ncomponents=3, kStateGas, temperature, pressure); 151 LPAir->AddElement(N, fractionmass=0.715); 159 LPAir->AddElement(N, fractionmass=0.715); 152 LPAir->AddElement(O, fractionmass=0.25); 160 LPAir->AddElement(O, fractionmass=0.25); 153 LPAir->AddElement(Ar, fractionmass=0.035); 161 LPAir->AddElement(Ar, fractionmass=0.035); 154 162 155 // Platinum 163 // Platinum 156 164 157 a = 195.09*g/mole; 165 a = 195.09*g/mole; 158 density = 21.4*g/cm3; 166 density = 21.4*g/cm3; 159 G4Material* Pt = new G4Material(name="Pl", z 167 G4Material* Pt = new G4Material(name="Pl", z=78., a, density); 160 168 161 // Butane @ 10 mbar 169 // Butane @ 10 mbar 162 170 163 density = 2.552e-2*mg/cm3; 171 density = 2.552e-2*mg/cm3; 164 pressure = 0.01*bar; 172 pressure = 0.01*bar; 165 temperature = 293.16*kelvin; 173 temperature = 293.16*kelvin; 166 G4Material* Butane = new G4Material(name = " 174 G4Material* Butane = new G4Material(name = "Butane", density, nel = 2, kStateGas, temperature, pressure); 167 Butane->AddElement (C, natoms=4); 175 Butane->AddElement (C, natoms=4); 168 Butane->AddElement (H, natoms=10); 176 Butane->AddElement (H, natoms=10); 169 177 170 // Polypropylene 178 // Polypropylene 171 179 172 density = 0.9*g/cm3; 180 density = 0.9*g/cm3; 173 G4Material* Polyprop = new G4Material(name = 181 G4Material* Polyprop = new G4Material(name = "Polyprop", density, nel = 2); 174 Polyprop->AddElement (C,3); 182 Polyprop->AddElement (C,3); 175 Polyprop->AddElement (H,6); 183 Polyprop->AddElement (H,6); 176 184 177 // Si3N4 185 // Si3N4 178 186 179 density = 3.44*g/cm3; 187 density = 3.44*g/cm3; 180 G4Material* Si3N4 = new G4Material(name = "S 188 G4Material* Si3N4 = new G4Material(name = "Si3N4", density, nel = 2); 181 Si3N4->AddElement (Si, natoms=3); 189 Si3N4->AddElement (Si, natoms=3); 182 Si3N4->AddElement (N, natoms=4); 190 Si3N4->AddElement (N, natoms=4); 183 191 184 // SiO2 192 // SiO2 185 193 186 density = 2.5*g/cm3; 194 density = 2.5*g/cm3; 187 G4Material* SiO2 = new G4Material(name = "Si 195 G4Material* SiO2 = new G4Material(name = "SiO2", density, nel = 2); 188 SiO2->AddElement (Si, natoms=1); 196 SiO2->AddElement (Si, natoms=1); 189 SiO2->AddElement (O, natoms=2); 197 SiO2->AddElement (O, natoms=2); 190 198 191 // Brass 199 // Brass 192 200 193 density = 8.5*g/cm3; 201 density = 8.5*g/cm3; 194 G4Material* Laiton = new G4Material(name = " 202 G4Material* Laiton = new G4Material(name = "Laiton", density, nel = 2); 195 Laiton->AddElement (Cu,1); 203 Laiton->AddElement (Cu,1); 196 Laiton->AddElement (Zn,1); 204 Laiton->AddElement (Zn,1); 197 205 198 // Phantom 206 // Phantom 199 207 200 fDensityPhantom = 1.; // in g/cm3 208 fDensityPhantom = 1.; // in g/cm3 201 209 202 // Nucleus composition from Alard et al., Ra 210 // Nucleus composition from Alard et al., Rad. Res. 158, 650 (2002) and 203 // Comp. Math. Meth. Med. 147252 (2012) 211 // Comp. Math. Meth. Med. 147252 (2012) 204 // 212 // 205 // Cytoplasm composition is assumed to be wa 213 // Cytoplasm composition is assumed to be water 206 214 207 // Cytoplasm 215 // Cytoplasm 208 216 209 fDensityCytoplasm = 1.; // in g/cm3 217 fDensityCytoplasm = 1.; // in g/cm3 210 density = fDensityCytoplasm*g/cm3; 218 density = fDensityCytoplasm*g/cm3; 211 G4Material* Cytoplasm1 = new G4Material(name 219 G4Material* Cytoplasm1 = new G4Material(name="Cytoplasm1" , density, ncomponents=2); 212 Cytoplasm1->AddElement(H, fractionmass=0.112 220 Cytoplasm1->AddElement(H, fractionmass=0.112); 213 Cytoplasm1->AddElement(O, fractionmass=0.888 221 Cytoplasm1->AddElement(O, fractionmass=0.888); 214 222 215 // Nucleoli 223 // Nucleoli 216 224 217 fDensityCytoplasm = 1.; 225 fDensityCytoplasm = 1.; 218 // in g/cm3 (nucleoli are assumed to have th 226 // in g/cm3 (nucleoli are assumed to have the same chemical comp. as nucleus) 219 density = fDensityCytoplasm*g/cm3; 227 density = fDensityCytoplasm*g/cm3; 220 G4Material* Cytoplasm2 = new G4Material(name 228 G4Material* Cytoplasm2 = new G4Material(name="Cytoplasm2" , density, ncomponents=5); 221 Cytoplasm2->AddElement(H, fractionmass=0.106 229 Cytoplasm2->AddElement(H, fractionmass=0.1064); 222 Cytoplasm2->AddElement(O, fractionmass=0.745 230 Cytoplasm2->AddElement(O, fractionmass=0.745); 223 Cytoplasm2->AddElement(C, fractionmass=0.090 231 Cytoplasm2->AddElement(C, fractionmass=0.0904); 224 Cytoplasm2->AddElement(N, fractionmass=0.032 232 Cytoplasm2->AddElement(N, fractionmass=0.0321); 225 Cytoplasm2->AddElement(P, fractionmass=0.026 233 Cytoplasm2->AddElement(P, fractionmass=0.0261); 226 234 227 // default is water 235 // default is water 228 236 229 fDensityCytoplasm = 1.; // in g/cm3 237 fDensityCytoplasm = 1.; // in g/cm3 230 density = fDensityCytoplasm*g/cm3; 238 density = fDensityCytoplasm*g/cm3; 231 G4Material* Cytoplasm3 = new G4Material(name 239 G4Material* Cytoplasm3 = new G4Material(name="Cytoplasm3" , density, ncomponents=2); 232 Cytoplasm3->AddElement(H, fractionmass=0.112 240 Cytoplasm3->AddElement(H, fractionmass=0.112); 233 Cytoplasm3->AddElement(O, fractionmass=0.888 241 Cytoplasm3->AddElement(O, fractionmass=0.888); 234 242 235 // Nucleus chemical composition 243 // Nucleus chemical composition 236 244 237 fDensityNucleus = 1.; // in g/cm3 245 fDensityNucleus = 1.; // in g/cm3 238 density = fDensityNucleus*g/cm3; 246 density = fDensityNucleus*g/cm3; 239 G4Material* Nucleus1 = new G4Material(name=" 247 G4Material* Nucleus1 = new G4Material(name="Nucleus1" , density, ncomponents=5); 240 Nucleus1->AddElement(H, fractionmass=0.1064) 248 Nucleus1->AddElement(H, fractionmass=0.1064); 241 Nucleus1->AddElement(O, fractionmass=0.745); 249 Nucleus1->AddElement(O, fractionmass=0.745); 242 Nucleus1->AddElement(C, fractionmass=0.0904) 250 Nucleus1->AddElement(C, fractionmass=0.0904); 243 Nucleus1->AddElement(N, fractionmass=0.0321) 251 Nucleus1->AddElement(N, fractionmass=0.0321); 244 Nucleus1->AddElement(P, fractionmass=0.0261) 252 Nucleus1->AddElement(P, fractionmass=0.0261); 245 253 246 fDensityNucleus = 1.; // in g/cm3 254 fDensityNucleus = 1.; // in g/cm3 247 density = fDensityNucleus*g/cm3; 255 density = fDensityNucleus*g/cm3; 248 G4Material* Nucleus2 = new G4Material(name=" 256 G4Material* Nucleus2 = new G4Material(name="Nucleus2" , density, ncomponents=5); 249 Nucleus2->AddElement(H, fractionmass=0.1064) 257 Nucleus2->AddElement(H, fractionmass=0.1064); 250 Nucleus2->AddElement(O, fractionmass=0.745); 258 Nucleus2->AddElement(O, fractionmass=0.745); 251 Nucleus2->AddElement(C, fractionmass=0.0904) 259 Nucleus2->AddElement(C, fractionmass=0.0904); 252 Nucleus2->AddElement(N, fractionmass=0.0321) 260 Nucleus2->AddElement(N, fractionmass=0.0321); 253 Nucleus2->AddElement(P, fractionmass=0.0261) 261 Nucleus2->AddElement(P, fractionmass=0.0261); 254 262 255 // default 263 // default 256 264 257 fDensityNucleus = 1.; // in g/cm3 265 fDensityNucleus = 1.; // in g/cm3 258 density = fDensityNucleus*g/cm3; 266 density = fDensityNucleus*g/cm3; 259 G4Material* Nucleus3 = new G4Material(name=" 267 G4Material* Nucleus3 = new G4Material(name="Nucleus3" , density, ncomponents=5); 260 Nucleus3->AddElement(H, fractionmass=0.1064) 268 Nucleus3->AddElement(H, fractionmass=0.1064); 261 Nucleus3->AddElement(O, fractionmass=0.745); 269 Nucleus3->AddElement(O, fractionmass=0.745); 262 Nucleus3->AddElement(C, fractionmass=0.0904) 270 Nucleus3->AddElement(C, fractionmass=0.0904); 263 Nucleus3->AddElement(N, fractionmass=0.0321) 271 Nucleus3->AddElement(N, fractionmass=0.0321); 264 Nucleus3->AddElement(P, fractionmass=0.0261) 272 Nucleus3->AddElement(P, fractionmass=0.0261); 265 273 266 // Materials in setup 274 // Materials in setup 267 275 268 fDefaultMaterial = vacuum; 276 fDefaultMaterial = vacuum; 269 fCollimatorMaterial = Pt; 277 fCollimatorMaterial = Pt; 270 fBoiteMaterial = Butane; 278 fBoiteMaterial = Butane; 271 fCathodeMaterial = Laiton; 279 fCathodeMaterial = Laiton; 272 fVerreMaterial = Si3N4; 280 fVerreMaterial = Si3N4; 273 fVerre2Material = SiO2; 281 fVerre2Material = SiO2; 274 fKgmMaterial = H2O; 282 fKgmMaterial = H2O; 275 fBoite2Material = Air; 283 fBoite2Material = Air; 276 fBoite3Material = Polyprop; 284 fBoite3Material = Polyprop; 277 285 278 fNucleusMaterial1 = Nucleus1; 286 fNucleusMaterial1 = Nucleus1; 279 fCytoplasmMaterial1 = Cytoplasm1; 287 fCytoplasmMaterial1 = Cytoplasm1; 280 fNucleusMaterial2 = Nucleus2; 288 fNucleusMaterial2 = Nucleus2; 281 fCytoplasmMaterial2 = Cytoplasm2; 289 fCytoplasmMaterial2 = Cytoplasm2; 282 fNucleusMaterial3 = Nucleus3; 290 fNucleusMaterial3 = Nucleus3; 283 fCytoplasmMaterial3 = Cytoplasm3; 291 fCytoplasmMaterial3 = Cytoplasm3; 284 292 285 // DISPLAY MATERIALS 293 // DISPLAY MATERIALS 286 G4cout << G4endl << *(G4Material::GetMateria 294 G4cout << G4endl << *(G4Material::GetMaterialTable()) << G4endl; 287 295 288 } 296 } 289 297 >> 298 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 299 290 G4VPhysicalVolume* DetectorConstruction::Const 300 G4VPhysicalVolume* DetectorConstruction::ConstructLine() 291 { 301 { 292 // WORLD 302 // WORLD 293 fWorldSizeXY = 20*m; 303 fWorldSizeXY = 20*m; 294 fWorldSizeZ = 40*m; 304 fWorldSizeZ = 40*m; 295 305 296 // MICROBEAM LINE ANGLE 306 // MICROBEAM LINE ANGLE 297 fLineAngle = 10*deg; 307 fLineAngle = 10*deg; 298 308 299 // TARGET POSITION 309 // TARGET POSITION 300 fCiblePositionX = -1461.42*mm; 310 fCiblePositionX = -1461.42*mm; 301 fCiblePositionY = 0*mm; 311 fCiblePositionY = 0*mm; 302 fCiblePositionZ = -1327 + (955*std::cos(fLin 312 fCiblePositionZ = -1327 + (955*std::cos(fLineAngle))*mm; 303 313 304 //************* 314 //************* 305 // WORLD VOLUME 315 // WORLD VOLUME 306 //************* 316 //************* 307 317 308 fSolidWorld = new G4Box("World", 318 fSolidWorld = new G4Box("World", //its name 309 fWorldSizeXY/2,fWorldSizeXY/2,fWorldSi 319 fWorldSizeXY/2,fWorldSizeXY/2,fWorldSizeZ/2); //its size 310 320 311 321 312 fLogicWorld = new G4LogicalVolume(fSolidWorl 322 fLogicWorld = new G4LogicalVolume(fSolidWorld, //its solid 313 fDefaultMaterial, //its material 323 fDefaultMaterial, //its material 314 "World"); //its name 324 "World"); //its name 315 325 316 fPhysiWorld = new G4PVPlacement(0, //no 326 fPhysiWorld = new G4PVPlacement(0, //no rotation 317 G4ThreeVector(), //at (0,0,0) 327 G4ThreeVector(), //at (0,0,0) 318 "World", // 328 "World", //its name 319 fLogicWorld, 329 fLogicWorld, //its logical volume 320 nullptr, // << 330 NULL, //its mother volume 321 false, // 331 false, //no boolean operation 322 0); //co 332 0); //copy number 323 333 324 //***************** 334 //***************** 325 // FULL LINE VOLUME 335 // FULL LINE VOLUME 326 //***************** 336 //***************** 327 337 328 fSolidVol = new G4Box("Vol", 338 fSolidVol = new G4Box("Vol", 329 10.*m/2,10.*m/2,(14025)*mm/2); 339 10.*m/2,10.*m/2,(14025)*mm/2); 330 340 331 fLogicVol = new G4LogicalVolume(fSolidVol, 341 fLogicVol = new G4LogicalVolume(fSolidVol, 332 fDefaultMaterial, 342 fDefaultMaterial, 333 "Vol"); 343 "Vol"); 334 344 335 fPhysiVol = new G4PVPlacement(0, 345 fPhysiVol = new G4PVPlacement(0, 336 G4ThreeVector(0,0,-2012.5*mm), 346 G4ThreeVector(0,0,-2012.5*mm), 337 "Vol", 347 "Vol", 338 fLogicVol, 348 fLogicVol, 339 fPhysiWorld, 349 fPhysiWorld, 340 false, 350 false, 341 0); 351 0); 342 352 343 // ***************************************** 353 // ************************************************* 344 // Whole microbeam line at 10 deg contained 354 // Whole microbeam line at 10 deg contained in a box 345 // ***************************************** 355 // ************************************************* 346 356 347 G4double PosX = fCiblePositionX*mm +( (6958. 357 G4double PosX = fCiblePositionX*mm +( (6958.3/2-3.3)*std::sin(fLineAngle))*mm; 348 G4double PosZ = (fCiblePositionZ+2012.5)*mm 358 G4double PosZ = (fCiblePositionZ+2012.5)*mm - ((6958.3/2-3.3)*std::cos(fLineAngle))*mm; 349 359 350 // Adjust box absolute position 360 // Adjust box absolute position 351 361 352 PosX = PosX + 1.3 * micrometer * std::cos(fL 362 PosX = PosX + 1.3 * micrometer * std::cos(fLineAngle); 353 PosZ = PosZ + 1.3 * micrometer * std::sin(fL 363 PosZ = PosZ + 1.3 * micrometer * std::sin(fLineAngle); 354 364 355 G4RotationMatrix *rot = new G4RotationMatrix 365 G4RotationMatrix *rot = new G4RotationMatrix(); 356 // rot->rotateX(0*deg); << 366 rot->rotateX(0*deg); 357 rot->rotateY(10*deg); 367 rot->rotateY(10*deg); 358 // rot->rotateZ(0*deg); << 368 rot->rotateZ(0*deg); 359 369 360 fSolidBoite = new G4Box("Boite", 4*cm, 4*cm, 370 fSolidBoite = new G4Box("Boite", 4*cm, 4*cm, 6958.3*mm/2); 361 371 362 fLogicBoite = new G4LogicalVolume(fSolidBoit 372 fLogicBoite = new G4LogicalVolume(fSolidBoite, fDefaultMaterial, "Boite"); 363 373 364 fPhysiBoite = new G4PVPlacement(rot, 374 fPhysiBoite = new G4PVPlacement(rot, 365 G4ThreeVector(PosX,0,PosZ), 375 G4ThreeVector(PosX,0,PosZ), 366 "Boite", 376 "Boite", 367 fLogicBoite, 377 fLogicBoite, 368 fPhysiVol, 378 fPhysiVol, 369 false, 379 false, 370 0); 380 0); 371 381 372 //****************************************** 382 //********************************************************************* 373 // OBJECT COLLIMATOR (after switching magnet 383 // OBJECT COLLIMATOR (after switching magnet, 5 micrometer in diameter) 374 //****************************************** 384 //********************************************************************* 375 385 376 fCollObjSizeXY = 8*cm; 386 fCollObjSizeXY = 8*cm; 377 fCollObjSizeZ = 0.07*mm; 387 fCollObjSizeZ = 0.07*mm; 378 388 379 fSolidYoke1 = new G4Box("_CollObj_yoke1_", f 389 fSolidYoke1 = new G4Box("_CollObj_yoke1_", fCollObjSizeXY/2,fCollObjSizeXY/2,fCollObjSizeZ/2); 380 390 381 fLogicYoke1 = new G4LogicalVolume(fSolidYoke 391 fLogicYoke1 = new G4LogicalVolume(fSolidYoke1, fCollimatorMaterial, "_CollObj_yoke1_"); 382 392 383 fPhysiYoke1 = new G4PVPlacement( 0, G4ThreeV 393 fPhysiYoke1 = new G4PVPlacement( 0, G4ThreeVector(0,0,6958.3*mm/2-3.3*mm-6955*mm+0.07*mm/2), fLogicYoke1, 384 "_CollObj_y 394 "_CollObj_yoke1_",fLogicBoite, false, 0); 385 395 386 // --> FIRST PART 396 // --> FIRST PART 387 397 388 fSolid1Gap = new G4Cons("_CollObj_gap1_", 0. 398 fSolid1Gap = new G4Cons("_CollObj_gap1_", 0.*micrometer, 6*micrometer, 389 0.*micrometer,2.5*micrometer, 399 0.*micrometer,2.5*micrometer, 390 3.5*micrometer, 400 3.5*micrometer, 391 0, twopi); << 401 0, ((360*CLHEP::pi)/180)); 392 402 393 fLogic1Gap = new G4LogicalVolume(fSolid1Gap, 403 fLogic1Gap = new G4LogicalVolume(fSolid1Gap, fDefaultMaterial, "_CollObj_gap1_"); 394 404 395 fPhysi1Gap = new G4PVPlacement(0, G4ThreeVec 405 fPhysi1Gap = new G4PVPlacement(0, G4ThreeVector(0,0,0.0315*mm), fLogic1Gap, "_CollObj_gap1_", 396 fLogicYoke1, 406 fLogicYoke1, false, 0); 397 407 398 408 399 // --> SECOND PART 409 // --> SECOND PART 400 410 401 fSolid2Gap = new G4Cons("_CollObj_gap2_", 0. 411 fSolid2Gap = new G4Cons("_CollObj_gap2_", 0.*micrometer, 15*micrometer, 402 0.*micrometer,6*micrometer, 412 0.*micrometer,6*micrometer, 403 6.5*micrometer, 413 6.5*micrometer, 404 0, twopi); << 414 0, ((360*CLHEP::pi)/180)); 405 415 406 fLogic2Gap = new G4LogicalVolume(fSolid2Gap, 416 fLogic2Gap = new G4LogicalVolume(fSolid2Gap, fDefaultMaterial, "_CollObj_gap2_"); 407 417 408 fPhysi2Gap = new G4PVPlacement(0, G4ThreeVec 418 fPhysi2Gap = new G4PVPlacement(0, G4ThreeVector(0,0,0.0215*mm), fLogic2Gap, "_CollObj_gap2_", 409 fLogicYoke1, 419 fLogicYoke1, false, 0); 410 420 411 421 412 // --> THIRD PART 422 // --> THIRD PART 413 423 414 fSolid3Gap = new G4Cons("_CollObj_gap3_", 0. 424 fSolid3Gap = new G4Cons("_CollObj_gap3_", 0.*micrometer, 105*micrometer, 415 0.*micrometer,15*micrometer, 425 0.*micrometer,15*micrometer, 416 25*micrometer, 426 25*micrometer, 417 0, twopi); << 427 0, ((360*CLHEP::pi)/180)); 418 428 419 fLogic3Gap = new G4LogicalVolume(fSolid3Gap, 429 fLogic3Gap = new G4LogicalVolume(fSolid3Gap, fDefaultMaterial, "_CollObj_gap3_"); 420 430 421 fPhysi3Gap = new G4PVPlacement(0, G4ThreeVec 431 fPhysi3Gap = new G4PVPlacement(0, G4ThreeVector(0,0,-0.010*mm), fLogic3Gap, "_CollObj_gap3_", fLogicYoke1, 422 false, 0); 432 false, 0); 423 433 424 434 425 //************************ 435 //************************ 426 // GAS DETECTOR COLLIMATOR 436 // GAS DETECTOR COLLIMATOR 427 //************************ 437 //************************ 428 438 429 fSolidYoke2 = new G4Box("_CollDet_yoke_", 2. 439 fSolidYoke2 = new G4Box("_CollDet_yoke_", 2.5*cm, 2.5*cm, 0.035*mm); 430 440 431 fLogicYoke2 = new G4LogicalVolume(fSolidYoke 441 fLogicYoke2 = new G4LogicalVolume(fSolidYoke2, fCollimatorMaterial, "_CollDet_yoke_"); 432 442 433 fPhysiYoke2 = new G4PVPlacement(0, 443 fPhysiYoke2 = new G4PVPlacement(0, 434 G4ThreeVecto 444 G4ThreeVector(0,0,6958.3*mm/2-0.3*mm-3*mm-0.004*mm-0.1*mm-1*mm-2.5*mm-0.070*mm/2), 435 fLogicYoke2, 445 fLogicYoke2, "_CollDet_yoke_", fLogicBoite, false, 0); 436 446 437 // --> FIRST PART 447 // --> FIRST PART 438 448 439 fSolid4Gap = new G4Cons("_CollDet_gap4_", 0. 449 fSolid4Gap = new G4Cons("_CollDet_gap4_", 0.*micrometer, 8*micrometer, 440 0.*micrometer,5*micrometer, 450 0.*micrometer,5*micrometer, 441 7.5*micrometer, 451 7.5*micrometer, 442 0, twopi); << 452 0, ((360*CLHEP::pi)/180)); 443 453 444 fLogic4Gap = new G4LogicalVolume(fSolid4Gap, 454 fLogic4Gap = new G4LogicalVolume(fSolid4Gap, fDefaultMaterial, "_CollDet_gap4_"); 445 455 446 fPhysi4Gap = new G4PVPlacement(0, G4ThreeVec 456 fPhysi4Gap = new G4PVPlacement(0, G4ThreeVector(0,0,0.0275*mm), fLogic4Gap, "_CollDet_gap4_", 447 fLogicYoke2, 457 fLogicYoke2, false, 0); 448 458 449 // --> SECOND PART 459 // --> SECOND PART 450 460 451 fSolid5Gap = new G4Cons("_CollDet_gap5_", 0. 461 fSolid5Gap = new G4Cons("_CollDet_gap5_", 0.*micrometer, 105*micrometer, 452 0.*micrometer,8*micrometer, 462 0.*micrometer,8*micrometer, 453 27.5*micrometer, 463 27.5*micrometer, 454 0, twopi); << 464 0, ((360*CLHEP::pi)/180)); 455 465 456 fLogic5Gap = new G4LogicalVolume(fSolid5Gap, 466 fLogic5Gap = new G4LogicalVolume(fSolid5Gap, fDefaultMaterial, "_CollDet_gap5_"); 457 467 458 fPhysi5Gap = new G4PVPlacement(0, 468 fPhysi5Gap = new G4PVPlacement(0, 459 G4ThreeVector(0,0,-0.0075*mm), 469 G4ThreeVector(0,0,-0.0075*mm), 460 fLogic5Gap, 470 fLogic5Gap, 461 "_CollDet_gap5_", 471 "_CollDet_gap5_", 462 fLogicYoke2, 472 fLogicYoke2, 463 false, 473 false, 464 0); 474 0); 465 // ************ 475 // ************ 466 // GAS DETECTOR 476 // GAS DETECTOR 467 // ************ 477 // ************ 468 478 469 fSolidBoiteIso = new G4Box("Isobutane", 2.5* 479 fSolidBoiteIso = new G4Box("Isobutane", 2.5*cm, 2.5*cm, 1.75*mm); 470 480 471 fLogicBoiteIso = new G4LogicalVolume(fSolidB 481 fLogicBoiteIso = new G4LogicalVolume(fSolidBoiteIso, fBoiteMaterial, "Isobutane"); 472 482 473 fPhysiBoiteIso = new G4PVPlacement(0, 483 fPhysiBoiteIso = new G4PVPlacement(0, 474 G4ThreeVector(0,0,6958.3*mm/2-0.3*mm- 484 G4ThreeVector(0,0,6958.3*mm/2-0.3*mm-3*mm-0.004*mm-0.1*mm-3.5*mm/2), 475 "Isobutane", 485 "Isobutane", 476 fLogicBoiteIso, 486 fLogicBoiteIso, 477 fPhysiBoite, 487 fPhysiBoite, 478 false, 488 false, 479 0); 489 0); 480 490 481 // --> GAS DETECTOR END CAP 491 // --> GAS DETECTOR END CAP 482 492 483 fSolidCathode = new G4Box("_Laiton_", 2.5*cm 493 fSolidCathode = new G4Box("_Laiton_", 2.5*cm, 2.5*cm, 0.5*mm); 484 494 485 fLogicCathode = new G4LogicalVolume(fSolidCa 495 fLogicCathode = new G4LogicalVolume(fSolidCathode, fCathodeMaterial, "_Laiton_"); 486 496 487 fPhysiCathode = new G4PVPlacement(0, 497 fPhysiCathode = new G4PVPlacement(0, 488 G4ThreeVector(0,0,1.25*mm), 498 G4ThreeVector(0,0,1.25*mm), 489 "_Laiton_", 499 "_Laiton_", 490 fLogicCathode, 500 fLogicCathode, 491 fPhysiBoiteIso, 501 fPhysiBoiteIso, 492 false, 0); 502 false, 0); 493 503 494 // --> ISOBUTANE GAS 504 // --> ISOBUTANE GAS 495 505 496 fSolidIso = new G4Box("_Iso_", 1.*mm, 1.*mm, 506 fSolidIso = new G4Box("_Iso_", 1.*mm, 1.*mm, 0.499925*mm); 497 507 498 fLogicIso = new G4LogicalVolume(fSolidIso, f 508 fLogicIso = new G4LogicalVolume(fSolidIso, fBoiteMaterial, "_Iso_"); 499 509 500 fPhysiIso = new G4PVPlacement(0, 510 fPhysiIso = new G4PVPlacement(0, 501 G4ThreeVector(0,0,-0.000075*mm), 511 G4ThreeVector(0,0,-0.000075*mm), 502 "_Iso_", 512 "_Iso_", 503 fLogicIso, 513 fLogicIso, 504 fPhysiCathode, 514 fPhysiCathode, 505 false, 515 false, 506 0); 516 0); 507 517 508 // --> Si3N4 WINDOW 518 // --> Si3N4 WINDOW 509 519 510 fSolidVerre = new G4Box("_Si3N4_", 0.5*mm, 0 520 fSolidVerre = new G4Box("_Si3N4_", 0.5*mm, 0.5*mm, 0.075*micrometer); 511 521 512 fLogicVerre = new G4LogicalVolume(fSolidVerr 522 fLogicVerre = new G4LogicalVolume(fSolidVerre, fVerreMaterial, "_Si3N4_"); 513 523 514 524 515 fPhysiVerre = new G4PVPlacement(0, 525 fPhysiVerre = new G4PVPlacement(0, 516 G4ThreeVector(0,0,0.499925*mm), 526 G4ThreeVector(0,0,0.499925*mm), 517 "_Si3N4_", 527 "_Si3N4_", 518 fLogicVerre, 528 fLogicVerre, 519 fPhysiCathode, 529 fPhysiCathode, 520 false, 530 false, 521 0); 531 0); 522 // ******* 532 // ******* 523 // AIR GAP 533 // AIR GAP 524 // ******* 534 // ******* 525 535 526 fSolidBoite2 = new G4Box("_Air_", 2.5*cm, 2. 536 fSolidBoite2 = new G4Box("_Air_", 2.5*cm, 2.5*cm, 0.1*mm/2); 527 537 528 fLogicBoite2 = new G4LogicalVolume(fSolidBoi 538 fLogicBoite2 = new G4LogicalVolume(fSolidBoite2, fBoite2Material, "_Air_"); 529 539 530 fPhysiBoite2 = new G4PVPlacement(0, 540 fPhysiBoite2 = new G4PVPlacement(0, 531 G4ThreeVector(0,0,6958.3*mm/2-0.3*mm- 541 G4ThreeVector(0,0,6958.3*mm/2-0.3*mm-3*mm-0.004*mm-0.1*mm/2), 532 "_Air_", 542 "_Air_", 533 fLogicBoite2, 543 fLogicBoite2, 534 fPhysiBoite, 544 fPhysiBoite, 535 false, 545 false, 536 0); 546 0); 537 547 538 //************* 548 //************* 539 // CELL SUPPORT 549 // CELL SUPPORT 540 //************* 550 //************* 541 551 542 fSolidBoite3 = new G4Box("Polyprop", 2.5*cm, 552 fSolidBoite3 = new G4Box("Polyprop", 2.5*cm, 2.5*cm, 0.004*mm/2); 543 553 544 fLogicBoite3 = new G4LogicalVolume(fSolidBoi 554 fLogicBoite3 = new G4LogicalVolume(fSolidBoite3, fBoite3Material, "Polyprop"); 545 555 546 fPhysiBoite3 = new G4PVPlacement(0, 556 fPhysiBoite3 = new G4PVPlacement(0, 547 G4ThreeVector(0,0,6958.3*mm/2-0.3*mm 557 G4ThreeVector(0,0,6958.3*mm/2-0.3*mm-3*mm-0.004*mm/2), 548 "Polyprop", 558 "Polyprop", 549 fLogicBoite3, 559 fLogicBoite3, 550 fPhysiBoite, 560 fPhysiBoite, 551 false, 561 false, 552 0); 562 0); 553 //**** 563 //**** 554 // KGM 564 // KGM 555 //**** 565 //**** 556 566 557 fSolidKgm = new G4Box("KGM", 2.5*cm, 2.5*cm, 567 fSolidKgm = new G4Box("KGM", 2.5*cm, 2.5*cm, 3*mm/2); 558 568 559 fLogicKgm = new G4LogicalVolume(fSolidKgm, f 569 fLogicKgm = new G4LogicalVolume(fSolidKgm, fKgmMaterial, "KGM"); 560 570 561 fPhysiKgm = new G4PVPlacement(0, 571 fPhysiKgm = new G4PVPlacement(0, 562 G4ThreeVector(0,0,6958.3*mm/2-0.3 572 G4ThreeVector(0,0,6958.3*mm/2-0.3*mm-3*mm/2), 563 "KGM", 573 "KGM", 564 fLogicKgm, 574 fLogicKgm, 565 fPhysiBoite, 575 fPhysiBoite, 566 false, 576 false, 567 0); 577 0); 568 578 569 //***************** 579 //***************** 570 // MICROSCOPE PLATE 580 // MICROSCOPE PLATE 571 //***************** 581 //***************** 572 582 573 fSolidVerre2 = new G4Box("_Lame_", 2.5*cm, 2 583 fSolidVerre2 = new G4Box("_Lame_", 2.5*cm, 2.5*cm, 0.150*mm); 574 584 575 fLogicVerre2 = new G4LogicalVolume(fSolidVer 585 fLogicVerre2 = new G4LogicalVolume(fSolidVerre2, fVerre2Material, "_Lame_"); 576 586 577 fPhysiVerre2 = new G4PVPlacement(0, 587 fPhysiVerre2 = new G4PVPlacement(0, 578 G4ThreeVector(0,0,6958.3*mm/2-0.3*mm 588 G4ThreeVector(0,0,6958.3*mm/2-0.3*mm/2), 579 "_Lame_", 589 "_Lame_", 580 fLogicVerre2, 590 fLogicVerre2, 581 fPhysiBoite, 591 fPhysiBoite, 582 false, 592 false, 583 0); 593 0); 584 594 585 // ************** 595 // ************** 586 // CELL CYTOPLASM 596 // CELL CYTOPLASM 587 // ************** 597 // ************** 588 598 589 // WITHIN KGM 599 // WITHIN KGM 590 /* 600 /* 591 fSolidCyto=new G4Ellipsoid("CYTO",25*microme 601 fSolidCyto=new G4Ellipsoid("CYTO",25*micrometer, 25*micrometer, 11*micrometer); 592 602 593 fLogicCyto=new G4LogicalVolume (fSolidCyto, 603 fLogicCyto=new G4LogicalVolume (fSolidCyto, fDefaultMaterial, "CYTO"); 594 604 595 fPhysiCyto=new G4PVPlacement(0, G4ThreeVecto 605 fPhysiCyto=new G4PVPlacement(0, G4ThreeVector(0,0,-1.5*mm+11*micrometer),"CYTO",fLogicCyto, fPhysiKgm, false, 0); 596 */ 606 */ 597 607 598 // ************ 608 // ************ 599 // CELL PHANTOM 609 // CELL PHANTOM 600 // ************ 610 // ************ 601 611 602 fMyCellParameterisation = new CellParameteri << 603 (fNucleusMaterial1,fCytoplasmMaterial1 << 604 fNucleusMaterial2,fCytoplasmMaterial2, << 605 fNucleusMaterial3,fCytoplasmMaterial3); << 606 << 607 fSolidPhantom = new G4Box("Phantom", 612 fSolidPhantom = new G4Box("Phantom", 608 fMyCellParameterisation->GetPixelSizeX()/2 << 613 fMyPhantomConfiguration.GetPixelSizeX()/2, 609 fMyCellParameterisation->GetPixelSizeY()/2, << 614 fMyPhantomConfiguration.GetPixelSizeY()/2, 610 fMyCellParameterisation->GetPixelSizeZ()/2); << 615 fMyPhantomConfiguration.GetPixelSizeZ()/2); 611 616 612 fLogicPhantom = new G4LogicalVolume(fSolidPh 617 fLogicPhantom = new G4LogicalVolume(fSolidPhantom,fDefaultMaterial,"Phantom",0,0,0); 613 618 614 SetNbOfPixelsInPhantom (fMyCellParameterisat << 619 // PHANTOM MASSES 615 620 616 SetMassNucleus(fMyCellParameterisation->GetN << 621 SetNbOfPixelsInPhantom (fMyPhantomConfiguration.GetPhantomTotalPixels()); 617 622 618 SetMassCytoplasm(fMyCellParameterisation->Ge << 623 SetMassNucleus(fMyPhantomConfiguration.GetNucleusMass()); >> 624 >> 625 SetMassCytoplasm(fMyPhantomConfiguration.GetCytoplasmMass()); >> 626 >> 627 // PHANTOM >> 628 >> 629 fPhantomParam = new CellParameterisation >> 630 (fMyPhantomConfiguration.GetPhantomTotalPixels(), >> 631 fMyPhantomConfiguration.GetPixelSizeX()/2, >> 632 fMyPhantomConfiguration.GetPixelSizeY()/2, >> 633 fMyPhantomConfiguration.GetPixelSizeZ()/2, >> 634 fNucleusMaterial1,fCytoplasmMaterial1, >> 635 fNucleusMaterial2,fCytoplasmMaterial2, >> 636 fNucleusMaterial3,fCytoplasmMaterial3 >> 637 ); 619 638 620 fPhysiPhantom = new G4PVParameterised( 639 fPhysiPhantom = new G4PVParameterised( 621 "Phantom", 640 "Phantom", // their name 622 fLogicPhantom, 641 fLogicPhantom, // their logical volumr 623 //logicCyto, 642 //logicCyto, // Mother logical volume is Cyto 624 fLogicKgm, 643 fLogicKgm, // Mother logical volume is Kgm 625 kUndefined, // Are placed alon 644 kUndefined, // Are placed along this axis 626 fMyCellParameteris << 645 fPhantomParam->GetNoBoxes(), // Number of boxes 627 fMyCellParameteris << 646 fPhantomParam,false); // The parametrisation 628 647 629 G4cout << " ==========> The phantom contains << 648 G4cout << " ==========> The phantom contains " 630 G4cout << " ==========> Nucleus mass (kg)=" << 649 << fMyPhantomConfiguration.GetPhantomTotalPixels() << " voxels " << G4endl; 631 G4cout << " ==========> Cytoplasm mass (kg)= << 632 G4cout << " ==========> Voxel size X (um)=" << 633 G4cout << " ==========> Voxel size Y (um)=" << 634 G4cout << " ==========> Voxel size Z (um)=" << 635 G4cout << G4endl; 650 G4cout << G4endl; >> 651 >> 652 // USER LIMITS ON STEP LENGTH >> 653 >> 654 fLogicWorld->SetUserLimits(new G4UserLimits(100*mm)); >> 655 fLogicVol->SetUserLimits(new G4UserLimits(100*mm)); >> 656 fLogicBoite->SetUserLimits(new G4UserLimits(10*mm)); >> 657 >> 658 /* >> 659 logicPhantom->SetUserLimits (new G4UserLimits(0.5*micrometer)); >> 660 logic1Gap->SetUserLimits (new G4UserLimits(5*micrometer)); >> 661 logic2Gap->SetUserLimits (new G4UserLimits(5*micrometer)); >> 662 logic3Gap->SetUserLimits (new G4UserLimits(5*micrometer)); >> 663 logic4Gap->SetUserLimits (new G4UserLimits(5*micrometer)); >> 664 logic5Gap->SetUserLimits (new G4UserLimits(5*micrometer)); >> 665 logicBoiteIso->SetUserLimits (new G4UserLimits(200.*micrometer)); >> 666 logicCathode->SetUserLimits (new G4UserLimits(100.*micrometer)); >> 667 logicIso->SetUserLimits (new G4UserLimits(100.*micrometer)); >> 668 logicVerre->SetUserLimits (new G4UserLimits(0.02*micrometer)); >> 669 logicBoite2->SetUserLimits (new G4UserLimits(10*micrometer)); >> 670 logicBoite3->SetUserLimits (new G4UserLimits(0.2*micrometer)); >> 671 logicKgm->SetUserLimits (new G4UserLimits(1*micrometer)); >> 672 logicVerre2->SetUserLimits (new G4UserLimits(10*micrometer)); >> 673 */ 636 674 637 // VISUALISATION ATTRIBUTES (for phantom, se 675 // VISUALISATION ATTRIBUTES (for phantom, see in Parameterisation class) 638 676 639 G4VisAttributes* simpleWorldVisAtt= new G4Vi 677 G4VisAttributes* simpleWorldVisAtt= new G4VisAttributes(G4Colour(1.0,1.0,1.0)); //White 640 simpleWorldVisAtt->SetVisibility(true); 678 simpleWorldVisAtt->SetVisibility(true); 641 679 642 G4VisAttributes* simplePlain= new G4VisAttri 680 G4VisAttributes* simplePlain= new G4VisAttributes(G4Colour(1.0,1.0,1.0)); //White 643 simplePlain->SetVisibility(true); 681 simplePlain->SetVisibility(true); 644 simplePlain->SetForceSolid(true); 682 simplePlain->SetForceSolid(true); 645 683 646 G4VisAttributes* simpleBoxAttLine= new G4Vis 684 G4VisAttributes* simpleBoxAttLine= new G4VisAttributes(G4Colour(1.0,0.0,0.0)); 647 simpleBoxAttLine->SetVisibility(true); 685 simpleBoxAttLine->SetVisibility(true); 648 686 649 G4VisAttributes* simpleBoxAtt= new G4VisAttr 687 G4VisAttributes* simpleBoxAtt= new G4VisAttributes(G4Colour(1.0,1.0,0.0)); 650 simpleBoxAtt->SetDaughtersInvisible(false); 688 simpleBoxAtt->SetDaughtersInvisible(false); 651 simpleBoxAtt->SetForceSolid(false); 689 simpleBoxAtt->SetForceSolid(false); 652 690 653 G4VisAttributes* simpleBoxAtt2= new G4VisAtt 691 G4VisAttributes* simpleBoxAtt2= new G4VisAttributes(G4Colour(0.0,1.0,0.0)); 654 simpleBoxAtt2->SetDaughtersInvisible(false); 692 simpleBoxAtt2->SetDaughtersInvisible(false); 655 simpleBoxAtt2->SetForceSolid(false); 693 simpleBoxAtt2->SetForceSolid(false); 656 694 657 G4VisAttributes* simpleBoxAttKGM= new G4VisA 695 G4VisAttributes* simpleBoxAttKGM= new G4VisAttributes(G4Colour(0.0,0.0,1.0)); 658 simpleBoxAttKGM->SetDaughtersInvisible(false 696 simpleBoxAttKGM->SetDaughtersInvisible(false); 659 simpleBoxAttKGM->SetForceSolid(false); 697 simpleBoxAttKGM->SetForceSolid(false); 660 698 661 G4VisAttributes* simpleBoxAttPropyl= new G4V 699 G4VisAttributes* simpleBoxAttPropyl= new G4VisAttributes(G4Colour(1.0,1.0,1.0)); 662 simpleBoxAttPropyl->SetDaughtersInvisible(tr 700 simpleBoxAttPropyl->SetDaughtersInvisible(true); 663 simpleBoxAttPropyl->SetForceSolid(false); 701 simpleBoxAttPropyl->SetForceSolid(false); 664 702 665 G4VisAttributes* simpleBoxAttAir= new G4VisA 703 G4VisAttributes* simpleBoxAttAir= new G4VisAttributes(G4Colour(0.0,1.0,0.0)); 666 simpleBoxAttAir->SetDaughtersInvisible(true) 704 simpleBoxAttAir->SetDaughtersInvisible(true); 667 simpleBoxAttAir->SetForceSolid(false); 705 simpleBoxAttAir->SetForceSolid(false); 668 706 669 G4VisAttributes* simpleBoxAtt3= new G4VisAtt 707 G4VisAttributes* simpleBoxAtt3= new G4VisAttributes(G4Colour(0.0,0.0,1.0)); 670 simpleBoxAtt3->SetDaughtersInvisible(false); 708 simpleBoxAtt3->SetDaughtersInvisible(false); 671 simpleBoxAtt3->SetForceSolid(false); 709 simpleBoxAtt3->SetForceSolid(false); 672 710 673 fLogicYoke1->SetVisAttributes(simpleBoxAtt); 711 fLogicYoke1->SetVisAttributes(simpleBoxAtt); 674 fLogic1Gap->SetVisAttributes(simpleBoxAtt); 712 fLogic1Gap->SetVisAttributes(simpleBoxAtt); 675 fLogic2Gap->SetVisAttributes(simpleBoxAtt); 713 fLogic2Gap->SetVisAttributes(simpleBoxAtt); 676 fLogic3Gap->SetVisAttributes(simpleBoxAtt); 714 fLogic3Gap->SetVisAttributes(simpleBoxAtt); 677 fLogicYoke2->SetVisAttributes(simpleBoxAtt); 715 fLogicYoke2->SetVisAttributes(simpleBoxAtt); 678 fLogic4Gap->SetVisAttributes(simpleBoxAtt); 716 fLogic4Gap->SetVisAttributes(simpleBoxAtt); 679 fLogic5Gap->SetVisAttributes(simpleBoxAtt); 717 fLogic5Gap->SetVisAttributes(simpleBoxAtt); 680 fLogicBoite->SetVisAttributes(simpleBoxAttLi 718 fLogicBoite->SetVisAttributes(simpleBoxAttLine); 681 fLogicCathode->SetVisAttributes(simpleBoxAtt 719 fLogicCathode->SetVisAttributes(simpleBoxAttPropyl); 682 fLogicIso->SetVisAttributes(simpleBoxAttProp 720 fLogicIso->SetVisAttributes(simpleBoxAttPropyl); 683 fLogicBoiteIso->SetVisAttributes(simpleBoxAt 721 fLogicBoiteIso->SetVisAttributes(simpleBoxAttPropyl); 684 fLogicVerre->SetVisAttributes(simpleBoxAtt); 722 fLogicVerre->SetVisAttributes(simpleBoxAtt); 685 fLogicBoite2->SetVisAttributes(simpleBoxAttA 723 fLogicBoite2->SetVisAttributes(simpleBoxAttAir); 686 fLogicBoite3->SetVisAttributes(simpleBoxAtt) 724 fLogicBoite3->SetVisAttributes(simpleBoxAtt); 687 fLogicKgm->SetVisAttributes(simpleBoxAttKGM) 725 fLogicKgm->SetVisAttributes(simpleBoxAttKGM); 688 fLogicVerre2->SetVisAttributes(simpleBoxAtt) 726 fLogicVerre2->SetVisAttributes(simpleBoxAtt); 689 727 690 return fPhysiWorld; 728 return fPhysiWorld; 691 } 729 } 692 730 >> 731 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... >> 732 693 void DetectorConstruction::ConstructSDandField 733 void DetectorConstruction::ConstructSDandField() 694 { 734 { 695 EMField* field = new EMField(); << 735 if(!fField) fField = new EMField(); 696 G4AutoDelete::Register(field); << 697 736 698 G4EqMagElectricField* fEquation = new G4EqMa << 737 fEquation = new G4EqMagElectricField(fField); 699 G4MagIntegratorStepper* fStepper = new G4Cla << 738 fStepper = new G4ClassicalRK4 (fEquation); 700 G4FieldManager* fFieldMgr = << 739 fFieldMgr = G4TransportationManager::GetTransportationManager()->GetFieldManager(); 701 G4TransportationManager::GetTransportation << 740 fIntgrDriver = new G4MagInt_Driver(0.000001*mm,fStepper,fStepper->GetNumberOfVariables() ); 702 << 741 fChordFinder = new G4ChordFinder(fIntgrDriver); 703 // Relaxed << 704 G4MagInt_Driver* fIntgrDriver = << 705 new G4MagInt_Driver(1*mm,fStepper,fStepper << 706 << 707 G4ChordFinder* fChordFinder = new G4ChordFin << 708 fFieldMgr->SetChordFinder(fChordFinder); 742 fFieldMgr->SetChordFinder(fChordFinder); 709 fFieldMgr->SetDetectorField(field); << 743 fFieldMgr->SetDetectorField(fField); 710 << 744 711 // FOLLOWING PARAMETERS TUNED FROM RAY-TRACI 745 // FOLLOWING PARAMETERS TUNED FROM RAY-TRACING SIMULATIONS OF THE AIFIRA NANOBEAM LINE 712 /* << 746 713 fFieldMgr->GetChordFinder()->SetDeltaChord(1 747 fFieldMgr->GetChordFinder()->SetDeltaChord(1e-9*m); 714 fFieldMgr->SetDeltaIntersection(1e-9*m); 748 fFieldMgr->SetDeltaIntersection(1e-9*m); 715 fFieldMgr->SetDeltaOneStep(1e-9*m); 749 fFieldMgr->SetDeltaOneStep(1e-9*m); 716 750 717 fPropInField = 751 fPropInField = 718 G4TransportationManager::GetTransportation 752 G4TransportationManager::GetTransportationManager()->GetPropagatorInField(); 719 fPropInField->SetMinimumEpsilonStep(1e-16); << 753 fPropInField->SetMinimumEpsilonStep(1e-11); 720 fPropInField->SetMaximumEpsilonStep(1e-15); << 754 fPropInField->SetMaximumEpsilonStep(1e-10); 721 */ << 755 722 } 756 } 723 757