- if (GetCreateCavern()) CreateCavern();
-}
-
-
-void AliACORDEv1::CreateCavern()
-{
-
- // Create the mother volume, the one which contain all the material
- //above the hall
-
- TGeoManager *acorde = new TGeoManager("ACORDE", "Geometry of ACORDE");
-
- //---> define some materials
-
- TGeoMaterial *matVacuum = new TGeoMaterial("Vacuum", 0,0,0);
-
- //---> define some media
-
- TGeoMedium *vacuum = new TGeoMedium("Vacuum",1, matVacuum);
-
- //---> define the measures
-
- Double_t dx1 = AliACORDEConstants::Instance()->Depth()*TMath::Tan(67.5*kDegrad);
- Double_t dy1 = AliACORDEConstants::Instance()->Depth();
- Double_t dz1 = dx1;
-
- //---> define the box for the mother volume
-
- TGeoVolume *aCORDE = acorde->MakeBox("ACORDE", vacuum, dx1, dy1, dz1);
- acorde->SetTopVolume(aCORDE);
-
- //---> create shafts&molasse
-
- CreateShafts();
- CreateMolasse();
-}
-
-
-void AliACORDEv1::CreateShafts()
-{
-
- //---> This shaft is composes by an open tube down in the hall
- //---> and a cilinder above the level of the celling
- //---> Every structure relative to the shaft will be put into this volume
-
-
- TGeoManager *acorde = new TGeoManager("ACORDE2007", "Geometry of ACORDE");
-
- //---> define some materials
-
- TGeoMaterial *matVacuum = new TGeoMaterial("Al", 0,0,0);
-
- //---> define some media
-
- TGeoMedium *vacuum = new TGeoMedium("Vacuum",1, matVacuum);
- TGeoMaterial *matAl = new TGeoMaterial("Al", 26.98,13,2.7);
- TGeoMedium *al = new TGeoMedium("Root Material",2, matAl);
-
-
- //---> Access to shafts
- //---> define the Matrix Rotation&other variables
-
- TGeoRotation *rot1 = new TGeoRotation("rot1", 0.0, 0.0, 90.0, 0.0, 90.0, 90.0);
-
- Float_t ptube[5];
- ptube[0]=0;
- ptube[1]=1250;
- ptube[2]=5150/2;
- ptube[3]=360;
- ptube[4]=360;
-
- Float_t ptubs[5];
-
- //---> The open section of the PX24
- ptubs[0] = 1150; //---> Inner radius
- ptubs[1] = 1250; //---> Outer radius
- ptubs[2] = 1300; //---> Half length
- ptubs[3] = 180 + kRaddeg*TMath::ASin(1070/ptubs[0]); //---> starting angle
- ptubs[4] = 180 - kRaddeg*TMath::ASin(1070/ptubs[0]);
-
- //---> Set position for the tubes
-
- TGeoTranslation *tr2 = new TGeoTranslation(0,0,-ptube[2]+ptubs[2]);
-
- //---> define the cilinders to hold the main structure in the shaft
-
- TGeoVolume *o = acorde->MakeBox("O", vacuum, 25., 25., 5.);
- TGeoVolume *cSF1 = acorde->MakeTubs("CSF1",al,ptube[0],ptube[1],ptube[2],ptube[3],ptube[4]);
- TGeoVolume *cSF2 = acorde->MakeTubs("CSF2",al,ptubs[0],ptubs[1],ptubs[2],ptubs[3],ptubs[4]);
- o->AddNode(cSF1, 1);
- cSF1->AddNode(cSF2,1,tr2);
-
- //---> definition of the other part of the shaft
-
- ptube[0] = ptubs[0]; // Inner radius
- ptube[1] = ptubs[1]; // Outer radius
- ptube[2] = 5150/2 - ptubs[2]; // Half lenght
- TGeoVolume *cSF3 = acorde->MakeTubs("CSF3",al,ptubs[0],ptubs[1],ptubs[2],ptubs[3],ptubs[4]);
- TGeoTranslation *tr3 = new TGeoTranslation(0,0,5150/2-ptube[2]);
- cSF1->AddNode(cSF3,1,tr3);
-
- //---> define concrete walls along the shaft (next to the elevator)
-
- Float_t pbox[3];
- pbox[0]=480/2;
- pbox[1]=120/2;
- pbox[2]=5150/2;
- TGeoVolume *cSW1 = acorde->MakeBox("CSW1",vacuum,pbox[0],pbox[1],pbox[2]);
- TGeoTranslation *br1 = new TGeoTranslation(820+pbox[0],150+pbox[1],0);
- TGeoTranslation *br1a = new TGeoTranslation(820+pbox[0],-300-pbox[1],0);
- cSF1->AddNode(cSW1,1,br1);
- cSF1->AddNode(cSW1,1,br1a);
-
- pbox[0] = 120/2; // Half length in X
- pbox[1] = 750/2; // Half length in Y
- pbox[2] = 5150/2; // Half length in Z
- TGeoVolume *cSW2 = acorde->MakeBox("CSW2",vacuum,pbox[0],pbox[1],pbox[2]);
- TGeoTranslation *br2 = new TGeoTranslation(820-60,150+pbox[1],0);
- cSF1->AddNode(cSW2,1,br2);
-
-
- pbox[0] = 120/2; // Half length in X
- pbox[1] = 600/2; // Half lenght in Y
- pbox[2] = 5150/2; // Half length in Z
- TGeoVolume *cSW3 = acorde->MakeBox("CSW3",vacuum,pbox[0],pbox[1],pbox[2]);
- TGeoTranslation *br3 = new TGeoTranslation(820-60,-300-pbox[1],0);
- cSF1->AddNode(cSW3,1,br3);
-
- pbox[0] = 400/2; // Half length in X
- pbox[1] = 2300/2; // Half lenght in Y
- pbox[2] = 300/2; // Half length in Z
- TGeoVolume *cSW4 = acorde->MakeBox("CSW4",vacuum,pbox[0],pbox[1],pbox[2]);
- TGeoTranslation *br4 = new TGeoTranslation(pbox[1]-pbox[0],0,3000-5150/2-pbox[2]);
- cSF1->AddNode(cSW4,1,br4);
-
-
- pbox[0] = 1400/2; // Half length in X
- pbox[1] = 2300/2; // Half lenght in Y
- pbox[2] = 170/2; // Half length in Z
- TGeoVolume *cSW5 = acorde->MakeBox("CSW5",vacuum,pbox[0],pbox[1],pbox[2]);
- TGeoTranslation *br5 = new TGeoTranslation(0,0,3000-5150/2-130);
- cSF1->AddNode(cSW5,1,br5);
-
-
- pbox[0] = 170/2; // Half length in X
- pbox[1] = 2300/2; // Half lenght in Y
- pbox[2] = 300/2; // Half length in Z
- TGeoVolume *cSW6 = acorde->MakeBox("CSW6",vacuum,pbox[0],pbox[1],pbox[2]);
- TGeoTranslation *br6 = new TGeoTranslation(-1400/2-pbox[0],0,3000-5150/2-pbox[2]);
- cSF1->AddNode(cSW6,1,br6);
-
-
- pbox[0] = 100/2; // Half length in X
- pbox[1] = 2300/2; // Half lenght in Y
- pbox[2] = 450/2; // Half length in Z
- TGeoVolume *cSW7 = acorde->MakeBox("CSW7",vacuum,pbox[0],pbox[1],pbox[2]);
- TGeoTranslation *br7 = new TGeoTranslation(-1400/2-170-pbox[0],0,3000-5150/2+pbox[2]);
- cSF1->AddNode(cSW7,1,br7);
-
-
- pbox[0] = 300/2; // Half length in X
- pbox[1] = 2300/2; // Half lenght in Y
- pbox[2] = 170/2; // Half length in Z
- TGeoVolume *cSW8 = acorde->MakeBox("CSW8",vacuum,pbox[0],pbox[1],pbox[2]);
- TGeoTranslation *br8 = new TGeoTranslation(-2300/2+pbox[0],0,2500-5150/2);
- cSF1->AddNode(cSW8,1,br8);
-
- //---> put the shaft into the mother volume
-
- TGeoCombiTrans *br = new TGeoCombiTrans(0,AliACORDEConstants::Instance()->Depth()-5150/2,2300,rot1);
- cSF1->AddNode(cSF1,1,br);
-
-
- //---> PM25 Access Shafts
-
- ptube[0]=910/2;
- ptube[1]=ptube[0]+100;
- ptube[2]=(5150-1166)/2;
- TGeoVolume *cSF4 = acorde->MakeTubs("CSF4",vacuum,pbox[0],pbox[1],pbox[2],360,360);
- TGeoCombiTrans *tr4 = new TGeoCombiTrans(2100,AliACORDEConstants::Instance()->Depth()-ptube[2],0,rot1);
- cSF4->AddNode(cSF4,1,tr4);
-
-
- //---> PGC2 Access shaft
-
- ptube[0]=1100/2;
- ptube[1]=ptube[0]+100;
- ptube[2]=(5150-690)/2;
- TGeoVolume *cSF5 = acorde->MakeTubs("CSF5",vacuum,pbox[0],pbox[1],pbox[2],360,360);
- TGeoCombiTrans *tr5 = new TGeoCombiTrans(-375,AliACORDEConstants::Instance()->Depth()-ptube[2],-1900-2987.7,rot1);
- cSF5->AddNode(cSF5,1,tr5);
-
-}
-
-
-void AliACORDEv1::CreateMolasse()
-
-{
- // create a big molasse for ACORDE detector
- TGeoManager *acorde = new TGeoManager("ACORDE2007", "Geometry of ACORDE");
-
- //---> define some media
-
-
- TGeoMaterial *matAl = new TGeoMaterial("Al", 26.98,13,2.7);
- TGeoMedium *vacuum = new TGeoMedium("Root Material",2, matAl);
-
- Float_t px24radius = 2300/2;
- Float_t px24X = 0;
- Float_t px24Z = 2300;
- Float_t pm25radius = 910/2;
- Float_t pm25X = 2100;
- Float_t pm25Z = 0;
- Float_t pgc2radius = 1100/2;
- Float_t pgc2X = -375;
- Float_t pgc2Z = -(1900 + 2987.7);
- Float_t concreteWidth = 100; //---> Standard width of the hall walls.
-
-
- //---> Create a local mother volume.
- Float_t pbox[3];
- pbox[0] = AliACORDEConstants::Instance()->Depth()*TMath::Tan(67.5*kDegrad);
- pbox[1] = AliACORDEConstants::Instance()->Depth()/2;
- pbox[2] = pbox[0];
- TGeoVolume *cM01 = acorde->MakeBox("CM01", vacuum, pbox[0],pbox[1],pbox[2]);
-
- //---> Now put the molasse exactly above the hall. OK
- //---> Above the ceiling
-
- Float_t ptubs[5];
- ptubs[0] = 1170;
- ptubs[1] = 2100 - pm25radius;
- ptubs[2] = 1900/2 + px24radius;
- ptubs[3] = 0;
- ptubs[4] = 180;
- TGeoVolume *cM02 = acorde->MakeTubs("CM02",vacuum,ptubs[0],ptubs[1],ptubs[2],ptubs[3],ptubs[4]);
- TGeoTranslation *tr2 = new TGeoTranslation(0,500-AliACORDEConstants::Instance()->Depth()/2,ptubs[2]-1900);
- cM01->AddNode(cM02,1,tr2);
-
-
- //---> Molasse around the RB24/26 Wall. OK
-
- ptubs[0] = 220 + 1600;
- ptubs[1] = AliACORDEConstants::Instance()->Depth() - ptubs[0];
- ptubs[2] = 2987.7/2 - 1100/4 - concreteWidth/2;
- ptubs[3] = 0;
- ptubs[4] = 180;
- TGeoVolume *cM03 = acorde->MakeTubs("CM03",vacuum,ptubs[0],ptubs[1],ptubs[2],ptubs[3],ptubs[4]);
- TGeoTranslation *tr3 = new TGeoTranslation(70,40-AliACORDEConstants::Instance()->Depth()/2,-ptubs[2]-1900);
- cM01->AddNode(cM03,1,tr3);
-
-
- //---> A big block above the RB24/26 wall. OK
-
- pbox[0] = AliACORDEConstants::Instance()->Depth()*TMath::Tan(67.5*kDegrad);
- pbox[1] = (AliACORDEConstants::Instance()->Depth() - 220 - 1600)/2;
- pbox[2] = 2987.7/2 - 1100/4 - concreteWidth/2;
- TGeoVolume *cM04 = acorde->MakeBox("CM04", vacuum, pbox[0],pbox[1],pbox[2]);
- TGeoTranslation *tr4 = new TGeoTranslation(0,AliACORDEConstants::Instance()->Depth()/2-pbox[1],-1900-pbox[2]);
- cM01->AddNode(cM04,1,tr4);
-
-
-
-
- //---> Small blocks below the volume CMO4 on both sides of the wall RB24/26. OK
-
- pbox[0] = (AliACORDEConstants::Instance()->Depth()*TMath::Tan(67.5*kDegrad)-ptubs[0])/2;
- pbox[1] = AliACORDEConstants::Instance()->Depth()/2 - pbox[1];
- TGeoVolume *cM17 = acorde->MakeBox("CM17", vacuum, pbox[0],pbox[1],pbox[2]);
- TGeoTranslation *tr17 = new TGeoTranslation(AliACORDEConstants::Instance()->Depth()*TMath::Tan(67.5*kDegrad) - pbox[0],-AliACORDEConstants::Instance()->Depth()/2 + pbox[1],-1900 - pbox[2]);
- TGeoTranslation *tr17a = new TGeoTranslation(-AliACORDEConstants::Instance()->Depth()*TMath::Tan(67.5*kDegrad)+ pbox[0],-AliACORDEConstants::Instance()->Depth()/2 + pbox[1], -1900 - pbox[2]);
- cM01->AddNode(cM17,1,tr17);
- cM01->AddNode(cM17,2,tr17a);
-
-
- //---> And a big block of molasse above the hall up to the surface. OK
-
- pbox[0] = pm25X - pm25radius;
- pbox[1] = (AliACORDEConstants::Instance()->Depth()-500-1170)/2;
- pbox[2] = (1900 + 1150)/2;
- TGeoVolume *cM05 = acorde->MakeBox("CM05", vacuum, pbox[0],pbox[1],pbox[2]);
- TGeoTranslation *tr5 = new TGeoTranslation(0,AliACORDEConstants::Instance()->Depth()/2-pbox[1], pbox[2]-1900);
- cM01->AddNode(cM05,1,tr5);
-
-
- //---> Small blocks of molasse betwen the blocks CMO2, CMO5 and PM25. Ok
-
- pbox[0] = (pm25X - pm25radius - 1170)/2;
- pbox[1] = 1000;
- TGeoVolume *cM16 = acorde->MakeBox("CM16", vacuum, pbox[0],pbox[1],pbox[2]);
- TGeoTranslation *tr16 = new TGeoTranslation(1170 + pbox[0], -AliACORDEConstants::Instance()->Depth()/2+pbox[1], pbox[2] - 1900);
- cM01->AddNode(cM16,1,tr16);
-
-
- //---> Molasse around the shafts.
-
- TGeoRotation *rot2 = new TGeoRotation("rot1",0, 0, 90, 0, 90, 90 );
-
- //---> Around the PX24, the open section. OK
-
- ptubs[0] = px24radius + concreteWidth;
- ptubs[1] = ptubs[0] + 1000;
- ptubs[2] = (2300 - (5150 - AliACORDEConstants::Instance()->Depth()))/2;
- ptubs[3] = 180 + kRaddeg*TMath::ASin(1070/ptubs[0]);
- ptubs[4] = 180 - kRaddeg*TMath::ASin(1070/ptubs[0]);
- TGeoVolume *cM06 = acorde->MakeTubs("CM06", vacuum,ptubs[0],ptubs[1],ptubs[2],ptubs[3],ptubs[4]);
- TGeoTranslation *tr6 = new TGeoTranslation(px24X, ptubs[2] - AliACORDEConstants::Instance()->Depth()/2, px24Z);
- cM01->AddNode(cM06,1,tr6);
-
-
- //---> Around the PX24, the closed section. OK
-
- Float_t ptube[3];
- ptube[0] = px24radius + concreteWidth;
- ptube[1] = ptube[0] + 1000;
- ptube[2] = (5150 - 2300)/2;
- TGeoVolume *cM07 = acorde->MakeTubs("CM07", vacuum,ptube[0],ptube[1],ptubs[2],ptube[3],ptube[4]);
- TGeoTranslation *tr7 = new TGeoTranslation(px24X, AliACORDEConstants::Instance()->Depth()/2-ptube[2], px24Z);
- cM01->AddNode(cM07,1,tr7);
-
-
- //---> Around PM25. OK
-
- ptube[0] = pm25radius + concreteWidth;
- ptube[1] = ptube[0] + 400;
- ptube[2] = AliACORDEConstants::Instance()->Depth()/2;
- TGeoVolume *cM08 = acorde->MakeTubs("CM08", vacuum,ptube[0],ptube[1],ptube[2],ptube[3],ptube[4]);
- TGeoCombiTrans *tr8 = new TGeoCombiTrans(pm25X, 0, pm25Z,rot2);
- cM01->AddNode(cM08,1,tr8);
-
-
- //---> On both sides of the PM25 along the HALL.
-
- pbox[0] = (2100 + pm25radius - 1170)/2;
- pbox[1] = AliACORDEConstants::Instance()->Depth()/2;
- pbox[2] = (3*px24radius - pm25radius)/2;
- TGeoVolume *cM18 = acorde->MakeBox("CM18",vacuum,pbox[0],pbox[1],pbox[2]);
- TGeoTranslation *tr18 = new TGeoTranslation(2100, 0, pbox[2] + pm25radius);
- cM01->AddNode(cM18,1,tr18);
-
- pbox[2] = (1900 - pm25radius)/2;
- TGeoVolume *cM19 = acorde->MakeBox("CM19",vacuum,pbox[0],pbox[1],pbox[2]);
- TGeoTranslation *tr19 = new TGeoTranslation(2100, 0, -pbox[2] - pm25radius);
- cM01->AddNode(cM19,1,tr19);
-
-
- //---> Around the PGC2. OK
-
- ptube[0] = pgc2radius + concreteWidth;
- ptube[1] = 2987.7 - 740;
- ptube[2] = AliACORDEConstants::Instance()->Depth()/2;
- TGeoVolume *cM09 = acorde->MakeTubs("CM09",vacuum,ptube[0],ptube[1],ptube[2],ptube[3],ptube[4]);
- TGeoCombiTrans *tr09 = new TGeoCombiTrans(pgc2X, 0, pgc2Z,rot2);
- cM01->AddNode(cM09,1,tr09);
-
- //---> On both sides of the PGC2.OK
-
- pbox[0] = (AliACORDEConstants::Instance()->Depth()*TMath::Tan(67.5*kDegrad)-1100 - 375)/2;
- pbox[1] = AliACORDEConstants::Instance()->Depth()/2;
- pbox[2] = pgc2radius + concreteWidth;
- TGeoVolume *cM10 = acorde->MakeBox("CM10",vacuum,pbox[0],pbox[1],pbox[2]);
- TGeoTranslation *tr10 = new TGeoTranslation(AliACORDEConstants::Instance()->Depth()*TMath::Tan(67.5*kDegrad) - pbox[0], 0, pgc2Z);
- TGeoTranslation *tr10a = new TGeoTranslation(-AliACORDEConstants::Instance()->Depth()*TMath::Tan(67.5*kDegrad) + pbox[0], 0, pgc2Z);
- cM01->AddNode(cM10,1,tr10);
- cM01->AddNode(cM10,2,tr10a);
-
-
- //---> big block of molasse behind the PX24. OK
-
- pbox[0] = AliACORDEConstants::Instance()->Depth()*TMath::Tan(67.5*kDegrad);
- pbox[1] = AliACORDEConstants::Instance()->Depth()/2;
- pbox[2] = (pbox[0] - (2300 + 1150 + 100))/2;
- TGeoVolume *cM12 = acorde->MakeBox("CM12",vacuum,pbox[0],pbox[1],pbox[2]);
- TGeoTranslation *tr12 = new TGeoTranslation(px24X, 0, px24Z + px24radius + concreteWidth + pbox[2]);
- cM01->AddNode(cM12,1,tr12);
-
-
- //---> big block of molasse in the opposite side of the PM25. OK
-
- pbox[0] = (AliACORDEConstants::Instance()->Depth()*TMath::Tan(67.5*kDegrad)-1150)/2;
- pbox[1] = AliACORDEConstants::Instance()->Depth()/2;
- pbox[2] = (1900 + 2300 + 1150)/2;
- TGeoVolume *cM13 = acorde->MakeBox("CM13",vacuum,pbox[0],pbox[1],pbox[2]);
- TGeoTranslation *tr13 = new TGeoTranslation(-1150 - pbox[0], 0, pbox[2] - 1900);
- cM01->AddNode(cM13,1,tr13);
-
-
- //---> big block of molasse behind the PM25. OK
-
- pbox[0] = (AliACORDEConstants::Instance()->Depth()*TMath::Tan(67.5*kDegrad)-(2100 + 910/2 + 100))/2;
- pbox[1] = AliACORDEConstants::Instance()->Depth()/2;
- pbox[2] = (1900 + 2300 + 1150)/2;
- TGeoVolume *cM14 = acorde->MakeBox("CM14",vacuum,pbox[0],pbox[1],pbox[2]);
- TGeoTranslation *tr14 = new TGeoTranslation(pm25X + pm25radius + concreteWidth + pbox[0], 0, pbox[2] - 1900);
- cM01->AddNode(cM14,1,tr14);
-
-
- //---> big block of molasse behind the PGC2. OK
-
- pbox[0] = AliACORDEConstants::Instance()->Depth()*TMath::Tan(67.5*kDegrad);
- pbox[1] = AliACORDEConstants::Instance()->Depth()/2;
- pbox[2] = (pbox[0] - (2987.7 + 1900 + 1100/2 + 100))/2;
- TGeoVolume *cM15 = acorde->MakeBox("CM15",vacuum,pbox[0],pbox[1],pbox[2]);
- TGeoTranslation *tr15 = new TGeoTranslation(0, 0, -pbox[0] + pbox[2]);
- TGeoTranslation *tr15a = new TGeoTranslation(0,AliACORDEConstants::Instance()->Depth()/2,0);
- cM01->AddNode(cM15,1,tr15);
- cM01->AddNode(cM01,1,tr15a);
-