00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include "BesPip.hh"
00011
00012 #include "G4Tubs.hh"
00013 #include "G4LogicalVolume.hh"
00014 #include "G4VPhysicalVolume.hh"
00015 #include "G4UnionSolid.hh"
00016 #include "G4ThreeVector.hh"
00017 #include "G4Material.hh"
00018 #include "G4PVPlacement.hh"
00019 #include "globals.hh"
00020 #include "G4VisAttributes.hh"
00021 #include "G4Color.hh"
00022 #include "BesPipParameter.hh"
00023 #include "BesSubdetector.hh"
00024
00025 BesPip::BesPip()
00026 {
00027 pipPar = new BesPipParameter();
00028 pipPar->ReadData();
00029 for(G4int i=0; i<3; i++)
00030 {
00031 goldLayer[i] = pipPar->getGoldLayer(i);
00032 innerBe[i] = pipPar->getInnerBe(i);
00033 oilLayer[i] = pipPar->getOilLayer(i);
00034 outerBe[i] = pipPar->getOuterBe(i);
00035 }
00036
00037 for(G4int i=0; i<5; i++)
00038 {
00039 innerBeSide[i] = pipPar->getInnerBeSide(i);
00040 innerAl[i] = pipPar->getInnerAl(i);
00041 AlRing[i] = pipPar->getAlRing(i);
00042 outerAl[i] = pipPar->getOuterAl(i);
00043 AgLayer[i] = pipPar->getAgLayer(i);
00044 CuLayer[i] = pipPar->getCuLayer(i);
00045 AlCover[i] = pipPar->getAlCover(i);
00046 }
00047
00048 logicalPip = 0;
00049 physicalPip = 0;
00050
00051 logicalgoldLayer = 0;
00052 physicalgoldLayer = 0;
00053
00054 logicalinnerBe = 0;
00055 physicalinnerBe = 0;
00056
00057 logicaloilLayer = 0;
00058 physicaloilLayer = 0;
00059
00060 logicalouterBe = 0;
00061 physicalouterBe = 0;
00062
00063 logicalinnerBeSide = 0;
00064 physicalinnerBeSide = 0;
00065
00066 logicalinnerAl = 0;
00067 physicalinnerAl = 0;
00068
00069 logicalAlRing = 0;
00070 physicalAlRing = 0;
00071
00072 logicalouterAl = 0;
00073 physicalouterAl = 0;
00074
00075 logicalAgLayer = 0;
00076 physicalAgLayer = 0;
00077
00078 logicalCuLayer = 0;
00079 physicalCuLayer = 0;
00080
00081 logicalAlCover = 0;
00082 physicalAlCover = 0;
00083
00084 Au = 0;
00085 Ag = 0;
00086 Oil = 0;
00087 }
00088
00089 void BesPip::DefineMaterial()
00090 {
00091 G4double density, a, z,fractionmass;
00092 G4int nel,natoms;
00093 G4String name, symbol;
00094
00095 density=19.32*g/cm3;
00096 a = 196.967*g/mole;
00097 Au= new G4Material("Gold",79,a,density);
00098
00099 density=10.5*g/cm3;
00100 a = 107.9*g/mole;
00101 Ag= new G4Material("Silver",47,a,density);
00102
00103 a = 1.01*g/mole;
00104 G4Element* H = new G4Element(name="Hydrogen",symbol="H" , z= 1., a);
00105
00106 a = 12.01*g/mole;
00107 G4Element* C = new G4Element(name="Carbon" ,symbol="C" , z= 6., a);
00108
00109 density = 0.810*g/cm3;
00110 Oil = new G4Material(name="Oil",density,nel=2);
00111 Oil->AddElement(C, natoms=18);
00112 Oil->AddElement(H, natoms=38);
00113 }
00114
00115 void BesPip::Construct(G4LogicalVolume* logicalbes)
00116 {
00117 DefineMaterial();
00118
00119
00120
00121
00122
00123 G4Tubs* solidPip1 = new G4Tubs("solidPip1",0.,33.7,134,0,360);
00124 G4Tubs* solidPip2 = new G4Tubs("solidPip2",0.,48,66,0,360);
00125 G4UnionSolid* solidPip_tmp = new G4UnionSolid("solidPip_tmp",solidPip1,solidPip2,0,G4ThreeVector(0,0,-167));
00126 G4UnionSolid* solidPip = new G4UnionSolid("solidPip",solidPip_tmp,solidPip2,0,G4ThreeVector(0,0,167));
00127 logicalPip = new G4LogicalVolume(solidPip, G4Material::GetMaterial("Beam"),"logicalPip");
00128 physicalPip = new G4PVPlacement(0,G4ThreeVector(0,0,0),logicalPip,"physicalPip",logicalbes,false,0);
00129
00130
00131 G4Tubs* solidgoldLayer = new G4Tubs("solidgoldLayer",goldLayer[0],goldLayer[1],goldLayer[2]/2,0,360);
00132 logicalgoldLayer = new G4LogicalVolume(solidgoldLayer, Au,"logicalgoldLayer");
00133 physicalgoldLayer = new G4PVPlacement(0,G4ThreeVector(0,0,0),logicalgoldLayer,"physicalgoldLayer",logicalPip,false,0);
00134
00135
00136 G4Tubs* solidinnerBe = new G4Tubs("solidinnerBe",innerBe[0],innerBe[1],innerBe[2]/2,0,360);
00137 logicalinnerBe = new G4LogicalVolume(solidinnerBe, G4Material::GetMaterial("Beryllium"),"logicalinnerBe");
00138 physicalinnerBe = new G4PVPlacement(0,G4ThreeVector(0,0,0),logicalinnerBe,"physicalinnerBe",logicalPip,false,0);
00139
00140
00141 G4Tubs* solidoilLayer = new G4Tubs("solidoilLayer",oilLayer[0],oilLayer[1],oilLayer[2]/2,0,360);
00142 logicaloilLayer = new G4LogicalVolume(solidoilLayer, Oil,"logicaloilLayer");
00143 physicaloilLayer = new G4PVPlacement(0,G4ThreeVector(0,0,0),logicaloilLayer,"physicaloilLayer",logicalPip,false,0);
00144
00145
00146 G4Tubs* solidouterBe = new G4Tubs("solidouterBe",outerBe[0],outerBe[1],outerBe[2]/2,0,360);
00147 logicalouterBe = new G4LogicalVolume(solidouterBe, G4Material::GetMaterial("Beryllium"),"logicalouterBe");
00148 physicalouterBe = new G4PVPlacement(0,G4ThreeVector(0,0,0),logicalouterBe,"physicalouterBe",logicalPip,false,0);
00149
00150
00151 G4Tubs* solidinnerBeSide = new G4Tubs("solidinnerBeSide",innerBeSide[0],innerBeSide[1],innerBeSide[2]/2,0,360);
00152 logicalinnerBeSide = new G4LogicalVolume(solidinnerBeSide, G4Material::GetMaterial("Beryllium"),"logicalinnerBeSide");
00153 physicalinnerBeSide = new G4PVPlacement(0,G4ThreeVector(0,0,innerBeSide[3]),logicalinnerBeSide,"physicalinnerBeSide1",logicalPip,false,0);
00154 new G4PVPlacement(0,G4ThreeVector(0,0,innerBeSide[4]),logicalinnerBeSide,"physicalinnerBeSide2",logicalPip,false,1);
00155
00156
00157 G4Tubs* solidinnerAl = new G4Tubs("solidinnerAl",innerAl[0],innerAl[1],innerAl[2]/2,0,360);
00158 logicalinnerAl = new G4LogicalVolume(solidinnerAl, G4Material::GetMaterial("Aluminium"),"logicalinnerAl");
00159 physicalinnerAl = new G4PVPlacement(0,G4ThreeVector(0,0,innerAl[3]),logicalinnerAl,"physicalinnerAl1",logicalPip,false,0);
00160 new G4PVPlacement(0,G4ThreeVector(0,0,innerAl[4]),logicalinnerAl,"physicalinnerAl2",logicalPip,false,1);
00161
00162
00163 G4Tubs* solidAlRing = new G4Tubs("solidAlRing",AlRing[0],AlRing[1],AlRing[2]/2,0,360);
00164 logicalAlRing = new G4LogicalVolume(solidAlRing, G4Material::GetMaterial("Aluminium"),"logicalAlRing");
00165 physicalAlRing = new G4PVPlacement(0,G4ThreeVector(0,0,AlRing[3]),logicalAlRing,"physicalAlRing1",logicalPip,false,0);
00166 new G4PVPlacement(0,G4ThreeVector(0,0,AlRing[4]),logicalAlRing,"physicalAlRing2",logicalPip,false,1);
00167
00168
00169 G4Tubs* solidouterAl = new G4Tubs("solidouterAl",outerAl[0],outerAl[1],outerAl[2]/2,0,360);
00170 logicalouterAl = new G4LogicalVolume(solidouterAl, G4Material::GetMaterial("Aluminium"),"logicalouterAl");
00171 physicalouterAl = new G4PVPlacement(0,G4ThreeVector(0,0,outerAl[3]),logicalouterAl,"physicalouterAl1",logicalPip,false,0);
00172 new G4PVPlacement(0,G4ThreeVector(0,0,outerAl[4]),logicalouterAl,"physicalouterAl2",logicalPip,false,1);
00173
00174
00175 G4Tubs* solidAgLayer = new G4Tubs("solidAgLayer",AgLayer[0],AgLayer[1],AgLayer[2]/2,0,360);
00176 logicalAgLayer = new G4LogicalVolume(solidAgLayer, Ag,"logicalAgLayer");
00177 physicalAgLayer = new G4PVPlacement(0,G4ThreeVector(0,0,AgLayer[3]),logicalAgLayer,"physicalAgLayer1",logicalPip,false,0);
00178 new G4PVPlacement(0,G4ThreeVector(0,0,AgLayer[4]),logicalAgLayer,"physicalAgLayer2",logicalPip,false,1);
00179
00180
00181 G4Tubs* solidCuLayer = new G4Tubs("solidCuLayer",CuLayer[0],CuLayer[1],CuLayer[2]/2,0,360);
00182 logicalCuLayer = new G4LogicalVolume(solidCuLayer, G4Material::GetMaterial("Copper"),"logicalCuLayer");
00183 physicalCuLayer = new G4PVPlacement(0,G4ThreeVector(0,0,CuLayer[3]),logicalCuLayer,"physicalCuLayer1",logicalPip,false,0);
00184 new G4PVPlacement(0,G4ThreeVector(0,0,CuLayer[4]),logicalCuLayer,"physicalCuLayer2",logicalPip,false,1);
00185
00186
00187 G4Tubs* solidAlCover = new G4Tubs("solidAlCover",AlCover[0],AlCover[1],AlCover[2]/2,0,360);
00188 logicalAlCover = new G4LogicalVolume(solidAlCover, G4Material::GetMaterial("Aluminium"),"logicalAlCover");
00189 physicalAlCover = new G4PVPlacement(0,G4ThreeVector(0,0,AlCover[3]),logicalAlCover,"physicalAlCover1",logicalPip,false,0);
00190 new G4PVPlacement(0,G4ThreeVector(0,0,AlCover[4]),logicalAlCover,"physicalAlCover2",logicalPip,false,1);
00191
00192 G4VisAttributes* visPip = new G4VisAttributes(G4Colour(0.,0.,1.));
00193 logicalPip->SetVisAttributes(visPip);
00194
00195 G4VisAttributes* visgold = new G4VisAttributes(G4Colour(1.,1.,0.));
00196 logicalgoldLayer->SetVisAttributes(visgold);
00197
00198 G4VisAttributes* visBe = new G4VisAttributes(G4Colour(0.,1.,0.));
00199 logicalinnerBe->SetVisAttributes(visBe);
00200
00201 G4VisAttributes* visOil = new G4VisAttributes(G4Colour(1.,1.,1.));
00202 logicaloilLayer->SetVisAttributes(visOil);
00203
00204 logicalouterBe->SetVisAttributes(visBe);
00205
00206 logicalinnerBeSide->SetVisAttributes(visBe);
00207
00208 logicalinnerAl->SetVisAttributes(visOil);
00209
00210 logicalAlRing->SetVisAttributes(visOil);
00211
00212 logicalouterAl->SetVisAttributes(visOil);
00213
00214 logicalAgLayer->SetVisAttributes(visBe);
00215
00216 logicalCuLayer->SetVisAttributes(visPip);
00217
00218 logicalAlCover->SetVisAttributes(visOil);
00219
00220 }