]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGHF/vertexingHF/AliAnalysisTaskSEDs.cxx
Add flag to switch within the Lc to K0sP CF tasks (C.Zampolli)
[u/mrichter/AliRoot.git] / PWGHF / vertexingHF / AliAnalysisTaskSEDs.cxx
index 489960b705c35ba80f704f33bd50d8e4cbaebda4..7730ac5e7739af896ead2d715bc147d17356f076 100644 (file)
@@ -60,6 +60,7 @@ AliAnalysisTaskSEDs::AliAnalysisTaskSEDs():
   fNtupleDs(0),
   fFillNtuple(0),
   fReadMC(kFALSE),
+  fWriteOnlySignal(kFALSE),
   fDoCutVarHistos(kTRUE),
   fUseSelectionBit(kFALSE),
   fNPtBins(0),
@@ -70,35 +71,36 @@ AliAnalysisTaskSEDs::AliAnalysisTaskSEDs():
   fAnalysisCuts(0)
 {
   // Default constructor
-
+  
+  for(Int_t i=0;i<3;i++){
+    fHistCentrality[i]=0;
+    fHistCentralityMult[i]=0;
+  }
   for(Int_t i=0;i<4;i++) {
-    if(fChanHist[i]) fChanHist[i]=0;
+    fChanHist[i]=0;
   }
-
-  for(Int_t i=0;i<4*kMaxPtBins;i++){
-    
-    if(fPtCandHist[i]) fPtCandHist[i]=0;
-    if(fMassHist[i]) fMassHist[i]=0;
-    if(fCosPHist[i]) fCosPHist[i]=0;
-    if(fDLenHist[i]) fDLenHist[i]=0;
-    if(fSumd02Hist[i]) fSumd02Hist[i]=0;
-    if(fSigVertHist[i]) fSigVertHist[i]=0;
-    if(fPtMaxHist[i]) fPtMaxHist[i]=0;
-    if(fDCAHist[i]) fDCAHist[i]=0;
-    if(fPtProng0Hist[i]) fPtProng0Hist[i]=0;
-    if(fPtProng1Hist[i]) fPtProng1Hist[i]=0;
-    if(fPtProng2Hist[i]) fPtProng2Hist[i]=0;
-    if(fDalitz[i]) fDalitz[i]=0;
-    if(fDalitzPhi[i]) fDalitzPhi[i]=0;
-    if(fDalitzK0st[i]) fDalitzK0st[i]=0;
-
+  for(Int_t i=0;i<4*kMaxPtBins;i++){    
+    fPtCandHist[i]=0;
+    fMassHist[i]=0;
+    fMassHistPhi[i]=0;
+    fMassHistK0st[i]=0;
+    fCosPHist[i]=0;
+    fDLenHist[i]=0;
+    fSumd02Hist[i]=0;
+    fSigVertHist[i]=0;
+    fPtMaxHist[i]=0;
+    fDCAHist[i]=0;
+    fPtProng0Hist[i]=0;
+    fPtProng1Hist[i]=0;
+    fPtProng2Hist[i]=0;
+    fDalitz[i]=0;
+    fDalitzPhi[i]=0;
+    fDalitzK0st[i]=0;
   }
-  for(Int_t i=0;i<3*kMaxPtBins;i++){
-    if(fMassHistPhi[i]) fMassHistPhi[i]=0;
-    if(fMassHistK0st[i]) fMassHistK0st[i]=0;
-   
+  for(Int_t i=0;i<kMaxPtBins;i++){
+    fMassHistKK[i]=0;
+    fMassHistKpi[i]=0;
   }
-
   for(Int_t i=0;i<kMaxPtBins+1;i++){
     fPtLimits[i]=0;
   }
@@ -118,6 +120,7 @@ AliAnalysisTaskSEDs::AliAnalysisTaskSEDs(const char *name,AliRDHFCutsDstoKKpi* a
   fNtupleDs(0),
   fFillNtuple(fillNtuple),
   fReadMC(kFALSE),
+  fWriteOnlySignal(kFALSE),
   fDoCutVarHistos(kTRUE),
   fUseSelectionBit(kFALSE),
   fNPtBins(0),
@@ -130,34 +133,35 @@ AliAnalysisTaskSEDs::AliAnalysisTaskSEDs(const char *name,AliRDHFCutsDstoKKpi* a
   // Default constructor
   // Output slot #1 writes into a TList container
   
+  for(Int_t i=0;i<3;i++){
+    fHistCentrality[i]=0;
+    fHistCentralityMult[i]=0;
+  }
   for(Int_t i=0;i<4;i++) {
-    if(fChanHist[i]) fChanHist[i]=0;
+    fChanHist[i]=0;
   }
-
   for(Int_t i=0;i<4*kMaxPtBins;i++){
-    
-    if(fPtCandHist[i]) fPtCandHist[i]=0;
-    if(fMassHist[i]) fMassHist[i]=0;
-    if(fCosPHist[i]) fCosPHist[i]=0;
-    if(fDLenHist[i]) fDLenHist[i]=0;
-    if(fSumd02Hist[i]) fSumd02Hist[i]=0;
-    if(fSigVertHist[i]) fSigVertHist[i]=0;
-    if(fPtMaxHist[i]) fPtMaxHist[i]=0;
-    if(fDCAHist[i]) fDCAHist[i]=0;
-    if(fPtProng0Hist[i]) fPtProng0Hist[i]=0;
-    if(fPtProng1Hist[i]) fPtProng1Hist[i]=0;
-    if(fPtProng2Hist[i]) fPtProng2Hist[i]=0;
-    if(fDalitz[i]) fDalitz[i]=0;
-    if(fDalitzPhi[i]) fDalitzPhi[i]=0;
-    if(fDalitzK0st[i]) fDalitzK0st[i]=0;
-
+    fPtCandHist[i]=0;
+    fMassHist[i]=0;
+    fMassHistPhi[i]=0;
+    fMassHistK0st[i]=0;
+    fCosPHist[i]=0;
+    fDLenHist[i]=0;
+    fSumd02Hist[i]=0;
+    fSigVertHist[i]=0;
+    fPtMaxHist[i]=0;
+    fDCAHist[i]=0;
+    fPtProng0Hist[i]=0;
+    fPtProng1Hist[i]=0;
+    fPtProng2Hist[i]=0;
+    fDalitz[i]=0;
+    fDalitzPhi[i]=0;
+    fDalitzK0st[i]=0;
   }
-  for(Int_t i=0;i<3*kMaxPtBins;i++){
-    if(fMassHistPhi[i]) fMassHistPhi[i]=0;
-    if(fMassHistK0st[i]) fMassHistK0st[i]=0;
-   
+  for(Int_t i=0;i<kMaxPtBins;i++){
+    fMassHistKK[i]=0;
+    fMassHistKpi[i]=0;
   }
-
   for(Int_t i=0;i<kMaxPtBins+1;i++){
     fPtLimits[i]=0;
   }
@@ -205,35 +209,45 @@ void AliAnalysisTaskSEDs::SetPtBins(Int_t n, Float_t* lim){
 AliAnalysisTaskSEDs::~AliAnalysisTaskSEDs()
 {
   // Destructor
+  if(fOutput && !fOutput->IsOwner()){
+    delete fHistNEvents;
+    for(Int_t i=0;i<4;i++){
+      delete fChanHist[i];
+    }
+    for(Int_t i=0;i<4*fNPtBins;i++){    
+      delete fMassHist[i]; 
+      delete fMassHistPhi[i];
+      delete fMassHistK0st[i];
+      delete fCosPHist[i]; 
+      delete fDLenHist[i]; 
+      delete fSumd02Hist[i]; 
+      delete fSigVertHist[i]; 
+      delete fPtMaxHist[i];
+      delete fPtCandHist[i];
+      delete fDCAHist[i];
+      delete fPtProng0Hist[i];
+      delete fPtProng1Hist[i]; 
+      delete fPtProng2Hist[i];
+      delete fDalitz[i];
+      delete fDalitzPhi[i];
+      delete fDalitzK0st[i];
+    }
+    for(Int_t i=0;i<fNPtBins;i++){    
+      delete fMassHistKK[i];
+      delete fMassHistKpi[i];
+    }
+    delete fPtVsMass;
+    delete fPtVsMassPhi;
+    delete fPtVsMassK0st;
+    delete fYVsPt;
+    delete fYVsPtSig;
+    for(Int_t i=0;i<3;i++){
+      delete fHistCentrality[i];
+      delete fHistCentralityMult[i];
+    }
+  }
   delete fOutput;
-  delete fHistNEvents;
   delete fListCuts;
-
-  for(Int_t i=0;i<4*fNPtBins;i++){
-    
-    if(fMassHist[i]){ delete fMassHist[i]; fMassHist[i]=0;}
-    if(fMassHistPhi[i]){ delete fMassHistPhi[i]; fMassHistPhi[i]=0;}
-    if(fMassHistK0st[i]){ delete fMassHistK0st[i]; fMassHistK0st[i]=0;}
-    if(fCosPHist[i]){ delete fCosPHist[i]; fCosPHist[i]=0;}
-    if(fDLenHist[i]){ delete fDLenHist[i]; fDLenHist[i]=0;}
-    if(fSumd02Hist[i]){ delete fSumd02Hist[i]; fSumd02Hist[i]=0;}
-    if(fSigVertHist[i]){ delete fSigVertHist[i]; fSigVertHist[i]=0;}
-    if(fPtMaxHist[i]){ delete fPtMaxHist[i]; fPtMaxHist[i]=0;}
-    if(fDCAHist[i]){ delete fDCAHist[i]; fDCAHist[i]=0;}
-    if(fPtProng0Hist[i]){ delete fPtProng0Hist[i]; fPtProng0Hist[i]=0;}
-    if(fPtProng1Hist[i]){ delete fPtProng1Hist[i]; fPtProng1Hist[i]=0;}
-    if(fPtProng2Hist[i]){ delete fPtProng2Hist[i]; fPtProng2Hist[i]=0;}
-    if(fDalitz[i]){ delete fDalitz[i]; fDalitz[i]=0;}
-    if(fDalitzPhi[i]){ delete fDalitzPhi[i]; fDalitzPhi[i]=0;}
-    if(fDalitzK0st[i]){ delete fDalitzK0st[i]; fDalitzK0st[i]=0;}
-
-  }
-
-  delete fPtVsMass;
-  delete fPtVsMassPhi;
-  delete fPtVsMassK0st;
-  delete fYVsPt;
-  delete fYVsPtSig;
   delete fNtupleDs;
   delete fCounter;
   delete fAnalysisCuts;
@@ -270,6 +284,38 @@ void AliAnalysisTaskSEDs::UserCreateOutputObjects()
   fOutput = new TList();
   fOutput->SetOwner();
   fOutput->SetName("OutputHistos");
+  
+  fHistNEvents = new TH1F("hNEvents", "number of events ",11,-0.5,10.5);
+  fHistNEvents->GetXaxis()->SetBinLabel(1,"nEventsAnal");
+  fHistNEvents->GetXaxis()->SetBinLabel(2,"n. passing IsEvSelected");
+  fHistNEvents->GetXaxis()->SetBinLabel(3,"n. rejected due to trigger");
+  fHistNEvents->GetXaxis()->SetBinLabel(4,"n. rejected due to not reco vertex");
+  fHistNEvents->GetXaxis()->SetBinLabel(5,"n. rejected for contr vertex");
+  fHistNEvents->GetXaxis()->SetBinLabel(6,"n. rejected for vertex out of accept");
+  fHistNEvents->GetXaxis()->SetBinLabel(7,"n. rejected for pileup events");
+  fHistNEvents->GetXaxis()->SetBinLabel(8,"no. of out centrality events");
+  fHistNEvents->GetXaxis()->SetBinLabel(9,"no. of 3 prong candidates");
+  fHistNEvents->GetXaxis()->SetBinLabel(10,"no. of Ds after filtering cuts");
+  fHistNEvents->GetXaxis()->SetBinLabel(11,"no. of Ds after selection cuts");
+
+  fHistNEvents->GetXaxis()->SetNdivisions(1,kFALSE);
+
+  fHistNEvents->Sumw2();
+  fHistNEvents->SetMinimum(0);
+  fOutput->Add(fHistNEvents);
+
+  fHistCentrality[0]=new TH1F("hCentr","centrality",10000,0.,100.);
+  fHistCentrality[1]=new TH1F("hCentr(selectedCent)","centrality(selectedCent)",10000,0.,100.);
+  fHistCentrality[2]=new TH1F("hCentr(OutofCent)","centrality(OutofCent)",10000,0.,100.);
+  fHistCentralityMult[0]=new TH2F("hCentrMult","centrality vs mult",100,0.5,30000.5,40,0.,100.);
+  fHistCentralityMult[1]=new TH2F("hCentrMult(selectedCent)","centrality vs mult(selectedCent)",100,0.5,30000.5,40,0.,100.);
+  fHistCentralityMult[2]=new TH2F("hCentrMult(OutofCent)","centrality vs mult(OutofCent)",100,0.5,30000.5,40,0.,100.);
+  for(Int_t i=0;i<3;i++){
+    fHistCentrality[i]->Sumw2();
+    fOutput->Add(fHistCentrality[i]);
+    fHistCentralityMult[i]->Sumw2();
+    fOutput->Add(fHistCentralityMult[i]);  
+  }
 
   Double_t massDs=TDatabasePDG::Instance()->GetParticle(431)->Mass();
   
@@ -353,19 +399,21 @@ void AliAnalysisTaskSEDs::UserCreateOutputObjects()
     fOutput->Add(fMassHist[i]);
     fOutput->Add(fMassHistPhi[i]);
     fOutput->Add(fMassHistK0st[i]);
-    fOutput->Add(fCosPHist[i]);
-    fOutput->Add(fDLenHist[i]);
-    fOutput->Add(fSumd02Hist[i]);
-    fOutput->Add(fSigVertHist[i]);
-    fOutput->Add(fPtMaxHist[i]);
     fOutput->Add(fPtCandHist[i]);
-    fOutput->Add(fDCAHist[i]);
-    fOutput->Add(fPtProng0Hist[i]);
-    fOutput->Add(fPtProng1Hist[i]);
-    fOutput->Add(fPtProng2Hist[i]);
-    fOutput->Add(fDalitz[i]);
-    fOutput->Add(fDalitzPhi[i]);
-    fOutput->Add(fDalitzK0st[i]);
+    if(fDoCutVarHistos){
+      fOutput->Add(fCosPHist[i]);
+      fOutput->Add(fDLenHist[i]);
+      fOutput->Add(fSumd02Hist[i]);
+      fOutput->Add(fSigVertHist[i]);
+      fOutput->Add(fPtMaxHist[i]);
+      fOutput->Add(fDCAHist[i]);
+      fOutput->Add(fPtProng0Hist[i]);
+      fOutput->Add(fPtProng1Hist[i]);
+      fOutput->Add(fPtProng2Hist[i]);
+      fOutput->Add(fDalitz[i]);
+      fOutput->Add(fDalitzPhi[i]);
+      fOutput->Add(fDalitzK0st[i]);
+    }
   }
 
   fChanHist[0] = new TH1F("hChanAll", "KKpi and piKK candidates",64,-0.5,63.5);
@@ -378,24 +426,6 @@ void AliAnalysisTaskSEDs::UserCreateOutputObjects()
     fOutput->Add(fChanHist[i]);
   }
 
-  fHistNEvents = new TH1F("hNEvents", "number of events ",11,-0.5,10.5);
-  fHistNEvents->GetXaxis()->SetBinLabel(1,"nEventsAnal");
-  fHistNEvents->GetXaxis()->SetBinLabel(2,"n. passing IsEvSelected");
-  fHistNEvents->GetXaxis()->SetBinLabel(3,"n. rejected due to trigger");
-  fHistNEvents->GetXaxis()->SetBinLabel(4,"n. rejected due to not reco vertex");
-  fHistNEvents->GetXaxis()->SetBinLabel(5,"n. rejected for contr vertex");
-  fHistNEvents->GetXaxis()->SetBinLabel(6,"n. rejected for vertex out of accept");
-  fHistNEvents->GetXaxis()->SetBinLabel(7,"n. rejected for pileup events");
-  fHistNEvents->GetXaxis()->SetBinLabel(8,"no. of out centrality events");
-  fHistNEvents->GetXaxis()->SetBinLabel(9,"no. of 3 prong candidates");
-  fHistNEvents->GetXaxis()->SetBinLabel(10,"no. of Ds after filtering cuts");
-  fHistNEvents->GetXaxis()->SetBinLabel(11,"no. of Ds after selection cuts");
-
-  fHistNEvents->GetXaxis()->SetNdivisions(1,kFALSE);
-
-  fHistNEvents->Sumw2();
-  fHistNEvents->SetMinimum(0);
-  fOutput->Add(fHistNEvents);
 
   fPtVsMass=new TH2F("hPtVsMass","PtVsMass (prod. cuts)",nInvMassBins,minMass,maxMass,40,0.,20.);
   fPtVsMassPhi=new TH2F("hPtVsMassPhi","PtVsMass (phi selection)",nInvMassBins,minMass,maxMass,200,0.,20.);
@@ -403,6 +433,17 @@ void AliAnalysisTaskSEDs::UserCreateOutputObjects()
   fYVsPt=new TH2F("hYVsPt","YvsPt (prod. cuts)",40,0.,20.,80,-2.,2.);
   fYVsPtSig=new TH2F("hYVsPtSig","YvsPt (MC, only sig., prod. cuts)",40,0.,20.,80,-2.,2.);
 
+  for(Int_t i=0;i<fNPtBins;i++){
+    hisname.Form("hMassKKPt%d",i);
+    fMassHistKK[i]=new TH1F(hisname.Data(),hisname.Data(),200,0.95,1.35);
+    fMassHistKK[i]->Sumw2();
+    fOutput->Add(fMassHistKK[i]);
+    hisname.Form("hMassKpiPt%d",i);
+    fMassHistKpi[i]=new TH1F(hisname.Data(),hisname.Data(),200,0.7,1.1);
+    fMassHistKpi[i]->Sumw2();
+    fOutput->Add(fMassHistKpi[i]);
+  }
+
   fOutput->Add(fPtVsMass);
   fOutput->Add(fPtVsMassPhi);
   fOutput->Add(fPtVsMassK0st);
@@ -472,22 +513,30 @@ void AliAnalysisTaskSEDs::UserExec(Option_t */*option*/)
   
 
   Bool_t isEvSel=fAnalysisCuts->IsEventSelected(aod);
+  Float_t ntracks=aod->GetNTracks();
+  Float_t evCentr=fAnalysisCuts->GetCentrality(aod);
+  
+  fHistCentrality[0]->Fill(evCentr);
+  fHistCentralityMult[0]->Fill(ntracks,evCentr);
   if(fAnalysisCuts->IsEventRejectedDueToTrigger())fHistNEvents->Fill(2);
   if(fAnalysisCuts->IsEventRejectedDueToNotRecoVertex())fHistNEvents->Fill(3);
   if(fAnalysisCuts->IsEventRejectedDueToVertexContributors())fHistNEvents->Fill(4);
   if(fAnalysisCuts->IsEventRejectedDueToZVertexOutsideFiducialRegion())fHistNEvents->Fill(5);
-  if(fAnalysisCuts->IsEventRejectedDueToPileupSPD())fHistNEvents->Fill(6);
-  if(fAnalysisCuts->IsEventRejectedDueToCentrality())fHistNEvents->Fill(7);
+  if(fAnalysisCuts->IsEventRejectedDueToPileup())fHistNEvents->Fill(6);
+  if(fAnalysisCuts->IsEventRejectedDueToCentrality()){
+    fHistNEvents->Fill(7); 
+    fHistCentrality[2]->Fill(evCentr);
+    fHistCentralityMult[2]->Fill(ntracks,evCentr);
+  }
   
   Float_t centrality=fAnalysisCuts->GetCentrality(aod);
   Int_t runNumber=aod->GetRunNumber();
 
   if(!isEvSel)return;
   
-    
-
-  
   fHistNEvents->Fill(1);
+  fHistCentrality[1]->Fill(evCentr);
+  fHistCentralityMult[1]->Fill(ntracks,evCentr);
 
   TClonesArray *arrayMC=0;
   AliAODMCHeader *mcHeader=0;
@@ -543,13 +592,33 @@ void AliAnalysisTaskSEDs::UserExec(Option_t */*option*/)
     
     Double_t ptCand = d->Pt();
     Int_t iPtBin=TMath::BinarySearch(fNPtBins,fPtLimits,(Float_t)ptCand);
-    Int_t retCodeAnalysisCuts=fAnalysisCuts->IsSelected(d,AliRDHFCuts::kAll,aod);
     Double_t rapid=d->YDs(); 
     fYVsPt->Fill(ptCand,rapid);
-
-    if(retCodeAnalysisCuts<=0) continue;
     Bool_t isFidAcc=fAnalysisCuts->IsInFiducialAcceptance(ptCand,rapid);
     if(!isFidAcc) continue;
+
+    Int_t retCodeAnalysisCuts=fAnalysisCuts->IsSelected(d,AliRDHFCuts::kAll,aod);
+   Int_t retCodeNoRes=retCodeAnalysisCuts;
+    Bool_t origRes=fAnalysisCuts->IsCutOnResonancesApplied();
+    if(origRes){
+      fAnalysisCuts->ApplyCutOnResonances(kFALSE);
+      retCodeNoRes=fAnalysisCuts->IsSelected(d,AliRDHFCuts::kAll,aod);
+      fAnalysisCuts->ApplyCutOnResonances(origRes);
+    }
+    if(retCodeNoRes&1){ //KKpi
+      Double_t massKK=d->InvMass2Prongs(0,1,321,321);
+      Double_t massKp=d->InvMass2Prongs(1,2,321,211);
+      fMassHistKK[iPtBin]->Fill(massKK);
+      fMassHistKpi[iPtBin]->Fill(massKp);
+    }
+    if(retCodeNoRes&2){ //piKK
+      Double_t massKK=d->InvMass2Prongs(1,2,321,321);
+      Double_t massKp=d->InvMass2Prongs(0,1,211,321);
+      fMassHistKK[iPtBin]->Fill(massKK);
+      fMassHistKpi[iPtBin]->Fill(massKp);
+    }
+
+    if(retCodeAnalysisCuts<=0) continue;
     
     if(fAnalysisCuts->GetIsPrimaryWithoutDaughters()){
       if(d->GetOwnPrimaryVtx()) origownvtx=new AliAODVertex(*d->GetOwnPrimaryVtx());   
@@ -571,13 +640,23 @@ void AliAnalysisTaskSEDs::UserExec(Option_t */*option*/)
     Int_t isK0starKKpi=retCodeAnalysisCuts&16;    
     Int_t isK0starpiKK=retCodeAnalysisCuts&32;
 
+    Double_t weightKKpi=1.;
+    Double_t weightpiKK=1.;
+    if(fAnalysisCuts->GetPidOption()==AliRDHFCutsDstoKKpi::kBayesianWeights){      
+      weightKKpi=fAnalysisCuts->GetWeightForKKpi();
+      weightpiKK=fAnalysisCuts->GetWeightForpiKK();
+      if(weightKKpi>1. || weightKKpi<0.) weightKKpi=0.;
+      if(weightpiKK>1. || weightpiKK<0.) weightpiKK=0.;
+    }
+
     fChanHist[0]->Fill(retCodeAnalysisCuts);
  
     Int_t indexMCKKpi=-1;
     Int_t indexMCpiKK=-1;
     Int_t labDs=-1;
     Int_t pdgCode0=-999;
-    
+    Int_t isMCSignal=-1;
+
     if(fReadMC){
       labDs = d->MatchToMC(431,arrayMC,3,pdgDstoKKpi);
       if(labDs>=0){
@@ -590,9 +669,11 @@ void AliAnalysisTaskSEDs::UserExec(Option_t */*option*/)
            indexMCKKpi=GetSignalHistoIndex(iPtBin);
            fYVsPtSig->Fill(ptCand,rapid);
            fChanHist[1]->Fill(retCodeAnalysisCuts);
+           isMCSignal=1;
          }else{
            indexMCKKpi=GetReflSignalHistoIndex(iPtBin);
            fChanHist[3]->Fill(retCodeAnalysisCuts);
+           isMCSignal=0;
          }
        }
        if(ispiKK){
@@ -600,9 +681,11 @@ void AliAnalysisTaskSEDs::UserExec(Option_t */*option*/)
            indexMCpiKK=GetSignalHistoIndex(iPtBin);
            fYVsPtSig->Fill(ptCand,rapid);
            fChanHist[1]->Fill(retCodeAnalysisCuts);
+           isMCSignal=1;
          }else{
            indexMCpiKK=GetReflSignalHistoIndex(iPtBin);
            fChanHist[3]->Fill(retCodeAnalysisCuts);
+           isMCSignal=0;
          }
        }
       }else{
@@ -614,38 +697,38 @@ void AliAnalysisTaskSEDs::UserExec(Option_t */*option*/)
 
     if(isKKpi){
       Double_t invMass=d->InvMassDsKKpi();
-      fMassHist[index]->Fill(invMass);
-      fPtVsMass->Fill(invMass,ptCand);
+      fMassHist[index]->Fill(invMass,weightKKpi);
+      fPtVsMass->Fill(invMass,ptCand,weightKKpi);
       if(isPhiKKpi){
-       fMassHistPhi[index]->Fill(invMass); 
-       fPtVsMassPhi->Fill(invMass,ptCand);
+       fMassHistPhi[index]->Fill(invMass,weightKKpi); 
+       fPtVsMassPhi->Fill(invMass,ptCand,weightKKpi);
       }
       if(isK0starKKpi){
-       fMassHistK0st[index]->Fill(invMass);
-       fPtVsMassK0st->Fill(invMass,ptCand);
+       fMassHistK0st[index]->Fill(invMass,weightKKpi);
+       fPtVsMassK0st->Fill(invMass,ptCand,weightKKpi);
       }
       if(fReadMC  && indexMCKKpi!=-1){
-       fMassHist[indexMCKKpi]->Fill(invMass);
-       if(isPhiKKpi) fMassHistPhi[indexMCKKpi]->Fill(invMass);
-       if(isK0starKKpi) fMassHistK0st[indexMCKKpi]->Fill(invMass);       
+       fMassHist[indexMCKKpi]->Fill(invMass,weightKKpi);
+       if(isPhiKKpi) fMassHistPhi[indexMCKKpi]->Fill(invMass,weightKKpi);
+       if(isK0starKKpi) fMassHistK0st[indexMCKKpi]->Fill(invMass,weightKKpi);    
       }
     }
     if(ispiKK){
       Double_t invMass=d->InvMassDspiKK();
-      fMassHist[index]->Fill(invMass);
-      fPtVsMass->Fill(invMass,ptCand);
+      fMassHist[index]->Fill(invMass,weightpiKK);
+      fPtVsMass->Fill(invMass,ptCand,weightpiKK);
       if(isPhipiKK){ 
-       fMassHistPhi[index]->Fill(invMass);
-       fPtVsMassPhi->Fill(invMass,ptCand);
+       fMassHistPhi[index]->Fill(invMass,weightpiKK);
+       fPtVsMassPhi->Fill(invMass,ptCand,weightpiKK);
       }
       if(isK0starpiKK){
-       fMassHistK0st[index]->Fill(invMass);
-       fPtVsMassK0st->Fill(invMass,ptCand);
+       fMassHistK0st[index]->Fill(invMass,weightpiKK);
+       fPtVsMassK0st->Fill(invMass,ptCand,weightpiKK);
       }
       if(fReadMC  && indexMCpiKK!=-1){
-       fMassHist[indexMCpiKK]->Fill(invMass);
-       if(isPhipiKK) fMassHistPhi[indexMCpiKK]->Fill(invMass);
-       if(isK0starpiKK) fMassHistK0st[indexMCpiKK]->Fill(invMass);      
+       fMassHist[indexMCpiKK]->Fill(invMass,weightpiKK);
+       if(isPhipiKK) fMassHistPhi[indexMCpiKK]->Fill(invMass,weightpiKK);
+       if(isK0starpiKK) fMassHistK0st[indexMCpiKK]->Fill(invMass,weightpiKK);      
       }
     }
 
@@ -735,6 +818,7 @@ void AliAnalysisTaskSEDs::UserExec(Option_t */*option*/)
         UInt_t BitMapPIDTrack2=fAnalysisCuts->GetPIDTrackTPCTOFBitMap(track2);
    
            tmp[0]=Float_t(labDs);
+           if(fReadMC && fWriteOnlySignal) tmp[0]=Float_t(isMCSignal);
            tmp[1]=Float_t(retCodeAnalysisCuts);
            tmp[2]=Float_t(pdgCode0);  
            tmp[3]=d->PtProng(0);
@@ -772,9 +856,13 @@ void AliAnalysisTaskSEDs::UserExec(Option_t */*option*/)
            tmp[35]=(Float_t)(centrality);
            tmp[36]=(Float_t)(runNumber);       
        
-           fNtupleDs->Fill(tmp);
+           if(fReadMC && fWriteOnlySignal){
+             if(isMCSignal>=0) fNtupleDs->Fill(tmp);
+           }else{
+             fNtupleDs->Fill(tmp);
+           }
            PostData(4,fNtupleDs);
-      }  
+      }
     }
     
     if(unsetvtx) d->UnsetOwnPrimaryVtx();