AliAODRecoDecayHF3Prong *dd = (AliAODRecoDecayHF3Prong*)d;
- Int_t iter=-1;
+ Int_t iter=-1;
if(fVarsForOpt[0]){
iter++;
vars[iter]=dd->InvMassLcpKpi();
//
if(!fCutsRD){
- cout<<"Cut matrice not inizialized. Exit..."<<endl;
+ AliError("Cut matrice not inizialized. Exit...\n");
return 0;
}
//PrintAll();
AliAODRecoDecayHF3Prong* d=(AliAODRecoDecayHF3Prong*)obj;
if(!d){
- cout<<"AliAODRecoDecayHF3Prong null"<<endl;
+ AliError("AliAODRecoDecayHF3Prong null \n");
return 0;
}
if(fUseTrackSelectionWithFilterBits && d->HasBadDaughters()) return 0;
+
+ // selection on daughter tracks
+ if(selectionLevel==AliRDHFCuts::kAll ||
+ selectionLevel==AliRDHFCuts::kTracks) {
+ if(!AreDaughtersSelected(d)) return 0;
+ }
+
+
+ // PID selection
if(selectionLevel==AliRDHFCuts::kAll ||
selectionLevel==AliRDHFCuts::kCandidate||
selectionLevel==AliRDHFCuts::kPID) {
- switch (fPIDStrategy) {
- case kNSigma:
- returnvaluePID = IsSelectedPID(d);
-
+ switch (fPIDStrategy) {
+ case kNSigma:
+ returnvaluePID = IsSelectedPID(d);
break;
- case kCombined:
- returnvaluePID = IsSelectedCombinedPID(d);
+ case kNSigmaPbPb:
+ returnvaluePID = IsSelectedNSigmaPbPb(d);
break;
- case kCombinedSoft:
- returnvaluePID = IsSelectedCombinedPIDSoft(d);
+ case kCombined:
+ returnvaluePID = IsSelectedCombinedPID(d);
break;
- case kNSigmaStrong:
- returnvaluePID = IsSelectedPIDStrong(d);
- }
- fIsSelectedPID=returnvaluePID;
+ case kCombinedSoft:
+ returnvaluePID = IsSelectedCombinedPIDSoft(d);
+ break;
+ case kNSigmaStrong:
+ returnvaluePID = IsSelectedPIDStrong(d);
+ break;
+ case kCombinedpPb:
+ returnvaluePID = IsSelectedCombinedPIDpPb(d);
+ break;
+ case kCombinedpPb2:
+ returnvaluePID = IsSelectedCombinedPIDpPb2(d);
+ break;
+ }
+ fIsSelectedPID=returnvaluePID;
}
// if(fUsePID || selectionLevel==AliRDHFCuts::kPID) returnvaluePID = IsSelectedCombinedPID(d); // to test!!
if(returnvaluePID==0) return 0;
+
+
+
// selection on candidate
if(selectionLevel==AliRDHFCuts::kAll ||
selectionLevel==AliRDHFCuts::kCandidate) {
Int_t ptbin=PtBin(pt);
- Double_t mLcpKpi,mLcpiKp;
+ Double_t mLcpKpi=0.,mLcpiKp=0.;
Int_t okLcpKpi=1,okLcpiKp=1;
Double_t mLcPDG = TDatabasePDG::Instance()->GetParticle(4122)->Mass();
}
- // selection on daughter tracks
- if(selectionLevel==AliRDHFCuts::kAll ||
- selectionLevel==AliRDHFCuts::kTracks) {
- if(!AreDaughtersSelected(d)) return 0;
- }
-
Int_t returnvalueTot=CombinePIDCuts(returnvalue,returnvaluePID);
return returnvalueTot;
return returnvalue;
}
-//---------------------------------------------------------------------------
-Int_t AliRDHFCutsLctopKpi::IsSelectedCombinedPID(AliAODRecoDecayHF* obj) {
- // Printf(" -------- IsSelectedCombinedPID --------------");
+//--------------------------------------------------------------------------
+
+Int_t AliRDHFCutsLctopKpi::IsSelectedNSigmaPbPb(AliAODRecoDecayHF* obj) {
+
+ if(!fUsePID || !obj) return 3;
+ Int_t okLcpKpi=0,okLcpiKp=0;
+ Int_t returnvalue=0;
+ Bool_t isPeriodd=fPidHF->GetOnePad();
+ Bool_t isMC=fPidHF->GetMC();
+ Bool_t ispion0=kTRUE,ispion2=kTRUE;
+ Bool_t isproton0=kFALSE,isproton2=kFALSE;
+ Bool_t iskaon1=kFALSE;
+ if(isPeriodd) {
+ fPidObjprot->SetOnePad(kTRUE);
+ fPidObjpion->SetOnePad(kTRUE);
+ }
+ if(isMC) {
+ fPidObjprot->SetMC(kTRUE);
+ fPidObjpion->SetMC(kTRUE);
+ }
+
+ if(fPidObjprot->GetPidResponse()==0x0){
+ AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+ AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
+ AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
+ fPidObjprot->SetPidResponse(pidResp);
+ }
+ if(fPidObjpion->GetPidResponse()==0x0){
+ AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+ AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
+ AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
+ fPidObjpion->SetPidResponse(pidResp);
+ }
+ if(fPidHF->GetPidResponse()==0x0){
+ AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+ AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
+ AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
+ fPidHF->SetPidResponse(pidResp);
+ }
+
+ for(Int_t i=0;i<3;i++){
+ AliAODTrack *track=(AliAODTrack*)obj->GetDaughter(i);
+ if(!track) return 0;
+
+ if(i==1) {
+ //kaon
+ Int_t isKaon=fPidHF->MakeRawPid(track,3);
+ if(isKaon>=1) iskaon1=kTRUE;
+ if(!iskaon1) return 0;
+ }
+
+ else {
+ //pion or proton
+ Int_t isProton=fPidObjprot->MakeRawPid(track,4);
+ Int_t isPion=fPidObjpion->MakeRawPid(track,2);
+
+ if(i==0) {
+ if(isPion<0) ispion0=kFALSE;
+ if(isProton>=1) isproton0=kTRUE;
+ }
+ if(!ispion0 && !isproton0) return 0;
+
+ if(i==2) {
+ if(isPion<0) ispion2=kFALSE;
+ if(isProton>=1) isproton2=kTRUE;
+ }
+ }
+ }
+
+ if(ispion2 && isproton0 && iskaon1) okLcpKpi=1;
+ if(ispion0 && isproton2 && iskaon1) okLcpiKp=1;
+ if(okLcpKpi) returnvalue=1; //cuts passed as Lc->pKpi
+ if(okLcpiKp) returnvalue=2; //cuts passed as Lc->piKp
+ if(okLcpKpi && okLcpiKp) returnvalue=3; //cuts passed as both pKpi and piKp
+
+ return returnvalue;
+}
+
+
+
+
+//---------------------------------------------------------------------------
+Int_t AliRDHFCutsLctopKpi::IsSelectedCombinedPID(AliAODRecoDecayHF* obj) {
if(!fUsePID || !obj) {return 3;}
Int_t okLcpKpi=0,okLcpiKp=0;
esdTrackCuts->SetPtRange(0.3,1.e10);
AddTrackCuts(esdTrackCuts);
- const Int_t nptbins=4;
+ const Int_t nptbins=8;
const Int_t nvars=13;
Float_t* ptbins;
ptbins=new Float_t[nptbins+1];
- ptbins[0]=0.;
+ ptbins[0]=1.;
ptbins[1]=2.;
ptbins[2]=3.;
ptbins[3]=4.;
- ptbins[4]=9999.;
+ ptbins[4]=5.;
+ ptbins[5]=6.;
+ ptbins[6]=8.;
+ ptbins[7]=10.;
+ ptbins[8]=20.;
SetGlobalIndex(nvars,nptbins);
SetPtBins(nptbins+1,ptbins);
}
for(Int_t ipt=0;ipt<nptbins;ipt++){
- prodcutsval[0][ipt]=0.18;
+ prodcutsval[0][ipt]=0.13;
prodcutsval[1][ipt]=0.4;
- prodcutsval[2][ipt]=0.5;
+ prodcutsval[2][ipt]=0.4;
prodcutsval[3][ipt]=0.;
prodcutsval[4][ipt]=0.;
- prodcutsval[5][ipt]=0.01;
+ prodcutsval[5][ipt]=0.;
prodcutsval[6][ipt]=0.06;
prodcutsval[7][ipt]=0.005;
prodcutsval[8][ipt]=0.;
SetPidprot(pidObjp);
SetUsePID(kTRUE);
-
+ SetOptPileup(kTRUE);
+
PrintAll();
for(Int_t iiv=0;iiv<nvars;iiv++){
delete [] ptbins;
ptbins=NULL;
+ delete pidObjK;
+ pidObjK=NULL;
+ delete pidObjpi;
+ pidObjpi=NULL;
delete pidObjp;
pidObjp=NULL;
esdTrackCuts->SetEtaRange(-0.8,0.8);
esdTrackCuts->SetMaxDCAToVertexXY(1.);
esdTrackCuts->SetMaxDCAToVertexZ(1.);
- esdTrackCuts->SetPtRange(0.8,1.e10);
+ esdTrackCuts->SetPtRange(0.49,1.e10);
AddTrackCuts(esdTrackCuts);
- const Int_t nptbins=4;
+ const Int_t nptbins=8;
const Int_t nvars=13;
Float_t* ptbins;
ptbins=new Float_t[nptbins+1];
- ptbins[0]=0.;
+ ptbins[0]=1.;
ptbins[1]=2.;
ptbins[2]=3.;
ptbins[3]=4.;
- ptbins[4]=9999.;
+ ptbins[4]=5.;
+ ptbins[5]=6.;
+ ptbins[6]=8.;
+ ptbins[7]=10.;
+ ptbins[8]=99999.;
+
SetGlobalIndex(nvars,nptbins);
SetPtBins(nptbins+1,ptbins);
}
SetCuts(nvars,nptbins,prodcutsval);
- AliAODPidHF* pidObjK=new AliAODPidHF();
- Double_t sigmasK[5]={3.,1.,1.,3.,2.};
- pidObjK->SetSigma(sigmasK);
- pidObjK->SetAsym(kTRUE);
- pidObjK->SetMatch(1);
- pidObjK->SetTPC(kTRUE);
- pidObjK->SetTOF(kTRUE);
- pidObjK->SetITS(kTRUE);
- Double_t plimK[2]={0.5,0.8};
- pidObjK->SetPLimit(plimK,2);
-
- SetPidHF(pidObjK);
-
- AliAODPidHF* pidObjpi=new AliAODPidHF();
- pidObjpi->SetTPC(kTRUE);
- Double_t sigmaspi[5]={3.,0.,0.,0.,0.};
- pidObjpi->SetSigma(sigmaspi);
- SetPidpion(pidObjpi);
-
- AliAODPidHF* pidObjp=new AliAODPidHF();
- Double_t sigmasp[5]={3.,1.,1.,3.,2.};
- pidObjp->SetSigma(sigmasp);
- pidObjp->SetAsym(kTRUE);
- pidObjp->SetMatch(1);
- pidObjp->SetTPC(kTRUE);
- pidObjp->SetTOF(kTRUE);
- pidObjp->SetITS(kTRUE);
- Double_t plimp[2]={1.,2.};
- pidObjp->SetPLimit(plimp,2);
+ AliAODPidHF* pidObj=new AliAODPidHF();
+ pidObj->SetTPC(kTRUE);
+ pidObj->SetTOF(kTRUE);
+ SetPidHF(pidObj);
+ SetPidpion(pidObj);
+ SetPidprot(pidObj);
- SetPidprot(pidObjp);
+ // bayesian pid
+ GetPidHF()->SetUseCombined(kTRUE);
+ GetPidHF()->SetUseDefaultPriors(kTRUE);
+ GetPidHF()->SetCombDetectors(AliAODPidHF::kTPCTOF);
+ for (Int_t ispecies=0;ispecies<AliPID::kSPECIES;++ispecies){
+ SetPIDThreshold(static_cast<AliPID::EParticleType>(ispecies),0);
+ }
+ SetPIDStrategy(AliRDHFCutsLctopKpi::kCombinedpPb);
SetUsePID(kTRUE);
+
PrintAll();
for(Int_t iiv=0;iiv<nvars;iiv++){
delete [] ptbins;
ptbins=NULL;
- delete pidObjp;
- pidObjp=NULL;
+ delete pidObj;
+ pidObj=NULL;
return;
}
return returnvalue;
}
+//--------------------
+Int_t AliRDHFCutsLctopKpi::IsSelectedCombinedPIDpPb(AliAODRecoDecayHF* obj) {
+
+ if(!fUsePID || !obj) {return 3;}
+ Int_t okLcpKpi=0,okLcpiKp=0;
+ Int_t returnvalue=0;
+
+ Bool_t isMC=fPidHF->GetMC();
+
+
+ if(isMC) {
+ fPidObjprot->SetMC(kTRUE);
+ fPidObjpion->SetMC(kTRUE);
+ }
+
+ AliVTrack *track0=dynamic_cast<AliVTrack*>(obj->GetDaughter(0));
+ AliVTrack *track1=dynamic_cast<AliVTrack*>(obj->GetDaughter(1));
+ AliVTrack *track2=dynamic_cast<AliVTrack*>(obj->GetDaughter(2));
+ if (!track0 || !track1 || !track2) return 0;
+ Double_t prob0[AliPID::kSPECIES];
+ Double_t prob1[AliPID::kSPECIES];
+ Double_t prob2[AliPID::kSPECIES];
+
+ fPidHF->GetPidCombined()->ComputeProbabilities(track0,fPidHF->GetPidResponse(),prob0);
+ fPidHF->GetPidCombined()->ComputeProbabilities(track1,fPidHF->GetPidResponse(),prob1);
+ fPidHF->GetPidCombined()->ComputeProbabilities(track2,fPidHF->GetPidResponse(),prob2);
+
+
+ if(fPIDThreshold[AliPID::kPion]>0. && fPIDThreshold[AliPID::kKaon]>0. && fPIDThreshold[AliPID::kProton]>0.){
+ okLcpiKp= (prob0[AliPID::kPion ]>fPIDThreshold[AliPID::kPion ])
+ &&(prob1[AliPID::kKaon ]>fPIDThreshold[AliPID::kKaon ])
+ &&(prob2[AliPID::kProton]>fPIDThreshold[AliPID::kProton]);
+ okLcpKpi= (prob0[AliPID::kProton]>fPIDThreshold[AliPID::kProton])
+ &&(prob1[AliPID::kKaon ]>fPIDThreshold[AliPID::kKaon ])
+ &&(prob2[AliPID::kPion ]>fPIDThreshold[AliPID::kPion ]);
+ }else{
+ //pion or proton
+
+
+ if(TMath::MaxElement(AliPID::kSPECIES,prob1) == prob1[AliPID::kKaon]){
+ if(TMath::MaxElement(AliPID::kSPECIES,prob0) == prob0[AliPID::kProton] && TMath::MaxElement(AliPID::kSPECIES,prob2) == prob2[AliPID::kPion]) okLcpKpi = 1;
+ if(TMath::MaxElement(AliPID::kSPECIES,prob2) == prob2[AliPID::kProton] && TMath::MaxElement(AliPID::kSPECIES,prob0) == prob0[AliPID::kPion]) okLcpiKp = 1;
+ }
+ }
+
+ if(okLcpKpi) returnvalue=1; //cuts passed as Lc->pKpi
+ if(okLcpiKp) returnvalue=2; //cuts passed as Lc->piKp
+ if(okLcpKpi && okLcpiKp) returnvalue=3; //cuts passed as both pKpi and piKp
+
+ return returnvalue;
+}
+//-----------------------
+Int_t AliRDHFCutsLctopKpi::IsSelectedCombinedPIDpPb2(AliAODRecoDecayHF* obj) {
+
+ Int_t returnvalue =0;
+ Double_t thresholdK =0.7;
+ Double_t thresholdPi =0.3; //!
+ Double_t thresholdPr =0.7;
+
+ AliVTrack *track0=dynamic_cast<AliVTrack*>(obj->GetDaughter(0));
+ AliVTrack *track1=dynamic_cast<AliVTrack*>(obj->GetDaughter(1));
+ AliVTrack *track2=dynamic_cast<AliVTrack*>(obj->GetDaughter(2));
+
+ if (!track0 || !track1 || !track2) return 0;
+ Double_t prob0[AliPID::kSPECIES];
+ Double_t prob1[AliPID::kSPECIES];
+ Double_t prob2[AliPID::kSPECIES];
+
+ fPidHF->GetPidCombined()->ComputeProbabilities(track0,fPidHF->GetPidResponse(),prob0);
+ fPidHF->GetPidCombined()->ComputeProbabilities(track1,fPidHF->GetPidResponse(),prob1);
+ fPidHF->GetPidCombined()->ComputeProbabilities(track2,fPidHF->GetPidResponse(),prob2);
+
+ if(prob1[AliPID::kKaon]>thresholdK){
+ if(TMath::MaxElement(AliPID::kSPECIES,prob0)>TMath::MaxElement(AliPID::kSPECIES,prob2)){
+ if(((prob0[AliPID::kPion ]>prob0[AliPID::kProton ])&& prob0[AliPID::kPion]>thresholdPi) && prob2[AliPID::kProton]>thresholdPr) returnvalue=2;//piKp
+ else if(((prob0[AliPID::kProton ]>prob0[AliPID::kPion ])&& prob0[AliPID::kProton]>thresholdPr) && prob2[AliPID::kPion]>thresholdPi)returnvalue =1;//pKpi
+ }
+
+ else if(TMath::MaxElement(AliPID::kSPECIES,prob0)<TMath::MaxElement(AliPID::kSPECIES,prob2)){
+ if(((prob2[AliPID::kPion ]>prob2[AliPID::kProton ])&& prob2[AliPID::kPion]>thresholdPi) && prob0[AliPID::kProton]>thresholdPr) returnvalue=1; //pKpi
+ else if(((prob2[AliPID::kProton ]>prob2[AliPID::kPion ])&& prob2[AliPID::kProton]>thresholdPr) && prob0[AliPID::kPion]>thresholdPi)returnvalue =2; //piKp
+ }
+
+ }
+ return returnvalue;
+
+}
+//------------------------------------------------------
+void AliRDHFCutsLctopKpi::SetStandardCutsPPb2013() {
+
+ SetName("LctopKpiProdCuts");
+ SetTitle("Production cuts for Lc analysis");
+
+ AliESDtrackCuts *esdTrackCuts = new AliESDtrackCuts("AliESDtrackCuts","default");
+ esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
+ esdTrackCuts->SetRequireTPCRefit(kTRUE);
+ esdTrackCuts->SetMinNClustersTPC(70);
+ esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
+ AliESDtrackCuts::kAny);
+ esdTrackCuts->SetRequireITSRefit(kTRUE);
+ esdTrackCuts->SetMinNClustersITS(4);
+ esdTrackCuts->SetMinDCAToVertexXY(0.);
+ esdTrackCuts->SetEtaRange(-0.8,0.8);
+ esdTrackCuts->SetPtRange(0.3,1.e10);
+ AddTrackCuts(esdTrackCuts);
+
+ const Int_t nvars=13;
+ const Int_t nptbins=9;
+ Float_t* ptbins;
+ ptbins=new Float_t[nptbins+1];
+ ptbins[0]=0.;
+ ptbins[1]=1.;
+ ptbins[2]=2.;
+ ptbins[3]=3.;
+ ptbins[4]=4.;
+ ptbins[5]=5.;
+ ptbins[6]=6.;
+ ptbins[7]=8.;
+ ptbins[8]=10.;
+ ptbins[9]=99999.;
+
+ SetGlobalIndex(nvars,nptbins);
+ SetPtBins(nptbins+1,ptbins);
+
+ Float_t** prodcutsval;
+ prodcutsval=new Float_t*[nvars];
+ for(Int_t iv=0;iv<nvars;iv++){
+ prodcutsval[iv]=new Float_t[nptbins];
+ }
+
+ for(Int_t ipt=0;ipt<nptbins;ipt++){
+ prodcutsval[0][ipt]=0.13;
+ prodcutsval[1][ipt]=0.4;
+ prodcutsval[2][ipt]=0.4;
+ prodcutsval[3][ipt]=0.;
+ prodcutsval[4][ipt]=0.;
+ prodcutsval[5][ipt]=0.;
+ prodcutsval[6][ipt]=0.06;
+ prodcutsval[7][ipt]=0.;
+ prodcutsval[8][ipt]=0.;
+ prodcutsval[9][ipt]=0.;
+ prodcutsval[10][ipt]=0.;
+ prodcutsval[11][ipt]=0.05;
+ prodcutsval[12][ipt]=0.4;
+ }
+ SetCuts(nvars,nptbins,prodcutsval);
+
+ AliAODPidHF* pidObjK=new AliAODPidHF();
+ Double_t sigmasK[5]={3.,1.,1.,3.,2.};
+ pidObjK->SetSigma(sigmasK);
+ pidObjK->SetAsym(kTRUE);
+ pidObjK->SetMatch(1);
+ pidObjK->SetTPC(kTRUE);
+ pidObjK->SetTOF(kTRUE);
+ pidObjK->SetITS(kTRUE);
+ Double_t plimK[2]={0.5,0.8};
+ pidObjK->SetPLimit(plimK,2);
+ pidObjK->SetTOFdecide(kTRUE);
+ SetPidHF(pidObjK);
+
+ AliAODPidHF* pidObjpi=new AliAODPidHF();
+ pidObjpi->SetTPC(kTRUE);
+ Double_t sigmaspi[5]={3.,0.,0.,0.,0.};
+ pidObjpi->SetSigma(sigmaspi);
+ pidObjpi->SetTOFdecide(kTRUE);
+ SetPidpion(pidObjpi);
+
+ AliAODPidHF* pidObjp=new AliAODPidHF();
+ Double_t sigmasp[5]={3.,1.,1.,3.,2.};
+ pidObjp->SetSigma(sigmasp);
+ pidObjp->SetAsym(kTRUE);
+ pidObjp->SetMatch(1);
+ pidObjp->SetTPC(kTRUE);
+ pidObjp->SetTOF(kTRUE);
+ pidObjp->SetITS(kTRUE);
+ Double_t plimp[2]={1.,2.};
+ pidObjp->SetPLimit(plimp,2);
+ pidObjp->SetTOFdecide(kTRUE);
+
+ SetUsePID(kTRUE);
+
+ PrintAll();
+
+ for(Int_t iiv=0;iiv<nvars;iiv++){
+ delete [] prodcutsval[iiv];
+ }
+ delete [] prodcutsval;
+ prodcutsval=NULL;
+ delete [] ptbins;
+ ptbins=NULL;
+
+ delete pidObjK;
+ pidObjK=NULL;
+ delete pidObjpi;
+ pidObjpi=NULL;
+ delete pidObjp;
+ pidObjp=NULL;
+
+ return;
+}
+