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