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