-// Analithical calculation of localization error (due to finite segmentation of PC) on Cerenkov angle for a given Cerenkov photon
-// created by a given MIP. Fromulae according to CERN-EP-2000-058
-// Arguments: Cerenkov and azimuthal angles for Cerenkov photon, [radians]
-// dip and azimuthal angles for MIP taken at the entrance to radiator, [radians]
-// MIP beta
-// Returns: absolute error on Cerenkov angle, [radians]
- Double_t phiDelta = phiC - fTrkDir.Phi();
-
- Double_t alpha =TMath::Cos(fTrkDir.Theta())-TMath::Tan(thetaC)*TMath::Cos(phiDelta)*TMath::Sin(fTrkDir.Theta());
- Double_t k = 1.-fgkRadIdx*fgkRadIdx+alpha*alpha/(betaM*betaM);
- if (k<0) return 1e10;
-
- Double_t mu =TMath::Sin(fTrkDir.Theta())*TMath::Sin(fTrkDir.Phi())+TMath::Tan(thetaC)*(TMath::Cos(fTrkDir.Theta())*TMath::Cos(phiDelta)*TMath::Sin(fTrkDir.Phi())+TMath::Sin(phiDelta)*TMath::Cos(fTrkDir.Phi()));
- Double_t e =TMath::Sin(fTrkDir.Theta())*TMath::Cos(fTrkDir.Phi())+TMath::Tan(thetaC)*(TMath::Cos(fTrkDir.Theta())*TMath::Cos(phiDelta)*TMath::Cos(fTrkDir.Phi())-TMath::Sin(phiDelta)*TMath::Sin(fTrkDir.Phi()));
-
- Double_t kk = betaM*TMath::Sqrt(k)/(8*alpha);
- Double_t dtdxc = kk*(k*(TMath::Cos(phiDelta)*TMath::Cos(fTrkDir.Phi())-TMath::Cos(fTrkDir.Theta())*TMath::Sin(phiDelta)*TMath::Sin(fTrkDir.Phi()))-(alpha*mu/(betaM*betaM))*TMath::Sin(fTrkDir.Theta())*TMath::Sin(phiDelta));
- Double_t dtdyc = kk*(k*(TMath::Cos(phiDelta)*TMath::Sin(fTrkDir.Phi())+TMath::Cos(fTrkDir.Theta())*TMath::Sin(phiDelta)*TMath::Cos(fTrkDir.Phi()))+(alpha* e/(betaM*betaM))*TMath::Sin(fTrkDir.Theta())*TMath::Sin(phiDelta));
-
- return TMath::Sqrt(0.2*0.2*dtdxc*dtdxc + 0.25*0.25*dtdyc*dtdyc);
-}
-//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-Double_t AliHMPIDRecon::SigCrom(Double_t thetaC, Double_t phiC,Double_t betaM)const
-{
-// Analithical calculation of chromatic error (due to lack of knowledge of Cerenkov photon energy) on Cerenkov angle for a given Cerenkov photon
-// created by a given MIP. Fromulae according to CERN-EP-2000-058
-// Arguments: Cerenkov and azimuthal angles for Cerenkov photon, [radians]
-// dip and azimuthal angles for MIP taken at the entrance to radiator, [radians]
-// MIP beta
-// Returns: absolute error on Cerenkov angle, [radians]
- Double_t phiDelta = phiC - fTrkDir.Phi();
- Double_t alpha =TMath::Cos(fTrkDir.Theta())-TMath::Tan(thetaC)*TMath::Cos(phiDelta)*TMath::Sin(fTrkDir.Theta());
-
- Double_t dtdn = TMath::Cos(fTrkDir.Theta())*fgkRadIdx*betaM*betaM/(alpha*TMath::Tan(thetaC));
-
- Double_t f = 0.00928*(7.75-5.635)/TMath::Sqrt(12.);
-
- return f*dtdn;
-}//SigCrom()
-//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-Double_t AliHMPIDRecon::SigGeom(Double_t thetaC, Double_t phiC,Double_t betaM)const
-{
-// Analithical calculation of geometric error (due to lack of knowledge of creation point in radiator) on Cerenkov angle for a given Cerenkov photon
-// created by a given MIP. Formulae according to CERN-EP-2000-058
-// Arguments: Cerenkov and azimuthal angles for Cerenkov photon, [radians]
-// dip and azimuthal angles for MIP taken at the entrance to radiator, [radians]
-// MIP beta
-// Returns: absolute error on Cerenkov angle, [radians]
-
- Double_t phiDelta = phiC - fTrkDir.Phi();
- Double_t alpha =TMath::Cos(fTrkDir.Theta())-TMath::Tan(thetaC)*TMath::Cos(phiDelta)*TMath::Sin(fTrkDir.Theta());
-
- Double_t k = 1.-fgkRadIdx*fgkRadIdx+alpha*alpha/(betaM*betaM);
- if (k<0) return 1e10;
-
- Double_t eTr = 0.5*1.5*betaM*TMath::Sqrt(k)/(8*alpha);
- Double_t lambda = 1.-TMath::Sin(fTrkDir.Theta())*TMath::Sin(fTrkDir.Theta())*TMath::Sin(phiC)*TMath::Sin(phiC);
-
- Double_t c = 1./(1.+ eTr*k/(alpha*alpha*TMath::Cos(thetaC)*TMath::Cos(thetaC)));
- Double_t i = betaM*TMath::Tan(thetaC)*lambda*TMath::Power(k,1.5);
- Double_t ii = 1.+eTr*betaM*i;
-
- Double_t err = c * (i/(alpha*alpha*8) + ii*(1.-lambda) / ( alpha*alpha*8*betaM*(1.+eTr)) );
- Double_t trErr = 1.5/(TMath::Sqrt(12.)*TMath::Cos(fTrkDir.Theta()));
-
- return trErr*err;
-}//SigGeom()
-//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-void AliHMPIDRecon::Display()
-{
-// Display digits, reconstructed tracks intersections and HMPID rings if available
-// Arguments: none
-// Returns: none
- TFile *pEsdFl=TFile::Open("AliESDs.root"); if(!pEsdFl || !pEsdFl->IsOpen()) return;//open AliESDs.root
- TTree *pEsdTr=(TTree*) pEsdFl->Get("esdTree"); if(!pEsdTr) return;//get ESD tree
-
- AliESD *pEsd=new AliESD; pEsdTr->SetBranchAddress("ESD", &pEsd);
-
- TPolyMarker *pDigMap[7]; //digits map
- TPolyMarker *pTrkMap[7]; Int_t aTrkCnt[7]; //TRKxPC intersection map