#include <TNode.h>
#include <TTUBE.h>
#include <TVirtualMC.h>
+#include "TGeoManager.h"
#include "AliLog.h"
#include "AliMagF.h"
//--------------------------------------------------------------------
AliSTARTv1::AliSTARTv1(const char *name, const char *title):
- AliSTART(name,title)
+ AliSTART(name,title),
+ fIdSens1(0)
{
//
// Standart constructor for START Detector version 0
//
- fIdSens1=0;
fIshunt = 2;
}
//_____________________________________________________________________________
Int_t *idtmed = fIdtmed->GetArray();
-
- AliSTARTParameters* param = AliSTARTParameters::Instance();
- param->Init();
+ /*
+ AliSTARTParameters* param = AliSTARTParameters::Instance();
+ param->Init();
Float_t zdetC = param->GetZposition(0);
Float_t zdetA = param->GetZposition(1);
-
+ */
+ Float_t zdetC = 69.7;
+ Float_t zdetA = 373.;
+
Int_t is;
Int_t idrotm[999];
Float_t x,y,z;
-
+ //C T0 mother volume
Float_t pstartR[18]={0., 360., 5.,
- -76.5+0.00+69.7, 4.25, 10.,
- -76.5+6.05+69.7, 4.5, 10.,
- -76.5+8.05+69.7, 4.5, 10.,
- -76.5+8.05+69.7, 5.1, 10.,
- -62.9+0.00+69.7, 5.1, 10.};
+ -6.8, 4.25, 10., //-76.5+0.00+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
+ 6.8 , 5.1, 10.}; //-62.9+0.00+69.7
- Float_t pstart[3]={4.29, 12.5,6.95};
+ Float_t pstart[3]={4.29, 12.5,6.8};
Float_t pinstart[3]={0.,1.6,6.5};
Float_t ppmt[3]={0.,1.5,3.5};
- Float_t ptop[3]={0.,1.,1.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.5};
+ Float_t ptopout[3]={1.,1.01, 1.}; //metal air around raiator for photos reflection
Float_t pbot[3]={0.6,1.2,0.1};
Float_t pglass[3]={1.2,1.3,2.};
Float_t pcer[3]={0.9,1.1,1.35};
ppcon[1] = 360;
ppcon[2] = 13;
// 1:
- ppcon[3] = 14.1/2;
+ ppcon[3] = 7.2; // 14.1/2;
ppcon[4] = 4.4;
ppcon[5] = 4.5;
// 2
ppcon[17] = 5.1;
// 6
-// ppcon[18] = ppcon[15]+7.05;
- ppcon[18] = ppcon[15]+6.9;
+// ppcon[18] = ppcon[15]+6.9;
+ ppcon[18] = ppcon[15]+6.7;
ppcon[19] = 4.9;
ppcon[20] = 5.1;
ppcon[24] = ppcon[21]+0.01;
ppcon[25] = 3.15;
ppcon[26] = 3.25;
+ // ppcon[25] = 2.25;
+ // ppcon[26] = 2.33;
/// 9
ppcon[27] = ppcon[24];
- ppcon[28] = 3.15;
- ppcon[29] = 3.25;
+ ppcon[28] = ppcon[25];
+ ppcon[29] = ppcon[26] ;
// 10
- ppcon[30] = ppcon[27]+4.5;
- ppcon[31] = 3.15;
- ppcon[32] = 3.25;
+// ppcon[30] = ppcon[27]+4.5;
+ ppcon[30] = ppcon[27]+4.7;
+ ppcon[31] = 2.3;
+ ppcon[32] = ppcon[26] ;
// 11
ppcon[33] = ppcon[30];
- ppcon[34] = 3.15;
- ppcon[35] = 3.25;
-
+ // ppcon[34] = 3.15;
+ ppcon[34] = 2.3;
+ ppcon[35] = ppcon[26] ;
+
// 12
ppcon[36] = ppcon[33];
- ppcon[37] = 3.15;
+ ppcon[37] = ppcon[34] ;
ppcon[38] = 7.6;
-
-// 13
- ppcon[39] = ppcon[33]+0.4;
- ppcon[40] = 3.15;
+
+ // 13
+ ppcon[39] = ppcon[33]+0.2;
+ ppcon[40] = ppcon[34] ;
ppcon[41] = 7.6;
-
+
// 14
// ppcon[39] = ppcon[36];
// ppcon[40] = 3.15;
gMC->Gsvolu("0SUP", "PCON", idtmed[kAir], ppcon,42);
+ // gMC->Gsvolu("0SUP", "PCON", idtmed[kAir], ppcon,38);
z=-zdetC;
gMC->Gspos("0SUP",1,"ALIC",0.,0.,z,idrotm[901],"ONLY");
gMC->Gsvolu("0STR","PCON",idtmed[kAir],pstartR,18);
gMC->Gsvolu("0STL","TUBE",idtmed[kAir],pstart,3);
- gMC->Gspos("0STR",1,"ALIC",0.,0.,-zdetC-pstart[2],idrotm[901],"ONLY");
+ gMC->Gspos("0STR",1,"ALIC",0.,0.,-zdetC+pstartR[3],idrotm[901],"ONLY");
gMC->Gspos("0STL",1,"ALIC",0.,0.,zdetA+pstart[2],0,"ONLY");
//START interior
// first ring: 12 units of Scintillator+PMT+divider
Float_t theta = (180 / TMath::Pi()) * TMath::ATan(6.5 / zdetC);
- AliInfo(Form("theta %f", theta));
Float_t angle = 2 * TMath::Pi() / 12;
Float_t phi[3];
x=0;
y=0;
- // z=-pinstart[2]+ppmt[2]+2.*psupport6[2]+0.1;
z=-pinstart[2]+ppmt[2]+psupport6[2]*2;
gMC->Gspos("0PMT",1,"0INS",x,y,z,0,"ONLY");
// PMT
gMC->Gsvolu("0TOP","TUBE",idtmed[kOpGlass],ptop,3); //glass
z=-ppmt[2]+ptop[2];
gMC->Gspos("0TOP",1,"0PMT",0,0,z,0,"ONLY");
- //metal volume to simulate reclection
- gMC->Gsvolu("0TOO","TUBE",idtmed[kOpAir],ptopout,3); //glass
- // gMC->Gsvolu("0TOP","TUBE",idtmed[12],ptop,3); //lucite
+ //"metal" air volume to simulate reclection
+ gMC->Gsvolu("0TOO","TUBE",idtmed[kOpAir],ptopout,3);
gMC->Gspos("0TOO",1,"0PMT",0,0,z,0,"ONLY");
//Fotokatod
// Bottom glass
gMC->Gsvolu("0BOT","TUBE",idtmed[kGlass],pbot,3);
z=ppmt[2]-pbot[2];
- AliDebugClass(1,Form("Z bottom %f\n",z));
gMC->Gspos("0BOT",1,"0PMT",0,0,z,0,"ONLY");
// Side cylinder glass
gMC->Gsvolu("0OUT","TUBE",idtmed[kGlass],pglass,3);
z=z+par[2];
par[0]=4.9;
par[1]=5.0;
- par[2]=6.9/2;
+ par[2]=6.7/2;
gMC->Gsvolu("0SC2","TUBE",idtmed[kC],par,3);
z += par[2];
gMC->Gspos("0SC2",1,"0SUP",0,0,z,0,"ONLY");
z += par[2];
- par[0]=3.15;
+ par[0]=3.15;
par[1]=4.9;
par[2]=0.1/2;
gMC->Gsvolu("0SA1","TUBE",idtmed[kAl],par,3);
z=z+par[2];
par[0]=3.15;
par[1]=3.16;
- par[2]=4.5/2;
+ par[2]=4.7/2;
gMC->Gsvolu("0SA2","TUBE",idtmed[kAl],par,3);
z += par[2];
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.2;
+ par[2]=0.1;
gMC->Gsvolu("0SA3","TUBE",idtmed[kAl],par,3);
z += par[2];
gMC->Gspos("0SA3",1,"0SUP",0,0,z,0,"ONLY");
}
//------------------------------------------------------------------------
+void AliSTARTv1::AddAlignableVolumes() const
+{
+ //
+ // Create entries for alignable volumes associating the symbolic volume
+ // name with the corresponding volume path. Needs to be syncronized with
+ // eventual changes in the geometry.
+ //
+
+ 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";
+
+
+ for (Int_t imod=0; imod<24; imod++)
+ {
+ if (imod < 12)
+ {volPath = vpC; sn="START/C/PMT";}
+ else
+ {volPath = vpA; sn="START/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,"--------------------------------------------");
+ // gGeoManager->SetAlignableEntry(symName.Data(),volPath.Data());
+ if(!gGeoManager->SetAlignableEntry(symName.Data(),volPath.Data()))
+ AliFatal(Form("Alignable entry %s not created. Volume path %s not valid",
+ symName.Data(),volPath.Data()));
+
+ }
+}
+//------------------------------------------------------------------------
void AliSTARTv1::CreateMaterials()
{
Int_t isxfld = gAlice->Field()->Integ();
if(!gMC->IsTrackAlive()) return; // particle has disappeared
-// If particles is photon then ...
+
+ // If particles is photon then ...
if (gMC->TrackPid() == 50000050)
{