ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DetectorWatase86.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file DetectorWatase86.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 //
28 //
29 //
30 //
31 //
32 
33 #include "DetectorWatase86.hh"
34 #include "SensitiveDetector.hh"
35 #include "Materials.hh"
36 
37 #include "G4Material.hh"
38 #include "G4Box.hh"
39 #include "G4LogicalVolume.hh"
40 #include "G4PVPlacement.hh"
41 #include "G4UniformMagField.hh"
42 #include "G4FieldManager.hh"
44 #include "G4SDManager.hh"
45 
46 #include "G4Region.hh"
47 
48 #include "G4UnitsTable.hh"
49 #include "G4SystemOfUnits.hh"
50 #include "G4ios.hh"
51 
52 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
53 
55  : fRadiatorDescription(0)
56 {}
57 
58 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
59 
61 {
62  // delete fRadiatorDescription;
63  // the description is deleted in detector construction
64 }
65 
66 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
67 
69 {
70  // Geometry parameters
71  //
72 
73  G4cout << "DetectorWatase86 setup" << G4endl;
74 
75  G4double worldSizeZ = 400.*cm;
76  G4double worldSizeR = 20.*cm;
77 
78  // Radiator and detector parameters
79 
80  G4double radThickness = 0.04*mm;
81  G4double gasGap = 0.126*mm;
82  G4double foilGasRatio = radThickness/(radThickness+gasGap);
83  G4double foilNumber = 300;
84 
85  G4double absorberThickness = 30.0*mm;
86  G4double absorberRadius = 100.*mm;
87 
88  G4double windowThick = 51.0*micrometer;
89  G4double electrodeThick = 10.0*micrometer;
90  G4double gapThick = 10.0*cm;
91  G4double detGap = 0.01*mm;
92 
93  G4double startZ = 100.0*mm;
94 
95  // Materials
96  //
97 
98  // Change to create materials using NIST
101  G4Material* xe10CH4 = Materials::GetInstance()->GetMaterial("Xe10CH4");
102 
103  G4double foilDensity = li->GetDensity();
104  G4double gasDensity = he->GetDensity();
105  G4double totDensity = foilDensity*foilGasRatio
106  + gasDensity*(1.0-foilGasRatio);
107 
108  G4double fractionFoil = foilDensity*foilGasRatio/totDensity;
109  G4double fractionGas = gasDensity*(1.0-foilGasRatio)/totDensity;
110  G4Material* radiatorMat = new G4Material("radiatorMat", totDensity, 2);
111  radiatorMat->AddMaterial(li, fractionFoil);
112  radiatorMat->AddMaterial(he, fractionGas);
113 
114  // Radiator description
116  fRadiatorDescription->fFoilMaterial = li; // CH2; // Kapton; // Mylar ; // Li ; // CH2 ;
117  fRadiatorDescription->fGasMaterial = he; // CO2; // He; //
118  fRadiatorDescription->fFoilThickness = radThickness;
120  fRadiatorDescription->fFoilNumber = foilNumber;
121 
122  G4Material* worldMaterial = he; // CO2;
123  G4Material* absorberMaterial = xe10CH4;
124 
125  // Volumes
126  //
127 
128  G4VSolid* solidWorld
129  = new G4Box("World", worldSizeR, worldSizeR, worldSizeZ/2.);
130 
131  G4LogicalVolume* logicWorld
132  = new G4LogicalVolume(solidWorld, worldMaterial, "World");
133 
134  G4VPhysicalVolume* physicsWorld
135  = new G4PVPlacement(0, G4ThreeVector(), "World", logicWorld, 0, false, 0);
136 
137  // TR radiator envelope
138 
139  G4double radThick = foilNumber*(radThickness + gasGap) - gasGap + detGap;
140  G4double radZ = startZ + 0.5*radThick;
141 
142  G4VSolid* solidRadiator
143  = new G4Box("Radiator", 1.1*absorberRadius, 1.1*absorberRadius, 0.5*radThick);
144 
145  G4LogicalVolume* logicRadiator
146  = new G4LogicalVolume(solidRadiator, radiatorMat, "Radiator");
147 
148  new G4PVPlacement(0, G4ThreeVector(0, 0, radZ),
149  "Radiator", logicRadiator, physicsWorld, false, 0 );
150 
151  fRadiatorDescription->fLogicalVolume = logicRadiator;
152 
153  // create region for radiator
154 
155  G4Region* radRegion = new G4Region("XTRradiator");
156  radRegion->AddRootLogicalVolume(logicRadiator);
157 
158  G4double windowZ = startZ + radThick + windowThick/2. + 15.0*mm;
159 
160  G4double gapZ = windowZ + windowThick/2. + gapThick/2. + 0.01*mm;
161 
162  G4double electrodeZ = gapZ + gapThick/2. + electrodeThick/2. + 0.01*mm;
163 
164  // Absorber
165 
166  G4double absorberZ = electrodeZ + electrodeThick/2.
167  + absorberThickness/2. + 0.01*mm;
168 
169  G4VSolid* solidAbsorber
170  = new G4Box("Absorber", absorberRadius, absorberRadius, absorberThickness/2.);
171 
172  G4LogicalVolume* logicAbsorber
173  = new G4LogicalVolume(solidAbsorber, absorberMaterial, "Absorber");
174 
175  new G4PVPlacement(0, G4ThreeVector(0., 0., absorberZ),
176  "Absorber", logicAbsorber, physicsWorld, false, 0);
177 
178  G4Region* regGasDet = new G4Region("XTRdEdxDetector");
179  regGasDet->AddRootLogicalVolume(logicAbsorber);
180 
181  // Sensitive Detectors: Absorber
182 
183  SensitiveDetector* sd = new SensitiveDetector("AbsorberSD");
185  logicAbsorber->SetSensitiveDetector(sd);
186 
187  // Print geometry parameters
188 
189  G4cout << "\n The WORLD is made of "
190  << worldSizeZ/mm << "mm of " << worldMaterial->GetName();
191  G4cout << ", the transverse size (R) of the world is "
192  << worldSizeR/mm << " mm. " << G4endl;
193  G4cout << " The ABSORBER is made of "
194  << absorberThickness/mm << "mm of " << absorberMaterial->GetName();
195  G4cout << ", the transverse size (R) is "
196  << absorberRadius/mm << " mm. " << G4endl;
197  G4cout << " Z position of the (middle of the) absorber "
198  << absorberZ/mm << " mm." << G4endl;
199 
200  G4cout << "radZ = " << radZ/mm << " mm" << G4endl;
201  G4cout << "startZ = " << startZ/mm<< " mm" << G4endl;
202 
203  G4cout << "fRadThick = " << radThick/mm << " mm"<<G4endl;
204  G4cout << "fFoilNumber = " << foilNumber << G4endl;
205  G4cout << "fRadiatorMat = " << radiatorMat->GetName() << G4endl;
206  G4cout << "WorldMaterial = " << worldMaterial->GetName() << G4endl;
207  G4cout << G4endl;
208 
209  return physicsWorld;
210 }
211 
212 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
213