X-Git-Url: http://git.uio.no/git/?p=u%2Fmrichter%2FAliRoot.git;a=blobdiff_plain;f=START%2FAliSTARTv1.cxx;h=90b791752970d86b61c24978ac20dac32b5ce82b;hp=649986ce2ba5d79e09f04f70c59717ade3d85266;hb=eb8325b2e5bc13cc4a0e110eecdac0fdfe9e008c;hpb=db173afc0d05e61c47de1e6ae0af77fb7e0bd263 diff --git a/START/AliSTARTv1.cxx b/START/AliSTARTv1.cxx index 649986ce2ba..90b79175297 100755 --- a/START/AliSTARTv1.cxx +++ b/START/AliSTARTv1.cxx @@ -13,6 +13,7 @@ * provided "as is" without express or implied warranty. * **************************************************************************/ +/* $Id$ */ ///////////////////////////////////////////////////////////////////// // // @@ -36,24 +37,32 @@ #include #include #include +#include "TGeoManager.h" #include "AliLog.h" #include "AliMagF.h" #include "AliRun.h" + #include "AliSTARThit.h" #include "AliSTARTv1.h" +#include "AliSTARTParameters.h" + #include "AliMC.h" +#include "AliCDBLocal.h" +#include "AliCDBStorage.h" +#include "AliCDBManager.h" +#include "AliCDBEntry.h" ClassImp(AliSTARTv1) //-------------------------------------------------------------------- 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; } //_____________________________________________________________________________ @@ -76,47 +85,43 @@ void AliSTARTv1::CreateGeometry() // + Int_t *idtmed = fIdtmed->GetArray(); + /* + 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 *idtmed = fIdtmed->GetArray(); - 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.3, 12.,6.8}; + 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 pregafter[3]={0.,1.0,0.005}; - Float_t pdivider[3]={0.,1.2,1.75}; - Float_t pdiv2[3]={0.,1.2,1.25}; - Float_t pdiv1[3]={0.6,1.2,0.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,0.09}; - Float_t psteel[3]={0.9,1.1,0.01}; - Float_t ppins[3]={0.6,1.2,0.014}; - Float_t phole[3]={0.6,1.2,0.015}; - Float_t pknob[3]={0.5,0.6,0.4}; - Float_t pknob_vac[3]={0.,0.5,0.4}; - Float_t pknob_bot[3]={0.,0.6,0.05}; - Float_t pribber[3] = {0.,1.2,2.413/2.}; - Float_t presist[3] = {0.,1.2,0.087/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 psupport6[3] = {0,1.5,0.05}; //kryshechka stakanchika Al - Float_t psupport7[3] = {1.5,1.6,0.6}; //kolechko snaruzhu stakanchika Al + 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 // Mother Volume katushka dlia krepezha vokrug truby k Absorbru AliMatrix(idrotm[901], 90., 0., 90., 90., 180., 0.); @@ -125,7 +130,7 @@ void AliSTARTv1::CreateGeometry() 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 @@ -149,7 +154,8 @@ void AliSTARTv1::CreateGeometry() ppcon[17] = 5.1; // 6 - ppcon[18] = ppcon[15]+7.05; +// ppcon[18] = ppcon[15]+6.9; + ppcon[18] = ppcon[15]+6.7; ppcon[19] = 4.9; ppcon[20] = 5.1; @@ -162,43 +168,48 @@ void AliSTARTv1::CreateGeometry() 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; // ppcon[41] = 7.6; + + gMC->Gsvolu("0SUP", "PCON", idtmed[kAir], ppcon,42); - z=-69.7;//-14.1/2; + // gMC->Gsvolu("0SUP", "PCON", idtmed[kAir], ppcon,38); + z=-zdetC; gMC->Gspos("0SUP",1,"ALIC",0.,0.,z,idrotm[901],"ONLY"); - - Float_t zdetRight=69.7,zdetLeft=350; //------------------------------------------------------------------- // START volume //------------------------------------------------------------------- @@ -206,14 +217,13 @@ void AliSTARTv1::CreateGeometry() gMC->Gsvolu("0STR","PCON",idtmed[kAir],pstartR,18); gMC->Gsvolu("0STL","TUBE",idtmed[kAir],pstart,3); - gMC->Gspos("0STR",1,"ALIC",0.,0.,-zdetRight-pstart[2],idrotm[901],"ONLY"); - gMC->Gspos("0STL",1,"ALIC",0.,0.,zdetLeft+pstart[2],0,"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 gMC->Gsvolu("0INS","TUBE",idtmed[kAir],pinstart,3); gMC->Gsvolu("0PMT","TUBE",idtmed[kAir],ppmt,3); - gMC->Gsvolu("0DIV","TUBE",idtmed[kVac],pdivider,3); gMC->Gsvolu("0SU1","TUBE",idtmed[kC],psupport1,3);//C kozhuh vnutri gMC->Gsvolu("0SU2","TUBE",idtmed[kC],psupport2,3);// snaruzhi C gMC->Gsvolu("0SU3","TUBE",idtmed[kC],psupport3,3);//kryshka perednaiai C @@ -224,8 +234,7 @@ void AliSTARTv1::CreateGeometry() gMC->Gsvolu("0SU8","TUBE",idtmed[kAl],psupport7,3);//kolechko snaruzhu stakanchika Al // first ring: 12 units of Scintillator+PMT+divider - Float_t theta = (180 / TMath::Pi()) * TMath::ATan(6.5 / zdetRight); - printf(" theta %f", theta); + Float_t theta = (180 / TMath::Pi()) * TMath::ATan(6.5 / zdetC); Float_t angle = 2 * TMath::Pi() / 12; Float_t phi[3]; @@ -247,48 +256,30 @@ void AliSTARTv1::CreateGeometry() z=-pstart[2]+pinstart[2]+0.2; gMC->Gspos ("0INS", is + 1, "0STR", x, y, z, idrotm[902 + is], "ONLY"); gMC->Gspos ("0INS", is + 13, "0STL", x, y, z, 0, "ONLY"); - /* - x = 9.1 * TMath::Sin(angle/2+is * angle); - y = 9.1 * TMath::Cos(angle/2+is * angle); - - gMC->Gspos ("0INS", is + 25, "0STL", x, y, z, 0, "ONLY"); - */ } x=0; y=0; - // z=-pinstart[2]+ppmt[2]+2.*psupport6[2]+0.1; - z=-pinstart[2]+ppmt[2]; + z=-pinstart[2]+ppmt[2]+psupport6[2]*2; gMC->Gspos("0PMT",1,"0INS",x,y,z,0,"ONLY"); - // z=z+pdivider[2]+ppmt[2]; - // gMC->Gspos("0DIV",1,"0INS",x,y,z,0,"ONLY"); - // PMT // Entry window (glass) gMC->Gsvolu("0TOP","TUBE",idtmed[kOpGlass],ptop,3); //glass - // gMC->Gsvolu("0TOP","TUBE",idtmed[12],ptop,3); //lucite 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 gMC->Gsvolu ("0REG", "TUBE", idtmed[kOpGlassCathode], preg, 3); z = -ppmt[2] + 2 * ptop[2] + preg[2]; gMC->Gspos ("0REG", 1, "0PMT", 0, 0, z, 0, "ONLY"); - //optical volume special to detect photons in cathode - // gMC->Gsvolu ("0RE1", "TUBE", idtmed[kOpAirNext], pregafter, 3); - // z = -ppmt[2] + 2 * ptop[2] + 2*preg[2] + pregafter[2]; - // gMC->Gspos ("0RE1", 1, "0PMT", 0, 0, z, 0, "ONLY"); - - // Bottom glass + // Bottom glass gMC->Gsvolu("0BOT","TUBE",idtmed[kGlass],pbot,3); z=ppmt[2]-pbot[2]; - if(fDebug) printf("%s: Z bottom %f\n",ClassName(),z); gMC->Gspos("0BOT",1,"0PMT",0,0,z,0,"ONLY"); // Side cylinder glass gMC->Gsvolu("0OUT","TUBE",idtmed[kGlass],pglass,3); @@ -297,58 +288,18 @@ void AliSTARTv1::CreateGeometry() //PMT electrodes support structure gMC->Gsvolu("0CER","TUBE",idtmed[kCer],pcer,3); gMC->Gsvolu("0STE","TUBE",idtmed[kSteel],psteel,3); - z=-ppmt[2]+2*ptop[2]+0.3;; - for (is=1; is<=15; is++) - { - z=z+psteel[2]+pcer[2]; - gMC->Gspos("0CER",is,"0PMT",0,0,z,0,"ONLY"); - z=z+psteel[2]+pcer[2]; - gMC->Gspos("0STE",is,"0PMT",0,0,z,0,"ONLY"); - } - - // Divider - // Knob at the bottom of PMT baloon - - gMC->Gsvolu("0NB","TUBE",idtmed[6],pknob,3); - z=-pdivider[2]+pknob[2]; - gMC->Gspos("0NB",1,"0DIV",0,0,z,0,"ONLY"); - gMC->Gsvolu("0KB","TUBE",idtmed[kGlass],pknob_bot,3); - z=-pdivider[2]+2*pknob[2]+pknob_bot[2]; - gMC->Gspos("0KB",1,"0DIV ",0,0,z,0,"ONLY"); - gMC->Gsvolu("0VAC","TUBE",idtmed[kVac],pknob_vac,3); - z=-pdivider[2]+pknob_vac[2]; - gMC->Gspos("0VAC",1,"0DIV",0,0,z,0,"ONLY"); - //Steel pins + pin holes - gMC->Gsvolu("0PIN","TUBE",idtmed[kSteel],ppins,3); - z=-pdivider[2]+ppins[2]; - gMC->Gspos("0PIN",1,"0DIV",0,0,z,0,"ONLY"); - gMC->Gsvolu("0HOL","TUBE",idtmed[kBrass],phole,3); - z=-pdivider[2]+2*ppins[2]+phole[2]; - gMC->Gspos("0HOL",1,"0DIV",0,0,z,0,"ONLY"); - - //Socket - gMC->Gsvolu("0V1","TUBE",idtmed[kCer],pdiv1,3); - z=-pdivider[2]+pdiv1[2]; - gMC->Gspos("0V1",1,"0DIV",0,0,z,0,"ONLY"); - //Resistors - gMC->Gsvolu("0V2","TUBE",idtmed[kAir],pdiv2,3); - z=pdivider[2]-pdiv2[2]; - gMC->Gspos("0V2",1,"0DIV",0,0,z,0,"ONLY"); - gMC->Gsvolu("0RS","TUBE",idtmed[kCer],presist,3); - z=-pdiv2[2]+presist[2]; - gMC->Gspos("0RS",1,"0V2",0,0,z,0,"ONLY"); - gMC->Gsvolu("0RB","TUBE",idtmed[kRibber],pribber,3); - z=pdiv2[2]-pribber[2]; - gMC->Gspos("0RB",1,"0V2",0,0,z,0,"ONLY"); - - + z=-ppmt[2]+2*ptop[2]+0.3 + pcer[2]; + gMC->Gspos("0CER",1,"0PMT",0,0,z,0,"ONLY"); + z +=psteel[2]+pcer[2]; + gMC->Gspos("0STE",1,"0PMT",0,0,z,0,"ONLY"); + //Support left side z=-pstart[2]+psupport1[2]+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; gMC->Gspos("0SU3",1,"0STR",0,0,z,0,"ONLY"); //peredniaia kryshka - z=-pstart[2]+2.*psupport1[2]+0.1; + z=-pstart[2]+2.*psupport1[2]-0.05;//+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]; @@ -375,13 +326,13 @@ void AliSTARTv1::CreateGeometry() 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); @@ -391,14 +342,14 @@ void AliSTARTv1::CreateGeometry() 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"); @@ -411,6 +362,47 @@ void AliSTARTv1::CreateGeometry() } //------------------------------------------------------------------------ +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(); @@ -466,9 +458,9 @@ void AliSTARTv1::CreateMaterials() Float_t densupport=0.1; //*** Definition Of avaible START materials *** - AliMaterial(0, "START Steel$", 55.850,26.,7.87,1.76,999); - AliMaterial(1, "START Vacuum$", 1.e-16,1.e-16,1.e-16,1.e16,999); - AliMixture(2, "START Air$", aAir, zAir, dAir,4,wAir); + 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(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); @@ -564,7 +556,7 @@ void AliSTARTv1::CreateMaterials() gMC->SetCerenkov (idtmed[kOpAir], kNbins, aPckov,absorAir , efficAll,rindexAir ); gMC->SetCerenkov (idtmed[kOpAirNext], kNbins, aPckov,absorbCathodeNext , efficAll, rindexCathodeNext); - if(fDebug) cout<IsTrackAlive()) return; // particle has disappeared -// If particles is photon then ... + + // If particles is photon then ... if (gMC->TrackPid() == 50000050) {