Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 // This is the *BASIC* version of IORT, a Gean 26 // This is the *BASIC* version of IORT, a Geant4-based application 27 // 27 // 28 // Main Authors: G.Russo(a,b), C.Casarino*(c), 28 // Main Authors: G.Russo(a,b), C.Casarino*(c), G.C. Candiano(c), G.A.P. Cirrone(d), F.Romano(d) 29 // Contributor Authors: S.Guatelli(e) 29 // Contributor Authors: S.Guatelli(e) 30 // Past Authors: G.Arnetta(c), S.E.Mazzaglia(d 30 // Past Authors: G.Arnetta(c), S.E.Mazzaglia(d) 31 // 31 // 32 // (a) Fondazione Istituto San Raffaele G.Gi 32 // (a) Fondazione Istituto San Raffaele G.Giglio, Cefalù, Italy 33 // (b) IBFM-CNR , Segrate (Milano), Italy 33 // (b) IBFM-CNR , Segrate (Milano), Italy 34 // (c) LATO (Laboratorio di Tecnologie Oncol 34 // (c) LATO (Laboratorio di Tecnologie Oncologiche), Cefalù, Italy 35 // (d) Laboratori Nazionali del Sud of the I 35 // (d) Laboratori Nazionali del Sud of the INFN, Catania, Italy 36 // (e) University of Wollongong, Australia 36 // (e) University of Wollongong, 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 "Collimator100BeamLine.hh" 56 #include "Collimator100BeamLine.hh" 57 #include "Collimator100BeamLineMessenger.hh" 57 #include "Collimator100BeamLineMessenger.hh" 58 58 59 Collimator100BeamLine::Collimator100BeamLine() 59 Collimator100BeamLine::Collimator100BeamLine(): 60 physicalTreatmentRoom(0),iortDetectorConstru 60 physicalTreatmentRoom(0),iortDetectorConstruction(0), 61 61 62 62 63 solidFinalCollimatorIORT(0), 63 solidFinalCollimatorIORT(0), 64 physiFinalCollimatorIORT(0), 64 physiFinalCollimatorIORT(0), 65 65 66 solidGiunz1FinalCollIORT(0), 66 solidGiunz1FinalCollIORT(0), 67 physiGiunz1FinalCollIORT(0), 67 physiGiunz1FinalCollIORT(0), 68 68 69 solidGiunz2FinalCollIORT(0), 69 solidGiunz2FinalCollIORT(0), 70 physiGiunz2FinalCollIORT(0), 70 physiGiunz2FinalCollIORT(0), 71 71 72 solidGiunz3FinalCollIORT(0), 72 solidGiunz3FinalCollIORT(0), 73 physiGiunz3FinalCollIORT(0), 73 physiGiunz3FinalCollIORT(0), 74 74 75 solidGiunz3FinalCollIntIORT(0), 75 solidGiunz3FinalCollIntIORT(0), 76 physiGiunz3FinalCollIntIORT(0), 76 physiGiunz3FinalCollIntIORT(0), 77 77 78 solidGiunz4FinalCollIORT(0), 78 solidGiunz4FinalCollIORT(0), 79 physiGiunz4FinalCollIORT(0), 79 physiGiunz4FinalCollIORT(0), 80 80 81 solidGiunz5FinalCollIORT(0), 81 solidGiunz5FinalCollIORT(0), 82 physiGiunz5FinalCollIORT(0), 82 physiGiunz5FinalCollIORT(0), 83 83 84 solidBlocco1IORT(0), 84 solidBlocco1IORT(0), 85 physiBlocco1IORT(0), 85 physiBlocco1IORT(0), 86 86 87 solidBlocco2IORT(0), 87 solidBlocco2IORT(0), 88 physiBlocco2IORT(0), 88 physiBlocco2IORT(0), 89 89 90 solidBlocco3IORT(0), 90 solidBlocco3IORT(0), 91 physiBlocco3IORT(0), 91 physiBlocco3IORT(0), 92 92 93 solidBlocco20mmIORT(0), 93 solidBlocco20mmIORT(0), 94 physiBlocco20mmIORT(0), 94 physiBlocco20mmIORT(0), 95 95 96 solidCM1_1_2IORT(0), 96 solidCM1_1_2IORT(0), 97 physiCM1_1_2IORT(0), 97 physiCM1_1_2IORT(0), 98 98 99 solidCM1_2_2IORT(0), 99 solidCM1_2_2IORT(0), 100 physiCM1_2_2IORT(0), 100 physiCM1_2_2IORT(0), 101 101 102 solidCM2_1_2IORT(0), 102 solidCM2_1_2IORT(0), 103 physiCM2_1_2IORT(0), 103 physiCM2_1_2IORT(0), 104 104 105 solidCM2_2_2IORT(0), 105 solidCM2_2_2IORT(0), 106 physiCM2_2_2IORT(0), 106 physiCM2_2_2IORT(0), 107 107 108 solidCCMIORT(0), 108 solidCCMIORT(0), 109 physiCCMIORT(0), 109 physiCCMIORT(0), 110 110 111 solidPFS1IORT(0), 111 solidPFS1IORT(0), 112 physiPFS1IORT(0), 112 physiPFS1IORT(0), 113 113 114 solidPFS2IORT(0), 114 solidPFS2IORT(0), 115 physiPFS2IORT(0), 115 physiPFS2IORT(0), 116 116 117 solidPFS3IORT(0), 117 solidPFS3IORT(0), 118 physiPFS3IORT(0), 118 physiPFS3IORT(0), 119 119 120 solidFTIORT(0), 120 solidFTIORT(0), 121 physiFTIORT(0) 121 physiFTIORT(0) 122 122 123 123 124 { 124 { 125 // Messenger to change parameters of the col 125 // Messenger to change parameters of the collimator100BeamLine geometry 126 collimatorMessenger = new Collimator100BeamL 126 collimatorMessenger = new Collimator100BeamLineMessenger(this); 127 127 128 } 128 } 129 ////////////////////////////////////////////// 129 ///////////////////////////////////////////////////////////////////////////// 130 Collimator100BeamLine::~Collimator100BeamLine( 130 Collimator100BeamLine::~Collimator100BeamLine() 131 { 131 { 132 delete collimatorMessenger; 132 delete collimatorMessenger; 133 delete iortDetectorConstruction; 133 delete iortDetectorConstruction; 134 } 134 } 135 135 136 ////////////////////////////////////////////// 136 ///////////////////////////////////////////////////////////////////////////// 137 137 138 138 139 G4VPhysicalVolume* Collimator100BeamLine::Cons 139 G4VPhysicalVolume* Collimator100BeamLine::Construct() 140 { 140 { 141 // Sets default geometry and materials 141 // Sets default geometry and materials 142 SetDefaultDimensions(); 142 SetDefaultDimensions(); 143 143 144 // Construct the whole Collimator Beam Line 144 // Construct the whole Collimator Beam Line 145 ConstructCollimator100BeamLine(); 145 ConstructCollimator100BeamLine(); 146 146 147 147 148 // IORTDetectorConstruction builds ONLY the 148 // IORTDetectorConstruction builds ONLY the phantom and the detector with its associated ROGeometry 149 iortDetectorConstruction = new IORTDetectorC 149 iortDetectorConstruction = new IORTDetectorConstruction(physicalTreatmentRoom); 150 150 151 return physicalTreatmentRoom; 151 return physicalTreatmentRoom; 152 } 152 } 153 153 154 // In the following method the DEFAULTS used i 154 // In the following method the DEFAULTS used in the geometry of 155 // collimator beam line are provided 155 // collimator beam line are provided 156 // HERE THE USER CAN CHANGE THE GEOMETRY CHARA 156 // HERE THE USER CAN CHANGE THE GEOMETRY CHARACTERISTICS OF BEAM 157 // LINE ELEMENTS, ALTERNATIVELY HE/SHE CAN USE 157 // LINE ELEMENTS, ALTERNATIVELY HE/SHE CAN USE THE MACRO FILE (IF A 158 // MESSENGER IS PROVIDED) 158 // MESSENGER IS PROVIDED) 159 // 159 // 160 // DEFAULT MATERIAL ARE ALSO PROVIDED 160 // DEFAULT MATERIAL ARE ALSO PROVIDED 161 // and COLOURS ARE ALSO DEFINED 161 // and COLOURS ARE ALSO DEFINED 162 // ------------------------------------------- 162 // ---------------------------------------------------------- 163 ////////////////////////////////////////////// 163 ///////////////////////////////////////////////////////////////////////////// 164 void Collimator100BeamLine::SetDefaultDimensio 164 void Collimator100BeamLine::SetDefaultDimensions() 165 { 165 { 166 166 167 // Set of coulors that can be used 167 // Set of coulors that can be used 168 white = new G4VisAttributes( G4Colour()); 168 white = new G4VisAttributes( G4Colour()); 169 white -> SetVisibility(true); 169 white -> SetVisibility(true); 170 //white -> SetForceSolid(true); 170 //white -> SetForceSolid(true); 171 171 172 blue = new G4VisAttributes(G4Colour(0. ,0. , 172 blue = new G4VisAttributes(G4Colour(0. ,0. ,1.)); 173 blue -> SetVisibility(true); 173 blue -> SetVisibility(true); 174 //blue -> SetForceSolid(true); 174 //blue -> SetForceSolid(true); 175 175 176 gray = new G4VisAttributes( G4Colour(0.5, 0. 176 gray = new G4VisAttributes( G4Colour(0.5, 0.5, 0.5 )); 177 gray-> SetVisibility(true); 177 gray-> SetVisibility(true); 178 //gray-> SetForceSolid(true); 178 //gray-> SetForceSolid(true); 179 179 180 red = new G4VisAttributes(G4Colour(1. ,0. ,0 180 red = new G4VisAttributes(G4Colour(1. ,0. ,0.)); 181 red-> SetVisibility(true); 181 red-> SetVisibility(true); 182 //red-> SetForceSolid(true); 182 //red-> SetForceSolid(true); 183 183 184 yellow = new G4VisAttributes(G4Colour(1., 1. 184 yellow = new G4VisAttributes(G4Colour(1., 1., 0. )); 185 yellow-> SetVisibility(true); 185 yellow-> SetVisibility(true); 186 //yellow-> SetForceSolid(true); 186 //yellow-> SetForceSolid(true); 187 187 188 green = new G4VisAttributes( G4Colour(25/255 188 green = new G4VisAttributes( G4Colour(25/255. , 255/255. , 25/255. )); 189 green -> SetVisibility(true); 189 green -> SetVisibility(true); 190 //green -> SetForceSolid(true); 190 //green -> SetForceSolid(true); 191 191 192 darkGreen = new G4VisAttributes( G4Colour(0/ 192 darkGreen = new G4VisAttributes( G4Colour(0/255. , 100/255. , 0/255. )); 193 darkGreen -> SetVisibility(true); 193 darkGreen -> SetVisibility(true); 194 //darkGreen -> SetForceSolid(true); 194 //darkGreen -> SetForceSolid(true); 195 195 196 darkOrange3 = new G4VisAttributes( G4Colour( 196 darkOrange3 = new G4VisAttributes( G4Colour(205/255. , 102/255. , 000/255. )); 197 darkOrange3 -> SetVisibility(true); 197 darkOrange3 -> SetVisibility(true); 198 //darkOrange3 -> SetForceSolid(true); 198 //darkOrange3 -> SetForceSolid(true); 199 199 200 skyBlue = new G4VisAttributes( G4Colour(135/ 200 skyBlue = new G4VisAttributes( G4Colour(135/255. , 206/255. , 235/255. )); 201 skyBlue -> SetVisibility(true); 201 skyBlue -> SetVisibility(true); 202 //skyBlue -> SetForceSolid(true); 202 //skyBlue -> SetForceSolid(true); 203 203 204 204 205 205 206 // Geometry FINAL COLLIMATOR DEFAULTS 206 // Geometry FINAL COLLIMATOR DEFAULTS 207 207 208 G4double defaultOuterRadiusFinalCollimatorIO 208 G4double defaultOuterRadiusFinalCollimatorIORT = 55. *mm; 209 OuterRadiusFinalCollimatorIORT = defaultOute 209 OuterRadiusFinalCollimatorIORT = defaultOuterRadiusFinalCollimatorIORT; 210 210 211 G4double defaultinnerRadiusFinalCollimatorIO 211 G4double defaultinnerRadiusFinalCollimatorIORT = 50. *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 Collimator100BeamLine::ConstructCollimato 314 void Collimator100BeamLine::ConstructCollimator100BeamLine() 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::GetInvisible()); 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 Collimator100BeamLine::IortBeamLineVacuum 353 void Collimator100BeamLine::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 = -1062.797 * 371 const G4double XPositionVSIORT = -1062.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 logVSIORT -> SetVisAttributes(green); 384 logVSIORT -> SetVisAttributes(green); 385 } 385 } 386 386 387 void Collimator100BeamLine::IortBeamLineTitani 387 void Collimator100BeamLine::IortBeamLineTitaniumWindows() 388 { 388 { 389 // ------------------------------------------- 389 // ---------------------------------------------------------------// 390 // Titanium Window 390 // Titanium Window // 391 // ----------------------------------------- 391 // ---------------------------------------------------------------// 392 392 393 G4double phi2 = 90. *deg; 393 G4double phi2 = 90. *deg; 394 394 395 395 396 G4RotationMatrix rm2; 396 G4RotationMatrix rm2; 397 rm2.rotateY(phi2); 397 rm2.rotateY(phi2); 398 398 399 399 400 const G4double outRadiusFTIORT = 44.75 *mm; 400 const G4double outRadiusFTIORT = 44.75 *mm; 401 const G4double innRadiusFTIORT = 8.5 *mm; 401 const G4double innRadiusFTIORT = 8.5 *mm; 402 const G4double hightFTIORT = 0.006 *mm; 402 const G4double hightFTIORT = 0.006 *mm; 403 const G4double startAngleFTIORT = 0.*deg; 403 const G4double startAngleFTIORT = 0.*deg; 404 const G4double spanningAngleFTIORT = 360.*de 404 const G4double spanningAngleFTIORT = 360.*deg; 405 const G4double XPositionFTIORT = -1061.791 * 405 const G4double XPositionFTIORT = -1061.791 *mm; 406 406 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 Collimator100BeamLine::IortBeamLineMonito 423 void Collimator100BeamLine::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 = -1048.755 447 const G4double XPositionPFS3IORT = -1048.755 *mm; 448 448 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 = -1044.255 474 const G4double XPositionPFS2IORT = -1044.255 *mm; 475 475 476 476 477 solidPFS2IORT = new G4Tubs("PFS2IORT", innRa 477 solidPFS2IORT = new G4Tubs("PFS2IORT", innRadiusPFS2IORT, 478 outRadiusPFS2IORT, 478 outRadiusPFS2IORT, 479 hightPFS2IORT, 479 hightPFS2IORT, 480 startAnglePFS2IORT, 480 startAnglePFS2IORT, 481 spanningAnglePFS2IORT); 481 spanningAnglePFS2IORT); 482 482 483 G4LogicalVolume* logPFS2IORT = new G4Logical 483 G4LogicalVolume* logPFS2IORT = new G4LogicalVolume(solidPFS2IORT, 484 PFS2IORTMaterialIORT, "PFS 484 PFS2IORTMaterialIORT, "PFS2IORT", 0, 0, 0); 485 485 486 physiPFS2IORT = new G4PVPlacement(G4Transfor 486 physiPFS2IORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionPFS2IORT),0.,0.)), 487 "PFS2IORT", logPFS2IORT, physical 487 "PFS2IORT", logPFS2IORT, physicalTreatmentRoom, false, 0); 488 488 489 logPFS2IORT -> SetVisAttributes(green); 489 logPFS2IORT -> SetVisAttributes(green); 490 490 491 // ----------------------------------------- 491 // ---------------------------------------------------------------// 492 // Superior Final Part Monitor C 492 // Superior Final Part Monitor Chambers 1 // 493 // ----------------------------------------- 493 // ---------------------------------------------------------------// 494 494 495 const G4double outRadiusPFS1IORT = 35. *mm; 495 const G4double outRadiusPFS1IORT = 35. *mm; 496 const G4double innRadiusPFS1IORT = 10. *mm; 496 const G4double innRadiusPFS1IORT = 10. *mm; 497 const G4double hightPFS1IORT = 0.88 *mm; 497 const G4double hightPFS1IORT = 0.88 *mm; 498 const G4double startAnglePFS1IORT = 0.*deg; 498 const G4double startAnglePFS1IORT = 0.*deg; 499 const G4double spanningAnglePFS1IORT = 360.* 499 const G4double spanningAnglePFS1IORT = 360.*deg; 500 const G4double XPositionPFS1IORT = -1041.905 500 const G4double XPositionPFS1IORT = -1041.905 *mm; 501 501 502 502 503 solidPFS1IORT = new G4Tubs("PFS1IORT", innRa 503 solidPFS1IORT = new G4Tubs("PFS1IORT", innRadiusPFS1IORT, 504 outRadiusPFS1IORT, 504 outRadiusPFS1IORT, 505 hightPFS1IORT, 505 hightPFS1IORT, 506 startAnglePFS1IORT, 506 startAnglePFS1IORT, 507 spanningAnglePFS1IORT); 507 spanningAnglePFS1IORT); 508 508 509 G4LogicalVolume* logPFS1IORT = new G4Logical 509 G4LogicalVolume* logPFS1IORT = new G4LogicalVolume(solidPFS1IORT, 510 PFS1IORTMaterialIORT, "PFS 510 PFS1IORTMaterialIORT, "PFS1IORT", 0, 0, 0); 511 511 512 physiPFS1IORT = new G4PVPlacement(G4Transfor 512 physiPFS1IORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionPFS1IORT),0.,0.)), 513 "PFS1IORT", logPFS1IORT, physical 513 "PFS1IORT", logPFS1IORT, physicalTreatmentRoom, false, 0); 514 514 515 logPFS1IORT -> SetVisAttributes(green); 515 logPFS1IORT -> SetVisAttributes(green); 516 516 517 // ----------------------------------------- 517 // ------------------------------------------------// 518 // Monitor Chambers Cylinder 518 // Monitor Chambers Cylinder // 519 // ----------------------------------------- 519 // ------------------------------------------------// 520 520 521 const G4double outRadiusCCMIORT = 35. *mm; 521 const G4double outRadiusCCMIORT = 35. *mm; 522 const G4double innRadiusCCMIORT = 10. *mm; 522 const G4double innRadiusCCMIORT = 10. *mm; 523 const G4double hightCCMIORT = 4.0125 *mm; 523 const G4double hightCCMIORT = 4.0125 *mm; 524 const G4double startAngleCCMIORT = 0.*deg; 524 const G4double startAngleCCMIORT = 0.*deg; 525 const G4double spanningAngleCCMIORT = 360.*d 525 const G4double spanningAngleCCMIORT = 360.*deg; 526 const G4double XPositionCCMIORT = -1037.0125 526 const G4double XPositionCCMIORT = -1037.0125 *mm; 527 527 528 528 529 solidCCMIORT = new G4Tubs("CCMIORT", innRadi 529 solidCCMIORT = new G4Tubs("CCMIORT", innRadiusCCMIORT, 530 outRadiusCCMIORT, 530 outRadiusCCMIORT, 531 hightCCMIORT, 531 hightCCMIORT, 532 startAngleCCMIORT, 532 startAngleCCMIORT, 533 spanningAngleCCMIORT); 533 spanningAngleCCMIORT); 534 534 535 G4LogicalVolume* logCCMIORT = new G4LogicalV 535 G4LogicalVolume* logCCMIORT = new G4LogicalVolume(solidCCMIORT, 536 CCMIORTMaterialIORT, "CCMI 536 CCMIORTMaterialIORT, "CCMIORT", 0, 0, 0); 537 537 538 physiCCMIORT = new G4PVPlacement(G4Transform 538 physiCCMIORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionCCMIORT),0.,0.)), 539 "CCMIORT", logCCMIORT, physicalTr 539 "CCMIORT", logCCMIORT, physicalTreatmentRoom, false, 0); 540 540 541 logCCMIORT -> SetVisAttributes(green); 541 logCCMIORT -> SetVisAttributes(green); 542 542 543 543 544 // ----------------------------------------- 544 // ------------------------------------------------// 545 // Second Monitor Chamber Lamina Al 2 545 // Second Monitor Chamber Lamina Al 2 of 2 // 546 // ----------------------------------------- 546 // ------------------------------------------------// 547 547 548 const G4double outRadiusCM2_2_2IORT = 20. *m 548 const G4double outRadiusCM2_2_2IORT = 20. *mm; 549 const G4double innRadiusCM2_2_2IORT = 0. *mm 549 const G4double innRadiusCM2_2_2IORT = 0. *mm; 550 const G4double hightCM2_2_2IORT = 0.025 *mm; 550 const G4double hightCM2_2_2IORT = 0.025 *mm; 551 const G4double startAngleCM2_2_2IORT = 0.*de 551 const G4double startAngleCM2_2_2IORT = 0.*deg; 552 const G4double spanningAngleCM2_2_2IORT = 36 552 const G4double spanningAngleCM2_2_2IORT = 360.*deg; 553 const G4double XPositionCM2_2_2IORT = -1041. 553 const G4double XPositionCM2_2_2IORT = -1041. *mm; 554 554 555 555 556 solidCM2_2_2IORT = new G4Tubs("CM2_2_2IORT", 556 solidCM2_2_2IORT = new G4Tubs("CM2_2_2IORT", innRadiusCM2_2_2IORT, 557 outRadiusCM2_2_2IORT, 557 outRadiusCM2_2_2IORT, 558 hightCM2_2_2IORT, 558 hightCM2_2_2IORT, 559 startAngleCM2_2_2IORT, 559 startAngleCM2_2_2IORT, 560 spanningAngleCM2_2_2IORT); 560 spanningAngleCM2_2_2IORT); 561 561 562 G4LogicalVolume* logCM2_2_2IORT = new G4Logi 562 G4LogicalVolume* logCM2_2_2IORT = new G4LogicalVolume(solidCM2_2_2IORT, 563 CM2_2_2IORTMaterialIORT, " 563 CM2_2_2IORTMaterialIORT, "CM2_2_2IORT", 0, 0, 0); 564 564 565 physiCM2_2_2IORT = new G4PVPlacement(G4Trans 565 physiCM2_2_2IORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionCM2_2_2IORT),0.,0.)), 566 "CM2_2_2ORT", logCM2_2_2IORT, phy 566 "CM2_2_2ORT", logCM2_2_2IORT, physicalTreatmentRoom, false, 0); 567 567 568 logCM2_2_2IORT -> SetVisAttributes(green); 568 logCM2_2_2IORT -> SetVisAttributes(green); 569 569 570 570 571 // ------------------------------------------- 571 // ------------------------------------------------// 572 // Second Monitor Chamber Lamina Al 1 572 // Second Monitor Chamber Lamina Al 1 of 2 // 573 // ----------------------------------------- 573 // ------------------------------------------------// 574 574 575 const G4double outRadiusCM2_1_2IORT = 20. *m 575 const G4double outRadiusCM2_1_2IORT = 20. *mm; 576 const G4double innRadiusCM2_1_2IORT = 0. *mm 576 const G4double innRadiusCM2_1_2IORT = 0. *mm; 577 const G4double hightCM2_1_2IORT = 0.025 *mm; 577 const G4double hightCM2_1_2IORT = 0.025 *mm; 578 const G4double startAngleCM2_1_2IORT = 0.*de 578 const G4double startAngleCM2_1_2IORT = 0.*deg; 579 const G4double spanningAngleCM2_1_2IORT = 36 579 const G4double spanningAngleCM2_1_2IORT = 360.*deg; 580 const G4double XPositionCM2_1_2IORT = -1039. 580 const G4double XPositionCM2_1_2IORT = -1039. *mm; 581 581 582 582 583 solidCM2_1_2IORT = new G4Tubs("CM2_1_2IORT", 583 solidCM2_1_2IORT = new G4Tubs("CM2_1_2IORT", innRadiusCM2_1_2IORT, 584 outRadiusCM2_1_2IORT, 584 outRadiusCM2_1_2IORT, 585 hightCM2_1_2IORT, 585 hightCM2_1_2IORT, 586 startAngleCM2_1_2IORT, 586 startAngleCM2_1_2IORT, 587 spanningAngleCM2_1_2IORT); 587 spanningAngleCM2_1_2IORT); 588 588 589 G4LogicalVolume* logCM2_1_2IORT = new G4Logi 589 G4LogicalVolume* logCM2_1_2IORT = new G4LogicalVolume(solidCM2_1_2IORT, 590 CM2_1_2IORTMaterialIORT, " 590 CM2_1_2IORTMaterialIORT, "CM2_1_2IORT", 0, 0, 0); 591 591 592 physiCM2_1_2IORT = new G4PVPlacement(G4Trans 592 physiCM2_1_2IORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionCM2_1_2IORT),0.,0.)), 593 "CM2_1_2ORT", logCM2_1_2IORT, phy 593 "CM2_1_2ORT", logCM2_1_2IORT, physicalTreatmentRoom, false, 0); 594 594 595 logCM2_1_2IORT -> SetVisAttributes(yellow); 595 logCM2_1_2IORT -> SetVisAttributes(yellow); 596 596 597 // ----------------------------------------- 597 // ------------------------------------------------// 598 // First Monitor Chamber Lamina Al 2 598 // First Monitor Chamber Lamina Al 2 of 2 // 599 // ----------------------------------------- 599 // ------------------------------------------------// 600 600 601 const G4double outRadiusCM1_2_2IORT = 20. *m 601 const G4double outRadiusCM1_2_2IORT = 20. *mm; 602 const G4double innRadiusCM1_2_2IORT = 0. *mm 602 const G4double innRadiusCM1_2_2IORT = 0. *mm; 603 const G4double hightCM1_2_2IORT = 0.025 *mm; 603 const G4double hightCM1_2_2IORT = 0.025 *mm; 604 const G4double startAngleCM1_2_2IORT = 0.*de 604 const G4double startAngleCM1_2_2IORT = 0.*deg; 605 const G4double spanningAngleCM1_2_2IORT = 36 605 const G4double spanningAngleCM1_2_2IORT = 360.*deg; 606 const G4double XPositionCM1_2_2IORT = -1037. 606 const G4double XPositionCM1_2_2IORT = -1037. *mm; 607 607 608 608 609 solidCM1_2_2IORT = new G4Tubs("CM1_2_2IORT", 609 solidCM1_2_2IORT = new G4Tubs("CM1_2_2IORT", innRadiusCM1_2_2IORT, 610 outRadiusCM1_2_2IORT, 610 outRadiusCM1_2_2IORT, 611 hightCM1_2_2IORT, 611 hightCM1_2_2IORT, 612 startAngleCM1_2_2IORT, 612 startAngleCM1_2_2IORT, 613 spanningAngleCM1_2_2IORT); 613 spanningAngleCM1_2_2IORT); 614 614 615 G4LogicalVolume* logCM1_2_2IORT = new G4Logi 615 G4LogicalVolume* logCM1_2_2IORT = new G4LogicalVolume(solidCM1_2_2IORT, 616 CM1_2_2IORTMaterialIORT, "CM1_ 616 CM1_2_2IORTMaterialIORT, "CM1_2_2IORT", 0, 0, 0); 617 617 618 physiCM1_2_2IORT = new G4PVPlacement(G4Trans 618 physiCM1_2_2IORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionCM1_2_2IORT),0.,0.)), 619 "CM1_2_2ORT", logCM1_2_2IORT, phy 619 "CM1_2_2ORT", logCM1_2_2IORT, physicalTreatmentRoom, false, 0); 620 620 621 621 622 logCM1_2_2IORT -> SetVisAttributes(yellow); 622 logCM1_2_2IORT -> SetVisAttributes(yellow); 623 623 624 // ----------------------------------------- 624 // ------------------------------------------------// 625 // First Monitor Chamber Lamina Al 1 625 // First Monitor Chamber Lamina Al 1 of 2 // 626 // ----------------------------------------- 626 // ------------------------------------------------// 627 627 628 const G4double outRadiusCM1_1_2IORT = 20. *m 628 const G4double outRadiusCM1_1_2IORT = 20. *mm; 629 const G4double innRadiusCM1_1_2IORT = 0. *mm 629 const G4double innRadiusCM1_1_2IORT = 0. *mm; 630 const G4double hightCM1_1_2IORT = 0.025 *mm; 630 const G4double hightCM1_1_2IORT = 0.025 *mm; 631 const G4double startAngleCM1_1_2IORT = 0.*de 631 const G4double startAngleCM1_1_2IORT = 0.*deg; 632 const G4double spanningAngleCM1_1_2IORT = 36 632 const G4double spanningAngleCM1_1_2IORT = 360.*deg; 633 const G4double XPositionCM1_1_2IORT = -1035. 633 const G4double XPositionCM1_1_2IORT = -1035. *mm; 634 634 635 635 636 636 637 solidCM1_1_2IORT = new G4Tubs("CM1_1_2IORT", 637 solidCM1_1_2IORT = new G4Tubs("CM1_1_2IORT", innRadiusCM1_1_2IORT, 638 outRadiusCM1_1_2IORT, 638 outRadiusCM1_1_2IORT, 639 hightCM1_1_2IORT, 639 hightCM1_1_2IORT, 640 startAngleCM1_1_2IORT, 640 startAngleCM1_1_2IORT, 641 spanningAngleCM1_1_2IORT); 641 spanningAngleCM1_1_2IORT); 642 642 643 G4LogicalVolume* logCM1_1_2IORT = new G4Logi 643 G4LogicalVolume* logCM1_1_2IORT = new G4LogicalVolume(solidCM1_1_2IORT, 644 CM1_1_2IORTMaterialIORT, " 644 CM1_1_2IORTMaterialIORT, "CM1_1_2IORT", 0, 0, 0); 645 645 646 physiCM1_1_2IORT = new G4PVPlacement(G4Trans 646 physiCM1_1_2IORT = new G4PVPlacement(G4Transform3D(rm3, G4ThreeVector((XPositionCM1_1_2IORT),0.,0.)), 647 "CM1_1_2ORT", logCM1_1_2IORT, phy 647 "CM1_1_2ORT", logCM1_1_2IORT, physicalTreatmentRoom, false, 0); 648 logCM1_1_2IORT -> SetVisAttributes(yellow); 648 logCM1_1_2IORT -> SetVisAttributes(yellow); 649 } 649 } 650 650 651 void Collimator100BeamLine::IortBeamLineBlocks 651 void Collimator100BeamLine::IortBeamLineBlocks() 652 { 652 { 653 653 654 G4double phi4 = 90. *deg; 654 G4double phi4 = 90. *deg; 655 655 656 656 657 G4RotationMatrix rm4; 657 G4RotationMatrix rm4; 658 rm4.rotateY(phi4); 658 rm4.rotateY(phi4); 659 659 660 ////////////////////////////////////////////// 660 /////////////////////////////////////////////////////////////////////////////// 661 661 662 // IORT BEAM LINE BLOCKS 662 // IORT BEAM LINE BLOCKS 663 663 664 ////////////////////////////////////////////// 664 /////////////////////////////////////////////////////////////////////////////// 665 665 666 // ----------------------------------------- 666 // ------------------------------------------------// 667 // Block 4 // 667 // Block 4 // 668 // ----------------------------------------- 668 // ------------------------------------------------// 669 669 670 const G4double outRadiusBlocco20mmIORT = 36. 670 const G4double outRadiusBlocco20mmIORT = 36.5 *mm; 671 const G4double innRadiusBlocco20mmIORT = 10. 671 const G4double innRadiusBlocco20mmIORT = 10. *mm; 672 const G4double hightBlocco20mmIORT = 3. *mm; 672 const G4double hightBlocco20mmIORT = 3. *mm; 673 const G4double startAngleBlocco20mmIORT = 0. 673 const G4double startAngleBlocco20mmIORT = 0.*deg; 674 const G4double spanningAngleBlocco20mmIORT = 674 const G4double spanningAngleBlocco20mmIORT = 360.*deg; 675 const G4double XPositionBlocco20mmIORT = -10 675 const G4double XPositionBlocco20mmIORT = -1030. *mm; 676 676 677 677 678 solidBlocco20mmIORT = new G4Tubs("Blocco20mm 678 solidBlocco20mmIORT = new G4Tubs("Blocco20mmIORT", innRadiusBlocco20mmIORT, 679 outRadiusBlocco20mmIORT, 679 outRadiusBlocco20mmIORT, 680 hightBlocco20mmIORT, 680 hightBlocco20mmIORT, 681 startAngleBlocco20mmIORT, 681 startAngleBlocco20mmIORT, 682 spanningAngleBlocco20mmIORT); 682 spanningAngleBlocco20mmIORT); 683 683 684 G4LogicalVolume* logBlocco20mmIORT = new G4L 684 G4LogicalVolume* logBlocco20mmIORT = new G4LogicalVolume(solidBlocco20mmIORT, 685 Blocco20mmIORTMaterialIORT 685 Blocco20mmIORTMaterialIORT, "Blocco20mmIORT", 0, 0, 0); 686 686 687 physiBlocco20mmIORT = new G4PVPlacement(G4Tr 687 physiBlocco20mmIORT = new G4PVPlacement(G4Transform3D(rm4, G4ThreeVector((XPositionBlocco20mmIORT),0.,0.)), 688 "Blocco20mmORT", logBlocco20mmIOR 688 "Blocco20mmORT", logBlocco20mmIORT, physicalTreatmentRoom, false, 0); 689 689 690 690 691 logBlocco20mmIORT -> SetVisAttributes(green) 691 logBlocco20mmIORT -> SetVisAttributes(green); 692 692 693 693 694 // -----------------------// 694 // -----------------------// 695 // Block 3 // 695 // Block 3 // 696 // -----------------------// 696 // -----------------------// 697 697 698 const G4double outRadiusBlocco3IORT = 36.5 * 698 const G4double outRadiusBlocco3IORT = 36.5 *mm; 699 const G4double innRadiusBlocco3IORT = 15. *m 699 const G4double innRadiusBlocco3IORT = 15. *mm; 700 const G4double hightBlocco3IORT = 3.5 *mm; 700 const G4double hightBlocco3IORT = 3.5 *mm; 701 const G4double startAngleBlocco3IORT = 0.*de 701 const G4double startAngleBlocco3IORT = 0.*deg; 702 const G4double spanningAngleBlocco3IORT = 36 702 const G4double spanningAngleBlocco3IORT = 360.*deg; 703 const G4double XPositionBlocco3IORT = -1023. 703 const G4double XPositionBlocco3IORT = -1023.5 *mm; 704 704 705 705 706 solidBlocco3IORT = new G4Tubs("Blocco3IORT", 706 solidBlocco3IORT = new G4Tubs("Blocco3IORT", innRadiusBlocco3IORT, 707 outRadiusBlocco3IORT, 707 outRadiusBlocco3IORT, 708 hightBlocco3IORT, 708 hightBlocco3IORT, 709 startAngleBlocco3IORT, 709 startAngleBlocco3IORT, 710 spanningAngleBlocco3IORT); 710 spanningAngleBlocco3IORT); 711 711 712 G4LogicalVolume* logBlocco3IORT = new G4Logi 712 G4LogicalVolume* logBlocco3IORT = new G4LogicalVolume(solidBlocco3IORT, 713 Blocco3IORTMaterialIORT, " 713 Blocco3IORTMaterialIORT, "Blocco3IORT", 0, 0, 0); 714 714 715 physiBlocco3IORT = new G4PVPlacement(G4Trans 715 physiBlocco3IORT = new G4PVPlacement(G4Transform3D(rm4, G4ThreeVector((XPositionBlocco3IORT),0.,0.)), 716 "Blocco3ORT", logBlocco3IORT, phy 716 "Blocco3ORT", logBlocco3IORT, physicalTreatmentRoom, false, 0); 717 717 718 718 719 logBlocco3IORT -> SetVisAttributes(yellow); 719 logBlocco3IORT -> SetVisAttributes(yellow); 720 720 721 // -----------------------// 721 // -----------------------// 722 // Block 2 // 722 // Block 2 // 723 // -----------------------// 723 // -----------------------// 724 724 725 const G4double outRadiusBlocco2IORT = 41.5 * 725 const G4double outRadiusBlocco2IORT = 41.5 *mm; 726 const G4double innRadiusBlocco2IORT = 15. *m 726 const G4double innRadiusBlocco2IORT = 15. *mm; 727 const G4double hightBlocco2IORT = 8. *mm; 727 const G4double hightBlocco2IORT = 8. *mm; 728 const G4double startAngleBlocco2IORT = 0.*de 728 const G4double startAngleBlocco2IORT = 0.*deg; 729 const G4double spanningAngleBlocco2IORT = 36 729 const G4double spanningAngleBlocco2IORT = 360.*deg; 730 const G4double XPositionBlocco2IORT = -1012. 730 const G4double XPositionBlocco2IORT = -1012. *mm; 731 731 732 732 733 solidBlocco2IORT = new G4Tubs("Blocco2IORT", 733 solidBlocco2IORT = new G4Tubs("Blocco2IORT", innRadiusBlocco2IORT, 734 outRadiusBlocco2IORT, 734 outRadiusBlocco2IORT, 735 hightBlocco2IORT, 735 hightBlocco2IORT, 736 startAngleBlocco2IORT, 736 startAngleBlocco2IORT, 737 spanningAngleBlocco2IORT); 737 spanningAngleBlocco2IORT); 738 738 739 G4LogicalVolume* logBlocco2IORT = new G4Logi 739 G4LogicalVolume* logBlocco2IORT = new G4LogicalVolume(solidBlocco2IORT, 740 Blocco2IORTMaterialIORT, " 740 Blocco2IORTMaterialIORT, "Blocco2IORT", 0, 0, 0); 741 741 742 physiBlocco2IORT = new G4PVPlacement(G4Trans 742 physiBlocco2IORT = new G4PVPlacement(G4Transform3D(rm4, G4ThreeVector((XPositionBlocco2IORT),0.,0.)), 743 "Blocco2IORT", logBlocco2IORT, ph 743 "Blocco2IORT", logBlocco2IORT, physicalTreatmentRoom, false, 0); 744 744 745 745 746 logBlocco2IORT -> SetVisAttributes(red); 746 logBlocco2IORT -> SetVisAttributes(red); 747 747 748 // ----------------------- // 748 // ----------------------- // 749 // Block 1 // 749 // Block 1 // 750 // ----------------------- // 750 // ----------------------- // 751 751 752 const G4double outRadiusBlocco1IORT = 52.0 * 752 const G4double outRadiusBlocco1IORT = 52.0 *mm; 753 const G4double innRadiusBlocco1IORT = 15. *m 753 const G4double innRadiusBlocco1IORT = 15. *mm; 754 const G4double hightBlocco1IORT = 8.5 *mm; 754 const G4double hightBlocco1IORT = 8.5 *mm; 755 const G4double startAngleBlocco1IORT = 0.*de 755 const G4double startAngleBlocco1IORT = 0.*deg; 756 const G4double spanningAngleBlocco1IORT = 36 756 const G4double spanningAngleBlocco1IORT = 360.*deg; 757 const G4double XPositionBlocco1IORT = -995.5 757 const G4double XPositionBlocco1IORT = -995.5*mm; 758 758 759 759 760 solidBlocco1IORT = new G4Tubs("Blocco1IORT", 760 solidBlocco1IORT = new G4Tubs("Blocco1IORT", innRadiusBlocco1IORT, 761 outRadiusBlocco1IORT, 761 outRadiusBlocco1IORT, 762 hightBlocco1IORT, 762 hightBlocco1IORT, 763 startAngleBlocco1IORT, 763 startAngleBlocco1IORT, 764 spanningAngleBlocco1IORT); 764 spanningAngleBlocco1IORT); 765 765 766 G4LogicalVolume* logBlocco1IORT = new G4Logi 766 G4LogicalVolume* logBlocco1IORT = new G4LogicalVolume(solidBlocco1IORT, 767 Blocco1IORTMaterialIORT, " 767 Blocco1IORTMaterialIORT, "Blocco1IORT", 0, 0, 0); 768 768 769 physiBlocco1IORT = new G4PVPlacement(G4Trans 769 physiBlocco1IORT = new G4PVPlacement(G4Transform3D(rm4, G4ThreeVector((XPositionBlocco1IORT),0.,0.)), 770 "Blocco1IORT", logBlocco1IORT, ph 770 "Blocco1IORT", logBlocco1IORT, physicalTreatmentRoom, false, 0); 771 771 772 772 773 logBlocco1IORT -> SetVisAttributes(white); 773 logBlocco1IORT -> SetVisAttributes(white); 774 774 775 } 775 } 776 776 777 void Collimator100BeamLine::IortBeamLineJuncti 777 void Collimator100BeamLine::IortBeamLineJunctions() 778 { 778 { 779 779 780 780 781 G4double phi5 = 90. *deg; 781 G4double phi5 = 90. *deg; 782 782 783 783 784 G4RotationMatrix rm5; 784 G4RotationMatrix rm5; 785 rm5.rotateY(phi5); 785 rm5.rotateY(phi5); 786 // --------------------------------- // 786 // --------------------------------- // 787 // Junction 5 FINAL COLLIMATOR IORT // 787 // Junction 5 FINAL COLLIMATOR IORT // 788 // --------------------------------- // 788 // --------------------------------- // 789 789 790 const G4double outRadiusGiunz5FinalCollIORT 790 const G4double outRadiusGiunz5FinalCollIORT = 48.25 *mm; 791 const G4double innRadiusGiunz5FinalCollIORT 791 const G4double innRadiusGiunz5FinalCollIORT = 13.75 *mm; 792 const G4double hightGiunz5FinalCollIORT = 3. 792 const G4double hightGiunz5FinalCollIORT = 3.5 *mm; 793 const G4double startAngleGiunz5FinalCollIORT 793 const G4double startAngleGiunz5FinalCollIORT = 0.*deg; 794 const G4double spanningAngleGiunz5FinalCollI 794 const G4double spanningAngleGiunz5FinalCollIORT = 360.*deg; 795 const G4double Giunz5FinalCollXPositionIORT 795 const G4double Giunz5FinalCollXPositionIORT = -983.5 *mm; 796 796 797 797 798 798 799 solidGiunz5FinalCollIORT = new G4Tubs("Giunz 799 solidGiunz5FinalCollIORT = new G4Tubs("Giunz5FinalCollIORT", innRadiusGiunz5FinalCollIORT, 800 outRadiusGiunz5FinalCollIORT, 800 outRadiusGiunz5FinalCollIORT, 801 hightGiunz5FinalCollIORT, 801 hightGiunz5FinalCollIORT, 802 startAngleGiunz5FinalCollIORT, 802 startAngleGiunz5FinalCollIORT, 803 spanningAngleGiunz5FinalCollIORT); 803 spanningAngleGiunz5FinalCollIORT); 804 804 805 G4LogicalVolume* logGiunz5FinalCollIORT = ne 805 G4LogicalVolume* logGiunz5FinalCollIORT = new G4LogicalVolume(solidGiunz5FinalCollIORT, 806 Giunz5FinalCollMaterialIOR 806 Giunz5FinalCollMaterialIORT, "Giunz5FinalCollIORT", 0, 0, 0); 807 807 808 physiGiunz5FinalCollIORT = new G4PVPlacement 808 physiGiunz5FinalCollIORT = new G4PVPlacement(G4Transform3D(rm5, G4ThreeVector((Giunz5FinalCollXPositionIORT),0.,0.)), 809 "Giunz5FinalCollIORT", logGiunz5F 809 "Giunz5FinalCollIORT", logGiunz5FinalCollIORT, physicalTreatmentRoom, false, 0); 810 810 811 logGiunz5FinalCollIORT -> SetVisAttributes(y 811 logGiunz5FinalCollIORT -> SetVisAttributes(yellow); 812 812 813 // --------------------------------- // 813 // --------------------------------- // 814 // Junction 4 FINAL COLLIMATOR IORT // 814 // Junction 4 FINAL COLLIMATOR IORT // 815 // --------------------------------- // 815 // --------------------------------- // 816 816 817 const G4double outRadiusGiunz4FinalCollIORT 817 const G4double outRadiusGiunz4FinalCollIORT = 42. *mm; 818 const G4double innRadiusGiunz4FinalCollIORT 818 const G4double innRadiusGiunz4FinalCollIORT = 13.75 *mm; 819 const G4double hightGiunz4FinalCollIORT = 8. 819 const G4double hightGiunz4FinalCollIORT = 8.5 *mm; 820 const G4double startAngleGiunz4FinalCollIORT 820 const G4double startAngleGiunz4FinalCollIORT = 0.*deg; 821 const G4double spanningAngleGiunz4FinalCollI 821 const G4double spanningAngleGiunz4FinalCollIORT = 360.*deg; 822 const G4double Giunz4FinalCollXPositionIORT 822 const G4double Giunz4FinalCollXPositionIORT = -971.5 *mm; 823 823 824 824 825 825 826 solidGiunz4FinalCollIORT = new G4Tubs("Giunz 826 solidGiunz4FinalCollIORT = new G4Tubs("Giunz4FinalCollIORT", innRadiusGiunz4FinalCollIORT, 827 outRadiusGiunz4FinalCollIORT, 827 outRadiusGiunz4FinalCollIORT, 828 hightGiunz4FinalCollIORT, 828 hightGiunz4FinalCollIORT, 829 startAngleGiunz4FinalCollIORT, 829 startAngleGiunz4FinalCollIORT, 830 spanningAngleGiunz4FinalCollIORT); 830 spanningAngleGiunz4FinalCollIORT); 831 831 832 G4LogicalVolume* logGiunz4FinalCollIORT = ne 832 G4LogicalVolume* logGiunz4FinalCollIORT = new G4LogicalVolume(solidGiunz4FinalCollIORT, 833 Giunz4FinalCollMaterialIOR 833 Giunz4FinalCollMaterialIORT, "Giunz4FinalCollIORT", 0, 0, 0); 834 834 835 physiGiunz4FinalCollIORT = new G4PVPlacement 835 physiGiunz4FinalCollIORT = new G4PVPlacement(G4Transform3D(rm5, G4ThreeVector((Giunz4FinalCollXPositionIORT),0.,0.)), 836 "Giunz4FinalCollIORT", logGiunz4F 836 "Giunz4FinalCollIORT", logGiunz4FinalCollIORT, physicalTreatmentRoom, false, 0); 837 837 838 logGiunz4FinalCollIORT -> SetVisAttributes(b 838 logGiunz4FinalCollIORT -> SetVisAttributes(blue); 839 839 840 840 841 841 842 // --------------------------------- // 842 // --------------------------------- // 843 // Junction 3 FINAL COLLIMATOR IORT // 843 // Junction 3 FINAL COLLIMATOR IORT // 844 // --------------------------------- // 844 // --------------------------------- // 845 845 846 const G4double outRadiusGiunz3FinalCollIORT 846 const G4double outRadiusGiunz3FinalCollIORT = 42. *mm; 847 const G4double innRadiusGiunz3FinalCollIORT 847 const G4double innRadiusGiunz3FinalCollIORT = 0. *mm; 848 const G4double hightGiunz3FinalCollIORT = 4. 848 const G4double hightGiunz3FinalCollIORT = 4.25 *mm; 849 const G4double startAngleGiunz3FinalCollIORT 849 const G4double startAngleGiunz3FinalCollIORT = 0.*deg; 850 const G4double spanningAngleGiunz3FinalCollI 850 const G4double spanningAngleGiunz3FinalCollIORT = 360.*deg; 851 const G4double Giunz3FinalCollXPositionIORT 851 const G4double Giunz3FinalCollXPositionIORT = -958.75 *mm; 852 852 853 853 854 solidGiunz3FinalCollIORT = new G4Tubs("Giunz 854 solidGiunz3FinalCollIORT = new G4Tubs("Giunz3FinalCollIORT", innRadiusGiunz3FinalCollIORT, 855 outRadiusGiunz3FinalCollIORT, 855 outRadiusGiunz3FinalCollIORT, 856 hightGiunz3FinalCollIORT, 856 hightGiunz3FinalCollIORT, 857 startAngleGiunz3FinalCollIORT, 857 startAngleGiunz3FinalCollIORT, 858 spanningAngleGiunz3FinalCollIORT); 858 spanningAngleGiunz3FinalCollIORT); 859 859 860 G4LogicalVolume* logicsolidGiunz3FinalCollIO 860 G4LogicalVolume* logicsolidGiunz3FinalCollIORT = new G4LogicalVolume(solidGiunz3FinalCollIORT, 861 Giunz3FinalCollMaterialIOR 861 Giunz3FinalCollMaterialIORT, "Giunz3FinalCollIORT", 0, 0, 0); 862 862 863 physiGiunz3FinalCollIORT = new G4PVPlacement 863 physiGiunz3FinalCollIORT = new G4PVPlacement(G4Transform3D(rm5, G4ThreeVector((Giunz3FinalCollXPositionIORT),0.,0.)), 864 "Giunz3FinalCollIORT", logicsolid 864 "Giunz3FinalCollIORT", logicsolidGiunz3FinalCollIORT, physicalTreatmentRoom, false, 0); 865 865 866 logicsolidGiunz3FinalCollIORT -> SetVisAttri 866 logicsolidGiunz3FinalCollIORT -> SetVisAttributes(yellow); 867 // logicsolidGiunz3FinalCollIORT -> SetVisAt 867 // logicsolidGiunz3FinalCollIORT -> SetVisAttributes (G4VisAttributes::GetInvisible()); 868 868 869 869 870 870 871 // --------------------------------- // 871 // --------------------------------- // 872 // Junction 3 FINAL COLLIMATOR IORT internal 872 // Junction 3 FINAL COLLIMATOR IORT internal // 873 // --------------------------------- // 873 // --------------------------------- // 874 874 875 875 876 876 877 solidGiunz3FinalCollIntIORT = new G4Cons("Gi 877 solidGiunz3FinalCollIntIORT = new G4Cons("Giunz3FinalCollIntIORT",0.*mm,13.75*mm,0.*mm,22.25*mm,4.25*mm,0.*deg,360.*deg); 878 878 879 G4LogicalVolume* logicsolidGiunz3FinalCollIn 879 G4LogicalVolume* logicsolidGiunz3FinalCollIntIORT = new G4LogicalVolume(solidGiunz3FinalCollIntIORT, 880 Giunz3FinalCollMaterialInt 880 Giunz3FinalCollMaterialIntIORT, "Giunz3FinalCollIntIORT", 0, 0, 0); 881 881 882 physiGiunz3FinalCollIntIORT = new G4PVPlacem 882 physiGiunz3FinalCollIntIORT = new G4PVPlacement(0, G4ThreeVector(0.,0.,0.),"Giunz3FinalCollIntIORT", logicsolidGiunz3FinalCollIntIORT,physiGiunz3FinalCollIORT, false, 0); 883 883 884 logicsolidGiunz3FinalCollIntIORT -> SetVisAt 884 logicsolidGiunz3FinalCollIntIORT -> SetVisAttributes(yellow); 885 885 886 886 887 // --------------------------------- // 887 // --------------------------------- // 888 // Junction 2 FINAL COLLIMATOR IORT // 888 // Junction 2 FINAL COLLIMATOR IORT // 889 // --------------------------------- // 889 // --------------------------------- // 890 890 891 const G4double outRadiusGiunz2FinalCollIORT 891 const G4double outRadiusGiunz2FinalCollIORT = 42. *mm; 892 const G4double innRadiusGiunz2FinalCollIORT 892 const G4double innRadiusGiunz2FinalCollIORT = 22.25 *mm; 893 const G4double hightGiunz2FinalCollIORT = 5. 893 const G4double hightGiunz2FinalCollIORT = 5.75 *mm; 894 const G4double startAngleGiunz2FinalCollIORT 894 const G4double startAngleGiunz2FinalCollIORT = 0.*deg; 895 const G4double spanningAngleGiunz2FinalCollI 895 const G4double spanningAngleGiunz2FinalCollIORT = 360.*deg; 896 const G4double Giunz2FinalCollXPositionIORT 896 const G4double Giunz2FinalCollXPositionIORT = -948.75 *mm; 897 897 898 898 899 899 900 solidGiunz2FinalCollIORT = new G4Tubs("Giunz 900 solidGiunz2FinalCollIORT = new G4Tubs("Giunz2FinalCollIORT", innRadiusGiunz2FinalCollIORT, 901 outRadiusGiunz2FinalCollIORT, 901 outRadiusGiunz2FinalCollIORT, 902 hightGiunz2FinalCollIORT, 902 hightGiunz2FinalCollIORT, 903 startAngleGiunz2FinalCollIORT, 903 startAngleGiunz2FinalCollIORT, 904 spanningAngleGiunz2FinalCollIORT); 904 spanningAngleGiunz2FinalCollIORT); 905 905 906 G4LogicalVolume* logGiunz2FinalCollIORT = ne 906 G4LogicalVolume* logGiunz2FinalCollIORT = new G4LogicalVolume(solidGiunz2FinalCollIORT, 907 Giunz2FinalCollMaterialIOR 907 Giunz2FinalCollMaterialIORT, "Giunz2FinalCollIORT", 0, 0, 0); 908 908 909 physiGiunz2FinalCollIORT = new G4PVPlacement 909 physiGiunz2FinalCollIORT = new G4PVPlacement(G4Transform3D(rm5, G4ThreeVector((Giunz2FinalCollXPositionIORT),0.,0.)), 910 "Giunz2FinalCollIORT", logGiunz2F 910 "Giunz2FinalCollIORT", logGiunz2FinalCollIORT, physicalTreatmentRoom, false, 0); 911 911 912 logGiunz2FinalCollIORT -> SetVisAttributes(r 912 logGiunz2FinalCollIORT -> SetVisAttributes(red); 913 913 914 // --------------------------------- // 914 // --------------------------------- // 915 // Junction 1 FINAL COLLIMATOR IORT // 915 // Junction 1 FINAL COLLIMATOR IORT // 916 // --------------------------------- // 916 // --------------------------------- // 917 917 918 const G4double outRadiusGiunz1FinalCollIORT 918 const G4double outRadiusGiunz1FinalCollIORT = 65. *mm; 919 const G4double innRadiusGiunz1FinalCollIORT 919 const G4double innRadiusGiunz1FinalCollIORT = 22.25 *mm; 920 const G4double hightGiunz1FinalCollIORT = 10 920 const G4double hightGiunz1FinalCollIORT = 10. *mm; 921 const G4double startAngleGiunz1FinalCollIORT 921 const G4double startAngleGiunz1FinalCollIORT = 0.*deg; 922 const G4double spanningAngleGiunz1FinalCollI 922 const G4double spanningAngleGiunz1FinalCollIORT = 360.*deg; 923 const G4double Giunz1FinalCollXPositionIORT 923 const G4double Giunz1FinalCollXPositionIORT = -933.*mm; 924 924 925 925 926 926 927 solidGiunz1FinalCollIORT = new G4Tubs("Giunz 927 solidGiunz1FinalCollIORT = new G4Tubs("Giunz1FinalCollIORT", innRadiusGiunz1FinalCollIORT, 928 outRadiusGiunz1FinalCollIORT, 928 outRadiusGiunz1FinalCollIORT, 929 hightGiunz1FinalCollIORT, 929 hightGiunz1FinalCollIORT, 930 startAngleGiunz1FinalCollIORT, 930 startAngleGiunz1FinalCollIORT, 931 spanningAngleGiunz1FinalCollIORT); 931 spanningAngleGiunz1FinalCollIORT); 932 932 933 G4LogicalVolume* logGiunz1FinalCollIORT = ne 933 G4LogicalVolume* logGiunz1FinalCollIORT = new G4LogicalVolume(solidGiunz1FinalCollIORT, 934 Giunz1FinalCollMaterialIOR 934 Giunz1FinalCollMaterialIORT, "Giunz1FinalCollIORT", 0, 0, 0); 935 935 936 physiGiunz1FinalCollIORT = new G4PVPlacement 936 physiGiunz1FinalCollIORT = new G4PVPlacement(G4Transform3D(rm5, G4ThreeVector((Giunz1FinalCollXPositionIORT),0.,0.)), 937 "Giunz1FinalCollIORT", logGiunz1F 937 "Giunz1FinalCollIORT", logGiunz1FinalCollIORT, physicalTreatmentRoom, false, 0); 938 938 939 logGiunz1FinalCollIORT -> SetVisAttributes( 939 logGiunz1FinalCollIORT -> SetVisAttributes(gray); 940 940 941 } 941 } 942 942 943 void Collimator100BeamLine::IortBeamLineFinalC 943 void Collimator100BeamLine::IortBeamLineFinalCollimator() 944 { 944 { 945 // -----------------------// 945 // -----------------------// 946 // FINAL COLLIMATOR IORT // 946 // FINAL COLLIMATOR IORT // 947 //------------------------// 947 //------------------------// 948 948 949 // const G4double outRadiusFinalCollimatorIOR 949 // const G4double outRadiusFinalCollimatorIORT = 45. *mm; 950 // const G4double innRadiusFinalCollimatorIOR 950 // const G4double innRadiusFinalCollimatorIORT = 40. *mm; 951 const G4double hightFinalCollimatorIORT = 43 951 const G4double hightFinalCollimatorIORT = 434. *mm; 952 const G4double startAngleFinalCollimatorIORT 952 const G4double startAngleFinalCollimatorIORT = 0.*deg; 953 const G4double spanningAngleFinalCollimatorI 953 const G4double spanningAngleFinalCollimatorIORT = 360.*deg; 954 const G4double finalCollimatorXPositionIORT 954 const G4double finalCollimatorXPositionIORT = -489.*mm; 955 955 956 956 957 957 958 958 959 G4double phi6 = 90. *deg; 959 G4double phi6 = 90. *deg; 960 960 961 961 962 G4RotationMatrix rm6; 962 G4RotationMatrix rm6; 963 rm6.rotateY(phi6); 963 rm6.rotateY(phi6); 964 964 965 965 966 solidFinalCollimatorIORT = new G4Tubs("Final 966 solidFinalCollimatorIORT = new G4Tubs("FinalCollimatorIORT", innerRadiusFinalCollimatorIORT, 967 OuterRadiusFinalCollimatorIORT, 967 OuterRadiusFinalCollimatorIORT, 968 hightFinalCollimatorIORT, 968 hightFinalCollimatorIORT, 969 startAngleFinalCollimatorIORT, 969 startAngleFinalCollimatorIORT, 970 spanningAngleFinalCollimatorIORT); 970 spanningAngleFinalCollimatorIORT); 971 971 972 G4LogicalVolume* logFinalCollimatorIORT = ne 972 G4LogicalVolume* logFinalCollimatorIORT = new G4LogicalVolume(solidFinalCollimatorIORT, 973 finalCollimatorMaterialIOR 973 finalCollimatorMaterialIORT, "FinalCollimatorIORT", 0, 0, 0); 974 974 975 physiFinalCollimatorIORT = new G4PVPlacement 975 physiFinalCollimatorIORT = new G4PVPlacement(G4Transform3D(rm6, G4ThreeVector((finalCollimatorXPositionIORT),0.,0.)), 976 "FinalCollimatorIORT", logFinalCo 976 "FinalCollimatorIORT", logFinalCollimatorIORT, physicalTreatmentRoom, false, 0); 977 977 978 // logFinalCollimatorIORT -> SetVisAttribut 978 // logFinalCollimatorIORT -> SetVisAttributes(G4VisAttributes::GetInvisible()); 979 logFinalCollimatorIORT -> SetVisAttributes( 979 logFinalCollimatorIORT -> SetVisAttributes(darkGreen); 980 980 981 } 981 } 982 982 983 ////////////////////////////////////////////// 983 ///////////////////////////////////////////////////////////////////////////// 984 /////////////////////////// MESSENGER //////// 984 /////////////////////////// MESSENGER /////////////////////////////////////// 985 ////////////////////////////////////////////// 985 ///////////////////////////////////////////////////////////////////////////// 986 986 987 987 988 void Collimator100BeamLine::SetInnerRadiusFina 988 void Collimator100BeamLine::SetInnerRadiusFinalCollimatorIORT(G4double value) 989 { 989 { 990 solidFinalCollimatorIORT -> SetInnerRadius(v 990 solidFinalCollimatorIORT -> SetInnerRadius(value); 991 G4RunManager::GetRunManager() -> GeometryHas 991 G4RunManager::GetRunManager() -> GeometryHasBeenModified(); 992 G4cout<<"Inner Radius of the final collimato 992 G4cout<<"Inner Radius of the final collimator IORT is (mm):" 993 << solidFinalCollimatorIORT -> GetInnerRadiu 993 << solidFinalCollimatorIORT -> GetInnerRadius()/mm 994 << G4endl; 994 << G4endl; 995 } 995 } 996 996 997 ////////////////////////////////////////////// 997 ///////////////////////////////////////////////////////////////////////// 998 998 999 void Collimator100BeamLine::SetOuterRadiusFina 999 void Collimator100BeamLine::SetOuterRadiusFinalCollimatorIORT(G4double value) 1000 { 1000 { 1001 solidFinalCollimatorIORT -> SetOuterRadius( 1001 solidFinalCollimatorIORT -> SetOuterRadius(value); 1002 G4RunManager::GetRunManager() -> GeometryHa 1002 G4RunManager::GetRunManager() -> GeometryHasBeenModified(); 1003 G4cout<<"Outer Radius of the final collimat 1003 G4cout<<"Outer Radius of the final collimator IORT is (mm):" 1004 << solidFinalCollimatorIORT -> GetOuterRadi 1004 << solidFinalCollimatorIORT -> GetOuterRadius()/mm 1005 << G4endl; 1005 << G4endl; 1006 } 1006 } 1007 1007 1008 ///////////////////////////////////////////// 1008 ///////////////////////////////////////////////////////////////////////////// 1009 1009 1010 1010 1011 1011 1012 1012