X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=HMPID%2FAliHMPIDv3.cxx;h=fd84ee67581b666c947d1f52599f87eab6bc4d77;hb=e684830eb643fe153fb10d5e34c4cca214993aef;hp=5361cba59ef4104fdc85d585ee0e1d551698f8e3;hpb=db53fc59b89b339ee5cfac1d6b92ed2c07ddca53;p=u%2Fmrichter%2FAliRoot.git diff --git a/HMPID/AliHMPIDv3.cxx b/HMPID/AliHMPIDv3.cxx index 5361cba59ef..fd84ee67581 100644 --- a/HMPID/AliHMPIDv3.cxx +++ b/HMPID/AliHMPIDv3.cxx @@ -29,16 +29,18 @@ #include //StepManager() #include //CreateMaterials() #include //CreateMaterials() +#include "AliGeomManager.h" //AddAlignableVolumes() +#include //CreateMaterials() +#include //CreateMaterials() #include //DefineOpticalProperties() #include //DefineOpticalProperties() -#include //IsLostByFresnel() -#include //CreateMaterials() -#include //CreateMaterials() +#include //CradleBaseVolume() +#include #include //AddAlignableVolumes() #include //CradleBaseVolume() -#include //CradleBaseVolume() +#include //IsLostByFresnel() #include //StepManager() -#include "AliGeomManager.h" //AddAlignableVolumes() +#include ClassImp(AliHMPIDv3) //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -60,7 +62,7 @@ void AliHMPIDv3::AddAlignableVolumes()const for(Int_t iCh=AliHMPIDParam::kMinCh;iCh<=AliHMPIDParam::kMaxCh;iCh++) { modUID = AliGeomManager::LayerToVolUID(idHMPID,modnum++); if(!gGeoManager->SetAlignableEntry(Form("/HMPID/Chamber%i",iCh),Form("ALIC_1/Hmp%i_0",iCh),modUID)) - AliFatal("AliHMPIDv3::Unable to set alignable entry!!"); //aligment without AliCluster3D + AliError("AliHMPIDv3::Unable to set alignable entry!!"); //aligment without AliCluster3D //Get Tracking To Local matricies for alignment with AliCluster3D TGeoPNEntry *eCh = gGeoManager->GetAlignableEntryByUID(modUID); TGeoHMatrix *globMatrix = eCh->GetGlobalOrig(); @@ -99,8 +101,8 @@ void AliHMPIDv3::CreateMaterials() Int_t matId=0; //tmp material id number Int_t unsens = 0, sens=1; //sensitive or unsensitive medium - Int_t itgfld = gAlice->Field()->Integ(); //type of field intergration 0 no field -1 user in guswim 1 Runge Kutta 2 helix 3 const field along z - Float_t maxfld = gAlice->Field()->Max(); //max field value + Int_t itgfld = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Integ(); //type of field intergration 0 no field -1 user in guswim 1 Runge Kutta 2 helix 3 const field along z + Float_t maxfld = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Max(); //max field value Float_t tmaxfd = -10.0; //max deflection angle due to magnetic field in one step Float_t deemax = - 0.2; //max fractional energy loss in one step Float_t stemax = - 0.1; //max step allowed [cm] @@ -131,13 +133,11 @@ void AliHMPIDv3::CreateMaterials() AliMaterial(++matId,"W" ,aW ,zW ,dW ,radW ,absW ); AliMedium(kW ,"W" , matId, unsens, itgfld, maxfld, tmaxfd, stemax, deemax, epsil, stmin); AliMaterial(++matId,"Al" ,aAl ,zAl ,dAl ,radAl ,absAl ); AliMedium(kAl ,"Al" , matId, unsens, itgfld, maxfld, tmaxfd, stemax, deemax, epsil, stmin); AliMaterial(++matId,"Ar" ,aAr ,zAr ,dAr ,radAr ,absAr ); AliMedium(kAr ,"Ar" , matId, unsens, itgfld, maxfld, tmaxfd, stemax, deemax, epsil, stmin); - - InitProperties(); }//void AliHMPID::CreateMaterials() //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -void AliHMPIDv3::InitProperties() -{ +//void AliHMPIDv3::InitProperties() +//{ /* * HMPID * ==== @@ -155,7 +155,7 @@ HMPID 9 1.e-5 1.e-5 1.e-4 -1. 1.e-4 -1. -1. 5.e-5 5.e-5 -1. -1 -1 HMPID 6 1.e-5 1.e-5 1.e-4 -1. 1.e-4 -1. -1. 5.e-5 5.e-5 -1. -1 -1 -1 -1 1 -1 1 -1 -1 -1 -1 * PCB backplane (> 50 keV delta-electrons) HMPID 12 1.e-5 1.e-5 1.e-4 -1. 1.e-4 -1. -1. 5.e-5 5.e-5 -1. -1 -1 -1 -1 1 -1 1 -1 -1 -1 -1 -*/ + Int_t *idtmed = fIdtmed->GetArray(); Int_t imed; @@ -236,7 +236,7 @@ HMPID 12 1.e-5 1.e-5 1.e-4 -1. 1.e-4 -1. -1. 5.e-5 5.e-5 -1. -1 -1 gMC->Gstpar(idtmed[imed], "DRAY",1); gMC->Gstpar(idtmed[imed], "LOSS",1); -} +}*/ //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ void AliHMPIDv3::CreateGeometry() { @@ -335,8 +335,8 @@ TGeoVolume * AliHMPIDv3::CreateChamber(Int_t number) TGeoVolume *proxgap1 = gGeoManager->MakeBox("Hproxgap1",ch4,1407*mm/2 , 1366.00*mm/2 ,(9.-7.5)*mm/2.);//methane volume between quartz and fr4 - TGeoVolume *proxgap2 = gGeoManager->MakeBox("Hproxgap2",ch4,1407*mm/2 , 1366.00*mm/2 ,(81.7-6.2-9.-7.5)*mm/2.);//methane volume between fr4 and Hgap - + TGeoVolume *proxgap2 = gGeoManager->MakeBox("Hproxgap2",ch4,1407*mm/2 , 1366.00*mm/2 ,(81.7-6.2-34.-9.-7.5)*mm/2.);//methane volume between fr4 and Hgap(tot height(81.7) - Hsec (6.2) - proxygap2 (34) - upper bound of fr4 (9+7.5)) + // ^ Y z= z=-12mm z=98.25mm ALIC->7xHmp (virtual)-->1xHsbo (virtual) --->2xHcov (real) 2072P1 // | ____________________________________ | |-->1xHhon (real) 2072P1 @@ -393,11 +393,10 @@ TGeoVolume * AliHMPIDv3::CreateChamber(Int_t number) fr1->AddNode(fr1perUpBig,1,new TGeoTranslation(0.,-(1385-37-35)*mm/2.,(58.3*mm-20.00*2*mm-10.0*mm)/2.)); fr1->AddNode(fr1perUpSma,1,new TGeoTranslation(-(1426-37-35)*mm/2.,0.,(58.3*mm-20.00*2*mm-10.0*mm)/2.)); - fr1->AddNode(fr1perDowBig,0,new TGeoTranslation(0.,(1385-37-46)*mm/2.,(-58.3*mm+2.3*mm)/2.)); - fr1->AddNode(fr1perDowSma,0,new TGeoTranslation((1426-37-46)*mm/2.,0.,(-58.3*mm+2.3*mm)/2.)); - fr1->AddNode(fr1perDowBig,1,new TGeoTranslation(0.,-(1385-37-46)*mm/2.,(-58.3*mm+2.3*mm)/2.)); - fr1->AddNode(fr1perDowSma,1,new TGeoTranslation(-(1426-37-46)*mm/2.,0.,(-58.3*mm+2.3*mm)/2.)); - + fr1->AddNode(fr1perDowBig,0,new TGeoTranslation(0.,(1385-37)*mm/2.,(-58.3*mm+2.3*mm)/2.)); + fr1->AddNode(fr1perDowSma,0,new TGeoTranslation((1426-37)*mm/2.,0.,(-58.3*mm+2.3*mm)/2.)); + fr1->AddNode(fr1perDowBig,1,new TGeoTranslation(0.,-(1385-37)*mm/2.,(-58.3*mm+2.3*mm)/2.)); + fr1->AddNode(fr1perDowSma,1,new TGeoTranslation(-(1426-37)*mm/2.,0.,(-58.3*mm+2.3*mm)/2.)); fr1->AddNode(ppf,4,new TGeoTranslation(-335*mm,433*mm,(-58.3+38.3)*mm/2.)); fr1->AddNode(ppf,5,new TGeoTranslation(335*mm,433*mm,(-58.3+38.3)*mm/2.)); fr1->AddNode(ppf,2,new TGeoTranslation(-335*mm,0.,(-58.3+38.3)*mm/2.)); fr1->AddNode(ppf,3,new TGeoTranslation(335*mm,0.,(-58.3+38.3)*mm/2.)); @@ -414,10 +413,11 @@ TGeoVolume * AliHMPIDv3::CreateChamber(Int_t number) TGeoVolume *busext = gGeoManager->MakeTubs("Hbusext",csi,29*mm,30*mm,40*mm/2.,0.,180); //in Hext TGeoVolume *ext = new TGeoVolumeAssembly("Hext"); + rect->AddNode(gassipl2,1,new TGeoTranslation(0.,0.,0)); + for(Int_t hor=0; hor< 10; hor++){ for(Int_t vert=0; vert < 8; vert++){ cufoil->AddNode(rect,hor+vert*10,new TGeoTranslation(offsetx+ 48.*mm/2 + hor*interdistx-662.*mm/2,offsety + 19.*mm/2 + vert*interdisty-425.*mm/2.,0.)); - cufoil->AddNode(gassipl2,hor+vert*10,new TGeoTranslation(offsetx+ 48.*mm/2 + hor*interdistx-662.*mm/2,offsety + 19.*mm/2 + vert*interdisty-425.*mm/2.,0.)); fr1upcard->AddNode(gassipl3,hor+vert*10,new TGeoTranslation(offsetx+ 48.*mm/2 + hor*interdistx-662.*mm/2,offsety + 19.*mm/2 + vert*interdisty-425.*mm/2.,0.)); ext->AddNode(gassipl4,hor+vert*10,new TGeoTranslation(offsetx+ 48.*mm/2 + hor*interdistx-662.*mm/2,offsety + 19.*mm/2 + vert*interdisty-425.*mm/2.,0)); @@ -441,7 +441,7 @@ TGeoVolume * AliHMPIDv3::CreateChamber(Int_t number) hmp->AddNode(proxgap1,0,new TGeoTranslation(0.,0.,(9.-7.5)*mm/2.));//due to the TGeoVolumeAssembly definition the ch4 volume must be inserted around the collecting wires - hmp->AddNode(proxgap2,0,new TGeoTranslation(0.,0.,(9+7.5)*mm + (81.7-6.2-9.-7.5)*mm/2.)); + hmp->AddNode(proxgap2,0,new TGeoTranslation(0.,0.,(9+7.5 +34)*mm + (81.7-6.2-34.-9.-7.5)*mm/2.));// tot height(81.7) - Hsec - proxygap2 - top edge fr4 at (9+7.5) mm // ^ Y single cell 5.5mm CH4 = 1*mm CsI + 4.45*mm CsI x cath +0.05*mm safety margin // | ______________________________ @@ -492,7 +492,8 @@ TGeoVolume * AliHMPIDv3::CreateChamber(Int_t number) ppf->AddNode(smo,7,new TGeoTranslation(+ 65.0*mm,+151.875*mm, 0.*mm)); -hmp->AddNode(fr3,1,new TGeoTranslation(0.,0.,(80.-29.)*mm-34.*mm/2)); +//hmp->AddNode(fr3,1,new TGeoTranslation(0.,0.,(81.7-29.)*mm-34.*mm/2)); + hmp->AddNode(fr3,1,new TGeoTranslation(0.,0.,(9.+7.5)*mm+34.*mm/2)); fr3->AddNode( fr3up,1, new TGeoTranslation(0., 0., 7*mm)); fr3->AddNode(fr3down,1,new TGeoTranslation(0., 0., -10*mm)); @@ -507,16 +508,18 @@ void AliHMPIDv3::Init() // Arguments: none // Returns: none AliDebug(1,"Start v2 HMPID."); - fIdPad = gMC->VolId("Hpad"); - fIdCell = gMC->VolId("Hcel"); + //InitProperties(); AliDebug(1,"Stop v2 HMPID."); } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ void AliHMPIDv3::DefineOpticalProperties() { + AliDebug(1,""); + // Optical properties definition. - const Int_t kNbins=30; //number of photon energy points - Float_t emin=5.5,emax=8.5; //Photon energy range,[eV] + const Int_t kNbins=30; //number of photon energy points + Float_t emin=5.5,emax=8.5; //Photon energy range,[eV] + Float_t deltaE = (emax - emin)/kNbins; Float_t aEckov [kNbins]; Double_t dEckov [kNbins]; Float_t aAbsRad[kNbins], aAbsWin[kNbins], aAbsGap[kNbins], aAbsMet[kNbins]; @@ -539,7 +542,7 @@ void AliHMPIDv3::DefineOpticalProperties() Bool_t isFlatIdx=title.Contains("FlatIdx"); for(Int_t i=0;iEval(eV); (isFlatIdx)? aIdxRad[i]=1.292: aIdxRad[i]=pRaIF->Eval(eV,20); @@ -548,7 +551,7 @@ void AliHMPIDv3::DefineOpticalProperties() aQeAll[i] =1; //QE for all other materials except for PC must be 1. aAbsMet[i] =0.0001; aIdxMet[i]=0; //metal ref idx must be 0 in order to reflect photon aIdxPc [i]=1; aQePc [i]=pQeF->Eval(eV); //PC ref idx must be 1 in order to apply photon to QE conversion - dQePc [i]=pQeF->Eval(eV); + dQePc [i]= pQeF->Eval(eV); dReflMet[i] = 0.; // no reflection on the surface of the pc (?) } gMC->SetCerenkov((*fIdtmed)[kC6F14] , kNbins, aEckov, aAbsRad , aQeAll , aIdxRad ); @@ -560,10 +563,11 @@ void AliHMPIDv3::DefineOpticalProperties() gMC->SetCerenkov((*fIdtmed)[kAl] , kNbins, aEckov, aAbsMet , aQeAll , aIdxMet ); // Define a skin surface for the photocatode to enable 'detection' in G4 - gMC->DefineOpSurface("surfPc", kGlisur /*kUnified*/,kDielectric_metal,kPolished, 0.); - gMC->SetMaterialProperty("surfPc", "EFFICIENCY", kNbins, dEckov, dQePc); - gMC->SetMaterialProperty("surfPc", "REFLECTIVITY", kNbins, dEckov, dReflMet); - gMC->SetSkinSurface("skinPc", "Rpc", "surfPc"); + for(Int_t i=0; i<7; i++){ + gMC->DefineOpSurface(Form("surfPc%i",i), kGlisur /*kUnified*/,kDielectric_metal,kPolished, 0.); + gMC->SetMaterialProperty(Form("surfPc%i",i), "EFFICIENCY", kNbins, dEckov, dQePc); + gMC->SetMaterialProperty(Form("surfPc%i",i), "REFLECTIVITY", kNbins, dEckov, dReflMet); + gMC->SetSkinSurface(Form("skinPc%i",i), Form("Hpad%i",i),Form("surfPc%i",i)); } delete pRaAF;delete pWiAF;delete pGaAF; delete pRaIF; delete pWiIF; delete pGaIF; delete pQeF; } @@ -602,7 +606,7 @@ void AliHMPIDv3::GenFee(Float_t qtot) gMC->GetRandom()->RndmArray(2,ranf); //Sample direction cthf=ranf[0]*2-1.0; if(cthf<0) continue; - sthf = TMath::Sqrt((1 - cthf) * (1 + cthf)); + sthf = TMath::Sqrt((1. - cthf) * (1. + cthf)); phif = ranf[1] * 2 * TMath::Pi(); if(Double_t randomNumber=gMC->GetRandom()->Rndm()<=0.57) @@ -742,7 +746,7 @@ Float_t AliHMPIDv3::Fresnel(Float_t ene,Float_t pdoti, Bool_t pola) //FORMULAE FROM HANDBOOK OF OPTICS, 33.23 OR //W.R. HUNTER, J.O.S.A. 54 (1964),15 , J.O.S.A. 55(1965),1197 - Float_t sinin=TMath::Sqrt(1-pdoti*pdoti); + Float_t sinin=TMath::Sqrt((1.-pdoti)*(1.+pdoti)); Float_t tanin=sinin/pdoti; Float_t c1=cn*cn-ck*ck-sinin*sinin; @@ -830,12 +834,13 @@ void AliHMPIDv3::StepHistory() } TString flag="fanny combination"; - if(gMC->IsTrackAlive()) - if(gMC->IsTrackEntering()) flag="enters to"; - else if(gMC->IsTrackExiting()) flag="exits from"; - else if(gMC->IsTrackInside()) flag="inside"; - else - if(gMC->IsTrackStop()) flag="stoped in"; + if(gMC->IsTrackAlive()) { + if(gMC->IsTrackEntering()) flag="enters to"; + else if(gMC->IsTrackExiting()) flag="exits from"; + else if(gMC->IsTrackInside()) flag="inside"; + } else { + if(gMC->IsTrackStop()) flag="stopped in"; + } Int_t vid=0,copy=0; TString path=gMC->CurrentVolName(); path.Prepend("-");path.Prepend(gMC->CurrentVolOffName(1));//current volume and his mother are always there @@ -889,9 +894,10 @@ void AliHMPIDv3::StepManager() Int_t pid= gMC->TrackPid(); //take PID Float_t etot= gMC->Etot(); //total hpoton energy, [GeV] Double_t x[3]; gMC->TrackPosition(x[0],x[1],x[2]); //take MARS position at entrance to PC - TString tmpname = volname; tmpname.Remove(0,4); Int_t idch = tmpname.Atoi(); //retrieve the chamber number - Float_t xl,yl; AliHMPIDParam::Instance()->Mars2Lors(idch,x,xl,yl); //take LORS position - new((*fHits)[fNhits++])AliHMPIDHit(idch,etot,pid,tid,xl,yl,x); //HIT for photon, position at P, etot will be set to Q + Float_t hitTime= (Float_t)gMC->TrackTime(); //hit formation time + TString tmpname = volname; tmpname.Remove(0,4); Int_t idch = tmpname.Atoi(); //retrieve the chamber number + Float_t xl,yl; AliHMPIDParam::Instance()->Mars2Lors(idch,x,xl,yl); //take LORS position + new((*fHits)[fNhits++])AliHMPIDHit(idch,etot,pid,tid,xl,yl,hitTime,x); //HIT for photon, position at P, etot will be set to Q if(fDoFeed) GenFee(etot); //generate feedback photons etot is modified in hit ctor to Q of hit }//photon hit PC and DE >0 }//photon hit PC @@ -914,13 +920,14 @@ void AliHMPIDv3::StepManager() Int_t tid= gMC->GetStack()->GetCurrentTrackNumber(); //take TID Int_t pid= gMC->TrackPid(); //take PID Double_t out[3]; gMC->TrackPosition(out[0],out[1],out[2]); //take MARS position at exit + Float_t hitTime= (Float_t)gMC->TrackTime(); //hit formation time out[0]=0.5*(out[0]+in[0]); // out[1]=0.5*(out[1]+in[1]); //take hit position at the anod plane out[2]=0.5*(out[2]+in[2]); TString tmpname = volname; tmpname.Remove(0,4); Int_t idch = tmpname.Atoi(); //retrieve the chamber number Float_t xl,yl;AliHMPIDParam::Instance()->Mars2Lors(idch,out,xl,yl); //take LORS position if(eloss>0) { - new((*fHits)[fNhits++])AliHMPIDHit(idch,eloss,pid,tid,xl,yl,out); //HIT for MIP, position near anod plane, eloss will be set to Q + new((*fHits)[fNhits++])AliHMPIDHit(idch,eloss,pid,tid,xl,yl,hitTime,out); //HIT for MIP, position near anod plane, eloss will be set to Q if(fDoFeed) GenFee(eloss); //generate feedback photons } }else //just going inside @@ -1011,10 +1018,10 @@ TGeoVolume* AliHMPIDv3::CreateCradle() Double_t params[10]={0.5,10.,24.,-1,5.2,1.5,3.5,8.5,3.8,0.}; TGeoMedium *med =gGeoManager->GetMedium("HMPID_Al"); - TGeoMedium *air =gGeoManager->GetMedium("HMPID_Air"); TGeoVolume *cradle=new TGeoVolumeAssembly("Hcradle"); - Double_t baselong[7]={6037*mm-2*60*mm, 6037*mm-2*60*mm,60*mm,0.,100*mm,10*mm,10*mm};//2CRE2112P3 + //Double_t baselong[7]={6037*mm-2*60*mm, 6037*mm-2*60*mm,60*mm,0.,100*mm,10*mm,10*mm};//2CRE2112P3 + Double_t baselong[7]={6037*mm-2*100*mm, 6037*mm-2*100*mm,60*mm,0.,100*mm,10*mm,10*mm};//2CRE2112P3 TGeoVolume *lbase = CradleBaseVolume(med,baselong,"cradleLbase"); lbase->SetLineColor(kGray); @@ -1027,7 +1034,7 @@ TGeoVolume* AliHMPIDv3::CreateCradle() Double_t height = 30.*mm; //30 = 2*(1488/2-729) (2CRE2112P3) Double_t tubeheight = 50.*mm; Double_t heightred = 5.*mm; Double_t zred = 5.*mm; Double_t oneshift = tubeheight/TMath::Tan(TMath::DegToRad()*20.)+(1458.-35)*mm/2 - (1607-35)*mm/2; - Double_t linclined[7] = {1458.*mm-params[6],1607.*mm-params[6],tubeheight,oneshift, height ,heightred,zred}; //3.5 is for not correct measurements in 2CRE2112P3<=> 597!=inclined*sin(20) + Double_t linclined[7] = {1458.*mm-params[6]-0.5,1607.*mm-params[6]-0.5,tubeheight,oneshift, height ,heightred,zred}; //3.5 is for not correct measurements in 2CRE2112P3<=> 597!=inclined*sin(20) TGeoVolume *inclin = CradleBaseVolume(med,linclined,"inclinedbar"); inclin->SetLineColor(kGray); Double_t lhorizontal[7] = {1641.36*mm+params[7],1659.*mm+params[7],tubeheight,0, height ,heightred,zred}; @@ -1035,18 +1042,18 @@ TGeoVolume* AliHMPIDv3::CreateCradle() horiz->SetLineColor(kGray); //inner bars, they are named as the numbering in 2CRE2112P3 - Double_t fourshift = tubeheight/TMath::Tan(TMath::DegToRad()*55.); - Double_t lfour[7] = {594*mm,594*mm,tubeheight,fourshift,height,heightred,zred}; + Double_t fourshift = tubeheight/TMath::Tan(TMath::DegToRad()*55.); + Double_t lfour[7] = {592*mm,592*mm,tubeheight,fourshift,height,heightred,zred}; TGeoVolume *four = CradleBaseVolume(med,lfour,"bar4"); four->SetLineColor(kGray); Double_t fiveshift = tubeheight/TMath::Tan(TMath::DegToRad()*75); - Double_t lfive[7] = {503.7*mm,503.7*mm,tubeheight,fiveshift,height,heightred,zred}; + Double_t lfive[7] = {500.*mm,500.*mm,tubeheight,fiveshift,height,heightred,zred}; TGeoVolume *five = CradleBaseVolume(med,lfive,"bar5"); five->SetLineColor(kGray); - Double_t sixshift = tubeheight/TMath::Tan(TMath::DegToRad()*55)+459*mm/2-480*mm/2; - Double_t lsix[7] = {459*mm,480*mm,tubeheight,sixshift,height,heightred,zred}; + Double_t sixshift = tubeheight/TMath::Tan(TMath::DegToRad()*55)+459*mm/2-480*mm/2; + Double_t lsix[7] = {456*mm,477*mm,tubeheight,sixshift,height,heightred,zred}; TGeoVolume *six = CradleBaseVolume(med,lsix,"bar6"); six->SetLineColor(kGray); @@ -1061,7 +1068,7 @@ TGeoVolume* AliHMPIDv3::CreateCradle() eight->SetLineColor(kGray); Double_t nineshift = -tubeheight/TMath::Tan(TMath::DegToRad()*71)+83.*mm/2-66.*mm/2; - Double_t lnine[7] = {66.*mm,83.*mm,tubeheight,nineshift,height,heightred,zred}; + Double_t lnine[7] = {59.5*mm,76.5*mm,tubeheight,nineshift,height,heightred,zred}; TGeoVolume *nine = CradleBaseVolume(med,lnine,"bar9"); nine->SetLineColor(kGray); @@ -1071,32 +1078,35 @@ TGeoVolume* AliHMPIDv3::CreateCradle() ten->SetLineColor(kGray); Double_t elevenshift = (-tubeheight/TMath::Tan(TMath::DegToRad()*70) -338.*mm/2+315.*mm/2); - Double_t leleven[7] = {315.*mm,338.*mm,tubeheight,elevenshift,height,heightred,zred}; + Double_t leleven[7] = {308.*mm,331.*mm,tubeheight,elevenshift,height,heightred,zred}; TGeoVolume *eleven = CradleBaseVolume(med,leleven,"bar11"); eleven->SetLineColor(kGray); Double_t twelveshift = (-tubeheight/TMath::Tan(TMath::DegToRad()*60) -538.*mm/2+508.*mm/2); - Double_t ltwelve[7] = {508.*mm,538.*mm,tubeheight,twelveshift,height,heightred,zred}; + Double_t ltwelve[7] = {507.*mm,537.*mm,tubeheight,twelveshift,height,heightred,zred}; TGeoVolume *twelve = CradleBaseVolume(med,ltwelve,"bar12"); twelve->SetLineColor(kGray); - Double_t thirteenshift = tubeheight/TMath::Tan(TMath::DegToRad()*43); - Double_t lthirteen[7] = {712.5*mm,712.5*mm,tubeheight,thirteenshift,height,heightred,zred}; + Double_t thirteenshift = tubeheight/TMath::Tan(TMath::DegToRad()*43); + Double_t lthirteen[7] = {708.*mm,708.*mm,tubeheight,thirteenshift,height,heightred,zred}; TGeoVolume *thirteen = CradleBaseVolume(med,lthirteen,"bar13"); thirteen->SetLineColor(kGray); //vertical rectangles - TGeoVolume *vbox=gGeoManager->MakeBox ("Hvbox",air , 1488*mm/2 , 487.*mm/2 , 50.*mm/2); + TGeoVolume *vbox= new TGeoVolumeAssembly("Hvbox"); vbox->SetLineColor(kViolet); Double_t width = 50.*mm; + + TGeoVolume *vboxlast= new TGeoVolumeAssembly("Hvboxlast");//vertical structure on the short base + vboxlast->SetLineColor(kViolet); Double_t barheight = 100.*mm; Double_t lAfourteen[7] = {1488.*mm,1488.*mm,barheight,0,width,heightred,zred}; TGeoVolume *afourteen = CradleBaseVolume(med,lAfourteen,"bar14top"); afourteen->SetLineColor(kGray); - Double_t lBfourteen[7] = {382.*mm,382.*mm,barheight,0,width,heightred,zred}; + Double_t lBfourteen[7] = {387*mm,387.*mm,barheight,0,width,heightred,zred}; TGeoVolume *bfourteen = CradleBaseVolume(med,lBfourteen,"bar14vert"); bfourteen->SetLineColor(kGray); @@ -1104,27 +1114,38 @@ TGeoVolume* AliHMPIDv3::CreateCradle() TGeoVolume *cfourteen = CradleBaseVolume(med,lCfourteen,"bar14bot"); cfourteen->SetLineColor(kGray); - Double_t oblshift = 50.*mm/ TMath::Tan(TMath::DegToRad()*35); - Double_t lDfourteen[7] = {610.*mm,610.*mm,50.*mm,oblshift,width,heightred,zred}; + Double_t oblshift = 50.*mm/ TMath::Tan(TMath::DegToRad()*35); + Double_t lDfourteen[7] = {603.*mm,603.*mm,50.*mm,oblshift,width,heightred,zred}; TGeoVolume *dfourteen = CradleBaseVolume(med,lDfourteen,"bar14incl"); dfourteen->SetLineColor(kGray); + + Double_t lDfourteenlast[7] = {667.*mm,667.*mm,50.*mm,oblshift,width,heightred,zred}; + TGeoVolume *dfourteenlast = CradleBaseVolume(med,lDfourteenlast,"bar14incllast"); + dfourteenlast->SetLineColor(kGray); + vbox->AddNode(afourteen,1,new TGeoTranslation(0.,487.*mm/2 -100.*mm/2,0.)); TGeoRotation *vinrot = new TGeoRotation("vertbar"); vinrot->RotateZ(90); vbox->AddNode(bfourteen,1,new TGeoCombiTrans(1488*mm/2-100.*mm/2,-100.*mm/2,0.,vinrot)); vbox->AddNode(bfourteen,2,new TGeoCombiTrans(-1488*mm/2+100.*mm/2,-100.*mm/2,0.,vinrot)); TGeoRotation *rotboxbar = new TGeoRotation("rotboxbar"); rotboxbar->RotateZ(-35); TGeoRotation *arotboxbar = new TGeoRotation("arotboxbar"); arotboxbar->RotateZ(-35); arotboxbar->RotateY(180); - vbox->AddNode(dfourteen,1,new TGeoCombiTrans(-1488*mm/4,-1,0.,rotboxbar)); - vbox->AddNode(dfourteen,2,new TGeoCombiTrans(+1488*mm/4,-1,0.,arotboxbar)); + vbox->AddNode(dfourteen,1,new TGeoCombiTrans(-1488*mm/4,-1,0.4,rotboxbar)); + vbox->AddNode(dfourteen,2,new TGeoCombiTrans(+1488*mm/4,-1,0.4,arotboxbar)); + //vertical box on the short base of the cradle + vboxlast->AddNode(afourteen,1,new TGeoTranslation(0.,487.*mm/2 -100.*mm/2,0.)); + vboxlast->AddNode(bfourteen,1,new TGeoCombiTrans(1488*mm/2-100.*mm/2,-100.*mm/2,0.,vinrot)); + vboxlast->AddNode(bfourteen,2,new TGeoCombiTrans(-1488*mm/2+100.*mm/2,-100.*mm/2,0.,vinrot)); + vboxlast->AddNode(dfourteenlast,1,new TGeoCombiTrans(-1488*mm/4+1.7,-3.,0.,rotboxbar)); + vboxlast->AddNode(dfourteenlast,2,new TGeoCombiTrans(+1488*mm/4-1.7,-3.,0.,arotboxbar)); //POSITIONING IN THE VIRTUAL VOLUME "cradle" //long base TGeoRotation *rotl=new TGeoRotation("Clongbase"); rotl->RotateX(90); - cradle->AddNode(lbase,1,new TGeoCombiTrans ( 0*mm, (1488-100)*mm/2, -(597-60)*mm/2,rotl)); - cradle->AddNode(lbase,2,new TGeoCombiTrans ( 0*mm, -(1488-100)*mm/2, -(597-60)*mm/2,rotl)); + cradle->AddNode(lbase,0,new TGeoCombiTrans ( 0*mm, (1488-100)*mm/2, -(597-60)*mm/2,rotl)); + cradle->AddNode(lbase,1,new TGeoCombiTrans ( 0*mm, -(1488-100)*mm/2, -(597-60)*mm/2,rotl)); //short base TGeoRotation *rots=new TGeoRotation("Cshortbase"); rots->RotateX(90); rots->RotateZ(90); cradle->AddNode(sbase,1,new TGeoCombiTrans ((6037-100)*mm/2, 0.,-(597-60)*mm/2,rots)); @@ -1138,13 +1159,13 @@ TGeoVolume* AliHMPIDv3::CreateCradle() Double_t dx =(1607-35)*mm*TMath::Cos(TMath::DegToRad()*20)/2-tubeheight/2*TMath::Sin(TMath::DegToRad()*20)+params[5]; - cradle->AddNode(inclin,1,new TGeoCombiTrans(origintrapstructure + (2288+60)*mm -dx,729*mm,params[0],rot1)); + cradle->AddNode(inclin,1,new TGeoCombiTrans(origintrapstructure + (2288+60)*mm -dx,729*mm,params[0]+0.4,rot1));//+0.7 added cradle->AddNode(horiz,1,new TGeoCombiTrans( origintrapstructure,729*mm, 597*mm/2 - tubeheight/2,rot2));//correctly positioned TGeoRotation *rot1mirror=new TGeoRotation("inclmirrot"); rot1mirror->RotateX(90); rot1mirror->RotateY(200); rot1mirror->RotateZ(180); - cradle->AddNode(inclin,2,new TGeoCombiTrans(origintrapstructure - 2345*mm + dx,729*mm,params[0],rot1mirror)); - cradle->AddNode(inclin,3,new TGeoCombiTrans(origintrapstructure + (2288+60)*mm -dx,-729*mm,params[0],rot1)); + cradle->AddNode(inclin,2,new TGeoCombiTrans(origintrapstructure - 2345*mm + dx,729*mm,params[0]+0.4,rot1mirror));//+0.7 added + cradle->AddNode(inclin,3,new TGeoCombiTrans(origintrapstructure + (2288+60)*mm -dx,-729*mm,params[0]+0.4,rot1));//0.7 added cradle->AddNode(horiz,2,new TGeoCombiTrans( origintrapstructure,-729*mm, 597*mm/2 - tubeheight/2,rot2));//correctly positioned - cradle->AddNode(inclin,4,new TGeoCombiTrans(origintrapstructure - 2345*mm + dx,-729*mm,params[0],rot1mirror)); + cradle->AddNode(inclin,4,new TGeoCombiTrans(origintrapstructure - 2345*mm + dx,-729*mm,params[0]+0.4,rot1mirror));//0.7 added //inner pieces on one side TGeoRotation *rot4=new TGeoRotation("4rot"); rot4->RotateX(-90); rot4->RotateY(-55); rot4->RotateZ(180); @@ -1177,18 +1198,17 @@ TGeoVolume* AliHMPIDv3::CreateCradle() TGeoRotation *rot9a=new TGeoRotation("9arot"); rot9a->RotateX(-90); rot9a->RotateY(-90); rot9a->RotateZ(180); cradle->AddNode(nine,1,new TGeoCombiTrans(origintrapstructure+1960*mm+2.5+3.,-729.*mm,-20.,rot9)); cradle->AddNode(nine,2,new TGeoCombiTrans(origintrapstructure-1960*mm-2.5-3.,-729.*mm,-20.,rot9a)); - //inner pieces on the other side TGeoRotation *rot10=new TGeoRotation("10rot"); rot10->RotateX(-90); rot10->RotateY(-120); TGeoRotation *rot10a=new TGeoRotation("10arot"); rot10a->RotateX(-90); rot10a->RotateY(-120); rot10a->RotateZ(180); - cradle->AddNode(ten,1,new TGeoCombiTrans(origintrapstructure+1738*mm+tubeheight/(2*TMath::Sin(TMath::DegToRad()*60))-2,+729.*mm,-13.,rot10)); - cradle->AddNode(ten,2,new TGeoCombiTrans(origintrapstructure-1738*mm-tubeheight/(2*TMath::Sin(TMath::DegToRad()*60))+2,+729.*mm,-13.,rot10a)); + cradle->AddNode(ten,1,new TGeoCombiTrans(origintrapstructure+1738*mm+tubeheight/(2*TMath::Sin(TMath::DegToRad()*60))-2,+729.*mm,-13.,rot10)); + cradle->AddNode(ten,2,new TGeoCombiTrans(origintrapstructure-1738*mm-tubeheight/(2*TMath::Sin(TMath::DegToRad()*60))+2,+729.*mm,-13.,rot10a)); TGeoRotation *rot11=new TGeoRotation("11rot"); rot11->RotateX(-90); rot11->RotateY(50); TGeoRotation *rot11a=new TGeoRotation("11arot"); rot11a->RotateX(-90); rot11a->RotateY(50); rot11a->RotateZ(180); - cradle->AddNode(eleven,1,new TGeoCombiTrans(origintrapstructure-1738*mm-tubeheight/(2*TMath::Sin(TMath::DegToRad()*60))+352.*mm,+729.*mm,-12.5,rot11)); - cradle->AddNode(eleven,2,new TGeoCombiTrans(origintrapstructure+1738*mm+tubeheight/(2*TMath::Sin(TMath::DegToRad()*60))-352.*mm,+729.*mm,-12.5,rot11a)); + cradle->AddNode(eleven,1,new TGeoCombiTrans(origintrapstructure-1738*mm-tubeheight/(2*TMath::Sin(TMath::DegToRad()*60))+352.*mm,+729.*mm,-12.7,rot11)); + cradle->AddNode(eleven,2,new TGeoCombiTrans(origintrapstructure+1738*mm+tubeheight/(2*TMath::Sin(TMath::DegToRad()*60))-352.*mm,+729.*mm,-12.7,rot11a)); TGeoRotation *rot12=new TGeoRotation("12rot"); rot12->RotateX(-90); rot12->RotateY(-120); TGeoRotation *rot12a=new TGeoRotation("12arot"); rot12a->RotateX(-90); rot12a->RotateY(-120); rot12a->RotateZ(180); @@ -1203,8 +1223,7 @@ TGeoVolume* AliHMPIDv3::CreateCradle() //vertical structures TGeoRotation *vrot = new TGeoRotation("vertbox"); vrot->RotateX(90); vrot->RotateZ(90); - cradle->AddNode(vbox,1,new TGeoCombiTrans(-6037*mm/2+50.*mm/2,0.,0.5,vrot)); - cradle->AddNode(cfourteen,1,new TGeoCombiTrans(-6037*mm/2+50.*mm/2,0.,-477.*mm/2 -20.*mm/2,vrot)); + cradle->AddNode(vboxlast,1,new TGeoCombiTrans(-6037*mm/2+50.*mm/2,0.,0.5,vrot));//vertial box on the short cradle base cradle->AddNode(vbox,2,new TGeoCombiTrans(-6037*mm/2+50.*mm/2+990.*mm,0.,0.5,vrot)); cradle->AddNode(cfourteen,2,new TGeoCombiTrans(-6037*mm/2+50.*mm/2+990.*mm,0.,-477.*mm/2 -20.*mm/2,vrot)); @@ -1219,7 +1238,7 @@ return cradle; }//CreateCradle() -TGeoVolume * AliHMPIDv3::CradleBaseVolume(TGeoMedium *med, Double_t l[7],char *name) +TGeoVolume * AliHMPIDv3::CradleBaseVolume(TGeoMedium *med, Double_t l[7],const char *name) { /* The trapezoid is build in the xy plane