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 // Name of file: FCALHadModule.cc 26 // Name of file: FCALHadModule.cc 27 // Author: Mathieu Fontaine 27 // Author: Mathieu Fontaine Rachid Mazini 28 // fontainerlps.umontrea 28 // fontainerlps.umontreal.ca Rachid.Mazinircern.ch 29 // Language: C++ 29 // Language: C++ 30 // Tested on : g++ 30 // Tested on : g++ 31 // Prerequisites: None 31 // Prerequisites: None 32 // Purpose: Source file defining 32 // Purpose: Source file defining the geometry of HadModule 0 of the 33 // FCAL. 33 // FCAL. 34 // Developped: 10-March-2000 M.F. 34 // Developped: 10-March-2000 M.F. 35 // 35 // 36 //-------------------------------------------- 36 //----------------------------------------------------------------------------- 37 37 38 #include <fstream> 38 #include <fstream> 39 39 40 #include "FCALHadModule.hh" 40 #include "FCALHadModule.hh" 41 41 42 #include "FCALMaterialConsultant.hh" 42 #include "FCALMaterialConsultant.hh" 43 #include "FCALHadModuleSD.hh" 43 #include "FCALHadModuleSD.hh" 44 #include "G4SDManager.hh" 44 #include "G4SDManager.hh" 45 45 46 #include "G4PhysicalConstants.hh" 46 #include "G4PhysicalConstants.hh" 47 #include "G4SystemOfUnits.hh" 47 #include "G4SystemOfUnits.hh" 48 #include "G4Box.hh" 48 #include "G4Box.hh" 49 #include "G4Tubs.hh" 49 #include "G4Tubs.hh" 50 #include "G4LogicalVolume.hh" 50 #include "G4LogicalVolume.hh" 51 #include "G4VPhysicalVolume.hh" 51 #include "G4VPhysicalVolume.hh" 52 #include "G4PVPlacement.hh" 52 #include "G4PVPlacement.hh" 53 #include "G4SubtractionSolid.hh" 53 #include "G4SubtractionSolid.hh" 54 54 55 #include "G4ThreeVector.hh" 55 #include "G4ThreeVector.hh" 56 #include "G4VisAttributes.hh" 56 #include "G4VisAttributes.hh" 57 #include "G4Colour.hh" 57 #include "G4Colour.hh" 58 58 59 #include "G4ios.hh" 59 #include "G4ios.hh" 60 60 61 61 62 FCALHadModule::FCALHadModule() : 62 FCALHadModule::FCALHadModule() : 63 FcalHadModuleSD(0) 63 FcalHadModuleSD(0) 64 { 64 { 65 F2LArGapID = new G4int[2600]; 65 F2LArGapID = new G4int[2600]; 66 F2LArIX = new G4int[2600]; 66 F2LArIX = new G4int[2600]; 67 F2LArJY = new G4int[2600]; 67 F2LArJY = new G4int[2600]; 68 F2LArITile = new G4int[2600]; 68 F2LArITile = new G4int[2600]; 69 F2LArGapPosX = new G4double[2600]; 69 F2LArGapPosX = new G4double[2600]; 70 F2LArGapPosY = new G4double[2600]; 70 F2LArGapPosY = new G4double[2600]; 71 } 71 } 72 72 73 FCALHadModule::~FCALHadModule() { 73 FCALHadModule::~FCALHadModule() { 74 delete [] F2LArGapID; 74 delete [] F2LArGapID; 75 delete [] F2LArGapPosX; 75 delete [] F2LArGapPosX; 76 delete [] F2LArGapPosY; 76 delete [] F2LArGapPosY; 77 delete [] F2LArIX; 77 delete [] F2LArIX; 78 delete [] F2LArJY; 78 delete [] F2LArJY; 79 delete [] F2LArITile; 79 delete [] F2LArITile; 80 } 80 } 81 81 82 82 83 void FCALHadModule::InitializeGeometry() { 83 void FCALHadModule::InitializeGeometry() { 84 84 85 #include "FCALHadModuleParameters.input" 85 #include "FCALHadModuleParameters.input" 86 86 87 std::ifstream File 87 std::ifstream File 88 ("geom_data/FCal2Electrodes.dat"); 88 ("geom_data/FCal2Electrodes.dat"); 89 89 90 if(!File) G4cerr << "Failed to open file F 90 if(!File) G4cerr << "Failed to open file FCal2Electrode data file" << G4endl; 91 File.seekg(0); 91 File.seekg(0); 92 92 93 NF2LarGap = 0; 93 NF2LarGap = 0; 94 while(!(File.eof())) { 94 while(!(File.eof())) { 95 NF2LarGap++; 95 NF2LarGap++; 96 File >> F2LArGapID[NF2LarGap] >> F2LArGap 96 File >> F2LArGapID[NF2LarGap] >> F2LArGapPosX[NF2LarGap] >> F2LArGapPosY[NF2LarGap] 97 >> F2LArIX[NF2LarGap] >> F2LArJY[NF2LarGa 97 >> F2LArIX[NF2LarGap] >> F2LArJY[NF2LarGap] >> F2LArITile[NF2LarGap]; 98 }; 98 }; 99 99 100 G4cout << "*********" << " Number of Rods i 100 G4cout << "*********" << " Number of Rods in FCAL2 : " << NF2LarGap-1 << G4endl; 101 } 101 } 102 102 103 103 104 G4LogicalVolume * FCALHadModule::Construct() 104 G4LogicalVolume * FCALHadModule::Construct() 105 { 105 { 106 //----------------------------- 106 //----------------------------- 107 // construction of materials 107 // construction of materials 108 //----------------------------- 108 //----------------------------- 109 109 110 FCALMaterialConsultant * FCALMaterials = 110 FCALMaterialConsultant * FCALMaterials = 111 FCALMaterialConsultant::GetInstance(); 111 FCALMaterialConsultant::GetInstance(); 112 112 113 G4VisAttributes * ColorOfTungsten = new G4Vi 113 G4VisAttributes * ColorOfTungsten = new G4VisAttributes(G4Colour(.5,.5,.5)); 114 G4VisAttributes * ColorOfCopper =new G4VisAt 114 G4VisAttributes * ColorOfCopper =new G4VisAttributes(G4Colour(0.58,0.15,0.05)); 115 G4VisAttributes * ColorOfLarg = new G4VisAt 115 G4VisAttributes * ColorOfLarg = new G4VisAttributes(G4Colour(0.,0.,1.)); 116 116 117 117 118 //---------------------------- 118 //---------------------------- 119 // Read Parameters 119 // Read Parameters 120 //---------------------------- 120 //---------------------------- 121 InitializeGeometry(); 121 InitializeGeometry(); 122 122 123 123 124 //----------------------------------------- 124 //----------------------------------------- 125 // the logical to be returned (mother) 125 // the logical to be returned (mother) 126 //----------------------------------------- 126 //----------------------------------------- 127 127 128 G4Tubs * SolidHadModule = 128 G4Tubs * SolidHadModule = 129 new G4Tubs("HadModuleSolid", HadModuleRMin 129 new G4Tubs("HadModuleSolid", HadModuleRMin, HadModuleRMax, HadModuleLenght, 130 HadModuleStartPhi,HadModuleDPhi); 130 HadModuleStartPhi,HadModuleDPhi); 131 G4LogicalVolume * LogicalHadModule = 131 G4LogicalVolume * LogicalHadModule = 132 new G4LogicalVolume(SolidHadModule, FCALMa 132 new G4LogicalVolume(SolidHadModule, FCALMaterials->Material("Copper"), 133 "HadModuleLogical"); 133 "HadModuleLogical"); 134 134 135 LogicalHadModule->SetSmartless(FCAL2HadSmart 135 LogicalHadModule->SetSmartless(FCAL2HadSmart); 136 136 137 LogicalHadModule->SetVisAttributes(ColorOfCo 137 LogicalHadModule->SetVisAttributes(ColorOfCopper); 138 // LogicalHadModule->SetVisAttributes(G4Vis << 138 // LogicalHadModule->SetVisAttributes(G4VisAttributes::Invisible); 139 139 140 140 141 //----------------------------------------- 141 //----------------------------------------- 142 // Tungsten Absorber 142 // Tungsten Absorber 143 //----------------------------------------- 143 //----------------------------------------- 144 G4Tubs * SolidWAbsorber = 144 G4Tubs * SolidWAbsorber = 145 new G4Tubs("WAbsorberSolid", WAbsorberRMin 145 new G4Tubs("WAbsorberSolid", WAbsorberRMin, WAbsorberRMax, WAbsorberLenght, 146 WAbsorberStartPhi, WAbsorberDPhi); 146 WAbsorberStartPhi, WAbsorberDPhi); 147 G4LogicalVolume * LogicalWAbsorber = 147 G4LogicalVolume * LogicalWAbsorber = 148 new G4LogicalVolume(SolidWAbsorber, FCALMa 148 new G4LogicalVolume(SolidWAbsorber, FCALMaterials->Material("FCAL2WFeNi"), 149 "SolidWLogical"); 149 "SolidWLogical"); 150 // G4VPhysicalVolume * PhysicalWAbsorber = 150 // G4VPhysicalVolume * PhysicalWAbsorber = 151 new G4PVPlacement(0, G4ThreeVector(), Logi 151 new G4PVPlacement(0, G4ThreeVector(), LogicalWAbsorber, "WAbsorberPhysical", 152 LogicalHadModule, 0, 0); 152 LogicalHadModule, 0, 0); 153 153 154 LogicalWAbsorber->SetVisAttributes(ColorOfTu 154 LogicalWAbsorber->SetVisAttributes(ColorOfTungsten); 155 // LogicalWAbsorber->SetVisAttributes(G4VisA << 155 // LogicalWAbsorber->SetVisAttributes(G4VisAttributes::Invisible); 156 156 157 157 158 // ----------------- 158 // ----------------- 159 // Copper Plates 159 // Copper Plates 160 //------------------ 160 //------------------ 161 G4Tubs * SolidCuPlate = 161 G4Tubs * SolidCuPlate = 162 new G4Tubs("CuPlateSolid",HadModuleRMin, H 162 new G4Tubs("CuPlateSolid",HadModuleRMin, HadModuleRMax, CuPlateLenght, 163 HadModuleStartPhi, HadModuleDPhi); 163 HadModuleStartPhi, HadModuleDPhi); 164 G4LogicalVolume * LogicalCuPlate = 164 G4LogicalVolume * LogicalCuPlate = 165 new G4LogicalVolume(SolidCuPlate, FCALMate 165 new G4LogicalVolume(SolidCuPlate, FCALMaterials->Material("Copper"), "CuPlateLogical"); 166 166 167 // G4VPhysicalVolume * PhysicalCuPlateA = 167 // G4VPhysicalVolume * PhysicalCuPlateA = 168 new G4PVPlacement(0, G4ThreeVector(0.,0.,C 168 new G4PVPlacement(0, G4ThreeVector(0.,0.,CuPlateAPosZ), LogicalCuPlate, 169 "CuPlateAPhysical", LogicalHadModule 169 "CuPlateAPhysical", LogicalHadModule, 0, 0); 170 // G4VPhysicalVolume * PhysicalCuPlateB = 170 // G4VPhysicalVolume * PhysicalCuPlateB = 171 new G4PVPlacement(0, G4ThreeVector(0.,0.,C 171 new G4PVPlacement(0, G4ThreeVector(0.,0.,CuPlateBPosZ), LogicalCuPlate, 172 "CuPlateBPhysical", LogicalHadModule 172 "CuPlateBPhysical", LogicalHadModule, 0, 0); 173 173 174 LogicalCuPlate->SetVisAttributes(ColorOfCopp 174 LogicalCuPlate->SetVisAttributes(ColorOfCopper); 175 // LogicalCuPlate->SetVisAttributes(G4VisAt << 175 // LogicalCuPlate->SetVisAttributes(G4VisAttributes::Invisible); 176 176 177 //------------------------------------------ 177 //------------------------------------------ 178 // Had Module (F2) Main and A/B Cable Troff 178 // Had Module (F2) Main and A/B Cable Troff 179 //------------------------------------------ 179 //------------------------------------------ 180 G4Tubs * SolidF2TroffMain = 180 G4Tubs * SolidF2TroffMain = 181 new G4Tubs("F2TroffMainSolid", F2TroffRmin 181 new G4Tubs("F2TroffMainSolid", F2TroffRmin, F2TroffRmax, F2TroffMainLenght, 182 F2TroffStartPhi, F2TroffDphi); 182 F2TroffStartPhi, F2TroffDphi); 183 G4LogicalVolume * LogicalF2TroffMain = 183 G4LogicalVolume * LogicalF2TroffMain = 184 new G4LogicalVolume(SolidF2TroffMain, FCAL 184 new G4LogicalVolume(SolidF2TroffMain, FCALMaterials->Material("FCAL2CuArKap"), 185 "F2TroffMainLogical"); 185 "F2TroffMainLogical"); 186 186 187 G4Tubs * SolidF2TroffAB = 187 G4Tubs * SolidF2TroffAB = 188 new G4Tubs("F2TroffABSolid", F2TroffRmin, 188 new G4Tubs("F2TroffABSolid", F2TroffRmin, F2TroffRmax, F2TroffABLenght, 189 F2TroffStartPhi, F2TroffDphi); 189 F2TroffStartPhi, F2TroffDphi); 190 G4LogicalVolume * LogicalF2TroffAB = 190 G4LogicalVolume * LogicalF2TroffAB = 191 new G4LogicalVolume(SolidF2TroffAB, FCALMa 191 new G4LogicalVolume(SolidF2TroffAB, FCALMaterials->Material("FCAL2CuArKap"), 192 "F2TroffABLogical"); 192 "F2TroffABLogical"); 193 193 194 G4ThreeVector F2TroffMainTrans(0.,0.,0.); 194 G4ThreeVector F2TroffMainTrans(0.,0.,0.); 195 G4ThreeVector F2TroffABTrans(0.,0.,0.); 195 G4ThreeVector F2TroffABTrans(0.,0.,0.); 196 G4RotationMatrix F2TroffRot; 196 G4RotationMatrix F2TroffRot; 197 G4int i=0; 197 G4int i=0; 198 for(i=0 ; i < NCableTroff ; i++) 198 for(i=0 ; i < NCableTroff ; i++) 199 { 199 { 200 // G4VPhysicalVolume * PhysicalF2TroffMai 200 // G4VPhysicalVolume * PhysicalF2TroffMain = 201 new G4PVPlacement(G4Transform3D(F2TroffRot,F 201 new G4PVPlacement(G4Transform3D(F2TroffRot,F2TroffMainTrans), LogicalF2TroffMain, 202 "F2TroffMainPhysical", LogicalWAbsorbe 202 "F2TroffMainPhysical", LogicalWAbsorber,0,i+1); 203 203 204 // G4VPhysicalVolume * PhysicalF2TroffAB 204 // G4VPhysicalVolume * PhysicalF2TroffAB = 205 new G4PVPlacement(G4Transform3D(F2TroffRot,F 205 new G4PVPlacement(G4Transform3D(F2TroffRot,F2TroffABTrans), LogicalF2TroffAB, 206 "F2TroffAPhysical", LogicalCuPlate, 0, 206 "F2TroffAPhysical", LogicalCuPlate, 0, i+1); 207 207 208 F2TroffRot.rotateZ(F2TroffRotZ); 208 F2TroffRot.rotateZ(F2TroffRotZ); 209 } 209 } 210 210 211 LogicalF2TroffMain->SetVisAttributes(ColorOf 211 LogicalF2TroffMain->SetVisAttributes(ColorOfCopper); 212 // LogicalF2TroffMain->SetVisAttributes(G4V << 212 // LogicalF2TroffMain->SetVisAttributes(G4VisAttributes::Invisible); 213 LogicalF2TroffAB->SetVisAttributes(ColorOfCo 213 LogicalF2TroffAB->SetVisAttributes(ColorOfCopper); 214 // LogicalF2TroffAB->SetVisAttributes(G4VisA << 214 // LogicalF2TroffAB->SetVisAttributes(G4VisAttributes::Invisible); 215 215 216 216 217 //---------------------- 217 //---------------------- 218 // LArg Gaps + F2 Rod 218 // LArg Gaps + F2 Rod 219 //---------------------- 219 //---------------------- 220 G4Tubs * SolidF2LArGap = 220 G4Tubs * SolidF2LArGap = 221 new G4Tubs("F2LArGapSolid", F2LArGapRmin, 221 new G4Tubs("F2LArGapSolid", F2LArGapRmin, F2LArGapRmax, F2LArGapLenght, 222 F2LArGapStartPhi, F2LArGapDph 222 F2LArGapStartPhi, F2LArGapDphi); 223 G4LogicalVolume * LogicalF2LArGap = 223 G4LogicalVolume * LogicalF2LArGap = 224 new G4LogicalVolume(SolidF2LArGap, FCALM 224 new G4LogicalVolume(SolidF2LArGap, FCALMaterials->Material("LiquidArgon"), 225 "F2LArGapLogical"); 225 "F2LArGapLogical"); 226 226 227 LogicalF2LArGap->SetVisAttributes(ColorOf 227 LogicalF2LArGap->SetVisAttributes(ColorOfLarg); 228 // LogicalF2LArGap->SetVisAttributes(G4VisA << 228 // LogicalF2LArGap->SetVisAttributes(G4VisAttributes::Invisible); 229 229 230 G4Tubs * SolidF2Rod = 230 G4Tubs * SolidF2Rod = 231 new G4Tubs("F2RodSolid", F2RodRmin, F2Ro 231 new G4Tubs("F2RodSolid", F2RodRmin, F2RodRmax, F2RodLenght, F2RodStartPhi, F2RodDphi); 232 G4LogicalVolume * LogicalF2Rod = 232 G4LogicalVolume * LogicalF2Rod = 233 new G4LogicalVolume(SolidF2Rod, FCALMate 233 new G4LogicalVolume(SolidF2Rod, FCALMaterials->Material("Tungsten"),"F2RodLogical"); 234 // G4VPhysicalVolume * PhysicalF2Rod = 234 // G4VPhysicalVolume * PhysicalF2Rod = 235 new G4PVPlacement(0,G4ThreeVector(),Logi 235 new G4PVPlacement(0,G4ThreeVector(),LogicalF2Rod,"F2RodPhysical",LogicalF2LArGap,0, 0); 236 236 237 LogicalF2Rod->SetVisAttributes(ColorOfTung 237 LogicalF2Rod->SetVisAttributes(ColorOfTungsten); 238 // LogicalF2Rod->SetVisAttributes(G4VisAtt << 238 // LogicalF2Rod->SetVisAttributes(G4VisAttributes::Invisible); 239 239 240 //--------------------------------- 240 //--------------------------------- 241 // Electrod (Rod + LArg) placement 241 // Electrod (Rod + LArg) placement 242 //--------------------------------- 242 //--------------------------------- 243 for(i=1; i < NF2LarGap; i++){ 243 for(i=1; i < NF2LarGap; i++){ 244 // G4VPhysicalVolume * PhysicalF2LArGap = 244 // G4VPhysicalVolume * PhysicalF2LArGap = 245 new G4PVPlacement(0,G4ThreeVector(F2LArGapPo 245 new G4PVPlacement(0,G4ThreeVector(F2LArGapPosX[i]*cm,F2LArGapPosY[i]*cm,0.*cm), 246 LogicalF2LArGap,"F2LArGapPhysical", 246 LogicalF2LArGap,"F2LArGapPhysical", 247 LogicalHadModule, 0, i); 247 LogicalHadModule, 0, i); 248 }; 248 }; 249 249 250 LogicalF2LArGap->SetVisAttributes(ColorOfL 250 LogicalF2LArGap->SetVisAttributes(ColorOfLarg); 251 // LogicalF2LArGap->SetVisAttributes(G4Vis << 251 // LogicalF2LArGap->SetVisAttributes(G4VisAttributes::Invisible); 252 252 253 253 254 // Sensitive Volumes 254 // Sensitive Volumes 255 G4SDManager* SDman = G4SDManager::GetSDMpo 255 G4SDManager* SDman = G4SDManager::GetSDMpointer(); 256 256 257 if(!FcalHadModuleSD) 257 if(!FcalHadModuleSD) 258 { 258 { 259 FcalHadModuleSD = new FCALHadModuleSD("FCALT 259 FcalHadModuleSD = new FCALHadModuleSD("FCALTB/HadModuleSD"); 260 SDman->AddNewDetector(FcalHadModuleSD); 260 SDman->AddNewDetector(FcalHadModuleSD); 261 } 261 } 262 LogicalF2LArGap->SetSensitiveDetector(Fcal 262 LogicalF2LArGap->SetSensitiveDetector(FcalHadModuleSD); 263 263 264 264 265 return LogicalHadModule; 265 return LogicalHadModule; 266 266 267 } 267 } 268 268 269 G4int FCALHadModule::GetF2TileID(G4int TileID) 269 G4int FCALHadModule::GetF2TileID(G4int TileID) 270 { 270 { 271 return F2LArITile[TileID]; 271 return F2LArITile[TileID]; 272 } 272 } 273 273 274 274 275 275 276 276