* provided "as is" without express or implied warranty. *
**************************************************************************/
-/*
-$Log$
-Revision 1.6 2002/10/29 09:53:40 morsch
-Constants start with k. Warnings corrected.
-
-Revision 1.5 2002/10/14 14:57:39 hristov
-Merging the VirtualMC branch to the main development branch (HEAD)
-
-Revision 1.3.2.2 2002/10/11 08:04:28 hristov
-Updating VirtualMC to v3-09-02
+/* $Id$ */
-Revision 1.4 2002/09/02 15:32:15 morsch
-Gsbool calls to resolve MANY added (I. Hrivnacova)
-
-Revision 1.3 2002/07/25 10:00:08 morsch
-par4 size increased.
-
-Revision 1.2 2002/07/15 08:16:35 morsch
-New shield geometry.
-
-*/
+//-------------------------------------------------------------------------
+// MUON shielding class
+// Default version
+// Author: A.Morsch
+//-------------------------------------------------------------------------
+#include <TVirtualMC.h>
+#include <TArrayI.h>
#include "AliSHILv2.h"
-#include "AliRun.h"
-#include "AliMC.h"
#include "AliConst.h"
#include "AliALIFE.h"
+#include "AliLog.h"
ClassImp(AliSHILv2)
Float_t dz, dZ;
Int_t *idtmed = fIdtmed->GetArray()-1699;
-
+
+ Int_t idrotm[1799];
+
#include "ABSOSHILConst.h"
#include "SHILConst2.h"
//
// begin Fluka
AliALIFE* flukaGeom = new AliALIFE("beamshield.alife", "beamshield_vol.inp");
+
Int_t i=0,ifl=0;
Float_t posfluka[3]={0., 0., 0.};
Float_t zfluka[12], rfluka1[12], rfluka2[12], rfluka3[12] ;
par0[9] = par0[6];
par0[10] = 0.;
- par0[11] = 17.9;
+ par0[11] = kR11;
par0[12] = -dz+kZch12;
par0[13] = 0.;
- par0[14] = 17.9;
+ par0[14] = kR11;
par0[15] = par0[12];
par0[16] = 0.;
par0[69] = -dz+kZch52;
par0[70] = 0.;
- par0[71] = 30.+(kZch52-kZConeE)*TMath::Tan(kThetaOpenPbO);
+ par0[71] = 30.+(kZch52+4.-kZConeE)*TMath::Tan(kThetaOpenPbO);
// end of cone
par0[72] = -dz+kZvac10;
par0[73] = 0.;
- par0[74] = 30.+(kZvac10-kZConeE)*TMath::Tan(kThetaOpenPbO);
+ par0[74] = par0[71];
par0[75] = -dz+kZvac10;
par0[76] = 0.;
gMC->Gsvolu("YMOT", "PCON", idtmed[kVacuum], par0, 87);
dz=zstart+dl;
- gMC->Gspos("YMOT", 1, "ALIC", 0., 0., dz, 0, "ONLY");
+ AliMatrix(idrotm[1705], 270., 0., 90., 90., 180., 0.);
+ gMC->Gspos("YMOT", 1, "ALIC", 0., 0., - dz, idrotm[1705], "ONLY");
gMC->Gsbool("YMOT","L3DO");
gMC->Gsbool("YMOT","L3O1");
gMC->Gsbool("YMOT","L3O2");
Float_t rBox= par1[43]-0.1;
Float_t rc1 = par1[7];
- gMC->Gsvolu("YGO1", "PCON", idtmed[kNiCuW], par1, 45);
+ gMC->Gsvolu("YGO1", "PCON", idtmed[kNiCuW+40], par1, 45);
//
// begin Fluka
+
for (ifl=0; ifl<14; ifl++) {
zfluka[ifl]=par1[3+3*ifl]+dl+kZRear-kDRear;
rfluka1[ifl] = par1[4+3*ifl];
// begin Fluka
//
Float_t rf1[10], rf2[10];
- rf1[0]=0.; rf2[0]=0.;
+ rf1[0]=0.;
rf1[1] = cpar0[1];
- rf2[1] = cpar0[3];
-
+ rf1[2]=rf1[1]+0.15;
+ rf1[3]=rf1[2]+0.5;
+ rf1[4]=rf1[3]+0.1;
+ rf1[5]=par1[4];
+ rf1[6]=0.; //PH This has to be checked...
- rf1[2]=rf1[1]+0.15; rf1[3]=rf1[2]+0.5; rf1[4]=rf1[3]+0.1;
- rf1[5]=par1[4];
- rf2[2]=rf2[1]+0.15; rf2[3]=rf2[2]+0.5; rf2[4]=rf2[3]+0.1;
+ rf2[0]=0.;
+ rf2[1] = cpar0[3];
+ rf2[2]=rf2[1]+0.15;
+ rf2[3]=rf2[2]+0.5;
+ rf2[4]=rf2[3]+0.1;
rf2[5]=par1[7];
+ rf2[6]=0.; //PH This has to be checked
- char* materialsA[7]
+ const char* materialsA[7]
= {"VACUUM", "STEEL", "PIPEINSU", "STEEL", "AIR", "AIR"};
- char* fieldsA[7]
+ const char* fieldsA[7]
= {"MF", "MF", "MF", "MF", "MF", "MF"};
- char* cutsA[7]
+ const char* cutsA[7]
= {"$SHH","$SHH","$SHH","$SHH","$SHH","$SHH","$SHH"};
flukaGeom->Comment("1st part: Beam pipe lateral struture (left)");
//
// begin Fluka
- char* materialsB[5]
+ const char* materialsB[5]
= {"VACUUM", "STEEL", "PIPEINSU", "STEEL", "AIR"};
- char* fieldsB[5]
+ const char* fieldsB[5]
= {"MF", "MF", "MF", "MF", "MF"};
- char* cutsB[5]
+ const char* cutsB[5]
= {"$SHH","$SHH","$SHH","$SHH","$SHH"};
rf1[0]=rf2[0]=0.;
//
// begin Fluka
- char* materials1[8]
+ const char* materials1[8]
= {"VACUUM", "STEEL", "PIPEINSU", "STEEL", "AIR", "NIW", "NIW", "STEEL"};
- char* fields1[8]
+ const char* fields1[8]
= {"MF", "MF", "MF", "MF", "MF", "MF", "MF", "MF"};
- char* cuts1[8]
+ const char* cuts1[8]
= {"$SHH","$SHH","$SHH","$SHH","$SHH","$SHH","$SHH","$SHH"};
flukaGeom->Comment("2nd part: Beam shield lateral struture (0)");
parPb[16] = r2+(kZvac7-kZvac4-10.) * TMath::Tan(kThetaOpen2);
parPb[17] = 30.;
- gMC->Gsvolu("YXO2", "PCON", idtmed[kPb], parPb, 18);
+ gMC->Gsvolu("YXO2", "PCON", idtmed[kPb+40], parPb, 18);
gMC->Gspos("YXO2", 1, "YGO2", 0., 0., (kZPb-kZvac4)/2., 0, "ONLY");
//
// Concrete replacing Pb
parW[13] = r2+(kZPb-kZvac4) * TMath::Tan(kThetaOpen2);
parW[14] = kZPb*TMath::Tan(kAccMin)-kDRSteel2;
- gMC->Gsvolu("YYO2", "PCON", idtmed[kNiCuW], parW, 15);
+ gMC->Gsvolu("YYO2", "PCON", idtmed[kNiCuW+40], parW, 15);
gMC->Gspos("YYO2", 1, "YGO2", 0., 0., -(kZvac7-kZPb)/2., 0, "ONLY");
for (i=4; i<35; i+=3) par2[i] = 0;
tpar[0]=kR41-kDRSteel2;
tpar[1]=kR41;
tpar[2]=(kZvac11-kZvac10)/2.;
- gMC->Gsvolu("YS43", "TUBE", idtmed[kPb], tpar, 3);
+ gMC->Gsvolu("YS43", "TUBE", idtmed[kPb+40], tpar, 3);
dz+=tpar[2];
gMC->Gspos("YS43", 1, "YGO4", 0., 0., dz, 0, "ONLY");
//
tpar[0]=kR42-5;
tpar[1]=kR42;
tpar[2]=(kZvac11-kZvac10)/2.;
- gMC->Gsvolu("YPBO", "TUBE", idtmed[kPb], tpar, 3);
+ gMC->Gsvolu("YPBO", "TUBE", idtmed[kPb+40], tpar, 3);
gMC->Gspos("YPBO", 1, "YPBI", 0., 0., 0., 0, "ONLY");
tpar[2]=(zCC2-zCC1)/2.;
dz=-(kZvac12-kZvac11)/2.+tpar[2];
gMC->Gspos("YFEO", 1, "YFEI", 0., 0., dz, 0, "ONLY");
//
+// The following element has been moved to ZDC
+//
// Magnet element
//
- tpar[0]=0.;
- tpar[1]=kR43;
- tpar[2]=50.;
- gMC->Gsvolu("YAEM", "TUBE", idtmed[kAir], tpar, 3);
- tpar[0]=kRAbs;
- tpar[1]=kR43;
- tpar[2]=50.;
- gMC->Gsvolu("YFEM", "TUBE", idtmed[kFe], tpar, 3);
- gMC->Gspos("YFEM", 1, "YAEM", 0., 0., 0., 0, "ONLY");
+// tpar[0]=0.;
+// tpar[1]= 40.;
+// tpar[2]=85.;
+// gMC->Gsvolu("YAEM", "TUBE", idtmed[kAir], tpar, 3);
+// tpar[0]=17.6/2.;
+// tpar[1]=40.;
+// tpar[2]=85.;
+// gMC->Gsvolu("YFEM", "TUBE", idtmed[kFe], tpar, 3);
+// gMC->Gspos("YFEM", 1, "YAEM", 0., 0., 0., 0, "ONLY");
//
- dz=kZvac12+50.;
- gMC->Gspos("YAEM", 1, "ALIC", 0., 0., dz, 0, "ONLY");
+ dz=1921.6 + tpar[2];
+
+// gMC->Gspos("YAEM", 1, "ALIC", 0., 0., - dz, 0, "ONLY");
//
//
tpar[0] = 50.;
tpar[1] = 310.;
- tpar[2] = (kZFilterOut - kZFilterIn) / 4.;
+ tpar[2] = (kZFilterOut - kZFilterIn) / 2.;
gMC->Gsvolu("YFIM", "TUBE", idtmed[kFe+40], tpar, 3);
dz = (kZFilterIn + kZFilterOut) / 2.;
tpar[2] -= 10.;
gMC->Gsvolu("YFII","TUBE", idtmed[kFe], tpar, 3);
gMC->Gspos("YFII", 1, "YFIM", 0., 0., 0., 0, "ONLY");
- gMC->Gspos("YFIM", 1, "ALIC", 0., 0., dz, 0, "ONLY");
+ gMC->Gspos("YFIM", 1, "ALIC", 0., 0., - dz, 0, "ONLY");
//
// Shielding close to chamber
//
cpar[2]=kZRear*TMath::Tan(kAccMin);
cpar[3]=kR11;
cpar[4]=(kZRear+2.*cpar[0])*TMath::Tan(kAccMin);
- gMC->Gsvolu("YCS1", "CONE", idtmed[kNiCuW], cpar, 5);
+ gMC->Gsvolu("YCS1", "CONE", idtmed[kNiCuW+40], cpar, 5);
dz=-(kZvac12-zstart)/2.+(kZRear-zstart)+cpar[0];
gMC->Gspos("YCS1", 1, "YMOT", 0., 0., dz, 0, "ONLY");
- cpar[0]=(kZvac4-kZch12)/2.;
- cpar[1]=kR11;
- cpar[2]=kZch12*TMath::Tan(kAccMin);
- cpar[3]=kR11;
- cpar[4]=(kZch12+2.*cpar[0])*TMath::Tan(kAccMin);
- gMC->Gsvolu("YCS3", "CONE", idtmed[kNiCuW], cpar, 5);
- dz=-(kZvac12-zstart)/2.+(kZch12-zstart)+cpar[0];
+ cpar[0]=(kZvac4-kZvac41)/2.;
+ cpar[1]=kR21;
+ cpar[2]=kZvac41*TMath::Tan(kAccMin);
+ cpar[3]=kR21;
+ cpar[4]=(kZvac41+2.*cpar[0])*TMath::Tan(kAccMin);
+ gMC->Gsvolu("YCS3", "CONE", idtmed[kNiCuW+40], cpar, 5);
+ dz=-(kZvac12-zstart)/2.+(kZvac41-zstart)+cpar[0];
gMC->Gspos("YCS3", 1, "YMOT", 0., 0., dz, 0, "ONLY");
cpar[0]=(kZch12-kZch11)/2.;
cpar[1]=kR11;
- cpar[2]=18.;
+ cpar[2]=17.9;
cpar[3]=kR11;
cpar[4]=17.9;
- gMC->Gsvolu("YCS2", "CONE", idtmed[kAir], cpar, 5);
- dz=-(kZvac12-zstart)/2.+(kZch11-zstart)+cpar[0];
- gMC->Gspos("YCS2", 1, "YMOT", 0., 0., dz, 0, "ONLY");
+// gMC->Gsvolu("YCS2", "CONE", idtmed[kAir], cpar, 5);
+
+// gMC->Gspos("YCS2", 1, "ALIC", 0., 0., dz, idrotm[1705], "ONLY");
Float_t ptubs[5];
ptubs[0] = kR11;
// phi_min, phi_max
ptubs[3] = 0.;
ptubs[4] = 90.;
- gMC->Gsvolu("YCR0", "TUBS", idtmed[kNiCuW], ptubs, 0);
- Int_t idrotm[1799];
-
+ gMC->Gsvolu("YCR0", "TUBS", idtmed[kNiCuW+40], ptubs, 0);
+
AliMatrix(idrotm[1701],90., 0., 90., 90., 0., 0.);
AliMatrix(idrotm[1702],90., 90., 90., 180., 0., 0.);
AliMatrix(idrotm[1703],90., 180., 90., 270., 0., 0.);
AliMatrix(idrotm[1704],90., 270., 90., 0., 0., 0.);
// Int_t ipos;
-
- dz=-cpar[0];
+ dz= - kZch11;
// 1.
ptubs[2]=6.5/2.;
- dz+=ptubs[2];
- gMC->Gsposp("YCR0", 1, "YCS2", 0., 0., dz, idrotm[1701], "ONLY", ptubs, 5);
- gMC->Gsposp("YCR0", 2, "YCS2", 0., 0., dz, idrotm[1703], "ONLY", ptubs, 5);
- dz+=ptubs[2];
- dz+=1.5;
+ dz-=ptubs[2];
+ gMC->Gsposp("YCR0", 1, "ALIC", 0., 0., dz, idrotm[1701], "ONLY", ptubs, 5);
+ gMC->Gsposp("YCR0", 2, "ALIC", 0., 0., dz, idrotm[1703], "ONLY", ptubs, 5);
+ dz-=ptubs[2];
+ dz-=1.5;
// 2.
ptubs[2]=5.0/2.;
- dz+=ptubs[2];
- gMC->Gsposp("YCR0", 3, "YCS2", 0., 0., dz, idrotm[1702], "ONLY", ptubs, 5);
- gMC->Gsposp("YCR0", 4, "YCS2", 0., 0., dz, idrotm[1704], "ONLY", ptubs, 5);
- dz+=ptubs[2];
- dz+=1.5;
+ dz-=ptubs[2];
+ gMC->Gsposp("YCR0", 3, "ALIC", 0., 0., dz, idrotm[1702], "ONLY", ptubs, 5);
+ gMC->Gsposp("YCR0", 4, "ALIC", 0., 0., dz, idrotm[1704], "ONLY", ptubs, 5);
+ dz-=ptubs[2];
+ dz-=1.5;
// 3.
ptubs[2]=5.0/2.;
- dz+=ptubs[2];
- gMC->Gsposp("YCR0", 5, "YCS2", 0., 0., dz, idrotm[1701], "ONLY", ptubs, 5);
- gMC->Gsposp("YCR0", 6, "YCS2", 0., 0., dz, idrotm[1703], "ONLY", ptubs, 5);
- dz+=ptubs[2];
- dz+=1.5;
+ dz-=ptubs[2];
+ gMC->Gsposp("YCR0", 5, "ALIC", 0., 0., dz, idrotm[1701], "ONLY", ptubs, 5);
+ gMC->Gsposp("YCR0", 6, "ALIC", 0., 0., dz, idrotm[1703], "ONLY", ptubs, 5);
+ dz-=ptubs[2];
+ dz-=1.5;
// 4.
ptubs[2]=6.5/2.;
- dz+=ptubs[2];
- gMC->Gsposp("YCR0", 7, "YCS2", 0., 0., dz, idrotm[1702], "ONLY", ptubs, 5);
- gMC->Gsposp("YCR0", 8, "YCS2", 0., 0., dz, idrotm[1704], "ONLY", ptubs, 5);
- dz+=ptubs[2];
- dz+=1.5;
+ dz-=ptubs[2];
+ gMC->Gsposp("YCR0", 7, "ALIC", 0., 0., dz, idrotm[1702], "ONLY", ptubs, 5);
+ gMC->Gsposp("YCR0", 8, "ALIC", 0., 0., dz, idrotm[1704], "ONLY", ptubs, 5);
+ dz-=ptubs[2];
+ dz-=1.5;
cpar[2]=kZvac4*TMath::Tan(kAccMin);
cpar[3]=kR21;
cpar[4]=(kZvac4+2.*cpar[0])*TMath::Tan(kAccMin);
- gMC->Gsvolu("YCS4", "CONE", idtmed[kNiCuW], cpar, 5);
- dz=-(kZvac12-zstart)/2.+(kZvac4-zstart)+cpar[0];
+ gMC->Gsvolu("YCS4", "CONE", idtmed[kNiCuW+40], cpar, 5);
+ dz=-(kZvac12 - zstart)/2.+(kZvac4-zstart)+cpar[0];
gMC->Gspos("YCS4", 1, "YMOT", 0., 0., dz, 0, "ONLY");
cpar[0]=(kZvac6-kZch22)/2.;
cpar[2]=kZch22*TMath::Tan(kAccMin);
cpar[3]=kR21;
cpar[4]=(kZch22+2.*cpar[0])*TMath::Tan(kAccMin);
- gMC->Gsvolu("YCS6", "CONE", idtmed[kNiCuW], cpar, 5);
- dz=-(kZvac12-zstart)/2.+(kZch22-zstart)+cpar[0];
+ gMC->Gsvolu("YCS6", "CONE", idtmed[kNiCuW+40], cpar, 5);
+ dz=-(kZvac12 - zstart)/2.+(kZch22-zstart)+cpar[0];
gMC->Gspos("YCS6", 1, "YMOT", 0., 0., dz, 0, "ONLY");
// Recess station 2
ptubs[2] = 0.;
ptubs[3] = 0.;
ptubs[4] = 90.;
- gMC->Gsvolu("YCR1", "TUBS", idtmed[kNiCuW], ptubs, 0);
+ gMC->Gsvolu("YCR1", "TUBS", idtmed[kNiCuW+40], ptubs, 0);
dz=-cpar[0];
// 1.
kZch22, kZvac6, posfluka,"NIW", "MF", "$SHS");
*/
- if (fWriteGeometry) flukaGeom->Finish();
+ flukaGeom->Finish(!fWriteGeometry);
//
// end Fluka
par0[27] = -dz + kZch52;
par0[28] = 30.;
- par0[29] = 30.+(kZch52-kZConeE)*TMath::Tan(kThetaOpenPbO);
+ par0[29] = 30.+(kZch52+4.-kZConeE)*TMath::Tan(kThetaOpenPbO);
// end of cone
par0[30] = +dl;
par0[31] = 30.;
par0[32] = par0[29];
//
- gMC->Gsvolu("YOPB", "PCON", idtmed[kPb], par0, 33);
+ gMC->Gsvolu("YOPB", "PCON", idtmed[kPb+40], par0, 33);
Float_t dzs = -(kZvac12-zstart)/2. + (kZch32-zstart) + dl;
gMC->Gspos("YOPB", 1, "YMOT", 0., 0., dzs, 0, "ONLY");
//
Int_t i;
//
- if(fDebug) {
+ if(AliLog::GetGlobalDebugLevel()>0) {
printf("\n%s: ",ClassName());
for(i=0;i<35;i++) printf("*");
printf(" SHILv2_INIT ");