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