X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=HMPID%2FAliHMPIDParam.cxx;h=38ed89d78ca081accf10b7464de879fe36b5c238;hb=8c6128b71eea83b6ee9f8bfe1de1c4f37915c233;hp=ae44679189ff588c5e724c6c7ea0bd6c2ab68ec2;hpb=aa03cdbc63144a0ca0133bb96626402ad371549f;p=u%2Fmrichter%2FAliRoot.git diff --git a/HMPID/AliHMPIDParam.cxx b/HMPID/AliHMPIDParam.cxx index ae44679189f..38ed89d78ca 100644 --- a/HMPID/AliHMPIDParam.cxx +++ b/HMPID/AliHMPIDParam.cxx @@ -17,6 +17,8 @@ #include "AliLog.h" //general #include //Stack() #include //Stack() +#include "AliCDBManager.h" //ctor +#include "AliCDBEntry.h" //ctor #include //TestTrans() #include //TestTrans() #include //TestTrans() @@ -24,14 +26,33 @@ #include //Stack() #include //ctor #include +#include //ctor + ClassImp(AliHMPIDParam) +// Mathieson constant definition +const Double_t AliHMPIDParam::fgkD = 0.222500; // ANODE-CATHODE distance 0.445/2 +// K3 = 0.66 along the wires (anode-cathode/wire pitch=0.5625) +const Double_t AliHMPIDParam::fgkSqrtK3x = TMath::Sqrt(0.66); +const Double_t AliHMPIDParam::fgkK2x = TMath::PiOver2()*(1 - 0.5*fgkSqrtK3x); +const Double_t AliHMPIDParam::fgkK1x = 0.25*fgkK2x*fgkSqrtK3x/TMath::ATan(fgkSqrtK3x); +const Double_t AliHMPIDParam::fgkK4x = fgkK1x/(fgkK2x*fgkSqrtK3x); +// K3 = 0.87 along the wires (anode-cathode/wire pitch=0.5625) +const Double_t AliHMPIDParam::fgkSqrtK3y = TMath::Sqrt(0.87); +const Double_t AliHMPIDParam::fgkK2y = TMath::PiOver2()*(1 - 0.5*fgkSqrtK3y); +const Double_t AliHMPIDParam::fgkK1y = 0.25*fgkK2y*fgkSqrtK3y/TMath::ATan(fgkSqrtK3y); +const Double_t AliHMPIDParam::fgkK4y = fgkK1y/(fgkK2y*fgkSqrtK3y); +// + + Float_t AliHMPIDParam::fgkMinPcX[]={0.,0.,0.,0.,0.,0.}; Float_t AliHMPIDParam::fgkMaxPcX[]={0.,0.,0.,0.,0.,0.}; Float_t AliHMPIDParam::fgkMinPcY[]={0.,0.,0.,0.,0.,0.}; Float_t AliHMPIDParam::fgkMaxPcY[]={0.,0.,0.,0.,0.,0.}; +Bool_t AliHMPIDParam::fgMapPad[160][144][7]; + Float_t AliHMPIDParam::fgCellX=0.; Float_t AliHMPIDParam::fgCellY=0.; @@ -45,17 +66,39 @@ Bool_t AliHMPIDParam::fgInstanceType=kTRUE; AliHMPIDParam* AliHMPIDParam::fgInstance=0x0; //singleton pointer -Int_t AliHMPIDParam::fgSigmas=4; +Int_t AliHMPIDParam::fgNSigmas = 4; +Int_t AliHMPIDParam::fgThreshold= 4; //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -AliHMPIDParam::AliHMPIDParam(Bool_t noGeo=kFALSE):TNamed("HmpidParam","default version") +AliHMPIDParam::AliHMPIDParam(Bool_t noGeo): + TNamed("HmpidParam","default version"), + fX(0), fY(0), fRefIdx(1.28947),fPhotEMean(6.675),fTemp(25) //just set a refractive index for C6F14 at ephot=6.675 eV @ T=25 C { // Here all the intitializition is taken place when AliHMPIDParam::Instance() is invoked for the first time. // In particular, matrices to be used for LORS<->MARS trasnformations are initialized from TGeo structure. // Note that TGeoManager should be already initialized from geometry.root file + AliCDBManager *pCDB = AliCDBManager::Instance(); + if(!pCDB) { + AliWarning("No Nmean C6F14 from OCDB. Default is taken from ctor."); + } else { + AliCDBEntry *pNmeanEnt =pCDB->Get("HMPID/Calib/Nmean"); //contains TObjArray of 42 TF1 + 1 EPhotMean + if(!pNmeanEnt) { + AliWarning("No Nmean C6F14 from OCDB. Default is taken from ctor."); + } else { + TObjArray *pNmean = (TObjArray*)pNmeanEnt->GetObject(); + if(pNmean->GetEntries()==43) { //for backward compatibility + Double_t tmin,tmax; + ((TF1*)pNmean->At(42))->GetRange(tmin,tmax); + fPhotEMean = ((TF1*)pNmean->At(42))->Eval(tmin); //photon eMean from OCDB + AliInfo(Form("EPhotMean = %f eV successfully loaded from OCDB",fPhotEMean)); + } else { + AliWarning("For backward compatibility EPhotMean is taken from ctor."); + } + } + } - fRadNmean = MeanIdxRad(); //initialization of the running ref. index of freon + fRefIdx = MeanIdxRad(); //initialization of the running ref. index of freon Float_t dead=2.6;// cm of the dead zones between PCs-> See 2CRC2099P1 @@ -94,7 +137,17 @@ AliHMPIDParam::AliHMPIDParam(Bool_t noGeo=kFALSE):TNamed("HmpidParam","default v fX=0.5*SizeAllX(); fY=0.5*SizeAllY(); - for(Int_t i=kMinCh;i<=kMaxCh;i++) + + for(Int_t ich=kMinCh;ich<=kMaxCh;ich++) { + for(Int_t padx=0;padx<160;padx++) { + for(Int_t pady=0;pady<144;pady++) { + fgMapPad[padx][pady][ich] = kTRUE; //init all the pads are active at the beginning.... + } + } + } + + + for(Int_t i=kMinCh;i<=kMaxCh;i++) if(gGeoManager && gGeoManager->IsClosed()) { TGeoPNEntry* pne = gGeoManager->GetAlignableEntry(Form("/HMPID/Chamber%i",i)); if (!pne) { @@ -103,7 +156,7 @@ AliHMPIDParam::AliHMPIDParam(Bool_t noGeo=kFALSE):TNamed("HmpidParam","default v IdealPosition(i,fM[i]); } else { TGeoPhysicalNode *pnode = pne->GetPhysicalNode(); - if(pnode) fM[i]=pnode->GetMatrix(); + if(pnode) fM[i]=new TGeoHMatrix(*(pnode->GetMatrix())); else { fM[i]=new TGeoHMatrix; IdealPosition(i,fM[i]); @@ -302,7 +355,7 @@ Double_t AliHMPIDParam::SigGeom(Double_t trkTheta,Double_t trkPhi,Double_t theta if (k<0) return 1e10; Double_t eTr = 0.5*RadThick()*betaM*TMath::Sqrt(k)/(GapThick()*alpha); // formula (14) - Double_t lambda = 1.-sint*sint*sinf*sinf; // formula (15) + Double_t lambda = (1.-sint*sinf)*(1.+sint*sinf); // formula (15) Double_t c1 = 1./(1.+ eTr*k/(alpha*alpha*costheta*costheta)); // formula (13.a) Double_t c2 = betaM*TMath::Power(k,1.5)*tantheta*lambda/(GapThick()*alpha*alpha); // formula (13.b) @@ -314,3 +367,18 @@ Double_t AliHMPIDParam::SigGeom(Double_t trkTheta,Double_t trkPhi,Double_t theta return trErr*dtdT; }//SigGeom() //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +Double_t AliHMPIDParam::SigmaCorrFact (Int_t iPart, Double_t occupancy) +{ + Double_t corr = 1.0; + + switch(iPart) { + case 0: corr = 0.115*occupancy + 1.166; break; + case 1: corr = 0.115*occupancy + 1.166; break; + case 2: corr = 0.115*occupancy + 1.166; break; + case 3: corr = 0.065*occupancy + 1.137; break; + case 4: corr = 0.048*occupancy + 1.202; break; + } + + return corr; +} +