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