ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
FCALCryostatVolumes.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file FCALCryostatVolumes.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 // 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 
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 
60 {
61 #include "FCALCryostatVolumesParameters.input"
62 }
63 
65 
67 {
68 
69  //-----------------------------
70  // construction of materials
71  //-----------------------------
72 
73  FCALMaterialConsultant * FCALMaterials =
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);
96 
97 
98  //------------------------------
99  // Insulation
100  //------------------------------
101  G4Tubs * SolidInsulation =
102  new G4Tubs("InsulationSolid", InsulationRMin, InsulationRMax,
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);
148 
149  //-------------------
150  // Front Excluder
151  //-------------------
152  G4Box * SolidFrontExcluder =
153  new G4Box("FrontExcluderSolid", FrontExcluderSizeX, FrontExcluderSizeY,
155  G4LogicalVolume * LogicalFrontExcluder =
156  new G4LogicalVolume(SolidFrontExcluder, FCALMaterials->Material("Air")
157  , "FrontExcluderLogical");
158 
159 // G4VPhysicalVolume * PhysicalFrontExcluder =
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,
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,
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,
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,
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,
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,
241  LogicalFCALHadModule, "FCALHadModulePhysical",LogicalFCALEnvelope,0,0);
242 
243 
244 
245  //-------------------------
246  // Returning the mother
247  //-------------------------
248 
249  return LogicalCryostat;
250 
251 }
252