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: Rachid Mazini 27 // Rachid.Mazini@cern.ch 28 // Language: C++ 29 // Tested on : g++ (egcs.2.1.1, RH6.1) 30 // Prerequisites: None 31 // Purpose: Source file defining the geometry of EMModule 0 of the 32 // FCAL. 33 // Developped: 10-March-2000 R.M. 34 // 35 // 36 //----------------------------------------------------------------------------- 37 38 #include <fstream> 39 #include <cstdlib> 40 41 #include "FCALEMModule.hh" 42 43 #include "FCALMaterialConsultant.hh" 44 45 #include "G4SDManager.hh" 46 #include "FCALEMModuleSD.hh" 47 48 #include "G4PhysicalConstants.hh" 49 #include "G4SystemOfUnits.hh" 50 #include "G4Box.hh" 51 #include "G4Tubs.hh" 52 #include "G4LogicalVolume.hh" 53 #include "G4VPhysicalVolume.hh" 54 #include "G4PVPlacement.hh" 55 #include "G4SubtractionSolid.hh" 56 57 #include "G4ThreeVector.hh" 58 #include "G4VisAttributes.hh" 59 #include "G4Colour.hh" 60 61 FCALEMModule::FCALEMModule() : 62 FcalEmModuleSD(0) 63 { 64 F1LArGapID = new G4int[2400]; 65 F1LArIX = new G4int[2400]; 66 F1LArJY = new G4int[2400]; 67 F1LArITile = new G4int[2400]; 68 F1LArGapPosX = new G4double[2400]; 69 F1LArGapPosY = new G4double[2400]; 70 } 71 72 73 FCALEMModule::~FCALEMModule(){ 74 delete [] F1LArGapID; 75 delete [] F1LArGapPosX; 76 delete [] F1LArGapPosY; 77 delete [] F1LArIX; 78 delete [] F1LArJY; 79 delete [] F1LArITile; 80 } 81 82 83 void FCALEMModule::InitializeGeometry() { 84 #include "FCALEMModuleParameters.input" 85 std::ifstream File 86 ("geom_data/FCal1Electrodes.dat"); 87 88 if(!File) G4cerr << "Failed to open file FCal1Electrodes data file " << G4endl; 89 File.seekg(0); 90 91 NF1LarGap = 0; 92 while(!(File.eof())) { 93 NF1LarGap++; 94 File >> F1LArGapID[NF1LarGap] >> F1LArGapPosX[NF1LarGap] >> F1LArGapPosY[NF1LarGap] 95 >> F1LArIX[NF1LarGap] >> F1LArJY[NF1LarGap] >> F1LArITile[NF1LarGap]; 96 }; 97 G4cout << "********" << " Number of Rods in FCAL1 : " << NF1LarGap-1 << G4endl;; 98 } 99 100 101 102 G4LogicalVolume * FCALEMModule::Construct() 103 { 104 //----------------------------- 105 // construction of materials 106 //----------------------------- 107 FCALMaterialConsultant *FCALMaterials = 108 FCALMaterialConsultant::GetInstance(); 109 110 G4VisAttributes * ColorOfEMModule = new G4VisAttributes(G4Colour(1.,0.,0.5)); 111 // G4VisAttributes * ColorOfLArg = new G4VisAttributes(G4Colour(0.,0.,1.)); 112 113 //---------------------------- 114 // Read Parameters 115 //---------------------------- 116 InitializeGeometry(); 117 118 //----------------------------------------- 119 // Logical to be returned (FCAL EM module) 120 //----------------------------------------- 121 G4Tubs * SolidEmModule = 122 new G4Tubs("EmModuleSold", EmModuleRMin, EmModuleRMax, EmModuleLenght, 123 EmModuleStartPhi,EmModuleDPhi); 124 G4LogicalVolume * LogicalEmModule = 125 new G4LogicalVolume(SolidEmModule, FCALMaterials->Material("Copper"), 126 "EmModuleLogical"); 127 128 LogicalEmModule->SetSmartless(FCALEmSmart); 129 130 LogicalEmModule->SetVisAttributes(ColorOfEMModule); 131 // LogicalEmModule->SetVisAttributes(G4VisAttributes::GetInvisible()); 132 133 134 //--------------------- 135 // FCAL Cable Troff 136 //--------------------- 137 G4Tubs * SolidF1CableTroff = 138 new G4Tubs("F1CableTroffSolid", F1CableTroffRMin, F1CableTroffRMax, 139 F1CableTroffLenght, F1CableTroffStartPhi, F1CableTroffDPhi); 140 G4LogicalVolume * LogicalF1CableTroff = 141 new G4LogicalVolume(SolidF1CableTroff, FCALMaterials->Material("FCAL1CuArKap"), 142 "F1CableTroffLogical"); 143 144 G4ThreeVector F1CableTroffTrans(0.,0.,0.); 145 G4RotationMatrix F1CableTroffRot; 146 147 G4int i=0; 148 for(i=0 ; i < NCableTroff ; i++) 149 { 150 // G4VPhysicalVolume * PhysicalF1CableTroff = 151 new G4PVPlacement(G4Transform3D(F1CableTroffRot,F1CableTroffTrans), 152 LogicalF1CableTroff,"F1CableTroffPhysical", 153 LogicalEmModule,0,i+1); 154 155 F1CableTroffRot.rotateZ(F1CableTroffRotZ); 156 } 157 158 LogicalF1CableTroff->SetVisAttributes(ColorOfEMModule); 159 // LogicalF1CableTroff->SetVisAttributes(G4VisAttributes::GetInvisible()); 160 161 162 //---------------------- 163 // LArg gaps 164 //---------------------- 165 166 G4Tubs * SolidF1LArGap = 167 new G4Tubs("F1LArGapSolid",F1LArGapRmin, F1LArGapRmax, F1LArGapLenght, 168 F1LArGapStartPhi,F1LArGapDPhi); 169 170 G4LogicalVolume * LogicalF1LArGap = 171 new G4LogicalVolume(SolidF1LArGap, FCALMaterials->Material("LiquidArgon"), 172 "LArg Gap"); 173 174 for(i=1; i < NF1LarGap; i++){ 175 // G4VPhysicalVolume * PhysicalF1LArGap = 176 new G4PVPlacement(0,G4ThreeVector(F1LArGapPosX[i]*cm,F1LArGapPosY[i]*cm,0.*cm), 177 LogicalF1LArGap,"F1LArGapPhysical", LogicalEmModule, 0, i); 178 }; 179 180 // LogicalF1LArGap->SetVisAttributes(ColorOfLArg); 181 LogicalF1LArGap->SetVisAttributes(G4VisAttributes::GetInvisible()); 182 183 184 // Sensitive Volumes 185 G4SDManager* SDman = G4SDManager::GetSDMpointer(); 186 187 if(!FcalEmModuleSD) 188 { 189 FcalEmModuleSD = new FCALEMModuleSD("FCALTB/EmModuleSD"); 190 SDman->AddNewDetector(FcalEmModuleSD); 191 } 192 LogicalF1LArGap->SetSensitiveDetector(FcalEmModuleSD); 193 194 195 196 return LogicalEmModule; 197 198 } 199 200 201 G4int FCALEMModule::GetF1TileID(G4int GapID) 202 { return F1LArITile[GapID]; } 203 204 G4double FCALEMModule::GetF1LArGapPosX(G4int GapID) 205 { return F1LArGapPosX[GapID]; } 206 207 208