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 "Collimator60BeamLine.hh" 57 #include "Collimator60BeamLineMessenger.hh" 58 59 Collimator60BeamLine::Collimator60BeamLine(): 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 Collimator60BeamLi 128 129 } 130 ////////////////////////////////////////////// 131 Collimator60BeamLine::~Collimator60BeamLine() 132 { 133 delete collimatorMessenger; 134 delete iortDetectorConstruction; 135 } 136 137 ////////////////////////////////////////////// 138 139 140 G4VPhysicalVolume* Collimator60BeamLine::Const 141 { 142 // Sets default geometry and materials 143 SetDefaultDimensions(); 144 145 // Construct the whole Collimator Beam Line 146 ConstructCollimator60BeamLine(); 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 Collimator60BeamLine::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 Collimator60BeamLine::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 Collimator60BeamLine::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 390 void Collimator60BeamLine::IortBeamLineTitaniu 391 { 392 // ------------------------------------------- 393 // Titanium Window 394 // ----------------------------------------- 395 396 G4double phi2 = 90. *deg; 397 398 399 G4RotationMatrix rm2; 400 rm2.rotateY(phi2); 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 Collimator60BeamLine::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 Collimator60BeamLine::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 696 solidBlocco3IORT = new G4Tubs("Blocco3IORT", 697 outRadiusBlocco3IORT, 698 hightBlocco3IORT, 699 startAngleBlocco3IORT, 700 spanningAngleBlocco3IORT); 701 702 G4LogicalVolume* logBlocco3IORT = new G4Logi 703 Blocco3IORTMaterialIORT, " 704 705 physiBlocco3IORT = new G4PVPlacement(G4Trans 706 "Blocco3ORT", logBlocco3IORT, phy 707 708 logBlocco3IORT -> SetVisAttributes(yellow); 709 710 // -----------------------// 711 // Block 2 // 712 // -----------------------// 713 714 const G4double outRadiusBlocco2IORT = 41.5 * 715 const G4double innRadiusBlocco2IORT = 15. *m 716 const G4double hightBlocco2IORT = 8. *mm; 717 const G4double startAngleBlocco2IORT = 0.*de 718 const G4double spanningAngleBlocco2IORT = 36 719 const G4double XPositionBlocco2IORT = -812. 720 721 722 solidBlocco2IORT = new G4Tubs("Blocco2IORT", 723 outRadiusBlocco2IORT, 724 hightBlocco2IORT, 725 startAngleBlocco2IORT, 726 spanningAngleBlocco2IORT); 727 728 G4LogicalVolume* logBlocco2IORT = new G4Logi 729 Blocco2IORTMaterialIORT, " 730 731 physiBlocco2IORT = new G4PVPlacement(G4Trans 732 "Blocco2IORT", logBlocco2IORT, ph 733 734 logBlocco2IORT -> SetVisAttributes(red); 735 736 // ----------------------- // 737 // Block 1 // 738 // ----------------------- // 739 740 const G4double outRadiusBlocco1IORT = 52.0 * 741 const G4double innRadiusBlocco1IORT = 15. *m 742 const G4double hightBlocco1IORT = 8.5 *mm; 743 const G4double startAngleBlocco1IORT = 0.*de 744 const G4double spanningAngleBlocco1IORT = 36 745 const G4double XPositionBlocco1IORT = -795.5 746 747 solidBlocco1IORT = new G4Tubs("Blocco1IORT", 748 outRadiusBlocco1IORT, 749 hightBlocco1IORT, 750 startAngleBlocco1IORT, 751 spanningAngleBlocco1IORT); 752 753 G4LogicalVolume* logBlocco1IORT = new G4Logi 754 Blocco1IORTMaterialIORT, " 755 756 physiBlocco1IORT = new G4PVPlacement(G4Trans 757 "Blocco1IORT", logBlocco1IORT, ph 758 759 logBlocco1IORT -> SetVisAttributes(white); 760 } 761 762 void Collimator60BeamLine::IortBeamLineJunctio 763 { 764 765 766 G4double phi5 = 90. *deg; 767 768 769 G4RotationMatrix rm5; 770 rm5.rotateY(phi5); 771 772 // --------------------------------- // 773 // Junction 5 FINAL COLLIMATOR IORT // 774 // --------------------------------- // 775 776 const G4double outRadiusGiunz5FinalCollIORT 777 const G4double innRadiusGiunz5FinalCollIORT 778 const G4double hightGiunz5FinalCollIORT = 3. 779 const G4double startAngleGiunz5FinalCollIORT 780 const G4double spanningAngleGiunz5FinalCollI 781 const G4double Giunz5FinalCollXPositionIORT 782 783 solidGiunz5FinalCollIORT = new G4Tubs("Giunz 784 outRadiusGiunz5FinalCollIORT, 785 hightGiunz5FinalCollIORT, 786 startAngleGiunz5FinalCollIORT, 787 spanningAngleGiunz5FinalCollIORT); 788 789 G4LogicalVolume* logGiunz5FinalCollIORT = ne 790 Giunz5FinalCollMaterialIOR 791 792 physiGiunz5FinalCollIORT = new G4PVPlacement 793 "Giunz5FinalCollIORT", logGiunz5F 794 795 logGiunz5FinalCollIORT -> SetVisAttributes(y 796 797 // --------------------------------- // 798 // Junction 4 FINAL COLLIMATOR IORT // 799 // --------------------------------- // 800 801 const G4double outRadiusGiunz4FinalCollIORT 802 const G4double innRadiusGiunz4FinalCollIORT 803 const G4double hightGiunz4FinalCollIORT = 8. 804 const G4double startAngleGiunz4FinalCollIORT 805 const G4double spanningAngleGiunz4FinalCollI 806 const G4double Giunz4FinalCollXPositionIORT 807 808 solidGiunz4FinalCollIORT = new G4Tubs("Giunz 809 outRadiusGiunz4FinalCollIORT, 810 hightGiunz4FinalCollIORT, 811 startAngleGiunz4FinalCollIORT, 812 spanningAngleGiunz4FinalCollIORT); 813 814 G4LogicalVolume* logGiunz4FinalCollIORT = ne 815 Giunz4FinalCollMaterialIOR 816 817 physiGiunz4FinalCollIORT = new G4PVPlacement 818 "Giunz4FinalCollIORT", logGiunz4F 819 820 logGiunz4FinalCollIORT -> SetVisAttributes(b 821 822 823 824 // --------------------------------- // 825 // Junction 3 FINAL COLLIMATOR IORT // 826 // --------------------------------- // 827 828 const G4double outRadiusGiunz3FinalCollIORT 829 const G4double innRadiusGiunz3FinalCollIORT 830 const G4double hightGiunz3FinalCollIORT = 4. 831 const G4double startAngleGiunz3FinalCollIORT 832 const G4double spanningAngleGiunz3FinalCollI 833 const G4double Giunz3FinalCollXPositionIORT 834 835 836 solidGiunz3FinalCollIORT = new G4Tubs("Giunz 837 outRadiusGiunz3FinalCollIORT, 838 hightGiunz3FinalCollIORT, 839 startAngleGiunz3FinalCollIORT, 840 spanningAngleGiunz3FinalCollIORT); 841 842 G4LogicalVolume* logicsolidGiunz3FinalCollIO 843 Giunz3FinalCollMaterialIOR 844 845 physiGiunz3FinalCollIORT = new G4PVPlacement 846 "Giunz3FinalCollIORT", logicsolid 847 848 logicsolidGiunz3FinalCollIORT -> SetVisAttri 849 // logicsolidGiunz3FinalCollIORT -> SetVisAt 850 851 852 853 // --------------------------------- // 854 // Junction 3 FINAL COLLIMATOR IORT internal 855 // --------------------------------- // 856 857 858 859 solidGiunz3FinalCollIntIORT = new G4Cons("Gi 860 861 G4LogicalVolume* logicsolidGiunz3FinalCollIn 862 Giunz3FinalCollMaterialInt 863 864 physiGiunz3FinalCollIntIORT = new G4PVPlacem 865 866 logicsolidGiunz3FinalCollIntIORT -> SetVisAt 867 868 869 // --------------------------------- // 870 // Junction 2 FINAL COLLIMATOR IORT // 871 // --------------------------------- // 872 873 const G4double outRadiusGiunz2FinalCollIORT 874 const G4double innRadiusGiunz2FinalCollIORT 875 const G4double hightGiunz2FinalCollIORT = 5. 876 const G4double startAngleGiunz2FinalCollIORT 877 const G4double spanningAngleGiunz2FinalCollI 878 const G4double Giunz2FinalCollXPositionIORT 879 880 solidGiunz2FinalCollIORT = new G4Tubs("Giunz 881 outRadiusGiunz2FinalCollIORT, 882 hightGiunz2FinalCollIORT, 883 startAngleGiunz2FinalCollIORT, 884 spanningAngleGiunz2FinalCollIORT); 885 886 G4LogicalVolume* logGiunz2FinalCollIORT = ne 887 Giunz2FinalCollMaterialIOR 888 889 physiGiunz2FinalCollIORT = new G4PVPlacement 890 "Giunz2FinalCollIORT", logGiunz2F 891 892 logGiunz2FinalCollIORT -> SetVisAttributes(r 893 894 // --------------------------------- // 895 // Junction 1 FINAL COLLIMATOR IORT // 896 // --------------------------------- // 897 898 const G4double outRadiusGiunz1FinalCollIORT 899 const G4double innRadiusGiunz1FinalCollIORT 900 const G4double hightGiunz1FinalCollIORT = 10 901 const G4double startAngleGiunz1FinalCollIORT 902 const G4double spanningAngleGiunz1FinalCollI 903 const G4double Giunz1FinalCollXPositionIORT 904 905 solidGiunz1FinalCollIORT = new G4Tubs("Giunz 906 outRadiusGiunz1FinalCollIORT, 907 hightGiunz1FinalCollIORT, 908 startAngleGiunz1FinalCollIORT, 909 spanningAngleGiunz1FinalCollIORT); 910 911 G4LogicalVolume* logGiunz1FinalCollIORT = ne 912 Giunz1FinalCollMaterialIOR 913 914 physiGiunz1FinalCollIORT = new G4PVPlacement 915 "Giunz1FinalCollIORT", logGiunz1F 916 917 logGiunz1FinalCollIORT -> SetVisAttributes(g 918 } 919 920 void Collimator60BeamLine::IortBeamLineFinalCo 921 { 922 // -----------------------// 923 // FINAL COLLIMATOR IORT // 924 //------------------------// 925 926 // const G4double OuterRadiusFinalCollimatorI 927 // const G4double innerRadiusFinalCollimatorI 928 const G4double hightFinalCollimatorIORT = 33 929 const G4double startAngleFinalCollimatorIORT 930 const G4double spanningAngleFinalCollimatorI 931 const G4double finalCollimatorXPositionIORT 932 933 934 935 936 G4double phi6 = 90. *deg; 937 938 939 G4RotationMatrix rm6; 940 rm6.rotateY(phi6); 941 942 943 solidFinalCollimatorIORT = new G4Tubs("Final 944 OuterRadiusFinalCollimatorIORT, 945 hightFinalCollimatorIORT, 946 startAngleFinalCollimatorIORT, 947 spanningAngleFinalCollimatorIORT); 948 949 G4LogicalVolume* logFinalCollimatorIORT = ne 950 finalCollimatorMaterialIOR 951 952 physiFinalCollimatorIORT = new G4PVPlacement 953 "FinalCollimatorIORT", logFinalCo 954 955 // logFinalCollimatorIORT -> SetVisAttribut 956 logFinalCollimatorIORT -> SetVisAttributes(b 957 } 958 959 ////////////////////////////////////////////// 960 /////////////////////////// MESSENGER //////// 961 ////////////////////////////////////////////// 962 963 964 void Collimator60BeamLine::SetInnerRadiusFinal 965 { 966 solidFinalCollimatorIORT -> SetInnerRadius(v 967 G4RunManager::GetRunManager() -> GeometryHas 968 G4cout<<"Inner Radius of the final collimato 969 << solidFinalCollimatorIORT -> GetInnerRadiu 970 << G4endl; 971 } 972 973 ////////////////////////////////////////////// 974 975 void Collimator60BeamLine::SetOuterRadiusFinal 976 { 977 solidFinalCollimatorIORT -> SetOuterRadius(v 978 G4RunManager::GetRunManager() -> GeometryHas 979 G4cout<<"Outer Radius of the final collimato 980 << solidFinalCollimatorIORT -> GetOuterRadiu 981 << G4endl; 982 } 983 984 985 ////////////////////////////////////////////// 986 987 988 989