00001
00010 #include "BesSCM.hh"
00011
00012 #include "G4Box.hh"
00013 #include "G4Tubs.hh"
00014 #include "G4Trap.hh"
00015 #include "G4UnionSolid.hh"
00016 #include "G4SubtractionSolid.hh"
00017 #include "G4LogicalVolume.hh"
00018 #include "G4VPhysicalVolume.hh"
00019 #include "G4ThreeVector.hh"
00020 #include "G4Material.hh"
00021 #include "G4PVPlacement.hh"
00022 #include "globals.hh"
00023 #include "G4VisAttributes.hh"
00024 #include "G4Color.hh"
00025 #include "BesSubdetector.hh"
00026 #include "BesSCMParameter.hh"
00027
00028 BesSCM::BesSCM()
00029 {
00030 scmPar = new BesSCMParameter();
00031 scmPar->ReadData();
00032 for(G4int i=0; i<3; i++)
00033 {
00034 innerCryo[i] = scmPar->getInnerCryo(i);
00035 l1Adia[i] = scmPar->getL1Adia(i);
00036 innerShield[i] = scmPar->getInnerShield(i);
00037 l2Adia[i] = scmPar->getL2Adia(i);
00038 outerShield[i] = scmPar->getOuterShield(i);
00039 l3Adia[i] = scmPar->getL3Adia(i);
00040 l1insu[i] = scmPar->getL1insu(i);
00041 coil[i] = scmPar->getCoil(i);
00042 l2insu[i] = scmPar->getL2insu(i);
00043 supp[i] = scmPar->getSupp(i);
00044 l4Adia[i] = scmPar->getL4Adia(i);
00045 outerCryo[i] = scmPar->getOuterCryo(i);
00046 }
00047 for(G4int i=0; i<5; i++)
00048 {
00049 endShield[i] = scmPar->getEndShield(i);
00050 endCoil[i] = scmPar->getEndCoil(i);
00051 endCryo[i] = scmPar->getEndCryo(i);
00052 rein[i] = scmPar->getRein(i);
00053 }
00054
00055 for(G4int i=0; i<6; i++)
00056 {
00057 pipe1[i] = scmPar->getPipe1(i);
00058 pipe2[i] = scmPar->getPipe2(i);
00059 pipe3[i] = scmPar->getPipe3(i);
00060 }
00061
00062 for(G4int i=0; i<13; i++)
00063 {
00064 hole[i] = scmPar->getHole(i);
00065 }
00066
00067 logicalinnCryo = 0;
00068 physicalinnCryo = 0;
00069
00070 logicall1Adia = 0;
00071 physicall1Adia = 0;
00072
00073 logicalinnShield = 0;
00074 physicalinnShield = 0;
00075
00076 logicall2Adia = 0;
00077 physicall2Adia = 0;
00078
00079 logicaloutShield = 0;
00080 physicaloutShield = 0;
00081
00082 logicall3Adia = 0;
00083 physicall3Adia = 0;
00084
00085 logicalendShield = 0;
00086 physicalendShield1 = 0;
00087 physicalendShield2 = 0;
00088
00089 logicall1insu = 0;
00090 physicall1insu = 0;
00091
00092 logicalcoil = 0;
00093 physicalcoil = 0;
00094
00095 logicall2insu = 0;
00096 physicall2insu = 0;
00097
00098 logicalsupp = 0;
00099 physicalsupp = 0;
00100
00101 logicall4Adia = 0;
00102 physicall4Adia = 0;
00103
00104 logicalendCoil = 0;
00105 physicalendCoil1 = 0;
00106 physicalendCoil2 = 0;
00107
00108 logicalouterCryo = 0;
00109 physicalouterCryo = 0;
00110
00111 logicalendCryo = 0;
00112 physicalendCryo1 = 0;
00113 physicalendCryo2 = 0;
00114
00115 logicalrein = 0;
00116 physicalrein1 = 0;
00117 physicalrein2 = 0;
00118
00119 logicalpipe1 = 0;
00120 physicalpipe1 = 0;
00121
00122 logicalpipe2 = 0;
00123 physicalpipe2 = 0;
00124
00125 logicalpipe3 = 0;
00126 physicalpipe3 = 0;
00127
00128 liquidhelium = 0;
00129 Steel = 0;
00130 fibre = 0;
00131 }
00132
00133 void BesSCM::DefineMaterial()
00134 {
00135 G4double density, a, z,fractionmass;
00136 G4int nel;
00137 G4String name, symbol;
00138 density = 0.1248*g/cm3;
00139 a = 4.00*g/mole;
00140 liquidhelium = new G4Material(name="liquidhelium",z=2.0,a,density);
00141
00142 density = 7.14*g/cm3;
00143 a = 52.00*g/mole;
00144 G4Material* Chromium = new G4Material(name="Chromium",z=24.0,a,density);
00145
00146 density = 7.87*g/cm3;
00147 a = 55.845*g/mole;
00148 G4Material* Iron = new G4Material(name="Iron",z=26.0,a,density);
00149
00150 density = 8.91*g/cm3;
00151 a = 58.693*g/mole;
00152 G4Material* Nickel = new G4Material(name="Nickel",z=28.0,a,density);
00153
00154 density = 7.47*g/cm3;
00155 a = 54.938*g/mole;
00156 G4Material* Manganese = new G4Material(name="Manganese",z=25.0,a,density);
00157
00158 density = 7.801*g/cm3;
00159 Steel = new G4Material(name="Steel",density,nel=4);
00160 Steel->AddMaterial(Iron, fractionmass = 0.69);
00161 Steel->AddMaterial(Chromium, fractionmass = 0.19);
00162 Steel->AddMaterial(Manganese, fractionmass = 0.02);
00163 Steel->AddMaterial(Nickel, fractionmass = 0.10);
00164
00165 a = 12.01*g/mole;
00166 G4Element* C = new G4Element(name="Carbon" ,symbol="C" , z= 6., a);
00167 a = 1.01*g/mole;
00168 G4Element* H = new G4Element(name="Hydrogen",symbol="H" , z= 1., a);
00169 a = 16.00*g/mole;
00170 G4Element* O = new G4Element(name="Oxygen" ,symbol="O" , z= 8., a);
00171
00172 density = 2.25*mg/cm3;
00173 fibre = new G4Material(name="fibre",density,nel=3);
00174 fibre->AddElement(C, fractionmass = 0.625);
00175 fibre->AddElement(H, fractionmass = 0.042);
00176 fibre->AddElement(O, fractionmass = 0.333);
00177 }
00178
00179 void BesSCM::Construct(G4LogicalVolume* logicalbes)
00180 {
00181 DefineMaterial();
00182
00183 G4RotationMatrix* xRot = new G4RotationMatrix;
00184 xRot->rotateX(90*deg);
00185
00186 G4Tubs* hole1 = new G4Tubs("hole1",hole[0],hole[1],hole[2]/2,0,360);
00187 G4LogicalVolume* logicalhole1 = new G4LogicalVolume(hole1, Steel,"logicalhole1");
00188
00189 new G4PVPlacement(xRot,G4ThreeVector(0,(outerCryo[1]+hole[2]/2)*mm,1640*mm),logicalhole1,"physicalhole1",logicalbes,false,0);
00190
00191 G4Tubs* hole2 = new G4Tubs("hole2",hole[3],hole[4],hole[5]/2,0,360);
00192 G4LogicalVolume* logicalhole2 = new G4LogicalVolume(hole2, Steel,"logicalhole2");
00193
00194 new G4PVPlacement(xRot,G4ThreeVector(0,(outerCryo[1]+hole[2]+hole[5]/2)*mm,1640*mm),logicalhole2,"physicalhole2",logicalbes,false,0);
00195
00196 G4Tubs* hole3 = new G4Tubs("hole3",hole[6],hole[7],hole[12]/2,0,360);
00197 G4LogicalVolume* logicalhole3 = new G4LogicalVolume(hole3, Steel,"logicalhole3");
00198
00199 new G4PVPlacement(xRot,G4ThreeVector(0,(outerCryo[1]+hole[2]+hole[12]/2)*mm,1640*mm),logicalhole3,"physicalhole3",logicalbes,false,0);
00200
00201 G4Tubs* hole4 = new G4Tubs("hole4",hole[8],hole[9],hole[12]/2,0,360);
00202 G4LogicalVolume* logicalhole4 = new G4LogicalVolume(hole4, G4Material::GetMaterial("Aluminium"),"logicalhole4");
00203
00204 new G4PVPlacement(xRot,G4ThreeVector(0,(l3Adia[1]+pipe2[1]+pipe2[4]+hole[12]/2)*mm,1640*mm),logicalhole4,"physicalhole4",logicalbes,false,0);
00205
00206 G4Box* hole5 = new G4Box("hole5",hole[10]/2,hole[11]/2,hole[12]/2);
00207 G4LogicalVolume* logicalhole5 = new G4LogicalVolume(hole5, G4Material::GetMaterial("Aluminium"),"logicalhole5");
00208
00209 new G4PVPlacement(xRot,G4ThreeVector(0,(l3Adia[1]+pipe2[1]+pipe2[4]+hole[12]/2)*mm,1640*mm),logicalhole5,"physicalhole5",logicalbes,false,0);
00210
00211
00212 G4Tubs* solidSCM_tmp = new G4Tubs("solidSCM_tmp",innerCryo[0]*mm,1700*mm,(outerCryo[2]+2*endCryo[2])/2.0*mm,0,360);
00213 G4Tubs* hole_tmp1 = new G4Tubs("hole_tmp1",0,hole[1],(1700.-1617.5+2)/2.*mm,0,360);
00214 G4SubtractionSolid* solidSCM = new G4SubtractionSolid("solidSCM",solidSCM_tmp,hole_tmp1,xRot,G4ThreeVector(0,(1700.+1617.5+2)/2*mm,1640*mm) );
00215 logicalSCM = new G4LogicalVolume(solidSCM, G4Material::GetMaterial("Air"),"logicalSCM");
00216 physicalSCM = new G4PVPlacement(0,G4ThreeVector(0,0,0),logicalSCM,"physicalSCM",logicalbes,false,0);
00217
00218 G4Tubs* tub1 = new G4Tubs("tub1",innerCryo[0]*mm,innerCryo[1]*mm,innerCryo[2]/2.0*mm,0,360);
00219 logicalinnCryo = new G4LogicalVolume(tub1, Steel,"logicalinnCryo");
00220 physicalinnCryo = new G4PVPlacement(0,G4ThreeVector(0,0,0),logicalinnCryo,"physicalinnCryo",logicalSCM,false,0);
00221
00222 G4Tubs* tub2 = new G4Tubs("tub2",l1Adia[0]*mm,l1Adia[1]*mm,l1Adia[2]/2.0*mm,0,360);
00223 logicall1Adia = new G4LogicalVolume(tub2, fibre,"logicall1Adia");
00224 physicall1Adia = new G4PVPlacement(0,G4ThreeVector(0,0,0),logicall1Adia,"physicall1Adia",logicalSCM,false,0);
00225
00226 G4Tubs* tub3 = new G4Tubs("tub3",innerShield[0]*mm,innerShield[1]*mm,innerShield[2]/2.0*mm,0,360);
00227 logicalinnShield = new G4LogicalVolume(tub3, G4Material::GetMaterial("Aluminium"),"logicalinnShield");
00228 physicalinnShield = new G4PVPlacement(0,G4ThreeVector(0,0,0),logicalinnShield,"physicalinnShield",logicalSCM,false,0);
00229
00230 G4Tubs* tub4 = new G4Tubs("tub4",l2Adia[0]*mm,l2Adia[1]*mm,l2Adia[2]/2.0*mm,0,360);
00231 logicall2Adia = new G4LogicalVolume(tub4, fibre,"logicall2Adia");
00232 physicall2Adia = new G4PVPlacement(0,G4ThreeVector(0,0,0),logicall2Adia,"physicall2Adia",logicalSCM,false,0);
00233
00234 G4Tubs* hole_tmp3 = new G4Tubs("hole_tmp3",0,hole[8]*mm,25*mm,0,360);
00235 G4Tubs* tub5_tmp = new G4Tubs("tub5_tmp",outerShield[0]*mm,outerShield[1]*mm,outerShield[2]/2.0*mm,0,360);
00236 G4SubtractionSolid* tub5 = new G4SubtractionSolid("tub5",tub5_tmp,hole_tmp3,xRot,G4ThreeVector(0,(outerShield[0]+outerShield[1])/2*mm,1640*mm) );
00237 logicaloutShield = new G4LogicalVolume(tub5, G4Material::GetMaterial("Aluminium"),"logicaloutShield");
00238 physicaloutShield = new G4PVPlacement(0,G4ThreeVector(0,0,0),logicaloutShield,"physicaloutShield",logicalSCM,false,0);
00239
00240 G4Tubs* tub6_tmp = new G4Tubs("tub6_tmp",l3Adia[0]*mm,l3Adia[1]*mm,l3Adia[2]/2.0*mm,0,360);
00241 G4SubtractionSolid* tub6 = new G4SubtractionSolid("tub6",tub6_tmp,hole_tmp3,xRot,G4ThreeVector(0,(l3Adia[0]+l3Adia[1])/2*mm,1640*mm) );
00242 logicall3Adia = new G4LogicalVolume(tub6, fibre,"logicall3Adia");
00243 physicall3Adia = new G4PVPlacement(0,G4ThreeVector(0,0,0),logicall3Adia,"physicall3Adia",logicalSCM,false,0);
00244
00245 G4Tubs* tub7 = new G4Tubs("tub7",endShield[0]*mm,endShield[1]*mm,endShield[2]/2.0*mm,0,360);
00246 logicalendShield = new G4LogicalVolume(tub7, G4Material::GetMaterial("Aluminium"),"logicalendShield");
00247 physicalendShield1 = new G4PVPlacement(0,G4ThreeVector(0,0,endShield[3]*mm),logicalendShield,"physicalendShield1",logicalSCM,false,0);
00248 physicalendShield2 = new G4PVPlacement(0,G4ThreeVector(0,0,endShield[4]*mm),logicalendShield,"physicalendShield2",logicalSCM,false,1);
00249
00250 G4Tubs* tub8 = new G4Tubs("tub8",l1insu[0]*mm,l1insu[1]*mm,l1insu[2]/2.0*mm,0,360);
00251 logicall1insu = new G4LogicalVolume(tub8, fibre,"logicall1insu");
00252 physicall1insu = new G4PVPlacement(0,G4ThreeVector(0,0,0),logicall1insu,"physicall1insu",logicalSCM,false,0);
00253
00254 G4Tubs* tub9 = new G4Tubs("tub9",coil[0]*mm,coil[1]*mm,coil[2]/2.0*mm,0,360);
00255 logicalcoil = new G4LogicalVolume(tub9, G4Material::GetMaterial("Aluminium"),"logicalcoil");
00256 physicalcoil = new G4PVPlacement(0,G4ThreeVector(0,0,0),logicalcoil,"physicalcoil",logicalSCM,false,0);
00257
00258 G4Tubs* tub10 = new G4Tubs("tub10",l2insu[0]*mm,l2insu[1]*mm,l2insu[2]/2.0*mm,0,360);
00259 logicall2insu = new G4LogicalVolume(tub10, fibre,"logicall2insu");
00260 physicall2insu = new G4PVPlacement(0,G4ThreeVector(0,0,0),logicall2insu,"physicall2insu",logicalSCM,false,0);
00261
00262 G4Tubs* tub11 = new G4Tubs("tub11",supp[0]*mm,supp[1]*mm,supp[2]/2.0*mm,0,360);
00263 logicalsupp = new G4LogicalVolume(tub11, G4Material::GetMaterial("Aluminium"),"logicalsupp");
00264 physicalsupp = new G4PVPlacement(0,G4ThreeVector(0,0,0),logicalsupp,"physicalsupp",logicalSCM,false,0);
00265
00266 G4Tubs* tub12 = new G4Tubs("tub12",l4Adia[0]*mm,l4Adia[1]*mm,l4Adia[2]/2.0*mm,0,360);
00267 logicall4Adia = new G4LogicalVolume(tub12, fibre,"logicall4Adia");
00268 physicall4Adia = new G4PVPlacement(0,G4ThreeVector(0,0,0),logicall4Adia,"physicall4Adia",logicalSCM,false,0);
00269
00270 G4Tubs* tub13 = new G4Tubs("tub13",endCoil[0]*mm,endCoil[1]*mm,endCoil[2]/2.0*mm,0,360);
00271 logicalendCoil = new G4LogicalVolume(tub13, G4Material::GetMaterial("Aluminium"),"logicalendCoil");
00272 physicalendCoil1 = new G4PVPlacement(0,G4ThreeVector(0,0,endCoil[3]*mm),logicalendCoil,"physicalendCoil1",logicalSCM,false,0);
00273 physicalendCoil2 = new G4PVPlacement(0,G4ThreeVector(0,0,endCoil[4]*mm),logicalendCoil,"physicalendCoil2",logicalSCM,false,1);
00274
00275 G4Tubs* hole_tmp2 = new G4Tubs("hole_tmp2",0,hole[1],18*mm,0,360);
00276 G4Tubs* tub14_tmp = new G4Tubs("tub14_tmp",outerCryo[0]*mm,outerCryo[1]*mm,outerCryo[2]/2.0*mm,0,360);
00277 G4SubtractionSolid* tub14 = new G4SubtractionSolid("tub14",tub14_tmp,hole_tmp2,xRot,G4ThreeVector(0,(outerCryo[1]-8)*mm,1640*mm) );
00278 logicalouterCryo = new G4LogicalVolume(tub14, Steel,"logicalouterCryo");
00279 physicalouterCryo = new G4PVPlacement(0,G4ThreeVector(0,0,0),logicalouterCryo,"physicalouterCryo",logicalSCM,false,0);
00280
00281 G4Tubs* tub15 = new G4Tubs("tub15",endCryo[0]*mm,endCryo[1]*mm,endCryo[2]/2.0*mm,0,360);
00282 logicalendCryo = new G4LogicalVolume(tub15, Steel,"logicalendCryo");
00283 physicalendCryo1 = new G4PVPlacement(0,G4ThreeVector(0,0,endCryo[3]*mm),logicalendCryo,"physicalendCryo1",logicalSCM,false,0);
00284 physicalendCryo2 = new G4PVPlacement(0,G4ThreeVector(0,0,endCryo[4]*mm),logicalendCryo,"physicalendCryo2",logicalSCM,false,1);
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319 G4Box* solidpipe1 = new G4Box("solidpipe1",pipe1[2]/2*mm,(pipe1[1]+pipe1[4])/2*mm,pipe1[5]/2*mm);
00320 logicalpipe1 = new G4LogicalVolume(solidpipe1, G4Material::GetMaterial("Air"),"logicalpipe1");
00321 G4Tubs* tub17 = new G4Tubs("tub17",pipe1[0]*mm,pipe1[1]*mm,pipe1[5]/2*mm,0,360);
00322 G4Tubs* tub18 = new G4Tubs("tub18",0,pipe1[1]*mm,pipe1[5]/2*mm,0,360);
00323 G4Tubs* tub19 = new G4Tubs("tub19",0,pipe1[0]*mm,pipe1[5]/2*mm,0,360);
00324 G4Box* solidbox1 = new G4Box("solidbox1",pipe1[2]/2*mm,pipe1[3]/2*mm,pipe1[5]/2*mm);
00325 G4SubtractionSolid* solidsub1 = new G4SubtractionSolid("solidsub1",solidbox1,tub18,0,G4ThreeVector(0,(pipe1[4]-pipe1[3]/2)*mm,0) );
00326 G4LogicalVolume* logicalsub1 = new G4LogicalVolume(solidsub1, G4Material::GetMaterial("Aluminium"),"logicalsub1");
00327 G4LogicalVolume* logicaltub17 = new G4LogicalVolume(tub17, G4Material::GetMaterial("Aluminium"),"logicaltub17");
00328 G4LogicalVolume* logicaltub19 = new G4LogicalVolume(tub19,liquidhelium,"logicaltub19");
00329
00330 new G4PVPlacement(0,G4ThreeVector(0,0,0),logicaltub17,"physicaltub17",logicalpipe1,false,0);
00331
00332 new G4PVPlacement(0,G4ThreeVector(0,0,0),logicaltub19,"physicaltub19",logicalpipe1,false,0);
00333
00334 new G4PVPlacement(0,G4ThreeVector(0,-(pipe1[4]-pipe1[3]/2)*mm,0),logicalsub1,"physicalsub1",logicalpipe1,false,0);
00335 for(G4int i=0; i<24; i++)
00336 {
00337 std::ostringstream osnamerein;
00338 osnamerein << "physicalpipe1_"<<i;
00339 G4RotationMatrix* zRot = new G4RotationMatrix;
00340 zRot->rotateZ(15*i*deg);
00341
00342 physicalpipe1=new G4PVPlacement(zRot,G4ThreeVector(-(std::sqrt(innerShield[0]*innerShield[0]-pipe1[2]/2*pipe1[2]/2)-
00343 (pipe1[1]+pipe1[4])/2)*std::sin(15*pi/180*i)*mm,-(std::sqrt(innerShield[0]*innerShield[0]-
00344 pipe1[2]/2*pipe1[2]/2)-(pipe1[1]+pipe1[4])/2)*std::cos(15*pi/180*i)*mm,0),
00345 logicalpipe1,osnamerein.str(),logicalSCM,false,0);
00346 }
00347
00348 G4Box* solidpipe2 = new G4Box("solidpipe2",pipe2[2]/2*mm,(pipe2[1]+pipe2[4])/2*mm,pipe2[5]/2*mm);
00349 logicalpipe2 = new G4LogicalVolume(solidpipe2,G4Material::GetMaterial("Air"),"logicalpipe2");
00350 G4Tubs* tub20 = new G4Tubs("tub20",pipe2[0]*mm,pipe2[1]*mm,pipe2[5]/2*mm,0,360);
00351 G4Tubs* tub21 = new G4Tubs("tub21",0,pipe2[1]*mm,pipe2[5]/2*mm,0,360);
00352 G4Tubs* tub22 = new G4Tubs("tub22",0,pipe2[0]*mm,pipe2[5]/2*mm,0,360);
00353 G4Box* solidbox2 = new G4Box("solidbox2",pipe2[2]/2*mm,pipe2[3]/2*mm,pipe2[5]/2*mm);
00354 G4SubtractionSolid* solidsub2 = new G4SubtractionSolid("solidsub2",solidbox2,tub21,0,G4ThreeVector(0,(pipe2[4]-pipe2[3]/2)*mm,0) );
00355 G4LogicalVolume* logicalsub2 = new G4LogicalVolume(solidsub2,G4Material::GetMaterial("Aluminium"),"logicalsub2");
00356 G4LogicalVolume* logicaltub20 = new G4LogicalVolume(tub20,G4Material::GetMaterial("Aluminium"),"logicaltub20");
00357 G4LogicalVolume* logicaltub22 = new G4LogicalVolume(tub22,liquidhelium,"logicaltub22");
00358
00359 new G4PVPlacement(0,G4ThreeVector(0,0,0),logicaltub20,"physicaltub20",logicalpipe2,false,0);
00360
00361 new G4PVPlacement(0,G4ThreeVector(0,0,0),logicaltub22,"physicaltub22",logicalpipe2,false,0);
00362
00363 new G4PVPlacement(0,G4ThreeVector(0,-(pipe2[4]-pipe2[3]/2)*mm,0),logicalsub2,"physicalsub2",logicalpipe2,false,0);
00364 for(G4int i=0; i<24; i++)
00365 {
00366 std::ostringstream osnamerein;
00367 osnamerein << "physicalpipe2_"<<i;
00368 G4RotationMatrix* zRot = new G4RotationMatrix;
00369 zRot->rotateZ(15*i*deg);
00370 physicalpipe2= new G4PVPlacement(zRot,G4ThreeVector(-(l3Adia[1]+(pipe2[1]+pipe2[4])/2)*std::sin(15*pi/180*i)*mm,
00371 -(l3Adia[1]+(pipe2[1]+pipe2[4])/2)*std::cos(15*pi/180*i)*mm,0),logicalpipe2,osnamerein.str(),
00372 logicalSCM,false,0);
00373 }
00374
00375
00376 G4Box* solidpipe3 = new G4Box("solidpipe3",pipe3[2]/2*mm,(pipe3[1]+pipe3[4])/2*mm,pipe3[5]/2*mm);
00377 logicalpipe3 = new G4LogicalVolume(solidpipe3,G4Material::GetMaterial("Air"),"logicalpipe3");
00378 G4Tubs* tub23 = new G4Tubs("tub23",pipe3[0]*mm,pipe3[1]*mm,pipe3[5]/2*mm,0,360);
00379 G4Tubs* tub24 = new G4Tubs("tub24",0,pipe3[1]*mm,pipe3[5]/2*mm,0,360);
00380 G4Tubs* tub25 = new G4Tubs("tub25",0,pipe3[0]*mm,pipe3[5]/2*mm,0,360);
00381 G4Box* solidbox3 = new G4Box("solidbox3",pipe3[2]/2*mm,pipe3[3]/2*mm,pipe3[5]/2*mm);
00382 G4SubtractionSolid* solidsub3 = new G4SubtractionSolid("solidsub3",solidbox3,tub24,0,G4ThreeVector(0,(pipe3[4]-pipe3[3]/2)*mm,0));
00383 G4LogicalVolume* logicalsub3 = new G4LogicalVolume(solidsub3,G4Material::GetMaterial("Aluminium"),"logicalsub3");
00384 G4LogicalVolume* logicaltub23 = new G4LogicalVolume(tub23,G4Material::GetMaterial("Aluminium"),"logicaltub23");
00385 G4LogicalVolume* logicaltub25 = new G4LogicalVolume(tub25,liquidhelium,"logicaltub25");
00386
00387 new G4PVPlacement(0,G4ThreeVector(0,0,0),logicaltub23,"physicaltub23",logicalpipe3,false,0);
00388
00389 new G4PVPlacement(0,G4ThreeVector(0,0,0),logicaltub25,"physicaltub25",logicalpipe3,false,0);
00390
00391 new G4PVPlacement(0,G4ThreeVector(0,-(pipe3[4]-pipe3[3]/2)*mm,0),logicalsub3,"physicalsub3",logicalpipe3,false,0);
00392 for(G4int i=0; i<24; i++)
00393 {
00394 std::ostringstream osnamerein;
00395 osnamerein << "physicalpipe3_"<<i;
00396 G4RotationMatrix* zRot = new G4RotationMatrix;
00397 zRot->rotateZ(15*i*deg);
00398 physicalpipe3= new G4PVPlacement(zRot,G4ThreeVector(-(l4Adia[1]+(pipe3[1]+pipe3[4])/2)*std::sin(15*pi/180*i)*mm,
00399 -(l4Adia[1]+(pipe3[1]+pipe3[4])/2)*std::cos(15*pi/180*i)*mm,0),logicalpipe3,osnamerein.str(),
00400 logicalSCM,false,0);
00401 }
00402
00403
00404 G4VisAttributes* visSCM1 = new G4VisAttributes(G4Colour(0.,0.,1.));
00405 logicalSCM->SetVisAttributes(visSCM1);
00406 logicalinnCryo->SetVisAttributes(visSCM1);
00407
00408 logicalouterCryo->SetVisAttributes(visSCM1);
00409
00410 logicalendCryo->SetVisAttributes(visSCM1);
00411
00412 G4VisAttributes* visSCM2 = new G4VisAttributes(G4Colour(0.,1.,0.));
00413 logicall1Adia->SetVisAttributes(visSCM2);
00414
00415 logicall2Adia->SetVisAttributes(visSCM2);
00416
00417 logicall3Adia->SetVisAttributes(visSCM2);
00418
00419 logicall4Adia->SetVisAttributes(visSCM2);
00420
00421 G4VisAttributes* visSCM3 = new G4VisAttributes(G4Colour(1.,0.,0.));
00422 logicalinnShield->SetVisAttributes(visSCM3);
00423
00424 logicaloutShield->SetVisAttributes(visSCM3);
00425
00426 logicalendShield->SetVisAttributes(visSCM3);
00427
00428
00429 G4VisAttributes* visSCM4 = new G4VisAttributes(G4Colour(0.,1.,1.));
00430 logicall1insu->SetVisAttributes(visSCM4);
00431
00432 logicall2insu->SetVisAttributes(visSCM4);
00433
00434 G4VisAttributes* visSCM5 = new G4VisAttributes(G4Colour(1.,0.,1.));
00435 logicalcoil->SetVisAttributes(visSCM5);
00436
00437 logicalendCoil->SetVisAttributes(visSCM5);
00438
00439 G4VisAttributes* visSCM6 = new G4VisAttributes(G4Colour(1.,1.,0.));
00440 logicalsupp->SetVisAttributes(visSCM6);
00441
00442
00443
00444
00445 logicalpipe2->SetVisAttributes(visSCM2);
00446
00447
00448 logicaltub17->SetVisAttributes(visSCM2);
00449
00450 logicaltub19->SetVisAttributes(visSCM5);
00451
00452 logicaltub20->SetVisAttributes(visSCM1);
00453
00454 logicaltub22->SetVisAttributes(visSCM1);
00455
00456 logicaltub23->SetVisAttributes(visSCM2);
00457
00458 logicaltub25->SetVisAttributes(visSCM5);
00459
00460 logicalsub1->SetVisAttributes(visSCM4);
00461
00462 logicalsub2->SetVisAttributes(visSCM4);
00463
00464
00465 logicalsub3->SetVisAttributes(visSCM4);
00466
00467 logicalhole1->SetVisAttributes(visSCM3);
00468
00469 logicalhole2->SetVisAttributes(visSCM3);
00470
00471 logicalhole3->SetVisAttributes(visSCM3);
00472
00473 logicalhole4->SetVisAttributes(visSCM3);
00474
00475 logicalhole5->SetVisAttributes(visSCM3);
00476
00477 }