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