// AliTracker::SetFieldMap(magf);
TFile *pFileRA = new TFile("$(HOME)/RichAna.root","RECREATE","RICH Pattern Recognition");
- TNtupleD *hn = new TNtupleD("hn","ntuple","Pmod:Charge:TrackTheta:TrackPhi:MinX:MinY:ThetaCerenkov:NPhotons:ChargeMIP:Chamber:TOF:LengthTOF:prob1:prob2:prob3");
+ TNtupleD *hn = new TNtupleD("hn","ntuple","Pmod:Charge:TrackTheta:TrackPhi:MinX:MinY:ThetaCerenkov:NPhotons:ChargeMIP:Chamber:TOF:LengthTOF:prob1:prob2:prob3:ErrPar1:ErrPar2:ErrPar3:Th1:Th2:Th3");
AliESD *pESD=new AliESD; pTree->SetBranchAddress("ESD", &pESD);
for(Int_t iEvtN=0;iEvtN<GetLoader()->GetRunLoader()->GetNumberOfEvents();iEvtN++) {
pTrRich->RecWithESD(pESD,pRich,iTrackN);
AliESDtrack *pTrack = pESD->GetTrack(iTrackN);// get next reconstructed track
Double_t dx,dy;
- Double_t hnvec[20];
+ Double_t hnvec[30];
pTrack->GetRICHdxdy(dx,dy);
hnvec[0]=pTrack->GetP();
hnvec[1]=pTrack->GetSign();
hnvec[12]=prob[0]+prob[1]+prob[2];
hnvec[13]=prob[3];
hnvec[14]=prob[4];
+ hnvec[15]=pTrRich->fErrPar[2];
+ hnvec[16]=pTrRich->fErrPar[3];
+ hnvec[17]=pTrRich->fErrPar[4];
+ for(Int_t i=0;i<3;i++) {
+ Double_t mass = AliRICHParam::fgMass[i+2];
+ Double_t refIndex=AliRICHParam::RefIdxC6F14(AliRICHParam::MeanCkovEnergy());
+ Double_t cosThetaTh = TMath::Sqrt(mass*mass+pTrack->GetP()*pTrack->GetP())/(refIndex*pTrack->GetP());
+ hnvec[18+i]=0;
+ if(cosThetaTh>=1) continue;
+ hnvec[18+i]= TMath::ACos(cosThetaTh);
+ }
hn->Fill(hnvec);
}
}
v.SetX(Interpolate(fgErrChrom,pmom,theta,phi));
v.SetY(Interpolate(fgErrGeom,pmom,theta,phi));
v.SetZ(Interpolate(fgErrLoc,pmom,theta,phi));
+ v*=1.5; // take into account bigger errors due to multiplicity...to change in future
return v;
}//SigmaSinglePhoton
//Detector Reference System
static Bool_t fgIsAerogel; //aerogel geometry instead of normal RICH flag
+ static Double_t fgMass[5]; // mass array
protected:
static Bool_t fgIsRadioSrc; //radioactive source instead of radiators flag
static Bool_t fgIsTestBeam; //test beam geometry instead of normal RICH flag
static Double_t fgErrChrom[4][330]; //
static Double_t fgErrGeom[4][330]; //
static Double_t fgErrLoc[4][330]; //Chromatic, Geometric and Localization array to parametrize SigmaCerenkov
- static Double_t fgMass[5]; // mass array
ClassDef(AliRICHParam,6) //RICH main parameters class
};
Double_t richPID[AliPID::kSPECIES];
for (Int_t iPart=0;iPart<AliPID::kSPECIES;iPart++) {
sigmaPID[iPart] = 0;
+ fErrPar[iPart] = 0;
for(Int_t iphot=0;iphot<pRich->Clusters(iChamber)->GetEntries();iphot++) {
recon.SetPhotonIndex(iphot);
if(recon.GetPhotonFlag() == 2) {
}
if (sigmaPID[iPart]>0)
sigmaPID[iPart] = 1/TMath::Sqrt(sigmaPID[iPart])*0.001;
+ fErrPar[iPart]=sigmaPID[iPart];
AliDebug(1,Form("sigma for %s is %f rad",AliPID::ParticleName(iPart),sigmaPID[iPart]));
}
CalcProb(thetaCerenkov,pTrack->GetP(),sigmaPID,richPID);
Double_t thetaTh[AliPID::kSPECIES];
for(Int_t iPart=0;iPart<AliPID::kSPECIES;iPart++){
height[iPart]=0;
- Double_t mass = AliPID::ParticleMass(iPart);
+ Double_t mass = AliRICHParam::fgMass[iPart];
Double_t refIndex=AliRICHParam::RefIdxC6F14(AliRICHParam::MeanCkovEnergy());
Double_t cosThetaTh = TMath::Sqrt(mass*mass+pmod*pmod)/(refIndex*pmod);
thetaTh[iPart]=0;
class AliRICHTracker : public AliTracker
{
public:
- AliRICHTracker() :AliTracker() {AliDebug(1,"Start.");}
+ AliRICHTracker() :AliTracker() {for(Int_t i=0;i<5;i++)fErrPar[i]=0;AliDebug(1,"Start.");}
virtual ~AliRICHTracker() {AliDebug(1,"Stop.");}
Int_t Clusters2Tracks(AliESD *) {AliDebug(1,"Start.");return 0;} //pure virtual from AliTracker
Int_t RefitInward(AliESD *) {AliDebug(1,"Start.");return 0;} //pure virtual from AliTracker
void RecWithStack(TNtupleD *hn); //recon from Stack in case ESD empty
void CalcProb(Double_t thetaCer,Double_t pmod,Double_t *sigmaPID, Double_t *richPID); // calculate pid for RICH
Int_t LoadClusters(TTree *); //pure virtual from AliTracker
-
+ Double_t fErrPar[5]; //Temporary stored for debug purpose
protected:
Double_t fField; // magnetic field stored