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 is the *BASIC* version of IORT, a Gean 27 // 28 // Main Authors: G.Russo(a,b), C.Casarino*(c), 29 // Contributor Authors: S.Guatelli(e) 30 // Past Authors: G.Arnetta(c), S.E.Mazzaglia(d 31 // 32 // (a) Fondazione Istituto San Raffaele G.Gi 33 // (b) IBFM-CNR , Segrate (Milano), Italy 34 // (c) LATO (Laboratorio di Tecnologie Oncol 35 // (d) Laboratori Nazionali del Sud of the I 36 // (e) University of Wollongong, Australia 37 // 38 // *Corresponding author, email to carlo.cas 39 ////////////////////////////////////////////// 40 41 #include "globals.hh" 42 #include "G4SystemOfUnits.hh" 43 #include "G4Box.hh" 44 #include "G4Tubs.hh" 45 #include "G4Cons.hh" 46 #include "G4VisAttributes.hh" 47 #include "G4Colour.hh" 48 #include "G4RunManager.hh" 49 #include "G4LogicalVolume.hh" 50 #include "G4PVPlacement.hh" 51 #include "G4RotationMatrix.hh" 52 #include "G4NistManager.hh" 53 #include "G4NistElementBuilder.hh" 54 #include "G4SubtractionSolid.hh" 55 #include "IORTDetectorConstruction.hh" 56 #include "Collimator100BeamLine.hh" 57 #include "Collimator100BeamLineMessenger.hh" 58 59 Collimator100BeamLine::Collimator100BeamLine() 60 physicalTreatmentRoom(0),iortDetectorConstru 61 62 63 solidFinalCollimatorIORT(0), 64 physiFinalCollimatorIORT(0), 65 66 solidGiunz1FinalCollIORT(0), 67 physiGiunz1FinalCollIORT(0), 68 69 solidGiunz2FinalCollIORT(0), 70 physiGiunz2FinalCollIORT(0), 71 72 solidGiunz3FinalCollIORT(0), 73 physiGiunz3FinalCollIORT(0), 74 75 solidGiunz3FinalCollIntIORT(0), 76 physiGiunz3FinalCollIntIORT(0), 77 78 solidGiunz4FinalCollIORT(0), 79 physiGiunz4FinalCollIORT(0), 80 81 solidGiunz5FinalCollIORT(0), 82 physiGiunz5FinalCollIORT(0), 83 84 solidBlocco1IORT(0), 85 physiBlocco1IORT(0), 86 87 solidBlocco2IORT(0), 88 physiBlocco2IORT(0), 89 90 solidBlocco3IORT(0), 91 physiBlocco3IORT(0), 92 93 solidBlocco20mmIORT(0), 94 physiBlocco20mmIORT(0), 95 96 solidCM1_1_2IORT(0), 97 physiCM1_1_2IORT(0), 98 99 solidCM1_2_2IORT(0), 100 physiCM1_2_2IORT(0), 101 102 solidCM2_1_2IORT(0), 103 physiCM2_1_2IORT(0), 104 105 solidCM2_2_2IORT(0), 106 physiCM2_2_2IORT(0), 107 108 solidCCMIORT(0), 109 physiCCMIORT(0), 110 111 solidPFS1IORT(0), 112 physiPFS1IORT(0), 113 114 solidPFS2IORT(0), 115 physiPFS2IORT(0), 116 117 solidPFS3IORT(0), 118 physiPFS3IORT(0), 119 120 solidFTIORT(0), 121 physiFTIORT(0) 122 123 124 { 125 // Messenger to change parameters of the col 126 collimatorMessenger = new Collimator100BeamL 127 128 } 129 ////////////////////////////////////////////// 130 Collimator100BeamLine::~Collimator100BeamLine( 131 { 132 delete collimatorMessenger; 133 delete iortDetectorConstruction; 134 } 135 136 ////////////////////////////////////////////// 137 138 139 G4VPhysicalVolume* Collimator100BeamLine::Cons 140 { 141 // Sets default geometry and materials 142 SetDefaultDimensions(); 143 144 // Construct the whole Collimator Beam Line 145 ConstructCollimator100BeamLine(); 146 147 148 // IORTDetectorConstruction builds ONLY the 149 iortDetectorConstruction = new IORTDetectorC 150 151 return physicalTreatmentRoom; 152 } 153 154 // In the following method the DEFAULTS used i 155 // collimator beam line are provided 156 // HERE THE USER CAN CHANGE THE GEOMETRY CHARA 157 // LINE ELEMENTS, ALTERNATIVELY HE/SHE CAN USE 158 // MESSENGER IS PROVIDED) 159 // 160 // DEFAULT MATERIAL ARE ALSO PROVIDED 161 // and COLOURS ARE ALSO DEFINED 162 // ------------------------------------------- 163 ////////////////////////////////////////////// 164 void Collimator100BeamLine::SetDefaultDimensio 165 { 166 167 // Set of coulors that can be used 168 white = new G4VisAttributes( G4Colour()); 169 white -> SetVisibility(true); 170 //white -> SetForceSolid(true); 171 172 blue = new G4VisAttributes(G4Colour(0. ,0. , 173 blue -> SetVisibility(true); 174 //blue -> SetForceSolid(true); 175 176 gray = new G4VisAttributes( G4Colour(0.5, 0. 177 gray-> SetVisibility(true); 178 //gray-> SetForceSolid(true); 179 180 red = new G4VisAttributes(G4Colour(1. ,0. ,0 181 red-> SetVisibility(true); 182 //red-> SetForceSolid(true); 183 184 yellow = new G4VisAttributes(G4Colour(1., 1. 185 yellow-> SetVisibility(true); 186 //yellow-> SetForceSolid(true); 187 188 green = new G4VisAttributes( G4Colour(25/255 189 green -> SetVisibility(true); 190 //green -> SetForceSolid(true); 191 192 darkGreen = new G4VisAttributes( G4Colour(0/ 193 darkGreen -> SetVisibility(true); 194 //darkGreen -> SetForceSolid(true); 195 196 darkOrange3 = new G4VisAttributes( G4Colour( 197 darkOrange3 -> SetVisibility(true); 198 //darkOrange3 -> SetForceSolid(true); 199 200 skyBlue = new G4VisAttributes( G4Colour(135/ 201 skyBlue -> SetVisibility(true); 202 //skyBlue -> SetForceSolid(true); 203 204 205 206 // Geometry FINAL COLLIMATOR DEFAULTS 207 208 G4double defaultOuterRadiusFinalCollimatorIO 209 OuterRadiusFinalCollimatorIORT = defaultOute 210 211 G4double defaultinnerRadiusFinalCollimatorIO 212 innerRadiusFinalCollimatorIORT = defaultinne 213 214 // DEFAULT DEFINITION OF THE MATERIALS 215 // All elements and compound definition foll 216 217 // ELEMENTS 218 G4bool isotopes = false; 219 G4Material* aluminumNist = G4NistManager::In 220 //G4Material* tantalumNist = G4NistManager:: 221 //G4Material* copperNistAsMaterial = G4NistM 222 G4Element* zincNist = G4NistManager::Instanc 223 G4Element* copperNist = G4NistManager::Insta 224 225 // COMPOUND 226 G4Material* airNist = G4NistManager::Instan 227 //G4Material* kaptonNist = G4NistManager::In 228 G4Material* galacticNist = G4NistManager::In 229 G4Material* PMMANist = G4NistManager::Instan 230 //G4Material* mylarNist = G4NistManager::Ins 231 G4Material* titanioNist = G4NistManager::Ins 232 233 234 G4double d; // Density 235 G4int nComponents;// Number of components 236 G4double fractionmass; // Fraction in mass o 237 238 d = 8.40*g/cm3; // brass 239 nComponents = 2; 240 G4Material* brass = new G4Material("Brass", 241 brass -> AddElement(zincNist, fractionmass = 242 brass -> AddElement(copperNist, fractionmass 243 244 245 // MATERIAL ASSIGNMENT 246 247 248 // Material of the FINAL COLLIMATOR IORT 249 finalCollimatorMaterialIORT = PMMANist; 250 251 // Junction 1 FINAL COLLIMATOR IORT 252 Giunz1FinalCollMaterialIORT = PMMANist; 253 254 // Junction 2 FINAL COLLIMATOR IORT 255 Giunz2FinalCollMaterialIORT = PMMANist; 256 257 // Junction 3 FINAL COLLIMATOR IORT 258 Giunz3FinalCollMaterialIORT = PMMANist; 259 260 // Junction 3 FINAL COLLIMATOR Int IORT 261 Giunz3FinalCollMaterialIntIORT = airNist; 262 263 // Junction 4 FINAL COLLIMATOR IORT 264 Giunz4FinalCollMaterialIORT = PMMANist; 265 266 // Junction 5 FINAL COLLIMATOR IORT 267 Giunz5FinalCollMaterialIORT = PMMANist; 268 269 // Block 1 Diameter 30 mm 270 Blocco1IORTMaterialIORT = PMMANist; 271 272 // Block 2 Diameter 30 mm 273 Blocco2IORTMaterialIORT = PMMANist; 274 275 // Block 3 Diameter 30 mm 276 Blocco3IORTMaterialIORT = PMMANist; 277 278 // Block Diameter 20 mm 279 Blocco20mmIORTMaterialIORT = PMMANist; 280 281 // First Monitor Chamber Lamina Al 1 of 2 282 CM1_1_2IORTMaterialIORT = aluminumNist; 283 284 // First Monitor Chamber Lamina Al 2 of 2 285 CM1_2_2IORTMaterialIORT = aluminumNist; 286 287 // Second Monitor Chamber Lamina Al 1 of 2 288 CM2_1_2IORTMaterialIORT = aluminumNist; 289 290 // Second Monitor Chamber Lamina Al 2 of 2 291 CM2_2_2IORTMaterialIORT = aluminumNist; 292 293 // Monitor Chamber Cylinder 294 CCMIORTMaterialIORT = PMMANist; 295 296 // Superior Final Part Monitor Chambers 297 PFS1IORTMaterialIORT = PMMANist; 298 299 // Superior Final Part Monitor Chambers 300 PFS2IORTMaterialIORT = PMMANist; 301 302 // Superior Final Part Monitor Chambers 303 PFS3IORTMaterialIORT = PMMANist; 304 305 // Superior Final Part Monitor Chambers Mater 306 FTIORTMaterialIORT = titanioNist; 307 308 // Vacuum Source 309 VSIORTMaterialIORT = galacticNist; 310 311 } 312 313 ////////////////////////////////////////////// 314 void Collimator100BeamLine::ConstructCollimato 315 { 316 // ----------------------------- 317 // Treatment room - World volume 318 //------------------------------ 319 // Treatment room sizes 320 const G4double worldX = 400.0 *cm; 321 const G4double worldY = 400.0 *cm; 322 const G4double worldZ = 400.0 *cm; 323 G4bool isotopes = false; 324 325 G4Material* airNist = G4NistManager::Instan 326 G4Box* treatmentRoom = new G4Box("TreatmentR 327 G4LogicalVolume* logicTreatmentRoom = new G4 328 329 330 0,0,0); 331 physicalTreatmentRoom = new G4PVPlacement(0, 332 G4ThreeVector(), 333 "physicalTreatmentRoom", 334 logicTreatmentRoom, 335 0,false,0); 336 337 338 // The treatment room is invisible in the Vi 339 logicTreatmentRoom -> SetVisAttributes (G4Vi 340 341 // Components of the Collimator Beam Line 342 343 IortBeamLineVacuumSource(); 344 IortBeamLineTitaniumWindows(); 345 IortBeamLineMonitorChambers(); 346 IortBeamLineBlocks() ; 347 IortBeamLineJunctions(); 348 IortBeamLineFinalCollimator(); 349 350 } 351 352 353 void Collimator100BeamLine::IortBeamLineVacuum 354 { 355 // ------------------------------------------ 356 // Vacuum Source 357 // ----------------------------------------- 358 359 360 G4double phi1 = 90. *deg; 361 362 363 G4RotationMatrix rm1; 364 rm1.rotateY(phi1); 365 366 const G4double outRadiusVSIORT = 44.75 *mm; 367 const G4double innRadiusVSIORT = 0.*mm; 368 const G4double hightVSIORT = 1. *mm; 369 const G4double startAngleVSIORT = 0.*deg; 370 const G4double spanningAngleVSIORT = 360.*de 371 const G4double XPositionVSIORT = -1062.797 * 372 373 solidVSIORT = new G4Tubs("VSIORT", innRadius 374 outRadiusVSIORT, 375 hightVSIORT, 376 startAngleVSIORT, 377 spanningAngleVSIORT); 378 379 G4LogicalVolume* logVSIORT = new G4LogicalVo 380 VSIORTMaterialIORT, "VSIOR 381 382 physiVSIORT = new G4PVPlacement(G4Transform3 383 "VSIORT", logVSIORT, physicalTrea 384 logVSIORT -> SetVisAttributes(green); 385 } 386 387 void Collimator100BeamLine::IortBeamLineTitani 388 { 389 // ------------------------------------------- 390 // Titanium Window 391 // ----------------------------------------- 392 393 G4double phi2 = 90. *deg; 394 395 396 G4RotationMatrix rm2; 397 rm2.rotateY(phi2); 398 399 400 const G4double outRadiusFTIORT = 44.75 *mm; 401 const G4double innRadiusFTIORT = 8.5 *mm; 402 const G4double hightFTIORT = 0.006 *mm; 403 const G4double startAngleFTIORT = 0.*deg; 404 const G4double spanningAngleFTIORT = 360.*de 405 const G4double XPositionFTIORT = -1061.791 * 406 407 408 solidFTIORT = new G4Tubs("FTIORT", innRadius 409 outRadiusFTIORT, 410 hightFTIORT, 411 startAngleFTIORT, 412 spanningAngleFTIORT); 413 414 G4LogicalVolume* logFTIORT = new G4LogicalVo 415 FTIORTMaterialIORT, "FTIOR 416 417 physiFTIORT = new G4PVPlacement(G4Transform3 418 "FTIORT", logFTIORT, physicalTrea 419 420 logFTIORT -> SetVisAttributes(yellow); 421 } 422 423 void Collimator100BeamLine::IortBeamLineMonito 424 { 425 426 G4double phi3 = 90. *deg; 427 428 // Matrix definition for a 90 deg rotatio 429 G4RotationMatrix rm3; 430 rm3.rotateY(phi3); 431 ////////////////////////////////////////////// 432 433 // Monitor Chambers System 434 435 ////////////////////////////////////////////// 436 437 438 // ----------------------------------------- 439 // Superior Final Part Monitor C 440 // ----------------------------------------- 441 442 const G4double outRadiusPFS3IORT = 44.75 *mm 443 const G4double innRadiusPFS3IORT = 17.5 *mm; 444 const G4double hightPFS3IORT = 3.03 *mm; 445 const G4double startAnglePFS3IORT = 0.*deg; 446 const G4double spanningAnglePFS3IORT = 360.* 447 const G4double XPositionPFS3IORT = -1048.755 448 449 450 solidPFS3IORT = new G4Tubs("PFS3IORT", innRa 451 outRadiusPFS3IORT, 452 hightPFS3IORT, 453 startAnglePFS3IORT, 454 spanningAnglePFS3IORT); 455 456 G4LogicalVolume* logPFS3IORT = new G4Logical 457 PFS3IORTMaterialIORT, "PFS 458 459 physiPFS3IORT = new G4PVPlacement(G4Transfor 460 "PFS3IORT", logPFS3IORT, physical 461 462 logPFS3IORT -> SetVisAttributes(white); 463 464 465 // ----------------------------------------- 466 // Superior Final Part Monitor C 467 // ----------------------------------------- 468 469 const G4double outRadiusPFS2IORT = 44.75 *mm 470 const G4double innRadiusPFS2IORT = 10. *mm; 471 const G4double hightPFS2IORT = 1.47 *mm; 472 const G4double startAnglePFS2IORT = 0.*deg; 473 const G4double spanningAnglePFS2IORT = 360.* 474 const G4double XPositionPFS2IORT = -1044.255 475 476 477 solidPFS2IORT = new G4Tubs("PFS2IORT", innRa 478 outRadiusPFS2IORT, 479 hightPFS2IORT, 480 startAnglePFS2IORT, 481 spanningAnglePFS2IORT); 482 483 G4LogicalVolume* logPFS2IORT = new G4Logical 484 PFS2IORTMaterialIORT, "PFS 485 486 physiPFS2IORT = new G4PVPlacement(G4Transfor 487 "PFS2IORT", logPFS2IORT, physical 488 489 logPFS2IORT -> SetVisAttributes(green); 490 491 // ----------------------------------------- 492 // Superior Final Part Monitor C 493 // ----------------------------------------- 494 495 const G4double outRadiusPFS1IORT = 35. *mm; 496 const G4double innRadiusPFS1IORT = 10. *mm; 497 const G4double hightPFS1IORT = 0.88 *mm; 498 const G4double startAnglePFS1IORT = 0.*deg; 499 const G4double spanningAnglePFS1IORT = 360.* 500 const G4double XPositionPFS1IORT = -1041.905 501 502 503 solidPFS1IORT = new G4Tubs("PFS1IORT", innRa 504 outRadiusPFS1IORT, 505 hightPFS1IORT, 506 startAnglePFS1IORT, 507 spanningAnglePFS1IORT); 508 509 G4LogicalVolume* logPFS1IORT = new G4Logical 510 PFS1IORTMaterialIORT, "PFS 511 512 physiPFS1IORT = new G4PVPlacement(G4Transfor 513 "PFS1IORT", logPFS1IORT, physical 514 515 logPFS1IORT -> SetVisAttributes(green); 516 517 // ----------------------------------------- 518 // Monitor Chambers Cylinder 519 // ----------------------------------------- 520 521 const G4double outRadiusCCMIORT = 35. *mm; 522 const G4double innRadiusCCMIORT = 10. *mm; 523 const G4double hightCCMIORT = 4.0125 *mm; 524 const G4double startAngleCCMIORT = 0.*deg; 525 const G4double spanningAngleCCMIORT = 360.*d 526 const G4double XPositionCCMIORT = -1037.0125 527 528 529 solidCCMIORT = new G4Tubs("CCMIORT", innRadi 530 outRadiusCCMIORT, 531 hightCCMIORT, 532 startAngleCCMIORT, 533 spanningAngleCCMIORT); 534 535 G4LogicalVolume* logCCMIORT = new G4LogicalV 536 CCMIORTMaterialIORT, "CCMI 537 538 physiCCMIORT = new G4PVPlacement(G4Transform 539 "CCMIORT", logCCMIORT, physicalTr 540 541 logCCMIORT -> SetVisAttributes(green); 542 543 544 // ----------------------------------------- 545 // Second Monitor Chamber Lamina Al 2 546 // ----------------------------------------- 547 548 const G4double outRadiusCM2_2_2IORT = 20. *m 549 const G4double innRadiusCM2_2_2IORT = 0. *mm 550 const G4double hightCM2_2_2IORT = 0.025 *mm; 551 const G4double startAngleCM2_2_2IORT = 0.*de 552 const G4double spanningAngleCM2_2_2IORT = 36 553 const G4double XPositionCM2_2_2IORT = -1041. 554 555 556 solidCM2_2_2IORT = new G4Tubs("CM2_2_2IORT", 557 outRadiusCM2_2_2IORT, 558 hightCM2_2_2IORT, 559 startAngleCM2_2_2IORT, 560 spanningAngleCM2_2_2IORT); 561 562 G4LogicalVolume* logCM2_2_2IORT = new G4Logi 563 CM2_2_2IORTMaterialIORT, " 564 565 physiCM2_2_2IORT = new G4PVPlacement(G4Trans 566 "CM2_2_2ORT", logCM2_2_2IORT, phy 567 568 logCM2_2_2IORT -> SetVisAttributes(green); 569 570 571 // ------------------------------------------- 572 // Second Monitor Chamber Lamina Al 1 573 // ----------------------------------------- 574 575 const G4double outRadiusCM2_1_2IORT = 20. *m 576 const G4double innRadiusCM2_1_2IORT = 0. *mm 577 const G4double hightCM2_1_2IORT = 0.025 *mm; 578 const G4double startAngleCM2_1_2IORT = 0.*de 579 const G4double spanningAngleCM2_1_2IORT = 36 580 const G4double XPositionCM2_1_2IORT = -1039. 581 582 583 solidCM2_1_2IORT = new G4Tubs("CM2_1_2IORT", 584 outRadiusCM2_1_2IORT, 585 hightCM2_1_2IORT, 586 startAngleCM2_1_2IORT, 587 spanningAngleCM2_1_2IORT); 588 589 G4LogicalVolume* logCM2_1_2IORT = new G4Logi 590 CM2_1_2IORTMaterialIORT, " 591 592 physiCM2_1_2IORT = new G4PVPlacement(G4Trans 593 "CM2_1_2ORT", logCM2_1_2IORT, phy 594 595 logCM2_1_2IORT -> SetVisAttributes(yellow); 596 597 // ----------------------------------------- 598 // First Monitor Chamber Lamina Al 2 599 // ----------------------------------------- 600 601 const G4double outRadiusCM1_2_2IORT = 20. *m 602 const G4double innRadiusCM1_2_2IORT = 0. *mm 603 const G4double hightCM1_2_2IORT = 0.025 *mm; 604 const G4double startAngleCM1_2_2IORT = 0.*de 605 const G4double spanningAngleCM1_2_2IORT = 36 606 const G4double XPositionCM1_2_2IORT = -1037. 607 608 609 solidCM1_2_2IORT = new G4Tubs("CM1_2_2IORT", 610 outRadiusCM1_2_2IORT, 611 hightCM1_2_2IORT, 612 startAngleCM1_2_2IORT, 613 spanningAngleCM1_2_2IORT); 614 615 G4LogicalVolume* logCM1_2_2IORT = new G4Logi 616 CM1_2_2IORTMaterialIORT, "CM1_ 617 618 physiCM1_2_2IORT = new G4PVPlacement(G4Trans 619 "CM1_2_2ORT", logCM1_2_2IORT, phy 620 621 622 logCM1_2_2IORT -> SetVisAttributes(yellow); 623 624 // ----------------------------------------- 625 // First Monitor Chamber Lamina Al 1 626 // ----------------------------------------- 627 628 const G4double outRadiusCM1_1_2IORT = 20. *m 629 const G4double innRadiusCM1_1_2IORT = 0. *mm 630 const G4double hightCM1_1_2IORT = 0.025 *mm; 631 const G4double startAngleCM1_1_2IORT = 0.*de 632 const G4double spanningAngleCM1_1_2IORT = 36 633 const G4double XPositionCM1_1_2IORT = -1035. 634 635 636 637 solidCM1_1_2IORT = new G4Tubs("CM1_1_2IORT", 638 outRadiusCM1_1_2IORT, 639 hightCM1_1_2IORT, 640 startAngleCM1_1_2IORT, 641 spanningAngleCM1_1_2IORT); 642 643 G4LogicalVolume* logCM1_1_2IORT = new G4Logi 644 CM1_1_2IORTMaterialIORT, " 645 646 physiCM1_1_2IORT = new G4PVPlacement(G4Trans 647 "CM1_1_2ORT", logCM1_1_2IORT, phy 648 logCM1_1_2IORT -> SetVisAttributes(yellow); 649 } 650 651 void Collimator100BeamLine::IortBeamLineBlocks 652 { 653 654 G4double phi4 = 90. *deg; 655 656 657 G4RotationMatrix rm4; 658 rm4.rotateY(phi4); 659 660 ////////////////////////////////////////////// 661 662 // IORT BEAM LINE BLOCKS 663 664 ////////////////////////////////////////////// 665 666 // ----------------------------------------- 667 // Block 4 // 668 // ----------------------------------------- 669 670 const G4double outRadiusBlocco20mmIORT = 36. 671 const G4double innRadiusBlocco20mmIORT = 10. 672 const G4double hightBlocco20mmIORT = 3. *mm; 673 const G4double startAngleBlocco20mmIORT = 0. 674 const G4double spanningAngleBlocco20mmIORT = 675 const G4double XPositionBlocco20mmIORT = -10 676 677 678 solidBlocco20mmIORT = new G4Tubs("Blocco20mm 679 outRadiusBlocco20mmIORT, 680 hightBlocco20mmIORT, 681 startAngleBlocco20mmIORT, 682 spanningAngleBlocco20mmIORT); 683 684 G4LogicalVolume* logBlocco20mmIORT = new G4L 685 Blocco20mmIORTMaterialIORT 686 687 physiBlocco20mmIORT = new G4PVPlacement(G4Tr 688 "Blocco20mmORT", logBlocco20mmIOR 689 690 691 logBlocco20mmIORT -> SetVisAttributes(green) 692 693 694 // -----------------------// 695 // Block 3 // 696 // -----------------------// 697 698 const G4double outRadiusBlocco3IORT = 36.5 * 699 const G4double innRadiusBlocco3IORT = 15. *m 700 const G4double hightBlocco3IORT = 3.5 *mm; 701 const G4double startAngleBlocco3IORT = 0.*de 702 const G4double spanningAngleBlocco3IORT = 36 703 const G4double XPositionBlocco3IORT = -1023. 704 705 706 solidBlocco3IORT = new G4Tubs("Blocco3IORT", 707 outRadiusBlocco3IORT, 708 hightBlocco3IORT, 709 startAngleBlocco3IORT, 710 spanningAngleBlocco3IORT); 711 712 G4LogicalVolume* logBlocco3IORT = new G4Logi 713 Blocco3IORTMaterialIORT, " 714 715 physiBlocco3IORT = new G4PVPlacement(G4Trans 716 "Blocco3ORT", logBlocco3IORT, phy 717 718 719 logBlocco3IORT -> SetVisAttributes(yellow); 720 721 // -----------------------// 722 // Block 2 // 723 // -----------------------// 724 725 const G4double outRadiusBlocco2IORT = 41.5 * 726 const G4double innRadiusBlocco2IORT = 15. *m 727 const G4double hightBlocco2IORT = 8. *mm; 728 const G4double startAngleBlocco2IORT = 0.*de 729 const G4double spanningAngleBlocco2IORT = 36 730 const G4double XPositionBlocco2IORT = -1012. 731 732 733 solidBlocco2IORT = new G4Tubs("Blocco2IORT", 734 outRadiusBlocco2IORT, 735 hightBlocco2IORT, 736 startAngleBlocco2IORT, 737 spanningAngleBlocco2IORT); 738 739 G4LogicalVolume* logBlocco2IORT = new G4Logi 740 Blocco2IORTMaterialIORT, " 741 742 physiBlocco2IORT = new G4PVPlacement(G4Trans 743 "Blocco2IORT", logBlocco2IORT, ph 744 745 746 logBlocco2IORT -> SetVisAttributes(red); 747 748 // ----------------------- // 749 // Block 1 // 750 // ----------------------- // 751 752 const G4double outRadiusBlocco1IORT = 52.0 * 753 const G4double innRadiusBlocco1IORT = 15. *m 754 const G4double hightBlocco1IORT = 8.5 *mm; 755 const G4double startAngleBlocco1IORT = 0.*de 756 const G4double spanningAngleBlocco1IORT = 36 757 const G4double XPositionBlocco1IORT = -995.5 758 759 760 solidBlocco1IORT = new G4Tubs("Blocco1IORT", 761 outRadiusBlocco1IORT, 762 hightBlocco1IORT, 763 startAngleBlocco1IORT, 764 spanningAngleBlocco1IORT); 765 766 G4LogicalVolume* logBlocco1IORT = new G4Logi 767 Blocco1IORTMaterialIORT, " 768 769 physiBlocco1IORT = new G4PVPlacement(G4Trans 770 "Blocco1IORT", logBlocco1IORT, ph 771 772 773 logBlocco1IORT -> SetVisAttributes(white); 774 775 } 776 777 void Collimator100BeamLine::IortBeamLineJuncti 778 { 779 780 781 G4double phi5 = 90. *deg; 782 783 784 G4RotationMatrix rm5; 785 rm5.rotateY(phi5); 786 // --------------------------------- // 787 // Junction 5 FINAL COLLIMATOR IORT // 788 // --------------------------------- // 789 790 const G4double outRadiusGiunz5FinalCollIORT 791 const G4double innRadiusGiunz5FinalCollIORT 792 const G4double hightGiunz5FinalCollIORT = 3. 793 const G4double startAngleGiunz5FinalCollIORT 794 const G4double spanningAngleGiunz5FinalCollI 795 const G4double Giunz5FinalCollXPositionIORT 796 797 798 799 solidGiunz5FinalCollIORT = new G4Tubs("Giunz 800 outRadiusGiunz5FinalCollIORT, 801 hightGiunz5FinalCollIORT, 802 startAngleGiunz5FinalCollIORT, 803 spanningAngleGiunz5FinalCollIORT); 804 805 G4LogicalVolume* logGiunz5FinalCollIORT = ne 806 Giunz5FinalCollMaterialIOR 807 808 physiGiunz5FinalCollIORT = new G4PVPlacement 809 "Giunz5FinalCollIORT", logGiunz5F 810 811 logGiunz5FinalCollIORT -> SetVisAttributes(y 812 813 // --------------------------------- // 814 // Junction 4 FINAL COLLIMATOR IORT // 815 // --------------------------------- // 816 817 const G4double outRadiusGiunz4FinalCollIORT 818 const G4double innRadiusGiunz4FinalCollIORT 819 const G4double hightGiunz4FinalCollIORT = 8. 820 const G4double startAngleGiunz4FinalCollIORT 821 const G4double spanningAngleGiunz4FinalCollI 822 const G4double Giunz4FinalCollXPositionIORT 823 824 825 826 solidGiunz4FinalCollIORT = new G4Tubs("Giunz 827 outRadiusGiunz4FinalCollIORT, 828 hightGiunz4FinalCollIORT, 829 startAngleGiunz4FinalCollIORT, 830 spanningAngleGiunz4FinalCollIORT); 831 832 G4LogicalVolume* logGiunz4FinalCollIORT = ne 833 Giunz4FinalCollMaterialIOR 834 835 physiGiunz4FinalCollIORT = new G4PVPlacement 836 "Giunz4FinalCollIORT", logGiunz4F 837 838 logGiunz4FinalCollIORT -> SetVisAttributes(b 839 840 841 842 // --------------------------------- // 843 // Junction 3 FINAL COLLIMATOR IORT // 844 // --------------------------------- // 845 846 const G4double outRadiusGiunz3FinalCollIORT 847 const G4double innRadiusGiunz3FinalCollIORT 848 const G4double hightGiunz3FinalCollIORT = 4. 849 const G4double startAngleGiunz3FinalCollIORT 850 const G4double spanningAngleGiunz3FinalCollI 851 const G4double Giunz3FinalCollXPositionIORT 852 853 854 solidGiunz3FinalCollIORT = new G4Tubs("Giunz 855 outRadiusGiunz3FinalCollIORT, 856 hightGiunz3FinalCollIORT, 857 startAngleGiunz3FinalCollIORT, 858 spanningAngleGiunz3FinalCollIORT); 859 860 G4LogicalVolume* logicsolidGiunz3FinalCollIO 861 Giunz3FinalCollMaterialIOR 862 863 physiGiunz3FinalCollIORT = new G4PVPlacement 864 "Giunz3FinalCollIORT", logicsolid 865 866 logicsolidGiunz3FinalCollIORT -> SetVisAttri 867 // logicsolidGiunz3FinalCollIORT -> SetVisAt 868 869 870 871 // --------------------------------- // 872 // Junction 3 FINAL COLLIMATOR IORT internal 873 // --------------------------------- // 874 875 876 877 solidGiunz3FinalCollIntIORT = new G4Cons("Gi 878 879 G4LogicalVolume* logicsolidGiunz3FinalCollIn 880 Giunz3FinalCollMaterialInt 881 882 physiGiunz3FinalCollIntIORT = new G4PVPlacem 883 884 logicsolidGiunz3FinalCollIntIORT -> SetVisAt 885 886 887 // --------------------------------- // 888 // Junction 2 FINAL COLLIMATOR IORT // 889 // --------------------------------- // 890 891 const G4double outRadiusGiunz2FinalCollIORT 892 const G4double innRadiusGiunz2FinalCollIORT 893 const G4double hightGiunz2FinalCollIORT = 5. 894 const G4double startAngleGiunz2FinalCollIORT 895 const G4double spanningAngleGiunz2FinalCollI 896 const G4double Giunz2FinalCollXPositionIORT 897 898 899 900 solidGiunz2FinalCollIORT = new G4Tubs("Giunz 901 outRadiusGiunz2FinalCollIORT, 902 hightGiunz2FinalCollIORT, 903 startAngleGiunz2FinalCollIORT, 904 spanningAngleGiunz2FinalCollIORT); 905 906 G4LogicalVolume* logGiunz2FinalCollIORT = ne 907 Giunz2FinalCollMaterialIOR 908 909 physiGiunz2FinalCollIORT = new G4PVPlacement 910 "Giunz2FinalCollIORT", logGiunz2F 911 912 logGiunz2FinalCollIORT -> SetVisAttributes(r 913 914 // --------------------------------- // 915 // Junction 1 FINAL COLLIMATOR IORT // 916 // --------------------------------- // 917 918 const G4double outRadiusGiunz1FinalCollIORT 919 const G4double innRadiusGiunz1FinalCollIORT 920 const G4double hightGiunz1FinalCollIORT = 10 921 const G4double startAngleGiunz1FinalCollIORT 922 const G4double spanningAngleGiunz1FinalCollI 923 const G4double Giunz1FinalCollXPositionIORT 924 925 926 927 solidGiunz1FinalCollIORT = new G4Tubs("Giunz 928 outRadiusGiunz1FinalCollIORT, 929 hightGiunz1FinalCollIORT, 930 startAngleGiunz1FinalCollIORT, 931 spanningAngleGiunz1FinalCollIORT); 932 933 G4LogicalVolume* logGiunz1FinalCollIORT = ne 934 Giunz1FinalCollMaterialIOR 935 936 physiGiunz1FinalCollIORT = new G4PVPlacement 937 "Giunz1FinalCollIORT", logGiunz1F 938 939 logGiunz1FinalCollIORT -> SetVisAttributes( 940 941 } 942 943 void Collimator100BeamLine::IortBeamLineFinalC 944 { 945 // -----------------------// 946 // FINAL COLLIMATOR IORT // 947 //------------------------// 948 949 // const G4double outRadiusFinalCollimatorIOR 950 // const G4double innRadiusFinalCollimatorIOR 951 const G4double hightFinalCollimatorIORT = 43 952 const G4double startAngleFinalCollimatorIORT 953 const G4double spanningAngleFinalCollimatorI 954 const G4double finalCollimatorXPositionIORT 955 956 957 958 959 G4double phi6 = 90. *deg; 960 961 962 G4RotationMatrix rm6; 963 rm6.rotateY(phi6); 964 965 966 solidFinalCollimatorIORT = new G4Tubs("Final 967 OuterRadiusFinalCollimatorIORT, 968 hightFinalCollimatorIORT, 969 startAngleFinalCollimatorIORT, 970 spanningAngleFinalCollimatorIORT); 971 972 G4LogicalVolume* logFinalCollimatorIORT = ne 973 finalCollimatorMaterialIOR 974 975 physiFinalCollimatorIORT = new G4PVPlacement 976 "FinalCollimatorIORT", logFinalCo 977 978 // logFinalCollimatorIORT -> SetVisAttribut 979 logFinalCollimatorIORT -> SetVisAttributes( 980 981 } 982 983 ////////////////////////////////////////////// 984 /////////////////////////// MESSENGER //////// 985 ////////////////////////////////////////////// 986 987 988 void Collimator100BeamLine::SetInnerRadiusFina 989 { 990 solidFinalCollimatorIORT -> SetInnerRadius(v 991 G4RunManager::GetRunManager() -> GeometryHas 992 G4cout<<"Inner Radius of the final collimato 993 << solidFinalCollimatorIORT -> GetInnerRadiu 994 << G4endl; 995 } 996 997 ////////////////////////////////////////////// 998 999 void Collimator100BeamLine::SetOuterRadiusFina 1000 { 1001 solidFinalCollimatorIORT -> SetOuterRadius( 1002 G4RunManager::GetRunManager() -> GeometryHa 1003 G4cout<<"Outer Radius of the final collimat 1004 << solidFinalCollimatorIORT -> GetOuterRadi 1005 << G4endl; 1006 } 1007 1008 ///////////////////////////////////////////// 1009 1010 1011 1012