#include <TVirtualMC.h>
#include "TGeoManager.h"
#include "TGeoMatrix.h"
-#include "TGeoPgon.h"
+#include "TGeoPcon.h"
#include "TGeoTube.h"
#include "TGeoCompositeShape.h"
#include <TGraph.h>
Int_t is;
Int_t idrotm[999];
- Float_t x,y,z;
+ Double_t x,y,z;
//C T0 mother volume
Float_t pstartR[18]={0., 360., 5.,
-6.8, 4.25, 10., //-76.5+0.00+69.7
+ // -0.75 , 4.45, 10., // -76.5+6.05+69.7
+ // 1.25 , 4.45, 10., //-76.5+8.05+69.7
-0.75 , 4.5, 10., // -76.5+6.05+69.7
1.25 , 4.5, 10., //-76.5+8.05+69.7
- 1.25 , 5.1, 10., //-76.5+8.05+69.7
+ 1.25 , 5.1, 10, //-76.5+8.05+69.7
6.8 , 5.1, 10.}; //-62.9+0.00+69.7
Float_t pstart[3]={4., 12.5,6.8};
- Float_t pinstart[3]={0.,1.6,6.5};
- Float_t ppmt[3]={0.,1.5,3.5};
+ Float_t pinstart[3]={0.,1.45,6.5};
+ Float_t ppmt[3]={0.,1.4,3.5};
Float_t ptop[3]={0.,1.,1.0};
Float_t preg[3]={0., 1.0, 0.005}; //photcathode dobavil bogdanov
Float_t ptopout[3]={1.,1.01, 1.}; //metal air around raiator for photos reflection
Float_t pglass[3]={1.2,1.3,2.};
Float_t pcer[3]={0.9,1.1,1.35};
Float_t psteel[3]={0.9,1.1,0.15};
- Float_t psupport1[3] = {4.51,4.6,4.0};//C kozhuh vnutri
- Float_t psupport2[3] = {9.4,9.5,4.0};// snaruzhi C
- Float_t psupport3[3] = {4.51,9.5,0.05};//kryshki C
- Float_t psupport5[3] = {1.44,1.5,6.5}; // stakanchik dlai feu C
+ Float_t psupport1[3] = {4.51,4.52,4.0};//C kozhuh vnutri
+ Float_t psupport2[3] = {9.5,9.6,4.0};// snaruzhi C
+ Float_t psupport3[3] = {4.52,9.5, 0.05};//kryshki C
+ Float_t psupport5[3] = {1.44,1.45,6.5}; // stakanchik dlai feu C
Float_t psupport6[3] = {0,1.4,0.04}; //kryshechka stakanchika Al
- Float_t psupport7[3] = {1.5,1.6,0.4}; //kolechko snaruzhu stakanchika Al
+ Float_t psupport7[3] = {1.44,1.45,0.4}; //kolechko snaruzhu stakanchika Al
// Mother Volume katushka dlia krepezha vokrug truby k Absorbru
AliMatrix(idrotm[901], 90., 0., 90., 90., 180., 0.);
// 14
- ppcon[39] = 19.91;
+ ppcon[39] = 19.99;
ppcon[40] = 3.15;
ppcon[41] = 7.6;
//non-absorber side support and T0A !!!!!!!!
- TGeoPgon * supPgon = new TGeoPgon("supPgon",0.,360.,360,4);
+ TGeoPcon * supPgon = new TGeoPcon("0supPgon",0.,360.,4);
supPgon->DefineSection(0, 0, 4.1, 5.5);
supPgon->DefineSection(1, 10.5 , 4.1, 5.5);
supPgon->DefineSection(2, 10.5 , 4.1, 4.9);
supPgon->DefineSection(3, 12.5 , 4.1, 4.9);
- TGeoTranslation *trPgon = new TGeoTranslation("trPgon",0,0,0);
+ TGeoTranslation *trPgon = new TGeoTranslation("0trPgon",0,0,0);
trPgon->RegisterYourself();
TGeoVolumeAssembly * stlin = new TGeoVolumeAssembly("0STL");//empty segment
TGeoVolume *ins = gGeoManager->GetVolume("0INS");
- // Double_t phimin = TMath::ACos((16-4.8)/16.) * (180 / TMath::Pi()) ;
- // TGeoTubeSeg *hole = new TGeoTubeSeg("hole", 0, 1.6, 0, -phimin+90, phimin+90);
- new TGeoTube("hole", 0, 1.61, 6.5);
+ new TGeoTube("0HOLE", 0, 1.51, 6.5);
TGeoTranslation *tr [12];
- Float_t angle = 2 * TMath::Pi() / 12;
+ Double_t angle = 2 * TMath::Pi() / 12;
Char_t nameTr[40];
for (Int_t itr=0; itr<12; itr++) {
- sprintf (nameTr,"tr%i",itr+1);
+ sprintf (nameTr,"0TR%i",itr+1);
x = 6.5 * TMath::Sin(itr * angle);
y = 6.5 * TMath::Cos(itr * angle);
tr[itr] = new TGeoTranslation(nameTr,x,y,6.5);
tr[itr]->RegisterYourself();
- stlin->AddNode(ins,itr+13,tr[itr]);
+ stlin->AddNode(ins,itr+13,tr[itr]);
}
- TGeoCompositeShape *supsh = new TGeoCompositeShape("supsh","supPgon:trPgon-(hole:tr1+hole:tr2+hole:tr3+hole:tr4+hole:tr5+hole:tr6+hole:tr7+hole:tr8+hole:tr9+hole:tr10+hole:tr11+hole:tr12)");
+ TGeoCompositeShape *supsh = new TGeoCompositeShape("0supsh","0supPgon:0trPgon-(0HOLE:0TR1+0HOLE:0TR2+0HOLE:0TR3+0HOLE:0TR4+0HOLE:0TR5+0HOLE:0TR6+0HOLE:0TR7+0HOLE:0TR8+0HOLE:0TR9+0HOLE:0TR10+0HOLE:0TR11+0HOLE:0TR12)");
TGeoMedium *medal = gGeoManager->GetMedium("T0_Aluminium$");
TGeoVolume *supA = new TGeoVolume("0SUA",supsh,medal);
//T0C
// first ring: 12 units of Scintillator+PMT+divider
- Float_t theta = (180 / TMath::Pi()) * TMath::ATan(6.5 / zdetC);
+ Float_t theta = (180 / TMath::Pi()) * TMath::ATan(6.6 / zdetC);
Float_t phi[3];
for (is=0; is<12; is++)
{
- x = 6.5 * TMath::Sin(is * angle);
- y = 6.5 * TMath::Cos(is * angle);
+ x = 6.6 * TMath::Sin(is * angle);
+ y = 6.6 * TMath::Cos(is * angle);
phi[0] = -30 * is;
phi[1] = 90 - is * 30;
AliMatrix (idrotm[902 + is], 90., phi[0],
90. + theta, phi[1],
theta, phi[2]);
- z=-pstart[2]+pinstart[2]+0.2;
+ z=-pstart[2]+pinstart[2]+0.3;
gMC->Gspos ("0INS", is + 1, "0STR", x, y, z, idrotm[902 + is], "ONLY");
}
x=0;
y=0;
- z=-pinstart[2]+ppmt[2]+psupport6[2]*2;
+ // z=-pinstart[2]+ppmt[2]+psupport6[2]*2;
+ z=-pinstart[2]+ppmt[2]+0.08; //+psupport6[2];
gMC->Gspos("0PMT",1,"0INS",x,y,z,0,"ONLY");
// PMT
gMC->Gspos("0STE",1,"0PMT",0,0,z,0,"ONLY");
//Support absorber (C) side
- z=-pstart[2]+psupport1[2]+0.1;
+ z=-pstart[2]+psupport1[2];// 0.05; //0.1;
gMC->Gspos("0SU1",1,"0STR",0,0,z,0,"ONLY"); //C kozhuh snaruzhi
gMC->Gspos("0SU2",1,"0STR",0,0,z,0,"ONLY"); //C kozhuh vnutri
- z=-pstart[2]+psupport3[2]+0.1;
+ z=-pstart[2]+psupport3[2];// - 0.1;
gMC->Gspos("0SU3",1,"0STR",0,0,z,0,"ONLY"); //peredniaia kryshka
- z=-pstart[2]+2.*psupport1[2]-0.05;//+0.1;
+ z=-pstart[2]+2.*psupport1[2];//+0.1;
gMC->Gspos("0SU4",1,"0STR",0,0,z,0,"MANY"); //zadnaiai kryshka
gMC->Gspos("0SU6",1,"0INS",0,0,0,0,"ONLY");//C stakanchik dlia feu
- z=-pinstart[2]+psupport6[2];
+ z=-pinstart[2]+psupport6[2]; //-0.1;
gMC->Gspos("0SU7",1,"0INS",0,0,z,0,"ONLY"); //Al kryshechka
z=pinstart[2]-psupport7[2];
- gMC->Gspos("0SU8",1,"0INS",0,0,z,0,"ONLY"); //Al kolechko
+ gMC->Gspos("0SU8",1,"0SU6",0,0,z,0,"ONLY"); //Al kolechko
Float_t par[3];
par[0]=3.15;
par[1]=4.9;
- par[2]=0.1/2;
+ par[2]=0.01/2;
+
gMC->Gsvolu("0SA1","TUBE",idtmed[kAl],par,3);
- z += par[2];
+ z += par[2];
+ // z -= par[2];
gMC->Gspos("0SA1",1,"0SUP",0,0,z,0,"ONLY");
z=z+par[2];
par[0]=3.15;
gMC->Gspos("0SA2",1,"0SUP",0,0,z,0,"ONLY");
z=z+par[2];
par[0]=3.16; // eta chast' prikruchena k absorberu
- par[1]=7.5;
- par[2]=0.1;
+ par[1]=7.4;
+ par[2]=0.01;
gMC->Gsvolu("0SA3","TUBE",idtmed[kAl],par,3);
- z += par[2];
+ // z += par[2];
+ z = ppcon[39] - par[2];
gMC->Gspos("0SA3",1,"0SUP",0,0,z,0,"ONLY");
par[0]=3.16; // gvozdi eta chast' prikruchena k absorberu
- par[1]=7.5;
+ par[1]=7.4;
par[2]=0.01;
gMC->Gsvolu("0SN2","TUBE",idtmed[kSteel],par,3);
- gMC->Gspos("0SN2",1,"0SUP",0,0,z,0,"ONLY");
+ gMC->Gspos("0SN2",1,"0SUP",0,0,z,0,"MANY");
// eventual changes in the geometry.
//
+ // TString volPath;
+ // TString symName, sn;
+
+
+
+
TString volPath;
TString symName, sn;
TString vpA = "/ALIC_1/0STL_1/0INS_";
TString vpC = "/ALIC_1/0STR_1/0INS_";
TString vpInside = "/0PMT_1/0TOP_1";
+ TString vpAalign = "/ALIC_1/0STL_1";
+ TString vpCalign = "/ALIC_1/0STR_1";
+
+ for (Int_t imod=0; imod<26; imod++)
+ {
+ if (imod < 24)
+ {
+ if (imod < 12)
+ { volPath = vpC; sn="T0/C/PMT";}
+ else
+ { volPath = vpA; sn="T0/A/PMT";}
+ volPath += imod+1;
+ volPath += vpInside;
+ symName = sn;
+ symName += imod+1;
+ }
+ else if (imod == 24)
+ {volPath = vpCalign; symName="/ALIC_1/0STR_1";}
+ else
+ {volPath = vpAalign; symName="/ALIC_1/0STL_1";}
+ AliDebug(2,"--------------------------------------------");
+ AliDebug(2,Form("Alignable object %d", imod));
+ AliDebug(2,Form("volPath=%s\n",volPath.Data()));
+ AliDebug(2,Form("symName=%s\n",symName.Data()));
+ AliDebug(2,"--------------------------------------------");
+ if(!gGeoManager->SetAlignableEntry(symName.Data(),volPath.Data()))
+ AliFatal(Form("Alignable entry %s not created. Volume path %s not valid",
+symName.Data(),volPath.Data()));
+ }
+ /*
for (Int_t imod=0; imod<24; imod++)
{
- if (imod < 12)
- {volPath = vpC; sn="T0/C/PMT";}
- else
- {volPath = vpA; sn="T0/A/PMT";}
+ if (imod < 12)
+ { volPath = vpC; sn="T0/C/PMT";}
+ else
+ { volPath = vpA; sn="T0/A/PMT";}
volPath += imod+1;
volPath += vpInside;
-
symName = sn;
symName += imod+1;
-
+
+
AliDebug(2,"--------------------------------------------");
AliDebug(2,Form("Alignable object %d", imod));
AliDebug(2,Form("volPath=%s\n",volPath.Data()));
AliDebug(2,Form("symName=%s\n",symName.Data()));
AliDebug(2,"--------------------------------------------");
if(!gGeoManager->SetAlignableEntry(symName.Data(),volPath.Data()))
- AliFatal(Form("Alignable entry %s not created. Volume path %s not valid", symName.Data(),volPath.Data()));
-
- }
+ AliFatal(Form("Alignable entry %s not created. Volume path %s not valid",
+symName.Data(),volPath.Data()));
+ }
+ */
}
//------------------------------------------------------------------------
void AliT0v1::CreateMaterials()