#include <Riostream.h>
#include <stdlib.h>
-#include <TGeometry.h>
-#include <TLorentzVector.h>
-#include <TMath.h>
-#include <TNode.h>
-#include <TTUBE.h>
-#include <TVirtualMC.h>
+#include "TGeoCompositeShape.h"
#include "TGeoManager.h"
-#include "TGeoPgon.h"
+#include "TGeoMatrix.h"
+#include "TGeoPcon.h"
#include "TGeoTube.h"
-#include "TGeoCompositeShape.h"
+#include <TGeoGlobalMagField.h>
#include <TGraph.h>
+#include <TLorentzVector.h>
+#include <TMath.h>
+#include <TVirtualMC.h>
#include "AliLog.h"
#include "AliMagF.h"
#include "AliCDBStorage.h"
#include "AliCDBManager.h"
#include "AliCDBEntry.h"
+#include "AliTrackReference.h"
ClassImp(AliT0v1)
+
+//--------------------------------------------------------------------
+AliT0v1::AliT0v1(): AliT0(),
+ fIdSens1(0),
+ fEffPMT(0x0)
+
+{
+ //
+ // Standart constructor for T0 Detector version 0
+}
//--------------------------------------------------------------------
AliT0v1::AliT0v1(const char *name, const char *title):
AliT0(name,title),
- fIdSens1(0)
+ fIdSens1(0),
+ fEffPMT(0x0)
+
{
//
// Standart constructor for T0 Detector version 0
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);
- TGeoTube*hole = 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;
- Char_t nameTr[4];
+ 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";
-
- for (Int_t imod=0; imod<24; imod++)
+ TString vpAalign = "/ALIC_1/0STL_1";
+ TString vpCalign = "/ALIC_1/0STR_1";
+
+ for (Int_t imod=0; imod<26; imod++)
{
- if (imod < 12)
- {volPath = vpC; sn="T0/C/PMT";}
- else
- {volPath = vpA; sn="T0/A/PMT";}
+ 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;
-
+ 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()));
-
- }
+ AliFatal(Form("Alignable entry %s not created. Volume path %s not valid",
+symName.Data(),volPath.Data()));
+ }
}
//------------------------------------------------------------------------
void AliT0v1::CreateMaterials()
{
- Int_t isxfld = gAlice->Field()->Integ();
- Float_t sxmgmx = gAlice->Field()->Max();
+ Int_t isxfld = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Integ();
+ Float_t sxmgmx = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Max();
// Float_t a,z,d,radl,absl,buf[1];
// Int_t nbuf;
// AIR
}
//-------------------------------------------------------------------
-void AliT0v1::Init()
+void AliT0v1::DefineOpticalProperties()
{
-// Initialises version 0 of the Forward Multiplicity Detector
-//
-//Int_t *idtmed = gAlice->Idtmed();
- AliT0::Init();
- fIdSens1=gMC->VolId("0REG");
+// Optical properties definition.
Int_t *idtmed = fIdtmed->GetArray();
// Definition Cherenkov parameters
int i;
gMC->SetCerenkov (idtmed[kOpGlassCathode], kNbins, aPckov, aAbsSiO2,efficAll , rindexSiO2 );
gMC->SetCerenkov (idtmed[kOpAir], kNbins, aPckov,absorAir , efficAll,rindexAir );
gMC->SetCerenkov (idtmed[kOpAirNext], kNbins, aPckov,absorbCathodeNext , efficAll, rindexCathodeNext);
+}
- AliDebug(1,Form("%s: *** T0 version 1 initialized ***\n",ClassName()));
+//-------------------------------------------------------------------
+void AliT0v1::Init()
+{
+// Initialises version 0 of the Forward Multiplicity Detector
+//
+ AliT0::Init();
+ fIdSens1=gMC->VolId("0REG");
+ AliDebug(1,Form("%s: *** T0 version 1 initialized ***\n",ClassName()));
}
//-------------------------------------------------------------------
static Float_t hits[6];
static Int_t vol[2];
TLorentzVector pos;
+ TLorentzVector mom;
// TClonesArray &lhits = *fHits;
if(!gMC->IsTrackAlive()) return; // particle has disappeared
+ id=gMC->CurrentVolID(copy);
- // If particles is photon then ...
-
- if (gMC->TrackPid() == 50000050)
- {
- id=gMC->CurrentVolID(copy);
+ // Check the sensetive volume
+ if(id==fIdSens1 ) {
+ if(gMC->IsTrackEntering()) {
+ gMC->CurrentVolOffID(2,copy);
+ vol[1]=copy;
+ gMC->CurrentVolOffID(3,copy1);
+ vol[0]=copy1;
+ gMC->TrackPosition(pos);
+ hits[0] = pos[0];
+ hits[1] = pos[1];
+ hits[2] = pos[2];
+ if(pos[2]<0) vol[0] = 2;
+ if(pos[2]>=0) vol[0] = 1;
+ Float_t etot=gMC->Etot();
+ hits[3]=etot;
+ Int_t iPart= gMC->TrackPid();
+ Int_t partID=gMC->IdFromPDG(iPart);
+ hits[4]=partID;
+ Float_t ttime=gMC->TrackTime();
+ hits[5]=ttime*1e12;
+ if (gMC->TrackPid() == 50000050) // If particles is photon then ...
+ {
+ if(RegisterPhotoE(vol[1]-1,hits[3])) {
+ AddHit(gAlice->GetMCApp()->GetCurrentTrackNumber(),vol,hits);
+ // Create a track reference at the exit of photocatode
+ }
+ }
+
+ //charge particle
+ if ( gMC->TrackCharge() )
+ AddTrackReference(gAlice->GetMCApp()->GetCurrentTrackNumber(), AliTrackReference::kT0);
- // Check the sensetive volume
- if(id==fIdSens1 ) {
- if(gMC->IsTrackEntering()) {
- gMC->CurrentVolOffID(2,copy);
- vol[1]=copy;
- gMC->CurrentVolOffID(3,copy1);
- vol[0]=copy1;
- gMC->TrackPosition(pos);
- hits[0] = pos[0];
- hits[1] = pos[1];
- hits[2] = pos[2];
- if(pos[2]<0) vol[0]=2;
- if(pos[2]>=0) vol[0]=1;
-
- Float_t etot=gMC->Etot();
- hits[3]=etot;
- Int_t iPart= gMC->TrackPid();
- Int_t partID=gMC->IdFromPDG(iPart);
- hits[4]=partID;
- Float_t ttime=gMC->TrackTime();
- hits[5]=ttime*1e12;
- if(RegisterPhotoE(vol[1]-1,hits[3]))
- AddHit(fIshunt,vol,hits);
-
- }
- // cout<< gAlice->GetMCApp()->GetCurrentTrackNumber()<<" hit added "<<endl;
-
/*
printf("track(%i) alive(%i) disap(%i) enter(%i) exit(%i) inside(%i) out(%i) stop(%i) new(%i) \n",
gAlice->GetMCApp()->GetCurrentTrackNumber(),
gMC->IsTrackOut(),
gMC->IsTrackStop(),
gMC->IsNewTrack());
- */
- } //sensitive
- } //photon
+ */
+ }// trck entering
+ } //sensitive
+
}