fHmismTOF(0),
fHchannelTOFdistr(0),
fTypeCol(2),
- fPIDuserCut(NULL)
+ fPIDuserCut(NULL),
+ fToEP(kFALSE),
+ fSpeciesRef(3)
{
// Default constructor (should not be used)
fList->SetName("contPhiBayes1");
fHmismTOF(0),
fHchannelTOFdistr(0),
fTypeCol(2),
- fPIDuserCut(NULL)
+ fPIDuserCut(NULL),
+ fToEP(kFALSE),
+ fSpeciesRef(3)
{
DefineOutput(1, TList::Class());
const Int_t nBinPid = 14;
- Int_t binPid[nBinPid] = {1/*ptPhi*/,8/*EtaKP*/,20/*pt+*/,1/*pt-*/,5/*P+*/,1/*P-*/,2/*TOFmatch+*/,1/*TOFmatch-*/,2/*istrue*/,4/*Nsigma+*/,1/*Nsigma-*/,1/*DeltaPhi+*/,1/*DeltaPhi-*/,1/*Psi*/};
+ Int_t binPid[nBinPid] = {1/*ptKs*/,1+7*(!fToEP)/*EtaPiP*/,20/*pt+*/,1/*pt-*/,5/*P+*/,1/*P-*/,2/*TOFmatch+*/,1/*TOFmatch-*/,2/*istrue*/,4/*Nsigma+*/,1/*Nsigma-*/,1+4*(fToEP)/*DeltaPhi+*/,1/*DeltaPhi-*/,1+4*(fToEP)/*Psi*/};
- Int_t binPid2[nBinPid] = {1/*ptPhi*/,8/*EtaKN*/,1/*pt+*/,20/*pt-*/,1/*P+*/,5/*P-*/,1/*TOFmatch+*/,2/*TOFmatch-*/,2/*istrue*/,1/*Nsigma+*/,4/*Nsigma-*/,1/*DeltaPhi+*/,1/*DeltaPhi-*/,1/*Psi*/};
+ Int_t binPid2[nBinPid] = {1/*ptKs*/,1+7*(!fToEP)/*EtaPiN*/,1/*pt+*/,20/*pt-*/,1/*P+*/,5/*P-*/,1/*TOFmatch+*/,2/*TOFmatch-*/,2/*istrue*/,1/*Nsigma+*/,4/*Nsigma-*/,1/*DeltaPhi+*/,1+4*(fToEP)/*DeltaPhi-*/,1+4*(fToEP)/*Psi*/};
fContPid = new AliPIDperfContainer("contPID",nBinPid,binPid);
fContPid->SetTitleX("M_{#phi}");
Double_t probP[10] = {0.,0.,0.,0.,0.,0.,0.,0.,0.,0.};
Double_t probN[10] = {0.,0.,0.,0.,0.,0.,0.,0.,0.,0.};
Double_t nSigmaTPC,nSigmaTOF=6,nSigmaTPC2,nSigmaTOF2=6,nSigmaComb,nSigmaComb2;
-
+ Double_t nSigmaTPCRef,nSigmaTOFRef=6,nSigmaTPC2Ref,nSigmaTOF2Ref=6,nSigmaCombRef,nSigmaComb2Ref;
AliAODMCHeader *mcHeader = dynamic_cast<AliAODMCHeader*>(aodEvent->GetList()->FindObject(AliAODMCHeader::StdBranchName()));
TClonesArray *mcArray = NULL;
if(!(KpTrack->Charge() > 0 && KpTrack->Pt() > 0.3 && TMath::Abs(KpTrack->Eta()) < 0.8)) continue;
nSigmaTOF=5;
+ nSigmaTOFRef=5;
nSigmaComb=5;
+ nSigmaCombRef=5;
+
fPtKp=KpTrack->Pt(),fPhiKp=KpTrack->Phi(),fEtaKp=KpTrack->Eta();
fPidKp=0;
fPIDCombined->GetPriors(KpTrack, oldpP, PIDResponse, detUsedP);
nSigmaTPC = PIDResponse->NumberOfSigmasTPC(KpTrack,AliPID::kKaon);
+ nSigmaTPCRef = PIDResponse->NumberOfSigmasTPC(KpTrack,(AliPID::EParticleType) fSpeciesRef);
if(! (TMath::Abs(nSigmaTPC) < 5)) continue;
if(TMath::Abs(PIDResponse->NumberOfSigmasTPC(KpTrack,AliPID::kKaon))<1) fKaTOF[icentr]->Fill(fPtKp,nSigmaTOF);
if(TMath::Abs(nSigmaTOF)<1) fKaTPC[icentr]->Fill(fPtKp,PIDResponse->NumberOfSigmasTPC(KpTrack,AliPID::kKaon));
+ nSigmaTOFRef = PIDResponse->NumberOfSigmasTOF(KpTrack,(AliPID::EParticleType) fSpeciesRef);
+
if(fIsMC){
Float_t mismAdd = addMismatchForMC;
if(KpTrack->Pt() < 1) mismAdd = addMismatchForMC/KpTrack->Pt();
// generate random time
Float_t timeRandom = fHmismTOF->GetRandom() + distIP*3.35655419905265973e+01;
- Double_t times[10];
- KpTrack->GetIntegratedTimes(times);
+ Double_t times[AliPID::kSPECIESC];
+ KpTrack->GetIntegratedTimes(times,AliPID::kSPECIESC);
nSigmaTOF = TMath::Abs(timeRandom - times[3])/PIDResponse->GetTOFResponse().GetExpectedSigma(KpTrack->P(), times[3], AliPID::kKaon);
+ nSigmaTOFRef = TMath::Abs(timeRandom - times[fSpeciesRef])/PIDResponse->GetTOFResponse().GetExpectedSigma(KpTrack->P(), times[fSpeciesRef], (AliPID::EParticleType) fSpeciesRef);
}
}
if(tofMatch1){
nSigmaComb = TMath::Sqrt(nSigmaTOF*nSigmaTOF + nSigmaTPC*nSigmaTPC);
+ nSigmaCombRef = TMath::Sqrt(nSigmaTOFRef*nSigmaTOFRef + nSigmaTPCRef*nSigmaTPCRef);
if(nSigmaTOF < 5 && fCentrality < 20 && KpTrack->Pt() < 0.9 && KpTrack->Pt() > 0.8){
fCombsignal->Fill(nSigmaComb);
}
} else {
nSigmaComb = TMath::Abs(nSigmaTPC);
+ nSigmaCombRef = TMath::Abs(nSigmaTPCRef);
}
// use sigmaTOF instead of sigmaComb
- if(tofMatch1) nSigmaComb = nSigmaTOF;
+ nSigmaTOFRef = TMath::Abs(nSigmaTOFRef);
+
+ if(tofMatch1){
+ nSigmaComb = nSigmaTOF;
+ nSigmaCombRef = nSigmaTOFRef;
+ }
if(nSigmaComb < 2) nSigmaComb = 2;
else if(nSigmaComb < 3) nSigmaComb = 3;
else if(nSigmaComb < 5) nSigmaComb = 4.99;
else nSigmaComb = 6;
+ if(nSigmaCombRef < 2) nSigmaCombRef = 2;
+ else if(nSigmaCombRef < 3) nSigmaCombRef = 3;
+ else if(nSigmaCombRef < 5) nSigmaCombRef = 4.99;
+ else nSigmaCombRef = 6;
+
if(fPtKp > 4.299) fPtKp = 4.299;
for(Int_t j=0;j < ntrack;j++){ // loop on negative tracks
fPIDCombined->GetPriors(KnTrack, oldpN, PIDResponse, detUsedN);
nSigmaTPC2 = PIDResponse->NumberOfSigmasTPC(KnTrack,AliPID::kKaon);
+ nSigmaTPC2Ref = PIDResponse->NumberOfSigmasTPC(KnTrack,(AliPID::EParticleType) fSpeciesRef);
if(! (TMath::Abs(nSigmaTPC2) < 5)) continue;
nSigmaTOF2=5;
+ nSigmaTOF2Ref=5;
nSigmaComb2=5;
+ nSigmaComb2Ref=5;
Int_t tofMatch2 = (KnTrack->GetStatus() & AliVTrack::kTOFout) && (KnTrack->GetStatus() & AliVTrack::kTIME);
/*
if(probN[3] > probN[2] && probN[3] > probN[4] && probN[3] > probN[0]) fPidKn += 128; // max prob
nSigmaTOF2 = PIDResponse->NumberOfSigmasTOF(KnTrack,AliPID::kKaon);
+ nSigmaTOF2Ref = PIDResponse->NumberOfSigmasTOF(KnTrack,(AliPID::EParticleType) fSpeciesRef);
nSigmaTOF2 = TMath::Abs(nSigmaTOF2);
+ nSigmaTOF2Ref = TMath::Abs(nSigmaTOF2Ref);
if(fIsMC){
Float_t mismAdd = addMismatchForMC;
// generate random time
Float_t timeRandom = fHmismTOF->GetRandom() + distIP*3.35655419905265973e+00;
- Double_t times[10];
- KnTrack->GetIntegratedTimes(times);
+ Double_t times[AliPID::kSPECIESC];
+ KnTrack->GetIntegratedTimes(times,AliPID::kSPECIESC);
nSigmaTOF2 = TMath::Abs(timeRandom - times[3])/PIDResponse->GetTOFResponse().GetExpectedSigma(KnTrack->P(), times[3], AliPID::kKaon);
+ nSigmaTOF2Ref = TMath::Abs(timeRandom - times[fSpeciesRef])/PIDResponse->GetTOFResponse().GetExpectedSigma(KnTrack->P(), times[fSpeciesRef], (AliPID::EParticleType) fSpeciesRef);
}
}
if(tofMatch2){
nSigmaComb2 = TMath::Sqrt(nSigmaTOF2*nSigmaTOF2+ nSigmaTPC2*nSigmaTPC2);
+ nSigmaComb2Ref = TMath::Sqrt(nSigmaTOF2Ref*nSigmaTOF2Ref+ nSigmaTPC2Ref*nSigmaTPC2Ref);
if(nSigmaTOF2 < 5 && fCentrality < 20 && KnTrack->Pt() < 1.2 && KnTrack->Pt() > 1){
fCombsignal->Fill(nSigmaComb2);
}
} else {
nSigmaComb2 = TMath::Abs(nSigmaTPC2);
+ nSigmaComb2Ref = TMath::Abs(nSigmaTPC2Ref);
}
// use sigmaTOF instead of sigmaComb
- if(tofMatch2) nSigmaComb2 = nSigmaTOF2;
+ if(tofMatch2){
+ nSigmaComb2 = nSigmaTOF2;
+ nSigmaComb2Ref = nSigmaTOF2Ref;
+ }
if(nSigmaComb2 < 2) nSigmaComb2 = 2;
else if(nSigmaComb2 < 3) nSigmaComb2 = 3;
else if(nSigmaComb2 < 5) nSigmaComb2 = 4.99;
else nSigmaComb2 = 6;
+ if(nSigmaComb2Ref < 2) nSigmaComb2Ref = 2;
+ else if(nSigmaComb2Ref < 3) nSigmaComb2Ref = 3;
+ else if(nSigmaComb2Ref < 5) nSigmaComb2Ref = 4.99;
+ else nSigmaComb2Ref = 6;
+
Bool_t isTrue = kFALSE;
if(mcArray){
Double_t deltaphi1 = KpTrack->Phi() - fPsi;
Double_t deltaphi2 = KnTrack->Phi() - fPsi;
+ if(gRandom->Rndm() < 0.5){
+ deltaphi1 += TMath::Pi();
+ deltaphi2 += TMath::Pi();
+ }
+
while(deltaphi1 > TMath::Pi()) deltaphi1 -= TMath::Pi()*2;
while(deltaphi1 < -TMath::Pi()) deltaphi1 += TMath::Pi()*2;
while(deltaphi2 > TMath::Pi()) deltaphi2 -= TMath::Pi()*2;
if(fPtKn > 4.299) fPtKn = 4.299;
- Float_t xTOfill[] = {fPtPhi,KpTrack->Eta(),fPtKp,fPtKn,(fPidKp%128)*0.01,(fPidKn%128)*0.01,tofMatch1,tofMatch2,isTrue,nSigmaComb,nSigmaComb2,deltaphi1,deltaphi2,fPsi};
+ Float_t xTOfill[] = {static_cast<Float_t>(fPtPhi),static_cast<Float_t>(KpTrack->Eta()),static_cast<Float_t>(fPtKp),static_cast<Float_t>(fPtKn),static_cast<Float_t>((fPidKp%128)*0.01),static_cast<Float_t>((fPidKn%128)*0.01),static_cast<Float_t>(tofMatch1),static_cast<Float_t>(tofMatch2),static_cast<Float_t>(isTrue),static_cast<Float_t>(nSigmaComb),static_cast<Float_t>(nSigmaComb2),static_cast<Float_t>(deltaphi1),static_cast<Float_t>(deltaphi2),static_cast<Float_t>(fPsi)};
+ Float_t xTOfill2[] = {static_cast<Float_t>(fPtPhi),static_cast<Float_t>(KpTrack->Eta()),static_cast<Float_t>(fPtKp),static_cast<Float_t>(fPtKn),static_cast<Float_t>((fPidKp%128)*0.01),static_cast<Float_t>((fPidKn%128)*0.01),static_cast<Float_t>(tofMatch1),static_cast<Float_t>(tofMatch2),static_cast<Float_t>(isTrue),static_cast<Float_t>(nSigmaComb),static_cast<Float_t>(nSigmaComb2),static_cast<Float_t>(deltaphi1),static_cast<Float_t>(deltaphi2),static_cast<Float_t>(fPsi)};
Int_t ipt = 0;
while(fPtPhiMin[ipt] < fPtPhi && ipt < nPtBin){
if(ipt < 0) ipt = 0; // just to be sure
if(TMath::Abs(fEtaPhi) < 0.8 && fPtKp > 0.3 && fPtKn > 0.3){
+ if(fSpeciesRef != 3){
+ xTOfill[4] = probP[fSpeciesRef];
+ xTOfill2[5] = probN[fSpeciesRef];
+
+ xTOfill[9] = nSigmaCombRef;
+ xTOfill2[10] = nSigmaComb2Ref;
+ }
+
+
if((fPidKn%128) > 80) fContPid->Fill(0,fMassV0,fCentrality,xTOfill); // use tagging on negative track
xTOfill[1] = KnTrack->Eta();
- if((fPidKp%128) > 80) fContPid2->Fill(0,fMassV0,fCentrality,xTOfill);// use tagging on positive track
+ if((fPidKp%128) > 80) fContPid2->Fill(0,fMassV0,fCentrality,xTOfill2);// use tagging on positive track
if(fPIDuserCut){
- Float_t xUser[] = {KpTrack->Eta(),fPtKp,isTrue,0,deltaphi1,fPsi};
- Float_t xUser2[] = {KnTrack->Eta(),fPtKn,isTrue,0,deltaphi2,fPsi};
+ Float_t xUser[] = {static_cast<Float_t>(KpTrack->Eta()),static_cast<Float_t>(fPtKp),static_cast<Float_t>(isTrue),0,static_cast<Float_t>(deltaphi1),static_cast<Float_t>(fPsi)};
+ Float_t xUser2[] = {static_cast<Float_t>(KnTrack->Eta()),static_cast<Float_t>(fPtKn),static_cast<Float_t>(isTrue),0,static_cast<Float_t>(deltaphi2),static_cast<Float_t>(fPsi)};
if(fPIDuserCut->IsSelected(KpTrack,AliPID::kPion)){ // to be filled for positive
xUser[3] = 1;