BOSS 7.1.0
BESIII Offline Software System
Loading...
Searching...
No Matches
BesPip.cc
Go to the documentation of this file.
1//---------------------------------------------------------------------------//
2// BOOST --- BESIII Object_Oreiented Simulation Tool //
3//---------------------------------------------------------------------------//
4//Descpirtion: BES beam pipe
5//Author: Liuhm
6//Created: May 21, 2003
7//Comment:
8//---------------------------------------------------------------------------//
9//
10#include "BesPip.hh"
11
12#include "G4Tubs.hh"
13#include "G4LogicalVolume.hh"
14#include "G4VPhysicalVolume.hh"
15#include "G4UnionSolid.hh"
16#include "G4ThreeVector.hh"
17#include "G4Material.hh"
18#include "G4PVPlacement.hh"
19#include "globals.hh"
20#include "G4VisAttributes.hh"
21#include "G4Color.hh"
22#include "BesPipParameter.hh"
23#include "BesSubdetector.hh"
24#include "G4SystemOfUnits.hh"
25
26
28{
29 pipPar = new BesPipParameter();
30 pipPar->ReadData();
31 for(G4int i=0; i<3; i++)
32 {
33 goldLayer[i] = pipPar->getGoldLayer(i);
34 innerBe[i] = pipPar->getInnerBe(i);
35 oilLayer[i] = pipPar->getOilLayer(i);
36 outerBe[i] = pipPar->getOuterBe(i);
37 }
38
39 for(G4int i=0; i<5; i++)
40 {
41 innerBeSide[i] = pipPar->getInnerBeSide(i);
42 innerAl[i] = pipPar->getInnerAl(i);
43 AlRing[i] = pipPar->getAlRing(i);
44 outerAl[i] = pipPar->getOuterAl(i);
45 AgLayer[i] = pipPar->getAgLayer(i);
46 CuLayer[i] = pipPar->getCuLayer(i);
47 AlCover[i] = pipPar->getAlCover(i);
48 }
49
50 logicalPip = 0;
51 physicalPip = 0;
52
53 logicalgoldLayer = 0;
54 physicalgoldLayer = 0;
55
56 logicalinnerBe = 0;
57 physicalinnerBe = 0;
58
59 logicaloilLayer = 0;
60 physicaloilLayer = 0;
61
62 logicalouterBe = 0;
63 physicalouterBe = 0;
64
65 logicalinnerBeSide = 0;
66 physicalinnerBeSide = 0;
67
68 logicalinnerAl = 0;
69 physicalinnerAl = 0;
70
71 logicalAlRing = 0;
72 physicalAlRing = 0;
73
74 logicalouterAl = 0;
75 physicalouterAl = 0;
76
77 logicalAgLayer = 0;
78 physicalAgLayer = 0;
79
80 logicalCuLayer = 0;
81 physicalCuLayer = 0;
82
83 logicalAlCover = 0;
84 physicalAlCover = 0;
85
86 Au = 0;
87 Ag = 0;
88 Oil = 0;
89}
90
92{
93 G4double density, a, z,fractionmass;
94 G4int nel,natoms;
95 G4String name, symbol;
96
97 density=19.32*g/cm3;
98 a = 196.967*g/mole;
99 Au= new G4Material("Gold",79,a,density);
100
101 density=10.5*g/cm3;
102 a = 107.9*g/mole;
103 Ag= new G4Material("Silver",47,a,density);
104
105 a = 1.01*g/mole;
106 G4Element* H = new G4Element(name="Hydrogen",symbol="H" , z= 1., a);
107
108 a = 12.01*g/mole;
109 G4Element* C = new G4Element(name="Carbon" ,symbol="C" , z= 6., a);
110
111 density = 0.810*g/cm3;
112 Oil = new G4Material(name="Oil",density,nel=2);
113 Oil->AddElement(C, natoms=18);
114 Oil->AddElement(H, natoms=38);
115}
116
117void BesPip::Construct(G4LogicalVolume* logicalbes)
118{
120
121 //G4RotationMatrix* xRot = new G4RotationMatrix;
122 //xRot->rotateX(90*deg);
123
124 //the logical volume of beam pipe
125 G4Tubs* solidPip1 = new G4Tubs("solidPip1",0.,33.7,134,0,360);
126 G4Tubs* solidPip2 = new G4Tubs("solidPip2",0.,48,66,0,360);
127 G4UnionSolid* solidPip_tmp = new G4UnionSolid("solidPip_tmp",solidPip1,solidPip2,0,G4ThreeVector(0,0,-167));
128 G4UnionSolid* solidPip = new G4UnionSolid("solidPip",solidPip_tmp,solidPip2,0,G4ThreeVector(0,0,167));
129 logicalPip = new G4LogicalVolume(solidPip, G4Material::GetMaterial("Beam"),"logicalPip");
130 physicalPip = new G4PVPlacement(0,G4ThreeVector(0,0,0),logicalPip,"physicalPip",logicalbes,false,0);
131
132 //the volume of gold layer
133 G4Tubs* solidgoldLayer = new G4Tubs("solidgoldLayer",goldLayer[0],goldLayer[1],goldLayer[2]/2,0,360);
134 logicalgoldLayer = new G4LogicalVolume(solidgoldLayer, Au,"logicalgoldLayer");
135 physicalgoldLayer = new G4PVPlacement(0,G4ThreeVector(0,0,0),logicalgoldLayer,"physicalgoldLayer",logicalPip,false,0);
136
137 //the volume of inner Be pipe
138 G4Tubs* solidinnerBe = new G4Tubs("solidinnerBe",innerBe[0],innerBe[1],innerBe[2]/2,0,360);
139 logicalinnerBe = new G4LogicalVolume(solidinnerBe, G4Material::GetMaterial("Beryllium"),"logicalinnerBe");
140 physicalinnerBe = new G4PVPlacement(0,G4ThreeVector(0,0,0),logicalinnerBe,"physicalinnerBe",logicalPip,false,0);
141
142 //the volume of oil layer
143 G4Tubs* solidoilLayer = new G4Tubs("solidoilLayer",oilLayer[0],oilLayer[1],oilLayer[2]/2,0,360);
144 logicaloilLayer = new G4LogicalVolume(solidoilLayer, Oil,"logicaloilLayer");
145 physicaloilLayer = new G4PVPlacement(0,G4ThreeVector(0,0,0),logicaloilLayer,"physicaloilLayer",logicalPip,false,0);
146
147 //the volume of outer Be pipe
148 G4Tubs* solidouterBe = new G4Tubs("solidouterBe",outerBe[0],outerBe[1],outerBe[2]/2,0,360);
149 logicalouterBe = new G4LogicalVolume(solidouterBe, G4Material::GetMaterial("Beryllium"),"logicalouterBe");
150 physicalouterBe = new G4PVPlacement(0,G4ThreeVector(0,0,0),logicalouterBe,"physicalouterBe",logicalPip,false,0);
151
152 //the volume of inner side Be layer
153 G4Tubs* solidinnerBeSide = new G4Tubs("solidinnerBeSide",innerBeSide[0],innerBeSide[1],innerBeSide[2]/2,0,360);
154 logicalinnerBeSide = new G4LogicalVolume(solidinnerBeSide, G4Material::GetMaterial("Beryllium"),"logicalinnerBeSide");
155 physicalinnerBeSide = new G4PVPlacement(0,G4ThreeVector(0,0,innerBeSide[3]),logicalinnerBeSide,"physicalinnerBeSide1",logicalPip,false,0);
156 new G4PVPlacement(0,G4ThreeVector(0,0,innerBeSide[4]),logicalinnerBeSide,"physicalinnerBeSide2",logicalPip,false,1);
157
158 //the volume of inner Al layer
159 G4Tubs* solidinnerAl = new G4Tubs("solidinnerAl",innerAl[0],innerAl[1],innerAl[2]/2,0,360);
160 logicalinnerAl = new G4LogicalVolume(solidinnerAl, G4Material::GetMaterial("Aluminium"),"logicalinnerAl");
161 physicalinnerAl = new G4PVPlacement(0,G4ThreeVector(0,0,innerAl[3]),logicalinnerAl,"physicalinnerAl1",logicalPip,false,0);
162 new G4PVPlacement(0,G4ThreeVector(0,0,innerAl[4]),logicalinnerAl,"physicalinnerAl2",logicalPip,false,1);
163
164 //the volume of Al ring
165 G4Tubs* solidAlRing = new G4Tubs("solidAlRing",AlRing[0],AlRing[1],AlRing[2]/2,0,360);
166 logicalAlRing = new G4LogicalVolume(solidAlRing, G4Material::GetMaterial("Aluminium"),"logicalAlRing");
167 physicalAlRing = new G4PVPlacement(0,G4ThreeVector(0,0,AlRing[3]),logicalAlRing,"physicalAlRing1",logicalPip,false,0);
168 new G4PVPlacement(0,G4ThreeVector(0,0,AlRing[4]),logicalAlRing,"physicalAlRing2",logicalPip,false,1);
169
170 //the volume of outer Al layer
171 G4Tubs* solidouterAl = new G4Tubs("solidouterAl",outerAl[0],outerAl[1],outerAl[2]/2,0,360);
172 logicalouterAl = new G4LogicalVolume(solidouterAl, G4Material::GetMaterial("Aluminium"),"logicalouterAl");
173 physicalouterAl = new G4PVPlacement(0,G4ThreeVector(0,0,outerAl[3]),logicalouterAl,"physicalouterAl1",logicalPip,false,0);
174 new G4PVPlacement(0,G4ThreeVector(0,0,outerAl[4]),logicalouterAl,"physicalouterAl2",logicalPip,false,1);
175
176 //the volume of Ag layer
177 G4Tubs* solidAgLayer = new G4Tubs("solidAgLayer",AgLayer[0],AgLayer[1],AgLayer[2]/2,0,360);
178 logicalAgLayer = new G4LogicalVolume(solidAgLayer, Ag,"logicalAgLayer");
179 physicalAgLayer = new G4PVPlacement(0,G4ThreeVector(0,0,AgLayer[3]),logicalAgLayer,"physicalAgLayer1",logicalPip,false,0);
180 new G4PVPlacement(0,G4ThreeVector(0,0,AgLayer[4]),logicalAgLayer,"physicalAgLayer2",logicalPip,false,1);
181
182 //the volume of Cu layer
183 G4Tubs* solidCuLayer = new G4Tubs("solidCuLayer",CuLayer[0],CuLayer[1],CuLayer[2]/2,0,360);
184 logicalCuLayer = new G4LogicalVolume(solidCuLayer, G4Material::GetMaterial("Copper"),"logicalCuLayer");
185 physicalCuLayer = new G4PVPlacement(0,G4ThreeVector(0,0,CuLayer[3]),logicalCuLayer,"physicalCuLayer1",logicalPip,false,0);
186 new G4PVPlacement(0,G4ThreeVector(0,0,CuLayer[4]),logicalCuLayer,"physicalCuLayer2",logicalPip,false,1);
187
188 //the volume of Al cover
189 G4Tubs* solidAlCover = new G4Tubs("solidAlCover",AlCover[0],AlCover[1],AlCover[2]/2,0,360);
190 logicalAlCover = new G4LogicalVolume(solidAlCover, G4Material::GetMaterial("Aluminium"),"logicalAlCover");
191 physicalAlCover = new G4PVPlacement(0,G4ThreeVector(0,0,AlCover[3]),logicalAlCover,"physicalAlCover1",logicalPip,false,0);
192 new G4PVPlacement(0,G4ThreeVector(0,0,AlCover[4]),logicalAlCover,"physicalAlCover2",logicalPip,false,1);
193
194 G4VisAttributes* visPip = new G4VisAttributes(G4Colour(0.,0.,1.));
195 logicalPip->SetVisAttributes(visPip);
196 //logicalPip->SetVisAttributes(G4VisAttributes::Invisible);
197 G4VisAttributes* visgold = new G4VisAttributes(G4Colour(1.,1.,0.));
198 logicalgoldLayer->SetVisAttributes(visgold);
199// logicalgoldLayer->SetVisAttributes(G4VisAttributes::Invisible);
200 G4VisAttributes* visBe = new G4VisAttributes(G4Colour(0.,1.,0.));
201 logicalinnerBe->SetVisAttributes(visBe);
202// logicalinnerBe->SetVisAttributes(G4VisAttributes::Invisible);
203 G4VisAttributes* visOil = new G4VisAttributes(G4Colour(1.,1.,1.));
204 logicaloilLayer->SetVisAttributes(visOil);
205// logicaloilLayer->SetVisAttributes(G4VisAttributes::Invisible);
206 logicalouterBe->SetVisAttributes(visBe);
207// logicalouterBe->SetVisAttributes(G4VisAttributes::Invisible);
208 logicalinnerBeSide->SetVisAttributes(visBe);
209// logicalinnerBeSide->SetVisAttributes(G4VisAttributes::Invisible);
210 logicalinnerAl->SetVisAttributes(visOil);
211// logicalinnerAl->SetVisAttributes(G4VisAttributes::Invisible);
212 logicalAlRing->SetVisAttributes(visOil);
213// logicalAlRing->SetVisAttributes(G4VisAttributes::Invisible);
214 logicalouterAl->SetVisAttributes(visOil);
215// logicalouterAl->SetVisAttributes(G4VisAttributes::Invisible);
216 logicalAgLayer->SetVisAttributes(visBe);
217// logicalAgLayer->SetVisAttributes(G4VisAttributes::Invisible);
218 logicalCuLayer->SetVisAttributes(visPip);
219// logicalCuLayer->SetVisAttributes(G4VisAttributes::Invisible);
220 logicalAlCover->SetVisAttributes(visOil);
221// logicalAlCover->SetVisAttributes(G4VisAttributes::Invisible);
222}
***************************************************************************************Pseudo Class RRes *****************************************************************************************Parameters and physical constants **Maarten sept ************************************************************************DOUBLE PRECISION xsmu **************************************************************************PARTICLE DATA all others are from PDG *Only resonances with known widths into electron pairs are sept ************************************************************************C Declarations C
Definition: RRes.h:29
G4double getOilLayer(G4int i)
G4double getInnerBe(G4int i)
G4double getInnerAl(G4int i)
G4double getOuterBe(G4int i)
G4double getAlRing(G4int i)
G4double getAlCover(G4int i)
G4double getAgLayer(G4int i)
G4double getInnerBeSide(G4int i)
G4double getOuterAl(G4int i)
G4double getCuLayer(G4int i)
G4double getGoldLayer(G4int i)
BesPip()
Definition: BesPip.cc:27
void DefineMaterial()
Definition: BesPip.cc:91
void Construct(G4LogicalVolume *logicbes)
Definition: BesPip.cc:117
IMPLICIT REAL *A H
Definition: myXsection.h:1