X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=T0%2FAliT0v1.cxx;h=5c1f0ac4ba616636e67920e82bea8a8346b4a8f0;hb=b51fe2c8ab6bb25be6b566bb59620aa61eb9e1ed;hp=7b1025fb6ff94b53f20f90279414539f3b19419c;hpb=7235aed20d2794746bd070c94ce2584e99f9c30c;p=u%2Fmrichter%2FAliRoot.git diff --git a/T0/AliT0v1.cxx b/T0/AliT0v1.cxx index 7b1025fb6ff..5c1f0ac4ba6 100644 --- a/T0/AliT0v1.cxx +++ b/T0/AliT0v1.cxx @@ -31,17 +31,16 @@ #include #include -#include -#include -#include -#include -#include -#include +#include "TGeoCompositeShape.h" #include "TGeoManager.h" -#include "TGeoPgon.h" +#include "TGeoMatrix.h" +#include "TGeoPcon.h" #include "TGeoTube.h" -#include "TGeoCompositeShape.h" +#include #include +#include +#include +#include #include "AliLog.h" #include "AliMagF.h" @@ -56,13 +55,26 @@ #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 @@ -106,18 +118,20 @@ void AliT0v1::CreateGeometry() 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 @@ -125,12 +139,12 @@ void AliT0v1::CreateGeometry() 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.); @@ -198,7 +212,7 @@ void AliT0v1::CreateGeometry() // 14 - ppcon[39] = 19.91; + ppcon[39] = 19.99; ppcon[40] = 3.15; ppcon[41] = 7.6; @@ -233,32 +247,30 @@ void AliT0v1::CreateGeometry() //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); @@ -271,13 +283,13 @@ void AliT0v1::CreateGeometry() //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; @@ -288,13 +300,14 @@ void AliT0v1::CreateGeometry() 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 @@ -327,19 +340,19 @@ void AliT0v1::CreateGeometry() 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]; @@ -367,10 +380,12 @@ void AliT0v1::CreateGeometry() 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; @@ -381,16 +396,17 @@ void AliT0v1::CreateGeometry() 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"); @@ -405,40 +421,54 @@ void AliT0v1::AddAlignableVolumes() const // 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 @@ -567,13 +597,9 @@ void AliT0v1::DrawDetector() } //------------------------------------------------------------------- -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; @@ -624,9 +650,17 @@ void AliT0v1::Init() 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())); } //------------------------------------------------------------------- @@ -640,46 +674,47 @@ void AliT0v1::StepManager() 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 "<GetMCApp()->GetCurrentTrackNumber(), @@ -691,9 +726,10 @@ void AliT0v1::StepManager() gMC->IsTrackOut(), gMC->IsTrackStop(), gMC->IsNewTrack()); - */ - } //sensitive - } //photon + */ + }// trck entering + } //sensitive + }