Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 // Author: Mathieu Fontaine Rachid Mazini 27 // fontaine@lps.umontreal.ca Rachid.Mazini@cern.ch 28 // Language: C++ 29 // Tested on : g++ 30 // Prerequisites: None 31 // Purpose: Source file defining the differents volumes 32 // in the cryostat 33 // Developped: 10-March-2000 M.F. 34 // 35 //----------------------------------------------------------------------------- 36 37 #include "FCALCryostatVolumes.hh" 38 39 #include "FCALMaterialConsultant.hh" 40 41 #include "FCALEMModule.hh" 42 #include "FCALHadModule.hh" 43 44 #include "G4PhysicalConstants.hh" 45 #include "G4SystemOfUnits.hh" 46 #include "G4Box.hh" 47 #include "G4Tubs.hh" 48 #include "G4Trd.hh" 49 #include "G4LogicalVolume.hh" 50 #include "G4VPhysicalVolume.hh" 51 #include "G4PVPlacement.hh" 52 #include "G4SubtractionSolid.hh" 53 54 #include "G4ThreeVector.hh" 55 #include "G4RotationMatrix.hh" 56 #include "G4VisAttributes.hh" 57 #include "G4Colour.hh" 58 59 FCALCryostatVolumes::FCALCryostatVolumes() 60 { 61 #include "FCALCryostatVolumesParameters.input" 62 } 63 64 FCALCryostatVolumes::~FCALCryostatVolumes() {;} 65 66 G4LogicalVolume * FCALCryostatVolumes::Construct() 67 { 68 69 //----------------------------- 70 // construction of materials 71 //----------------------------- 72 73 FCALMaterialConsultant * FCALMaterials = 74 FCALMaterialConsultant::GetInstance(); 75 76 77 //----------------------------------------- 78 // G4VisAttributes * ColorOfIron = new G4VisAttributes(G4Colour(0.3,0.3,0.3)); 79 G4VisAttributes * ColorOfLead = new G4VisAttributes(G4Colour(0.5,0.5,0.5)); 80 G4VisAttributes * ColorOfAir = new G4VisAttributes(G4Colour(1.,1.,1.)); 81 // G4VisAttributes * ColorOfLarg = new G4VisAttributes(G4Colour(1.0, 1.0, 0.0)); 82 83 84 //----------------------------- 85 // Cryostat 86 //----------------------------- 87 G4Tubs * SolidCryostat = 88 new G4Tubs("CryostatSolid", CryostatRMin, CryostatRMax, CryostatLenght, 89 StartingPhi, DPhi); 90 G4LogicalVolume * LogicalCryostat = 91 new G4LogicalVolume(SolidCryostat,FCALMaterials->Material("Iron"), 92 "CryostatLogical"); 93 94 // LogicalCryostat->SetVisAttributes(ColorOfIron); 95 LogicalCryostat->SetVisAttributes(G4VisAttributes::GetInvisible()); 96 97 98 //------------------------------ 99 // Insulation 100 //------------------------------ 101 G4Tubs * SolidInsulation = 102 new G4Tubs("InsulationSolid", InsulationRMin, InsulationRMax, 103 InsulationLenght, StartingPhi, DPhi); 104 G4LogicalVolume * LogicalInsulation = 105 new G4LogicalVolume(SolidInsulation, FCALMaterials->Material("Air"), 106 "InsulationLogical"); 107 // G4VPhysicalVolume * PhysicalInsulation = 108 new G4PVPlacement(0, G4ThreeVector(), LogicalInsulation, "InsulationPhysical", 109 LogicalCryostat, 0, 0); 110 111 LogicalInsulation->SetVisAttributes(ColorOfAir); 112 // LogicalInsulation->SetVisAttributes(G4VisAttributes::GetInvisible()); 113 114 115 //------------------------------------- 116 // Air to replace Iron inside Cryostat 117 //------------------------------------- 118 /* 119 G4Tubs * SolidAirCryostat = 120 new G4Tubs("AirCryostatSolid", CryostatRMin, LArgRMax, CryostatLength, 121 StartingPhi, DPhi); 122 G4LogicalVolume * LogicalAirCryostat = 123 new G4LogicalVolume(SolidAirCryostat, FCALMaterials->Material("Air"), 124 "AirCryostatLogical"); 125 G4VPhysicalVolume * PhysicalAirCryostat = 126 new G4PVPlacement(0, 0, LogicalAirCryostat, "AirCryostatPhysical", 127 LogicalCryostat, 0, 0); 128 129 LogicalAirCryostat->SetVisAttributes(ColorOfAir); 130 // LogicalAirCryostat->SetVisAttributes(G4VisAttributes::GetInvisible()); 131 */ 132 133 134 //-------------------- 135 // Liquid Argon 136 //-------------------- 137 G4Tubs * SolidLArg = 138 new G4Tubs("LArgSolid", LArgRMin, LArgRMax, LArgLenght,StartingPhi,DPhi); 139 G4LogicalVolume * LogicalLArg = 140 new G4LogicalVolume(SolidLArg, FCALMaterials->Material("LiquidArgon"), 141 "LArgLogical"); 142 G4VPhysicalVolume * PhysicalLArg = 143 new G4PVPlacement(0,G4ThreeVector(LArgPosX, LArgPosY, LArgPosZ), 144 LogicalLArg, "LArgPhysical", LogicalCryostat, 0,0); 145 146 // LogicalLArg->SetVisAttributes(ColorOfLarg); 147 LogicalLArg->SetVisAttributes(G4VisAttributes::GetInvisible()); 148 149 //------------------- 150 // Front Excluder 151 //------------------- 152 G4Box * SolidFrontExcluder = 153 new G4Box("FrontExcluderSolid", FrontExcluderSizeX, FrontExcluderSizeY, 154 FrontExcluderSizeZ); 155 G4LogicalVolume * LogicalFrontExcluder = 156 new G4LogicalVolume(SolidFrontExcluder, FCALMaterials->Material("Air") 157 , "FrontExcluderLogical"); 158 159 // G4VPhysicalVolume * PhysicalFrontExcluder = 160 new G4PVPlacement(0,G4ThreeVector(FrontExcluderPosX, FrontExcluderPosY, 161 FrontExcluderPosZ), "FrontExcluderPhysical", 162 LogicalFrontExcluder, PhysicalLArg, 0,0); 163 164 LogicalFrontExcluder->SetVisAttributes(ColorOfLead); 165 // LogicalFrontExcluder->SetVisAttributes(G4VisAttributes::GetInvisible()); 166 167 168 //-------------------- 169 // Back Excluder 170 //-------------------- 171 G4Trd * SolidBackExcluder = 172 new G4Trd("BackExcluderSolid", BackExcluderSize1X, BackExcluderSize2X, 173 BackExcluderSize1Y, BackExcluderSize2Y, BackExcluderSizeZ); 174 G4LogicalVolume * LogicalBackExcluder = 175 new G4LogicalVolume(SolidBackExcluder, FCALMaterials->Material("Air"), 176 "BackExcluderLogical"); 177 178 G4RotationMatrix * BackExcluderRotationMatrix = new G4RotationMatrix(); 179 BackExcluderRotationMatrix->rotateX(BackExcluderRotX); 180 181 // G4VPhysicalVolume * PhysicalBackExcluder = 182 new G4PVPlacement(BackExcluderRotationMatrix, 183 G4ThreeVector(BackExcluderPosX, BackExcluderPosY, 184 BackExcluderPosZ), "BackExcluder", LogicalBackExcluder, 185 PhysicalLArg, 0,0); 186 187 LogicalBackExcluder->SetVisAttributes(ColorOfLead); 188 // LogicalBackExcluder->SetVisAttributes(G4VisAttributes::GetInvisible()); 189 190 191 //------------------------ 192 // fcal envelope 193 //------------------------ 194 G4Tubs * SolidFCALEnvelope = 195 new G4Tubs("FCALEnvelopeSolid", FCALEnvelopeRMin, FCALEnvelopeRMax, 196 FCALEnvelopeLenght, FCALEnvelopeStartPhi, FCALEnvelopeDPhi); 197 198 G4LogicalVolume * LogicalFCALEnvelope = 199 new G4LogicalVolume(SolidFCALEnvelope, FCALMaterials->Material("LiquidArgon"), 200 "FCALEnvelopeLogical"); 201 202 G4RotationMatrix * FCALRotationMatrix = new G4RotationMatrix(); 203 FCALRotationMatrix->rotateX(FCALEnvelopeRotX); 204 // FCALRotationMatrix->rotateY(FCALEnvelopeRotY); 205 206 // G4VPhysicalVolume * PhysicalFCALEnvelopp = 207 new G4PVPlacement(FCALRotationMatrix, 208 G4ThreeVector(FCALEnvelopePosX,FCALEnvelopePosY,FCALEnvelopePosZ) 209 , LogicalFCALEnvelope, "FCALEnvelopePhysical", LogicalLArg, 0,0); 210 211 //LogicalFCALEnvelope->SetVisAttributes(ColorOfIron); 212 LogicalFCALEnvelope->SetVisAttributes(G4VisAttributes::GetInvisible()); 213 214 //----------------------------- 215 // FCAL electromagnetic Module 216 //----------------------------- 217 EmModule = new FCALEMModule(); 218 G4LogicalVolume * LogicalFCALEmModule = EmModule->Construct(); 219 220 G4RotationMatrix * EmModuleRot = new G4RotationMatrix(); 221 EmModuleRot->rotateZ(ModuleRotZ); 222 223 // G4VPhysicalVolume * PhysicalFCALEmModule = 224 new G4PVPlacement(EmModuleRot, 225 G4ThreeVector(FCALEmModulePosX,FCALEmModulePosY,FCALEmModulePosZ), 226 LogicalFCALEmModule,"FCALEmModulePhysical",LogicalFCALEnvelope,0,0); 227 228 229 //----------------------------- 230 // hadronic fcal 231 //---------------------------- 232 HadModule = new FCALHadModule(); 233 G4LogicalVolume * LogicalFCALHadModule = HadModule->Construct(); 234 235 G4RotationMatrix * HadModuleRot = new G4RotationMatrix(); 236 HadModuleRot->rotateZ(ModuleRotZ); 237 238 // G4VPhysicalVolume * PhysicalFCALHadModule = 239 new G4PVPlacement(HadModuleRot, 240 G4ThreeVector(FCALHadModulePosX,FCALHadModulePosY,FCALHadModulePosZ), 241 LogicalFCALHadModule, "FCALHadModulePhysical",LogicalFCALEnvelope,0,0); 242 243 244 245 //------------------------- 246 // Returning the mother 247 //------------------------- 248 249 return LogicalCryostat; 250 251 } 252 253