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 "Collimator80BeamLine.hh" 56 #include "Collimator80BeamLine.hh" 57 #include "Collimator80BeamLineMessenger.hh" 57 #include "Collimator80BeamLineMessenger.hh" 58 58 59 Collimator80BeamLine::Collimator80BeamLine(): 59 Collimator80BeamLine::Collimator80BeamLine(): 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 collimator80BeamLine geometry 127 collimatorMessenger = new Collimator80BeamLi 127 collimatorMessenger = new Collimator80BeamLineMessenger(this); 128 128 129 } 129 } 130 ////////////////////////////////////////////// 130 ///////////////////////////////////////////////////////////////////////////// 131 Collimator80BeamLine::~Collimator80BeamLine() 131 Collimator80BeamLine::~Collimator80BeamLine() 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* Collimator80BeamLine::Const 140 G4VPhysicalVolume* Collimator80BeamLine::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 ConstructCollimator80BeamLine(); 146 ConstructCollimator80BeamLine(); 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 Collimator80BeamLine::SetDefaultDimension 165 void Collimator80BeamLine::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 = 45. *mm; 210 OuterRadiusFinalCollimatorIORT = defaultOute 210 OuterRadiusFinalCollimatorIORT = defaultOuterRadiusFinalCollimatorIORT; 211 211 212 G4double defaultinnerRadiusFinalCollimatorIO 212 G4double defaultinnerRadiusFinalCollimatorIORT = 40. *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 Collimator80BeamLine::ConstructCollimator 315 void Collimator80BeamLine::ConstructCollimator80BeamLine() 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::GetInvisible()); 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 Collimator80BeamLine::IortBeamLineVacuumS 354 void Collimator80BeamLine::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 void Collimator80BeamLine::IortBeamLineTitaniu 389 void Collimator80BeamLine::IortBeamLineTitaniumWindows() 390 { 390 { 391 // ------------------------------------------- 391 // ---------------------------------------------------------------// 392 // Titanium Window 392 // Titanium Window // 393 // ----------------------------------------- 393 // ---------------------------------------------------------------// 394 394 395 G4double phi2 = 90. *deg; 395 G4double phi2 = 90. *deg; 396 396 397 397 398 G4RotationMatrix rm2; 398 G4RotationMatrix rm2; 399 rm2.rotateY(phi2); 399 rm2.rotateY(phi2); 400 400 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 Collimator80BeamLine::IortBeamLineMonitor 424 void Collimator80BeamLine::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 Collimator80BeamLine::IortBeamLineBlocks( 643 void Collimator80BeamLine::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 solidBlocco3IORT = new G4Tubs("Blocco3IORT", 695 solidBlocco3IORT = new G4Tubs("Blocco3IORT", innRadiusBlocco3IORT, 696 outRadiusBlocco3IORT, 696 outRadiusBlocco3IORT, 697 hightBlocco3IORT, 697 hightBlocco3IORT, 698 startAngleBlocco3IORT, 698 startAngleBlocco3IORT, 699 spanningAngleBlocco3IORT); 699 spanningAngleBlocco3IORT); 700 700 701 G4LogicalVolume* logBlocco3IORT = new G4Logi 701 G4LogicalVolume* logBlocco3IORT = new G4LogicalVolume(solidBlocco3IORT, 702 Blocco3IORTMaterialIORT, " 702 Blocco3IORTMaterialIORT, "Blocco3IORT", 0, 0, 0); 703 703 704 physiBlocco3IORT = new G4PVPlacement(G4Trans 704 physiBlocco3IORT = new G4PVPlacement(G4Transform3D(rm4, G4ThreeVector((XPositionBlocco3IORT),0.,0.)), 705 "Blocco3ORT", logBlocco3IORT, phy 705 "Blocco3ORT", logBlocco3IORT, physicalTreatmentRoom, false, 0); 706 706 707 logBlocco3IORT -> SetVisAttributes(yellow); 707 logBlocco3IORT -> SetVisAttributes(yellow); 708 708 709 // -----------------------// 709 // -----------------------// 710 // Block 2 // 710 // Block 2 // 711 // -----------------------// 711 // -----------------------// 712 712 713 const G4double outRadiusBlocco2IORT = 41.5 * 713 const G4double outRadiusBlocco2IORT = 41.5 *mm; 714 const G4double innRadiusBlocco2IORT = 15. *m 714 const G4double innRadiusBlocco2IORT = 15. *mm; 715 const G4double hightBlocco2IORT = 8. *mm; 715 const G4double hightBlocco2IORT = 8. *mm; 716 const G4double startAngleBlocco2IORT = 0.*de 716 const G4double startAngleBlocco2IORT = 0.*deg; 717 const G4double spanningAngleBlocco2IORT = 36 717 const G4double spanningAngleBlocco2IORT = 360.*deg; 718 const G4double XPositionBlocco2IORT = -812. 718 const G4double XPositionBlocco2IORT = -812. *mm; 719 719 720 solidBlocco2IORT = new G4Tubs("Blocco2IORT", 720 solidBlocco2IORT = new G4Tubs("Blocco2IORT", innRadiusBlocco2IORT, 721 outRadiusBlocco2IORT, 721 outRadiusBlocco2IORT, 722 hightBlocco2IORT, 722 hightBlocco2IORT, 723 startAngleBlocco2IORT, 723 startAngleBlocco2IORT, 724 spanningAngleBlocco2IORT); 724 spanningAngleBlocco2IORT); 725 725 726 G4LogicalVolume* logBlocco2IORT = new G4Logi 726 G4LogicalVolume* logBlocco2IORT = new G4LogicalVolume(solidBlocco2IORT, 727 Blocco2IORTMaterialIORT, " 727 Blocco2IORTMaterialIORT, "Blocco2IORT", 0, 0, 0); 728 728 729 physiBlocco2IORT = new G4PVPlacement(G4Trans 729 physiBlocco2IORT = new G4PVPlacement(G4Transform3D(rm4, G4ThreeVector((XPositionBlocco2IORT),0.,0.)), 730 "Blocco2IORT", logBlocco2IORT, ph 730 "Blocco2IORT", logBlocco2IORT, physicalTreatmentRoom, false, 0); 731 731 732 logBlocco2IORT -> SetVisAttributes(red); 732 logBlocco2IORT -> SetVisAttributes(red); 733 733 734 // ----------------------- // 734 // ----------------------- // 735 // Block 1 // 735 // Block 1 // 736 // ----------------------- // 736 // ----------------------- // 737 737 738 const G4double outRadiusBlocco1IORT = 52.0 * 738 const G4double outRadiusBlocco1IORT = 52.0 *mm; 739 const G4double innRadiusBlocco1IORT = 15. *m 739 const G4double innRadiusBlocco1IORT = 15. *mm; 740 const G4double hightBlocco1IORT = 8.5 *mm; 740 const G4double hightBlocco1IORT = 8.5 *mm; 741 const G4double startAngleBlocco1IORT = 0.*de 741 const G4double startAngleBlocco1IORT = 0.*deg; 742 const G4double spanningAngleBlocco1IORT = 36 742 const G4double spanningAngleBlocco1IORT = 360.*deg; 743 const G4double XPositionBlocco1IORT = -795.5 743 const G4double XPositionBlocco1IORT = -795.5*mm; 744 744 745 solidBlocco1IORT = new G4Tubs("Blocco1IORT", 745 solidBlocco1IORT = new G4Tubs("Blocco1IORT", innRadiusBlocco1IORT, 746 outRadiusBlocco1IORT, 746 outRadiusBlocco1IORT, 747 hightBlocco1IORT, 747 hightBlocco1IORT, 748 startAngleBlocco1IORT, 748 startAngleBlocco1IORT, 749 spanningAngleBlocco1IORT); 749 spanningAngleBlocco1IORT); 750 750 751 G4LogicalVolume* logBlocco1IORT = new G4Logi 751 G4LogicalVolume* logBlocco1IORT = new G4LogicalVolume(solidBlocco1IORT, 752 Blocco1IORTMaterialIORT, " 752 Blocco1IORTMaterialIORT, "Blocco1IORT", 0, 0, 0); 753 753 754 physiBlocco1IORT = new G4PVPlacement(G4Trans 754 physiBlocco1IORT = new G4PVPlacement(G4Transform3D(rm4, G4ThreeVector((XPositionBlocco1IORT),0.,0.)), 755 "Blocco1IORT", logBlocco1IORT, ph 755 "Blocco1IORT", logBlocco1IORT, physicalTreatmentRoom, false, 0); 756 756 757 logBlocco1IORT -> SetVisAttributes(white); 757 logBlocco1IORT -> SetVisAttributes(white); 758 } 758 } 759 759 760 void Collimator80BeamLine::IortBeamLineJunctio 760 void Collimator80BeamLine::IortBeamLineJunctions() 761 { 761 { 762 762 763 763 764 G4double phi5 = 90. *deg; 764 G4double phi5 = 90. *deg; 765 765 766 766 767 G4RotationMatrix rm5; 767 G4RotationMatrix rm5; 768 rm5.rotateY(phi5); 768 rm5.rotateY(phi5); 769 // --------------------------------- // 769 // --------------------------------- // 770 // Junction 5 FINAL COLLIMATOR IORT // 770 // Junction 5 FINAL COLLIMATOR IORT // 771 // --------------------------------- // 771 // --------------------------------- // 772 772 773 const G4double outRadiusGiunz5FinalCollIORT 773 const G4double outRadiusGiunz5FinalCollIORT = 48.25 *mm; 774 const G4double innRadiusGiunz5FinalCollIORT 774 const G4double innRadiusGiunz5FinalCollIORT = 13.75 *mm; 775 const G4double hightGiunz5FinalCollIORT = 3. 775 const G4double hightGiunz5FinalCollIORT = 3.5 *mm; 776 const G4double startAngleGiunz5FinalCollIORT 776 const G4double startAngleGiunz5FinalCollIORT = 0.*deg; 777 const G4double spanningAngleGiunz5FinalCollI 777 const G4double spanningAngleGiunz5FinalCollIORT = 360.*deg; 778 const G4double Giunz5FinalCollXPositionIORT 778 const G4double Giunz5FinalCollXPositionIORT = -783.5 *mm; 779 779 780 solidGiunz5FinalCollIORT = new G4Tubs("Giunz 780 solidGiunz5FinalCollIORT = new G4Tubs("Giunz5FinalCollIORT", innRadiusGiunz5FinalCollIORT, 781 outRadiusGiunz5FinalCollIORT, 781 outRadiusGiunz5FinalCollIORT, 782 hightGiunz5FinalCollIORT, 782 hightGiunz5FinalCollIORT, 783 startAngleGiunz5FinalCollIORT, 783 startAngleGiunz5FinalCollIORT, 784 spanningAngleGiunz5FinalCollIORT); 784 spanningAngleGiunz5FinalCollIORT); 785 785 786 G4LogicalVolume* logGiunz5FinalCollIORT = ne 786 G4LogicalVolume* logGiunz5FinalCollIORT = new G4LogicalVolume(solidGiunz5FinalCollIORT, 787 Giunz5FinalCollMaterialIOR 787 Giunz5FinalCollMaterialIORT, "Giunz5FinalCollIORT", 0, 0, 0); 788 788 789 physiGiunz5FinalCollIORT = new G4PVPlacement 789 physiGiunz5FinalCollIORT = new G4PVPlacement(G4Transform3D(rm5, G4ThreeVector((Giunz5FinalCollXPositionIORT),0.,0.)), 790 "Giunz5FinalCollIORT", logGiunz5F 790 "Giunz5FinalCollIORT", logGiunz5FinalCollIORT, physicalTreatmentRoom, false, 0); 791 791 792 logGiunz5FinalCollIORT -> SetVisAttributes(y 792 logGiunz5FinalCollIORT -> SetVisAttributes(yellow); 793 793 794 // --------------------------------- // 794 // --------------------------------- // 795 // Junction 4 FINAL COLLIMATOR IORT // 795 // Junction 4 FINAL COLLIMATOR IORT // 796 // --------------------------------- // 796 // --------------------------------- // 797 797 798 const G4double outRadiusGiunz4FinalCollIORT 798 const G4double outRadiusGiunz4FinalCollIORT = 42. *mm; 799 const G4double innRadiusGiunz4FinalCollIORT 799 const G4double innRadiusGiunz4FinalCollIORT = 13.75 *mm; 800 const G4double hightGiunz4FinalCollIORT = 8. 800 const G4double hightGiunz4FinalCollIORT = 8.5 *mm; 801 const G4double startAngleGiunz4FinalCollIORT 801 const G4double startAngleGiunz4FinalCollIORT = 0.*deg; 802 const G4double spanningAngleGiunz4FinalCollI 802 const G4double spanningAngleGiunz4FinalCollIORT = 360.*deg; 803 const G4double Giunz4FinalCollXPositionIORT 803 const G4double Giunz4FinalCollXPositionIORT = -771.5 *mm; 804 804 805 solidGiunz4FinalCollIORT = new G4Tubs("Giunz 805 solidGiunz4FinalCollIORT = new G4Tubs("Giunz4FinalCollIORT", innRadiusGiunz4FinalCollIORT, 806 outRadiusGiunz4FinalCollIORT, 806 outRadiusGiunz4FinalCollIORT, 807 hightGiunz4FinalCollIORT, 807 hightGiunz4FinalCollIORT, 808 startAngleGiunz4FinalCollIORT, 808 startAngleGiunz4FinalCollIORT, 809 spanningAngleGiunz4FinalCollIORT); 809 spanningAngleGiunz4FinalCollIORT); 810 810 811 G4LogicalVolume* logGiunz4FinalCollIORT = ne 811 G4LogicalVolume* logGiunz4FinalCollIORT = new G4LogicalVolume(solidGiunz4FinalCollIORT, 812 Giunz4FinalCollMaterialIOR 812 Giunz4FinalCollMaterialIORT, "Giunz4FinalCollIORT", 0, 0, 0); 813 813 814 physiGiunz4FinalCollIORT = new G4PVPlacement 814 physiGiunz4FinalCollIORT = new G4PVPlacement(G4Transform3D(rm5, G4ThreeVector((Giunz4FinalCollXPositionIORT),0.,0.)), 815 "Giunz4FinalCollIORT", logGiunz4F 815 "Giunz4FinalCollIORT", logGiunz4FinalCollIORT, physicalTreatmentRoom, false, 0); 816 816 817 logGiunz4FinalCollIORT -> SetVisAttributes(b 817 logGiunz4FinalCollIORT -> SetVisAttributes(blue); 818 818 819 819 820 820 821 // --------------------------------- // 821 // --------------------------------- // 822 // Junction 3 FINAL COLLIMATOR IORT // 822 // Junction 3 FINAL COLLIMATOR IORT // 823 // --------------------------------- // 823 // --------------------------------- // 824 824 825 const G4double outRadiusGiunz3FinalCollIORT 825 const G4double outRadiusGiunz3FinalCollIORT = 42. *mm; 826 const G4double innRadiusGiunz3FinalCollIORT 826 const G4double innRadiusGiunz3FinalCollIORT = 0. *mm; 827 const G4double hightGiunz3FinalCollIORT = 4. 827 const G4double hightGiunz3FinalCollIORT = 4.25 *mm; 828 const G4double startAngleGiunz3FinalCollIORT 828 const G4double startAngleGiunz3FinalCollIORT = 0.*deg; 829 const G4double spanningAngleGiunz3FinalCollI 829 const G4double spanningAngleGiunz3FinalCollIORT = 360.*deg; 830 const G4double Giunz3FinalCollXPositionIORT 830 const G4double Giunz3FinalCollXPositionIORT = -758.75 *mm; 831 831 832 solidGiunz3FinalCollIORT = new G4Tubs("Giunz 832 solidGiunz3FinalCollIORT = new G4Tubs("Giunz3FinalCollIORT", innRadiusGiunz3FinalCollIORT, 833 outRadiusGiunz3FinalCollIORT, 833 outRadiusGiunz3FinalCollIORT, 834 hightGiunz3FinalCollIORT, 834 hightGiunz3FinalCollIORT, 835 startAngleGiunz3FinalCollIORT, 835 startAngleGiunz3FinalCollIORT, 836 spanningAngleGiunz3FinalCollIORT); 836 spanningAngleGiunz3FinalCollIORT); 837 837 838 G4LogicalVolume* logicsolidGiunz3FinalCollIO 838 G4LogicalVolume* logicsolidGiunz3FinalCollIORT = new G4LogicalVolume(solidGiunz3FinalCollIORT, 839 Giunz3FinalCollMaterialIOR 839 Giunz3FinalCollMaterialIORT, "Giunz3FinalCollIORT", 0, 0, 0); 840 840 841 physiGiunz3FinalCollIORT = new G4PVPlacement 841 physiGiunz3FinalCollIORT = new G4PVPlacement(G4Transform3D(rm5, G4ThreeVector((Giunz3FinalCollXPositionIORT),0.,0.)), 842 "Giunz3FinalCollIORT", logicsolid 842 "Giunz3FinalCollIORT", logicsolidGiunz3FinalCollIORT, physicalTreatmentRoom, false, 0); 843 843 844 logicsolidGiunz3FinalCollIORT -> SetVisAttri 844 logicsolidGiunz3FinalCollIORT -> SetVisAttributes(yellow); 845 // logicsolidGiunz3FinalCollIORT -> SetVisA 845 // logicsolidGiunz3FinalCollIORT -> SetVisAttributes (G4VisAttributes::GetInvisible()); 846 846 847 847 848 848 849 // --------------------------------- // 849 // --------------------------------- // 850 // Junction 3 FINAL COLLIMATOR IORT internal 850 // Junction 3 FINAL COLLIMATOR IORT internal // 851 // --------------------------------- // 851 // --------------------------------- // 852 852 853 853 854 854 855 solidGiunz3FinalCollIntIORT = new G4Cons("Gi 855 solidGiunz3FinalCollIntIORT = new G4Cons("Giunz3FinalCollIntIORT",0.*mm,13.75*mm,0.*mm,22.25*mm,4.25*mm,0.*deg,360.*deg); 856 856 857 G4LogicalVolume* logicsolidGiunz3FinalCollIn 857 G4LogicalVolume* logicsolidGiunz3FinalCollIntIORT = new G4LogicalVolume(solidGiunz3FinalCollIntIORT, 858 Giunz3FinalCollMaterialInt 858 Giunz3FinalCollMaterialIntIORT, "Giunz3FinalCollIntIORT", 0, 0, 0); 859 859 860 physiGiunz3FinalCollIntIORT = new G4PVPlacem 860 physiGiunz3FinalCollIntIORT = new G4PVPlacement(0, G4ThreeVector(0.,0.,0.),"Giunz3FinalCollIntIORT", logicsolidGiunz3FinalCollIntIORT,physiGiunz3FinalCollIORT, false, 0); 861 861 862 logicsolidGiunz3FinalCollIntIORT -> SetVisAt 862 logicsolidGiunz3FinalCollIntIORT -> SetVisAttributes(yellow); 863 863 864 864 865 // --------------------------------- // 865 // --------------------------------- // 866 // Junction 2 FINAL COLLIMATOR IORT // 866 // Junction 2 FINAL COLLIMATOR IORT // 867 // --------------------------------- // 867 // --------------------------------- // 868 868 869 const G4double outRadiusGiunz2FinalCollIORT 869 const G4double outRadiusGiunz2FinalCollIORT = 42. *mm; 870 const G4double innRadiusGiunz2FinalCollIORT 870 const G4double innRadiusGiunz2FinalCollIORT = 22.25 *mm; 871 const G4double hightGiunz2FinalCollIORT = 5. 871 const G4double hightGiunz2FinalCollIORT = 5.75 *mm; 872 const G4double startAngleGiunz2FinalCollIORT 872 const G4double startAngleGiunz2FinalCollIORT = 0.*deg; 873 const G4double spanningAngleGiunz2FinalCollI 873 const G4double spanningAngleGiunz2FinalCollIORT = 360.*deg; 874 const G4double Giunz2FinalCollXPositionIORT 874 const G4double Giunz2FinalCollXPositionIORT = -748.75 *mm; 875 875 876 solidGiunz2FinalCollIORT = new G4Tubs("Giunz 876 solidGiunz2FinalCollIORT = new G4Tubs("Giunz2FinalCollIORT", innRadiusGiunz2FinalCollIORT, 877 outRadiusGiunz2FinalCollIORT, 877 outRadiusGiunz2FinalCollIORT, 878 hightGiunz2FinalCollIORT, 878 hightGiunz2FinalCollIORT, 879 startAngleGiunz2FinalCollIORT, 879 startAngleGiunz2FinalCollIORT, 880 spanningAngleGiunz2FinalCollIORT); 880 spanningAngleGiunz2FinalCollIORT); 881 881 882 G4LogicalVolume* logGiunz2FinalCollIORT = ne 882 G4LogicalVolume* logGiunz2FinalCollIORT = new G4LogicalVolume(solidGiunz2FinalCollIORT, 883 Giunz2FinalCollMaterialIOR 883 Giunz2FinalCollMaterialIORT, "Giunz2FinalCollIORT", 0, 0, 0); 884 884 885 physiGiunz2FinalCollIORT = new G4PVPlacement 885 physiGiunz2FinalCollIORT = new G4PVPlacement(G4Transform3D(rm5, G4ThreeVector((Giunz2FinalCollXPositionIORT),0.,0.)), 886 "Giunz2FinalCollIORT", logGiunz2F 886 "Giunz2FinalCollIORT", logGiunz2FinalCollIORT, physicalTreatmentRoom, false, 0); 887 887 888 logGiunz2FinalCollIORT -> SetVisAttributes(r 888 logGiunz2FinalCollIORT -> SetVisAttributes(red); 889 889 890 // --------------------------------- // 890 // --------------------------------- // 891 // Junction 1 FINAL COLLIMATOR IORT // 891 // Junction 1 FINAL COLLIMATOR IORT // 892 // --------------------------------- // 892 // --------------------------------- // 893 893 894 const G4double outRadiusGiunz1FinalCollIORT 894 const G4double outRadiusGiunz1FinalCollIORT = 55. *mm; 895 const G4double innRadiusGiunz1FinalCollIORT 895 const G4double innRadiusGiunz1FinalCollIORT = 22.25 *mm; 896 const G4double hightGiunz1FinalCollIORT = 10 896 const G4double hightGiunz1FinalCollIORT = 10. *mm; 897 const G4double startAngleGiunz1FinalCollIORT 897 const G4double startAngleGiunz1FinalCollIORT = 0.*deg; 898 const G4double spanningAngleGiunz1FinalCollI 898 const G4double spanningAngleGiunz1FinalCollIORT = 360.*deg; 899 const G4double Giunz1FinalCollXPositionIORT 899 const G4double Giunz1FinalCollXPositionIORT = -733.*mm; 900 900 901 solidGiunz1FinalCollIORT = new G4Tubs("Giunz 901 solidGiunz1FinalCollIORT = new G4Tubs("Giunz1FinalCollIORT", innRadiusGiunz1FinalCollIORT, 902 outRadiusGiunz1FinalCollIORT, 902 outRadiusGiunz1FinalCollIORT, 903 hightGiunz1FinalCollIORT, 903 hightGiunz1FinalCollIORT, 904 startAngleGiunz1FinalCollIORT, 904 startAngleGiunz1FinalCollIORT, 905 spanningAngleGiunz1FinalCollIORT); 905 spanningAngleGiunz1FinalCollIORT); 906 906 907 G4LogicalVolume* logGiunz1FinalCollIORT = ne 907 G4LogicalVolume* logGiunz1FinalCollIORT = new G4LogicalVolume(solidGiunz1FinalCollIORT, 908 Giunz1FinalCollMaterialIOR 908 Giunz1FinalCollMaterialIORT, "Giunz1FinalCollIORT", 0, 0, 0); 909 909 910 physiGiunz1FinalCollIORT = new G4PVPlacement 910 physiGiunz1FinalCollIORT = new G4PVPlacement(G4Transform3D(rm5, G4ThreeVector((Giunz1FinalCollXPositionIORT),0.,0.)), 911 "Giunz1FinalCollIORT", logGiunz1F 911 "Giunz1FinalCollIORT", logGiunz1FinalCollIORT, physicalTreatmentRoom, false, 0); 912 912 913 logGiunz1FinalCollIORT -> SetVisAttributes(g 913 logGiunz1FinalCollIORT -> SetVisAttributes(gray); 914 } 914 } 915 915 916 void Collimator80BeamLine::IortBeamLineFinalCo 916 void Collimator80BeamLine::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 = 45. *mm; 923 // const G4double innRadiusFinalCollimatorIOR 923 // const G4double innRadiusFinalCollimatorIORT = 40. *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::GetInvisible()); 952 logFinalCollimatorIORT -> SetVisAttributes(r 952 logFinalCollimatorIORT -> SetVisAttributes(red); 953 } 953 } 954 954 955 ////////////////////////////////////////////// 955 ///////////////////////////////////////////////////////////////////////////// 956 /////////////////////////// MESSENGER //////// 956 /////////////////////////// MESSENGER /////////////////////////////////////// 957 ////////////////////////////////////////////// 957 ///////////////////////////////////////////////////////////////////////////// 958 958 959 959 960 void Collimator80BeamLine::SetInnerRadiusFinal 960 void Collimator80BeamLine::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 Collimator80BeamLine::SetOuterRadiusFinal 971 void Collimator80BeamLine::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