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