X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=T0%2FAliT0v1.cxx;h=fe10a622a057ffbc19d8da7303b30350d264fb00;hb=dfa0c20cf4939ab1ddb6a336cb4be5e599762289;hp=4a099ecc6563a6f12759c6b8cceff7467df0715f;hpb=1750718614d5536d45201917e805e693090ef99f;p=u%2Fmrichter%2FAliRoot.git diff --git a/T0/AliT0v1.cxx b/T0/AliT0v1.cxx index 4a099ecc656..fe10a622a05 100644 --- a/T0/AliT0v1.cxx +++ b/T0/AliT0v1.cxx @@ -31,18 +31,17 @@ #include #include -#include -#include -#include -#include -#include -#include +#include "TGeoCompositeShape.h" #include "TGeoManager.h" #include "TGeoMatrix.h" #include "TGeoPcon.h" #include "TGeoTube.h" -#include "TGeoCompositeShape.h" +#include #include +#include +#include +#include +#include #include "AliLog.h" #include "AliMagF.h" @@ -57,6 +56,7 @@ #include "AliCDBStorage.h" #include "AliCDBManager.h" #include "AliCDBEntry.h" +#include "AliTrackReference.h" ClassImp(AliT0v1) @@ -123,14 +123,16 @@ void AliT0v1::CreateGeometry() //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.5005,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 @@ -138,12 +140,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.5,4.505,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.5,1.51,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.5004,1.51,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.); @@ -211,7 +213,7 @@ void AliT0v1::CreateGeometry() // 14 - ppcon[39] = 19.91; + ppcon[39] = 19.99; ppcon[40] = 3.15; ppcon[41] = 7.6; @@ -246,34 +248,32 @@ void AliT0v1::CreateGeometry() //non-absorber side support and T0A !!!!!!!! - // TGeoPcon * supPgon = new TGeoPcon("supPgon",0.,360.,360,4); - TGeoPcon * supPgon = new TGeoPcon("supPgon",0.,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("hole", 0, 1.51, 6.5); + new TGeoTube("0HOLE", 0, 1.51, 6.5); TGeoTranslation *tr [12]; Double_t angle = 2 * TMath::Pi() / 12; - Char_t nameTr[40]; + // Char_t nameTr[40]; + TString nameTr; for (Int_t itr=0; itr<12; itr++) { - sprintf (nameTr,"tr%i",itr+1); + // sprintf (nameTr,"0TR%i",itr+1); + nameTr = Form("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] = new TGeoTranslation(nameTr.Data(),x,y,6.5); tr[itr]->RegisterYourself(); 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); @@ -310,7 +310,7 @@ void AliT0v1::CreateGeometry() x=0; y=0; // z=-pinstart[2]+ppmt[2]+psupport6[2]*2; - z=-pinstart[2]+ppmt[2]; //+psupport6[2]; + z=-pinstart[2]+ppmt[2]+0.08; //+psupport6[2]; gMC->Gspos("0PMT",1,"0INS",x,y,z,0,"ONLY"); // PMT @@ -343,19 +343,19 @@ void AliT0v1::CreateGeometry() gMC->Gspos("0STE",1,"0PMT",0,0,z,0,"ONLY"); //Support absorber (C) side - z=-pstart[2]+psupport1[2]- 0.05; //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]-0.1; + 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]; @@ -383,10 +383,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; @@ -397,13 +399,14 @@ 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,"MANY"); @@ -463,35 +466,12 @@ void AliT0v1::AddAlignableVolumes() const 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";} - 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())); - } - */ } //------------------------------------------------------------------------ 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 @@ -500,7 +480,8 @@ void AliT0v1::CreateMaterials() Float_t zAir[4]={6.,7.,8.,18.}; Float_t wAir[4]={0.000124,0.755267,0.231781,0.012827}; Float_t dAir = 1.20479E-3; - + Float_t dAir1 = 1.20479E-11; + // Scintillator CH Float_t ascin[2]={1.01,12.01}; Float_t zscin[2]={1,6}; @@ -542,7 +523,7 @@ void AliT0v1::CreateMaterials() //*** Definition Of avaible T0 materials *** AliMaterial(0, "Steel$", 55.850,26.,7.87,1.76,999); - AliMaterial(1, "Vacuum$", 1.e-16,1.e-16,1.e-16,1.e16,999); + AliMixture(1, "Vacuum$", aAir, zAir, dAir1,4,wAir); AliMixture(2, "Air$", aAir, zAir, dAir,4,wAir); AliMaterial(10, "CarbonPlastic$", 12.01, 6.0, 2.26, 18.8,999); AliMaterial(11, "Aliminium$", 26.98, 13.0, 2.7, 8.9,999); @@ -592,32 +573,6 @@ void AliT0v1::CreateMaterials() } -//--------------------------------------------------------------------- -void AliT0v1::DrawDetector() -{ -// -// Draw a shaded view of the Forward multiplicity detector version 0 -// - - //Set ALIC mother transparent - gMC->Gsatt("ALIC","SEEN",0); - // - //Set volumes visible - // gMC->Gsatt("0STR","SEEN",0); - // gMC->Gsatt("0INS","SEEN",0); - // gMC->Gsatt("0PMT","SEEN",1); - // gMC->Gsatt("0DIV","SEEN",1); - // - gMC->Gdopt("hide","off"); - gMC->Gdopt("shad","on"); - gMC->SetClipBox("."); - gMC->SetClipBox("*",0,1000,-1000,1000,-1000,1000); - gMC->DefaultRange(); - gMC->Gdraw("alic",90,0,0,-35,9.5,.6,0.6); - //gMC->Gdraw("alic",0,0,0,10,9.5,.8,0.8); //other side view - gMC->Gdhead(1111,"T-Zero detector"); - gMC->Gdopt("hide","off"); -} //------------------------------------------------------------------- void AliT0v1::DefineOpticalProperties() @@ -629,7 +584,8 @@ void AliT0v1::DefineOpticalProperties() const Int_t kNbins=31; Float_t rindexSiO2[kNbins], efficAll[kNbins], rindexAir[kNbins], absorAir[kNbins],rindexCathodeNext[kNbins], absorbCathodeNext[kNbins]; - + Double_t efficMet[kNbins], aReflMet[kNbins]; + // quartz 20mm Float_t aAbsSiO2[kNbins]={29.0, 28.6, 28.3, 27.7, 27.3, 26.7, 26.4, 25.9, 25.3, 24.9, 24.5, 23.7, @@ -644,6 +600,13 @@ void AliT0v1::DefineOpticalProperties() 5.8, 5.97, 6.16, 6.36, 6.57, 6.8, 7.04, 7.3, 7.58, 7.89, 8.22, 8.57, 8.97, 9.39 }; + Double_t dPckov[kNbins] ={3.87, 3.94, 4.02, 4.11, 4.19, 4.29, 4.38, + 4.48, 4.58, 4.69, 4.81, 4.93, + 5.05, 5.19, 5.33, 5.48, 5.63, + 5.8, 5.97, 6.16, 6.36, 6.57, + 6.8, 7.04, 7.3, 7.58, 7.89, + 8.22, 8.57, 8.97, 9.39 }; + /* Float_t effCathode[kNbins]={0.11, 0.13, 0.15, 0.16, 0.18, 0.19, 0.20, 0.21, 0.22, 0.23, 0.24, 0.26, @@ -653,26 +616,37 @@ void AliT0v1::DefineOpticalProperties() 0.17, 0.17, 0.2, 0.23}; */ // Float_t aAbsSiO2[kNbins]; //quartz 30mm - for(i=0;iSetCerenkov (idtmed[kOpGlass], kNbins, aPckov, aAbsSiO2, efficAll, rindexSiO2 ); + gMC->SetCerenkov (idtmed[kOpGlass], kNbins, aPckov, aAbsSiO2, efficAll, rindexSiO2 ); // gMC->SetCerenkov (idtmed[kOpGlassCathode], kNbins, aPckov, aAbsSiO2, effCathode, rindexSiO2 ); 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); + + //Define a boarder for radiator optical properties + gMC->DefineOpSurface("surfRd", kUnified /*kGlisur*/,kDielectric_metal,kPolished, 0.); + gMC->SetMaterialProperty("surfRd", "EFFICIENCY", kNbins, dPckov, efficMet); + gMC->SetMaterialProperty("surfRd", "REFLECTIVITY", kNbins, dPckov, aReflMet); + gMC->SetBorderSurface("0TOPborder", "0TOP",1,"0TOO",1, "surfRd"); + + } //------------------------------------------------------------------- @@ -697,46 +671,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(), @@ -748,9 +723,10 @@ void AliT0v1::StepManager() gMC->IsTrackOut(), gMC->IsTrackStop(), gMC->IsNewTrack()); - */ - } //sensitive - } //photon + */ + }// trck entering + } //sensitive + }