/////////////////////////////////////////////////////////////
//
-// AliAnalysisTaskSE for the extraction of signal(e.g D+) of heavy flavor
+// AliAnalysisTaskSE for the extraction of signal(e.g Lambdac) of heavy flavor
// decay candidates with the MC truth.
-// Authors: Renu Bala, bala@to.infn.it
-// F. Prino, prino@to.infn.it
-// G. Ortona, ortona@to.infn.it
+// Authors: r.romita@gsi.de
/////////////////////////////////////////////////////////////
#include <TClonesArray.h>
#include "AliAODPidHF.h"
#include "AliRDHFCutsLctopKpi.h"
#include "AliRDHFCuts.h"
+#include "AliKFVertex.h"
+#include "AliESDVertex.h"
ClassImp(AliAnalysisTaskSELambdac)
AliAnalysisTaskSE(),
fOutput(0),
fHistNEvents(0),
-fWellIDProt3sig(0),
-fWellIDProt2sig(0),
-fWellIDProt3sigSe(0),
-fWellIDProt2sigSe(0),
-fWellIDProt3sigRe(0),
-fWellIDProt2sigRe(0),
-fWellIDKaon3sig(0),
-fWellIDKaon3sigSe(0),
-fWellIDKaon3sigRe(0),
-fWellIDKaon2sig(0),
-fWellIDKaon2sigSe(0),
-fWellIDKaon2sigRe(0),
-fRealProt(0),
-fRealKaon(0),
-fFakeProt3sig(0),
-fFakeProt2sig(0),
-fFakeProt3sigSe(0),
-fFakeProt2sigSe(0),
-fFakeProt3sigRe(0),
-fFakeProt2sigRe(0),
-fFakeKaon3sig(0),
-fFakeKaon3sigSe(0),
-fFakeKaon3sigRe(0),
-fFakeKaon2sig(0),
-fFakeKaon2sigSe(0),
-fFakeKaon2sigRe(0),
-fTPCSignal3Sigma(0),
-fTPCSignal3SigmaReK(0),
-fTPCSignal3SigmaSedK(0),
-fTPCSignal3SigmaRep(0),
-fTPCSignal3SigmaSedp(0),
-fTPCSignal2Sigma(0),
-fTPCSignal2SigmaReK(0),
-fTPCSignal2SigmaSedK(0),
-fTPCSignal2SigmaRep(0),
-fTPCSignal2SigmaSedp(0),
+fhChi2(0),
+fhMassPtGreater3(0),
+fhMassPtGreater3TC(0),
fNtupleLambdac(0),
fUpmasslimit(2.486),
fLowmasslimit(2.086),
AliAnalysisTaskSE(name),
fOutput(0),
fHistNEvents(0),
-fWellIDProt3sig(0),
-fWellIDProt2sig(0),
-fWellIDProt3sigSe(0),
-fWellIDProt2sigSe(0),
-fWellIDProt3sigRe(0),
-fWellIDProt2sigRe(0),
-fWellIDKaon3sig(0),
-fWellIDKaon3sigSe(0),
-fWellIDKaon3sigRe(0),
-fWellIDKaon2sig(0),
-fWellIDKaon2sigSe(0),
-fWellIDKaon2sigRe(0),
-fRealProt(0),
-fRealKaon(0),
-fFakeProt3sig(0),
-fFakeProt2sig(0),
-fFakeProt3sigSe(0),
-fFakeProt2sigSe(0),
-fFakeProt3sigRe(0),
-fFakeProt2sigRe(0),
-fFakeKaon3sig(0),
-fFakeKaon3sigSe(0),
-fFakeKaon3sigRe(0),
-fFakeKaon2sig(0),
-fFakeKaon2sigSe(0),
-fFakeKaon2sigRe(0),
-fTPCSignal3Sigma(0),
-fTPCSignal3SigmaReK(0),
-fTPCSignal3SigmaSedK(0),
-fTPCSignal3SigmaRep(0),
-fTPCSignal3SigmaSedp(0),
-fTPCSignal2Sigma(0),
-fTPCSignal2SigmaReK(0),
-fTPCSignal2SigmaSedK(0),
-fTPCSignal2SigmaRep(0),
-fTPCSignal2SigmaSedp(0),
+fhChi2(0),
+fhMassPtGreater3(0),
+fhMassPtGreater3TC(0),
fNtupleLambdac(0),
fUpmasslimit(2.486),
fLowmasslimit(2.086),
fUseKF(kFALSE),
fVHF(0)
{
- //Double_t ptlim[5]={0.,2.,3.,5,9999999.};
- //SetPtBinLimit(5, ptlim);
SetPtBinLimit(fRDCutsAnalysis->GetNPtBins()+1,fRDCutsAnalysis->GetPtBinLimits());
// Default constructor
// Output slot #1 writes into a TList container
fArrayBinLimits[0]=0.;
fArrayBinLimits[1]=2.;
fArrayBinLimits[2]=3.;
- fArrayBinLimits[3]=5.;
+ fArrayBinLimits[3]=4.;
for(Int_t i=4; i<kMaxPtBins+1; i++) fArrayBinLimits[i]=99999999.;
}else{
fNPtBins=n-1;
}
if(fDebug > 1){
printf("Number of Pt bins = %d\n",fNPtBins);
- for(Int_t i=0; i<fNPtBins+1; i++) printf(" Bin%d = %8.2f-%8.2f\n",i,fArrayBinLimits[i],fArrayBinLimits[i+1]);
+ for(Int_t i=0; i<fNPtBins; i++) printf(" Bin%d = %8.2f-%8.2f\n",i,fArrayBinLimits[i],fArrayBinLimits[i+1]);
}
}
//_________________________________________________________________
-Double_t AliAnalysisTaskSELambdac::GetPtBinLimit(Int_t ibin){
+Double_t AliAnalysisTaskSELambdac::GetPtBinLimit(Int_t ibin) const{
if(ibin>fNPtBins)return -1;
return fArrayBinLimits[ibin];
}
fMassHistLSTC[indexLS]->Sumw2();
}
- fRealProt=new TH1F("fRealProt","fRealProt",100,0, 10);
- fRealKaon=new TH1F("fRealKaon","fRealKaon",100,0, 10);
- fWellIDProt3sig=new TH1F("fWellIDProt3sig","fWellIDProt3sig",100,0, 10);
- fWellIDProt2sig=new TH1F("fWellIDProt2sig","fWellIDProt2sig",100,0, 10);
- fWellIDProt3sigSe=new TH1F("fWellIDProt3sigSe","fWellIDProt3sigSe",100,0, 10);
- fWellIDProt2sigSe=new TH1F("fWellIDProt2sigSe","fWellIDProt2sigSe",100,0, 10);
- fWellIDProt3sigRe=new TH1F("fWellIDProt3sigRe","fWellIDProt3sigRe",100,0, 10);
- fWellIDProt2sigRe=new TH1F("fWellIDProt2sigRe","fWellIDProt2sigRe",100,0, 10);
- fWellIDKaon3sig=new TH1F("fWellIDKaon3sig","fWellIDKaon3sig",100,0, 10);
- fWellIDKaon2sig=new TH1F("fWellIDKaon2sig","fWellIDKaon2sig",100,0, 10);
- fWellIDKaon3sigSe=new TH1F("fWellIDKaon3sigSe","fWellIDKaon3sigSe",100,0, 10);
- fWellIDKaon2sigSe=new TH1F("fWellIDKaon2sigSe","fWellIDKaon2sigSe",100,0, 10);
- fWellIDKaon3sigRe=new TH1F("fWellIDKaon3sigRe","fWellIDKaon3sigRe",100,0, 10);
- fWellIDKaon2sigRe=new TH1F("fWellIDKaon2sigRe","fWellIDKaon2sigRe",100,0, 10);
- fTPCSignal3Sigma=new TH2F("fTPCSignal3Sigma","fTPCSignal3Sigma",100,0, 10, 100, 0, 100);
- fTPCSignal3SigmaReK=new TH2F("fTPCSignal3SigmaReK","fTPCSignal3SigmaReK",100,0, 10, 100, 0, 100);
- fTPCSignal3SigmaSedK=new TH2F("fTPCSignal3SigmaSedK","fTPCSignal3SigmaSedK",100,0, 10, 100, 0, 100);
- fTPCSignal3SigmaRep=new TH2F("fTPCSignal3SigmaRep","fTPCSignal3SigmaRep",100,0, 10, 100, 0, 100);
- fTPCSignal3SigmaSedp=new TH2F("fTPCSignal3SigmaSedp","fTPCSignal3SigmaSedp",100,0, 10, 100, 0, 100);
- fTPCSignal2Sigma=new TH2F("fTPCSignal2Sigma","fTPCSignal2Sigma",100,0, 10, 100, 0, 100);
- fTPCSignal2SigmaReK=new TH2F("fTPCSignal2SigmaReK","fTPCSignal2SigmaReK",100,0, 10, 100, 0, 100);
- fTPCSignal2SigmaSedK=new TH2F("fTPCSignal2SigmaSedK","fTPCSignal2SigmaSedK",100,0, 10, 100, 0, 100);
- fTPCSignal2SigmaRep=new TH2F("fTPCSignal2SigmaRep","fTPCSignal2SigmaRep",100,0, 10, 100, 0, 100);
- fTPCSignal2SigmaSedp=new TH2F("fTPCSignal2SigmaSedp","fTPCSignal2SigmaSedp",100,0, 10, 100, 0, 100);
- fFakeProt3sig=new TH1F("fFakeProt3sig","fFakeProt3sig",100,0, 10);
- fFakeProt2sig=new TH1F("fFakeProt2sig","fFakeProt2sig",100,0, 10);
- fFakeProt3sigSe=new TH1F("fFakeProt3sigSe","fFakeProt3sigSe",100,0, 10);
- fFakeProt2sigSe=new TH1F("fFakeProt2sigSe","fFakeProt2sigSe",100,0, 10);
- fFakeProt3sigRe=new TH1F("fFakeProt3sigRe","fFakeProt3sigRe",100,0, 10);
- fFakeProt2sigRe=new TH1F("fFakeProt2sigRe","fFakeProt2sigRe",100,0, 10);
- fFakeKaon3sig=new TH1F("fFakeKaon3sig","fFakeKaon3sig",100,0, 10);
- fFakeKaon2sig=new TH1F("fFakeKaon2sig","fFakeKaon2sig",100,0, 10);
- fFakeKaon3sigSe=new TH1F("fFakeKaon3sigSe","fFakeKaon3sigSe",100,0, 10);
- fFakeKaon2sigSe=new TH1F("fFakeKaon2sigSe","fFakeKaon2sigSe",100,0, 10);
- fFakeKaon3sigRe=new TH1F("fFakeKaon3sigRe","fFakeKaon3sigRe",100,0, 10);
- fFakeKaon2sigRe=new TH1F("fFakeKaon2sigRe","fFakeKaon2sigRe",100,0, 10);
for(Int_t i=0; i<3*fNPtBins; i++){
fOutput->Add(fMassHist[i]);
fOutput->Add(fDCAHist[i]);
}
- fOutput->Add(fTPCSignal3Sigma);
- fOutput->Add(fTPCSignal3SigmaReK);
- fOutput->Add(fTPCSignal3SigmaSedK);
- fOutput->Add(fTPCSignal3SigmaRep);
- fOutput->Add(fTPCSignal3SigmaSedp);
- fOutput->Add(fTPCSignal2Sigma);
- fOutput->Add(fTPCSignal2SigmaReK);
- fOutput->Add(fTPCSignal2SigmaSedK);
- fOutput->Add(fTPCSignal2SigmaRep);
- fOutput->Add(fTPCSignal2SigmaSedp);
- fOutput->Add(fWellIDProt3sig);
- fOutput->Add(fWellIDProt2sig);
- fOutput->Add(fWellIDProt3sigSe);
- fOutput->Add(fWellIDProt2sigSe);
- fOutput->Add(fWellIDProt3sigRe);
- fOutput->Add(fWellIDProt2sigRe);
- fOutput->Add(fWellIDKaon3sig);
- fOutput->Add(fWellIDKaon2sig);
- fOutput->Add(fWellIDKaon3sigSe);
- fOutput->Add(fWellIDKaon2sigSe);
- fOutput->Add(fWellIDKaon3sigRe);
- fOutput->Add(fWellIDKaon2sigRe);
-
- fOutput->Add(fRealProt);
- fOutput->Add(fRealKaon);
- fOutput->Add(fFakeProt3sig);
- fOutput->Add(fFakeProt2sig);
- fOutput->Add(fFakeProt3sigSe);
- fOutput->Add(fFakeProt2sigSe);
- fOutput->Add(fFakeProt3sigRe);
- fOutput->Add(fFakeProt2sigRe);
- fOutput->Add(fFakeKaon3sig);
- fOutput->Add(fFakeKaon2sig);
- fOutput->Add(fFakeKaon3sigSe);
- fOutput->Add(fFakeKaon2sigSe);
- fOutput->Add(fFakeKaon3sigRe);
- fOutput->Add(fFakeKaon2sigRe);
fHistNEvents = new TH1F("fHistNEvents", "Number of processed events; ; Events",3,-1.5,1.5);
fHistNEvents->Sumw2();
fHistNEvents->SetMinimum(0);
fOutput->Add(fHistNEvents);
+
+ fhChi2 = new TH1F("fhChi2", "Chi2",100,0.,10.);
+ fhChi2->Sumw2();
+ fOutput->Add(fhChi2);
+
+ fhMassPtGreater3=new TH1F("fhMassPtGreater3","Pt > 3 GeV/c",100,fLowmasslimit,fUpmasslimit);
+ fhMassPtGreater3->Sumw2();
+ fOutput->Add(fhMassPtGreater3);
+ fhMassPtGreater3TC=new TH1F("fhMassPtGreater3TC","Pt > 3 GeV/c",100,fLowmasslimit,fUpmasslimit);
+ fhMassPtGreater3TC->Sumw2();
+ fOutput->Add(fhMassPtGreater3TC);
// heavy flavor candidates association to MC truth
AliAODEvent *aod = dynamic_cast<AliAODEvent*> (InputEvent());
- //tmp!
+ //tmp
fHistNEvents->Fill(0); // count event
// Post the data already here
PostData(1,fOutput);
// AOD primary vertex
AliAODVertex *vtx1 = (AliAODVertex*)aod->GetPrimaryVertex();
+ if(!vtx1) return;
+ if(vtx1==0x0) return;
+
+ if(!fRDCutsProduction->IsEventSelected(aod)) return;
// load MC particles
if(fReadMC){
unsetvtx=kTRUE;
}
- if(fRDCutsProduction->IsSelected(d,AliRDHFCuts::kCandidate)) {
+ Int_t isSelectedTracks = fRDCutsProduction->IsSelected(d,AliRDHFCuts::kTracks);
+ if(!isSelectedTracks) continue;
+
+ Int_t selection=fRDCutsProduction->IsSelected(d,AliRDHFCuts::kCandidate);
+ if(selection>0) {
Int_t iPtBin = -1;
Double_t ptCand = d->Pt();
if(ptCand<fArrayBinLimits[ibin+1])iPtBin=ibin;
}
- Bool_t passTightCuts=fRDCutsAnalysis->IsSelected(d,AliRDHFCuts::kCandidate);
Int_t labDp=-1;
Float_t deltaPx=0.;
Float_t deltaPy=0.;
Float_t yDecay=0.;
Float_t zDecay=0.;
Float_t pdgCode=-2;
+ Bool_t isSignal=kFALSE;
+ Float_t pdgCode1=-1;
+ Float_t pdgCode2=-1;
if(fReadMC){
labDp = MatchToMCLambdac(d,arrayMC);
//
if(labDp>0){
+ isSignal=kTRUE;
AliAODMCParticle *partDp = (AliAODMCParticle*)arrayMC->At(labDp);
AliAODMCParticle *dg0 = (AliAODMCParticle*)arrayMC->At(partDp->GetDaughter(0));
+ AliAODMCParticle *dg1 = (AliAODMCParticle*)arrayMC->At(partDp->GetDaughter(1));
deltaPx=partDp->Px()-d->Px();
deltaPy=partDp->Py()-d->Py();
deltaPz=partDp->Pz()-d->Pz();
yDecay=dg0->Yv();
zDecay=dg0->Zv();
pdgCode=TMath::Abs(partDp->GetPdgCode());
+ pdgCode1=TMath::Abs(dg0->GetPdgCode());
+ pdgCode2=TMath::Abs(dg1->GetPdgCode());
}else{
pdgCode=-1;
}
Double_t invMasspiKp=-1.;
Int_t pdgs[3]={0,0,0};
Double_t field=aod->GetMagneticField();
+ //apply MC PID
if(fReadMC && fMCPid){
- if(IspKpiMC(d,arrayMC,pdgs)) {
+ if(IspKpiMC(d,arrayMC)) {
invMasspKpi=d->InvMassLcpKpi();
if(fUseKF){
pdgs[0]=2212;pdgs[1]=321;pdgs[2]=211;
}
}
}
+ // apply realistic PID
if(fRealPid){
- if(IspKpiReal(d)) {
+ if(selection==1 || selection==3) {
invMasspKpi=d->InvMassLcpKpi();
+ pdgs[0]=2212;pdgs[1]=321;pdgs[2]=211;
if(fUseKF){
pdgs[0]=2212;pdgs[1]=321;pdgs[2]=211;
if(!VertexingKF(d,pdgs,field)) invMasspKpi=-1.;
}
}
- if(fReadMC) IspKpiMC(d,arrayMC,pdgs);
- if(IspiKpReal(d)) {
+ if(selection>=2) {
invMasspiKp=d->InvMassLcpiKp();
+ pdgs[0]=211;pdgs[1]=321;pdgs[2]=2212;
if(fUseKF){
pdgs[0]=211;pdgs[1]=321;pdgs[2]=2212;
if(!VertexingKF(d,pdgs,field)) invMasspiKp=-1.;
}
+
}
}
+
+ //apply PID using resonances
if(fResPid){
- if(IspKpiResonant(d,field)) {
+ if(IspKpiResonant(d,field) && (selection==3 || selection==1)) {
invMasspKpi=d->InvMassLcpKpi();
if(fUseKF){
pdgs[0]=2212;pdgs[1]=321;pdgs[2]=211;
if(!VertexingKF(d,pdgs,field)) invMasspKpi=-1.;
}
}
- if(IspiKpResonant(d,field)) {
+ if(IspiKpResonant(d,field) && selection>=2) {
invMasspiKp=d->InvMassLcpiKp();
if(fUseKF){
pdgs[0]=2212;pdgs[1]=321;pdgs[2]=211;
}
}
}
+ // no PID
if(!fResPid && !fRealPid && !fMCPid){
- invMasspiKp=d->InvMassLcpiKp();
+ if(selection==2 || selection==3) invMasspiKp=d->InvMassLcpiKp();
if(fUseKF){
pdgs[0]=211;pdgs[1]=321;pdgs[2]=2212;
if(!VertexingKF(d,pdgs,field)) invMasspiKp=-1.;
}
- invMasspKpi=d->InvMassLcpKpi();
+ if(selection==1 || selection==3) invMasspKpi=d->InvMassLcpKpi();
if(fUseKF){
pdgs[0]=2212;pdgs[1]=321;pdgs[2]=211;
if(!VertexingKF(d,pdgs,field)) invMasspKpi=-1.;
}
}
+ Bool_t passTightCuts=fRDCutsAnalysis->IsSelected(d,AliRDHFCuts::kCandidate);
+
if(invMasspiKp<0. && invMasspKpi<0.) continue;
tmp[5]=xDecay;
tmp[6]=yDecay;
tmp[7]=zDecay;
- tmp[8]=d->PtProng(0);
+ if(pdgCode1==2212) {tmp[8]=d->PtProng(0);}else{tmp[8]=0.;}
+ if(pdgCode1==211) {tmp[10]=d->PtProng(0);}else{tmp[10]=0.;}
tmp[9]=d->PtProng(1);
- tmp[10]=d->PtProng(2);
+ if(pdgCode2==211) {tmp[10]=d->PtProng(2);}else{tmp[10]=0.;}
tmp[11]=d->Pt();
tmp[12]=d->CosPointingAngle();
tmp[13]=d->DecayLength();
for(Int_t i=0;i<3;i++){
if(d->PtProng(i)>ptmax)ptmax=d->PtProng(i);
}
+ if(d->Pt()>3.){
+ if(invMasspiKp>0. && invMasspKpi>0.){
+ if(invMasspiKp>0.) fhMassPtGreater3->Fill(invMasspiKp,0.5);
+ if(invMasspKpi>0.) fhMassPtGreater3->Fill(invMasspKpi,0.5);
+ }else{
+ if(invMasspiKp>0.) fhMassPtGreater3->Fill(invMasspiKp);
+ if(invMasspKpi>0.) fhMassPtGreater3->Fill(invMasspKpi);
+ }
+ if(passTightCuts){
+ if(invMasspiKp>0. && invMasspKpi>0.){
+ if(invMasspiKp>0.) fhMassPtGreater3TC->Fill(invMasspiKp,0.5);
+ if(invMasspKpi>0.) fhMassPtGreater3TC->Fill(invMasspKpi,0.5);
+ }else{
+ if(invMasspiKp>0.) fhMassPtGreater3TC->Fill(invMasspiKp);
+ if(invMasspKpi>0.) fhMassPtGreater3TC->Fill(invMasspKpi);
+ }
+ }
+ }
if(iPtBin>=0){
index=GetHistoIndex(iPtBin);
if(invMasspiKp>0.) fMassHist[index]->Fill(invMasspiKp);
if(invMasspKpi>0.) fMassHist[index]->Fill(invMasspKpi);
}
+
fCosPHist[index]->Fill(cosp);
fDLenHist[index]->Fill(dlen);
fSumd02Hist[index]->Fill(sumD02);
fDCAHist[index]->Fill(dca);
if(passTightCuts){
- if(invMasspiKp>0. && invMasspKpi>0.){
+ if(invMasspiKp>0. && invMasspKpi>0. && passTightCuts==3){
if(invMasspiKp>0.) fMassHistTC[index]->Fill(invMasspiKp,0.5);
if(invMasspKpi>0.) fMassHistTC[index]->Fill(invMasspKpi,0.5);
}else{
- if(invMasspiKp>0.) fMassHistTC[index]->Fill(invMasspiKp);
- if(invMasspKpi>0.) fMassHistTC[index]->Fill(invMasspKpi);
+ if(invMasspiKp>0. && passTightCuts==2) fMassHistTC[index]->Fill(invMasspiKp);
+ if(invMasspKpi>0. && passTightCuts==1) fMassHistTC[index]->Fill(invMasspKpi);
}
}
fPtMaxHist[index]->Fill(ptmax);
fDCAHist[index]->Fill(dca);
if(passTightCuts){
- if(invMasspiKp>0. && invMasspKpi>0.){
+ if(invMasspiKp>0. && invMasspKpi>0. && passTightCuts==3){
if(invMasspiKp>0.) fMassHistTC[index]->Fill(invMasspiKp,0.5);
if(invMasspKpi>0.) fMassHistTC[index]->Fill(invMasspKpi,0.5);
}else{
- if(invMasspiKp>0.) fMassHistTC[index]->Fill(invMasspiKp);
- if(invMasspKpi>0.) fMassHistTC[index]->Fill(invMasspKpi);
+ if(invMasspiKp>0. && passTightCuts==2) fMassHistTC[index]->Fill(invMasspiKp);
+ if(invMasspKpi>0.&& passTightCuts==1) fMassHistTC[index]->Fill(invMasspKpi);
}
}
fSumd02Hist[index]->Fill(sumD02);
fPtMaxHist[index]->Fill(ptmax);
fDCAHist[index]->Fill(dca);
- if(passTightCuts){
- if(invMasspiKp>0. && invMasspKpi>0.){
+ if(invMasspiKp>0. && invMasspKpi>0. && passTightCuts==3){
fMassHistTC[index]->Fill(invMasspiKp,0.5);
fMassHistTC[index]->Fill(invMasspKpi,0.5);
}else{
- if(invMasspiKp>0.) fMassHistTC[index]->Fill(invMasspiKp);
- if(invMasspKpi>0.) fMassHistTC[index]->Fill(invMasspKpi);
+ if(invMasspiKp>0. && passTightCuts==2) fMassHistTC[index]->Fill(invMasspiKp);
+ if(invMasspKpi>0. && passTightCuts==1) fMassHistTC[index]->Fill(invMasspKpi);
}
- }
}
}
}
fMassHistTC[index]=dynamic_cast<TH1F*>(fOutput->FindObject(hisname.Data()));
}
- fWellIDProt3sig=dynamic_cast<TH1F*>(fOutput->FindObject(fWellIDProt3sig));
- fWellIDProt2sig=dynamic_cast<TH1F*>(fOutput->FindObject(fWellIDProt2sig));
- fWellIDProt3sigSe=dynamic_cast<TH1F*>(fOutput->FindObject(fWellIDProt3sigSe));
- fWellIDProt2sigSe=dynamic_cast<TH1F*>(fOutput->FindObject(fWellIDProt2sigSe));
- fWellIDProt2sigRe=dynamic_cast<TH1F*>(fOutput->FindObject(fWellIDProt2sigRe));
- fWellIDProt3sigRe=dynamic_cast<TH1F*>(fOutput->FindObject(fWellIDProt3sigRe));
- fWellIDKaon3sig=dynamic_cast<TH1F*>(fOutput->FindObject(fWellIDKaon3sig));
- fWellIDKaon2sig=dynamic_cast<TH1F*>(fOutput->FindObject(fWellIDKaon2sig));
- fWellIDKaon3sigSe=dynamic_cast<TH1F*>(fOutput->FindObject(fWellIDKaon3sigSe));
- fWellIDKaon2sigSe=dynamic_cast<TH1F*>(fOutput->FindObject(fWellIDKaon2sigSe));
- fWellIDKaon2sigRe=dynamic_cast<TH1F*>(fOutput->FindObject(fWellIDKaon2sigRe));
- fWellIDKaon3sigRe=dynamic_cast<TH1F*>(fOutput->FindObject(fWellIDKaon3sigRe));
- fTPCSignal3Sigma=dynamic_cast<TH2F*>(fOutput->FindObject(fTPCSignal3Sigma));
- fTPCSignal3SigmaReK=dynamic_cast<TH2F*>(fOutput->FindObject(fTPCSignal3SigmaReK));
- fTPCSignal3SigmaSedK=dynamic_cast<TH2F*>(fOutput->FindObject(fTPCSignal3SigmaSedK));
- fTPCSignal3SigmaRep=dynamic_cast<TH2F*>(fOutput->FindObject(fTPCSignal3SigmaRep));
- fTPCSignal3SigmaSedp=dynamic_cast<TH2F*>(fOutput->FindObject(fTPCSignal3SigmaSedp));
- fTPCSignal2Sigma=dynamic_cast<TH2F*>(fOutput->FindObject(fTPCSignal2Sigma));
- fTPCSignal2SigmaReK=dynamic_cast<TH2F*>(fOutput->FindObject(fTPCSignal2SigmaReK));
- fTPCSignal2SigmaSedK=dynamic_cast<TH2F*>(fOutput->FindObject(fTPCSignal2SigmaSedK));
- fTPCSignal2SigmaSedp=dynamic_cast<TH2F*>(fOutput->FindObject(fTPCSignal2SigmaSedp));
- fTPCSignal2SigmaRep=dynamic_cast<TH2F*>(fOutput->FindObject(fTPCSignal2SigmaRep));
- fFakeProt3sig=dynamic_cast<TH1F*>(fOutput->FindObject(fFakeProt3sig));
- fFakeProt2sig=dynamic_cast<TH1F*>(fOutput->FindObject(fFakeProt2sig));
- fFakeProt3sigSe=dynamic_cast<TH1F*>(fOutput->FindObject(fFakeProt3sigSe));
- fFakeProt2sigSe=dynamic_cast<TH1F*>(fOutput->FindObject(fFakeProt2sigSe));
- fFakeProt2sigRe=dynamic_cast<TH1F*>(fOutput->FindObject(fFakeProt2sigRe));
- fFakeProt3sigRe=dynamic_cast<TH1F*>(fOutput->FindObject(fFakeProt3sigRe));
- fFakeKaon3sig=dynamic_cast<TH1F*>(fOutput->FindObject(fFakeKaon3sig));
- fFakeKaon2sig=dynamic_cast<TH1F*>(fOutput->FindObject(fFakeKaon2sig));
- fFakeKaon3sigSe=dynamic_cast<TH1F*>(fOutput->FindObject(fFakeKaon3sigSe));
- fFakeKaon2sigSe=dynamic_cast<TH1F*>(fOutput->FindObject(fFakeKaon2sigSe));
- fFakeKaon2sigRe=dynamic_cast<TH1F*>(fOutput->FindObject(fFakeKaon2sigRe));
- fFakeKaon3sigRe=dynamic_cast<TH1F*>(fOutput->FindObject(fFakeKaon3sigRe));
-
- fRealProt=dynamic_cast<TH1F*>(fOutput->FindObject(fRealProt));
- fRealKaon=dynamic_cast<TH1F*>(fOutput->FindObject(fRealKaon));
if(fFillNtuple){
fNtupleLambdac = dynamic_cast<TNtuple*>(GetOutputData(3));
}
- TCanvas *c1=new TCanvas("c1","D+ invariant mass distribution",500,500);
- c1->cd();
- //TH1F *hMassPt=(TH1F*)fOutput->FindObject("hMassPt3TC");
- fRealProt->Draw();
return;
}
//________________________________________________________________________
-Int_t AliAnalysisTaskSELambdac::MatchToMCLambdac(AliAODRecoDecayHF3Prong *d,TClonesArray *arrayMC){
-
+Int_t AliAnalysisTaskSELambdac::MatchToMCLambdac(AliAODRecoDecayHF3Prong *d,TClonesArray *arrayMC) const{
+ // check if the candidate is a Lambdac decaying in pKpi or in the resonant channels
Int_t lambdacLab[3]={0,0,0};
Int_t pdgs[3]={0,0,0};
for(Int_t i=0;i<3;i++){
}
//------------------------
-Bool_t AliAnalysisTaskSELambdac::GetLambdacDaugh(AliAODMCParticle *part,TClonesArray *arrayMC){
-
+Bool_t AliAnalysisTaskSELambdac::GetLambdacDaugh(AliAODMCParticle *part,TClonesArray *arrayMC) const{
+ // check if the particle is a lambdac and if its decay mode is the correct one
Int_t numberOfLambdac=0;
if(TMath::Abs(part->GetPdgCode())!=4122) return kFALSE;
Int_t daugh_tmp[2];
if(nDaugh==2){
- //Lambda in Lambda pi
-// if((number1==211 && number2==3122)|| (number1==3122 && number2==211))return kFALSE;
-
//Lambda resonant
//Lambda -> p K*0
return kFALSE;
}
//-----------------------------
-Bool_t AliAnalysisTaskSELambdac::IspKpiMC(AliAODRecoDecayHF3Prong *d,TClonesArray *arrayMC,Int_t *pdgs){
-
- Int_t lab[3]={0,0,0};//,pdgs[3]={0,0,0};
+Bool_t AliAnalysisTaskSELambdac::IspKpiMC(AliAODRecoDecayHF3Prong *d,TClonesArray *arrayMC) const{
+ // Apply MC PID
+ Int_t lab[3]={0,0,0},pdgs[3]={0,0,0};
for(Int_t i=0;i<3;i++){
AliAODTrack *daugh=(AliAODTrack*)d->GetDaughter(i);
lab[i]=daugh->GetLabel();
return kFALSE;
}
//-----------------------------
-Bool_t AliAnalysisTaskSELambdac::IspiKpMC(AliAODRecoDecayHF3Prong *d,TClonesArray *arrayMC){
+Bool_t AliAnalysisTaskSELambdac::IspiKpMC(AliAODRecoDecayHF3Prong *d,TClonesArray *arrayMC) const{
+ // Apply MC PID
Int_t lab[3]={0,0,0},pdgs[3]={0,0,0};
for(Int_t i=0;i<3;i++){
AliAODTrack *daugh=(AliAODTrack*)d->GetDaughter(i);
return kFALSE;
}
//--------------------------------------
-Bool_t AliAnalysisTaskSELambdac::IspiKpReal(AliAODRecoDecayHF3Prong *d){
-
- AliAODPidHF* pidObj=new AliAODPidHF();
- Bool_t type[2]={kFALSE,kFALSE};
- for(Int_t i=0;i<3;i++){
-// Bool_t pid[3]={kFALSE,kFALSE,kFALSE};
- AliAODTrack *track=(AliAODTrack*)d->GetDaughter(i);
- //test asymmetric TPC PID
- Double_t plim[2]={0.6,2.};
- Double_t sigmas[5]={2.,1.,2.,3.,0.};
- pidObj->SetPLimit(plim);
- pidObj->SetSigma(sigmas);
- if(i==1) type[i]=pidObj->MatchTPCTOF(track,2,3,kFALSE);
- if(i==2) type[i]=pidObj->MatchTPCTOF(track,2,4,kFALSE);
- //pidinfo=pidObj->MatchTPCTOF(track,3,3,kFALSE);
-
- }
-
- if(type[0] && type[1]) {delete pidObj;return kTRUE;}
- delete pidObj;
- return kFALSE;
-}
-//--------------------------------------
-Bool_t AliAnalysisTaskSELambdac::IspKpiReal(AliAODRecoDecayHF3Prong *d){
-
- AliAODPidHF* pidObj=new AliAODPidHF();
- Bool_t type[2]={kFALSE,kFALSE};
- for(Int_t i=0;i<2;i++){
- //Bool_t pid[3]={kFALSE,kFALSE,kFALSE};
- AliAODTrack *track=(AliAODTrack*)d->GetDaughter(i);
- Double_t plim[2]={0.6,2.};
- Double_t sigmas[5]={2.,1.,2.,3.,0.};
- pidObj->SetPLimit(plim);
- pidObj->SetSigma(sigmas);
- if(i==1) type[i]=pidObj->MatchTPCTOF(track,2,3,kFALSE);
- if(i==0) type[i]=pidObj->MatchTPCTOF(track,2,4,kFALSE);
- }
- if(type[0] && type[1]) {delete pidObj;return kTRUE;}
- delete pidObj;
- return kFALSE;
-}
-//------------------------------------
-Bool_t AliAnalysisTaskSELambdac::VertexingKF(AliAODRecoDecayHF3Prong *d,Int_t *pdgs,Double_t field){
-
+Bool_t AliAnalysisTaskSELambdac::VertexingKF(AliAODRecoDecayHF3Prong *d,Int_t *pdgs,Double_t field) const{
+ // apply vertexing KF
Int_t iprongs[3]={0,1,2};
Double_t mass[2]={0.,0.};
//topological constr
- AliKFParticle *Lambdac=d->ApplyVertexingKF(iprongs,3,pdgs,kTRUE,field,mass);
- if(!Lambdac) return kFALSE;
- Double_t probTot=TMath::Prob(Lambdac->GetChi2(),Lambdac->GetNDF());
- if(probTot<fCutsKF[0]) return kFALSE;
-
- if(d->PtProng(0)<1.5 && d->Getd0Prong(0)>0.02) return kFALSE;
- if(d->PtProng(1)<1.5 && d->Getd0Prong(1)>0.02) return kFALSE;
- if(d->PtProng(2)<1.5 && d->Getd0Prong(2)>0.02) return kFALSE;
+ AliKFParticle *lambdac=d->ApplyVertexingKF(iprongs,3,pdgs,kTRUE,field,mass);
+ if(!lambdac) return kFALSE;
+// Double_t probTot=TMath::Prob(Lambdac->GetChi2(),Lambdac->GetNDF());
+// if(probTot<fCutsKF[0]) return kFALSE;
+ if(lambdac->GetChi2()>fCutsKF[0]) return kFALSE;
//mass constr for K*
Int_t ipRes[2];
Int_t pdgres[2];
ipRes[0]=2;ipRes[1]=1;
pdgres[0]=pdgs[2];pdgres[1]=321;
}
- AliKFParticle *KappaStar=d->ApplyVertexingKF(ipRes,2,pdgres,kFALSE,field,mass);
+ AliKFParticle *kappaStar=d->ApplyVertexingKF(ipRes,2,pdgres,kFALSE,field,mass);
- Double_t probKstar=TMath::Prob(KappaStar->GetChi2(),KappaStar->GetNDF());
+ Double_t probKstar=TMath::Prob(kappaStar->GetChi2(),kappaStar->GetNDF());
if(probKstar>fCutsKF[1]) {
AliAODTrack *esdProng1=(AliAODTrack*)d->GetDaughter(ipRes[0]);
AliAODTrack *esdProng2=(AliAODTrack*)d->GetDaughter(ipRes[1]);
AliKFParticle prong1(*esdProng1,pdgres[0]);
AliKFParticle prong2(*esdProng2,pdgres[1]);
- if(KappaStar->GetPt()<fCutsKF[2] && prong1.GetAngle(prong2)>fCutsKF[3]) return kFALSE;
+ if(kappaStar->GetPt()<fCutsKF[2] && prong1.GetAngle(prong2)>fCutsKF[3]) return kFALSE;
}
//mass constr for Lambda
mass[0]=1.520;mass[1]=0.005;
ipRes[0]=2;ipRes[1]=1;
pdgres[0]=pdgs[2];pdgres[1]=pdgs[1];
}
- AliKFParticle *Lambda1520=d->ApplyVertexingKF(ipRes,2,pdgres,kFALSE,field,mass);
- Double_t probLa=TMath::Prob(Lambda1520->GetChi2(),Lambda1520->GetNDF());
+ AliKFParticle *lambda1520=d->ApplyVertexingKF(ipRes,2,pdgres,kFALSE,field,mass);
+ Double_t probLa=TMath::Prob(lambda1520->GetChi2(),lambda1520->GetNDF());
if(probLa>fCutsKF[4]) {
AliAODTrack *esdProng1=(AliAODTrack*)d->GetDaughter(ipRes[0]);
AliAODTrack *esdProng2=(AliAODTrack*)d->GetDaughter(ipRes[1]);
AliKFParticle prong1(*esdProng1,pdgres[0]);
AliKFParticle prong2(*esdProng2,pdgres[1]);
- if(Lambda1520->GetPt()<fCutsKF[5] && prong1.GetAngle(prong2)>fCutsKF[6]) return kFALSE;
+ if(lambda1520->GetPt()<fCutsKF[5] && prong1.GetAngle(prong2)>fCutsKF[6]) return kFALSE;
}
//mass constr for Delta
mass[0]=1.2;mass[1]=0.15;
ipRes[0]=0;ipRes[1]=2;
- pdgres[0]=pdgs[0];pdgres[2]=pdgs[2];
- AliKFParticle *Delta=d->ApplyVertexingKF(ipRes,2,pdgres,kFALSE,field,mass);
- Double_t probDelta=TMath::Prob(Delta->GetChi2(),Delta->GetNDF());
+ pdgres[0]=pdgs[0];pdgres[1]=pdgs[2];
+ AliKFParticle *delta=d->ApplyVertexingKF(ipRes,2,pdgres,kFALSE,field,mass);
+ Double_t probDelta=TMath::Prob(delta->GetChi2(),delta->GetNDF());
if(probDelta>fCutsKF[7]) {
AliAODTrack *esdProng1=(AliAODTrack*)d->GetDaughter(ipRes[0]);
AliAODTrack *esdProng2=(AliAODTrack*)d->GetDaughter(ipRes[1]);
AliKFParticle prong1(*esdProng1,pdgres[0]);
AliKFParticle prong2(*esdProng2,pdgres[1]);
- if(Delta->GetPt()<fCutsKF[8] && prong1.GetAngle(prong2)>fCutsKF[9]) return kFALSE;
+ if(delta->GetPt()<fCutsKF[8] && prong1.GetAngle(prong2)>fCutsKF[9]) return kFALSE;
}
return kTRUE;
}
//-------------------------------------
-Bool_t AliAnalysisTaskSELambdac::IspiKpResonant(AliAODRecoDecayHF3Prong *d,Double_t field){
+Bool_t AliAnalysisTaskSELambdac::IspiKpResonant(AliAODRecoDecayHF3Prong *d,Double_t field) const{
+ // apply PID using the resonant channels
//if lambda* -> pk
Double_t mass[2]={1.520,0.005};
Int_t ipRes[2]={1,2};
Int_t pdgres[2]={321,2212};
- AliKFParticle *Lambda1520=d->ApplyVertexingKF(ipRes,2,pdgres,kFALSE,field,mass);
- Double_t probLa=TMath::Prob(Lambda1520->GetChi2(),Lambda1520->GetNDF());
- if(probLa>0.1) return kTRUE;
+ AliKFParticle *lambda1520=d->ApplyVertexingKF(ipRes,2,pdgres,kFALSE,field,mass);
+ Double_t probLa=TMath::Prob(lambda1520->GetChi2(),lambda1520->GetNDF());
+ if(probLa>0.9) return kTRUE;
//K* -> kpi
-// mass[0]=0.8961;mass[1]=0.03;
-// ipRes[0]=0;ipRes[1]=1;
-// pdgres[0]=211;pdgres[1]=321;
-// AliKFParticle *Kstar=d->ApplyVertexingKF(ipRes,2,pdgres,kFALSE,field,mass);
-// Double_t probKa=TMath::Prob(Kstar->GetChi2(),Kstar->GetNDF());
-// if(probKa>0.1) return kTRUE;
+ mass[0]=0.8961;mass[1]=0.03;
+ ipRes[0]=0;ipRes[1]=1;
+ pdgres[0]=211;pdgres[1]=321;
+ AliKFParticle *kstar=d->ApplyVertexingKF(ipRes,2,pdgres,kFALSE,field,mass);
+ Double_t probKa=TMath::Prob(kstar->GetChi2(),kstar->GetNDF());
+ if(probKa>0.9) return kTRUE;
return kFALSE;
}
//-------------------------------------
-Bool_t AliAnalysisTaskSELambdac::IspKpiResonant(AliAODRecoDecayHF3Prong *d,Double_t field){
-
+Bool_t AliAnalysisTaskSELambdac::IspKpiResonant(AliAODRecoDecayHF3Prong *d,Double_t field) const{
+
+ // apply PID using the resonant channels
//if lambda* -> pk
Double_t mass[2]={1.520,0.005};
Int_t ipRes[2]={0,1};
Int_t pdgres[2]={2212,321};
- AliKFParticle *Lambda1520=d->ApplyVertexingKF(ipRes,2,pdgres,kFALSE,field,mass);
- Double_t probLa=TMath::Prob(Lambda1520->GetChi2(),Lambda1520->GetNDF());
- if(probLa>0.1) return kTRUE;
+ AliKFParticle *lambda1520=d->ApplyVertexingKF(ipRes,2,pdgres,kFALSE,field,mass);
+ Double_t probLa=TMath::Prob(lambda1520->GetChi2(),lambda1520->GetNDF());
+ if(probLa>0.9) return kTRUE;
//K* -> kpi
-// mass[0]=0.8961;mass[1]=0.03;
-// ipRes[0]=1;ipRes[1]=2;
-// pdgres[1]=211;pdgres[0]=321;
-// AliKFParticle *Kstar=d->ApplyVertexingKF(ipRes,2,pdgres,kFALSE,field,mass);
-// Double_t probKa=TMath::Prob(Kstar->GetChi2(),Kstar->GetNDF());
-// if(probKa>0.1) return kTRUE;
+ mass[0]=0.8961;mass[1]=0.03;
+ ipRes[0]=1;ipRes[1]=2;
+ pdgres[1]=211;pdgres[0]=321;
+ AliKFParticle *kstar=d->ApplyVertexingKF(ipRes,2,pdgres,kFALSE,field,mass);
+ Double_t probKa=TMath::Prob(kstar->GetChi2(),kstar->GetNDF());
+ if(probKa>0.9) return kTRUE;
return kFALSE;
}
+