]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG3/vertexingHF/AliAnalysisTaskSECharmFraction.cxx
Fix
[u/mrichter/AliRoot.git] / PWG3 / vertexingHF / AliAnalysisTaskSECharmFraction.cxx
index 5dc1d321882ad7e990775ab9cb781fff379696a5..0a87780494745bcb2689d4a26f67fad15391117d 100644 (file)
 // AliAnalysisTaskSE for the extraction of the fraction of prompt charm
 // using the charm hadron impact parameter to the primary vertex
 //
-// Author: Andrea Rossi, andrea.rossi@ts.infn.it
+// Author: Andrea Rossi, andrea.rossi@pd.infn.it
 /////////////////////////////////////////////////////////////
 
 
 #include <TH1F.h>
 #include <TH2F.h>
+#include <THnSparse.h>
 #include <TDatabasePDG.h>
 #include <TMath.h>
 #include <TROOT.h>
-
-#include "AliAnalysisManager.h"
-#include "AliAODHandler.h"
 #include "AliAODEvent.h"
 #include "AliAODRecoDecayHF2Prong.h"
 #include "AliAODRecoDecayHF.h"
 #include "AliAODRecoDecay.h"
+#include "AliAnalysisDataSlot.h"
+#include "AliAnalysisDataContainer.h"
 #include "AliAODTrack.h"
+#include "AliAODHandler.h"
+#include "AliESDtrack.h"
 #include "AliAODVertex.h"
+#include "AliESDVertex.h"
+#include "AliVertexerTracks.h"
 #include "AliAODMCParticle.h"
+#include "AliAODPid.h"
+#include "AliTPCPIDResponse.h"
 #include "AliAODMCHeader.h"
 #include "AliAnalysisVertexingHF.h"
 #include "AliAnalysisTaskSECharmFraction.h"
-
+#include "AliRDHFCutsD0toKpi.h"
+#include "AliAODInputHandler.h"
+#include "AliAnalysisManager.h"
+#include "AliNormalizationCounter.h"
 
 class TCanvas;
 class TTree;
 class TChain;
-class AliAODInputHandler;
-class AliAnalysisManager;
 class AliAnalysisTaskSE;
 
 
@@ -56,21 +63,33 @@ ClassImp(AliAnalysisTaskSECharmFraction)
 //________________________________________________________________________
   AliAnalysisTaskSECharmFraction::AliAnalysisTaskSECharmFraction() 
     : AliAnalysisTaskSE(),
-      fVHFloose(0),
-      fVHFtight(0),
+      fCutsLoose(0),
+      fCutsTight(0),
+      fFastAnalysis(1),
+      fReadMC(kFALSE),
+      fsplitMassD0D0bar(kTRUE),
+      fLikeSign(kFALSE),
+      fusePID(kTRUE),
       fmD0PDG(),
-      fnbins(),
+      fnbins(1),
       fptbins(0),
+      fNtrMaxforVtx(-1),
+      fptAll(),                          
+      fptAllSq(),                        
+      fptMax(),
       fAcceptanceCuts(),
       fsignalInvMassCut(),
       flargeInvMassCut(),
       fsidebandInvMassCut(),
       fsidebandInvMassWindow(),
       fUseMC(kTRUE),
+      fCleanCandOwnVtx(kFALSE),
       fNentries(0),
       fSignalType(0),
       fSignalTypeLsCuts(0),
       fSignalTypeTghCuts(0),
+      fCounter(0),
+      flistMCproperties(0),
       flistNoCutsSignal(0),
       flistNoCutsBack(0),
       flistNoCutsFromB(0),
@@ -93,21 +112,33 @@ ClassImp(AliAnalysisTaskSECharmFraction)
 //________________________________________________________________________
   AliAnalysisTaskSECharmFraction::AliAnalysisTaskSECharmFraction(const char *name) 
     : AliAnalysisTaskSE(name),
-      fVHFloose(0),
-      fVHFtight(0),
+      fCutsLoose(0x0),
+      fCutsTight(0x0),
+      fFastAnalysis(1),
+      fReadMC(kFALSE),
+      fsplitMassD0D0bar(kTRUE),
+      fLikeSign(kFALSE),
+      fusePID(kTRUE),
       fmD0PDG(),
-      fnbins(),
+      fnbins(1),
       fptbins(0),
+      fNtrMaxforVtx(-1),
+      fptAll(),                          
+      fptAllSq(),                        
+      fptMax(),
       fAcceptanceCuts(),
-      fsignalInvMassCut(),
-      flargeInvMassCut(),
-      fsidebandInvMassCut(),
-      fsidebandInvMassWindow(),
-      fUseMC(kTRUE),
+      fsignalInvMassCut(-1.),
+      flargeInvMassCut(-1.),
+      fsidebandInvMassCut(-1.),
+      fsidebandInvMassWindow(-1.),
+      fUseMC(kFALSE),
+      fCleanCandOwnVtx(kFALSE),
       fNentries(0),
       fSignalType(0),
       fSignalTypeLsCuts(0),
       fSignalTypeTghCuts(0),
+      fCounter(0),
+      flistMCproperties(0),
       flistNoCutsSignal(0),
       flistNoCutsBack(0),
       flistNoCutsFromB(0),
@@ -132,45 +163,54 @@ ClassImp(AliAnalysisTaskSECharmFraction)
   // Output slot #0 writes into a TH1 container
 
   //Standard pt bin
-  fnbins=4;
-  fptbins=new Double_t[fnbins+1];
-  fptbins[0]=0.;
-  fptbins[1]=1.;
-  fptbins[2]=3.;
-  fptbins[3]=5.;
-  fptbins[4]=1000.;
-  //fAcceptanceCuts=new Double_t[3];
-  SetAcceptanceCut();
-  SetStandardMassSelection();
+  fnbins=SetStandardCuts(fptbins);// THIS TO SET NBINS AND BINNING
   DefineOutput(1, TH1F::Class());
   DefineOutput(2, TH1F::Class());
   DefineOutput(3, TH1F::Class());
   DefineOutput(4, TH1F::Class());
-  for(Int_t j=5;j<20;j++){
+  DefineOutput(5, AliNormalizationCounter::Class());
+
+  for(Int_t j=6;j<22;j++){
     DefineOutput(j, TList::Class());
   }
 
+  // Output slot for the Cut Objects 
+  DefineOutput(22,AliRDHFCutsD0toKpi::Class());  //My private output
+  DefineOutput(23,AliRDHFCutsD0toKpi::Class());  //My private output
 
 }
 
 
-AliAnalysisTaskSECharmFraction::AliAnalysisTaskSECharmFraction(const char *name,Int_t nptbins,Double_t *ptbins
+AliAnalysisTaskSECharmFraction::AliAnalysisTaskSECharmFraction(const char *name,AliRDHFCutsD0toKpi *cutsA,AliRDHFCutsD0toKpi *cutsB
   : AliAnalysisTaskSE(name),
-    fVHFloose(0),
-    fVHFtight(0),
+    fCutsLoose(0),
+    fCutsTight(0),
+    fFastAnalysis(1),
+    fReadMC(kFALSE),
+    fsplitMassD0D0bar(kTRUE),
+    fLikeSign(kFALSE),
+    fusePID(kTRUE),
     fmD0PDG(),
-    fnbins(),
+    fnbins(1),
     fptbins(0),
+    fNtrMaxforVtx(-1),
+    fptAll(),                          
+    fptAllSq(),                        
+    fptMax(),
     fAcceptanceCuts(),
-    fsignalInvMassCut(),
-    flargeInvMassCut(),
-    fsidebandInvMassCut(),
-    fsidebandInvMassWindow(),
-    fUseMC(kTRUE),
+    fsignalInvMassCut(-1.),
+    flargeInvMassCut(-1.),
+    fsidebandInvMassCut(-1.),
+    fsidebandInvMassWindow(-1.),
+    fUseMC(kFALSE),
+    fCleanCandOwnVtx(kFALSE),
     fNentries(0),
     fSignalType(0),
     fSignalTypeLsCuts(0),
     fSignalTypeTghCuts(0),
+    fCounter(0),
+    flistMCproperties(0),
     flistNoCutsSignal(0),
     flistNoCutsBack(0),
     flistNoCutsFromB(0),
@@ -188,24 +228,45 @@ AliAnalysisTaskSECharmFraction::AliAnalysisTaskSECharmFraction(const char *name,
     flistTghCutsOther(0)
 {
   // Constructor
-  // ptbins must be of dimension nptbins +1
+  if(fCutsTight){
+    delete fCutsTight;fCutsTight=NULL;
+  }
+  if(fCutsLoose){
+    delete fCutsLoose;fCutsLoose=NULL;
+  }
+  
+  //Check consistency between sets of cuts:
+  if(cutsA->GetNPtBins()!=cutsB->GetNPtBins()){
+    printf("Different number of pt bins between the two sets of cuts: SWITCH TO STANDARD CUTS \n");
+    fnbins=SetStandardCuts(fptbins);
+  }
+  else{
+    fCutsTight=new AliRDHFCutsD0toKpi(*cutsA);
+    fCutsLoose=new AliRDHFCutsD0toKpi(*cutsB);
+    for(Int_t j=0;j<cutsA->GetNPtBins();j++){
+      if(TMath::Abs(cutsA->GetPtBinLimits()[j]-cutsB->GetPtBinLimits()[j])>1.e-7){
+       printf("Different pt bin limits in the two set of cuts: use the first as reference \n");
+       fCutsLoose->SetPtBins(cutsA->GetNPtBins(),cutsA->GetPtBinLimits());
+       break;
+      }     
+    }
+    SetPtBins(fCutsTight->GetNPtBins(),fCutsTight->GetPtBinLimits());   
+  }
   
-  SetNPtBins(nptbins,ptbins);
-  SetStandardMassSelection();
-  //  fAcceptanceCuts=new Double_t[3];
-  SetAcceptanceCut();
-  // Define input and output slots here
   // Output slot #0 writes into a TH1 container
   DefineOutput(1, TH1F::Class());
   DefineOutput(2, TH1F::Class());
   DefineOutput(3, TH1F::Class());
   DefineOutput(4, TH1F::Class());
-  for(Int_t j=5;j<20;j++){
+  DefineOutput(5, AliNormalizationCounter::Class());
+
+  for(Int_t j=6;j<22;j++){
 
     DefineOutput(j, TList::Class());
   }
-
+ // Output slot for the Cut Objects 
+  DefineOutput(22,AliRDHFCutsD0toKpi::Class());  //My private output
+  DefineOutput(23,AliRDHFCutsD0toKpi::Class());  //My private output
  
 }
 
@@ -213,13 +274,13 @@ AliAnalysisTaskSECharmFraction::AliAnalysisTaskSECharmFraction(const char *name,
 AliAnalysisTaskSECharmFraction::~AliAnalysisTaskSECharmFraction()
 { //Destructor 
   
-  if (fVHFtight) {
-    delete fVHFtight;
-    fVHFtight = 0;
+  if (fCutsTight) {   
+    delete fCutsTight;
+    fCutsTight = 0;
   }
-  if (fVHFloose) {
-    delete fVHFloose;
-    fVHFloose = 0;
+  if (fCutsLoose) {  
+    delete fCutsLoose;
+    fCutsLoose = 0;
   }
   if(fptbins){
     delete fptbins;
@@ -245,65 +306,92 @@ AliAnalysisTaskSECharmFraction::~AliAnalysisTaskSECharmFraction()
     delete fSignalTypeTghCuts;
     fSignalTypeTghCuts = 0;
   } 
+  
+  if (fCounter) {
+    delete fCounter;
+    fCounter = 0;
+  } 
+  
+  if(flistMCproperties){
+    flistMCproperties->Delete();
+    delete flistMCproperties;
+    flistMCproperties=0;
+  }
+  
   if(flistNoCutsSignal){
+    flistNoCutsSignal->Delete();
     delete flistNoCutsSignal;
     flistNoCutsSignal=0;
   }
   if(flistNoCutsBack){
+    flistNoCutsBack->Delete();
     delete flistNoCutsBack;
     flistNoCutsBack=0;
   }
   if(flistNoCutsFromB){
+    flistNoCutsFromB->Delete();
     delete flistNoCutsFromB;
     flistNoCutsFromB=0;
   }
   if(flistNoCutsFromDstar){
+    flistNoCutsFromDstar->Delete();
     delete flistNoCutsFromDstar;
     flistNoCutsFromDstar=0;
   }
   if(flistNoCutsOther){
+    flistNoCutsOther->Delete();
     delete flistNoCutsOther;
     flistNoCutsOther=0;
   }
   
  if(flistLsCutsSignal){
+   flistLsCutsSignal->Delete();
     delete flistLsCutsSignal;
     flistLsCutsSignal=0;
   }
   if(flistLsCutsBack){
+    flistLsCutsBack->Delete();
     delete flistLsCutsBack;
     flistLsCutsBack=0;
   }
   if(flistLsCutsFromB){
+    flistLsCutsFromB->Delete();
     delete flistLsCutsFromB;
     flistLsCutsFromB=0;
   }
   if(flistLsCutsFromDstar){
+    flistLsCutsFromDstar->Delete();
     delete flistLsCutsFromDstar;
     flistLsCutsFromDstar=0;
   }
   if(flistLsCutsOther){
+    flistLsCutsOther->Delete();
     delete flistLsCutsOther;
     flistLsCutsOther=0;
   }
   
  if(flistTghCutsSignal){
+   flistTghCutsSignal->Delete();
     delete flistTghCutsSignal;
     flistTghCutsSignal=0;
   }
   if(flistTghCutsBack){
+    flistTghCutsBack->Delete();
     delete flistTghCutsBack;
     flistTghCutsBack=0;
   }
   if(flistTghCutsFromB){
+    flistTghCutsFromB->Delete();
     delete flistTghCutsFromB;
     flistTghCutsFromB=0;
   }
   if(flistTghCutsFromDstar){
+    flistTghCutsFromDstar->Delete();
     delete flistTghCutsFromDstar;
     flistTghCutsFromDstar=0;
   }
   if(flistTghCutsOther){
+    flistTghCutsOther->Delete();
     delete flistTghCutsOther;
     flistTghCutsOther=0;
   }
@@ -320,24 +408,44 @@ void AliAnalysisTaskSECharmFraction::Init()
   if(fDebug > 1) printf("AnalysisTaskSED0Mass::Init() \n");
   fmD0PDG = TDatabasePDG::Instance()->GetParticle(421)->Mass();
   
-  gROOT->LoadMacro("$ALICE_ROOT/PWG3/vertexingHF/ConfigVertexingHF.C");
+  //  gROOT->LoadMacro("$ALICE_ROOT/PWG3/vertexingHF/ConfigVertexingHF.C");
+  // gROOT->LoadMacro("$ALICE_ROOT/PWG3/vertexingHF/D0fromBSetCuts.C");
+  // 2 sets of dedicated cuts: fCutsTight is assumed as the standard cut object
   
-  // 2 sets of dedidcated cuts -- defined in UserExec
-  //  the config file and the way the cuts are set is for further development
-  //   (to be interfaced with AliAnalsysTaskSETuneCuts)
-
-  fVHFtight = (AliAnalysisVertexingHF*)gROOT->ProcessLine("ConfigVertexingHF()");
-  fVHFloose = (AliAnalysisVertexingHF*)gROOT->ProcessLine("ConfigVertexingHF()");  
-  if(!fptbins){
-    //SET STANDARD PT BINNING
-    fnbins=4;
-    fptbins=new Double_t[fnbins+1];
-    fptbins[0]=0.;
-    fptbins[1]=1.;
-    fptbins[2]=3.;
-    fptbins[3]=5.;
-    fptbins[4]=1000.;
+  // SetAcceptanceCut();
+  if(fNtrMaxforVtx<0)SetNMaxTrForVtx(3); //DEFAULT : NO SELECTION
+  if(fsignalInvMassCut<0.||flargeInvMassCut<0.||fsidebandInvMassCut<0.||fsidebandInvMassWindow<0.){
+    printf("AliAnalysisTaskSECharmFraction: Not All info for mass selection provided: switch to default values \n");
+    SetStandardMassSelection();
+  }
+  
+  AliRDHFCutsD0toKpi* copyfCutsTight=new AliRDHFCutsD0toKpi(*fCutsTight);
+  const char* nameoutputTight=GetOutputSlot(22)->GetContainer()->GetName();
+  copyfCutsTight->SetName(nameoutputTight);
+  AliRDHFCutsD0toKpi* copyfCutsLoose=new AliRDHFCutsD0toKpi(*fCutsLoose);
+  const char* nameoutputLoose=GetOutputSlot(23)->GetContainer()->GetName();
+  copyfCutsLoose->SetName(nameoutputLoose);
+
+  // Post the data
+  PostData(22,copyfCutsTight);  
+  PostData(23,copyfCutsLoose);
+  
+  
+  fCleanCandOwnVtx=kFALSE;
+  if(fCutsTight->GetIsPrimaryWithoutDaughters()^fCutsLoose->GetIsPrimaryWithoutDaughters()) {
+    printf("Two cut objects have different selection for primary vertex recalculation w/o daughters:\n Dangerous for variable drawing!! \n");   
+  }
+  else{
+    if(fCutsTight->GetIsPrimaryWithoutDaughters()){
+      fCleanCandOwnVtx=kTRUE;
+      fCutsTight->SetRemoveDaughtersFromPrim(kFALSE);
+      fCutsLoose->SetRemoveDaughtersFromPrim(kFALSE);
+    }
   }
+   
+
+
+  
   return;
 }
 
@@ -372,14 +480,62 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   TString namehist;
   TString titlehist;
   TString strnamept,strtitlept;
-  fNentries=new TH1F("nentriesChFr", "Look at the number of entries! = number of AODs", 2,1.,2.);
-  fSignalType=new TH1F("hsignaltype", "Histo for type of MC signal", 21,-1.,20.);
-  fSignalTypeLsCuts=new TH1F("hsignaltypeLsCuts", "Histo for type of MC signal with loose cuts", 21,-1.,20.);
-  fSignalTypeTghCuts=new TH1F("hsignaltypeTghCuts", "Histo for type of MC signal with tight cuts", 21,-1.,20.);
+  Printf("INSIDE USER CREATE \n");
+  
+  // fNentries=new TH1F("nentriesChFr", "Look at the number of entries! = number of AODs", 2,1.,2.);
+  
+  fNentries=new TH1F("nentriesChFr", "Analyzed sample properties", 21,-0.5,20.5);
+
+  fNentries->GetXaxis()->SetBinLabel(1,"nEventsAnal");
+
+  fNentries->GetXaxis()->SetBinLabel(2,"nEvTGHTsel");
+  fNentries->GetXaxis()->SetBinLabel(3,"nEvTGHTPile-up Rej");
+  fNentries->GetXaxis()->SetBinLabel(4,"nEvTGHTGoodVtxS");
+  fNentries->GetXaxis()->SetBinLabel(5,"nEvTGHTRejVtxZ");
+  fNentries->GetXaxis()->SetBinLabel(6,"nTracksTGHTEv");
+  fNentries->GetXaxis()->SetBinLabel(7,"nCandTGHTEv");
+  fNentries->GetXaxis()->SetBinLabel(8,"nCandSelTGHTEv");
+  fNentries->GetXaxis()->SetBinLabel(20,"nUnexpErrorTGHT");
+
+  fNentries->GetXaxis()->SetBinLabel(9,"nEvLSsel");
+  fNentries->GetXaxis()->SetBinLabel(10,"nEvLSPile-up Rej");
+  fNentries->GetXaxis()->SetBinLabel(11,"nEvLSGoodVtxS");
+  fNentries->GetXaxis()->SetBinLabel(12,"nEvLSRejVtxZ");
+  fNentries->GetXaxis()->SetBinLabel(13,"nTracksLSEv");
+  fNentries->GetXaxis()->SetBinLabel(14,"nCandLSEv");
+  fNentries->GetXaxis()->SetBinLabel(15,"nCandSelLSEv");
+  fNentries->GetXaxis()->SetBinLabel(21,"nUnexpErrorTGHT");
+
+  /*   -----------------  NOT ACTIVATED YET ------------------
+    fNentries->GetXaxis()->SetBinLabel(5,"ptbin = -1");
+    fNentries->GetXaxis()->SetBinLabel(6,"no daughter");
+    fNentries->GetXaxis()->SetBinLabel(7,"nCandSel(Tr)");
+    fNentries->GetXaxis()->SetBinLabel(8,"PID=0");
+    fNentries->GetXaxis()->SetBinLabel(9,"PID=1");
+    fNentries->GetXaxis()->SetBinLabel(10,"PID=2");
+    fNentries->GetXaxis()->SetBinLabel(11,"PID=3");
+    fNentries->GetXaxis()->SetBinLabel(12,"K");
+    fNentries->GetXaxis()->SetBinLabel(13,"Lambda");
+    fNentries->GetXaxis()->SetBinLabel(14,"Pile-up Rej");
+    fNentries->GetXaxis()->SetBinLabel(15,"N. of 0SMH");
+  */
+
+  fNentries->GetXaxis()->SetNdivisions(1,kFALSE);
+
+  fSignalType=new TH1F("hsignaltype", "Histo for type of MC signal", 61,-1.,60.);
+  fSignalTypeLsCuts=new TH1F("hsignaltypeLsCuts", "Histo for type of MC signal with loose cuts", 61,-1.,60.);
+  fSignalTypeTghCuts=new TH1F("hsignaltypeTghCuts", "Histo for type of MC signal with tight cuts", 61,-1.,60.);
+
+
+
+  fCounter = new AliNormalizationCounter(Form("%s",GetOutputSlot(5)->GetContainer()->GetName()));
+  fCounter->Init(); 
 
   //##########  DEFINE THE TLISTS ##################
-  
+  flistMCproperties=new TList();
+  flistMCproperties->SetOwner();
+  flistMCproperties->SetName("listMCproperties");
+
   flistNoCutsSignal = new TList();
   flistNoCutsSignal->SetOwner();
   flistNoCutsSignal->SetName("listNCsign");
@@ -444,25 +600,132 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
 
 
 
+  Float_t ptbinsD0arr[35]={0.,0.1,0.2,0.3,0.4,0.5,0.6,0.8,1.,1.25,1.5,1.75,2.,2.3,2.6,3.,3.5,4.,4.5,5.,5.5,6.,7.,8.,9.,10.,12.,14.,16.,20.,25.,30.,40.,50.,100.};
+  Float_t dumbinning[201];
+  for(Int_t j=0;j<201;j++){
+    dumbinning[j]=(Float_t)j*0.5;
+  }
+
+  // DEFINE EDGES FOR SPARSE HISTOS
+  const Int_t nPtbinsForSparse=91;//nuber of edges, -1 to get number of bins
+  Double_t ptbinsForNsparse[nPtbinsForSparse];//Binning in pt: step: 0.2 GeV/c up to 8 GeV/c, 0.5 Upto 20, 1 GeV/c up to 40, 5 upt to 70-> 8/0.2+12/0.5+20/1.+30./5
+  Double_t pT=0;
+  Double_t massbins[186],impparbins[401];  
+  Double_t massHypoBins[4]={1.,2.,3.,4.};
+  Int_t nbinsSparse[5]={185,185,nPtbinsForSparse-1,400,3};
+  for(Int_t nBins=0;nBins<nPtbinsForSparse;nBins++){    
+    ptbinsForNsparse[nBins]=pT;
+    if(pT<8.)pT+=0.2;
+    else if(pT<20)pT+=0.5;
+    else if(pT<40)pT+=1;
+    else if(pT<70)pT+=5.;  
+  }  
+  for(Int_t nBins=0;nBins<186;nBins++){
+    massbins[nBins]=1.680+nBins*(2.050-1.680)/185.;
+  }
+  for(Int_t nBins=0;nBins<401;nBins++){
+    impparbins[nBins]=-1000+nBins*(2000.)/400.;
+  }
+
+  
+  // Lxy and CosPointXY study
+  Int_t nbinsSparsCxyLxy[4]={84,fCutsTight->GetNPtBins(),10,25}; 
+  Double_t binLowLimitSparseCxyLxy[4]={1.680,fCutsTight->GetPtBinLimits()[0],0.99,0.};// Use OverFlow/UnderFlow to get other cases
+  Double_t binUpLimitSparseCxyLxy[4]={2.100,fCutsTight->GetPtBinLimits()[fCutsTight->GetNPtBins()],1.,50.};
+  Double_t *ptbinlimitsCxyLxy=new Double_t[fCutsTight->GetNPtBins()+1];
+  for(Int_t nBins=0;nBins<=fCutsTight->GetNPtBins();nBins++){
+    ptbinlimitsCxyLxy[nBins]=fCutsTight->GetPtBinLimits()[nBins];
+  }
+  
+
+  //################################################################################################
+  //                                                                                               #
+  //                HISTO FOR MC PROPERTIES OF D0, c quarks and B mesons                           #
+  //                                                                                               # 
+  //################################################################################################
+  TH1F *hMCcquarkAllPt=new TH1F("hMCcquarkAllPt","c quark Pt (all cquarks produced)",34,ptbinsD0arr);
+  TH1F *hMCcquarkAllEta=new TH1F("hMCcquarkAllEta","c quark Eta (all cquarks produced)",50,-3.,3.);
+  TH1F *hMCcquarkAllEnergy=new TH1F("hMCcquarkAllEnergy","c quark Pt (all cquarks produced)",200,0.,100.);
+  TH1F *hMCcquarkNdaught=new TH1F("hMCcquarkNdaught","N cquark daughters (all cquarks produced)",100,0.,100.);
+  TH1F *hMCD0fromcPt=new TH1F("hMCD0fromcPt","D0 from c Pt",34,ptbinsD0arr);
+  TH1F *hMCD0fromcEta=new TH1F("hMCD0fromcEta","D0 from c Eta",50,-3.,3.);
+  TH1F *hMCD0fromcEnergy=new TH1F("hMCD0fromcEnergy","D0 from c Energy",200,0.,100.);
+  
+  TH2F *hMCD0VscquarkPt=new TH2F("hMCD0VscquarkPt","D0 pt Vs cquark pt",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hMCD0VscquarkEnergy=new TH2F("hMCD0VscquarkEnergy","D0 Energy Vs cquark Energy",200,0.,50.,200,0.,50.);
+  TH1F *hMCD0deltacquarkEnergy=new TH1F("hMCD0deltacquarkEnergy","Fractional D0 Energy w.r.t. cquark Energy",20,0.,1.);
+  TH1F *hMCD0EnergyVsAvcquarkDaughtEn=new TH1F("hMCD0EnergyVsAvcquarkDaughtEn","#Delta(E^{D^0}-E_{avg})/E_{cquark}",40,-1.,1.);
+  TH1F *hMCD0cquarkAngle=new TH1F("hMCD0cquarkAngle","cosine of the angle between D0 and c quark particle",40,-1.,1.);
+  TH2F *hMCD0cquarkAngleEnergy=new TH2F("hMCD0cquarkAngleEnergy","cosine of the angle between D0 and c quark particle as a function of Energy",25,0.,50.,40,-1.,1.);
+
+  TH1I *hMCfromBpdgB=new TH1I("hMCfromBpdgB","hMCfromBpdgB",10000,0.,10000);
+  TH1F *hMCBhadrPt=new TH1F("hMCBhadrPt","B hadr Pt",34,ptbinsD0arr);
+  TH1F *hMCBhadrEta=new TH1F("hMCBhadrEta","B hadr Eta",50,-3.,3.);
+  TH1F *hMCBhadrEnergy=new TH1F("hMCBhadrEnergy","B hadr Pt",200,0.,100.);
+  TH1F *hMCBhadrNdaught=new TH1F("hMCBhadrNdaught","N Bhadr daughters",100,0.,100.);
+  TH1F *hMCD0fromBPt=new TH1F("hMCD0fromBPt","D0 from B Pt",34,ptbinsD0arr);
+  TH1F *hMCD0fromBEta=new TH1F("hMCD0fromBEta","D0 from B Eta",50,-3.,3.);
+  TH1F *hMCD0fromBEnergy=new TH1F("hMCD0fromBEnergy","D0 from B Energy",200,0.,100.);
+
+  TH2F *hMCD0VsBhadrPt=new TH2F("hMCD0VsBhadrPt","D0 pt Vs Bhadr pt",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hMCD0VsBhadrEnergy=new TH2F("hMCD0VsBhadrEnergy","D0 Energy Vs Bhadr Energy",200,0.,50.,200,0.,50.);
+  TH1F *hMCD0deltaBhadrEnergy=new TH1F("hMCD0deltaBhadrEnergy","Fractional D0 Energy w.r.t. Bhadr Energy",20,0.,1.);
+  TH1F *hMCD0EnergyVsAvBDaughtEn=new TH1F("hMCD0EnergyVsAvBDaughtEn","#Delta(E^{D^0}-E_{avg})/E_{Bahdr}",40,-1.,1.);
+  TH1F *hMCD0BhadrAngle=new TH1F("hMCD0BhadrAngle","cosine of the angle between D0 and Bhadr particle",40,-1.,1.);
+  TH2F *hMCD0BhadrAngleEnergy=new TH2F("hMCD0BhadrAngleEnergy","cosine of the angle between D0 and Bhadr particle as a function of Energy",25,0.,50.,40,-1.,1.);
+
+  TH1I *hMCPartFound=new TH1I("hMCPartFound","1=c,2=D0,3=fromBall,4=fromBmeson,5=fromBbaryon",6,0,6); 
+
+  flistMCproperties->Add(hMCcquarkAllPt);
+  flistMCproperties->Add(hMCcquarkAllEta);
+  flistMCproperties->Add(hMCcquarkAllEnergy);
+  flistMCproperties->Add(hMCcquarkNdaught);
+  flistMCproperties->Add(hMCD0fromcPt);
+  flistMCproperties->Add(hMCD0fromcEta);
+  flistMCproperties->Add(hMCD0fromcEnergy);
+  flistMCproperties->Add(hMCD0VscquarkPt);
+  flistMCproperties->Add(hMCD0VscquarkEnergy);
+  flistMCproperties->Add(hMCD0deltacquarkEnergy);
+  flistMCproperties->Add(hMCD0EnergyVsAvcquarkDaughtEn);
+  flistMCproperties->Add(hMCD0cquarkAngle);
+  flistMCproperties->Add(hMCD0cquarkAngleEnergy);
+  
+  flistMCproperties->Add(hMCfromBpdgB);
+  flistMCproperties->Add(hMCBhadrPt);
+  flistMCproperties->Add(hMCBhadrEta);
+  flistMCproperties->Add(hMCBhadrEnergy);
+  flistMCproperties->Add(hMCBhadrNdaught);
+  flistMCproperties->Add(hMCD0fromBPt);
+  flistMCproperties->Add(hMCD0fromBEta);
+  flistMCproperties->Add(hMCD0fromBEnergy);
+  flistMCproperties->Add(hMCD0VsBhadrPt);
+  flistMCproperties->Add(hMCD0VsBhadrEnergy);
+  flistMCproperties->Add(hMCD0deltaBhadrEnergy);
+  flistMCproperties->Add(hMCD0EnergyVsAvBDaughtEn);
+  flistMCproperties->Add(hMCD0BhadrAngle);
+  flistMCproperties->Add(hMCD0BhadrAngleEnergy);
+  flistMCproperties->Add(hMCPartFound);
 
   //################################################################################################
   //                                                                                               #
   //                         HISTOS FOR NO CUTS CASE                                               #
   //                                                                                               #
   //################################################################################################
-
+  Printf("AFTER MC HISTOS \n");
 
   //############ NO CUTS SIGNAL HISTOGRAMS ###############
   //
   // ####### global properties histo ############
 
-  TH2F *hCPtaVSd0d0NCsign=new TH2F("hCPtaVSd0d0NCsign","hCPtaVSd0d0_NoCuts_Signal",1000,-100000.,100000.,100,0.,1.);
+  TH2F *hCPtaVSd0d0NCsign=new TH2F("hCPtaVSd0d0NCsign","hCPtaVSd0d0_NoCuts_Signal",1000,-100000.,100000.,100,-1.,1.);
   TH1F *hSecVtxZNCsign=new TH1F("hSecVtxZNCsign","hSecVtxZ_NoCuts_Signal",1000,-8.,8.);
   TH1F *hSecVtxXNCsign=new TH1F("hSecVtxXNCsign","hSecVtxX_NoCuts_Signal",1000,-3000.,3000.);
   TH1F *hSecVtxYNCsign=new TH1F("hSecVtxYNCsign","hSecVtxY_NoCuts_Signal",1000,-3000.,3000.);
   TH2F *hSecVtxXYNCsign=new TH2F("hSecVtxXYNCsign","hSecVtxXY_NoCuts_Signal",1000,-3000.,3000.,1000,-3000.,3000.);
   TH1F *hSecVtxPhiNCsign=new TH1F("hSecVtxPhiNCsign","hSecVtxPhi_NoCuts_Signal",180,-180.1,180.1);
-  TH1F *hCPtaNCsign=new TH1F("hCPtaNCsign","hCPta_NoCuts_Signal",100,0.,1.);
+  TH1F *hd0singlTrackNCsign=new TH1F("hd0singlTrackNCsign","hd0singlTrackNoCuts_Signal",1000,-5000.,5000.);
+  TH1F *hCPtaNCsign=new TH1F("hCPtaNCsign","hCPta_NoCuts_Signal",100,-1.,1.);
   TH1F *hd0xd0NCsign=new TH1F("hd0xd0NCsign","hd0xd0_NoCuts_Signal",1000,-100000.,100000.);
   TH1F *hMassTrueNCsign=new TH1F("hMassTrueNCsign","D^{0} MC inv. Mass No Cuts Signal(All momenta)",600,1.600,2.200);
   TH1F *hMassNCsign=new TH1F("hMassNCsign","D^{0} inv. Mass No Cuts Signal (All momenta)",600,1.600,2.200);
@@ -481,6 +744,7 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistNoCutsSignal->Add(hSecVtxXNCsign);
   flistNoCutsSignal->Add(hSecVtxXYNCsign);
   flistNoCutsSignal->Add(hSecVtxPhiNCsign);
+  flistNoCutsSignal->Add(hd0singlTrackNCsign);
   flistNoCutsSignal->Add(hCPtaNCsign);
   flistNoCutsSignal->Add(hd0xd0NCsign);
   flistNoCutsSignal->Add(hMassTrueNCsign);
@@ -489,6 +753,204 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistNoCutsSignal->Add(hMassNCsignPM);
   flistNoCutsSignal->Add(hMassTrueNCsignSB);
   flistNoCutsSignal->Add(hMassNCsignSB);
+  
+  //%%% NEW HISTOS %%%%%%%%%%%%%%%%
+  TH1F *hdcaNCsign=new TH1F("hdcaNCsign","hdca_NoCuts_Signal",100,0.,1000.);
+  hdcaNCsign->SetXTitle("dca   [#mum]");
+  hdcaNCsign->SetYTitle("Entries");
+  TH1F *hcosthetastarNCsign=new TH1F("hcosthetastarNCsign","hCosThetaStar_NoCuts_Signal",50,-1.,1.);
+  hcosthetastarNCsign->SetXTitle("cos #theta^{*}");
+  hcosthetastarNCsign->SetYTitle("Entries");
+  TH1F *hptD0NCsign=new TH1F("hptD0NCsign","D^{0} transverse momentum distribution",34,ptbinsD0arr);
+  hptD0NCsign->SetXTitle("p_{t}  [GeV/c]");
+  hptD0NCsign->SetYTitle("Entries");
+  TH1F *hptD0VsMaxPtNCsign=new TH1F("hptD0VsMaxPtNCsign","Difference between D^{0} pt and highest (or second) pt",400,-50.,50.);
+  TH2F *hptD0PTallsqrtNCsign=new TH2F("hptD0PTallsqrtNCsign","D^{0} pt Vs Sqrt(Sum pt square)",34,ptbinsD0arr,200,dumbinning);
+  TH2F *hptD0PTallNCsign=new TH2F("hptD0PTallNCsign","D^{0} pt Vs Sum pt ",34,ptbinsD0arr,200,dumbinning);
+  TH2F *hptD0vsptBNCsign=new TH2F("hptD0vsptBNCsign","D^{0} pt Vs B pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hpD0vspBNCsign=new TH2F("hpD0vspBNCsign","D^{0} tot momentum Vs B tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hptD0vsptcquarkNCsign=new TH2F("hptD0vsptcquarkNCsign","D^{0} pt Vs cquark pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hpD0vspcquarkNCsign=new TH2F("hpD0vspcquarkNCsign","D^{0} tot momentum Vs cquark tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  flistNoCutsSignal->Add(hdcaNCsign);
+  flistNoCutsSignal->Add(hcosthetastarNCsign);
+  flistNoCutsSignal->Add(hptD0NCsign);
+  flistNoCutsSignal->Add(hptD0VsMaxPtNCsign);
+  flistNoCutsSignal->Add(hptD0PTallsqrtNCsign);
+  flistNoCutsSignal->Add(hptD0PTallNCsign);
+  flistNoCutsSignal->Add(hptD0vsptBNCsign);
+  flistNoCutsSignal->Add(hpD0vspBNCsign);
+  flistNoCutsSignal->Add(hptD0vsptcquarkNCsign);
+  flistNoCutsSignal->Add(hpD0vspcquarkNCsign);
+
+  TH1F *hd0zD0ptNCsign;
+  TH1F *hInvMassD0NCsign,*hInvMassD0barNCsign;
+  TH2F *hInvMassPtNCsign=new TH2F("hInvMassPtNCsign","Candidate p_{t} Vs invariant mass",330,1.700,2.030,200,0.,20.);
+  flistNoCutsSignal->Add(hInvMassPtNCsign);
+  THnSparseF *hSparseNCsign=new THnSparseF("hSparseNCsign","Candidate Masses, pt, Imp Par;massD0;massD0bar;pt;impactpar;selcase",5,nbinsSparse);
+  hSparseNCsign->SetBinEdges(0,massbins);
+  hSparseNCsign->SetBinEdges(1,massbins);
+  hSparseNCsign->SetBinEdges(2,ptbinsForNsparse);
+  hSparseNCsign->SetBinEdges(3,impparbins);
+  hSparseNCsign->SetBinEdges(4,massHypoBins); 
+  flistNoCutsSignal->Add(hSparseNCsign);
+
+
+
+
+  THnSparseF *hSparseCxyLxyNCsign=new THnSparseF("hSparseCxyLxyNCsign","Candidate Mass;massD0;Pt;CosXY;Lxy",4,nbinsSparsCxyLxy,binLowLimitSparseCxyLxy,binUpLimitSparseCxyLxy);
+  hSparseCxyLxyNCsign->SetBinEdges(1,ptbinlimitsCxyLxy);
+  hSparseCxyLxyNCsign->GetAxis(0)->SetName("mass");
+  hSparseCxyLxyNCsign->GetAxis(0)->SetTitle("Invariant Mass (K#pi) [GeV/c^{2}]");
+  hSparseCxyLxyNCsign->GetAxis(1)->SetName("pt");
+  hSparseCxyLxyNCsign->GetAxis(1)->SetTitle("p_{t} [GeV/c]");
+  hSparseCxyLxyNCsign->GetAxis(2)->SetName("CosPointXY");
+  hSparseCxyLxyNCsign->GetAxis(2)->SetTitle("Cos#theta_{point}^{XY}");
+  hSparseCxyLxyNCsign->GetAxis(3)->SetName("NormDecLengthXY");
+  hSparseCxyLxyNCsign->GetAxis(3)->SetTitle("Normalized XY decay length");
+  
+  flistNoCutsSignal->Add(hSparseCxyLxyNCsign);
+
+  
+
+  TH1F *hetaNCsign;
+  TH1F *hCosPDPBNCsign;
+  TH1F *hCosPcPDNCsign;
+  // ADDITIONAL HISTOS
+  TH2F *hd0D0VSd0xd0NCsignpt;
+  TH2F *hangletracksVSd0xd0NCsignpt;
+  TH2F *hangletracksVSd0D0NCsignpt;
+  TH1F *hd0xd0NCsignpt;
+  // AZIMUHAL HISTOS
+  TH1F *hPhiHistPMNCsignpt,*hPhiHistSBNCsignpt;
+
+  
+  TH2F *hTOFpidNCsign=new TH2F("hTOFpidNCsign","TOF time VS momentum",10,0.,4.,50,-50000.,50000.);
+  flistNoCutsSignal->Add(hTOFpidNCsign);
+  
+
+  //##################
+  for(Int_t i=0;i<fnbins;i++){
+    //Printf("INSIDE HISTOS CREATION LOOP: %d \n",fnbins);
+    
+    namehist="hPhiHistPMNCsign_pt";
+    namehist+=i;
+    titlehist="Azimuthal correlation No Cuts Sign PM ptbin=";
+    titlehist+=i;
+    hPhiHistPMNCsignpt=new TH1F(namehist.Data(),titlehist.Data(),100,-3.15,3.15);
+    hPhiHistPMNCsignpt->Sumw2();
+    flistNoCutsSignal->Add(hPhiHistPMNCsignpt);
+
+    namehist="hPhiHistSBNCsign_pt";
+    namehist+=i;
+    titlehist="Azimuthal correlation No Cuts Sign SB ptbin=";
+    titlehist+=i;
+    hPhiHistSBNCsignpt=new TH1F(namehist.Data(),titlehist.Data(),100,-3.15,3.15);
+    hPhiHistSBNCsignpt->Sumw2();
+    flistNoCutsSignal->Add(hPhiHistSBNCsignpt);
+    
+
+    namehist="hd0zD0ptNCsign_pt";
+    namehist+=i;
+    titlehist="d0(z) No Cuts Signalm ptbin=";
+    titlehist+=i;
+    hd0zD0ptNCsign=new TH1F(namehist.Data(),titlehist.Data(),1000,-3000,3000.);
+    hd0zD0ptNCsign->SetXTitle("d_{0}(z)    [#mum]");
+    hd0zD0ptNCsign->SetYTitle("Entries");
+    flistNoCutsSignal->Add(hd0zD0ptNCsign);
+
+    namehist="hInvMassD0NCsign_pt";
+    namehist+=i;
+    titlehist="Invariant Mass D0 No Cuts Signal ptbin=";
+    titlehist+=i;
+    hInvMassD0NCsign=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
+    hInvMassD0NCsign->SetXTitle("Invariant Mass    [GeV]");
+    hInvMassD0NCsign->SetYTitle("Entries");
+    flistNoCutsSignal->Add(hInvMassD0NCsign);
+
+
+    namehist="hInvMassD0barNCsign_pt";
+    namehist+=i;
+    titlehist="Invariant Mass D0bar No Cuts Signal ptbin=";
+    titlehist+=i;
+    hInvMassD0barNCsign=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
+    hInvMassD0barNCsign->SetXTitle("Invariant Mass    [GeV]");
+    hInvMassD0barNCsign->SetYTitle("Entries");
+    flistNoCutsSignal->Add(hInvMassD0barNCsign);
+
+
+    namehist="hetaNCsign_pt";
+    namehist+=i;
+    titlehist="eta No Cuts Signal ptbin=";
+    titlehist+=i;
+    hetaNCsign=new TH1F(namehist.Data(),titlehist.Data(),100,-3.,3.);
+    hetaNCsign->SetXTitle("Pseudorapidity");
+    hetaNCsign->SetYTitle("Entries");
+    flistNoCutsSignal->Add(hetaNCsign);
+
+    namehist="hCosPDPBNCsign_pt";
+    namehist+=i;
+    titlehist="Cosine between D0 momentum and B momentum, ptbin=";
+    titlehist+=i;
+    hCosPDPBNCsign=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
+    hCosPDPBNCsign->SetXTitle("Cosine between D0 momentum and B momentum");
+    hCosPDPBNCsign->SetYTitle("Entries");
+    flistNoCutsSignal->Add(hCosPDPBNCsign);
+
+    namehist="hCosPcPDNCsign_pt";
+    namehist+=i;
+    titlehist="Cosine between cquark momentum and D0 momentum, ptbin=";
+    titlehist+=i;
+    hCosPcPDNCsign=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
+    hCosPcPDNCsign->SetXTitle("Cosine between c quark momentum and D0 momentum");
+    hCosPcPDNCsign->SetYTitle("Entries");
+    flistNoCutsSignal->Add(hCosPcPDNCsign);
+    
+
+    // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
+    namehist="hd0xd0NCsign_pt";
+    namehist+=i;
+    titlehist="d0xd0 No Cuts Signal ptbin=";
+    titlehist+=i;
+    hd0xd0NCsignpt=new TH1F(namehist.Data(),titlehist.Data(),1000,-50000.,10000.);
+    hd0xd0NCsignpt->SetXTitle("d_{0}^{K}xd_{0}^{#pi}   [#mum^2]");
+    hd0xd0NCsignpt->SetYTitle("Entries");
+    flistNoCutsSignal->Add(hd0xd0NCsignpt);
+
+
+    namehist="hd0D0VSd0xd0NCsign_pt";
+    namehist+=i;
+    titlehist="d_{0}^{D^{0}} Vs d_{0}^{K}xd_{0}^{#pi} No Cuts Signal ptbin=";
+    titlehist+=i;
+    hd0D0VSd0xd0NCsignpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,100,-300,300);
+    hd0D0VSd0xd0NCsignpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
+    hd0D0VSd0xd0NCsignpt->SetYTitle(" d_{0}^{D^{0}}    [#mum]");
+    flistNoCutsSignal->Add(hd0D0VSd0xd0NCsignpt);
+    
+    
+    namehist="hangletracksVSd0xd0NCsign_pt";
+    namehist+=i;
+    titlehist="Angle between K and #pi tracks Vs d_{0}^{K}xd_{0}^{#pi} No Cuts Signal ptbin=";
+    titlehist+=i;
+    hangletracksVSd0xd0NCsignpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,40,-0.1,3.24);
+    hangletracksVSd0xd0NCsignpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
+    hangletracksVSd0xd0NCsignpt->SetYTitle(" angle between K and #p tracks  [rad]");
+    flistNoCutsSignal->Add(hangletracksVSd0xd0NCsignpt);
+    
+
+    namehist="hangletracksVSd0D0NCsign_pt";
+    namehist+=i;
+    titlehist="Angle between K and #pi tracks Vs d_{0}^{D^{0}} No Cuts Signal ptbin=";
+    titlehist+=i;
+    hangletracksVSd0D0NCsignpt=new TH2F(namehist.Data(),titlehist.Data(),200,-400.,400.,40,-0.12,3.24);
+    hangletracksVSd0D0NCsignpt->SetXTitle(" d_{0}^{D^{0}} [#mum]");
+    hangletracksVSd0D0NCsignpt->SetYTitle(" angle between K and #p tracks  [rad]");
+    flistNoCutsSignal->Add(hangletracksVSd0D0NCsignpt);
+
+  }
+  Printf("AFTER LOOP HISTOS CREATION \n");
+  // %%%%%%%% END OF NEW HISTOS %%%%%%%%%%%%%
+  //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
   // ####### d0 D0 histos ############
   TH1F *hd0D0NCsignPM = new TH1F("hd0D0NCsignPM","D^{0} impact par. plot , No Cuts ,Signal,Mass Peak (All momenta)",1000,-1000.,1000.);
@@ -522,43 +984,46 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistNoCutsSignal->Add(hd0D0VtxTrueNCsignSB);
   flistNoCutsSignal->Add(hMCd0D0NCsignSB);
   
-  TH1F **hd0D0ptNCsignPM=new TH1F*[fnbins];
-  TH1F **hMCd0D0ptNCsignPM=new TH1F*[fnbins];
-  TH1F ** hd0D0VtxTrueptNCsignPM=new TH1F*[fnbins];
-  TH1F **hd0D0ptNCsignSB=new TH1F*[fnbins];
-  TH1F **hMCd0D0ptNCsignSB=new TH1F*[fnbins];
-  TH1F ** hd0D0VtxTrueptNCsignSB=new TH1F*[fnbins];
+  TH1F *hd0D0ptNCsignPM;
+  TH1F *hMCd0D0ptNCsignPM;
+  TH1F *hd0D0VtxTrueptNCsignPM;
+  TH1F *hd0D0ptNCsignSB;
+  TH1F *hMCd0D0ptNCsignSB;
+  TH1F *hd0D0VtxTrueptNCsignSB;
   namehist="hd0D0ptNCsign_";
   titlehist="D^{0} impact par. plot, No Cuts, Signal, ";
   for(Int_t i=0;i<fnbins;i++){
+    //Printf("IN HISTOS CREATION USING PTBINS VALUES for NAMES \n");
     strnamept=namehist;
     strnamept.Append("PkMss_pt");
     strnamept+=i;
 
     strtitlept=titlehist;
     strtitlept.Append(" Mass Peak, ");
+
     strtitlept+=fptbins[i];
+    //Printf("IN HISTOS CREATION USING PTBINS VALUES for NAMES %d: %f\n",i,fptbins[i]);
     strtitlept.Append("<= pt <");
     strtitlept+=fptbins[i+1];
     strtitlept.Append(" [GeV/c]");
     
-    hd0D0ptNCsignPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0ptNCsignPM[i]->SetXTitle("Impact parameter [#mum] ");
-    hd0D0ptNCsignPM[i]->SetYTitle("Entries");
-    flistNoCutsSignal->Add(hd0D0ptNCsignPM[i]);
+    hd0D0ptNCsignPM= new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0ptNCsignPM->SetXTitle("Impact parameter [#mum] ");
+    hd0D0ptNCsignPM->SetYTitle("Entries");
+    flistNoCutsSignal->Add(hd0D0ptNCsignPM);
 
     strnamept.ReplaceAll("hd0D0","hMCd0D0");
-    hMCd0D0ptNCsignPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hMCd0D0ptNCsignPM[i]->SetXTitle("MC Impact parameter [#mum] ");
-    hMCd0D0ptNCsignPM[i]->SetYTitle("Entries");
-    flistNoCutsSignal->Add(hMCd0D0ptNCsignPM[i]);
+    hMCd0D0ptNCsignPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hMCd0D0ptNCsignPM->SetXTitle("MC Impact parameter [#mum] ");
+    hMCd0D0ptNCsignPM->SetYTitle("Entries");
+    flistNoCutsSignal->Add(hMCd0D0ptNCsignPM);
  
 
     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
-    hd0D0VtxTrueptNCsignPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0VtxTrueptNCsignPM[i]->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
-    hd0D0VtxTrueptNCsignPM[i]->SetYTitle("Entries");
-    flistNoCutsSignal->Add(hd0D0VtxTrueptNCsignPM[i]);
+    hd0D0VtxTrueptNCsignPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0VtxTrueptNCsignPM->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
+    hd0D0VtxTrueptNCsignPM->SetYTitle("Entries");
+    flistNoCutsSignal->Add(hd0D0VtxTrueptNCsignPM);
     
     strnamept=namehist;
     strnamept.Append("SBMss_pt");
@@ -571,35 +1036,38 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
     strtitlept+=fptbins[i+1];
     strtitlept.Append(" [GeV/c]");
     
-    hd0D0ptNCsignSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0ptNCsignSB[i]->SetXTitle("Impact parameter [#mum] ");
-    hd0D0ptNCsignSB[i]->SetYTitle("Entries");
-    flistNoCutsSignal->Add(hd0D0ptNCsignSB[i]);
+    hd0D0ptNCsignSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0ptNCsignSB->SetXTitle("Impact parameter [#mum] ");
+    hd0D0ptNCsignSB->SetYTitle("Entries");
+    flistNoCutsSignal->Add(hd0D0ptNCsignSB);
 
     strnamept.ReplaceAll("hd0D0","hMCd0D0");
-    hMCd0D0ptNCsignSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hMCd0D0ptNCsignSB[i]->SetXTitle("MC Impact parameter [#mum] ");
-    hMCd0D0ptNCsignSB[i]->SetYTitle("Entries");
-    flistNoCutsSignal->Add(hMCd0D0ptNCsignSB[i]);
+    hMCd0D0ptNCsignSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hMCd0D0ptNCsignSB->SetXTitle("MC Impact parameter [#mum] ");
+    hMCd0D0ptNCsignSB->SetYTitle("Entries");
+    flistNoCutsSignal->Add(hMCd0D0ptNCsignSB);
 
     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
-    hd0D0VtxTrueptNCsignSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0VtxTrueptNCsignSB[i]->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
-    hd0D0VtxTrueptNCsignSB[i]->SetYTitle("Entries");
-    flistNoCutsSignal->Add(hd0D0VtxTrueptNCsignSB[i]);
+    hd0D0VtxTrueptNCsignSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0VtxTrueptNCsignSB->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
+    hd0D0VtxTrueptNCsignSB->SetYTitle("Entries");
+    flistNoCutsSignal->Add(hd0D0VtxTrueptNCsignSB);
   }
 
+  //Printf("AFTER SIGNAL HISTOS CREATION for NOCUTS\n");
+
 
   //############ NO CUTS BACKGROUND HISTOGRAMS ###########
   //
   //   ######## global properties histos #######
-  TH2F *hCPtaVSd0d0NCback=new TH2F("hCPtaVSd0d0NCback","hCPtaVSd0d0_NoCuts_Background",1000,-100000.,100000.,100,0.,1.);
+  TH2F *hCPtaVSd0d0NCback=new TH2F("hCPtaVSd0d0NCback","hCPtaVSd0d0_NoCuts_Background",1000,-100000.,100000.,100,-1.,1.);
   TH1F *hSecVtxZNCback=new TH1F("hSecVtxZNCback","hSecVtxZ_NoCuts_Background",1000,-8.,8.);
   TH1F *hSecVtxXNCback=new TH1F("hSecVtxXNCback","hSecVtxX_NoCuts_Background",1000,-3000.,3000.);
   TH1F *hSecVtxYNCback=new TH1F("hSecVtxYNCback","hSecVtxY_NoCuts_Background",1000,-3000.,3000.);
   TH2F *hSecVtxXYNCback=new TH2F("hSecVtxXYNCback","hSecVtxXY_NoCuts_Background",1000,-3000.,3000.,1000,-3000.,3000.);
   TH1F *hSecVtxPhiNCback=new TH1F("hSecVtxPhiNCback","hSecVtxPhi_NoCuts_Background",180,-180.1,180.1);
-  TH1F *hCPtaNCback=new TH1F("hCPtaNCback","hCPta_NoCuts_Background",100,0.,1.);
+  TH1F *hd0singlTrackNCback=new TH1F("hd0singlTrackNCback","hd0singlTrackNoCuts_Back",1000,-5000.,5000.);
+  TH1F *hCPtaNCback=new TH1F("hCPtaNCback","hCPta_NoCuts_Background",100,-1.,1.);
   TH1F *hd0xd0NCback=new TH1F("hd0xd0NCback","hd0xd0_NoCuts_Background",1000,-100000.,100000.);
   TH1F *hMassTrueNCback=new TH1F("hMassTrueNCback","D^{0} MC inv. Mass No Cuts Background(All momenta)",600,1.600,2.200);
   TH1F *hMassNCback=new TH1F("hMassNCback","D^{0} inv. Mass No Cuts Background (All momenta)",600,1.600,2.200);
@@ -617,6 +1085,7 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistNoCutsBack->Add(hSecVtxXNCback);
   flistNoCutsBack->Add(hSecVtxXYNCback);
   flistNoCutsBack->Add(hSecVtxPhiNCback);
+  flistNoCutsBack->Add(hd0singlTrackNCback);
   flistNoCutsBack->Add(hCPtaNCback);
   flistNoCutsBack->Add(hd0xd0NCback);
   flistNoCutsBack->Add(hMassTrueNCback);
@@ -627,6 +1096,164 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistNoCutsBack->Add(hMassNCbackSB);
 
 
+ //%%% NEW HISTOS %%%%%%%%%%%%%%%%
+  TH1F *hdcaNCback=new TH1F("hdcaNCback","hdca_NoCuts_Backgr",100,0.,1000.);
+  hdcaNCback->SetXTitle("dca   [#mum]");
+  hdcaNCback->SetYTitle("Entries");
+  TH1F *hcosthetastarNCback=new TH1F("hcosthetastarNCback","hCosThetaStar_NoCuts_Backgr",50,-1.,1.);
+  hcosthetastarNCback->SetXTitle("cos #theta^{*}");
+  hcosthetastarNCback->SetYTitle("Entries");
+  TH1F *hptD0NCback=new TH1F("hptD0NCback","D^{0} transverse momentum distribution",34,ptbinsD0arr);
+  hptD0NCback->SetXTitle("p_{t}  [GeV/c]");
+  hptD0NCback->SetYTitle("Entries");
+  TH1F *hptD0VsMaxPtNCback=new TH1F("hptD0VsMaxPtNCback","Difference between D^{0} pt and highest (or second) pt",400,-50.,50.);
+  TH2F *hptD0PTallsqrtNCback=new TH2F("hptD0PTallsqrtNCback","D^{0} pt Vs Sqrt(Sum pt square)",34,ptbinsD0arr,200,dumbinning);
+  TH2F *hptD0PTallNCback=new TH2F("hptD0PTallNCback","D^{0} pt Vs Sum pt ",34,ptbinsD0arr,200,dumbinning);
+  TH2F *hptD0vsptBNCback=new TH2F("hptD0vsptBNCback","D^{0} pt Vs B pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hpD0vspBNCback=new TH2F("hpD0vspBNCback","D^{0} tot momentum Vs B tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hptD0vsptcquarkNCback=new TH2F("hptD0vsptcquarkNCback","D^{0} pt Vs cquark pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hpD0vspcquarkNCback=new TH2F("hpD0vspcquarkNCback","D^{0} tot momentum Vs cquark tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  flistNoCutsBack->Add(hdcaNCback);
+  flistNoCutsBack->Add(hcosthetastarNCback);
+  flistNoCutsBack->Add(hptD0NCback);
+  flistNoCutsBack->Add(hptD0VsMaxPtNCback);
+  flistNoCutsBack->Add(hptD0PTallsqrtNCback);
+  flistNoCutsBack->Add(hptD0PTallNCback);
+  flistNoCutsBack->Add(hptD0vsptBNCback);
+  flistNoCutsBack->Add(hpD0vspBNCback);
+  flistNoCutsBack->Add(hptD0vsptcquarkNCback);
+  flistNoCutsBack->Add(hpD0vspcquarkNCback);
+  TH1F *hd0zD0ptNCback;
+  TH1F *hInvMassD0NCback,*hInvMassD0barNCback;
+  TH2F *hInvMassPtNCback=new TH2F("hInvMassPtNCback","Candidate p_{t} Vs invariant mass",330,1.700,2.030,200,0.,20.);
+  THnSparseF *hSparseNCback=new THnSparseF("hSparseNCback","Candidate Masses, pt, Imp Par;massD0;massD0bar;pt;impactpar;selcase",5,nbinsSparse);
+  hSparseNCback->SetBinEdges(0,massbins);
+  hSparseNCback->SetBinEdges(1,massbins);
+  hSparseNCback->SetBinEdges(2,ptbinsForNsparse);
+  hSparseNCback->SetBinEdges(3,impparbins);
+  hSparseNCback->SetBinEdges(4,massHypoBins); 
+  flistNoCutsBack->Add(hSparseNCback);
+
+  TH1F *hetaNCback;
+  TH1F *hCosPDPBNCback;
+  TH1F *hCosPcPDNCback;
+   // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
+  TH2F *hd0D0VSd0xd0NCbackpt;
+  TH2F *hangletracksVSd0xd0NCbackpt;
+  TH2F *hangletracksVSd0D0NCbackpt;
+  TH1F *hd0xd0NCbackpt;
+  flistNoCutsBack->Add(hInvMassPtNCback);
+
+  TH2F *hTOFpidNCback=new TH2F("hTOFpidNCback","TOF time VS momentum",10,0.,4.,50,-50000.,50000.);
+  flistNoCutsBack->Add(hTOFpidNCback);
+
+  for(Int_t i=0;i<fnbins;i++){
+    namehist="hd0zD0ptNCback_pt";
+    namehist+=i;
+    titlehist="d0(z) No Cuts Backgrm ptbin=";
+    titlehist+=i;
+    hd0zD0ptNCback=new TH1F(namehist.Data(),titlehist.Data(),1000,-3000,3000.);
+    hd0zD0ptNCback->SetXTitle("d_{0}(z)    [#mum]");
+    hd0zD0ptNCback->SetYTitle("Entries");
+    flistNoCutsBack->Add(hd0zD0ptNCback);
+
+    namehist="hInvMassD0NCback_pt";
+    namehist+=i;
+    titlehist="Invariant Mass No Cuts Backgr ptbin=";
+    titlehist+=i;
+    hInvMassD0NCback=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
+    hInvMassD0NCback->SetXTitle("Invariant Mass    [GeV]");
+    hInvMassD0NCback->SetYTitle("Entries");
+    flistNoCutsBack->Add(hInvMassD0NCback);
+
+    
+    namehist="hInvMassD0barNCback_pt";
+    namehist+=i;
+    titlehist="Invariant Mass D0bar No Cuts Back ptbin=";
+    titlehist+=i;
+    hInvMassD0barNCback=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
+    hInvMassD0barNCback->SetXTitle("Invariant Mass    [GeV]");
+    hInvMassD0barNCback->SetYTitle("Entries");
+    flistNoCutsBack->Add(hInvMassD0barNCback);
+
+
+    namehist="hetaNCback_pt";
+    namehist+=i;
+    titlehist="eta No Cuts Backgr ptbin=";
+    titlehist+=i;
+    hetaNCback=new TH1F(namehist.Data(),titlehist.Data(),100,-3.,3.);
+    hetaNCback->SetXTitle("Pseudorapidity");
+    hetaNCback->SetYTitle("Entries");
+    flistNoCutsBack->Add(hetaNCback);
+
+    namehist="hCosPDPBNCback_pt";
+    namehist+=i;
+    titlehist="Cosine between D0 momentum and B momentum, ptbin=";
+    titlehist+=i;
+    hCosPDPBNCback=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
+    hCosPDPBNCback->SetXTitle("Cosine between D0 momentum and B momentum");
+    hCosPDPBNCback->SetYTitle("Entries");
+    flistNoCutsBack->Add(hCosPDPBNCback);
+
+    namehist="hCosPcPDNCback_pt";
+    namehist+=i;
+    titlehist="Cosine between cquark momentum and D0 momentum, ptbin=";
+    titlehist+=i;
+    hCosPcPDNCback=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
+    hCosPcPDNCback->SetXTitle("Cosine between c quark momentum and D0 momentum");
+    hCosPcPDNCback->SetYTitle("Entries");
+    flistNoCutsBack->Add(hCosPcPDNCback);
+
+
+    // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
+    namehist="hd0xd0NCback_pt";
+    namehist+=i;
+    titlehist="d0xd0 No Cuts Background ptbin=";
+    titlehist+=i;
+    hd0xd0NCbackpt=new TH1F(namehist.Data(),titlehist.Data(),1000,-50000.,10000.);
+    hd0xd0NCbackpt->SetXTitle("d_{0}^{K}xd_{0}^{#pi}   [#mum^2]");
+    hd0xd0NCbackpt->SetYTitle("Entries");
+    flistNoCutsBack->Add(hd0xd0NCbackpt);
+
+
+    namehist="hd0D0VSd0xd0NCback_pt";
+    namehist+=i;
+    titlehist="d_{0}^{D^{0}} Vs d_{0}^{K}xd_{0}^{#pi} No Cuts Back ptbin=";
+    titlehist+=i;
+    hd0D0VSd0xd0NCbackpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,100,-300,300);
+    hd0D0VSd0xd0NCbackpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
+    hd0D0VSd0xd0NCbackpt->SetYTitle(" d_{0}^{D^{0}}    [#mum]");
+    flistNoCutsBack->Add(hd0D0VSd0xd0NCbackpt);
+    
+    
+    namehist="hangletracksVSd0xd0NCback_pt";
+    namehist+=i;
+    titlehist="Angle between K and #pi tracks Vs d_{0}^{K}xd_{0}^{#pi} No Cuts Back ptbin=";
+    titlehist+=i;
+    hangletracksVSd0xd0NCbackpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,40,-0.1,3.24);
+    hangletracksVSd0xd0NCbackpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
+    hangletracksVSd0xd0NCbackpt->SetYTitle(" angle between K and #p tracks  [rad]");
+    flistNoCutsBack->Add(hangletracksVSd0xd0NCbackpt);
+    
+
+    namehist="hangletracksVSd0D0NCback_pt";
+    namehist+=i;
+    titlehist="Angle between K and #pi tracks Vs d_{0}^{D^{0}} No Cuts Back ptbin=";
+    titlehist+=i;
+    hangletracksVSd0D0NCbackpt=new TH2F(namehist.Data(),titlehist.Data(),200,-400.,400.,40,-0.12,3.24);
+    hangletracksVSd0D0NCbackpt->SetXTitle(" d_{0}^{D^{0}} [#mum]");
+    hangletracksVSd0D0NCbackpt->SetYTitle(" angle between K and #p tracks  [rad]");
+    flistNoCutsBack->Add(hangletracksVSd0D0NCbackpt);
+
+
+    
+  }
+  // %%%%%%%% END OF NEW HISTOS %%%%%%%%%%%%%
+  //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
   // ####### d0 D0 histos ############
   
  TH1F *hd0D0NCbackPM = new TH1F("hd0D0NCbackPM","D^{0} impact par. plot , No Cuts ,Background,Mass Peak (All momenta)",1000,-1000.,1000.);
@@ -660,12 +1287,12 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistNoCutsBack->Add(hd0D0VtxTrueNCbackSB);
   flistNoCutsBack->Add(hMCd0D0NCbackSB);
   
-  TH1F **hd0D0ptNCbackPM=new TH1F*[fnbins];
-  TH1F **hMCd0D0ptNCbackPM=new TH1F*[fnbins];
-  TH1F ** hd0D0VtxTrueptNCbackPM=new TH1F*[fnbins];
-  TH1F **hd0D0ptNCbackSB=new TH1F*[fnbins];
-  TH1F **hMCd0D0ptNCbackSB=new TH1F*[fnbins];
-  TH1F ** hd0D0VtxTrueptNCbackSB=new TH1F*[fnbins];
+  TH1F *hd0D0ptNCbackPM;
+  TH1F *hMCd0D0ptNCbackPM;
+  TH1F *hd0D0VtxTrueptNCbackPM;
+  TH1F *hd0D0ptNCbackSB;
+  TH1F *hMCd0D0ptNCbackSB;
+  TH1F *hd0D0VtxTrueptNCbackSB;
   namehist="hd0D0ptNCback_";
   titlehist="D^{0} impact par. plot, No Cuts, Background, ";
   for(Int_t i=0;i<fnbins;i++){
@@ -680,23 +1307,23 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
     strtitlept+=fptbins[i+1];
     strtitlept.Append(" [GeV/c]");
     
-    hd0D0ptNCbackPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0ptNCbackPM[i]->SetXTitle("Impact parameter [#mum] ");
-    hd0D0ptNCbackPM[i]->SetYTitle("Entries");
-    flistNoCutsBack->Add(hd0D0ptNCbackPM[i]);
+    hd0D0ptNCbackPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0ptNCbackPM->SetXTitle("Impact parameter [#mum] ");
+    hd0D0ptNCbackPM->SetYTitle("Entries");
+    flistNoCutsBack->Add(hd0D0ptNCbackPM);
 
     strnamept.ReplaceAll("hd0D0","hMCd0D0");
-    hMCd0D0ptNCbackPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hMCd0D0ptNCbackPM[i]->SetXTitle("MC Impact parameter [#mum] ");
-    hMCd0D0ptNCbackPM[i]->SetYTitle("Entries");
-    flistNoCutsBack->Add(hMCd0D0ptNCbackPM[i]);
+    hMCd0D0ptNCbackPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hMCd0D0ptNCbackPM->SetXTitle("MC Impact parameter [#mum] ");
+    hMCd0D0ptNCbackPM->SetYTitle("Entries");
+    flistNoCutsBack->Add(hMCd0D0ptNCbackPM);
  
 
     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
-    hd0D0VtxTrueptNCbackPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0VtxTrueptNCbackPM[i]->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
-    hd0D0VtxTrueptNCbackPM[i]->SetYTitle("Entries");
-    flistNoCutsBack->Add(hd0D0VtxTrueptNCbackPM[i]);
+    hd0D0VtxTrueptNCbackPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0VtxTrueptNCbackPM->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
+    hd0D0VtxTrueptNCbackPM->SetYTitle("Entries");
+    flistNoCutsBack->Add(hd0D0VtxTrueptNCbackPM);
     
     strnamept=namehist;
     strnamept.Append("SBMss_pt");
@@ -709,22 +1336,22 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
     strtitlept+=fptbins[i+1];
     strtitlept.Append(" [GeV/c]");
     
-    hd0D0ptNCbackSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0ptNCbackSB[i]->SetXTitle("Impact parameter [#mum] ");
-    hd0D0ptNCbackSB[i]->SetYTitle("Entries");
-    flistNoCutsBack->Add(hd0D0ptNCbackSB[i]);
+    hd0D0ptNCbackSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0ptNCbackSB->SetXTitle("Impact parameter [#mum] ");
+    hd0D0ptNCbackSB->SetYTitle("Entries");
+    flistNoCutsBack->Add(hd0D0ptNCbackSB);
 
     strnamept.ReplaceAll("hd0D0","hMCd0D0");
-    hMCd0D0ptNCbackSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hMCd0D0ptNCbackSB[i]->SetXTitle("MC Impact parameter [#mum] ");
-    hMCd0D0ptNCbackSB[i]->SetYTitle("Entries");
-    flistNoCutsBack->Add(hMCd0D0ptNCbackSB[i]);
+    hMCd0D0ptNCbackSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hMCd0D0ptNCbackSB->SetXTitle("MC Impact parameter [#mum] ");
+    hMCd0D0ptNCbackSB->SetYTitle("Entries");
+    flistNoCutsBack->Add(hMCd0D0ptNCbackSB);
 
     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
-    hd0D0VtxTrueptNCbackSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0VtxTrueptNCbackSB[i]->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
-    hd0D0VtxTrueptNCbackSB[i]->SetYTitle("Entries");
-    flistNoCutsBack->Add(hd0D0VtxTrueptNCbackSB[i]);
+    hd0D0VtxTrueptNCbackSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0VtxTrueptNCbackSB->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
+    hd0D0VtxTrueptNCbackSB->SetYTitle("Entries");
+    flistNoCutsBack->Add(hd0D0VtxTrueptNCbackSB);
   }
 
 
@@ -733,13 +1360,14 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   //
   //#######  global properties histos
 
-  TH2F *hCPtaVSd0d0NCfromB=new TH2F("hCPtaVSd0d0NCfromB","hCPtaVSd0d0_NoCuts_FromB",1000,-100000.,100000.,100,0.,1.);
+  TH2F *hCPtaVSd0d0NCfromB=new TH2F("hCPtaVSd0d0NCfromB","hCPtaVSd0d0_NoCuts_FromB",1000,-100000.,100000.,100,-1.,1.);
   TH1F *hSecVtxZNCfromB=new TH1F("hSecVtxZNCfromB","hSecVtxZ_NoCuts_FromB",1000,-8.,8.);
   TH1F *hSecVtxXNCfromB=new TH1F("hSecVtxXNCfromB","hSecVtxX_NoCuts_FromB",1000,-3000.,3000.);
   TH1F *hSecVtxYNCfromB=new TH1F("hSecVtxYNCfromB","hSecVtxY_NoCuts_FromB",1000,-3000.,3000.);
   TH2F *hSecVtxXYNCfromB=new TH2F("hSecVtxXYNCfromB","hSecVtxXY_NoCuts_FromB",1000,-3000.,3000.,1000,-3000.,3000.);
   TH1F *hSecVtxPhiNCfromB=new TH1F("hSecVtxPhiNCfromB","hSecVtxPhi_NoCuts_FromB",180,-180.1,180.1);
-  TH1F *hCPtaNCfromB=new TH1F("hCPtaNCfromB","hCPta_NoCuts_FromB",100,0.,1.);
+  TH1F *hd0singlTrackNCfromB=new TH1F("hd0singlTrackNCfromB","hd0singlTrackNoCuts_FromB",1000,-5000.,5000.);
+  TH1F *hCPtaNCfromB=new TH1F("hCPtaNCfromB","hCPta_NoCuts_FromB",100,-1.,1.);
   TH1F *hd0xd0NCfromB=new TH1F("hd0xd0NCfromB","hd0xd0_NoCuts_FromB",1000,-100000.,100000.);
   TH1F *hMassTrueNCfromB=new TH1F("hMassTrueNCfromB","D^{0} MC inv. Mass No Cuts FromB(All momenta)",600,1.600,2.200);
   TH1F *hMassNCfromB=new TH1F("hMassNCfromB","D^{0} inv. Mass No Cuts FromB (All momenta)",600,1.600,2.200);
@@ -757,6 +1385,7 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistNoCutsFromB->Add(hSecVtxXNCfromB);
   flistNoCutsFromB->Add(hSecVtxXYNCfromB);
   flistNoCutsFromB->Add(hSecVtxPhiNCfromB);
+  flistNoCutsFromB->Add(hd0singlTrackNCfromB);
   flistNoCutsFromB->Add(hCPtaNCfromB);
   flistNoCutsFromB->Add(hd0xd0NCfromB);
   flistNoCutsFromB->Add(hMassTrueNCfromB);
@@ -766,6 +1395,179 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistNoCutsFromB->Add(hMassTrueNCfromBSB);
   flistNoCutsFromB->Add(hMassNCfromBSB);
 
+
+
+
+
+ //%%% NEW HISTOS %%%%%%%%%%%%%%%%
+  TH1F *hdcaNCfromB=new TH1F("hdcaNCfromB","hdca_NoCuts_FromB",100,0.,1000.);
+  hdcaNCfromB->SetXTitle("dca   [#mum]");
+  hdcaNCfromB->SetYTitle("Entries");
+  TH1F *hcosthetastarNCfromB=new TH1F("hcosthetastarNCfromB","hCosThetaStar_NoCuts_FromB",50,-1.,1.);
+  hcosthetastarNCfromB->SetXTitle("cos #theta^{*}");
+  hcosthetastarNCfromB->SetYTitle("Entries");
+  TH1F *hptD0NCfromB=new TH1F("hptD0NCfromB","D^{0} transverse momentum distribution",34,ptbinsD0arr);
+  hptD0NCfromB->SetXTitle("p_{t}  [GeV/c]");
+  hptD0NCfromB->SetYTitle("Entries");
+  TH1F *hptD0VsMaxPtNCfromB=new TH1F("hptD0VsMaxPtNCfromB","Difference between D^{0} pt and highest (or second) pt",400,-50.,50.);
+  TH2F *hptD0PTallsqrtNCfromB=new TH2F("hptD0PTallsqrtNCfromB","D^{0} pt Vs Sqrt(Sum pt square)",34,ptbinsD0arr,200,dumbinning);
+  TH2F *hptD0PTallNCfromB=new TH2F("hptD0PTallNCfromB","D^{0} pt Vs Sum pt ",34,ptbinsD0arr,200,dumbinning);
+  TH2F *hptD0vsptBNCfromB=new TH2F("hptD0vsptBNCfromB","D^{0} pt Vs B pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hpD0vspBNCfromB=new TH2F("hpD0vspBNCfromB","D^{0} tot momentum Vs B tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hptD0vsptcquarkNCfromB=new TH2F("hptD0vsptcquarkNCfromB","D^{0} pt Vs cquark pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hpD0vspcquarkNCfromB=new TH2F("hpD0vspcquarkNCfromB","D^{0} tot momentum Vs cquark tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  flistNoCutsFromB->Add(hdcaNCfromB);
+  flistNoCutsFromB->Add(hcosthetastarNCfromB);
+  flistNoCutsFromB->Add(hptD0NCfromB);
+  flistNoCutsFromB->Add(hptD0VsMaxPtNCfromB);
+  flistNoCutsFromB->Add(hptD0PTallsqrtNCfromB);
+  flistNoCutsFromB->Add(hptD0PTallNCfromB);
+  flistNoCutsFromB->Add(hptD0vsptBNCfromB);
+  flistNoCutsFromB->Add(hpD0vspBNCfromB);
+  flistNoCutsFromB->Add(hptD0vsptcquarkNCfromB);
+  flistNoCutsFromB->Add(hpD0vspcquarkNCfromB);
+  TH1F *hd0zD0ptNCfromB;
+  TH1F *hInvMassD0NCfromB,*hInvMassD0barNCfromB;
+  TH2F *hInvMassPtNCfromB=new TH2F("hInvMassPtNCfromB","Candidate p_{t} Vs invariant mass",330,1.700,2.030,200,0.,20.);
+  THnSparseF *hSparseNCfromB=new THnSparseF("hSparseNCfromB","Candidate Masses, pt, Imp Par;massD0;massD0bar;pt;impactpar;selcase",5,nbinsSparse);
+  hSparseNCfromB->SetBinEdges(0,massbins);
+  hSparseNCfromB->SetBinEdges(1,massbins);
+  hSparseNCfromB->SetBinEdges(2,ptbinsForNsparse);
+  hSparseNCfromB->SetBinEdges(3,impparbins);
+  hSparseNCfromB->SetBinEdges(4,massHypoBins); 
+  flistNoCutsFromB->Add(hSparseNCfromB);
+
+
+
+  THnSparseF *hSparseRecoNCfromB=new THnSparseF("hSparseRecoNCfromB","Candidate Masses, pt, Imp Par;massD0;massD0bar;pt;impactpar;selcase",5,nbinsSparse);
+  hSparseRecoNCfromB->SetBinEdges(0,massbins);
+  hSparseRecoNCfromB->SetBinEdges(1,massbins);
+  hSparseRecoNCfromB->SetBinEdges(2,ptbinsForNsparse);
+  hSparseRecoNCfromB->SetBinEdges(3,impparbins);
+  hSparseRecoNCfromB->SetBinEdges(4,massHypoBins); 
+  flistNoCutsFromB->Add(hSparseRecoNCfromB);
+
+
+  TH1F *hetaNCfromB;
+  TH1F *hCosPDPBNCfromB;
+  TH1F *hCosPcPDNCfromB;
+
+   // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
+  TH2F *hd0D0VSd0xd0NCfromBpt;
+  TH2F *hangletracksVSd0xd0NCfromBpt;
+  TH2F *hangletracksVSd0D0NCfromBpt;
+  TH1F *hd0xd0NCfromBpt;
+  flistNoCutsFromB->Add(hInvMassPtNCfromB);
+
+  TH2F *hTOFpidNCfromB=new TH2F("hTOFpidNCfromB","TOF time VS momentum",10,0.,4.,50,-50000.,50000.);
+  flistNoCutsFromB->Add(hTOFpidNCfromB);
+
+  for(Int_t i=0;i<fnbins;i++){
+    namehist="hd0zD0ptNCfromB_pt";
+    namehist+=i;
+    titlehist="d0(z) No Cuts FromB ptbin=";
+    titlehist+=i;
+    hd0zD0ptNCfromB=new TH1F(namehist.Data(),titlehist.Data(),1000,-3000,3000.);
+    hd0zD0ptNCfromB->SetXTitle("d_{0}(z)    [#mum]");
+    hd0zD0ptNCfromB->SetYTitle("Entries");
+    flistNoCutsFromB->Add(hd0zD0ptNCfromB);
+
+    namehist="hInvMassD0NCfromB_pt";
+    namehist+=i;
+    titlehist="Invariant Mass No Cuts FromB ptbin=";
+    titlehist+=i;
+    hInvMassD0NCfromB=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
+    hInvMassD0NCfromB->SetXTitle("Invariant Mass    [GeV]");
+    hInvMassD0NCfromB->SetYTitle("Entries");
+    flistNoCutsFromB->Add(hInvMassD0NCfromB);
+
+
+    namehist="hInvMassD0barNCfromB_pt";
+    namehist+=i;
+    titlehist="Invariant Mass D0bar No Cuts FromB ptbin=";
+    titlehist+=i;
+    hInvMassD0barNCfromB=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
+    hInvMassD0barNCfromB->SetXTitle("Invariant Mass    [GeV]");
+    hInvMassD0barNCfromB->SetYTitle("Entries");
+    flistNoCutsFromB->Add(hInvMassD0barNCfromB);
+
+
+
+    namehist="hetaNCfromB_pt";
+    namehist+=i;
+    titlehist="eta No Cuts FromB ptbin=";
+    titlehist+=i;
+    hetaNCfromB=new TH1F(namehist.Data(),titlehist.Data(),100,-3.,3.);
+    hetaNCfromB->SetXTitle("Pseudorapidity");
+    hetaNCfromB->SetYTitle("Entries");
+    flistNoCutsFromB->Add(hetaNCfromB);
+
+    namehist="hCosPDPBNCfromB_pt";
+    namehist+=i;
+    titlehist="Cosine between D0 momentum and B momentum, ptbin=";
+    titlehist+=i;
+    hCosPDPBNCfromB=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
+    hCosPDPBNCfromB->SetXTitle("Cosine between D0 momentum and B momentum");
+    hCosPDPBNCfromB->SetYTitle("Entries");
+    flistNoCutsFromB->Add(hCosPDPBNCfromB);
+
+    namehist="hCosPcPDNCfromB_pt";
+    namehist+=i;
+    titlehist="Cosine between cquark momentum and D0 momentum, ptbin=";
+    titlehist+=i;
+    hCosPcPDNCfromB=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
+    hCosPcPDNCfromB->SetXTitle("Cosine between c quark momentum and D0 momentum");
+    hCosPcPDNCfromB->SetYTitle("Entries");
+    flistNoCutsFromB->Add(hCosPcPDNCfromB);
+
+// %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
+    namehist="hd0xd0NCfromB_pt";
+    namehist+=i;
+    titlehist="d0xd0 No Cuts FromB ptbin=";
+    titlehist+=i;
+    hd0xd0NCfromBpt=new TH1F(namehist.Data(),titlehist.Data(),1000,-50000.,10000.);
+    hd0xd0NCfromBpt->SetXTitle("d_{0}^{K}xd_{0}^{#pi}   [#mum^2]");
+    hd0xd0NCfromBpt->SetYTitle("Entries");
+    flistNoCutsFromB->Add(hd0xd0NCfromBpt);
+
+
+    namehist="hd0D0VSd0xd0NCfromB_pt";
+    namehist+=i;
+    titlehist="d_{0}^{D^{0}} Vs d_{0}^{K}xd_{0}^{#pi} No Cuts FromB ptbin=";
+    titlehist+=i;
+    hd0D0VSd0xd0NCfromBpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,100,-300,300);
+    hd0D0VSd0xd0NCfromBpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
+    hd0D0VSd0xd0NCfromBpt->SetYTitle(" d_{0}^{D^{0}}    [#mum]");
+    flistNoCutsFromB->Add(hd0D0VSd0xd0NCfromBpt);
+    
+    
+    namehist="hangletracksVSd0xd0NCfromB_pt";
+    namehist+=i;
+    titlehist="Angle between K and #pi tracks Vs d_{0}^{K}xd_{0}^{#pi} No Cuts FromB ptbin=";
+    titlehist+=i;
+    hangletracksVSd0xd0NCfromBpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,40,-0.1,3.24);
+    hangletracksVSd0xd0NCfromBpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
+    hangletracksVSd0xd0NCfromBpt->SetYTitle(" angle between K and #p tracks  [rad]");
+    flistNoCutsFromB->Add(hangletracksVSd0xd0NCfromBpt);
+    
+
+    namehist="hangletracksVSd0D0NCfromB_pt";
+    namehist+=i;
+    titlehist="Angle between K and #pi tracks Vs d_{0}^{D^{0}} No Cuts FromB ptbin=";
+    titlehist+=i;
+    hangletracksVSd0D0NCfromBpt=new TH2F(namehist.Data(),titlehist.Data(),200,-400.,400.,40,-0.12,3.24);
+    hangletracksVSd0D0NCfromBpt->SetXTitle(" d_{0}^{D^{0}} [#mum]");
+    hangletracksVSd0D0NCfromBpt->SetYTitle(" angle between K and #p tracks  [rad]");
+    flistNoCutsFromB->Add(hangletracksVSd0D0NCfromBpt);
+
+    
+  }
+  // %%%%%%%% END OF NEW HISTOS %%%%%%%%%%%%%
+  //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
   // ######### d0 D0 histos ##############
   TH1F *hd0D0NCfromBPM = new TH1F("hd0D0NCfromBPM","D^{0} impact par. plot , No Cuts ,FromB,Mass Peak (All momenta)",1000,-1000.,1000.);
   hd0D0NCfromBPM->SetXTitle("Impact parameter [#mum]");
@@ -798,12 +1600,12 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistNoCutsFromB->Add(hd0D0VtxTrueNCfromBSB);
   flistNoCutsFromB->Add(hMCd0D0NCfromBSB);
   
-  TH1F **hd0D0ptNCfromBPM=new TH1F*[fnbins];
-  TH1F **hMCd0D0ptNCfromBPM=new TH1F*[fnbins];
-  TH1F ** hd0D0VtxTrueptNCfromBPM=new TH1F*[fnbins];
-  TH1F **hd0D0ptNCfromBSB=new TH1F*[fnbins];
-  TH1F **hMCd0D0ptNCfromBSB=new TH1F*[fnbins];
-  TH1F ** hd0D0VtxTrueptNCfromBSB=new TH1F*[fnbins];
+  TH1F *hd0D0ptNCfromBPM;
+  TH1F *hMCd0D0ptNCfromBPM;
+  TH1F *hd0D0VtxTrueptNCfromBPM;
+  TH1F *hd0D0ptNCfromBSB;
+  TH1F *hMCd0D0ptNCfromBSB;
+  TH1F *hd0D0VtxTrueptNCfromBSB;
   namehist="hd0D0ptNCfromB_";
   titlehist="D^{0} impact par. plot, No Cuts, FromB, ";
   for(Int_t i=0;i<fnbins;i++){
@@ -818,23 +1620,23 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
     strtitlept+=fptbins[i+1];
     strtitlept.Append(" [GeV/c]");
     
-    hd0D0ptNCfromBPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0ptNCfromBPM[i]->SetXTitle("Impact parameter [#mum] ");
-    hd0D0ptNCfromBPM[i]->SetYTitle("Entries");
-    flistNoCutsFromB->Add(hd0D0ptNCfromBPM[i]);
+    hd0D0ptNCfromBPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0ptNCfromBPM->SetXTitle("Impact parameter [#mum] ");
+    hd0D0ptNCfromBPM->SetYTitle("Entries");
+    flistNoCutsFromB->Add(hd0D0ptNCfromBPM);
 
     strnamept.ReplaceAll("hd0D0","hMCd0D0");
-    hMCd0D0ptNCfromBPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hMCd0D0ptNCfromBPM[i]->SetXTitle("MC Impact parameter [#mum] ");
-    hMCd0D0ptNCfromBPM[i]->SetYTitle("Entries");
-    flistNoCutsFromB->Add(hMCd0D0ptNCfromBPM[i]);
+    hMCd0D0ptNCfromBPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hMCd0D0ptNCfromBPM->SetXTitle("MC Impact parameter [#mum] ");
+    hMCd0D0ptNCfromBPM->SetYTitle("Entries");
+    flistNoCutsFromB->Add(hMCd0D0ptNCfromBPM);
  
 
     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
-    hd0D0VtxTrueptNCfromBPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0VtxTrueptNCfromBPM[i]->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
-    hd0D0VtxTrueptNCfromBPM[i]->SetYTitle("Entries");
-    flistNoCutsFromB->Add(hd0D0VtxTrueptNCfromBPM[i]);
+    hd0D0VtxTrueptNCfromBPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0VtxTrueptNCfromBPM->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
+    hd0D0VtxTrueptNCfromBPM->SetYTitle("Entries");
+    flistNoCutsFromB->Add(hd0D0VtxTrueptNCfromBPM);
     
     strnamept=namehist;
     strnamept.Append("SBMss_pt");
@@ -847,22 +1649,22 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
     strtitlept+=fptbins[i+1];
     strtitlept.Append(" [GeV/c]");
     
-    hd0D0ptNCfromBSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0ptNCfromBSB[i]->SetXTitle("Impact parameter [#mum] ");
-    hd0D0ptNCfromBSB[i]->SetYTitle("Entries");
-    flistNoCutsFromB->Add(hd0D0ptNCfromBSB[i]);
+    hd0D0ptNCfromBSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0ptNCfromBSB->SetXTitle("Impact parameter [#mum] ");
+    hd0D0ptNCfromBSB->SetYTitle("Entries");
+    flistNoCutsFromB->Add(hd0D0ptNCfromBSB);
 
     strnamept.ReplaceAll("hd0D0","hMCd0D0");
-    hMCd0D0ptNCfromBSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hMCd0D0ptNCfromBSB[i]->SetXTitle("MC Impact parameter [#mum] ");
-    hMCd0D0ptNCfromBSB[i]->SetYTitle("Entries");
-    flistNoCutsFromB->Add(hMCd0D0ptNCfromBSB[i]);
+    hMCd0D0ptNCfromBSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hMCd0D0ptNCfromBSB->SetXTitle("MC Impact parameter [#mum] ");
+    hMCd0D0ptNCfromBSB->SetYTitle("Entries");
+    flistNoCutsFromB->Add(hMCd0D0ptNCfromBSB);
 
     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
-    hd0D0VtxTrueptNCfromBSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0VtxTrueptNCfromBSB[i]->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
-    hd0D0VtxTrueptNCfromBSB[i]->SetYTitle("Entries");
-    flistNoCutsFromB->Add(hd0D0VtxTrueptNCfromBSB[i]);
+    hd0D0VtxTrueptNCfromBSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0VtxTrueptNCfromBSB->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
+    hd0D0VtxTrueptNCfromBSB->SetYTitle("Entries");
+    flistNoCutsFromB->Add(hd0D0VtxTrueptNCfromBSB);
   }
 
 
@@ -871,13 +1673,14 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   //
   //#############  global properties histos #######
 
-  TH2F *hCPtaVSd0d0NCfromDstar=new TH2F("hCPtaVSd0d0NCfromDstar","hCPtaVSd0d0_NoCuts_FromDStar",1000,-100000.,100000.,100,0.,1.);
+  TH2F *hCPtaVSd0d0NCfromDstar=new TH2F("hCPtaVSd0d0NCfromDstar","hCPtaVSd0d0_NoCuts_FromDStar",1000,-100000.,100000.,100,-1.,1.);
   TH1F *hSecVtxZNCfromDstar=new TH1F("hSecVtxZNCfromDstar","hSecVtxZ_NoCuts_FromDStar",1000,-8.,8.);
   TH1F *hSecVtxXNCfromDstar=new TH1F("hSecVtxXNCfromDstar","hSecVtxX_NoCuts_FromDStar",1000,-3000.,3000.);
   TH1F *hSecVtxYNCfromDstar=new TH1F("hSecVtxYNCfromDstar","hSecVtxY_NoCuts_FromDStar",1000,-3000.,3000.);
   TH2F *hSecVtxXYNCfromDstar=new TH2F("hSecVtxXYNCfromDstar","hSecVtxXY_NoCuts_FromDStar",1000,-3000.,3000.,1000,-3000.,3000.);
   TH1F *hSecVtxPhiNCfromDstar=new TH1F("hSecVtxPhiNCfromDstar","hSecVtxPhi_NoCuts_FromDStar",180,-180.1,180.1);
-  TH1F *hCPtaNCfromDstar=new TH1F("hCPtaNCfromDstar","hCPta_NoCuts_FromDStar",100,0.,1.);
+  TH1F *hd0singlTrackNCfromDstar=new TH1F("hd0singlTrackNCfromDstar","hd0singlTrackNoCuts_fromDstar",1000,-5000.,5000.);
+  TH1F *hCPtaNCfromDstar=new TH1F("hCPtaNCfromDstar","hCPta_NoCuts_FromDStar",100,-1.,1.);
   TH1F *hd0xd0NCfromDstar=new TH1F("hd0xd0NCfromDstar","hd0xd0_NoCuts_FromDStar",1000,-100000.,100000.);
   TH1F *hMassTrueNCfromDstar=new TH1F("hMassTrueNCfromDstar","D^{0} MC inv. Mass No Cuts FromDStar(All momenta)",600,1.600,2.200);
   TH1F *hMassNCfromDstar=new TH1F("hMassNCfromDstar","D^{0} inv. Mass No Cuts FromDStar (All momenta)",600,1.600,2.200);
@@ -895,6 +1698,7 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistNoCutsFromDstar->Add(hSecVtxXNCfromDstar);
   flistNoCutsFromDstar->Add(hSecVtxXYNCfromDstar);
   flistNoCutsFromDstar->Add(hSecVtxPhiNCfromDstar);
+  flistNoCutsFromDstar->Add(hd0singlTrackNCfromDstar);
   flistNoCutsFromDstar->Add(hCPtaNCfromDstar);
   flistNoCutsFromDstar->Add(hd0xd0NCfromDstar);
   flistNoCutsFromDstar->Add(hMassTrueNCfromDstar);
@@ -904,6 +1708,163 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistNoCutsFromDstar->Add(hMassTrueNCfromDstarSB);
   flistNoCutsFromDstar->Add(hMassNCfromDstarSB);
 
+
+
+
+//%%% NEW HISTOS %%%%%%%%%%%%%%%%
+  TH1F *hdcaNCfromDstar=new TH1F("hdcaNCfromDstar","hdca_NoCuts_FromDstar",100,0.,1000.);
+  hdcaNCfromDstar->SetXTitle("dca   [#mum]");
+  hdcaNCfromDstar->SetYTitle("Entries");
+  TH1F *hcosthetastarNCfromDstar=new TH1F("hcosthetastarNCfromDstar","hCosThetaStar_NoCuts_FromDstar",50,-1.,1.);
+  hcosthetastarNCfromDstar->SetXTitle("cos #theta^{*}");
+  hcosthetastarNCfromDstar->SetYTitle("Entries");
+  TH1F *hptD0NCfromDstar=new TH1F("hptD0NCfromDstar","D^{0} transverse momentum distribution",34,ptbinsD0arr);
+  hptD0NCfromDstar->SetXTitle("p_{t}  [GeV/c]");
+  hptD0NCfromDstar->SetYTitle("Entries");
+  TH1F *hptD0VsMaxPtNCfromDstar=new TH1F("hptD0VsMaxPtNCfromDstar","Difference between D^{0} pt and highest (or second) pt",400,-50.,50.);
+  TH2F *hptD0PTallsqrtNCfromDstar=new TH2F("hptD0PTallsqrtNCfromDstar","D^{0} pt Vs Sqrt(Sum pt square)",34,ptbinsD0arr,200,dumbinning);
+  TH2F *hptD0PTallNCfromDstar=new TH2F("hptD0PTallNCfromDstar","D^{0} pt Vs Sum pt ",34,ptbinsD0arr,200,dumbinning);
+  TH2F *hptD0vsptBNCfromDstar=new TH2F("hptD0vsptBNCfromDstar","D^{0} pt Vs B pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hpD0vspBNCfromDstar=new TH2F("hpD0vspBNCfromDstar","D^{0} tot momentum Vs B tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hptD0vsptcquarkNCfromDstar=new TH2F("hptD0vsptcquarkNCfromDstar","D^{0} pt Vs cquark pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hpD0vspcquarkNCfromDstar=new TH2F("hpD0vspcquarkNCfromDstar","D^{0} tot momentum Vs cquark tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  flistNoCutsFromDstar->Add(hdcaNCfromDstar);
+  flistNoCutsFromDstar->Add(hcosthetastarNCfromDstar);
+  flistNoCutsFromDstar->Add(hptD0NCfromDstar);
+  flistNoCutsFromDstar->Add(hptD0VsMaxPtNCfromDstar);
+  flistNoCutsFromDstar->Add(hptD0PTallsqrtNCfromDstar);
+  flistNoCutsFromDstar->Add(hptD0PTallNCfromDstar);
+  flistNoCutsFromDstar->Add(hptD0vsptBNCfromDstar);
+  flistNoCutsFromDstar->Add(hpD0vspBNCfromDstar);
+  flistNoCutsFromDstar->Add(hptD0vsptcquarkNCfromDstar);
+  flistNoCutsFromDstar->Add(hpD0vspcquarkNCfromDstar);
+  TH1F *hd0zD0ptNCfromDstar;
+  TH1F *hInvMassD0NCfromDstar,*hInvMassD0barNCfromDstar;
+  TH2F *hInvMassPtNCfromDstar=new TH2F("hInvMassPtNCfromDstar","Candidate p_{t} Vs invariant mass",330,1.700,2.030,200,0.,20.);
+ THnSparseF *hSparseNCfromDstar=new THnSparseF("hSparseNCfromDstar","Candidate Masses, pt, Imp Par;massD0;massD0bar;pt;impactpar;selcase",5,nbinsSparse);
+  hSparseNCfromDstar->SetBinEdges(0,massbins);
+  hSparseNCfromDstar->SetBinEdges(1,massbins);
+  hSparseNCfromDstar->SetBinEdges(2,ptbinsForNsparse);
+  hSparseNCfromDstar->SetBinEdges(3,impparbins);
+  hSparseNCfromDstar->SetBinEdges(4,massHypoBins); 
+  flistNoCutsFromDstar->Add(hSparseNCfromDstar);
+  TH1F *hetaNCfromDstar;
+  TH1F *hCosPDPBNCfromDstar;
+  TH1F *hCosPcPDNCfromDstar;
+  flistNoCutsFromDstar->Add(hInvMassPtNCfromDstar);
+  // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
+  TH2F *hd0D0VSd0xd0NCfromDstarpt;
+  TH2F *hangletracksVSd0xd0NCfromDstarpt;
+  TH2F *hangletracksVSd0D0NCfromDstarpt;
+  TH1F *hd0xd0NCfromDstarpt;
+
+  TH2F *hTOFpidNCfromDstar=new TH2F("hTOFpidNCfromDstar","TOF time VS momentum",10,0.,4.,50,-50000.,50000.);
+  flistNoCutsFromDstar->Add(hTOFpidNCfromDstar);
+
+  for(Int_t i=0;i<fnbins;i++){
+    namehist="hd0zD0ptNCfromDstar_pt";
+    namehist+=i;
+    titlehist="d0(z) No Cuts FromDstarm ptbin=";
+    titlehist+=i;
+    hd0zD0ptNCfromDstar=new TH1F(namehist.Data(),titlehist.Data(),1000,-3000,3000.);
+    hd0zD0ptNCfromDstar->SetXTitle("d_{0}(z)    [#mum]");
+    hd0zD0ptNCfromDstar->SetYTitle("Entries");
+    flistNoCutsFromDstar->Add(hd0zD0ptNCfromDstar);
+
+    namehist="hInvMassD0NCfromDstar_pt";
+    namehist+=i;
+    titlehist="Invariant Mass No Cuts FromDstar ptbin=";
+    titlehist+=i;
+    hInvMassD0NCfromDstar=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
+    hInvMassD0NCfromDstar->SetXTitle("Invariant Mass    [GeV]");
+    hInvMassD0NCfromDstar->SetYTitle("Entries");
+    flistNoCutsFromDstar->Add(hInvMassD0NCfromDstar);
+
+
+   namehist="hInvMassD0barNCfromDstar_pt";
+    namehist+=i;
+    titlehist="Invariant Mass D0bar No Cuts FromDstar ptbin=";
+    titlehist+=i;
+    hInvMassD0barNCfromDstar=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
+    hInvMassD0barNCfromDstar->SetXTitle("Invariant Mass    [GeV]");
+    hInvMassD0barNCfromDstar->SetYTitle("Entries");
+    flistNoCutsFromDstar->Add(hInvMassD0barNCfromDstar);
+
+
+
+    namehist="hetaNCfromDstar_pt";
+    namehist+=i;
+    titlehist="eta No Cuts FromDstar ptbin=";
+    titlehist+=i;
+    hetaNCfromDstar=new TH1F(namehist.Data(),titlehist.Data(),100,-3.,3.);
+    hetaNCfromDstar->SetXTitle("Pseudorapidity");
+    hetaNCfromDstar->SetYTitle("Entries");
+    flistNoCutsFromDstar->Add(hetaNCfromDstar);
+
+    namehist="hCosPDPBNCfromDstar_pt";
+    namehist+=i;
+    titlehist="Cosine between D0 momentum and B momentum, ptbin=";
+    titlehist+=i;
+    hCosPDPBNCfromDstar=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
+    hCosPDPBNCfromDstar->SetXTitle("Cosine between D0 momentum and B momentum");
+    hCosPDPBNCfromDstar->SetYTitle("Entries");
+    flistNoCutsFromDstar->Add(hCosPDPBNCfromDstar);
+
+    namehist="hCosPcPDNCfromDstar_pt";
+    namehist+=i;
+    titlehist="Cosine between cquark momentum and D0 momentum, ptbin=";
+    titlehist+=i;
+    hCosPcPDNCfromDstar=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
+    hCosPcPDNCfromDstar->SetXTitle("Cosine between c quark momentum and D0 momentum");
+    hCosPcPDNCfromDstar->SetYTitle("Entries");
+    flistNoCutsFromDstar->Add(hCosPcPDNCfromDstar);
+  
+ // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
+    namehist="hd0xd0NCfromDstar_pt";
+    namehist+=i;
+    titlehist="d0xd0 No Cuts FromDstar ptbin=";
+    titlehist+=i;
+    hd0xd0NCfromDstarpt=new TH1F(namehist.Data(),titlehist.Data(),1000,-50000.,10000.);
+    hd0xd0NCfromDstarpt->SetXTitle("d_{0}^{K}xd_{0}^{#pi}   [#mum^2]");
+    hd0xd0NCfromDstarpt->SetYTitle("Entries");
+    flistNoCutsFromDstar->Add(hd0xd0NCfromDstarpt);
+
+
+    namehist="hd0D0VSd0xd0NCfromDstar_pt";
+    namehist+=i;
+    titlehist="d_{0}^{D^{0}} Vs d_{0}^{K}xd_{0}^{#pi} No Cuts FromDstar ptbin=";
+    titlehist+=i;
+    hd0D0VSd0xd0NCfromDstarpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,100,-300,300);
+    hd0D0VSd0xd0NCfromDstarpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
+    hd0D0VSd0xd0NCfromDstarpt->SetYTitle(" d_{0}^{D^{0}}    [#mum]");
+    flistNoCutsFromDstar->Add(hd0D0VSd0xd0NCfromDstarpt);
+    
+    
+    namehist="hangletracksVSd0xd0NCfromDstar_pt";
+    namehist+=i;
+    titlehist="Angle between K and #pi tracks Vs d_{0}^{K}xd_{0}^{#pi} No Cuts FromDstar ptbin=";
+    titlehist+=i;
+    hangletracksVSd0xd0NCfromDstarpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,40,-0.1,3.24);
+    hangletracksVSd0xd0NCfromDstarpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
+    hangletracksVSd0xd0NCfromDstarpt->SetYTitle(" angle between K and #p tracks  [rad]");
+    flistNoCutsFromDstar->Add(hangletracksVSd0xd0NCfromDstarpt);
+    
+
+    namehist="hangletracksVSd0D0NCfromDstar_pt";
+    namehist+=i;
+    titlehist="Angle between K and #pi tracks Vs d_{0}^{D^{0}} No Cuts FromDstar ptbin=";
+    titlehist+=i;
+    hangletracksVSd0D0NCfromDstarpt=new TH2F(namehist.Data(),titlehist.Data(),200,-400.,400.,40,-0.12,3.24);
+    hangletracksVSd0D0NCfromDstarpt->SetXTitle(" d_{0}^{D^{0}} [#mum]");
+    hangletracksVSd0D0NCfromDstarpt->SetYTitle(" angle between K and #p tracks  [rad]");
+    flistNoCutsFromDstar->Add(hangletracksVSd0D0NCfromDstarpt);
+  
+  }
+  // %%%%%%%% END OF NEW HISTOS %%%%%%%%%%%%%
+  //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
   //########## d0 D0 histos #############  
   TH1F *hd0D0NCfromDstPM = new TH1F("hd0D0NCfromDstarPM","D^{0} impact par. plot , No Cuts ,FromDStar,Mass Peak (All momenta)",1000,-1000.,1000.);
   hd0D0NCfromDstPM->SetXTitle("Impact parameter [#mum]");
@@ -936,12 +1897,12 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistNoCutsFromDstar->Add(hd0D0VtxTrueNCfromDstSB);
   flistNoCutsFromDstar->Add(hMCd0D0NCfromDstSB);
   
-  TH1F **hd0D0ptNCfromDstPM=new TH1F*[fnbins];
-  TH1F **hMCd0D0ptNCfromDstPM=new TH1F*[fnbins];
-  TH1F ** hd0D0VtxTrueptNCfromDstPM=new TH1F*[fnbins];
-  TH1F **hd0D0ptNCfromDstSB=new TH1F*[fnbins];
-  TH1F **hMCd0D0ptNCfromDstSB=new TH1F*[fnbins];
-  TH1F ** hd0D0VtxTrueptNCfromDstSB=new TH1F*[fnbins];
+  TH1F *hd0D0ptNCfromDstPM;
+  TH1F *hMCd0D0ptNCfromDstPM;
+  TH1F *hd0D0VtxTrueptNCfromDstPM;
+  TH1F *hd0D0ptNCfromDstSB;
+  TH1F *hMCd0D0ptNCfromDstSB;
+  TH1F *hd0D0VtxTrueptNCfromDstSB;
   namehist="hd0D0ptNCfromDstar_";
   titlehist="D^{0} impact par. plot, No Cuts, FromDStar, ";
   for(Int_t i=0;i<fnbins;i++){
@@ -956,23 +1917,23 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
     strtitlept+=fptbins[i+1];
     strtitlept.Append(" [GeV/c]");
     
-    hd0D0ptNCfromDstPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0ptNCfromDstPM[i]->SetXTitle("Impact parameter [#mum] ");
-    hd0D0ptNCfromDstPM[i]->SetYTitle("Entries");
-    flistNoCutsFromDstar->Add(hd0D0ptNCfromDstPM[i]);
+    hd0D0ptNCfromDstPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0ptNCfromDstPM->SetXTitle("Impact parameter [#mum] ");
+    hd0D0ptNCfromDstPM->SetYTitle("Entries");
+    flistNoCutsFromDstar->Add(hd0D0ptNCfromDstPM);
 
     strnamept.ReplaceAll("hd0D0","hMCd0D0");
-    hMCd0D0ptNCfromDstPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hMCd0D0ptNCfromDstPM[i]->SetXTitle("MC Impact parameter [#mum] ");
-    hMCd0D0ptNCfromDstPM[i]->SetYTitle("Entries");
-    flistNoCutsFromDstar->Add(hMCd0D0ptNCfromDstPM[i]);
+    hMCd0D0ptNCfromDstPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hMCd0D0ptNCfromDstPM->SetXTitle("MC Impact parameter [#mum] ");
+    hMCd0D0ptNCfromDstPM->SetYTitle("Entries");
+    flistNoCutsFromDstar->Add(hMCd0D0ptNCfromDstPM);
  
 
     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
-    hd0D0VtxTrueptNCfromDstPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0VtxTrueptNCfromDstPM[i]->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
-    hd0D0VtxTrueptNCfromDstPM[i]->SetYTitle("Entries");
-    flistNoCutsFromDstar->Add(hd0D0VtxTrueptNCfromDstPM[i]);
+    hd0D0VtxTrueptNCfromDstPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0VtxTrueptNCfromDstPM->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
+    hd0D0VtxTrueptNCfromDstPM->SetYTitle("Entries");
+    flistNoCutsFromDstar->Add(hd0D0VtxTrueptNCfromDstPM);
     
     strnamept=namehist;
     strnamept.Append("SBMss_pt");
@@ -985,22 +1946,22 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
     strtitlept+=fptbins[i+1];
     strtitlept.Append(" [GeV/c]");
     
-    hd0D0ptNCfromDstSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0ptNCfromDstSB[i]->SetXTitle("Impact parameter [#mum] ");
-    hd0D0ptNCfromDstSB[i]->SetYTitle("Entries");
-    flistNoCutsFromDstar->Add(hd0D0ptNCfromDstSB[i]);
+    hd0D0ptNCfromDstSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0ptNCfromDstSB->SetXTitle("Impact parameter [#mum] ");
+    hd0D0ptNCfromDstSB->SetYTitle("Entries");
+    flistNoCutsFromDstar->Add(hd0D0ptNCfromDstSB);
 
     strnamept.ReplaceAll("hd0D0","hMCd0D0");
-    hMCd0D0ptNCfromDstSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hMCd0D0ptNCfromDstSB[i]->SetXTitle("MC Impact parameter [#mum] ");
-    hMCd0D0ptNCfromDstSB[i]->SetYTitle("Entries");
-    flistNoCutsFromDstar->Add(hMCd0D0ptNCfromDstSB[i]);
+    hMCd0D0ptNCfromDstSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hMCd0D0ptNCfromDstSB->SetXTitle("MC Impact parameter [#mum] ");
+    hMCd0D0ptNCfromDstSB->SetYTitle("Entries");
+    flistNoCutsFromDstar->Add(hMCd0D0ptNCfromDstSB);
 
     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
-    hd0D0VtxTrueptNCfromDstSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0VtxTrueptNCfromDstSB[i]->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
-    hd0D0VtxTrueptNCfromDstSB[i]->SetYTitle("Entries");
-    flistNoCutsFromDstar->Add(hd0D0VtxTrueptNCfromDstSB[i]);
+    hd0D0VtxTrueptNCfromDstSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0VtxTrueptNCfromDstSB->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
+    hd0D0VtxTrueptNCfromDstSB->SetYTitle("Entries");
+    flistNoCutsFromDstar->Add(hd0D0VtxTrueptNCfromDstSB);
   }
 
 
@@ -1008,13 +1969,14 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   //
   //########### global properties histos ###########
 
-  TH2F *hCPtaVSd0d0NCother=new TH2F("hCPtaVSd0d0NCother","hCPtaVSd0d0_NoCuts_other",1000,-100000.,100000.,100,0.,1.);
+  TH2F *hCPtaVSd0d0NCother=new TH2F("hCPtaVSd0d0NCother","hCPtaVSd0d0_NoCuts_other",1000,-100000.,100000.,100,-1.,1.);
   TH1F *hSecVtxZNCother=new TH1F("hSecVtxZNCother","hSecVtxZ_NoCuts_other",1000,-8.,8.);
   TH1F *hSecVtxXNCother=new TH1F("hSecVtxXNCother","hSecVtxX_NoCuts_other",1000,-3000.,3000.);
   TH1F *hSecVtxYNCother=new TH1F("hSecVtxYNCother","hSecVtxY_NoCuts_other",1000,-3000.,3000.);
   TH2F *hSecVtxXYNCother=new TH2F("hSecVtxXYNCother","hSecVtxXY_NoCuts_other",1000,-3000.,3000.,1000,-3000.,3000.);
   TH1F *hSecVtxPhiNCother=new TH1F("hSecVtxPhiNCother","hSecVtxPhi_NoCuts_other",180,-180.1,180.1);
-  TH1F *hCPtaNCother=new TH1F("hCPtaNCother","hCPta_NoCuts_other",100,0.,1.);
+  TH1F *hd0singlTrackNCother=new TH1F("hd0singlTrackNCother","hd0singlTrackNoCuts_Other",1000,-5000.,5000.);
+  TH1F *hCPtaNCother=new TH1F("hCPtaNCother","hCPta_NoCuts_other",100,-1.,1.);
   TH1F *hd0xd0NCother=new TH1F("hd0xd0NCother","hd0xd0_NoCuts_other",1000,-100000.,100000.);
   TH1F *hMassTrueNCother=new TH1F("hMassTrueNCother","D^{0} MC inv. Mass No Cuts other(All momenta)",600,1.600,2.200);
   TH1F *hMassNCother=new TH1F("hMassNCother","D^{0} inv. Mass No Cuts other (All momenta)",600,1.600,2.200);
@@ -1032,6 +1994,7 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistNoCutsOther->Add(hSecVtxXNCother);
   flistNoCutsOther->Add(hSecVtxXYNCother);
   flistNoCutsOther->Add(hSecVtxPhiNCother);
+  flistNoCutsOther->Add(hd0singlTrackNCother);
   flistNoCutsOther->Add(hCPtaNCother);
   flistNoCutsOther->Add(hd0xd0NCother);
   flistNoCutsOther->Add(hMassTrueNCother);
@@ -1041,6 +2004,164 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistNoCutsOther->Add(hMassTrueNCotherSB);
   flistNoCutsOther->Add(hMassNCotherSB);
 
+
+
+ //%%% NEW HISTOS %%%%%%%%%%%%%%%%
+  TH1F *hdcaNCother=new TH1F("hdcaNCother","hdca_NoCuts_Other",100,0.,1000.);
+  hdcaNCother->SetXTitle("dca   [#mum]");
+  hdcaNCother->SetYTitle("Entries");
+  TH1F *hcosthetastarNCother=new TH1F("hcosthetastarNCother","hCosThetaStar_NoCuts_Other",50,-1.,1.);
+  hcosthetastarNCother->SetXTitle("cos #theta^{*}");
+  hcosthetastarNCother->SetYTitle("Entries");
+  TH1F *hptD0NCother=new TH1F("hptD0NCother","D^{0} transverse momentum distribution",34,ptbinsD0arr);
+  hptD0NCother->SetXTitle("p_{t}  [GeV/c]");
+  hptD0NCother->SetYTitle("Entries");
+  TH1F *hptD0VsMaxPtNCother=new TH1F("hptD0VsMaxPtNCother","Difference between D^{0} pt and highest (or second) pt",400,-50.,50.);
+  TH2F *hptD0PTallsqrtNCother=new TH2F("hptD0PTallsqrtNCother","D^{0} pt Vs Sqrt(Sum pt square)",34,ptbinsD0arr,200,dumbinning);
+  TH2F *hptD0PTallNCother=new TH2F("hptD0PTallNCother","D^{0} pt Vs Sum pt ",34,ptbinsD0arr,200,dumbinning);
+  TH2F *hptD0vsptBNCother=new TH2F("hptD0vsptBNCother","D^{0} pt Vs B pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hpD0vspBNCother=new TH2F("hpD0vspBNCother","D^{0} tot momentum Vs B tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hptD0vsptcquarkNCother=new TH2F("hptD0vsptcquarkNCother","D^{0} pt Vs cquark pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hpD0vspcquarkNCother=new TH2F("hpD0vspcquarkNCother","D^{0} tot momentum Vs cquark tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  flistNoCutsOther->Add(hdcaNCother);
+  flistNoCutsOther->Add(hcosthetastarNCother);
+  flistNoCutsOther->Add(hptD0NCother);
+  flistNoCutsOther->Add(hptD0VsMaxPtNCother);
+  flistNoCutsOther->Add(hptD0PTallsqrtNCother);
+  flistNoCutsOther->Add(hptD0PTallNCother);
+  flistNoCutsOther->Add(hptD0vsptBNCother);
+  flistNoCutsOther->Add(hpD0vspBNCother);
+  flistNoCutsOther->Add(hptD0vsptcquarkNCother);
+  flistNoCutsOther->Add(hpD0vspcquarkNCother);
+
+  TH1F *hd0zD0ptNCother;
+  TH1F *hInvMassD0NCother,*hInvMassD0barNCother;
+  TH2F *hInvMassPtNCother=new TH2F("hInvMassPtNCother","Candidate p_{t} Vs invariant mass",330,1.700,2.030,200,0.,20.);
+ THnSparseF *hSparseNCother=new THnSparseF("hSparseNCother","Candidate Masses, pt, Imp Par;massD0;massD0bar;pt;impactpar;selcase",5,nbinsSparse);
+  hSparseNCother->SetBinEdges(0,massbins);
+  hSparseNCother->SetBinEdges(1,massbins);
+  hSparseNCother->SetBinEdges(2,ptbinsForNsparse);
+  hSparseNCother->SetBinEdges(3,impparbins);
+  hSparseNCother->SetBinEdges(4,massHypoBins); 
+  flistNoCutsOther->Add(hSparseNCother);
+  TH1F *hetaNCother;
+  TH1F *hCosPDPBNCother;
+  TH1F *hCosPcPDNCother;
+  flistNoCutsOther->Add(hInvMassPtNCother);
+  // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
+  TH2F *hd0D0VSd0xd0NCotherpt;
+  TH2F *hangletracksVSd0xd0NCotherpt;
+  TH2F *hangletracksVSd0D0NCotherpt;
+  TH1F *hd0xd0NCotherpt;
+
+  TH2F *hTOFpidNCother=new TH2F("hTOFpidNCother","TOF time VS momentum",10,0.,4.,50,-50000.,50000.);
+  flistNoCutsOther->Add(hTOFpidNCother);
+
+  for(Int_t i=0;i<fnbins;i++){
+    namehist="hd0zD0ptNCother_pt";
+    namehist+=i;
+    titlehist="d0(z) No Cuts Otherm ptbin=";
+    titlehist+=i;
+    hd0zD0ptNCother=new TH1F(namehist.Data(),titlehist.Data(),1000,-3000,3000.);
+    hd0zD0ptNCother->SetXTitle("d_{0}(z)    [#mum]");
+    hd0zD0ptNCother->SetYTitle("Entries");
+    flistNoCutsOther->Add(hd0zD0ptNCother);
+
+    namehist="hInvMassD0NCother_pt";
+    namehist+=i;
+    titlehist="Invariant Mass No Cuts Other ptbin=";
+    titlehist+=i;
+    hInvMassD0NCother=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
+    hInvMassD0NCother->SetXTitle("Invariant Mass    [GeV]");
+    hInvMassD0NCother->SetYTitle("Entries");
+    flistNoCutsOther->Add(hInvMassD0NCother);
+
+
+   namehist="hInvMassD0barNCother_pt";
+    namehist+=i;
+    titlehist="Invariant Mass D0bar No Cuts Other ptbin=";
+    titlehist+=i;
+    hInvMassD0barNCother=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
+    hInvMassD0barNCother->SetXTitle("Invariant Mass    [GeV]");
+    hInvMassD0barNCother->SetYTitle("Entries");
+    flistNoCutsOther->Add(hInvMassD0barNCother);
+
+
+    namehist="hetaNCother_pt";
+    namehist+=i;
+    titlehist="eta No Cuts Other ptbin=";
+    titlehist+=i;
+    hetaNCother=new TH1F(namehist.Data(),titlehist.Data(),100,-3.,3.);
+    hetaNCother->SetXTitle("Pseudorapidity");
+    hetaNCother->SetYTitle("Entries");
+    flistNoCutsOther->Add(hetaNCother);
+
+    namehist="hCosPDPBNCother_pt";
+    namehist+=i;
+    titlehist="Cosine between D0 momentum and B momentum, ptbin=";
+    titlehist+=i;
+    hCosPDPBNCother=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
+    hCosPDPBNCother->SetXTitle("Cosine between D0 momentum and B momentum");
+    hCosPDPBNCother->SetYTitle("Entries");
+    flistNoCutsOther->Add(hCosPDPBNCother);
+
+    namehist="hCosPcPDNCother_pt";
+    namehist+=i;
+    titlehist="Cosine between cquark momentum and D0 momentum, ptbin=";
+    titlehist+=i;
+    hCosPcPDNCother=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
+    hCosPcPDNCother->SetXTitle("Cosine between c quark momentum and D0 momentum");
+    hCosPcPDNCother->SetYTitle("Entries");
+    flistNoCutsOther->Add(hCosPcPDNCother);
+    
+
+ // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
+    namehist="hd0xd0NCother_pt";
+    namehist+=i;
+    titlehist="d0xd0 No Cuts Other ptbin=";
+    titlehist+=i;
+    hd0xd0NCotherpt=new TH1F(namehist.Data(),titlehist.Data(),1000,-50000.,10000.);
+    hd0xd0NCotherpt->SetXTitle("d_{0}^{K}xd_{0}^{#pi}   [#mum^2]");
+    hd0xd0NCotherpt->SetYTitle("Entries");
+    flistNoCutsOther->Add(hd0xd0NCotherpt);
+
+
+    namehist="hd0D0VSd0xd0NCother_pt";
+    namehist+=i;
+    titlehist="d_{0}^{D^{0}} Vs d_{0}^{K}xd_{0}^{#pi} No Cuts Other ptbin=";
+    titlehist+=i;
+    hd0D0VSd0xd0NCotherpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,100,-300,300);
+    hd0D0VSd0xd0NCotherpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
+    hd0D0VSd0xd0NCotherpt->SetYTitle(" d_{0}^{D^{0}}    [#mum]");
+    flistNoCutsOther->Add(hd0D0VSd0xd0NCotherpt);
+    
+    
+    namehist="hangletracksVSd0xd0NCother_pt";
+    namehist+=i;
+    titlehist="Angle between K and #pi tracks Vs d_{0}^{K}xd_{0}^{#pi} No Cuts Other ptbin=";
+    titlehist+=i;
+    hangletracksVSd0xd0NCotherpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,40,-0.1,3.24);
+    hangletracksVSd0xd0NCotherpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
+    hangletracksVSd0xd0NCotherpt->SetYTitle(" angle between K and #p tracks  [rad]");
+    flistNoCutsOther->Add(hangletracksVSd0xd0NCotherpt);
+    
+
+    namehist="hangletracksVSd0D0NCother_pt";
+    namehist+=i;
+    titlehist="Angle between K and #pi tracks Vs d_{0}^{D^{0}} No Cuts Other ptbin=";
+    titlehist+=i;
+    hangletracksVSd0D0NCotherpt=new TH2F(namehist.Data(),titlehist.Data(),200,-400.,400.,40,-0.12,3.24);
+    hangletracksVSd0D0NCotherpt->SetXTitle(" d_{0}^{D^{0}} [#mum]");
+    hangletracksVSd0D0NCotherpt->SetYTitle(" angle between K and #p tracks  [rad]");
+    flistNoCutsOther->Add(hangletracksVSd0D0NCotherpt);
+
+  }
+  // %%%%%%%% END OF NEW HISTOS %%%%%%%%%%%%%
+  //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
   //############# d0 D0 histos ###############à
   TH1F *hd0D0NCotherPM = new TH1F("hd0D0NCotherPM","D^{0} impact par. plot , No Cuts ,Other,Mass Peak (All momenta)",1000,-1000.,1000.);
   hd0D0NCotherPM->SetXTitle("Impact parameter [#mum]");
@@ -1073,12 +2194,12 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistNoCutsOther->Add(hd0D0VtxTrueNCotherSB);
   flistNoCutsOther->Add(hMCd0D0NCotherSB);
   
-  TH1F **hd0D0ptNCotherPM=new TH1F*[fnbins];
-  TH1F **hMCd0D0ptNCotherPM=new TH1F*[fnbins];
-  TH1F ** hd0D0VtxTrueptNCotherPM=new TH1F*[fnbins];
-  TH1F **hd0D0ptNCotherSB=new TH1F*[fnbins];
-  TH1F **hMCd0D0ptNCotherSB=new TH1F*[fnbins];
-  TH1F ** hd0D0VtxTrueptNCotherSB=new TH1F*[fnbins];
+  TH1F *hd0D0ptNCotherPM;
+  TH1F *hMCd0D0ptNCotherPM;
+  TH1F *hd0D0VtxTrueptNCotherPM;
+  TH1F *hd0D0ptNCotherSB;
+  TH1F *hMCd0D0ptNCotherSB;
+  TH1F *hd0D0VtxTrueptNCotherSB;
   namehist="hd0D0ptNCother_";
   titlehist="D^{0} impact par. plot, No Cuts, Other, ";
   for(Int_t i=0;i<fnbins;i++){
@@ -1093,23 +2214,23 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
     strtitlept+=fptbins[i+1];
     strtitlept.Append(" [GeV/c]");
     
-    hd0D0ptNCotherPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0ptNCotherPM[i]->SetXTitle("Impact parameter [#mum] ");
-    hd0D0ptNCotherPM[i]->SetYTitle("Entries");
-    flistNoCutsOther->Add(hd0D0ptNCotherPM[i]);
+    hd0D0ptNCotherPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0ptNCotherPM->SetXTitle("Impact parameter [#mum] ");
+    hd0D0ptNCotherPM->SetYTitle("Entries");
+    flistNoCutsOther->Add(hd0D0ptNCotherPM);
 
     strnamept.ReplaceAll("hd0D0","hMCd0D0");
-    hMCd0D0ptNCotherPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hMCd0D0ptNCotherPM[i]->SetXTitle("MC Impact parameter [#mum] ");
-    hMCd0D0ptNCotherPM[i]->SetYTitle("Entries");
-    flistNoCutsOther->Add(hMCd0D0ptNCotherPM[i]);
+    hMCd0D0ptNCotherPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hMCd0D0ptNCotherPM->SetXTitle("MC Impact parameter [#mum] ");
+    hMCd0D0ptNCotherPM->SetYTitle("Entries");
+    flistNoCutsOther->Add(hMCd0D0ptNCotherPM);
  
 
     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
-    hd0D0VtxTrueptNCotherPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0VtxTrueptNCotherPM[i]->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
-    hd0D0VtxTrueptNCotherPM[i]->SetYTitle("Entries");
-    flistNoCutsOther->Add(hd0D0VtxTrueptNCotherPM[i]);
+    hd0D0VtxTrueptNCotherPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0VtxTrueptNCotherPM->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
+    hd0D0VtxTrueptNCotherPM->SetYTitle("Entries");
+    flistNoCutsOther->Add(hd0D0VtxTrueptNCotherPM);
     
     strnamept=namehist;
     strnamept.Append("SBMss_pt");
@@ -1122,22 +2243,22 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
     strtitlept+=fptbins[i+1];
     strtitlept.Append(" [GeV/c]");
     
-    hd0D0ptNCotherSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0ptNCotherSB[i]->SetXTitle("Impact parameter [#mum] ");
-    hd0D0ptNCotherSB[i]->SetYTitle("Entries");
-    flistNoCutsOther->Add(hd0D0ptNCotherSB[i]);
+    hd0D0ptNCotherSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0ptNCotherSB->SetXTitle("Impact parameter [#mum] ");
+    hd0D0ptNCotherSB->SetYTitle("Entries");
+    flistNoCutsOther->Add(hd0D0ptNCotherSB);
 
     strnamept.ReplaceAll("hd0D0","hMCd0D0");
-    hMCd0D0ptNCotherSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hMCd0D0ptNCotherSB[i]->SetXTitle("MC Impact parameter [#mum] ");
-    hMCd0D0ptNCotherSB[i]->SetYTitle("Entries");
-    flistNoCutsOther->Add(hMCd0D0ptNCotherSB[i]);
+    hMCd0D0ptNCotherSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hMCd0D0ptNCotherSB->SetXTitle("MC Impact parameter [#mum] ");
+    hMCd0D0ptNCotherSB->SetYTitle("Entries");
+    flistNoCutsOther->Add(hMCd0D0ptNCotherSB);
 
     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
-    hd0D0VtxTrueptNCotherSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0VtxTrueptNCotherSB[i]->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
-    hd0D0VtxTrueptNCotherSB[i]->SetYTitle("Entries");
-    flistNoCutsOther->Add(hd0D0VtxTrueptNCotherSB[i]);
+    hd0D0VtxTrueptNCotherSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0VtxTrueptNCotherSB->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
+    hd0D0VtxTrueptNCotherSB->SetYTitle("Entries");
+    flistNoCutsOther->Add(hd0D0VtxTrueptNCotherSB);
   }
 
 
@@ -1151,13 +2272,14 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   //
   // ####### global properties histo ############
 
-  TH2F *hCPtaVSd0d0LSCsign=new TH2F("hCPtaVSd0d0LSCsign","hCPtaVSd0d0_LooseCuts_Signal",1000,-100000.,100000.,100,0.,1.);
+  TH2F *hCPtaVSd0d0LSCsign=new TH2F("hCPtaVSd0d0LSCsign","hCPtaVSd0d0_LooseCuts_Signal",1000,-100000.,100000.,100,-1.,1.);
   TH1F *hSecVtxZLSCsign=new TH1F("hSecVtxZLSCsign","hSecVtxZ_LooseCuts_Signal",1000,-8.,8.);
   TH1F *hSecVtxXLSCsign=new TH1F("hSecVtxXLSCsign","hSecVtxX_LooseCuts_Signal",1000,-3000.,3000.);
   TH1F *hSecVtxYLSCsign=new TH1F("hSecVtxYLSCsign","hSecVtxY_LooseCuts_Signal",1000,-3000.,3000.);
   TH2F *hSecVtxXYLSCsign=new TH2F("hSecVtxXYLSCsign","hSecVtxXY_LooseCuts_Signal",1000,-3000.,3000.,1000,-3000.,3000.);
   TH1F *hSecVtxPhiLSCsign=new TH1F("hSecVtxPhiLSCsign","hSecVtxPhi_LooseCuts_Signal",180,-180.1,180.1);
-  TH1F *hCPtaLSCsign=new TH1F("hCPtaLSCsign","hCPta_LooseCuts_Signal",100,0.,1.);
+  TH1F *hd0singlTrackLSCsign=new TH1F("hd0singlTrackLSCsign","hd0singlTrackLooseCuts_Signal",1000,-5000.,5000.);
+  TH1F *hCPtaLSCsign=new TH1F("hCPtaLSCsign","hCPta_LooseCuts_Signal",100,-1.,1.);
   TH1F *hd0xd0LSCsign=new TH1F("hd0xd0LSCsign","hd0xd0_LooseCuts_Signal",1000,-100000.,100000.);
   TH1F *hMassTrueLSCsign=new TH1F("hMassTrueLSCsign","D^{0} MC inv. Mass Loose Cuts Signal(All momenta)",600,1.600,2.200);
   TH1F *hMassLSCsign=new TH1F("hMassLSCsign","D^{0} inv. Mass Loose Cuts Signal (All momenta)",600,1.600,2.200);
@@ -1175,6 +2297,7 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistLsCutsSignal->Add(hSecVtxXLSCsign);
   flistLsCutsSignal->Add(hSecVtxXYLSCsign);
   flistLsCutsSignal->Add(hSecVtxPhiLSCsign);
+  flistLsCutsSignal->Add(hd0singlTrackLSCsign);
   flistLsCutsSignal->Add(hCPtaLSCsign);
   flistLsCutsSignal->Add(hd0xd0LSCsign);
   flistLsCutsSignal->Add(hMassTrueLSCsign);
@@ -1184,6 +2307,196 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistLsCutsSignal->Add(hMassTrueLSCsignSB);
   flistLsCutsSignal->Add(hMassLSCsignSB);
 
+
+  //%%% NEW HISTOS %%%%%%%%%%%%%%%%
+  TH1F *hdcaLSCsign=new TH1F("hdcaLSCsign","hdca_LooseCuts_Sign",100,0.,1000.);
+  hdcaLSCsign->SetXTitle("dca   [#mum]");
+  hdcaLSCsign->SetYTitle("Entries");
+  TH1F *hcosthetastarLSCsign=new TH1F("hcosthetastarLSCsign","hCosThetaStar_LooseCuts_Sign",50,-1.,1.);
+  hcosthetastarLSCsign->SetXTitle("cos #theta^{*}");
+  hcosthetastarLSCsign->SetYTitle("Entries");
+  TH1F *hptD0LSCsign=new TH1F("hptD0LSCsign","D^{0} transverse momentum distribution",34,ptbinsD0arr);
+  hptD0LSCsign->SetXTitle("p_{t}  [GeV/c]");
+  hptD0LSCsign->SetYTitle("Entries");
+  TH1F *hptD0VsMaxPtLSCsign=new TH1F("hptD0VsMaxPtLSCsign","Difference between D^{0} pt and highest (or second) pt",400,-50.,50.);
+  TH2F *hptD0PTallsqrtLSCsign=new TH2F("hptD0PTallsqrtLSCsign","D^{0} pt Vs Sqrt(Sum pt square)",34,ptbinsD0arr,200,dumbinning);
+  TH2F *hptD0PTallLSCsign=new TH2F("hptD0PTallLSCsign","D^{0} pt Vs Sum pt ",34,ptbinsD0arr,200,dumbinning);
+  TH2F *hptD0vsptBLSCsign=new TH2F("hptD0vsptBLSCsign","D^{0} pt Vs B pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hpD0vspBLSCsign=new TH2F("hpD0vspBLSCsign","D^{0} tot momentum Vs B tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hptD0vsptcquarkLSCsign=new TH2F("hptD0vsptcquarkLSCsign","D^{0} pt Vs cquark pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hpD0vspcquarkLSCsign=new TH2F("hpD0vspcquarkLSCsign","D^{0} tot momentum Vs cquark tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  flistLsCutsSignal->Add(hdcaLSCsign);
+  flistLsCutsSignal->Add(hcosthetastarLSCsign);
+  flistLsCutsSignal->Add(hptD0LSCsign);
+  flistLsCutsSignal->Add(hptD0VsMaxPtLSCsign);
+  flistLsCutsSignal->Add(hptD0PTallsqrtLSCsign);
+  flistLsCutsSignal->Add(hptD0PTallLSCsign);
+  flistLsCutsSignal->Add(hptD0vsptBLSCsign);
+  flistLsCutsSignal->Add(hpD0vspBLSCsign);
+  flistLsCutsSignal->Add(hptD0vsptcquarkLSCsign);
+  flistLsCutsSignal->Add(hpD0vspcquarkLSCsign);
+  TH1F *hd0zD0ptLSCsign;
+  TH1F *hInvMassD0LSCsign,*hInvMassD0barLSCsign;
+  TH2F *hInvMassPtLSCsign=new TH2F("hInvMassPtLSCsign","Candidate p_{t} Vs invariant mass",330,1.700,2.030,200,0.,20.);
+ THnSparseF *hSparseLSCsign=new THnSparseF("hSparseLSCsign","Candidate Masses, pt, Imp Par;massD0;massD0bar;pt;impactpar;selcase",5,nbinsSparse);
+  hSparseLSCsign->SetBinEdges(0,massbins);
+  hSparseLSCsign->SetBinEdges(1,massbins);
+  hSparseLSCsign->SetBinEdges(2,ptbinsForNsparse);
+  hSparseLSCsign->SetBinEdges(3,impparbins);
+  hSparseLSCsign->SetBinEdges(4,massHypoBins); 
+  flistLsCutsSignal->Add(hSparseLSCsign);
+  TH1F *hetaLSCsign;
+  TH1F *hCosPDPBLSCsign;
+  TH1F *hCosPcPDLSCsign;
+  flistLsCutsSignal->Add(hInvMassPtLSCsign);
+
+
+  
+ THnSparseF *hSparseCxyLxyLSCsign=new THnSparseF("hSparseCxyLxyLSCsign","Candidate Mass;massD0;Pt;CosXY;Lxy",4,nbinsSparsCxyLxy,binLowLimitSparseCxyLxy,binUpLimitSparseCxyLxy);
+  hSparseCxyLxyLSCsign->SetBinEdges(1,ptbinlimitsCxyLxy); 
+  hSparseCxyLxyLSCsign->GetAxis(0)->SetName("mass");
+  hSparseCxyLxyLSCsign->GetAxis(0)->SetTitle("Invariant Mass (K#pi) [GeV/c^{2}]");
+  hSparseCxyLxyLSCsign->GetAxis(1)->SetName("pt");
+  hSparseCxyLxyLSCsign->GetAxis(1)->SetTitle("p_{t} [GeV/c]");
+  hSparseCxyLxyLSCsign->GetAxis(2)->SetName("CosPointXY");
+  hSparseCxyLxyLSCsign->GetAxis(2)->SetTitle("Cos#theta_{point}^{XY}");
+  hSparseCxyLxyLSCsign->GetAxis(3)->SetName("NormDecLengthXY");
+  hSparseCxyLxyLSCsign->GetAxis(3)->SetTitle("Normalized XY decay length");
+
+  flistLsCutsSignal->Add(hSparseCxyLxyLSCsign);
+  // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
+  TH2F *hd0D0VSd0xd0LSCsignpt;
+  TH2F *hangletracksVSd0xd0LSCsignpt;
+  TH2F *hangletracksVSd0D0LSCsignpt;
+  TH1F *hd0xd0LSCsignpt;
+  TH1F *hPhiHistPMLSCsignpt,*hPhiHistSBLSCsignpt;
+
+  TH2F *hTOFpidLSCsign=new TH2F("hTOFpidLSCsign","TOF time VS momentum",10,0.,4.,50,-50000.,50000.);
+  flistLsCutsSignal->Add(hTOFpidLSCsign);
+
+  for(Int_t i=0;i<fnbins;i++){
+    namehist="hPhiHistPMLSCsign_pt";
+    namehist+=i;
+    titlehist="Azimuthal correlation LS Cuts Sign PM ptbin=";
+    titlehist+=i;
+    hPhiHistPMLSCsignpt=new TH1F(namehist.Data(),titlehist.Data(),100,-3.15,3.15);
+    hPhiHistPMLSCsignpt->Sumw2();
+    flistLsCutsSignal->Add(hPhiHistPMLSCsignpt);
+
+    namehist="hPhiHistSBLSCsign_pt";
+    namehist+=i;
+    titlehist="Azimuthal correlation LS Cuts Sign SB ptbin=";
+    titlehist+=i;
+    hPhiHistSBLSCsignpt=new TH1F(namehist.Data(),titlehist.Data(),100,-3.15,3.15);
+    hPhiHistSBLSCsignpt->Sumw2();
+    flistLsCutsSignal->Add(hPhiHistSBLSCsignpt);
+
+  
+
+    namehist="hd0zD0ptLSCsign_pt";
+    namehist+=i;
+    titlehist="d0(z) Loose Cuts Signm ptbin=";
+    titlehist+=i;
+    hd0zD0ptLSCsign=new TH1F(namehist.Data(),titlehist.Data(),1000,-3000,3000.);
+    hd0zD0ptLSCsign->SetXTitle("d_{0}(z)    [#mum]");
+    hd0zD0ptLSCsign->SetYTitle("Entries");
+    flistLsCutsSignal->Add(hd0zD0ptLSCsign);
+
+    namehist="hInvMassD0LSCsign_pt";
+    namehist+=i;
+    titlehist="Invariant Mass Loose Cuts Sign ptbin=";
+    titlehist+=i;
+    hInvMassD0LSCsign=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
+    hInvMassD0LSCsign->SetXTitle("Invariant Mass    [GeV]");
+    hInvMassD0LSCsign->SetYTitle("Entries");
+    flistLsCutsSignal->Add(hInvMassD0LSCsign);
+
+
+    namehist="hInvMassD0barLSCsign_pt";
+    namehist+=i;
+    titlehist="Invariant Mass D0bar Loose Cuts Signal ptbin=";
+    titlehist+=i;
+    hInvMassD0barLSCsign=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
+    hInvMassD0barLSCsign->SetXTitle("Invariant Mass    [GeV]");
+    hInvMassD0barLSCsign->SetYTitle("Entries");
+    flistLsCutsSignal->Add(hInvMassD0barLSCsign);
+
+    namehist="hetaLSCsign_pt";
+    namehist+=i;
+    titlehist="eta Loose Cuts Sign ptbin=";
+    titlehist+=i;
+    hetaLSCsign=new TH1F(namehist.Data(),titlehist.Data(),100,-3.,3.);
+    hetaLSCsign->SetXTitle("Pseudorapidity");
+    hetaLSCsign->SetYTitle("Entries");
+    flistLsCutsSignal->Add(hetaLSCsign);
+
+    namehist="hCosPDPBLSCsign_pt";
+    namehist+=i;
+    titlehist="Cosine between D0 momentum and B momentum, ptbin=";
+    titlehist+=i;
+    hCosPDPBLSCsign=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
+    hCosPDPBLSCsign->SetXTitle("Cosine between D0 momentum and B momentum");
+    hCosPDPBLSCsign->SetYTitle("Entries");
+    flistLsCutsSignal->Add(hCosPDPBLSCsign);
+
+    namehist="hCosPcPDLSCsign_pt";
+    namehist+=i;
+    titlehist="Cosine between cquark momentum and D0 momentum, ptbin=";
+    titlehist+=i;
+    hCosPcPDLSCsign=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
+    hCosPcPDLSCsign->SetXTitle("Cosine between c quark momentum and D0 momentum");
+    hCosPcPDLSCsign->SetYTitle("Entries");
+    flistLsCutsSignal->Add(hCosPcPDLSCsign);
+
+
+ // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
+    namehist="hd0xd0LSCsign_pt";
+    namehist+=i;
+    titlehist="d0xd0 Loose Cuts Sign ptbin=";
+    titlehist+=i;
+    hd0xd0LSCsignpt=new TH1F(namehist.Data(),titlehist.Data(),1000,-50000.,10000.);
+    hd0xd0LSCsignpt->SetXTitle("d_{0}^{K}xd_{0}^{#pi}   [#mum^2]");
+    hd0xd0LSCsignpt->SetYTitle("Entries");
+    flistLsCutsSignal->Add(hd0xd0LSCsignpt);
+
+
+    namehist="hd0D0VSd0xd0LSCsign_pt";
+    namehist+=i;
+    titlehist="d_{0}^{D^{0}} Vs d_{0}^{K}xd_{0}^{#pi} Loose Cuts Sign ptbin=";
+    titlehist+=i;
+    hd0D0VSd0xd0LSCsignpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,100,-300,300);
+    hd0D0VSd0xd0LSCsignpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
+    hd0D0VSd0xd0LSCsignpt->SetYTitle(" d_{0}^{D^{0}}    [#mum]");
+    flistLsCutsSignal->Add(hd0D0VSd0xd0LSCsignpt);
+    
+    
+    namehist="hangletracksVSd0xd0LSCsign_pt";
+    namehist+=i;
+    titlehist="Angle between K and #pi tracks Vs d_{0}^{K}xd_{0}^{#pi} Loose Cuts Sign ptbin=";
+    titlehist+=i;
+    hangletracksVSd0xd0LSCsignpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,40,-0.1,3.24);
+    hangletracksVSd0xd0LSCsignpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
+    hangletracksVSd0xd0LSCsignpt->SetYTitle(" angle between K and #p tracks  [rad]");
+    flistLsCutsSignal->Add(hangletracksVSd0xd0LSCsignpt);
+    
+
+    namehist="hangletracksVSd0D0LSCsign_pt";
+    namehist+=i;
+    titlehist="Angle between K and #pi tracks Vs d_{0}^{D^{0}} Loose Cuts Sign ptbin=";
+    titlehist+=i;
+    hangletracksVSd0D0LSCsignpt=new TH2F(namehist.Data(),titlehist.Data(),200,-400.,400.,40,-0.12,3.24);
+    hangletracksVSd0D0LSCsignpt->SetXTitle(" d_{0}^{D^{0}} [#mum]");
+    hangletracksVSd0D0LSCsignpt->SetYTitle(" angle between K and #p tracks  [rad]");
+    flistLsCutsSignal->Add(hangletracksVSd0D0LSCsignpt);
+
+    
+  }
+  // %%%%%%%% END OF NEW HISTOS %%%%%%%%%%%%%
+  //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
   // ####### d0 D0 histos ############
   TH1F *hd0D0LSCsignPM = new TH1F("hd0D0LSCsignPM","D^{0} impact par. plot , Loose Cuts ,Signal,Mass Peak (All momenta)",1000,-1000.,1000.);
   hd0D0LSCsignPM->SetXTitle("Impact parameter [#mum]");
@@ -1216,12 +2529,12 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistLsCutsSignal->Add(hd0D0VtxTrueLSCsignSB);
   flistLsCutsSignal->Add(hMCd0D0LSCsignSB);
   
-  TH1F **hd0D0ptLSCsignPM=new TH1F*[fnbins];
-  TH1F **hMCd0D0ptLSCsignPM=new TH1F*[fnbins];
-  TH1F ** hd0D0VtxTrueptLSCsignPM=new TH1F*[fnbins];
-  TH1F **hd0D0ptLSCsignSB=new TH1F*[fnbins];
-  TH1F **hMCd0D0ptLSCsignSB=new TH1F*[fnbins];
-  TH1F ** hd0D0VtxTrueptLSCsignSB=new TH1F*[fnbins];
+  TH1F *hd0D0ptLSCsignPM;
+  TH1F *hMCd0D0ptLSCsignPM;
+  TH1F *hd0D0VtxTrueptLSCsignPM;
+  TH1F *hd0D0ptLSCsignSB;
+  TH1F *hMCd0D0ptLSCsignSB;
+  TH1F *hd0D0VtxTrueptLSCsignSB;
   namehist="hd0D0ptLSCsign_";
   titlehist="D^{0} impact par. plot, Loose Cuts, Signal, ";
   for(Int_t i=0;i<fnbins;i++){
@@ -1236,23 +2549,23 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
     strtitlept+=fptbins[i+1];
     strtitlept.Append(" [GeV/c]");
     
-    hd0D0ptLSCsignPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0ptLSCsignPM[i]->SetXTitle("Impact parameter [#mum] ");
-    hd0D0ptLSCsignPM[i]->SetYTitle("Entries");
-    flistLsCutsSignal->Add(hd0D0ptLSCsignPM[i]);
+    hd0D0ptLSCsignPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0ptLSCsignPM->SetXTitle("Impact parameter [#mum] ");
+    hd0D0ptLSCsignPM->SetYTitle("Entries");
+    flistLsCutsSignal->Add(hd0D0ptLSCsignPM);
 
     strnamept.ReplaceAll("hd0D0","hMCd0D0");
-    hMCd0D0ptLSCsignPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hMCd0D0ptLSCsignPM[i]->SetXTitle("MC Impact parameter [#mum] ");
-    hMCd0D0ptLSCsignPM[i]->SetYTitle("Entries");
-    flistLsCutsSignal->Add(hMCd0D0ptLSCsignPM[i]);
+    hMCd0D0ptLSCsignPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hMCd0D0ptLSCsignPM->SetXTitle("MC Impact parameter [#mum] ");
+    hMCd0D0ptLSCsignPM->SetYTitle("Entries");
+    flistLsCutsSignal->Add(hMCd0D0ptLSCsignPM);
  
 
     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
-    hd0D0VtxTrueptLSCsignPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0VtxTrueptLSCsignPM[i]->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
-    hd0D0VtxTrueptLSCsignPM[i]->SetYTitle("Entries");
-    flistLsCutsSignal->Add(hd0D0VtxTrueptLSCsignPM[i]);
+    hd0D0VtxTrueptLSCsignPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0VtxTrueptLSCsignPM->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
+    hd0D0VtxTrueptLSCsignPM->SetYTitle("Entries");
+    flistLsCutsSignal->Add(hd0D0VtxTrueptLSCsignPM);
     
     strnamept=namehist;
     strnamept.Append("SBMss_pt");
@@ -1265,35 +2578,36 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
     strtitlept+=fptbins[i+1];
     strtitlept.Append(" [GeV/c]");
     
-    hd0D0ptLSCsignSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0ptLSCsignSB[i]->SetXTitle("Impact parameter [#mum] ");
-    hd0D0ptLSCsignSB[i]->SetYTitle("Entries");
-    flistLsCutsSignal->Add(hd0D0ptLSCsignSB[i]);
+    hd0D0ptLSCsignSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0ptLSCsignSB->SetXTitle("Impact parameter [#mum] ");
+    hd0D0ptLSCsignSB->SetYTitle("Entries");
+    flistLsCutsSignal->Add(hd0D0ptLSCsignSB);
 
     strnamept.ReplaceAll("hd0D0","hMCd0D0");
-    hMCd0D0ptLSCsignSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hMCd0D0ptLSCsignSB[i]->SetXTitle("MC Impact parameter [#mum] ");
-    hMCd0D0ptLSCsignSB[i]->SetYTitle("Entries");
-    flistLsCutsSignal->Add(hMCd0D0ptLSCsignSB[i]);
+    hMCd0D0ptLSCsignSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hMCd0D0ptLSCsignSB->SetXTitle("MC Impact parameter [#mum] ");
+    hMCd0D0ptLSCsignSB->SetYTitle("Entries");
+    flistLsCutsSignal->Add(hMCd0D0ptLSCsignSB);
 
     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
-    hd0D0VtxTrueptLSCsignSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0VtxTrueptLSCsignSB[i]->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
-    hd0D0VtxTrueptLSCsignSB[i]->SetYTitle("Entries");
-    flistLsCutsSignal->Add(hd0D0VtxTrueptLSCsignSB[i]);
+    hd0D0VtxTrueptLSCsignSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0VtxTrueptLSCsignSB->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
+    hd0D0VtxTrueptLSCsignSB->SetYTitle("Entries");
+    flistLsCutsSignal->Add(hd0D0VtxTrueptLSCsignSB);
   }
 
 
   //############ LOOSE CUTS BACKGROUND HISTOGRAMS ###########
   //
   //   ######## global properties histos #######
-  TH2F *hCPtaVSd0d0LSCback=new TH2F("hCPtaVSd0d0LSCback","hCPtaVSd0d0_LooseCuts_Background",1000,-100000.,100000.,100,0.,1.);
+  TH2F *hCPtaVSd0d0LSCback=new TH2F("hCPtaVSd0d0LSCback","hCPtaVSd0d0_LooseCuts_Background",1000,-100000.,100000.,100,-1.,1.);
   TH1F *hSecVtxZLSCback=new TH1F("hSecVtxZLSCback","hSecVtxZ_LooseCuts_Background",1000,-8.,8.);
   TH1F *hSecVtxXLSCback=new TH1F("hSecVtxXLSCback","hSecVtxX_LooseCuts_Background",1000,-3000.,3000.);
   TH1F *hSecVtxYLSCback=new TH1F("hSecVtxYLSCback","hSecVtxY_LooseCuts_Background",1000,-3000.,3000.);
   TH2F *hSecVtxXYLSCback=new TH2F("hSecVtxXYLSCback","hSecVtxXY_LooseCuts_Background",1000,-3000.,3000.,1000,-3000.,3000.);
   TH1F *hSecVtxPhiLSCback=new TH1F("hSecVtxPhiLSCback","hSecVtxPhi_LooseCuts_Background",180,-180.1,180.1);
-  TH1F *hCPtaLSCback=new TH1F("hCPtaLSCback","hCPta_LooseCuts_Background",100,0.,1.);
+  TH1F *hd0singlTrackLSCback=new TH1F("hd0singlTrackLSCback","hd0singlTrackLooseCuts_Back",1000,-5000.,5000.);
+  TH1F *hCPtaLSCback=new TH1F("hCPtaLSCback","hCPta_LooseCuts_Background",100,-1.,1.);
   TH1F *hd0xd0LSCback=new TH1F("hd0xd0LSCback","hd0xd0_LooseCuts_Background",1000,-100000.,100000.);
   TH1F *hMassTrueLSCback=new TH1F("hMassTrueLSCback","D^{0} MC inv. Mass Loose Cuts Background(All momenta)",600,1.600,2.200);
   TH1F *hMassLSCback=new TH1F("hMassLSCback","D^{0} inv. Mass Loose Cuts Background (All momenta)",600,1.600,2.200);
@@ -1311,6 +2625,7 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistLsCutsBack->Add(hSecVtxXLSCback);
   flistLsCutsBack->Add(hSecVtxXYLSCback);
   flistLsCutsBack->Add(hSecVtxPhiLSCback);
+  flistLsCutsBack->Add(hd0singlTrackLSCback);
   flistLsCutsBack->Add(hCPtaLSCback);
   flistLsCutsBack->Add(hd0xd0LSCback);
   flistLsCutsBack->Add(hMassTrueLSCback);
@@ -1321,6 +2636,169 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistLsCutsBack->Add(hMassLSCbackSB);
 
 
+
+
+
+
+
+
+ //%%% NEW HISTOS %%%%%%%%%%%%%%%%
+  TH1F *hdcaLSCback=new TH1F("hdcaLSCback","hdca_LooseCuts_Backgr",100,0.,1000.);
+  hdcaLSCback->SetXTitle("dca   [#mum]");
+  hdcaLSCback->SetYTitle("Entries");
+  TH1F *hcosthetastarLSCback=new TH1F("hcosthetastarLSCback","hCosThetaStar_LooseCuts_Backgr",50,-1.,1.);
+  hcosthetastarLSCback->SetXTitle("cos #theta^{*}");
+  hcosthetastarLSCback->SetYTitle("Entries");
+  TH1F *hptD0LSCback=new TH1F("hptD0LSCback","D^{0} transverse momentum distribution",34,ptbinsD0arr);
+  hptD0LSCback->SetXTitle("p_{t}  [GeV/c]");
+  hptD0LSCback->SetYTitle("Entries");
+  TH1F *hptD0VsMaxPtLSCback=new TH1F("hptD0VsMaxPtLSCback","Difference between D^{0} pt and highest (or second) pt",400,-50.,50.);
+  TH2F *hptD0PTallsqrtLSCback=new TH2F("hptD0PTallsqrtLSCback","D^{0} pt Vs Sqrt(Sum pt square)",34,ptbinsD0arr,200,dumbinning);
+  TH2F *hptD0PTallLSCback=new TH2F("hptD0PTallLSCback","D^{0} pt Vs Sum pt ",34,ptbinsD0arr,200,dumbinning);
+  TH2F *hptD0vsptBLSCback=new TH2F("hptD0vsptBLSCback","D^{0} pt Vs B pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hpD0vspBLSCback=new TH2F("hpD0vspBLSCback","D^{0} tot momentum Vs B tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hptD0vsptcquarkLSCback=new TH2F("hptD0vsptcquarkLSCback","D^{0} pt Vs cquark pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hpD0vspcquarkLSCback=new TH2F("hpD0vspcquarkLSCback","D^{0} tot momentum Vs cquark tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  flistLsCutsBack->Add(hdcaLSCback);
+  flistLsCutsBack->Add(hcosthetastarLSCback);
+  flistLsCutsBack->Add(hptD0LSCback);
+  flistLsCutsBack->Add(hptD0VsMaxPtLSCback);
+  flistLsCutsBack->Add(hptD0PTallsqrtLSCback);
+  flistLsCutsBack->Add(hptD0PTallLSCback);
+  flistLsCutsBack->Add(hptD0vsptBLSCback);
+  flistLsCutsBack->Add(hpD0vspBLSCback);
+  flistLsCutsBack->Add(hptD0vsptcquarkLSCback);
+  flistLsCutsBack->Add(hpD0vspcquarkLSCback);
+  TH1F *hd0zD0ptLSCback;
+  TH1F *hInvMassD0LSCback,*hInvMassD0barLSCback;
+  TH2F *hInvMassPtLSCback=new TH2F("hInvMassPtLSCback","Candidate p_{t} Vs invariant mass",330,1.700,2.030,200,0.,20.);
+ THnSparseF *hSparseLSCback=new THnSparseF("hSparseLSCback","Candidate Masses, pt, Imp Par;massD0;massD0bar;pt;impactpar;selcase",5,nbinsSparse);
+  hSparseLSCback->SetBinEdges(0,massbins);
+  hSparseLSCback->SetBinEdges(1,massbins);
+  hSparseLSCback->SetBinEdges(2,ptbinsForNsparse);
+  hSparseLSCback->SetBinEdges(3,impparbins);
+  hSparseLSCback->SetBinEdges(4,massHypoBins); 
+  flistLsCutsBack->Add(hSparseLSCback);
+  TH1F *hetaLSCback;
+  TH1F *hCosPDPBLSCback;
+  TH1F *hCosPcPDLSCback;
+  flistLsCutsBack->Add(hInvMassPtLSCback);
+ // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
+  TH2F *hd0D0VSd0xd0LSCbackpt;
+  TH2F *hangletracksVSd0xd0LSCbackpt;
+  TH2F *hangletracksVSd0D0LSCbackpt;
+  TH1F *hd0xd0LSCbackpt;
+
+  TH2F *hTOFpidLSCback=new TH2F("hTOFpidLSCback","TOF time VS momentum",10,0.,4.,50,-50000.,50000.);
+  flistLsCutsBack->Add(hTOFpidLSCback);
+
+  for(Int_t i=0;i<fnbins;i++){
+    namehist="hd0zD0ptLSCback_pt";
+    namehist+=i;
+    titlehist="d0(z) Loose Cuts Backgr ptbin=";
+    titlehist+=i;
+    hd0zD0ptLSCback=new TH1F(namehist.Data(),titlehist.Data(),1000,-3000,3000.);
+    hd0zD0ptLSCback->SetXTitle("d_{0}(z)    [#mum]");
+    hd0zD0ptLSCback->SetYTitle("Entries");
+    flistLsCutsBack->Add(hd0zD0ptLSCback);
+
+    namehist="hInvMassD0LSCback_pt";
+    namehist+=i;
+    titlehist="Invariant Mass Loose Cuts Backgr ptbin=";
+    titlehist+=i;
+    hInvMassD0LSCback=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
+    hInvMassD0LSCback->SetXTitle("Invariant Mass    [GeV]");
+    hInvMassD0LSCback->SetYTitle("Entries");
+    flistLsCutsBack->Add(hInvMassD0LSCback);
+    
+    namehist="hInvMassD0barLSCback_pt";
+    namehist+=i;
+    titlehist="Invariant Mass D0bar Loose Cuts Back ptbin=";
+    titlehist+=i;
+    hInvMassD0barLSCback=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
+    hInvMassD0barLSCback->SetXTitle("Invariant Mass    [GeV]");
+    hInvMassD0barLSCback->SetYTitle("Entries");
+    flistLsCutsBack->Add(hInvMassD0barLSCback);
+
+
+    namehist="hetaLSCback_pt";
+    namehist+=i;
+    titlehist="eta Loose Cuts Backgr ptbin=";
+    titlehist+=i;
+    hetaLSCback=new TH1F(namehist.Data(),titlehist.Data(),100,-3.,3.);
+    hetaLSCback->SetXTitle("Pseudorapidity");
+    hetaLSCback->SetYTitle("Entries");
+    flistLsCutsBack->Add(hetaLSCback);
+
+    namehist="hCosPDPBLSCback_pt";
+    namehist+=i;
+    titlehist="Cosine between D0 momentum and B momentum, ptbin=";
+    titlehist+=i;
+    hCosPDPBLSCback=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
+    hCosPDPBLSCback->SetXTitle("Cosine between D0 momentum and B momentum");
+    hCosPDPBLSCback->SetYTitle("Entries");
+    flistLsCutsBack->Add(hCosPDPBLSCback);
+
+    namehist="hCosPcPDLSCback_pt";
+    namehist+=i;
+    titlehist="Cosine between cquark momentum and D0 momentum, ptbin=";
+    titlehist+=i;
+    hCosPcPDLSCback=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
+    hCosPcPDLSCback->SetXTitle("Cosine between c quark momentum and D0 momentum");
+    hCosPcPDLSCback->SetYTitle("Entries");
+    flistLsCutsBack->Add(hCosPcPDLSCback);
+
+ // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
+    namehist="hd0xd0LSCback_pt";
+    namehist+=i;
+    titlehist="d0xd0 Loose Cuts Back ptbin=";
+    titlehist+=i;
+    hd0xd0LSCbackpt=new TH1F(namehist.Data(),titlehist.Data(),1000,-50000.,10000.);
+    hd0xd0LSCbackpt->SetXTitle("d_{0}^{K}xd_{0}^{#pi}   [#mum^2]");
+    hd0xd0LSCbackpt->SetYTitle("Entries");
+    flistLsCutsBack->Add(hd0xd0LSCbackpt);
+
+
+    namehist="hd0D0VSd0xd0LSCback_pt";
+    namehist+=i;
+    titlehist="d_{0}^{D^{0}} Vs d_{0}^{K}xd_{0}^{#pi} Loose Cuts Back ptbin=";
+    titlehist+=i;
+    hd0D0VSd0xd0LSCbackpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,100,-300,300);
+    hd0D0VSd0xd0LSCbackpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
+    hd0D0VSd0xd0LSCbackpt->SetYTitle(" d_{0}^{D^{0}}    [#mum]");
+    flistLsCutsBack->Add(hd0D0VSd0xd0LSCbackpt);
+    
+    
+    namehist="hangletracksVSd0xd0LSCback_pt";
+    namehist+=i;
+    titlehist="Angle between K and #pi tracks Vs d_{0}^{K}xd_{0}^{#pi} Loose Cuts Back ptbin=";
+    titlehist+=i;
+    hangletracksVSd0xd0LSCbackpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,40,-0.1,3.24);
+    hangletracksVSd0xd0LSCbackpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
+    hangletracksVSd0xd0LSCbackpt->SetYTitle(" angle between K and #p tracks  [rad]");
+    flistLsCutsBack->Add(hangletracksVSd0xd0LSCbackpt);
+    
+
+    namehist="hangletracksVSd0D0LSCback_pt";
+    namehist+=i;
+    titlehist="Angle between K and #pi tracks Vs d_{0}^{D^{0}} Loose Cuts Back ptbin=";
+    titlehist+=i;
+    hangletracksVSd0D0LSCbackpt=new TH2F(namehist.Data(),titlehist.Data(),200,-400.,400.,40,-0.12,3.24);
+    hangletracksVSd0D0LSCbackpt->SetXTitle(" d_{0}^{D^{0}} [#mum]");
+    hangletracksVSd0D0LSCbackpt->SetYTitle(" angle between K and #p tracks  [rad]");
+    flistLsCutsBack->Add(hangletracksVSd0D0LSCbackpt);
+    
+  }
+  // %%%%%%%% END OF NEW HISTOS %%%%%%%%%%%%%
+  //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+
+
+
   // ####### d0 D0 histos ############
   
  TH1F *hd0D0LSCbackPM = new TH1F("hd0D0LSCbackPM","D^{0} impact par. plot , Loose Cuts ,Background,Mass Peak (All momenta)",1000,-1000.,1000.);
@@ -1354,12 +2832,12 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistLsCutsBack->Add(hd0D0VtxTrueLSCbackSB);
   flistLsCutsBack->Add(hMCd0D0LSCbackSB);
   
-  TH1F **hd0D0ptLSCbackPM=new TH1F*[fnbins];
-  TH1F **hMCd0D0ptLSCbackPM=new TH1F*[fnbins];
-  TH1F ** hd0D0VtxTrueptLSCbackPM=new TH1F*[fnbins];
-  TH1F **hd0D0ptLSCbackSB=new TH1F*[fnbins];
-  TH1F **hMCd0D0ptLSCbackSB=new TH1F*[fnbins];
-  TH1F ** hd0D0VtxTrueptLSCbackSB=new TH1F*[fnbins];
+  TH1F *hd0D0ptLSCbackPM;
+  TH1F *hMCd0D0ptLSCbackPM;
+  TH1F *hd0D0VtxTrueptLSCbackPM;
+  TH1F *hd0D0ptLSCbackSB;
+  TH1F *hMCd0D0ptLSCbackSB;
+  TH1F *hd0D0VtxTrueptLSCbackSB;
   namehist="hd0D0ptLSCback_";
   titlehist="D^{0} impact par. plot, Loose Cuts, Background, ";
   for(Int_t i=0;i<fnbins;i++){
@@ -1374,23 +2852,23 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
     strtitlept+=fptbins[i+1];
     strtitlept.Append(" [GeV/c]");
     
-    hd0D0ptLSCbackPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0ptLSCbackPM[i]->SetXTitle("Impact parameter [#mum] ");
-    hd0D0ptLSCbackPM[i]->SetYTitle("Entries");
-    flistLsCutsBack->Add(hd0D0ptLSCbackPM[i]);
+    hd0D0ptLSCbackPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0ptLSCbackPM->SetXTitle("Impact parameter [#mum] ");
+    hd0D0ptLSCbackPM->SetYTitle("Entries");
+    flistLsCutsBack->Add(hd0D0ptLSCbackPM);
 
     strnamept.ReplaceAll("hd0D0","hMCd0D0");
-    hMCd0D0ptLSCbackPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hMCd0D0ptLSCbackPM[i]->SetXTitle("MC Impact parameter [#mum] ");
-    hMCd0D0ptLSCbackPM[i]->SetYTitle("Entries");
-    flistLsCutsBack->Add(hMCd0D0ptLSCbackPM[i]);
+    hMCd0D0ptLSCbackPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hMCd0D0ptLSCbackPM->SetXTitle("MC Impact parameter [#mum] ");
+    hMCd0D0ptLSCbackPM->SetYTitle("Entries");
+    flistLsCutsBack->Add(hMCd0D0ptLSCbackPM);
  
 
     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
-    hd0D0VtxTrueptLSCbackPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0VtxTrueptLSCbackPM[i]->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
-    hd0D0VtxTrueptLSCbackPM[i]->SetYTitle("Entries");
-    flistLsCutsBack->Add(hd0D0VtxTrueptLSCbackPM[i]);
+    hd0D0VtxTrueptLSCbackPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0VtxTrueptLSCbackPM->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
+    hd0D0VtxTrueptLSCbackPM->SetYTitle("Entries");
+    flistLsCutsBack->Add(hd0D0VtxTrueptLSCbackPM);
     
     strnamept=namehist;
     strnamept.Append("SBMss_pt");
@@ -1403,22 +2881,22 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
     strtitlept+=fptbins[i+1];
     strtitlept.Append(" [GeV/c]");
     
-    hd0D0ptLSCbackSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0ptLSCbackSB[i]->SetXTitle("Impact parameter [#mum] ");
-    hd0D0ptLSCbackSB[i]->SetYTitle("Entries");
-    flistLsCutsBack->Add(hd0D0ptLSCbackSB[i]);
+    hd0D0ptLSCbackSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0ptLSCbackSB->SetXTitle("Impact parameter [#mum] ");
+    hd0D0ptLSCbackSB->SetYTitle("Entries");
+    flistLsCutsBack->Add(hd0D0ptLSCbackSB);
 
     strnamept.ReplaceAll("hd0D0","hMCd0D0");
-    hMCd0D0ptLSCbackSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hMCd0D0ptLSCbackSB[i]->SetXTitle("MC Impact parameter [#mum] ");
-    hMCd0D0ptLSCbackSB[i]->SetYTitle("Entries");
-    flistLsCutsBack->Add(hMCd0D0ptLSCbackSB[i]);
+    hMCd0D0ptLSCbackSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hMCd0D0ptLSCbackSB->SetXTitle("MC Impact parameter [#mum] ");
+    hMCd0D0ptLSCbackSB->SetYTitle("Entries");
+    flistLsCutsBack->Add(hMCd0D0ptLSCbackSB);
 
     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
-    hd0D0VtxTrueptLSCbackSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0VtxTrueptLSCbackSB[i]->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
-    hd0D0VtxTrueptLSCbackSB[i]->SetYTitle("Entries");
-    flistLsCutsBack->Add(hd0D0VtxTrueptLSCbackSB[i]);
+    hd0D0VtxTrueptLSCbackSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0VtxTrueptLSCbackSB->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
+    hd0D0VtxTrueptLSCbackSB->SetYTitle("Entries");
+    flistLsCutsBack->Add(hd0D0VtxTrueptLSCbackSB);
   }
 
 
@@ -1427,13 +2905,14 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   //
   //#######  global properties histos
 
-  TH2F *hCPtaVSd0d0LSCfromB=new TH2F("hCPtaVSd0d0LSCfromB","hCPtaVSd0d0_LooseCuts_FromB",1000,-100000.,100000.,100,0.,1.);
+  TH2F *hCPtaVSd0d0LSCfromB=new TH2F("hCPtaVSd0d0LSCfromB","hCPtaVSd0d0_LooseCuts_FromB",1000,-100000.,100000.,100,-1.,1.);
   TH1F *hSecVtxZLSCfromB=new TH1F("hSecVtxZLSCfromB","hSecVtxZ_LooseCuts_FromB",1000,-8.,8.);
   TH1F *hSecVtxXLSCfromB=new TH1F("hSecVtxXLSCfromB","hSecVtxX_LooseCuts_FromB",1000,-3000.,3000.);
   TH1F *hSecVtxYLSCfromB=new TH1F("hSecVtxYLSCfromB","hSecVtxY_LooseCuts_FromB",1000,-3000.,3000.);
   TH2F *hSecVtxXYLSCfromB=new TH2F("hSecVtxXYLSCfromB","hSecVtxXY_LooseCuts_FromB",1000,-3000.,3000.,1000,-3000.,3000.);
   TH1F *hSecVtxPhiLSCfromB=new TH1F("hSecVtxPhiLSCfromB","hSecVtxPhi_LooseCuts_FromB",180,-180.1,180.1);
-  TH1F *hCPtaLSCfromB=new TH1F("hCPtaLSCfromB","hCPta_LooseCuts_FromB",100,0.,1.);
+  TH1F *hd0singlTrackLSCfromB=new TH1F("hd0singlTrackLSCfromB","hd0singlTrackLooseCuts_FromB",1000,-5000.,5000.);
+  TH1F *hCPtaLSCfromB=new TH1F("hCPtaLSCfromB","hCPta_LooseCuts_FromB",100,-1.,1.);
   TH1F *hd0xd0LSCfromB=new TH1F("hd0xd0LSCfromB","hd0xd0_LooseCuts_FromB",1000,-100000.,100000.);
   TH1F *hMassTrueLSCfromB=new TH1F("hMassTrueLSCfromB","D^{0} MC inv. Mass Loose Cuts FromB(All momenta)",600,1.600,2.200);
   TH1F *hMassLSCfromB=new TH1F("hMassLSCfromB","D^{0} inv. Mass Loose Cuts FromB (All momenta)",600,1.600,2.200);
@@ -1451,6 +2930,7 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistLsCutsFromB->Add(hSecVtxXLSCfromB);
   flistLsCutsFromB->Add(hSecVtxXYLSCfromB);
   flistLsCutsFromB->Add(hSecVtxPhiLSCfromB);
+  flistLsCutsFromB->Add(hd0singlTrackLSCfromB);
   flistLsCutsFromB->Add(hCPtaLSCfromB);
   flistLsCutsFromB->Add(hd0xd0LSCfromB);
   flistLsCutsFromB->Add(hMassTrueLSCfromB);
@@ -1460,6 +2940,175 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistLsCutsFromB->Add(hMassTrueLSCfromBSB);
   flistLsCutsFromB->Add(hMassLSCfromBSB);
 
+
+
+
+ //%%% NEW HISTOS %%%%%%%%%%%%%%%%
+  TH1F *hdcaLSCfromB=new TH1F("hdcaLSCfromB","hdca_LooseCuts_FromB",100,0.,1000.);
+  hdcaLSCfromB->SetXTitle("dca   [#mum]");
+  hdcaLSCfromB->SetYTitle("Entries");
+  TH1F *hcosthetastarLSCfromB=new TH1F("hcosthetastarLSCfromB","hCosThetaStar_LooseCuts_FromB",50,-1.,1.);
+  hcosthetastarLSCfromB->SetXTitle("cos #theta^{*}");
+  hcosthetastarLSCfromB->SetYTitle("Entries");
+  TH1F *hptD0LSCfromB=new TH1F("hptD0LSCfromB","D^{0} transverse momentum distribution",34,ptbinsD0arr);
+  hptD0LSCfromB->SetXTitle("p_{t}  [GeV/c]");
+  hptD0LSCfromB->SetYTitle("Entries");
+  TH1F *hptD0VsMaxPtLSCfromB=new TH1F("hptD0VsMaxPtLSCfromB","Difference between D^{0} pt and highest (or second) pt",400,-50.,50.);
+  TH2F *hptD0PTallsqrtLSCfromB=new TH2F("hptD0PTallsqrtLSCfromB","D^{0} pt Vs Sqrt(Sum pt square)",34,ptbinsD0arr,200,dumbinning);
+  TH2F *hptD0PTallLSCfromB=new TH2F("hptD0PTallLSCfromB","D^{0} pt Vs Sum pt ",34,ptbinsD0arr,200,dumbinning);
+  TH2F *hptD0vsptBLSCfromB=new TH2F("hptD0vsptBLSCfromB","D^{0} pt Vs B pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hpD0vspBLSCfromB=new TH2F("hpD0vspBLSCfromB","D^{0} tot momentum Vs B tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hptD0vsptcquarkLSCfromB=new TH2F("hptD0vsptcquarkLSCfromB","D^{0} pt Vs cquark pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hpD0vspcquarkLSCfromB=new TH2F("hpD0vspcquarkLSCfromB","D^{0} tot momentum Vs cquark tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  flistLsCutsFromB->Add(hdcaLSCfromB);
+  flistLsCutsFromB->Add(hcosthetastarLSCfromB);
+  flistLsCutsFromB->Add(hptD0LSCfromB);
+  flistLsCutsFromB->Add(hptD0VsMaxPtLSCfromB);
+  flistLsCutsFromB->Add(hptD0PTallsqrtLSCfromB);
+  flistLsCutsFromB->Add(hptD0PTallLSCfromB);
+  flistLsCutsFromB->Add(hptD0vsptBLSCfromB);
+  flistLsCutsFromB->Add(hpD0vspBLSCfromB);
+  flistLsCutsFromB->Add(hptD0vsptcquarkLSCfromB);
+  flistLsCutsFromB->Add(hpD0vspcquarkLSCfromB);
+  TH1F *hd0zD0ptLSCfromB;
+  TH1F *hInvMassD0LSCfromB,*hInvMassD0barLSCfromB;
+  TH2F *hInvMassPtLSCfromB=new TH2F("hInvMassPtLSCfromB","Candidate p_{t} Vs invariant mass",330,1.700,2.030,200,0.,20.);
+ THnSparseF *hSparseLSCfromB=new THnSparseF("hSparseLSCfromB","Candidate Masses, pt, Imp Par;massD0;massD0bar;pt;impactpar;selcase",5,nbinsSparse);
+  hSparseLSCfromB->SetBinEdges(0,massbins);
+  hSparseLSCfromB->SetBinEdges(1,massbins);
+  hSparseLSCfromB->SetBinEdges(2,ptbinsForNsparse);
+  hSparseLSCfromB->SetBinEdges(3,impparbins);
+  hSparseLSCfromB->SetBinEdges(4,massHypoBins); 
+  flistLsCutsFromB->Add(hSparseLSCfromB);
+
+
+  THnSparseF *hSparseRecoLSCfromB=new THnSparseF("hSparseRecoLSCfromB","Candidate Masses, pt, Imp Par;massD0;massD0bar;pt;impactpar;selcase",5,nbinsSparse);
+  hSparseRecoLSCfromB->SetBinEdges(0,massbins);
+  hSparseRecoLSCfromB->SetBinEdges(1,massbins);
+  hSparseRecoLSCfromB->SetBinEdges(2,ptbinsForNsparse);
+  hSparseRecoLSCfromB->SetBinEdges(3,impparbins);
+  hSparseRecoLSCfromB->SetBinEdges(4,massHypoBins); 
+  flistLsCutsFromB->Add(hSparseRecoLSCfromB);
+
+
+  TH1F *hetaLSCfromB;
+  TH1F *hCosPDPBLSCfromB;
+  TH1F *hCosPcPDLSCfromB;
+  flistLsCutsFromB->Add(hInvMassPtLSCfromB);
+   // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
+  TH2F *hd0D0VSd0xd0LSCfromBpt;
+  TH2F *hangletracksVSd0xd0LSCfromBpt;
+  TH2F *hangletracksVSd0D0LSCfromBpt;
+  TH1F *hd0xd0LSCfromBpt;
+
+
+  TH2F *hTOFpidLSCfromB=new TH2F("hTOFpidLSCfromB","TOF time VS momentum",10,0.,4.,50,-50000.,50000.);
+  flistLsCutsFromB->Add(hTOFpidLSCfromB);
+
+  for(Int_t i=0;i<fnbins;i++){
+    namehist="hd0zD0ptLSCfromB_pt";
+    namehist+=i;
+    titlehist="d0(z) Loose Cuts FromBm ptbin=";
+    titlehist+=i;
+    hd0zD0ptLSCfromB=new TH1F(namehist.Data(),titlehist.Data(),1000,-3000,3000.);
+    hd0zD0ptLSCfromB->SetXTitle("d_{0}(z)    [#mum]");
+    hd0zD0ptLSCfromB->SetYTitle("Entries");
+    flistLsCutsFromB->Add(hd0zD0ptLSCfromB);
+
+    namehist="hInvMassD0LSCfromB_pt";
+    namehist+=i;
+    titlehist="Invariant Mass Loose Cuts FromB ptbin=";
+    titlehist+=i;
+    hInvMassD0LSCfromB=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
+    hInvMassD0LSCfromB->SetXTitle("Invariant Mass    [GeV]");
+    hInvMassD0LSCfromB->SetYTitle("Entries");
+    flistLsCutsFromB->Add(hInvMassD0LSCfromB);
+
+    namehist="hInvMassD0barLSCfromB_pt";
+    namehist+=i;
+    titlehist="Invariant Mass D0bar Loose Cuts FromB ptbin=";
+    titlehist+=i;
+    hInvMassD0barLSCfromB=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
+    hInvMassD0barLSCfromB->SetXTitle("Invariant Mass    [GeV]");
+    hInvMassD0barLSCfromB->SetYTitle("Entries");
+    flistLsCutsFromB->Add(hInvMassD0barLSCfromB);
+
+    namehist="hetaLSCfromB_pt";
+    namehist+=i;
+    titlehist="eta Loose Cuts FromB ptbin=";
+    titlehist+=i;
+    hetaLSCfromB=new TH1F(namehist.Data(),titlehist.Data(),100,-3.,3.);
+    hetaLSCfromB->SetXTitle("Pseudorapidity");
+    hetaLSCfromB->SetYTitle("Entries");
+    flistLsCutsFromB->Add(hetaLSCfromB);
+
+    namehist="hCosPDPBLSCfromB_pt";
+    namehist+=i;
+    titlehist="Cosine between D0 momentum and B momentum, ptbin=";
+    titlehist+=i;
+    hCosPDPBLSCfromB=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
+    hCosPDPBLSCfromB->SetXTitle("Cosine between D0 momentum and B momentum");
+    hCosPDPBLSCfromB->SetYTitle("Entries");
+    flistLsCutsFromB->Add(hCosPDPBLSCfromB);
+
+    namehist="hCosPcPDLSCfromB_pt";
+    namehist+=i;
+    titlehist="Cosine between cquark momentum and D0 momentum, ptbin=";
+    titlehist+=i;
+    hCosPcPDLSCfromB=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
+    hCosPcPDLSCfromB->SetXTitle("Cosine between c quark momentum and D0 momentum");
+    hCosPcPDLSCfromB->SetYTitle("Entries");
+    flistLsCutsFromB->Add(hCosPcPDLSCfromB);
+
+ // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
+    namehist="hd0xd0LSCfromB_pt";
+    namehist+=i;
+    titlehist="d0xd0 Loose Cuts FromB ptbin=";
+    titlehist+=i;
+    hd0xd0LSCfromBpt=new TH1F(namehist.Data(),titlehist.Data(),1000,-50000.,10000.);
+    hd0xd0LSCfromBpt->SetXTitle("d_{0}^{K}xd_{0}^{#pi}   [#mum^2]");
+    hd0xd0LSCfromBpt->SetYTitle("Entries");
+    flistLsCutsFromB->Add(hd0xd0LSCfromBpt);
+
+
+    namehist="hd0D0VSd0xd0LSCfromB_pt";
+    namehist+=i;
+    titlehist="d_{0}^{D^{0}} Vs d_{0}^{K}xd_{0}^{#pi} Loose Cuts FromB ptbin=";
+    titlehist+=i;
+    hd0D0VSd0xd0LSCfromBpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,100,-300,300);
+    hd0D0VSd0xd0LSCfromBpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
+    hd0D0VSd0xd0LSCfromBpt->SetYTitle(" d_{0}^{D^{0}}    [#mum]");
+    flistLsCutsFromB->Add(hd0D0VSd0xd0LSCfromBpt);
+    
+    
+    namehist="hangletracksVSd0xd0LSCfromB_pt";
+    namehist+=i;
+    titlehist="Angle between K and #pi tracks Vs d_{0}^{K}xd_{0}^{#pi} Loose Cuts FromB ptbin=";
+    titlehist+=i;
+    hangletracksVSd0xd0LSCfromBpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,40,-0.1,3.24);
+    hangletracksVSd0xd0LSCfromBpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
+    hangletracksVSd0xd0LSCfromBpt->SetYTitle(" angle between K and #p tracks  [rad]");
+    flistLsCutsFromB->Add(hangletracksVSd0xd0LSCfromBpt);
+    
+
+    namehist="hangletracksVSd0D0LSCfromB_pt";
+    namehist+=i;
+    titlehist="Angle between K and #pi tracks Vs d_{0}^{D^{0}} Loose Cuts FromB ptbin=";
+    titlehist+=i;
+    hangletracksVSd0D0LSCfromBpt=new TH2F(namehist.Data(),titlehist.Data(),200,-400.,400.,40,-0.12,3.24);
+    hangletracksVSd0D0LSCfromBpt->SetXTitle(" d_{0}^{D^{0}} [#mum]");
+    hangletracksVSd0D0LSCfromBpt->SetYTitle(" angle between K and #p tracks  [rad]");
+    flistLsCutsFromB->Add(hangletracksVSd0D0LSCfromBpt);
+    
+  }
+  // %%%%%%%% END OF NEW HISTOS %%%%%%%%%%%%%
+  //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+
   // ######### d0 D0 histos ##############
   TH1F *hd0D0LSCfromBPM = new TH1F("hd0D0LSCfromBPM","D^{0} impact par. plot , Loose Cuts ,FromB,Mass Peak (All momenta)",1000,-1000.,1000.);
   hd0D0LSCfromBPM->SetXTitle("Impact parameter [#mum]");
@@ -1492,12 +3141,12 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistLsCutsFromB->Add(hd0D0VtxTrueLSCfromBSB);
   flistLsCutsFromB->Add(hMCd0D0LSCfromBSB);
   
-  TH1F **hd0D0ptLSCfromBPM=new TH1F*[fnbins];
-  TH1F **hMCd0D0ptLSCfromBPM=new TH1F*[fnbins];
-  TH1F ** hd0D0VtxTrueptLSCfromBPM=new TH1F*[fnbins];
-  TH1F **hd0D0ptLSCfromBSB=new TH1F*[fnbins];
-  TH1F **hMCd0D0ptLSCfromBSB=new TH1F*[fnbins];
-  TH1F ** hd0D0VtxTrueptLSCfromBSB=new TH1F*[fnbins];
+  TH1F *hd0D0ptLSCfromBPM;
+  TH1F *hMCd0D0ptLSCfromBPM;
+  TH1F *hd0D0VtxTrueptLSCfromBPM;
+  TH1F *hd0D0ptLSCfromBSB;
+  TH1F *hMCd0D0ptLSCfromBSB;
+  TH1F *hd0D0VtxTrueptLSCfromBSB;
   namehist="hd0D0ptLSCfromB_";
   titlehist="D^{0} impact par. plot, Loose Cuts, FromB, ";
   for(Int_t i=0;i<fnbins;i++){
@@ -1512,23 +3161,23 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
     strtitlept+=fptbins[i+1];
     strtitlept.Append(" [GeV/c]");
     
-    hd0D0ptLSCfromBPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0ptLSCfromBPM[i]->SetXTitle("Impact parameter [#mum] ");
-    hd0D0ptLSCfromBPM[i]->SetYTitle("Entries");
-    flistLsCutsFromB->Add(hd0D0ptLSCfromBPM[i]);
+    hd0D0ptLSCfromBPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0ptLSCfromBPM->SetXTitle("Impact parameter [#mum] ");
+    hd0D0ptLSCfromBPM->SetYTitle("Entries");
+    flistLsCutsFromB->Add(hd0D0ptLSCfromBPM);
 
     strnamept.ReplaceAll("hd0D0","hMCd0D0");
-    hMCd0D0ptLSCfromBPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hMCd0D0ptLSCfromBPM[i]->SetXTitle("MC Impact parameter [#mum] ");
-    hMCd0D0ptLSCfromBPM[i]->SetYTitle("Entries");
-    flistLsCutsFromB->Add(hMCd0D0ptLSCfromBPM[i]);
+    hMCd0D0ptLSCfromBPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hMCd0D0ptLSCfromBPM->SetXTitle("MC Impact parameter [#mum] ");
+    hMCd0D0ptLSCfromBPM->SetYTitle("Entries");
+    flistLsCutsFromB->Add(hMCd0D0ptLSCfromBPM);
  
 
     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
-    hd0D0VtxTrueptLSCfromBPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0VtxTrueptLSCfromBPM[i]->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
-    hd0D0VtxTrueptLSCfromBPM[i]->SetYTitle("Entries");
-    flistLsCutsFromB->Add(hd0D0VtxTrueptLSCfromBPM[i]);
+    hd0D0VtxTrueptLSCfromBPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0VtxTrueptLSCfromBPM->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
+    hd0D0VtxTrueptLSCfromBPM->SetYTitle("Entries");
+    flistLsCutsFromB->Add(hd0D0VtxTrueptLSCfromBPM);
     
     strnamept=namehist;
     strnamept.Append("SBMss_pt");
@@ -1541,22 +3190,22 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
     strtitlept+=fptbins[i+1];
     strtitlept.Append(" [GeV/c]");
     
-    hd0D0ptLSCfromBSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0ptLSCfromBSB[i]->SetXTitle("Impact parameter [#mum] ");
-    hd0D0ptLSCfromBSB[i]->SetYTitle("Entries");
-    flistLsCutsFromB->Add(hd0D0ptLSCfromBSB[i]);
+    hd0D0ptLSCfromBSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0ptLSCfromBSB->SetXTitle("Impact parameter [#mum] ");
+    hd0D0ptLSCfromBSB->SetYTitle("Entries");
+    flistLsCutsFromB->Add(hd0D0ptLSCfromBSB);
 
     strnamept.ReplaceAll("hd0D0","hMCd0D0");
-    hMCd0D0ptLSCfromBSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hMCd0D0ptLSCfromBSB[i]->SetXTitle("MC Impact parameter [#mum] ");
-    hMCd0D0ptLSCfromBSB[i]->SetYTitle("Entries");
-    flistLsCutsFromB->Add(hMCd0D0ptLSCfromBSB[i]);
+    hMCd0D0ptLSCfromBSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hMCd0D0ptLSCfromBSB->SetXTitle("MC Impact parameter [#mum] ");
+    hMCd0D0ptLSCfromBSB->SetYTitle("Entries");
+    flistLsCutsFromB->Add(hMCd0D0ptLSCfromBSB);
 
     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
-    hd0D0VtxTrueptLSCfromBSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0VtxTrueptLSCfromBSB[i]->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
-    hd0D0VtxTrueptLSCfromBSB[i]->SetYTitle("Entries");
-    flistLsCutsFromB->Add(hd0D0VtxTrueptLSCfromBSB[i]);
+    hd0D0VtxTrueptLSCfromBSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0VtxTrueptLSCfromBSB->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
+    hd0D0VtxTrueptLSCfromBSB->SetYTitle("Entries");
+    flistLsCutsFromB->Add(hd0D0VtxTrueptLSCfromBSB);
   }
 
 
@@ -1564,13 +3213,14 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
  //############ LOOSE CUTS FROM DSTAR HISTOGRAMS ###########
  //
   //############## global properties histos
-  TH2F *hCPtaVSd0d0LSCfromDstar=new TH2F("hCPtaVSd0d0LSCfromDstar","hCPtaVSd0d0_LooseCuts_FromDStar",1000,-100000.,100000.,100,0.,1.);
+  TH2F *hCPtaVSd0d0LSCfromDstar=new TH2F("hCPtaVSd0d0LSCfromDstar","hCPtaVSd0d0_LooseCuts_FromDStar",1000,-100000.,100000.,100,-1.,1.);
   TH1F *hSecVtxZLSCfromDstar=new TH1F("hSecVtxZLSCfromDstar","hSecVtxZ_LooseCuts_FromDStar",1000,-8.,8.);
   TH1F *hSecVtxXLSCfromDstar=new TH1F("hSecVtxXLSCfromDstar","hSecVtxX_LooseCuts_FromDStar",1000,-3000.,3000.);
   TH1F *hSecVtxYLSCfromDstar=new TH1F("hSecVtxYLSCfromDstar","hSecVtxY_LooseCuts_FromDStar",1000,-3000.,3000.);
   TH2F *hSecVtxXYLSCfromDstar=new TH2F("hSecVtxXYLSCfromDstar","hSecVtxXY_LooseCuts_FromDStar",1000,-3000.,3000.,1000,-3000.,3000.);
   TH1F *hSecVtxPhiLSCfromDstar=new TH1F("hSecVtxPhiLSCfromDstar","hSecVtxPhi_LooseCuts_FromDStar",180,-180.1,180.1);
-  TH1F *hCPtaLSCfromDstar=new TH1F("hCPtaLSCfromDstar","hCPta_LooseCuts_FromDStar",100,0.,1.);
+  TH1F *hd0singlTrackLSCfromDstar=new TH1F("hd0singlTrackLSCfromDstar","hd0singlTrackLooseCuts_FromDstar",1000,-5000.,5000.);
+  TH1F *hCPtaLSCfromDstar=new TH1F("hCPtaLSCfromDstar","hCPta_LooseCuts_FromDStar",100,-1.,1.);
   TH1F *hd0xd0LSCfromDstar=new TH1F("hd0xd0LSCfromDstar","hd0xd0_LooseCuts_FromDStar",1000,-100000.,100000.);
   TH1F *hMassTrueLSCfromDstar=new TH1F("hMassTrueLSCfromDstar","D^{0} MC inv. Mass Loose Cuts FromDStar(All momenta)",600,1.600,2.200);
   TH1F *hMassLSCfromDstar=new TH1F("hMassLSCfromDstar","D^{0} inv. Mass Loose Cuts FromDStar (All momenta)",600,1.600,2.200);
@@ -1588,15 +3238,178 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistLsCutsFromDstar->Add(hSecVtxXLSCfromDstar);
   flistLsCutsFromDstar->Add(hSecVtxXYLSCfromDstar);
   flistLsCutsFromDstar->Add(hSecVtxPhiLSCfromDstar);
+  flistLsCutsFromDstar->Add(hd0singlTrackLSCfromDstar);
   flistLsCutsFromDstar->Add(hCPtaLSCfromDstar);
   flistLsCutsFromDstar->Add(hd0xd0LSCfromDstar);
   flistLsCutsFromDstar->Add(hMassTrueLSCfromDstar);
   flistLsCutsFromDstar->Add(hMassLSCfromDstar);
- flistLsCutsFromDstar->Add(hMassTrueLSCfromDstarPM);
 flistLsCutsFromDstar->Add(hMassTrueLSCfromDstarPM);
   flistLsCutsFromDstar->Add(hMassLSCfromDstarPM);
   flistLsCutsFromDstar->Add(hMassTrueLSCfromDstarSB);
   flistLsCutsFromDstar->Add(hMassLSCfromDstarSB);
 
+
+
+
+
+
+
+ //%%% NEW HISTOS %%%%%%%%%%%%%%%%
+  TH1F *hdcaLSCfromDstar=new TH1F("hdcaLSCfromDstar","hdca_LooseCuts_FromDstar",100,0.,1000.);
+  hdcaLSCfromDstar->SetXTitle("dca   [#mum]");
+  hdcaLSCfromDstar->SetYTitle("Entries");
+  TH1F *hcosthetastarLSCfromDstar=new TH1F("hcosthetastarLSCfromDstar","hCosThetaStar_LooseCuts_FromDstar",50,-1.,1.);
+  hcosthetastarLSCfromDstar->SetXTitle("cos #theta^{*}");
+  hcosthetastarLSCfromDstar->SetYTitle("Entries");
+  TH1F *hptD0LSCfromDstar=new TH1F("hptD0LSCfromDstar","D^{0} transverse momentum distribution",34,ptbinsD0arr);
+  hptD0LSCfromDstar->SetXTitle("p_{t}  [GeV/c]");
+  hptD0LSCfromDstar->SetYTitle("Entries");
+  TH1F *hptD0VsMaxPtLSCfromDstar=new TH1F("hptD0VsMaxPtLSCfromDstar","Difference between D^{0} pt and highest (or second) pt",400,-50.,50.);
+  TH2F *hptD0PTallsqrtLSCfromDstar=new TH2F("hptD0PTallsqrtLSCfromDstar","D^{0} pt Vs Sqrt(Sum pt square)",34,ptbinsD0arr,200,dumbinning);
+  TH2F *hptD0PTallLSCfromDstar=new TH2F("hptD0PTallLSCfromDstar","D^{0} pt Vs Sum pt ",34,ptbinsD0arr,200,dumbinning);
+  TH2F *hptD0vsptBLSCfromDstar=new TH2F("hptD0vsptBLSCfromDstar","D^{0} pt Vs B pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hpD0vspBLSCfromDstar=new TH2F("hpD0vspBLSCfromDstar","D^{0} tot momentum Vs B tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hptD0vsptcquarkLSCfromDstar=new TH2F("hptD0vsptcquarkLSCfromDstar","D^{0} pt Vs cquark pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hpD0vspcquarkLSCfromDstar=new TH2F("hpD0vspcquarkLSCfromDstar","D^{0} tot momentum Vs cquark tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  flistLsCutsFromDstar->Add(hdcaLSCfromDstar);
+  flistLsCutsFromDstar->Add(hcosthetastarLSCfromDstar);
+  flistLsCutsFromDstar->Add(hptD0LSCfromDstar);
+  flistLsCutsFromDstar->Add(hptD0VsMaxPtLSCfromDstar);
+  flistLsCutsFromDstar->Add(hptD0PTallsqrtLSCfromDstar);
+  flistLsCutsFromDstar->Add(hptD0PTallLSCfromDstar);
+  flistLsCutsFromDstar->Add(hptD0vsptBLSCfromDstar);
+  flistLsCutsFromDstar->Add(hpD0vspBLSCfromDstar);
+  flistLsCutsFromDstar->Add(hptD0vsptcquarkLSCfromDstar);
+  flistLsCutsFromDstar->Add(hpD0vspcquarkLSCfromDstar);
+  TH1F *hd0zD0ptLSCfromDstar;
+  TH1F *hInvMassD0LSCfromDstar,*hInvMassD0barLSCfromDstar;
+  TH2F *hInvMassPtLSCfromDstar=new TH2F("hInvMassPtLSCfromDstar","Candidate p_{t} Vs invariant mass",330,1.700,2.030,200,0.,20.);
+ THnSparseF *hSparseLSCfromDstar=new THnSparseF("hSparseLSCfromDstar","Candidate Masses, pt, Imp Par;massD0;massD0bar;pt;impactpar;selcase",5,nbinsSparse);
+  hSparseLSCfromDstar->SetBinEdges(0,massbins);
+  hSparseLSCfromDstar->SetBinEdges(1,massbins);
+  hSparseLSCfromDstar->SetBinEdges(2,ptbinsForNsparse);
+  hSparseLSCfromDstar->SetBinEdges(3,impparbins);
+  hSparseLSCfromDstar->SetBinEdges(4,massHypoBins); 
+  flistLsCutsFromDstar->Add(hSparseLSCfromDstar);
+  TH1F *hetaLSCfromDstar;
+  TH1F *hCosPDPBLSCfromDstar;
+  TH1F *hCosPcPDLSCfromDstar;
+  flistLsCutsFromDstar->Add(hInvMassPtLSCfromDstar);
+  // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
+  TH2F *hd0D0VSd0xd0LSCfromDstarpt;
+  TH2F *hangletracksVSd0xd0LSCfromDstarpt;
+  TH2F *hangletracksVSd0D0LSCfromDstarpt;
+  TH1F *hd0xd0LSCfromDstarpt;
+
+  TH2F *hTOFpidLSCfromDstar=new TH2F("hTOFpidLSCfromDstar","TOF time VS momentum",10,0.,4.,50,-50000.,50000.);
+  flistLsCutsFromDstar->Add(hTOFpidLSCfromDstar);
+
+  for(Int_t i=0;i<fnbins;i++){
+    namehist="hd0zD0ptLSCfromDstar_pt";
+    namehist+=i;
+    titlehist="d0(z) Loose Cuts FromDstarm ptbin=";
+    titlehist+=i;
+    hd0zD0ptLSCfromDstar=new TH1F(namehist.Data(),titlehist.Data(),1000,-3000,3000.);
+    hd0zD0ptLSCfromDstar->SetXTitle("d_{0}(z)    [#mum]");
+    hd0zD0ptLSCfromDstar->SetYTitle("Entries");
+    flistLsCutsFromDstar->Add(hd0zD0ptLSCfromDstar);
+
+    namehist="hInvMassD0LSCfromDstar_pt";
+    namehist+=i;
+    titlehist="Invariant Mass Loose Cuts FromDstar ptbin=";
+    titlehist+=i;
+    hInvMassD0LSCfromDstar=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
+    hInvMassD0LSCfromDstar->SetXTitle("Invariant Mass    [GeV]");
+    hInvMassD0LSCfromDstar->SetYTitle("Entries");
+    flistLsCutsFromDstar->Add(hInvMassD0LSCfromDstar);
+
+    namehist="hInvMassD0barLSCfromDstar_pt";
+    namehist+=i;
+    titlehist="Invariant Mass D0bar Loose Cuts FromDstar ptbin=";
+    titlehist+=i;
+    hInvMassD0barLSCfromDstar=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
+    hInvMassD0barLSCfromDstar->SetXTitle("Invariant Mass    [GeV]");
+    hInvMassD0barLSCfromDstar->SetYTitle("Entries");
+    flistLsCutsFromDstar->Add(hInvMassD0barLSCfromDstar);
+
+    namehist="hetaLSCfromDstar_pt";
+    namehist+=i;
+    titlehist="eta Loose Cuts FromDstar ptbin=";
+    titlehist+=i;
+    hetaLSCfromDstar=new TH1F(namehist.Data(),titlehist.Data(),100,-3.,3.);
+    hetaLSCfromDstar->SetXTitle("Pseudorapidity");
+    hetaLSCfromDstar->SetYTitle("Entries");
+    flistLsCutsFromDstar->Add(hetaLSCfromDstar);
+
+    namehist="hCosPDPBLSCfromDstar_pt";
+    namehist+=i;
+    titlehist="Cosine between D0 momentum and B momentum, ptbin=";
+    titlehist+=i;
+    hCosPDPBLSCfromDstar=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
+    hCosPDPBLSCfromDstar->SetXTitle("Cosine between D0 momentum and B momentum");
+    hCosPDPBLSCfromDstar->SetYTitle("Entries");
+    flistLsCutsFromDstar->Add(hCosPDPBLSCfromDstar);
+
+    namehist="hCosPcPDLSCfromDstar_pt";
+    namehist+=i;
+    titlehist="Cosine between cquark momentum and D0 momentum, ptbin=";
+    titlehist+=i;
+    hCosPcPDLSCfromDstar=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
+    hCosPcPDLSCfromDstar->SetXTitle("Cosine between c quark momentum and D0 momentum");
+    hCosPcPDLSCfromDstar->SetYTitle("Entries");
+    flistLsCutsFromDstar->Add(hCosPcPDLSCfromDstar);
+    
+ // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
+    namehist="hd0xd0LSCfromDstar_pt";
+    namehist+=i;
+    titlehist="d0xd0 Loose Cuts FromDstar ptbin=";
+    titlehist+=i;
+    hd0xd0LSCfromDstarpt=new TH1F(namehist.Data(),titlehist.Data(),1000,-50000.,10000.);
+    hd0xd0LSCfromDstarpt->SetXTitle("d_{0}^{K}xd_{0}^{#pi}   [#mum^2]");
+    hd0xd0LSCfromDstarpt->SetYTitle("Entries");
+    flistLsCutsFromDstar->Add(hd0xd0LSCfromDstarpt);
+
+
+    namehist="hd0D0VSd0xd0LSCfromDstar_pt";
+    namehist+=i;
+    titlehist="d_{0}^{D^{0}} Vs d_{0}^{K}xd_{0}^{#pi} Loose Cuts FromDstar ptbin=";
+    titlehist+=i;
+    hd0D0VSd0xd0LSCfromDstarpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,100,-300,300);
+    hd0D0VSd0xd0LSCfromDstarpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
+    hd0D0VSd0xd0LSCfromDstarpt->SetYTitle(" d_{0}^{D^{0}}    [#mum]");
+    flistLsCutsFromDstar->Add(hd0D0VSd0xd0LSCfromDstarpt);
+    
+    
+    namehist="hangletracksVSd0xd0LSCfromDstar_pt";
+    namehist+=i;
+    titlehist="Angle between K and #pi tracks Vs d_{0}^{K}xd_{0}^{#pi} Loose Cuts FromDstar ptbin=";
+    titlehist+=i;
+    hangletracksVSd0xd0LSCfromDstarpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,40,-0.1,3.24);
+    hangletracksVSd0xd0LSCfromDstarpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
+    hangletracksVSd0xd0LSCfromDstarpt->SetYTitle(" angle between K and #p tracks  [rad]");
+    flistLsCutsFromDstar->Add(hangletracksVSd0xd0LSCfromDstarpt);
+    
+
+    namehist="hangletracksVSd0D0LSCfromDstar_pt";
+    namehist+=i;
+    titlehist="Angle between K and #pi tracks Vs d_{0}^{D^{0}} Loose Cuts FromDstar ptbin=";
+    titlehist+=i;
+    hangletracksVSd0D0LSCfromDstarpt=new TH2F(namehist.Data(),titlehist.Data(),200,-400.,400.,40,-0.12,3.24);
+    hangletracksVSd0D0LSCfromDstarpt->SetXTitle(" d_{0}^{D^{0}} [#mum]");
+    hangletracksVSd0D0LSCfromDstarpt->SetYTitle(" angle between K and #p tracks  [rad]");
+    flistLsCutsFromDstar->Add(hangletracksVSd0D0LSCfromDstarpt);
+
+
+  }
+  // %%%%%%%% END OF NEW HISTOS %%%%%%%%%%%%%
+  //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+
+
   //########## d0 D0 histos #############  
   TH1F *hd0D0LSCfromDstPM = new TH1F("hd0D0LSCfromDstarPM","D^{0} impact par. plot , Loose Cuts ,FromDStar,Mass Peak (All momenta)",1000,-1000.,1000.);
   hd0D0LSCfromDstPM->SetXTitle("Impact parameter [#mum]");
@@ -1629,12 +3442,12 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistLsCutsFromDstar->Add(hd0D0VtxTrueLSCfromDstSB);
   flistLsCutsFromDstar->Add(hMCd0D0LSCfromDstSB);
   
-  TH1F **hd0D0ptLSCfromDstPM=new TH1F*[fnbins];
-  TH1F **hMCd0D0ptLSCfromDstPM=new TH1F*[fnbins];
-  TH1F ** hd0D0VtxTrueptLSCfromDstPM=new TH1F*[fnbins];
-  TH1F **hd0D0ptLSCfromDstSB=new TH1F*[fnbins];
-  TH1F **hMCd0D0ptLSCfromDstSB=new TH1F*[fnbins];
-  TH1F ** hd0D0VtxTrueptLSCfromDstSB=new TH1F*[fnbins];
+  TH1F *hd0D0ptLSCfromDstPM;
+  TH1F *hMCd0D0ptLSCfromDstPM;
+  TH1F *hd0D0VtxTrueptLSCfromDstPM;
+  TH1F *hd0D0ptLSCfromDstSB;
+  TH1F *hMCd0D0ptLSCfromDstSB;
+  TH1F *hd0D0VtxTrueptLSCfromDstSB;
   namehist="hd0D0ptLSCfromDstar_";
   titlehist="D^{0} impact par. plot, Loose Cuts, FromDStar, ";
   for(Int_t i=0;i<fnbins;i++){
@@ -1649,23 +3462,23 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
     strtitlept+=fptbins[i+1];
     strtitlept.Append(" [GeV/c]");
     
-    hd0D0ptLSCfromDstPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0ptLSCfromDstPM[i]->SetXTitle("Impact parameter [#mum] ");
-    hd0D0ptLSCfromDstPM[i]->SetYTitle("Entries");
-    flistLsCutsFromDstar->Add(hd0D0ptLSCfromDstPM[i]);
+    hd0D0ptLSCfromDstPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0ptLSCfromDstPM->SetXTitle("Impact parameter [#mum] ");
+    hd0D0ptLSCfromDstPM->SetYTitle("Entries");
+    flistLsCutsFromDstar->Add(hd0D0ptLSCfromDstPM);
 
     strnamept.ReplaceAll("hd0D0","hMCd0D0");
-    hMCd0D0ptLSCfromDstPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hMCd0D0ptLSCfromDstPM[i]->SetXTitle("MC Impact parameter [#mum] ");
-    hMCd0D0ptLSCfromDstPM[i]->SetYTitle("Entries");
-    flistLsCutsFromDstar->Add(hMCd0D0ptLSCfromDstPM[i]);
+    hMCd0D0ptLSCfromDstPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hMCd0D0ptLSCfromDstPM->SetXTitle("MC Impact parameter [#mum] ");
+    hMCd0D0ptLSCfromDstPM->SetYTitle("Entries");
+    flistLsCutsFromDstar->Add(hMCd0D0ptLSCfromDstPM);
  
 
     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
-    hd0D0VtxTrueptLSCfromDstPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0VtxTrueptLSCfromDstPM[i]->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
-    hd0D0VtxTrueptLSCfromDstPM[i]->SetYTitle("Entries");
-    flistLsCutsFromDstar->Add(hd0D0VtxTrueptLSCfromDstPM[i]);
+    hd0D0VtxTrueptLSCfromDstPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0VtxTrueptLSCfromDstPM->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
+    hd0D0VtxTrueptLSCfromDstPM->SetYTitle("Entries");
+    flistLsCutsFromDstar->Add(hd0D0VtxTrueptLSCfromDstPM);
     
     strnamept=namehist;
     strnamept.Append("SBMss_pt");
@@ -1678,22 +3491,22 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
     strtitlept+=fptbins[i+1];
     strtitlept.Append(" [GeV/c]");
     
-    hd0D0ptLSCfromDstSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0ptLSCfromDstSB[i]->SetXTitle("Impact parameter [#mum] ");
-    hd0D0ptLSCfromDstSB[i]->SetYTitle("Entries");
-    flistLsCutsFromDstar->Add(hd0D0ptLSCfromDstSB[i]);
+    hd0D0ptLSCfromDstSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0ptLSCfromDstSB->SetXTitle("Impact parameter [#mum] ");
+    hd0D0ptLSCfromDstSB->SetYTitle("Entries");
+    flistLsCutsFromDstar->Add(hd0D0ptLSCfromDstSB);
 
     strnamept.ReplaceAll("hd0D0","hMCd0D0");
-    hMCd0D0ptLSCfromDstSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hMCd0D0ptLSCfromDstSB[i]->SetXTitle("MC Impact parameter [#mum] ");
-    hMCd0D0ptLSCfromDstSB[i]->SetYTitle("Entries");
-    flistLsCutsFromDstar->Add(hMCd0D0ptLSCfromDstSB[i]);
+    hMCd0D0ptLSCfromDstSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hMCd0D0ptLSCfromDstSB->SetXTitle("MC Impact parameter [#mum] ");
+    hMCd0D0ptLSCfromDstSB->SetYTitle("Entries");
+    flistLsCutsFromDstar->Add(hMCd0D0ptLSCfromDstSB);
 
     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
-    hd0D0VtxTrueptLSCfromDstSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0VtxTrueptLSCfromDstSB[i]->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
-    hd0D0VtxTrueptLSCfromDstSB[i]->SetYTitle("Entries");
-    flistLsCutsFromDstar->Add(hd0D0VtxTrueptLSCfromDstSB[i]);
+    hd0D0VtxTrueptLSCfromDstSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0VtxTrueptLSCfromDstSB->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
+    hd0D0VtxTrueptLSCfromDstSB->SetYTitle("Entries");
+    flistLsCutsFromDstar->Add(hd0D0VtxTrueptLSCfromDstSB);
   }
 
 
@@ -1701,13 +3514,14 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   //
   //########### global properties histos ###########
 
-  TH2F *hCPtaVSd0d0LSCother=new TH2F("hCPtaVSd0d0LSCother","hCPtaVSd0d0_LooseCuts_other",1000,-100000.,100000.,100,0.,1.);
+  TH2F *hCPtaVSd0d0LSCother=new TH2F("hCPtaVSd0d0LSCother","hCPtaVSd0d0_LooseCuts_other",1000,-100000.,100000.,100,-1.,1.);
   TH1F *hSecVtxZLSCother=new TH1F("hSecVtxZLSCother","hSecVtxZ_LooseCuts_other",1000,-8.,8.);
   TH1F *hSecVtxXLSCother=new TH1F("hSecVtxXLSCother","hSecVtxX_LooseCuts_other",1000,-3000.,3000.);
   TH1F *hSecVtxYLSCother=new TH1F("hSecVtxYLSCother","hSecVtxY_LooseCuts_other",1000,-3000.,3000.);
   TH2F *hSecVtxXYLSCother=new TH2F("hSecVtxXYLSCother","hSecVtxXY_LooseCuts_other",1000,-3000.,3000.,1000,-3000.,3000.);
   TH1F *hSecVtxPhiLSCother=new TH1F("hSecVtxPhiLSCother","hSecVtxPhi_LooseCuts_other",180,-180.1,180.1);
-  TH1F *hCPtaLSCother=new TH1F("hCPtaLSCother","hCPta_LooseCuts_other",100,0.,1.);
+  TH1F *hd0singlTrackLSCother=new TH1F("hd0singlTrackLSCother","hd0singlTrackLooseCuts_Other",1000,-5000.,5000.);
+  TH1F *hCPtaLSCother=new TH1F("hCPtaLSCother","hCPta_LooseCuts_other",100,-1.,1.);
   TH1F *hd0xd0LSCother=new TH1F("hd0xd0LSCother","hd0xd0_LooseCuts_other",1000,-100000.,100000.);
   TH1F *hMassTrueLSCother=new TH1F("hMassTrueLSCother","D^{0} MC inv. Mass Loose Cuts other(All momenta)",600,1.600,2.200);
   TH1F *hMassLSCother=new TH1F("hMassLSCother","D^{0} inv. Mass Loose Cuts other (All momenta)",600,1.600,2.200);
@@ -1725,6 +3539,7 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistLsCutsOther->Add(hSecVtxXLSCother);
   flistLsCutsOther->Add(hSecVtxXYLSCother);
   flistLsCutsOther->Add(hSecVtxPhiLSCother);
+  flistLsCutsOther->Add(hd0singlTrackLSCother);
   flistLsCutsOther->Add(hCPtaLSCother);
   flistLsCutsOther->Add(hd0xd0LSCother);
   flistLsCutsOther->Add(hMassTrueLSCother);
@@ -1734,6 +3549,162 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistLsCutsOther->Add(hMassTrueLSCotherSB);
   flistLsCutsOther->Add(hMassLSCotherSB);
 
+
+
+
+ //%%% NEW HISTOS %%%%%%%%%%%%%%%%
+  TH1F *hdcaLSCother=new TH1F("hdcaLSCother","hdca_LooseCuts_Other",100,0.,1000.);
+  hdcaLSCother->SetXTitle("dca   [#mum]");
+  hdcaLSCother->SetYTitle("Entries");
+  TH1F *hcosthetastarLSCother=new TH1F("hcosthetastarLSCother","hCosThetaStar_LooseCuts_Other",50,-1.,1.);
+  hcosthetastarLSCother->SetXTitle("cos #theta^{*}");
+  hcosthetastarLSCother->SetYTitle("Entries");
+  TH1F *hptD0LSCother=new TH1F("hptD0LSCother","D^{0} transverse momentum distribution",34,ptbinsD0arr);
+  hptD0LSCother->SetXTitle("p_{t}  [GeV/c]");
+  hptD0LSCother->SetYTitle("Entries");
+  TH1F *hptD0VsMaxPtLSCother=new TH1F("hptD0VsMaxPtLSCother","Difference between D^{0} pt and highest (or second) pt",400,-50.,50.);
+  TH2F *hptD0PTallsqrtLSCother=new TH2F("hptD0PTallsqrtLSCother","D^{0} pt Vs Sqrt(Sum pt square)",34,ptbinsD0arr,200,dumbinning);
+  TH2F *hptD0PTallLSCother=new TH2F("hptD0PTallLSCother","D^{0} pt Vs Sum pt ",34,ptbinsD0arr,200,dumbinning);
+  TH2F *hptD0vsptBLSCother=new TH2F("hptD0vsptBLSCother","D^{0} pt Vs B pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hpD0vspBLSCother=new TH2F("hpD0vspBLSCother","D^{0} tot momentum Vs B tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hptD0vsptcquarkLSCother=new TH2F("hptD0vsptcquarkLSCother","D^{0} pt Vs cquark pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hpD0vspcquarkLSCother=new TH2F("hpD0vspcquarkLSCother","D^{0} tot momentum Vs cquark tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  flistLsCutsOther->Add(hdcaLSCother);
+  flistLsCutsOther->Add(hcosthetastarLSCother);
+  flistLsCutsOther->Add(hptD0LSCother);
+  flistLsCutsOther->Add(hptD0VsMaxPtLSCother);
+  flistLsCutsOther->Add(hptD0PTallsqrtLSCother);
+  flistLsCutsOther->Add(hptD0PTallLSCother);
+  flistLsCutsOther->Add(hptD0vsptBLSCother);
+  flistLsCutsOther->Add(hpD0vspBLSCother);
+  flistLsCutsOther->Add(hptD0vsptcquarkLSCother);
+  flistLsCutsOther->Add(hpD0vspcquarkLSCother);
+
+  TH1F *hd0zD0ptLSCother;
+  TH1F *hInvMassD0LSCother,*hInvMassD0barLSCother;
+  TH2F *hInvMassPtLSCother=new TH2F("hInvMassPtLSCother","Candidate p_{t} Vs invariant mass",330,1.700,2.030,200,0.,20.);
+ THnSparseF *hSparseLSCother=new THnSparseF("hSparseLSCother","Candidate Masses, pt, Imp Par;massD0;massD0bar;pt;impactpar;selcase",5,nbinsSparse);
+  hSparseLSCother->SetBinEdges(0,massbins);
+  hSparseLSCother->SetBinEdges(1,massbins);
+  hSparseLSCother->SetBinEdges(2,ptbinsForNsparse);
+  hSparseLSCother->SetBinEdges(3,impparbins);
+  hSparseLSCother->SetBinEdges(4,massHypoBins); 
+  flistLsCutsOther->Add(hSparseLSCother);
+  TH1F *hetaLSCother;
+  TH1F *hCosPDPBLSCother;
+  TH1F *hCosPcPDLSCother;
+  flistLsCutsOther->Add(hInvMassPtLSCother);
+ // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
+  TH2F *hd0D0VSd0xd0LSCotherpt;
+  TH2F *hangletracksVSd0xd0LSCotherpt;
+  TH2F *hangletracksVSd0D0LSCotherpt;
+  TH1F *hd0xd0LSCotherpt;
+
+  TH2F *hTOFpidLSCother=new TH2F("hTOFpidLSCother","TOF time VS momentum",10,0.,4.,50,-50000.,50000.);
+  flistLsCutsOther->Add(hTOFpidLSCother);
+
+  for(Int_t i=0;i<fnbins;i++){
+    namehist="hd0zD0ptLSCother_pt";
+    namehist+=i;
+    titlehist="d0(z) Loose Cuts Otherm ptbin=";
+    titlehist+=i;
+    hd0zD0ptLSCother=new TH1F(namehist.Data(),titlehist.Data(),1000,-3000,3000.);
+    hd0zD0ptLSCother->SetXTitle("d_{0}(z)    [#mum]");
+    hd0zD0ptLSCother->SetYTitle("Entries");
+    flistLsCutsOther->Add(hd0zD0ptLSCother);
+
+    namehist="hInvMassD0LSCother_pt";
+    namehist+=i;
+    titlehist="Invariant Mass Loose Cuts Other ptbin=";
+    titlehist+=i;
+    hInvMassD0LSCother=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
+    hInvMassD0LSCother->SetXTitle("Invariant Mass    [GeV]");
+    hInvMassD0LSCother->SetYTitle("Entries");
+    flistLsCutsOther->Add(hInvMassD0LSCother);
+
+    namehist="hInvMassD0barLSCother_pt";
+    namehist+=i;
+    titlehist="Invariant Mass D0bar Loose Cuts Other ptbin=";
+    titlehist+=i;
+    hInvMassD0barLSCother=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
+    hInvMassD0barLSCother->SetXTitle("Invariant Mass    [GeV]");
+    hInvMassD0barLSCother->SetYTitle("Entries");
+    flistLsCutsOther->Add(hInvMassD0barLSCother);
+
+    namehist="hetaLSCother_pt";
+    namehist+=i;
+    titlehist="eta Loose Cuts Other ptbin=";
+    titlehist+=i;
+    hetaLSCother=new TH1F(namehist.Data(),titlehist.Data(),100,-3.,3.);
+    hetaLSCother->SetXTitle("Pseudorapidity");
+    hetaLSCother->SetYTitle("Entries");
+    flistLsCutsOther->Add(hetaLSCother);
+
+    namehist="hCosPDPBLSCother_pt";
+    namehist+=i;
+    titlehist="Cosine between D0 momentum and B momentum, ptbin=";
+    titlehist+=i;
+    hCosPDPBLSCother=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
+    hCosPDPBLSCother->SetXTitle("Cosine between D0 momentum and B momentum");
+    hCosPDPBLSCother->SetYTitle("Entries");
+    flistLsCutsOther->Add(hCosPDPBLSCother);
+
+    namehist="hCosPcPDLSCother_pt";
+    namehist+=i;
+    titlehist="Cosine between cquark momentum and D0 momentum, ptbin=";
+    titlehist+=i;
+    hCosPcPDLSCother=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
+    hCosPcPDLSCother->SetXTitle("Cosine between c quark momentum and D0 momentum");
+    hCosPcPDLSCother->SetYTitle("Entries");
+    flistLsCutsOther->Add(hCosPcPDLSCother);
+
+ // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
+    namehist="hd0xd0LSCother_pt";
+    namehist+=i;
+    titlehist="d0xd0 Loose Cuts Other ptbin=";
+    titlehist+=i;
+    hd0xd0LSCotherpt=new TH1F(namehist.Data(),titlehist.Data(),1000,-50000.,10000.);
+    hd0xd0LSCotherpt->SetXTitle("d_{0}^{K}xd_{0}^{#pi}   [#mum^2]");
+    hd0xd0LSCotherpt->SetYTitle("Entries");
+    flistLsCutsOther->Add(hd0xd0LSCotherpt);
+
+
+    namehist="hd0D0VSd0xd0LSCother_pt";
+    namehist+=i;
+    titlehist="d_{0}^{D^{0}} Vs d_{0}^{K}xd_{0}^{#pi} Loose Cuts Other ptbin=";
+    titlehist+=i;
+    hd0D0VSd0xd0LSCotherpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,100,-300,300);
+    hd0D0VSd0xd0LSCotherpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
+    hd0D0VSd0xd0LSCotherpt->SetYTitle(" d_{0}^{D^{0}}    [#mum]");
+    flistLsCutsOther->Add(hd0D0VSd0xd0LSCotherpt);
+    
+    
+    namehist="hangletracksVSd0xd0LSCother_pt";
+    namehist+=i;
+    titlehist="Angle between K and #pi tracks Vs d_{0}^{K}xd_{0}^{#pi} Loose Cuts Other ptbin=";
+    titlehist+=i;
+    hangletracksVSd0xd0LSCotherpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,40,-0.1,3.24);
+    hangletracksVSd0xd0LSCotherpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
+    hangletracksVSd0xd0LSCotherpt->SetYTitle(" angle between K and #p tracks  [rad]");
+    flistLsCutsOther->Add(hangletracksVSd0xd0LSCotherpt);
+    
+
+    namehist="hangletracksVSd0D0LSCother_pt";
+    namehist+=i;
+    titlehist="Angle between K and #pi tracks Vs d_{0}^{D^{0}} Loose Cuts Other ptbin=";
+    titlehist+=i;
+    hangletracksVSd0D0LSCotherpt=new TH2F(namehist.Data(),titlehist.Data(),200,-400.,400.,40,-0.12,3.24);
+    hangletracksVSd0D0LSCotherpt->SetXTitle(" d_{0}^{D^{0}} [#mum]");
+    hangletracksVSd0D0LSCotherpt->SetYTitle(" angle between K and #p tracks  [rad]");
+    flistLsCutsOther->Add(hangletracksVSd0D0LSCotherpt);
+
+    
+  }
+  // %%%%%%%% END OF NEW HISTOS %%%%%%%%%%%%%
+  //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
   //############# d0 D0 histos ###############à
   TH1F *hd0D0LSCotherPM = new TH1F("hd0D0LSCotherPM","D^{0} impact par. plot , Loose Cuts ,Other,Mass Peak (All momenta)",1000,-1000.,1000.);
   hd0D0LSCotherPM->SetXTitle("Impact parameter [#mum]");
@@ -1766,12 +3737,12 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistLsCutsOther->Add(hd0D0VtxTrueLSCotherSB);
   flistLsCutsOther->Add(hMCd0D0LSCotherSB);
   
-  TH1F **hd0D0ptLSCotherPM=new TH1F*[fnbins];
-  TH1F **hMCd0D0ptLSCotherPM=new TH1F*[fnbins];
-  TH1F ** hd0D0VtxTrueptLSCotherPM=new TH1F*[fnbins];
-  TH1F **hd0D0ptLSCotherSB=new TH1F*[fnbins];
-  TH1F **hMCd0D0ptLSCotherSB=new TH1F*[fnbins];
-  TH1F ** hd0D0VtxTrueptLSCotherSB=new TH1F*[fnbins];
+  TH1F *hd0D0ptLSCotherPM;
+  TH1F *hMCd0D0ptLSCotherPM;
+  TH1F *hd0D0VtxTrueptLSCotherPM;
+  TH1F *hd0D0ptLSCotherSB;
+  TH1F *hMCd0D0ptLSCotherSB;
+  TH1F *hd0D0VtxTrueptLSCotherSB;
   namehist="hd0D0ptLSCother_";
   titlehist="D^{0} impact par. plot, Loose Cuts, Other, ";
   for(Int_t i=0;i<fnbins;i++){
@@ -1786,23 +3757,23 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
     strtitlept+=fptbins[i+1];
     strtitlept.Append(" [GeV/c]");
     
-    hd0D0ptLSCotherPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0ptLSCotherPM[i]->SetXTitle("Impact parameter [#mum] ");
-    hd0D0ptLSCotherPM[i]->SetYTitle("Entries");
-    flistLsCutsOther->Add(hd0D0ptLSCotherPM[i]);
+    hd0D0ptLSCotherPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0ptLSCotherPM->SetXTitle("Impact parameter [#mum] ");
+    hd0D0ptLSCotherPM->SetYTitle("Entries");
+    flistLsCutsOther->Add(hd0D0ptLSCotherPM);
 
     strnamept.ReplaceAll("hd0D0","hMCd0D0");
-    hMCd0D0ptLSCotherPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hMCd0D0ptLSCotherPM[i]->SetXTitle("MC Impact parameter [#mum] ");
-    hMCd0D0ptLSCotherPM[i]->SetYTitle("Entries");
-    flistLsCutsOther->Add(hMCd0D0ptLSCotherPM[i]);
+    hMCd0D0ptLSCotherPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hMCd0D0ptLSCotherPM->SetXTitle("MC Impact parameter [#mum] ");
+    hMCd0D0ptLSCotherPM->SetYTitle("Entries");
+    flistLsCutsOther->Add(hMCd0D0ptLSCotherPM);
  
 
     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
-    hd0D0VtxTrueptLSCotherPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0VtxTrueptLSCotherPM[i]->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
-    hd0D0VtxTrueptLSCotherPM[i]->SetYTitle("Entries");
-    flistLsCutsOther->Add(hd0D0VtxTrueptLSCotherPM[i]);
+    hd0D0VtxTrueptLSCotherPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0VtxTrueptLSCotherPM->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
+    hd0D0VtxTrueptLSCotherPM->SetYTitle("Entries");
+    flistLsCutsOther->Add(hd0D0VtxTrueptLSCotherPM);
     
     strnamept=namehist;
     strnamept.Append("SBMss_pt");
@@ -1815,25 +3786,25 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
     strtitlept+=fptbins[i+1];
     strtitlept.Append(" [GeV/c]");
     
-    hd0D0ptLSCotherSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0ptLSCotherSB[i]->SetXTitle("Impact parameter [#mum] ");
-    hd0D0ptLSCotherSB[i]->SetYTitle("Entries");
-    flistLsCutsOther->Add(hd0D0ptLSCotherSB[i]);
+    hd0D0ptLSCotherSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0ptLSCotherSB->SetXTitle("Impact parameter [#mum] ");
+    hd0D0ptLSCotherSB->SetYTitle("Entries");
+    flistLsCutsOther->Add(hd0D0ptLSCotherSB);
 
     strnamept.ReplaceAll("hd0D0","hMCd0D0");
-    hMCd0D0ptLSCotherSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hMCd0D0ptLSCotherSB[i]->SetXTitle("MC Impact parameter [#mum] ");
-    hMCd0D0ptLSCotherSB[i]->SetYTitle("Entries");
-    flistLsCutsOther->Add(hMCd0D0ptLSCotherSB[i]);
+    hMCd0D0ptLSCotherSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hMCd0D0ptLSCotherSB->SetXTitle("MC Impact parameter [#mum] ");
+    hMCd0D0ptLSCotherSB->SetYTitle("Entries");
+    flistLsCutsOther->Add(hMCd0D0ptLSCotherSB);
 
     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
-    hd0D0VtxTrueptLSCotherSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0VtxTrueptLSCotherSB[i]->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
-    hd0D0VtxTrueptLSCotherSB[i]->SetYTitle("Entries");
-    flistLsCutsOther->Add(hd0D0VtxTrueptLSCotherSB[i]);
+    hd0D0VtxTrueptLSCotherSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0VtxTrueptLSCotherSB->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
+    hd0D0VtxTrueptLSCotherSB->SetYTitle("Entries");
+    flistLsCutsOther->Add(hd0D0VtxTrueptLSCotherSB);
   }
 
-
+  //Printf("END OF LSCUTS HISTOS CREATION \n");
 
 
   //################################################################################################
@@ -1846,13 +3817,14 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   //
   // ####### global properties histo ############
 
-  TH2F *hCPtaVSd0d0TGHCsign=new TH2F("hCPtaVSd0d0TGHCsign","hCPtaVSd0d0_TightCuts_Signal",1000,-100000.,100000.,100,0.,1.);
+  TH2F *hCPtaVSd0d0TGHCsign=new TH2F("hCPtaVSd0d0TGHCsign","hCPtaVSd0d0_TightCuts_Signal",1000,-100000.,100000.,100,-1.,1.);
   TH1F *hSecVtxZTGHCsign=new TH1F("hSecVtxZTGHCsign","hSecVtxZ_TightCuts_Signal",1000,-8.,8.);
   TH1F *hSecVtxXTGHCsign=new TH1F("hSecVtxXTGHCsign","hSecVtxX_TightCuts_Signal",1000,-3000.,3000.);
   TH1F *hSecVtxYTGHCsign=new TH1F("hSecVtxYTGHCsign","hSecVtxY_TightCuts_Signal",1000,-3000.,3000.);
   TH2F *hSecVtxXYTGHCsign=new TH2F("hSecVtxXYTGHCsign","hSecVtxXY_TightCuts_Signal",1000,-3000.,3000.,1000,-3000.,3000.);
   TH1F *hSecVtxPhiTGHCsign=new TH1F("hSecVtxPhiTGHCsign","hSecVtxPhi_TightCuts_Signal",180,-180.1,180.1);
-  TH1F *hCPtaTGHCsign=new TH1F("hCPtaTGHCsign","hCPta_TightCuts_Signal",100,0.,1.);
+  TH1F *hd0singlTrackTGHCsign=new TH1F("hd0singlTrackTGHCsign","hd0singlTrackTightCuts_Signal",1000,-5000.,5000.);
+  TH1F *hCPtaTGHCsign=new TH1F("hCPtaTGHCsign","hCPta_TightCuts_Signal",100,-1.,1.);
   TH1F *hd0xd0TGHCsign=new TH1F("hd0xd0TGHCsign","hd0xd0_TightCuts_Signal",1000,-100000.,100000.);
   TH1F *hMassTrueTGHCsign=new TH1F("hMassTrueTGHCsign","D^{0} MC inv. Mass Tight Cuts Signal(All momenta)",600,1.600,2.200);
   TH1F *hMassTGHCsign=new TH1F("hMassTGHCsign","D^{0} inv. Mass Tight Cuts Signal (All momenta)",600,1.600,2.200);
@@ -1870,6 +3842,7 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistTghCutsSignal->Add(hSecVtxXTGHCsign);
   flistTghCutsSignal->Add(hSecVtxXYTGHCsign);
   flistTghCutsSignal->Add(hSecVtxPhiTGHCsign);
+  flistTghCutsSignal->Add(hd0singlTrackTGHCsign);
   flistTghCutsSignal->Add(hCPtaTGHCsign);
   flistTghCutsSignal->Add(hd0xd0TGHCsign);
   flistTghCutsSignal->Add(hMassTrueTGHCsign);
@@ -1879,7 +3852,214 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistTghCutsSignal->Add(hMassTrueTGHCsignSB);
   flistTghCutsSignal->Add(hMassTGHCsignSB);
 
-  // ####### d0 D0 histos ############
+
+
+
+
+
+ //%%% NEW HISTOS %%%%%%%%%%%%%%%%
+  TH1F *hdcaTGHCsign=new TH1F("hdcaTGHCsign","hdca_TightCuts_Signal",100,0.,1000.);
+  hdcaTGHCsign->SetXTitle("dca   [#mum]");
+  hdcaTGHCsign->SetYTitle("Entries");
+  TH1F *hcosthetastarTGHCsign=new TH1F("hcosthetastarTGHCsign","hCosThetaStar_TightCuts_Signal",50,-1.,1.);
+  hcosthetastarTGHCsign->SetXTitle("cos #theta^{*}");
+  hcosthetastarTGHCsign->SetYTitle("Entries");
+  TH1F *hptD0TGHCsign=new TH1F("hptD0TGHCsign","D^{0} transverse momentum distribution",34,ptbinsD0arr);
+  hptD0TGHCsign->SetXTitle("p_{t}  [GeV/c]");
+  hptD0TGHCsign->SetYTitle("Entries");
+  TH1F *hptD0VsMaxPtTGHCsign=new TH1F("hptD0VsMaxPtTGHCsign","Difference between D^{0} pt and highest (or second) pt",400,-50.,50.);
+  TH2F *hptD0PTallsqrtTGHCsign=new TH2F("hptD0PTallsqrtTGHCsign","D^{0} pt Vs Sqrt(Sum pt square)",34,ptbinsD0arr,200,dumbinning);
+  TH2F *hptD0PTallTGHCsign=new TH2F("hptD0PTallTGHCsign","D^{0} pt Vs Sum pt ",34,ptbinsD0arr,200,dumbinning);
+  TH2F *hptD0vsptBTGHCsign=new TH2F("hptD0vsptBTGHCsign","D^{0} pt Vs B pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hpD0vspBTGHCsign=new TH2F("hpD0vspBTGHCsign","D^{0} tot momentum Vs B tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hptD0vsptcquarkTGHCsign=new TH2F("hptD0vsptcquarkTGHCsign","D^{0} pt Vs cquark pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hpD0vspcquarkTGHCsign=new TH2F("hpD0vspcquarkTGHCsign","D^{0} tot momentum Vs cquark tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  flistTghCutsSignal->Add(hdcaTGHCsign);
+  flistTghCutsSignal->Add(hcosthetastarTGHCsign);
+  flistTghCutsSignal->Add(hptD0TGHCsign);
+  flistTghCutsSignal->Add(hptD0VsMaxPtTGHCsign);
+  flistTghCutsSignal->Add(hptD0PTallsqrtTGHCsign);
+  flistTghCutsSignal->Add(hptD0PTallTGHCsign);
+  flistTghCutsSignal->Add(hptD0vsptBTGHCsign);
+  flistTghCutsSignal->Add(hpD0vspBTGHCsign);
+  flistTghCutsSignal->Add(hptD0vsptcquarkTGHCsign);
+  flistTghCutsSignal->Add(hpD0vspcquarkTGHCsign);
+  TH1F *hd0zD0ptTGHCsign;
+  TH1F *hInvMassD0TGHCsign,*hInvMassD0barTGHCsign;
+  TH2F *hInvMassPtTGHCsign=new TH2F("hInvMassPtTGHCsign","Candidate p_{t} Vs invariant mass",330,1.700,2.030,200,0.,20.);
+ THnSparseF *hSparseTGHCsign=new THnSparseF("hSparseTGHCsign","Candidate Masses, pt, Imp Par;massD0;massD0bar;pt;impactpar;selcase",5,nbinsSparse);
+  hSparseTGHCsign->SetBinEdges(0,massbins);
+  hSparseTGHCsign->SetBinEdges(1,massbins);
+  hSparseTGHCsign->SetBinEdges(2,ptbinsForNsparse);
+  hSparseTGHCsign->SetBinEdges(3,impparbins);
+  hSparseTGHCsign->SetBinEdges(4,massHypoBins); 
+  flistTghCutsSignal->Add(hSparseTGHCsign);
+
+  THnSparseF *hSparseRecoTGHCfromB=new THnSparseF("hSparseRecoTGHCfromB","Candidate Masses, pt, Imp Par;massD0;massD0bar;pt;impactpar;selcase",5,nbinsSparse);
+  hSparseRecoTGHCfromB->SetBinEdges(0,massbins);
+  hSparseRecoTGHCfromB->SetBinEdges(1,massbins);
+  hSparseRecoTGHCfromB->SetBinEdges(2,ptbinsForNsparse);
+  hSparseRecoTGHCfromB->SetBinEdges(3,impparbins);
+  hSparseRecoTGHCfromB->SetBinEdges(4,massHypoBins); 
+  flistTghCutsFromB->Add(hSparseRecoTGHCfromB);
+
+
+
+  THnSparseF *hSparseCxyLxyTGHCsign=new THnSparseF("hSparseCxyLxyTGHCsign","Candidate Mass;massD0;Pt;CosXY;Lxy",4,nbinsSparsCxyLxy,binLowLimitSparseCxyLxy,binUpLimitSparseCxyLxy);
+  hSparseCxyLxyTGHCsign->SetBinEdges(1,ptbinlimitsCxyLxy);
+  hSparseCxyLxyTGHCsign->GetAxis(0)->SetName("mass");
+  hSparseCxyLxyTGHCsign->GetAxis(0)->SetTitle("Invariant Mass (K#pi) [GeV/c^{2}]");
+  hSparseCxyLxyTGHCsign->GetAxis(1)->SetName("pt");
+  hSparseCxyLxyTGHCsign->GetAxis(1)->SetTitle("p_{t} [GeV/c]");
+  hSparseCxyLxyTGHCsign->GetAxis(2)->SetName("CosPointXY");
+  hSparseCxyLxyTGHCsign->GetAxis(2)->SetTitle("Cos#theta_{point}^{XY}");
+  hSparseCxyLxyTGHCsign->GetAxis(3)->SetName("NormDecLengthXY");
+  hSparseCxyLxyTGHCsign->GetAxis(3)->SetTitle("Normalized XY decay length");
+
+
+  flistTghCutsSignal->Add(hSparseCxyLxyTGHCsign);
+  
+  
+  TH1F *hetaTGHCsign;
+  TH1F *hCosPDPBTGHCsign;
+  TH1F *hCosPcPDTGHCsign;
+  flistTghCutsSignal->Add(hInvMassPtTGHCsign);
+// %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
+  TH2F *hd0D0VSd0xd0TGHCsignpt;
+  TH2F *hangletracksVSd0xd0TGHCsignpt;
+  TH2F *hangletracksVSd0D0TGHCsignpt;
+  TH1F *hd0xd0TGHCsignpt;
+  TH1F *hPhiHistPMTGHCsignpt,*hPhiHistSBTGHCsignpt;
+
+  TH2F *hTOFpidTGHCsign=new TH2F("hTOFpidTGHCsign","TOF time VS momentum",10,0.,4.,50,-50000.,50000.);
+  flistTghCutsSignal->Add(hTOFpidTGHCsign);
+
+  for(Int_t i=0;i<fnbins;i++){
+    // Printf("INSIDE FIRST LOOP FOR  TIGHT CUTS HISTO CREATION %d\n", fnbins);
+    namehist="hPhiHistPMTGHCsign_pt";
+    namehist+=i;
+    titlehist="Azimuthal correlation TGH Cuts Sign PM ptbin=";
+    titlehist+=i;
+    hPhiHistPMTGHCsignpt=new TH1F(namehist.Data(),titlehist.Data(),100,-3.15,3.15);
+    hPhiHistPMTGHCsignpt->Sumw2();
+    flistTghCutsSignal->Add(hPhiHistPMTGHCsignpt);
+
+    namehist="hPhiHistSBTGHCsign_pt";
+    namehist+=i;
+    titlehist="Azimuthal correlation TGH Cuts Sign SB ptbin=";
+    titlehist+=i;
+    hPhiHistSBTGHCsignpt=new TH1F(namehist.Data(),titlehist.Data(),100,-3.15,3.15);
+    hPhiHistSBTGHCsignpt->Sumw2();
+    flistTghCutsSignal->Add(hPhiHistSBTGHCsignpt);
+
+    namehist="hd0zD0ptTGHCsign_pt";
+    namehist+=i;
+    titlehist="d0(z) Tight Cuts Signal ptbin=";
+    titlehist+=i;
+    hd0zD0ptTGHCsign=new TH1F(namehist.Data(),titlehist.Data(),1000,-3000,3000.);
+    hd0zD0ptTGHCsign->SetXTitle("d_{0}(z)    [#mum]");
+    hd0zD0ptTGHCsign->SetYTitle("Entries");
+    flistTghCutsSignal->Add(hd0zD0ptTGHCsign);
+
+    namehist="hInvMassD0TGHCsign_pt";
+    namehist+=i;
+    titlehist="Invariant Mass Tight Cuts Signal ptbin=";
+    titlehist+=i;
+    hInvMassD0TGHCsign=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
+    hInvMassD0TGHCsign->SetXTitle("Invariant Mass    [GeV]");
+    hInvMassD0TGHCsign->SetYTitle("Entries");
+    flistTghCutsSignal->Add(hInvMassD0TGHCsign);
+
+    namehist="hInvMassD0barTGHCsign_pt";
+    namehist+=i;
+    titlehist="Invariant Mass D0bar Tight Cuts Signal ptbin=";
+    titlehist+=i;
+    hInvMassD0barTGHCsign=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
+    hInvMassD0barTGHCsign->SetXTitle("Invariant Mass    [GeV]");
+    hInvMassD0barTGHCsign->SetYTitle("Entries");
+    flistTghCutsSignal->Add(hInvMassD0barTGHCsign);
+
+
+    namehist="hetaTGHCsign_pt";
+    namehist+=i;
+    titlehist="eta Tight Cuts Signal ptbin=";
+    titlehist+=i;
+    hetaTGHCsign=new TH1F(namehist.Data(),titlehist.Data(),100,-3.,3.);
+    hetaTGHCsign->SetXTitle("Pseudorapidity");
+    hetaTGHCsign->SetYTitle("Entries");
+    flistTghCutsSignal->Add(hetaTGHCsign);
+
+    namehist="hCosPDPBTGHCsign_pt";
+    namehist+=i;
+    titlehist="Cosine between D0 momentum and B momentum, ptbin=";
+    titlehist+=i;
+    hCosPDPBTGHCsign=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
+    hCosPDPBTGHCsign->SetXTitle("Cosine between D0 momentum and B momentum");
+    hCosPDPBTGHCsign->SetYTitle("Entries");
+    flistTghCutsSignal->Add(hCosPDPBTGHCsign);
+
+    namehist="hCosPcPDTGHCsign_pt";
+    namehist+=i;
+    titlehist="Cosine between cquark momentum and D0 momentum, ptbin=";
+    titlehist+=i;
+    hCosPcPDTGHCsign=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
+    hCosPcPDTGHCsign->SetXTitle("Cosine between c quark momentum and D0 momentum");
+    hCosPcPDTGHCsign->SetYTitle("Entries");
+    flistTghCutsSignal->Add(hCosPcPDTGHCsign);
+   
+ // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
+    namehist="hd0xd0TGHCsign_pt";
+    namehist+=i;
+    titlehist="d0xd0 Tight Cuts Signal ptbin=";
+    titlehist+=i;
+    hd0xd0TGHCsignpt=new TH1F(namehist.Data(),titlehist.Data(),1000,-50000.,10000.);
+    hd0xd0TGHCsignpt->SetXTitle("d_{0}^{K}xd_{0}^{#pi}   [#mum^2]");
+    hd0xd0TGHCsignpt->SetYTitle("Entries");
+    flistTghCutsSignal->Add(hd0xd0TGHCsignpt);
+
+
+    namehist="hd0D0VSd0xd0TGHCsign_pt";
+    namehist+=i;
+    titlehist="d_{0}^{D^{0}} Vs d_{0}^{K}xd_{0}^{#pi} Tight Cuts Signal ptbin=";
+    titlehist+=i;
+    hd0D0VSd0xd0TGHCsignpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,100,-300,300);
+    hd0D0VSd0xd0TGHCsignpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
+    hd0D0VSd0xd0TGHCsignpt->SetYTitle(" d_{0}^{D^{0}}    [#mum]");
+    flistTghCutsSignal->Add(hd0D0VSd0xd0TGHCsignpt);
+    
+    
+    namehist="hangletracksVSd0xd0TGHCsign_pt";
+    namehist+=i;
+    titlehist="Angle between K and #pi tracks Vs d_{0}^{K}xd_{0}^{#pi} Tight Cuts Signal ptbin=";
+    titlehist+=i;
+    hangletracksVSd0xd0TGHCsignpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,40,-0.1,3.24);
+    hangletracksVSd0xd0TGHCsignpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
+    hangletracksVSd0xd0TGHCsignpt->SetYTitle(" angle between K and #p tracks  [rad]");
+    flistTghCutsSignal->Add(hangletracksVSd0xd0TGHCsignpt);
+    
+
+    namehist="hangletracksVSd0D0TGHCsign_pt";
+    namehist+=i;
+    titlehist="Angle between K and #pi tracks Vs d_{0}^{D^{0}} Tight Cuts Signal ptbin=";
+    titlehist+=i;
+    hangletracksVSd0D0TGHCsignpt=new TH2F(namehist.Data(),titlehist.Data(),200,-400.,400.,40,-0.12,3.24);
+    hangletracksVSd0D0TGHCsignpt->SetXTitle(" d_{0}^{D^{0}} [#mum]");
+    hangletracksVSd0D0TGHCsignpt->SetYTitle(" angle between K and #p tracks  [rad]");
+    flistTghCutsSignal->Add(hangletracksVSd0D0TGHCsignpt);
+
+  }
+  // %%%%%%%% END OF NEW HISTOS %%%%%%%%%%%%%
+  //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+
+
+
+
+  // ####### d0 D0 histos ############
   TH1F *hd0D0TGHCsignPM = new TH1F("hd0D0TGHCsignPM","D^{0} impact par. plot , Tight Cuts ,Signal,Mass Peak (All momenta)",1000,-1000.,1000.);
   hd0D0TGHCsignPM->SetXTitle("Impact parameter [#mum]");
   hd0D0TGHCsignPM->SetYTitle("Entries");
@@ -1911,12 +4091,12 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistTghCutsSignal->Add(hd0D0VtxTrueTGHCsignSB);
   flistTghCutsSignal->Add(hMCd0D0TGHCsignSB);
   
-  TH1F **hd0D0ptTGHCsignPM=new TH1F*[fnbins];
-  TH1F **hMCd0D0ptTGHCsignPM=new TH1F*[fnbins];
-  TH1F ** hd0D0VtxTrueptTGHCsignPM=new TH1F*[fnbins];
-  TH1F **hd0D0ptTGHCsignSB=new TH1F*[fnbins];
-  TH1F **hMCd0D0ptTGHCsignSB=new TH1F*[fnbins];
-  TH1F ** hd0D0VtxTrueptTGHCsignSB=new TH1F*[fnbins];
+  TH1F *hd0D0ptTGHCsignPM;
+  TH1F *hMCd0D0ptTGHCsignPM;
+  TH1F *hd0D0VtxTrueptTGHCsignPM;
+  TH1F *hd0D0ptTGHCsignSB;
+  TH1F *hMCd0D0ptTGHCsignSB;
+  TH1F *hd0D0VtxTrueptTGHCsignSB;
   namehist="hd0D0ptTGHCsign_";
   titlehist="D^{0} impact par. plot, Tight Cuts, Signal, ";
   for(Int_t i=0;i<fnbins;i++){
@@ -1931,23 +4111,23 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
     strtitlept+=fptbins[i+1];
     strtitlept.Append(" [GeV/c]");
     
-    hd0D0ptTGHCsignPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0ptTGHCsignPM[i]->SetXTitle("Impact parameter [#mum] ");
-    hd0D0ptTGHCsignPM[i]->SetYTitle("Entries");
-    flistTghCutsSignal->Add(hd0D0ptTGHCsignPM[i]);
+    hd0D0ptTGHCsignPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0ptTGHCsignPM->SetXTitle("Impact parameter [#mum] ");
+    hd0D0ptTGHCsignPM->SetYTitle("Entries");
+    flistTghCutsSignal->Add(hd0D0ptTGHCsignPM);
 
     strnamept.ReplaceAll("hd0D0","hMCd0D0");
-    hMCd0D0ptTGHCsignPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hMCd0D0ptTGHCsignPM[i]->SetXTitle("MC Impact parameter [#mum] ");
-    hMCd0D0ptTGHCsignPM[i]->SetYTitle("Entries");
-    flistTghCutsSignal->Add(hMCd0D0ptTGHCsignPM[i]);
+    hMCd0D0ptTGHCsignPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hMCd0D0ptTGHCsignPM->SetXTitle("MC Impact parameter [#mum] ");
+    hMCd0D0ptTGHCsignPM->SetYTitle("Entries");
+    flistTghCutsSignal->Add(hMCd0D0ptTGHCsignPM);
  
 
     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
-    hd0D0VtxTrueptTGHCsignPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0VtxTrueptTGHCsignPM[i]->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
-    hd0D0VtxTrueptTGHCsignPM[i]->SetYTitle("Entries");
-    flistTghCutsSignal->Add(hd0D0VtxTrueptTGHCsignPM[i]);
+    hd0D0VtxTrueptTGHCsignPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0VtxTrueptTGHCsignPM->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
+    hd0D0VtxTrueptTGHCsignPM->SetYTitle("Entries");
+    flistTghCutsSignal->Add(hd0D0VtxTrueptTGHCsignPM);
     
     strnamept=namehist;
     strnamept.Append("SBMss_pt");
@@ -1960,35 +4140,36 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
     strtitlept+=fptbins[i+1];
     strtitlept.Append(" [GeV/c]");
     
-    hd0D0ptTGHCsignSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0ptTGHCsignSB[i]->SetXTitle("Impact parameter [#mum] ");
-    hd0D0ptTGHCsignSB[i]->SetYTitle("Entries");
-    flistTghCutsSignal->Add(hd0D0ptTGHCsignSB[i]);
+    hd0D0ptTGHCsignSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0ptTGHCsignSB->SetXTitle("Impact parameter [#mum] ");
+    hd0D0ptTGHCsignSB->SetYTitle("Entries");
+    flistTghCutsSignal->Add(hd0D0ptTGHCsignSB);
 
     strnamept.ReplaceAll("hd0D0","hMCd0D0");
-    hMCd0D0ptTGHCsignSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hMCd0D0ptTGHCsignSB[i]->SetXTitle("MC Impact parameter [#mum] ");
-    hMCd0D0ptTGHCsignSB[i]->SetYTitle("Entries");
-    flistTghCutsSignal->Add(hMCd0D0ptTGHCsignSB[i]);
+    hMCd0D0ptTGHCsignSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hMCd0D0ptTGHCsignSB->SetXTitle("MC Impact parameter [#mum] ");
+    hMCd0D0ptTGHCsignSB->SetYTitle("Entries");
+    flistTghCutsSignal->Add(hMCd0D0ptTGHCsignSB);
 
     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
-    hd0D0VtxTrueptTGHCsignSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0VtxTrueptTGHCsignSB[i]->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
-    hd0D0VtxTrueptTGHCsignSB[i]->SetYTitle("Entries");
-    flistTghCutsSignal->Add(hd0D0VtxTrueptTGHCsignSB[i]);
+    hd0D0VtxTrueptTGHCsignSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0VtxTrueptTGHCsignSB->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
+    hd0D0VtxTrueptTGHCsignSB->SetYTitle("Entries");
+    flistTghCutsSignal->Add(hd0D0VtxTrueptTGHCsignSB);
   }
 
 
   //############ TIGHT CUTS BACKGROUND HISTOGRAMS ###########
   //
   //   ######## global properties histos #######
-  TH2F *hCPtaVSd0d0TGHCback=new TH2F("hCPtaVSd0d0TGHCback","hCPtaVSd0d0_TightCuts_Background",1000,-100000.,100000.,100,0.,1.);
+  TH2F *hCPtaVSd0d0TGHCback=new TH2F("hCPtaVSd0d0TGHCback","hCPtaVSd0d0_TightCuts_Background",1000,-100000.,100000.,100,-1.,1.);
   TH1F *hSecVtxZTGHCback=new TH1F("hSecVtxZTGHCback","hSecVtxZ_TightCuts_Background",1000,-8.,8.);
   TH1F *hSecVtxXTGHCback=new TH1F("hSecVtxXTGHCback","hSecVtxX_TightCuts_Background",1000,-3000.,3000.);
   TH1F *hSecVtxYTGHCback=new TH1F("hSecVtxYTGHCback","hSecVtxY_TightCuts_Background",1000,-3000.,3000.);
   TH2F *hSecVtxXYTGHCback=new TH2F("hSecVtxXYTGHCback","hSecVtxXY_TightCuts_Background",1000,-3000.,3000.,1000,-3000.,3000.);
   TH1F *hSecVtxPhiTGHCback=new TH1F("hSecVtxPhiTGHCback","hSecVtxPhi_TightCuts_Background",180,-180.1,180.1);
-  TH1F *hCPtaTGHCback=new TH1F("hCPtaTGHCback","hCPta_TightCuts_Background",100,0.,1.);
+  TH1F *hd0singlTrackTGHCback=new TH1F("hd0singlTrackTGHCback","hd0singlTrackTightCuts_Back",1000,-5000.,5000.);
+  TH1F *hCPtaTGHCback=new TH1F("hCPtaTGHCback","hCPta_TightCuts_Background",100,-1.,1.);
   TH1F *hd0xd0TGHCback=new TH1F("hd0xd0TGHCback","hd0xd0_TightCuts_Background",1000,-100000.,100000.);
   TH1F *hMassTrueTGHCback=new TH1F("hMassTrueTGHCback","D^{0} MC inv. Mass Tight Cuts Background(All momenta)",600,1.600,2.200);
   TH1F *hMassTGHCback=new TH1F("hMassTGHCback","D^{0} inv. Mass Tight Cuts Background (All momenta)",600,1.600,2.200);
@@ -2006,6 +4187,7 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistTghCutsBack->Add(hSecVtxXTGHCback);
   flistTghCutsBack->Add(hSecVtxXYTGHCback);
   flistTghCutsBack->Add(hSecVtxPhiTGHCback);
+  flistTghCutsBack->Add(hd0singlTrackTGHCback);
   flistTghCutsBack->Add(hCPtaTGHCback);
   flistTghCutsBack->Add(hd0xd0TGHCback);
   flistTghCutsBack->Add(hMassTrueTGHCback);
@@ -2016,6 +4198,166 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistTghCutsBack->Add(hMassTGHCbackSB);
 
 
+
+
+
+
+
+ //%%% NEW HISTOS %%%%%%%%%%%%%%%%
+  TH1F *hdcaTGHCback=new TH1F("hdcaTGHCback","hdca_TightCuts_Backgr",100,0.,1000.);
+  hdcaTGHCback->SetXTitle("dca   [#mum]");
+  hdcaTGHCback->SetYTitle("Entries");
+  TH1F *hcosthetastarTGHCback=new TH1F("hcosthetastarTGHCback","hCosThetaStar_TightCuts_Backgr",50,-1.,1.);
+  hcosthetastarTGHCback->SetXTitle("cos #theta^{*}");
+  hcosthetastarTGHCback->SetYTitle("Entries");
+  TH1F *hptD0TGHCback=new TH1F("hptD0TGHCback","D^{0} transverse momentum distribution",34,ptbinsD0arr);
+  hptD0TGHCback->SetXTitle("p_{t}  [GeV/c]");
+  hptD0TGHCback->SetYTitle("Entries");
+  TH1F *hptD0VsMaxPtTGHCback=new TH1F("hptD0VsMaxPtTGHCback","Difference between D^{0} pt and highest (or second) pt",400,-50.,50.);
+  TH2F *hptD0PTallsqrtTGHCback=new TH2F("hptD0PTallsqrtTGHCback","D^{0} pt Vs Sqrt(Sum pt square)",34,ptbinsD0arr,200,dumbinning);
+  TH2F *hptD0PTallTGHCback=new TH2F("hptD0PTallTGHCback","D^{0} pt Vs Sum pt ",34,ptbinsD0arr,200,dumbinning);
+  TH2F *hptD0vsptBTGHCback=new TH2F("hptD0vsptBTGHCback","D^{0} pt Vs B pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hpD0vspBTGHCback=new TH2F("hpD0vspBTGHCback","D^{0} tot momentum Vs B tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hptD0vsptcquarkTGHCback=new TH2F("hptD0vsptcquarkTGHCback","D^{0} pt Vs cquark pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hpD0vspcquarkTGHCback=new TH2F("hpD0vspcquarkTGHCback","D^{0} tot momentum Vs cquark tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  flistTghCutsBack->Add(hdcaTGHCback);
+  flistTghCutsBack->Add(hcosthetastarTGHCback);
+  flistTghCutsBack->Add(hptD0TGHCback);
+  flistTghCutsBack->Add(hptD0VsMaxPtTGHCback);
+  flistTghCutsBack->Add(hptD0PTallsqrtTGHCback);
+  flistTghCutsBack->Add(hptD0PTallTGHCback);
+  flistTghCutsBack->Add(hptD0vsptBTGHCback);
+  flistTghCutsBack->Add(hpD0vspBTGHCback);
+  flistTghCutsBack->Add(hptD0vsptcquarkTGHCback);
+  flistTghCutsBack->Add(hpD0vspcquarkTGHCback);
+  TH1F *hd0zD0ptTGHCback;
+  TH1F *hInvMassD0TGHCback,*hInvMassD0barTGHCback;
+  TH2F *hInvMassPtTGHCback=new TH2F("hInvMassPtTGHCback","Candidate p_{t} Vs invariant mass",330,1.700,2.030,200,0.,20.);
+ THnSparseF *hSparseTGHCback=new THnSparseF("hSparseTGHCback","Candidate Masses, pt, Imp Par;massD0;massD0bar;pt;impactpar;selcase",5,nbinsSparse);
+  hSparseTGHCback->SetBinEdges(0,massbins);
+  hSparseTGHCback->SetBinEdges(1,massbins);
+  hSparseTGHCback->SetBinEdges(2,ptbinsForNsparse);
+  hSparseTGHCback->SetBinEdges(3,impparbins);
+  hSparseTGHCback->SetBinEdges(4,massHypoBins); 
+  flistTghCutsBack->Add(hSparseTGHCback);
+  TH1F *hetaTGHCback;
+  TH1F *hCosPDPBTGHCback;
+  TH1F *hCosPcPDTGHCback;
+  flistTghCutsBack->Add(hInvMassPtTGHCback);
+// %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
+  TH2F *hd0D0VSd0xd0TGHCbackpt;
+  TH2F *hangletracksVSd0xd0TGHCbackpt;
+  TH2F *hangletracksVSd0D0TGHCbackpt;
+  TH1F *hd0xd0TGHCbackpt;
+
+  TH2F *hTOFpidTGHCback=new TH2F("hTOFpidTGHCback","TOF time VS momentum",10,0.,4.,50,-50000.,50000.);
+  flistTghCutsBack->Add(hTOFpidTGHCback);
+
+
+  for(Int_t i=0;i<fnbins;i++){
+    namehist="hd0zD0ptTGHCback_pt";
+    namehist+=i;
+    titlehist="d0(z) Tight Cuts Backgrm ptbin=";
+    titlehist+=i;
+    hd0zD0ptTGHCback=new TH1F(namehist.Data(),titlehist.Data(),1000,-3000,3000.);
+    hd0zD0ptTGHCback->SetXTitle("d_{0}(z)    [#mum]");
+    hd0zD0ptTGHCback->SetYTitle("Entries");
+    flistTghCutsBack->Add(hd0zD0ptTGHCback);
+
+    namehist="hInvMassD0TGHCback_pt";
+    namehist+=i;
+    titlehist="Invariant Mass Tight Cuts Backgr ptbin=";
+    titlehist+=i;
+    hInvMassD0TGHCback=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
+    hInvMassD0TGHCback->SetXTitle("Invariant Mass    [GeV]");
+    hInvMassD0TGHCback->SetYTitle("Entries");
+    flistTghCutsBack->Add(hInvMassD0TGHCback);
+
+    namehist="hInvMassD0barTGHCback_pt";
+    namehist+=i;
+    titlehist="Invariant Mass D0bar Tight Cuts Back ptbin=";
+    titlehist+=i;
+    hInvMassD0barTGHCback=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
+    hInvMassD0barTGHCback->SetXTitle("Invariant Mass    [GeV]");
+    hInvMassD0barTGHCback->SetYTitle("Entries");
+    flistTghCutsBack->Add(hInvMassD0barTGHCback);
+
+    namehist="hetaTGHCback_pt";
+    namehist+=i;
+    titlehist="eta Tight Cuts Backgr ptbin=";
+    titlehist+=i;
+    hetaTGHCback=new TH1F(namehist.Data(),titlehist.Data(),100,-3.,3.);
+    hetaTGHCback->SetXTitle("Pseudorapidity");
+    hetaTGHCback->SetYTitle("Entries");
+    flistTghCutsBack->Add(hetaTGHCback);
+
+    namehist="hCosPDPBTGHCback_pt";
+    namehist+=i;
+    titlehist="Cosine between D0 momentum and B momentum, ptbin=";
+    titlehist+=i;
+    hCosPDPBTGHCback=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
+    hCosPDPBTGHCback->SetXTitle("Cosine between D0 momentum and B momentum");
+    hCosPDPBTGHCback->SetYTitle("Entries");
+    flistTghCutsBack->Add(hCosPDPBTGHCback);
+
+    namehist="hCosPcPDTGHCback_pt";
+    namehist+=i;
+    titlehist="Cosine between cquark momentum and D0 momentum, ptbin=";
+    titlehist+=i;
+    hCosPcPDTGHCback=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
+    hCosPcPDTGHCback->SetXTitle("Cosine between c quark momentum and D0 momentum");
+    hCosPcPDTGHCback->SetYTitle("Entries");
+    flistTghCutsBack->Add(hCosPcPDTGHCback);
+
+ // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
+    namehist="hd0xd0TGHCback_pt";
+    namehist+=i;
+    titlehist="d0xd0 Tight Cuts Back ptbin=";
+    titlehist+=i;
+    hd0xd0TGHCbackpt=new TH1F(namehist.Data(),titlehist.Data(),1000,-50000.,10000.);
+    hd0xd0TGHCbackpt->SetXTitle("d_{0}^{K}xd_{0}^{#pi}   [#mum^2]");
+    hd0xd0TGHCbackpt->SetYTitle("Entries");
+    flistTghCutsBack->Add(hd0xd0TGHCbackpt);
+
+
+    namehist="hd0D0VSd0xd0TGHCback_pt";
+    namehist+=i;
+    titlehist="d_{0}^{D^{0}} Vs d_{0}^{K}xd_{0}^{#pi} Tight Cuts Back ptbin=";
+    titlehist+=i;
+    hd0D0VSd0xd0TGHCbackpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,100,-300,300);
+    hd0D0VSd0xd0TGHCbackpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
+    hd0D0VSd0xd0TGHCbackpt->SetYTitle(" d_{0}^{D^{0}}    [#mum]");
+    flistTghCutsBack->Add(hd0D0VSd0xd0TGHCbackpt);
+    
+    
+    namehist="hangletracksVSd0xd0TGHCback_pt";
+    namehist+=i;
+    titlehist="Angle between K and #pi tracks Vs d_{0}^{K}xd_{0}^{#pi} Tight Cuts Back ptbin=";
+    titlehist+=i;
+    hangletracksVSd0xd0TGHCbackpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,40,-0.1,3.24);
+    hangletracksVSd0xd0TGHCbackpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
+    hangletracksVSd0xd0TGHCbackpt->SetYTitle(" angle between K and #p tracks  [rad]");
+    flistTghCutsBack->Add(hangletracksVSd0xd0TGHCbackpt);
+    
+
+    namehist="hangletracksVSd0D0TGHCback_pt";
+    namehist+=i;
+    titlehist="Angle between K and #pi tracks Vs d_{0}^{D^{0}} Tight Cuts Back ptbin=";
+    titlehist+=i;
+    hangletracksVSd0D0TGHCbackpt=new TH2F(namehist.Data(),titlehist.Data(),200,-400.,400.,40,-0.12,3.24);
+    hangletracksVSd0D0TGHCbackpt->SetXTitle(" d_{0}^{D^{0}} [#mum]");
+    hangletracksVSd0D0TGHCbackpt->SetYTitle(" angle between K and #p tracks  [rad]");
+    flistTghCutsBack->Add(hangletracksVSd0D0TGHCbackpt);
+
+    
+  }
+  // %%%%%%%% END OF NEW HISTOS %%%%%%%%%%%%%
+  //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
   // ####### d0 D0 histos ############
   
  TH1F *hd0D0TGHCbackPM = new TH1F("hd0D0TGHCbackPM","D^{0} impact par. plot , Tight Cuts ,Background,Mass Peak (All momenta)",1000,-1000.,1000.);
@@ -2049,12 +4391,12 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistTghCutsBack->Add(hd0D0VtxTrueTGHCbackSB);
   flistTghCutsBack->Add(hMCd0D0TGHCbackSB);
   
-  TH1F **hd0D0ptTGHCbackPM=new TH1F*[fnbins];
-  TH1F **hMCd0D0ptTGHCbackPM=new TH1F*[fnbins];
-  TH1F ** hd0D0VtxTrueptTGHCbackPM=new TH1F*[fnbins];
-  TH1F **hd0D0ptTGHCbackSB=new TH1F*[fnbins];
-  TH1F **hMCd0D0ptTGHCbackSB=new TH1F*[fnbins];
-  TH1F ** hd0D0VtxTrueptTGHCbackSB=new TH1F*[fnbins];
+  TH1F *hd0D0ptTGHCbackPM;
+  TH1F *hMCd0D0ptTGHCbackPM;
+  TH1F *hd0D0VtxTrueptTGHCbackPM;
+  TH1F *hd0D0ptTGHCbackSB;
+  TH1F *hMCd0D0ptTGHCbackSB;
+  TH1F *hd0D0VtxTrueptTGHCbackSB;
   namehist="hd0D0ptTGHCback_";
   titlehist="D^{0} impact par. plot, Tight Cuts, Background, ";
   for(Int_t i=0;i<fnbins;i++){
@@ -2069,23 +4411,23 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
     strtitlept+=fptbins[i+1];
     strtitlept.Append(" [GeV/c]");
     
-    hd0D0ptTGHCbackPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0ptTGHCbackPM[i]->SetXTitle("Impact parameter [#mum] ");
-    hd0D0ptTGHCbackPM[i]->SetYTitle("Entries");
-    flistTghCutsBack->Add(hd0D0ptTGHCbackPM[i]);
+    hd0D0ptTGHCbackPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0ptTGHCbackPM->SetXTitle("Impact parameter [#mum] ");
+    hd0D0ptTGHCbackPM->SetYTitle("Entries");
+    flistTghCutsBack->Add(hd0D0ptTGHCbackPM);
 
     strnamept.ReplaceAll("hd0D0","hMCd0D0");
-    hMCd0D0ptTGHCbackPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hMCd0D0ptTGHCbackPM[i]->SetXTitle("MC Impact parameter [#mum] ");
-    hMCd0D0ptTGHCbackPM[i]->SetYTitle("Entries");
-    flistTghCutsBack->Add(hMCd0D0ptTGHCbackPM[i]);
+    hMCd0D0ptTGHCbackPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hMCd0D0ptTGHCbackPM->SetXTitle("MC Impact parameter [#mum] ");
+    hMCd0D0ptTGHCbackPM->SetYTitle("Entries");
+    flistTghCutsBack->Add(hMCd0D0ptTGHCbackPM);
  
 
     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
-    hd0D0VtxTrueptTGHCbackPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0VtxTrueptTGHCbackPM[i]->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
-    hd0D0VtxTrueptTGHCbackPM[i]->SetYTitle("Entries");
-    flistTghCutsBack->Add(hd0D0VtxTrueptTGHCbackPM[i]);
+    hd0D0VtxTrueptTGHCbackPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0VtxTrueptTGHCbackPM->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
+    hd0D0VtxTrueptTGHCbackPM->SetYTitle("Entries");
+    flistTghCutsBack->Add(hd0D0VtxTrueptTGHCbackPM);
     
     strnamept=namehist;
     strnamept.Append("SBMss_pt");
@@ -2098,22 +4440,22 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
     strtitlept+=fptbins[i+1];
     strtitlept.Append(" [GeV/c]");
     
-    hd0D0ptTGHCbackSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0ptTGHCbackSB[i]->SetXTitle("Impact parameter [#mum] ");
-    hd0D0ptTGHCbackSB[i]->SetYTitle("Entries");
-    flistTghCutsBack->Add(hd0D0ptTGHCbackSB[i]);
+    hd0D0ptTGHCbackSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0ptTGHCbackSB->SetXTitle("Impact parameter [#mum] ");
+    hd0D0ptTGHCbackSB->SetYTitle("Entries");
+    flistTghCutsBack->Add(hd0D0ptTGHCbackSB);
 
     strnamept.ReplaceAll("hd0D0","hMCd0D0");
-    hMCd0D0ptTGHCbackSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hMCd0D0ptTGHCbackSB[i]->SetXTitle("MC Impact parameter [#mum] ");
-    hMCd0D0ptTGHCbackSB[i]->SetYTitle("Entries");
-    flistTghCutsBack->Add(hMCd0D0ptTGHCbackSB[i]);
+    hMCd0D0ptTGHCbackSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hMCd0D0ptTGHCbackSB->SetXTitle("MC Impact parameter [#mum] ");
+    hMCd0D0ptTGHCbackSB->SetYTitle("Entries");
+    flistTghCutsBack->Add(hMCd0D0ptTGHCbackSB);
 
     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
-    hd0D0VtxTrueptTGHCbackSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0VtxTrueptTGHCbackSB[i]->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
-    hd0D0VtxTrueptTGHCbackSB[i]->SetYTitle("Entries");
-    flistTghCutsBack->Add(hd0D0VtxTrueptTGHCbackSB[i]);
+    hd0D0VtxTrueptTGHCbackSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0VtxTrueptTGHCbackSB->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
+    hd0D0VtxTrueptTGHCbackSB->SetYTitle("Entries");
+    flistTghCutsBack->Add(hd0D0VtxTrueptTGHCbackSB);
   }
 
 
@@ -2122,13 +4464,14 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   //
   //#######  global properties histos
 
-  TH2F *hCPtaVSd0d0TGHCfromB=new TH2F("hCPtaVSd0d0TGHCfromB","hCPtaVSd0d0_TightCuts_FromB",1000,-100000.,100000.,100,0.,1.);
+  TH2F *hCPtaVSd0d0TGHCfromB=new TH2F("hCPtaVSd0d0TGHCfromB","hCPtaVSd0d0_TightCuts_FromB",1000,-100000.,100000.,100,-1.,1.);
   TH1F *hSecVtxZTGHCfromB=new TH1F("hSecVtxZTGHCfromB","hSecVtxZ_TightCuts_FromB",1000,-8.,8.);
   TH1F *hSecVtxXTGHCfromB=new TH1F("hSecVtxXTGHCfromB","hSecVtxX_TightCuts_FromB",1000,-3000.,3000.);
   TH1F *hSecVtxYTGHCfromB=new TH1F("hSecVtxYTGHCfromB","hSecVtxY_TightCuts_FromB",1000,-3000.,3000.);
   TH2F *hSecVtxXYTGHCfromB=new TH2F("hSecVtxXYTGHCfromB","hSecVtxXY_TightCuts_FromB",1000,-3000.,3000.,1000,-3000.,3000.);
   TH1F *hSecVtxPhiTGHCfromB=new TH1F("hSecVtxPhiTGHCfromB","hSecVtxPhi_TightCuts_FromB",180,-180.1,180.1);
-  TH1F *hCPtaTGHCfromB=new TH1F("hCPtaTGHCfromB","hCPta_TightCuts_FromB",100,0.,1.);
+  TH1F *hd0singlTrackTGHCfromB=new TH1F("hd0singlTrackTGHCfromB","hd0singlTrackTightCuts_FromB",1000,-5000.,5000.);
+  TH1F *hCPtaTGHCfromB=new TH1F("hCPtaTGHCfromB","hCPta_TightCuts_FromB",100,-1.,1.);
   TH1F *hd0xd0TGHCfromB=new TH1F("hd0xd0TGHCfromB","hd0xd0_TightCuts_FromB",1000,-100000.,100000.);
   TH1F *hMassTrueTGHCfromB=new TH1F("hMassTrueTGHCfromB","D^{0} MC inv. Mass Tight Cuts FromB(All momenta)",600,1.600,2.200);
   TH1F *hMassTGHCfromB=new TH1F("hMassTGHCfromB","D^{0} inv. Mass Tight Cuts FromB (All momenta)",600,1.600,2.200);
@@ -2146,6 +4489,7 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistTghCutsFromB->Add(hSecVtxXTGHCfromB);
   flistTghCutsFromB->Add(hSecVtxXYTGHCfromB);
   flistTghCutsFromB->Add(hSecVtxPhiTGHCfromB);
+  flistTghCutsFromB->Add(hd0singlTrackTGHCfromB);
   flistTghCutsFromB->Add(hCPtaTGHCfromB);
   flistTghCutsFromB->Add(hd0xd0TGHCfromB);
   flistTghCutsFromB->Add(hMassTrueTGHCfromB);
@@ -2155,6 +4499,163 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistTghCutsFromB->Add(hMassTrueTGHCfromBSB);
   flistTghCutsFromB->Add(hMassTGHCfromBSB);
 
+
+
+ //%%% NEW HISTOS %%%%%%%%%%%%%%%%
+  TH1F *hdcaTGHCfromB=new TH1F("hdcaTGHCfromB","hdca_TightCuts_FromB",100,0.,1000.);
+  hdcaTGHCfromB->SetXTitle("dca   [#mum]");
+  hdcaTGHCfromB->SetYTitle("Entries");
+  TH1F *hcosthetastarTGHCfromB=new TH1F("hcosthetastarTGHCfromB","hCosThetaStar_TightCuts_FromB",50,-1.,1.);
+  hcosthetastarTGHCfromB->SetXTitle("cos #theta^{*}");
+  hcosthetastarTGHCfromB->SetYTitle("Entries");
+  TH1F *hptD0TGHCfromB=new TH1F("hptD0TGHCfromB","D^{0} transverse momentum distribution",34,ptbinsD0arr);
+  hptD0TGHCfromB->SetXTitle("p_{t}  [GeV/c]");
+  hptD0TGHCfromB->SetYTitle("Entries");
+  TH1F *hptD0VsMaxPtTGHCfromB=new TH1F("hptD0VsMaxPtTGHCfromB","Difference between D^{0} pt and highest (or second) pt",400,-50.,50.);
+  TH2F *hptD0PTallsqrtTGHCfromB=new TH2F("hptD0PTallsqrtTGHCfromB","D^{0} pt Vs Sqrt(Sum pt square)",34,ptbinsD0arr,200,dumbinning);
+  TH2F *hptD0PTallTGHCfromB=new TH2F("hptD0PTallTGHCfromB","D^{0} pt Vs Sum pt ",34,ptbinsD0arr,200,dumbinning);
+  TH2F *hptD0vsptBTGHCfromB=new TH2F("hptD0vsptBTGHCfromB","D^{0} pt Vs B pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hpD0vspBTGHCfromB=new TH2F("hpD0vspBTGHCfromB","D^{0} tot momentum Vs B tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hptD0vsptcquarkTGHCfromB=new TH2F("hptD0vsptcquarkTGHCfromB","D^{0} pt Vs cquark pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hpD0vspcquarkTGHCfromB=new TH2F("hpD0vspcquarkTGHCfromB","D^{0} tot momentum Vs cquark tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  flistTghCutsFromB->Add(hdcaTGHCfromB);
+  flistTghCutsFromB->Add(hcosthetastarTGHCfromB);
+  flistTghCutsFromB->Add(hptD0TGHCfromB);
+  flistTghCutsFromB->Add(hptD0VsMaxPtTGHCfromB);
+  flistTghCutsFromB->Add(hptD0PTallsqrtTGHCfromB);
+  flistTghCutsFromB->Add(hptD0PTallTGHCfromB);
+  flistTghCutsFromB->Add(hptD0vsptBTGHCfromB);
+  flistTghCutsFromB->Add(hpD0vspBTGHCfromB);
+  flistTghCutsFromB->Add(hptD0vsptcquarkTGHCfromB);
+  flistTghCutsFromB->Add(hpD0vspcquarkTGHCfromB);
+  TH1F *hd0zD0ptTGHCfromB;
+  TH1F *hInvMassD0TGHCfromB,*hInvMassD0barTGHCfromB;
+  TH2F *hInvMassPtTGHCfromB=new TH2F("hInvMassPtTGHCfromB","Candidate p_{t} Vs invariant mass",330,1.700,2.030,200,0.,20.);
+ THnSparseF *hSparseTGHCfromB=new THnSparseF("hSparseTGHCfromB","Candidate Masses, pt, Imp Par;massD0;massD0bar;pt;impactpar;selcase",5,nbinsSparse);
+  hSparseTGHCfromB->SetBinEdges(0,massbins);
+  hSparseTGHCfromB->SetBinEdges(1,massbins);
+  hSparseTGHCfromB->SetBinEdges(2,ptbinsForNsparse);
+  hSparseTGHCfromB->SetBinEdges(3,impparbins);
+  hSparseTGHCfromB->SetBinEdges(4,massHypoBins); 
+  flistTghCutsFromB->Add(hSparseTGHCfromB);
+  TH1F *hetaTGHCfromB;
+  TH1F *hCosPDPBTGHCfromB;
+  TH1F *hCosPcPDTGHCfromB;
+  flistTghCutsFromB->Add(hInvMassPtTGHCfromB);
+// %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
+  TH2F *hd0D0VSd0xd0TGHCfromBpt;
+  TH2F *hangletracksVSd0xd0TGHCfromBpt;
+  TH2F *hangletracksVSd0D0TGHCfromBpt;
+  TH1F *hd0xd0TGHCfromBpt;
+
+  TH2F *hTOFpidTGHCfromB=new TH2F("hTOFpidTGHCfromB","TOF time VS momentum",10,0.,4.,50,-50000.,50000.);
+  flistTghCutsFromB->Add(hTOFpidTGHCfromB);
+
+
+  for(Int_t i=0;i<fnbins;i++){
+    namehist="hd0zD0ptTGHCfromB_pt";
+    namehist+=i;
+    titlehist="d0(z) Tight Cuts FromBm ptbin=";
+    titlehist+=i;
+    hd0zD0ptTGHCfromB=new TH1F(namehist.Data(),titlehist.Data(),1000,-3000,3000.);
+    hd0zD0ptTGHCfromB->SetXTitle("d_{0}(z)    [#mum]");
+    hd0zD0ptTGHCfromB->SetYTitle("Entries");
+    flistTghCutsFromB->Add(hd0zD0ptTGHCfromB);
+
+    namehist="hInvMassD0TGHCfromB_pt";
+    namehist+=i;
+    titlehist="Invariant Mass Tight Cuts FromB ptbin=";
+    titlehist+=i;
+    hInvMassD0TGHCfromB=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
+    hInvMassD0TGHCfromB->SetXTitle("Invariant Mass    [GeV]");
+    hInvMassD0TGHCfromB->SetYTitle("Entries");
+    flistTghCutsFromB->Add(hInvMassD0TGHCfromB);
+
+    namehist="hInvMassD0barTGHCfromB_pt";
+    namehist+=i;
+    titlehist="Invariant Mass D0bar Tight Cuts FromB ptbin=";
+    titlehist+=i;
+    hInvMassD0barTGHCfromB=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
+    hInvMassD0barTGHCfromB->SetXTitle("Invariant Mass    [GeV]");
+    hInvMassD0barTGHCfromB->SetYTitle("Entries");
+    flistTghCutsFromB->Add(hInvMassD0barTGHCfromB);
+
+    namehist="hetaTGHCfromB_pt";
+    namehist+=i;
+    titlehist="eta Tight Cuts FromB ptbin=";
+    titlehist+=i;
+    hetaTGHCfromB=new TH1F(namehist.Data(),titlehist.Data(),100,-3.,3.);
+    hetaTGHCfromB->SetXTitle("Pseudorapidity");
+    hetaTGHCfromB->SetYTitle("Entries");
+    flistTghCutsFromB->Add(hetaTGHCfromB);
+
+    namehist="hCosPDPBTGHCfromB_pt";
+    namehist+=i;
+    titlehist="Cosine between D0 momentum and B momentum, ptbin=";
+    titlehist+=i;
+    hCosPDPBTGHCfromB=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
+    hCosPDPBTGHCfromB->SetXTitle("Cosine between D0 momentum and B momentum");
+    hCosPDPBTGHCfromB->SetYTitle("Entries");
+    flistTghCutsFromB->Add(hCosPDPBTGHCfromB);
+
+    namehist="hCosPcPDTGHCfromB_pt";
+    namehist+=i;
+    titlehist="Cosine between cquark momentum and D0 momentum, ptbin=";
+    titlehist+=i;
+    hCosPcPDTGHCfromB=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
+    hCosPcPDTGHCfromB->SetXTitle("Cosine between c quark momentum and D0 momentum");
+    hCosPcPDTGHCfromB->SetYTitle("Entries");
+    flistTghCutsFromB->Add(hCosPcPDTGHCfromB);
+
+// %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
+    namehist="hd0xd0TGHCfromB_pt";
+    namehist+=i;
+    titlehist="d0xd0 Tight Cuts FromB ptbin=";
+    titlehist+=i;
+    hd0xd0TGHCfromBpt=new TH1F(namehist.Data(),titlehist.Data(),1000,-50000.,10000.);
+    hd0xd0TGHCfromBpt->SetXTitle("d_{0}^{K}xd_{0}^{#pi}   [#mum^2]");
+    hd0xd0TGHCfromBpt->SetYTitle("Entries");
+    flistTghCutsFromB->Add(hd0xd0TGHCfromBpt);
+
+
+    namehist="hd0D0VSd0xd0TGHCfromB_pt";
+    namehist+=i;
+    titlehist="d_{0}^{D^{0}} Vs d_{0}^{K}xd_{0}^{#pi} Tight Cuts FromB ptbin=";
+    titlehist+=i;
+    hd0D0VSd0xd0TGHCfromBpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,100,-300,300);
+    hd0D0VSd0xd0TGHCfromBpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
+    hd0D0VSd0xd0TGHCfromBpt->SetYTitle(" d_{0}^{D^{0}}    [#mum]");
+    flistTghCutsFromB->Add(hd0D0VSd0xd0TGHCfromBpt);
+    
+    
+    namehist="hangletracksVSd0xd0TGHCfromB_pt";
+    namehist+=i;
+    titlehist="Angle between K and #pi tracks Vs d_{0}^{K}xd_{0}^{#pi} Tight Cuts FromB ptbin=";
+    titlehist+=i;
+    hangletracksVSd0xd0TGHCfromBpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,40,-0.1,3.24);
+    hangletracksVSd0xd0TGHCfromBpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
+    hangletracksVSd0xd0TGHCfromBpt->SetYTitle(" angle between K and #p tracks  [rad]");
+    flistTghCutsFromB->Add(hangletracksVSd0xd0TGHCfromBpt);
+    
+
+    namehist="hangletracksVSd0D0TGHCfromB_pt";
+    namehist+=i;
+    titlehist="Angle between K and #pi tracks Vs d_{0}^{D^{0}} Tight Cuts FromB ptbin=";
+    titlehist+=i;
+    hangletracksVSd0D0TGHCfromBpt=new TH2F(namehist.Data(),titlehist.Data(),200,-400.,400.,40,-0.12,3.24);
+    hangletracksVSd0D0TGHCfromBpt->SetXTitle(" d_{0}^{D^{0}} [#mum]");
+    hangletracksVSd0D0TGHCfromBpt->SetYTitle(" angle between K and #p tracks  [rad]");
+    flistTghCutsFromB->Add(hangletracksVSd0D0TGHCfromBpt);
+    
+  }
+  // %%%%%%%% END OF NEW HISTOS %%%%%%%%%%%%%
+  //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+
   // ######### d0 D0 histos ##############
   TH1F *hd0D0TGHCfromBPM = new TH1F("hd0D0TGHCfromBPM","D^{0} impact par. plot , Tight Cuts ,FromB,Mass Peak (All momenta)",1000,-1000.,1000.);
   hd0D0TGHCfromBPM->SetXTitle("Impact parameter [#mum]");
@@ -2187,12 +4688,12 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistTghCutsFromB->Add(hd0D0VtxTrueTGHCfromBSB);
   flistTghCutsFromB->Add(hMCd0D0TGHCfromBSB);
   
-  TH1F **hd0D0ptTGHCfromBPM=new TH1F*[fnbins];
-  TH1F **hMCd0D0ptTGHCfromBPM=new TH1F*[fnbins];
-  TH1F ** hd0D0VtxTrueptTGHCfromBPM=new TH1F*[fnbins];
-  TH1F **hd0D0ptTGHCfromBSB=new TH1F*[fnbins];
-  TH1F **hMCd0D0ptTGHCfromBSB=new TH1F*[fnbins];
-  TH1F ** hd0D0VtxTrueptTGHCfromBSB=new TH1F*[fnbins];
+  TH1F *hd0D0ptTGHCfromBPM;
+  TH1F *hMCd0D0ptTGHCfromBPM;
+  TH1F *hd0D0VtxTrueptTGHCfromBPM;
+  TH1F *hd0D0ptTGHCfromBSB;
+  TH1F *hMCd0D0ptTGHCfromBSB;
+  TH1F *hd0D0VtxTrueptTGHCfromBSB;
   namehist="hd0D0ptTGHCfromB_";
   titlehist="D^{0} impact par. plot, Tight Cuts, FromB, ";
   for(Int_t i=0;i<fnbins;i++){
@@ -2207,23 +4708,23 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
     strtitlept+=fptbins[i+1];
     strtitlept.Append(" [GeV/c]");
     
-    hd0D0ptTGHCfromBPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0ptTGHCfromBPM[i]->SetXTitle("Impact parameter [#mum] ");
-    hd0D0ptTGHCfromBPM[i]->SetYTitle("Entries");
-    flistTghCutsFromB->Add(hd0D0ptTGHCfromBPM[i]);
+    hd0D0ptTGHCfromBPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0ptTGHCfromBPM->SetXTitle("Impact parameter [#mum] ");
+    hd0D0ptTGHCfromBPM->SetYTitle("Entries");
+    flistTghCutsFromB->Add(hd0D0ptTGHCfromBPM);
 
     strnamept.ReplaceAll("hd0D0","hMCd0D0");
-    hMCd0D0ptTGHCfromBPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hMCd0D0ptTGHCfromBPM[i]->SetXTitle("MC Impact parameter [#mum] ");
-    hMCd0D0ptTGHCfromBPM[i]->SetYTitle("Entries");
-    flistTghCutsFromB->Add(hMCd0D0ptTGHCfromBPM[i]);
+    hMCd0D0ptTGHCfromBPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hMCd0D0ptTGHCfromBPM->SetXTitle("MC Impact parameter [#mum] ");
+    hMCd0D0ptTGHCfromBPM->SetYTitle("Entries");
+    flistTghCutsFromB->Add(hMCd0D0ptTGHCfromBPM);
  
 
     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
-    hd0D0VtxTrueptTGHCfromBPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0VtxTrueptTGHCfromBPM[i]->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
-    hd0D0VtxTrueptTGHCfromBPM[i]->SetYTitle("Entries");
-    flistTghCutsFromB->Add(hd0D0VtxTrueptTGHCfromBPM[i]);
+    hd0D0VtxTrueptTGHCfromBPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0VtxTrueptTGHCfromBPM->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
+    hd0D0VtxTrueptTGHCfromBPM->SetYTitle("Entries");
+    flistTghCutsFromB->Add(hd0D0VtxTrueptTGHCfromBPM);
     
     strnamept=namehist;
     strnamept.Append("SBMss_pt");
@@ -2236,22 +4737,22 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
     strtitlept+=fptbins[i+1];
     strtitlept.Append(" [GeV/c]");
     
-    hd0D0ptTGHCfromBSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0ptTGHCfromBSB[i]->SetXTitle("Impact parameter [#mum] ");
-    hd0D0ptTGHCfromBSB[i]->SetYTitle("Entries");
-    flistTghCutsFromB->Add(hd0D0ptTGHCfromBSB[i]);
+    hd0D0ptTGHCfromBSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0ptTGHCfromBSB->SetXTitle("Impact parameter [#mum] ");
+    hd0D0ptTGHCfromBSB->SetYTitle("Entries");
+    flistTghCutsFromB->Add(hd0D0ptTGHCfromBSB);
 
     strnamept.ReplaceAll("hd0D0","hMCd0D0");
-    hMCd0D0ptTGHCfromBSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hMCd0D0ptTGHCfromBSB[i]->SetXTitle("MC Impact parameter [#mum] ");
-    hMCd0D0ptTGHCfromBSB[i]->SetYTitle("Entries");
-    flistTghCutsFromB->Add(hMCd0D0ptTGHCfromBSB[i]);
+    hMCd0D0ptTGHCfromBSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hMCd0D0ptTGHCfromBSB->SetXTitle("MC Impact parameter [#mum] ");
+    hMCd0D0ptTGHCfromBSB->SetYTitle("Entries");
+    flistTghCutsFromB->Add(hMCd0D0ptTGHCfromBSB);
 
     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
-    hd0D0VtxTrueptTGHCfromBSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0VtxTrueptTGHCfromBSB[i]->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
-    hd0D0VtxTrueptTGHCfromBSB[i]->SetYTitle("Entries");
-    flistTghCutsFromB->Add(hd0D0VtxTrueptTGHCfromBSB[i]);
+    hd0D0VtxTrueptTGHCfromBSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0VtxTrueptTGHCfromBSB->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
+    hd0D0VtxTrueptTGHCfromBSB->SetYTitle("Entries");
+    flistTghCutsFromB->Add(hd0D0VtxTrueptTGHCfromBSB);
   }
 
 
@@ -2259,13 +4760,14 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
  //############ TIGHT CUTS FROM DSTAR HISTOGRAMS ###########
  //
   //############## global properties histos
-  TH2F *hCPtaVSd0d0TGHCfromDstar=new TH2F("hCPtaVSd0d0TGHCfromDstar","hCPtaVSd0d0_TightCuts_FromDStar",1000,-100000.,100000.,100,0.,1.);
+  TH2F *hCPtaVSd0d0TGHCfromDstar=new TH2F("hCPtaVSd0d0TGHCfromDstar","hCPtaVSd0d0_TightCuts_FromDStar",1000,-100000.,100000.,100,-1.,1.);
   TH1F *hSecVtxZTGHCfromDstar=new TH1F("hSecVtxZTGHCfromDstar","hSecVtxZ_TightCuts_FromDStar",1000,-8.,8.);
   TH1F *hSecVtxXTGHCfromDstar=new TH1F("hSecVtxXTGHCfromDstar","hSecVtxX_TightCuts_FromDStar",1000,-3000.,3000.);
   TH1F *hSecVtxYTGHCfromDstar=new TH1F("hSecVtxYTGHCfromDstar","hSecVtxY_TightCuts_FromDStar",1000,-3000.,3000.);
   TH2F *hSecVtxXYTGHCfromDstar=new TH2F("hSecVtxXYTGHCfromDstar","hSecVtxXY_TightCuts_FromDStar",1000,-3000.,3000.,1000,-3000.,3000.);
   TH1F *hSecVtxPhiTGHCfromDstar=new TH1F("hSecVtxPhiTGHCfromDstar","hSecVtxPhi_TightCuts_FromDStar",180,-180.1,180.1);
-  TH1F *hCPtaTGHCfromDstar=new TH1F("hCPtaTGHCfromDstar","hCPta_TightCuts_FromDStar",100,0.,1.);
+  TH1F *hd0singlTrackTGHCfromDstar=new TH1F("hd0singlTrackTGHCfromDstar","hd0singlTrackTightCuts_FromDstar",1000,-5000.,5000.);
+  TH1F *hCPtaTGHCfromDstar=new TH1F("hCPtaTGHCfromDstar","hCPta_TightCuts_FromDStar",100,-1.,1.);
   TH1F *hd0xd0TGHCfromDstar=new TH1F("hd0xd0TGHCfromDstar","hd0xd0_TightCuts_FromDStar",1000,-100000.,100000.);
   TH1F *hMassTrueTGHCfromDstar=new TH1F("hMassTrueTGHCfromDstar","D^{0} MC inv. Mass Tight Cuts FromDStar(All momenta)",600,1.600,2.200);
   TH1F *hMassTGHCfromDstar=new TH1F("hMassTGHCfromDstar","D^{0} inv. Mass Tight Cuts FromDStar (All momenta)",600,1.600,2.200);
@@ -2283,6 +4785,7 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistTghCutsFromDstar->Add(hSecVtxXTGHCfromDstar);
   flistTghCutsFromDstar->Add(hSecVtxXYTGHCfromDstar);
   flistTghCutsFromDstar->Add(hSecVtxPhiTGHCfromDstar);
+  flistTghCutsFromDstar->Add(hd0singlTrackTGHCfromDstar);
   flistTghCutsFromDstar->Add(hCPtaTGHCfromDstar);
   flistTghCutsFromDstar->Add(hd0xd0TGHCfromDstar);
   flistTghCutsFromDstar->Add(hMassTrueTGHCfromDstar);
@@ -2292,6 +4795,162 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistTghCutsFromDstar->Add(hMassTrueTGHCfromDstarSB);
   flistTghCutsFromDstar->Add(hMassTGHCfromDstarSB);
 
+
+
+
+
+ //%%% NEW HISTOS %%%%%%%%%%%%%%%%
+  TH1F *hdcaTGHCfromDstar=new TH1F("hdcaTGHCfromDstar","hdca_TightCuts_FromDstar",100,0.,1000.);
+  hdcaTGHCfromDstar->SetXTitle("dca   [#mum]");
+  hdcaTGHCfromDstar->SetYTitle("Entries");
+  TH1F *hcosthetastarTGHCfromDstar=new TH1F("hcosthetastarTGHCfromDstar","hCosThetaStar_TightCuts_FromDstar",50,-1.,1.);
+  hcosthetastarTGHCfromDstar->SetXTitle("cos #theta^{*}");
+  hcosthetastarTGHCfromDstar->SetYTitle("Entries");
+  TH1F *hptD0TGHCfromDstar=new TH1F("hptD0TGHCfromDstar","D^{0} transverse momentum distribution",34,ptbinsD0arr);
+  hptD0TGHCfromDstar->SetXTitle("p_{t}  [GeV/c]");
+  hptD0TGHCfromDstar->SetYTitle("Entries");
+  TH1F *hptD0VsMaxPtTGHCfromDstar=new TH1F("hptD0VsMaxPtTGHCfromDstar","Difference between D^{0} pt and highest (or second) pt",400,-50.,50.);
+  TH2F *hptD0PTallsqrtTGHCfromDstar=new TH2F("hptD0PTallsqrtTGHCfromDstar","D^{0} pt Vs Sqrt(Sum pt square)",34,ptbinsD0arr,200,dumbinning);
+  TH2F *hptD0PTallTGHCfromDstar=new TH2F("hptD0PTallTGHCfromDstar","D^{0} pt Vs Sum pt ",34,ptbinsD0arr,200,dumbinning);
+  TH2F *hptD0vsptBTGHCfromDstar=new TH2F("hptD0vsptBTGHCfromDstar","D^{0} pt Vs B pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hpD0vspBTGHCfromDstar=new TH2F("hpD0vspBTGHCfromDstar","D^{0} tot momentum Vs B tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hptD0vsptcquarkTGHCfromDstar=new TH2F("hptD0vsptcquarkTGHCfromDstar","D^{0} pt Vs cquark pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hpD0vspcquarkTGHCfromDstar=new TH2F("hpD0vspcquarkTGHCfromDstar","D^{0} tot momentum Vs cquark tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  flistTghCutsFromDstar->Add(hdcaTGHCfromDstar);
+  flistTghCutsFromDstar->Add(hcosthetastarTGHCfromDstar);
+  flistTghCutsFromDstar->Add(hptD0TGHCfromDstar);
+  flistTghCutsFromDstar->Add(hptD0VsMaxPtTGHCfromDstar);
+  flistTghCutsFromDstar->Add(hptD0PTallsqrtTGHCfromDstar);
+  flistTghCutsFromDstar->Add(hptD0PTallTGHCfromDstar);
+  flistTghCutsFromDstar->Add(hptD0vsptBTGHCfromDstar);
+  flistTghCutsFromDstar->Add(hpD0vspBTGHCfromDstar);
+  flistTghCutsFromDstar->Add(hptD0vsptcquarkTGHCfromDstar);
+  flistTghCutsFromDstar->Add(hpD0vspcquarkTGHCfromDstar);
+  TH1F *hd0zD0ptTGHCfromDstar;
+  TH1F *hInvMassD0TGHCfromDstar,*hInvMassD0barTGHCfromDstar;
+  TH1F *hetaTGHCfromDstar;
+  TH2F *hInvMassPtTGHCfromDstar=new TH2F("hInvMassPtTGHCfromDstar","Candidate p_{t} Vs invariant mass",330,1.700,2.030,200,0.,20.);
+ THnSparseF *hSparseTGHCfromDstar=new THnSparseF("hSparseTGHCfromDstar","Candidate Masses, pt, Imp Par;massD0;massD0bar;pt;impactpar;selcase",5,nbinsSparse);
+  hSparseTGHCfromDstar->SetBinEdges(0,massbins);
+  hSparseTGHCfromDstar->SetBinEdges(1,massbins);
+  hSparseTGHCfromDstar->SetBinEdges(2,ptbinsForNsparse);
+  hSparseTGHCfromDstar->SetBinEdges(3,impparbins);
+  hSparseTGHCfromDstar->SetBinEdges(4,massHypoBins); 
+  flistTghCutsFromDstar->Add(hSparseTGHCfromDstar);
+  TH1F *hCosPDPBTGHCfromDstar;
+  TH1F *hCosPcPDTGHCfromDstar;
+  flistTghCutsFromDstar->Add(hInvMassPtTGHCfromDstar);
+// %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
+  TH2F *hd0D0VSd0xd0TGHCfromDstarpt;
+  TH2F *hangletracksVSd0xd0TGHCfromDstarpt;
+  TH2F *hangletracksVSd0D0TGHCfromDstarpt;
+  TH1F *hd0xd0TGHCfromDstarpt;
+
+  TH2F *hTOFpidTGHCfromDstar=new TH2F("hTOFpidTGHCfromDstar","TOF time VS momentum",10,0.,4.,50,-50000.,50000.);
+  flistTghCutsFromDstar->Add(hTOFpidTGHCfromDstar);
+
+  for(Int_t i=0;i<fnbins;i++){
+    namehist="hd0zD0ptTGHCfromDstar_pt";
+    namehist+=i;
+    titlehist="d0(z) Tight Cuts FromDstarm ptbin=";
+    titlehist+=i;
+    hd0zD0ptTGHCfromDstar=new TH1F(namehist.Data(),titlehist.Data(),1000,-3000,3000.);
+    hd0zD0ptTGHCfromDstar->SetXTitle("d_{0}(z)    [#mum]");
+    hd0zD0ptTGHCfromDstar->SetYTitle("Entries");
+    flistTghCutsFromDstar->Add(hd0zD0ptTGHCfromDstar);
+
+    namehist="hInvMassD0TGHCfromDstar_pt";
+    namehist+=i;
+    titlehist="Invariant Mass Tight Cuts FromDstar ptbin=";
+    titlehist+=i;
+    hInvMassD0TGHCfromDstar=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
+    hInvMassD0TGHCfromDstar->SetXTitle("Invariant Mass    [GeV]");
+    hInvMassD0TGHCfromDstar->SetYTitle("Entries");
+    flistTghCutsFromDstar->Add(hInvMassD0TGHCfromDstar);
+
+    namehist="hInvMassD0barTGHCfromDstar_pt";
+    namehist+=i;
+    titlehist="Invariant Mass D0bar Tight Cuts FromDstar ptbin=";
+    titlehist+=i;
+    hInvMassD0barTGHCfromDstar=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
+    hInvMassD0barTGHCfromDstar->SetXTitle("Invariant Mass    [GeV]");
+    hInvMassD0barTGHCfromDstar->SetYTitle("Entries");
+    flistTghCutsFromDstar->Add(hInvMassD0barTGHCfromDstar);
+
+    namehist="hetaTGHCfromDstar_pt";
+    namehist+=i;
+    titlehist="eta Tight Cuts FromDstar ptbin=";
+    titlehist+=i;
+    hetaTGHCfromDstar=new TH1F(namehist.Data(),titlehist.Data(),100,-3.,3.);
+    hetaTGHCfromDstar->SetXTitle("Pseudorapidity");
+    hetaTGHCfromDstar->SetYTitle("Entries");
+    flistTghCutsFromDstar->Add(hetaTGHCfromDstar);
+
+    namehist="hCosPDPBTGHCfromDstar_pt";
+    namehist+=i;
+    titlehist="Cosine between D0 momentum and B momentum, ptbin=";
+    titlehist+=i;
+    hCosPDPBTGHCfromDstar=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
+    hCosPDPBTGHCfromDstar->SetXTitle("Cosine between D0 momentum and B momentum");
+    hCosPDPBTGHCfromDstar->SetYTitle("Entries");
+    flistTghCutsFromDstar->Add(hCosPDPBTGHCfromDstar);
+
+    namehist="hCosPcPDTGHCfromDstar_pt";
+    namehist+=i;
+    titlehist="Cosine between cquark momentum and D0 momentum, ptbin=";
+    titlehist+=i;
+    hCosPcPDTGHCfromDstar=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
+    hCosPcPDTGHCfromDstar->SetXTitle("Cosine between c quark momentum and D0 momentum");
+    hCosPcPDTGHCfromDstar->SetYTitle("Entries");
+    flistTghCutsFromDstar->Add(hCosPcPDTGHCfromDstar);
+
+ // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
+    namehist="hd0xd0TGHCfromDstar_pt";
+    namehist+=i;
+    titlehist="d0xd0 Tight Cuts FromDstar ptbin=";
+    titlehist+=i;
+    hd0xd0TGHCfromDstarpt=new TH1F(namehist.Data(),titlehist.Data(),1000,-50000.,10000.);
+    hd0xd0TGHCfromDstarpt->SetXTitle("d_{0}^{K}xd_{0}^{#pi}   [#mum^2]");
+    hd0xd0TGHCfromDstarpt->SetYTitle("Entries");
+    flistTghCutsFromDstar->Add(hd0xd0TGHCfromDstarpt);
+
+
+    namehist="hd0D0VSd0xd0TGHCfromDstar_pt";
+    namehist+=i;
+    titlehist="d_{0}^{D^{0}} Vs d_{0}^{K}xd_{0}^{#pi} Tight Cuts FromDstar ptbin=";
+    titlehist+=i;
+    hd0D0VSd0xd0TGHCfromDstarpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,100,-300,300);
+    hd0D0VSd0xd0TGHCfromDstarpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
+    hd0D0VSd0xd0TGHCfromDstarpt->SetYTitle(" d_{0}^{D^{0}}    [#mum]");
+    flistTghCutsFromDstar->Add(hd0D0VSd0xd0TGHCfromDstarpt);
+    
+    
+    namehist="hangletracksVSd0xd0TGHCfromDstar_pt";
+    namehist+=i;
+    titlehist="Angle between K and #pi tracks Vs d_{0}^{K}xd_{0}^{#pi} Tight Cuts FromDstar ptbin=";
+    titlehist+=i;
+    hangletracksVSd0xd0TGHCfromDstarpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,40,-0.1,3.24);
+    hangletracksVSd0xd0TGHCfromDstarpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
+    hangletracksVSd0xd0TGHCfromDstarpt->SetYTitle(" angle between K and #p tracks  [rad]");
+    flistTghCutsFromDstar->Add(hangletracksVSd0xd0TGHCfromDstarpt);
+    
+
+    namehist="hangletracksVSd0D0TGHCfromDstar_pt";
+    namehist+=i;
+    titlehist="Angle between K and #pi tracks Vs d_{0}^{D^{0}} Tight Cuts FromDstar ptbin=";
+    titlehist+=i;
+    hangletracksVSd0D0TGHCfromDstarpt=new TH2F(namehist.Data(),titlehist.Data(),200,-400.,400.,40,-0.12,3.24);
+    hangletracksVSd0D0TGHCfromDstarpt->SetXTitle(" d_{0}^{D^{0}} [#mum]");
+    hangletracksVSd0D0TGHCfromDstarpt->SetYTitle(" angle between K and #p tracks  [rad]");
+    flistTghCutsFromDstar->Add(hangletracksVSd0D0TGHCfromDstarpt);
+
+    
+  }
+  // %%%%%%%% END OF NEW HISTOS %%%%%%%%%%%%%
+  //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
   //########## d0 D0 histos #############  
   TH1F *hd0D0TGHCfromDstPM = new TH1F("hd0D0TGHCfromDstarPM","D^{0} impact par. plot , Tight Cuts ,FromDStar,Mass Peak (All momenta)",1000,-1000.,1000.);
   hd0D0TGHCfromDstPM->SetXTitle("Impact parameter [#mum]");
@@ -2324,12 +4983,12 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistTghCutsFromDstar->Add(hd0D0VtxTrueTGHCfromDstSB);
   flistTghCutsFromDstar->Add(hMCd0D0TGHCfromDstSB);
   
-  TH1F **hd0D0ptTGHCfromDstPM=new TH1F*[fnbins];
-  TH1F **hMCd0D0ptTGHCfromDstPM=new TH1F*[fnbins];
-  TH1F ** hd0D0VtxTrueptTGHCfromDstPM=new TH1F*[fnbins];
-  TH1F **hd0D0ptTGHCfromDstSB=new TH1F*[fnbins];
-  TH1F **hMCd0D0ptTGHCfromDstSB=new TH1F*[fnbins];
-  TH1F ** hd0D0VtxTrueptTGHCfromDstSB=new TH1F*[fnbins];
+  TH1F *hd0D0ptTGHCfromDstPM;
+  TH1F *hMCd0D0ptTGHCfromDstPM;
+  TH1F *hd0D0VtxTrueptTGHCfromDstPM;
+  TH1F *hd0D0ptTGHCfromDstSB;
+  TH1F *hMCd0D0ptTGHCfromDstSB;
+  TH1F *hd0D0VtxTrueptTGHCfromDstSB;
   namehist="hd0D0ptTGHCfromDstar_";
   titlehist="D^{0} impact par. plot, Tight Cuts, FromDStar, ";
   for(Int_t i=0;i<fnbins;i++){
@@ -2344,23 +5003,23 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
     strtitlept+=fptbins[i+1];
     strtitlept.Append(" [GeV/c]");
     
-    hd0D0ptTGHCfromDstPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0ptTGHCfromDstPM[i]->SetXTitle("Impact parameter [#mum] ");
-    hd0D0ptTGHCfromDstPM[i]->SetYTitle("Entries");
-    flistTghCutsFromDstar->Add(hd0D0ptTGHCfromDstPM[i]);
+    hd0D0ptTGHCfromDstPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0ptTGHCfromDstPM->SetXTitle("Impact parameter [#mum] ");
+    hd0D0ptTGHCfromDstPM->SetYTitle("Entries");
+    flistTghCutsFromDstar->Add(hd0D0ptTGHCfromDstPM);
 
     strnamept.ReplaceAll("hd0D0","hMCd0D0");
-    hMCd0D0ptTGHCfromDstPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hMCd0D0ptTGHCfromDstPM[i]->SetXTitle("MC Impact parameter [#mum] ");
-    hMCd0D0ptTGHCfromDstPM[i]->SetYTitle("Entries");
-    flistTghCutsFromDstar->Add(hMCd0D0ptTGHCfromDstPM[i]);
+    hMCd0D0ptTGHCfromDstPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hMCd0D0ptTGHCfromDstPM->SetXTitle("MC Impact parameter [#mum] ");
+    hMCd0D0ptTGHCfromDstPM->SetYTitle("Entries");
+    flistTghCutsFromDstar->Add(hMCd0D0ptTGHCfromDstPM);
  
 
     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
-    hd0D0VtxTrueptTGHCfromDstPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0VtxTrueptTGHCfromDstPM[i]->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
-    hd0D0VtxTrueptTGHCfromDstPM[i]->SetYTitle("Entries");
-    flistTghCutsFromDstar->Add(hd0D0VtxTrueptTGHCfromDstPM[i]);
+    hd0D0VtxTrueptTGHCfromDstPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0VtxTrueptTGHCfromDstPM->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
+    hd0D0VtxTrueptTGHCfromDstPM->SetYTitle("Entries");
+    flistTghCutsFromDstar->Add(hd0D0VtxTrueptTGHCfromDstPM);
     
     strnamept=namehist;
     strnamept.Append("SBMss_pt");
@@ -2373,22 +5032,22 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
     strtitlept+=fptbins[i+1];
     strtitlept.Append(" [GeV/c]");
     
-    hd0D0ptTGHCfromDstSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0ptTGHCfromDstSB[i]->SetXTitle("Impact parameter [#mum] ");
-    hd0D0ptTGHCfromDstSB[i]->SetYTitle("Entries");
-    flistTghCutsFromDstar->Add(hd0D0ptTGHCfromDstSB[i]);
+    hd0D0ptTGHCfromDstSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0ptTGHCfromDstSB->SetXTitle("Impact parameter [#mum] ");
+    hd0D0ptTGHCfromDstSB->SetYTitle("Entries");
+    flistTghCutsFromDstar->Add(hd0D0ptTGHCfromDstSB);
 
     strnamept.ReplaceAll("hd0D0","hMCd0D0");
-    hMCd0D0ptTGHCfromDstSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hMCd0D0ptTGHCfromDstSB[i]->SetXTitle("MC Impact parameter [#mum] ");
-    hMCd0D0ptTGHCfromDstSB[i]->SetYTitle("Entries");
-    flistTghCutsFromDstar->Add(hMCd0D0ptTGHCfromDstSB[i]);
+    hMCd0D0ptTGHCfromDstSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hMCd0D0ptTGHCfromDstSB->SetXTitle("MC Impact parameter [#mum] ");
+    hMCd0D0ptTGHCfromDstSB->SetYTitle("Entries");
+    flistTghCutsFromDstar->Add(hMCd0D0ptTGHCfromDstSB);
 
     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
-    hd0D0VtxTrueptTGHCfromDstSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0VtxTrueptTGHCfromDstSB[i]->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
-    hd0D0VtxTrueptTGHCfromDstSB[i]->SetYTitle("Entries");
-    flistTghCutsFromDstar->Add(hd0D0VtxTrueptTGHCfromDstSB[i]);
+    hd0D0VtxTrueptTGHCfromDstSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0VtxTrueptTGHCfromDstSB->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
+    hd0D0VtxTrueptTGHCfromDstSB->SetYTitle("Entries");
+    flistTghCutsFromDstar->Add(hd0D0VtxTrueptTGHCfromDstSB);
   }
 
 
@@ -2396,13 +5055,14 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   //
   //########### global properties histos ###########
 
-  TH2F *hCPtaVSd0d0TGHCother=new TH2F("hCPtaVSd0d0TGHCother","hCPtaVSd0d0_TightCuts_other",1000,-100000.,100000.,100,0.,1.);
+  TH2F *hCPtaVSd0d0TGHCother=new TH2F("hCPtaVSd0d0TGHCother","hCPtaVSd0d0_TightCuts_other",1000,-100000.,100000.,100,-1.,1.);
   TH1F *hSecVtxZTGHCother=new TH1F("hSecVtxZTGHCother","hSecVtxZ_TightCuts_other",1000,-8.,8.);
   TH1F *hSecVtxXTGHCother=new TH1F("hSecVtxXTGHCother","hSecVtxX_TightCuts_other",1000,-3000.,3000.);
   TH1F *hSecVtxYTGHCother=new TH1F("hSecVtxYTGHCother","hSecVtxY_TightCuts_other",1000,-3000.,3000.);
   TH2F *hSecVtxXYTGHCother=new TH2F("hSecVtxXYTGHCother","hSecVtxXY_TightCuts_other",1000,-3000.,3000.,1000,-3000.,3000.);
   TH1F *hSecVtxPhiTGHCother=new TH1F("hSecVtxPhiTGHCother","hSecVtxPhi_TightCuts_other",180,-180.1,180.1);
-  TH1F *hCPtaTGHCother=new TH1F("hCPtaTGHCother","hCPta_TightCuts_other",100,0.,1.);
+  TH1F *hd0singlTrackTGHCother=new TH1F("hd0singlTrackTGHCother","hd0singlTrackTightCuts_Other",1000,-5000.,5000.);
+  TH1F *hCPtaTGHCother=new TH1F("hCPtaTGHCother","hCPta_TightCuts_other",100,-1.,1.);
   TH1F *hd0xd0TGHCother=new TH1F("hd0xd0TGHCother","hd0xd0_TightCuts_other",1000,-100000.,100000.);
   TH1F *hMassTrueTGHCother=new TH1F("hMassTrueTGHCother","D^{0} MC inv. Mass Tight Cuts other(All momenta)",600,1.600,2.200);
   TH1F *hMassTGHCother=new TH1F("hMassTGHCother","D^{0} inv. Mass Tight Cuts other (All momenta)",600,1.600,2.200);
@@ -2420,6 +5080,7 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistTghCutsOther->Add(hSecVtxXTGHCother);
   flistTghCutsOther->Add(hSecVtxXYTGHCother);
   flistTghCutsOther->Add(hSecVtxPhiTGHCother);
+  flistTghCutsOther->Add(hd0singlTrackTGHCother);
   flistTghCutsOther->Add(hCPtaTGHCother);
   flistTghCutsOther->Add(hd0xd0TGHCother);
   flistTghCutsOther->Add(hMassTrueTGHCother);
@@ -2429,6 +5090,163 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistTghCutsOther->Add(hMassTrueTGHCotherSB);
   flistTghCutsOther->Add(hMassTGHCotherSB);
 
+
+
+
+ //%%% NEW HISTOS %%%%%%%%%%%%%%%%
+  TH1F *hdcaTGHCother=new TH1F("hdcaTGHCother","hdca_TightCuts_Other",100,0.,1000.);
+  hdcaTGHCother->SetXTitle("dca   [#mum]");
+  hdcaTGHCother->SetYTitle("Entries");
+  TH1F *hcosthetastarTGHCother=new TH1F("hcosthetastarTGHCother","hCosThetaStar_TightCuts_Other",50,-1.,1.);
+  hcosthetastarTGHCother->SetXTitle("cos #theta^{*}");
+  hcosthetastarTGHCother->SetYTitle("Entries");
+  TH1F *hptD0TGHCother=new TH1F("hptD0TGHCother","D^{0} transverse momentum distribution",34,ptbinsD0arr);
+  hptD0TGHCother->SetXTitle("p_{t}  [GeV/c]");
+  hptD0TGHCother->SetYTitle("Entries");
+  TH1F *hptD0VsMaxPtTGHCother=new TH1F("hptD0VsMaxPtTGHCother","Difference between D^{0} pt and highest (or second) pt",400,-50.,50.);
+  TH2F *hptD0PTallsqrtTGHCother=new TH2F("hptD0PTallsqrtTGHCother","D^{0} pt Vs Sqrt(Sum pt square)",34,ptbinsD0arr,200,dumbinning);
+  TH2F *hptD0PTallTGHCother=new TH2F("hptD0PTallTGHCother","D^{0} pt Vs Sum pt ",34,ptbinsD0arr,200,dumbinning);
+  TH2F *hptD0vsptBTGHCother=new TH2F("hptD0vsptBTGHCother","D^{0} pt Vs B pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hpD0vspBTGHCother=new TH2F("hpD0vspBTGHCother","D^{0} tot momentum Vs B tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hptD0vsptcquarkTGHCother=new TH2F("hptD0vsptcquarkTGHCother","D^{0} pt Vs cquark pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  TH2F *hpD0vspcquarkTGHCother=new TH2F("hpD0vspcquarkTGHCother","D^{0} tot momentum Vs cquark tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
+  flistTghCutsOther->Add(hdcaTGHCother);
+  flistTghCutsOther->Add(hcosthetastarTGHCother);
+  flistTghCutsOther->Add(hptD0TGHCother);
+  flistTghCutsOther->Add(hptD0VsMaxPtTGHCother);
+  flistTghCutsOther->Add(hptD0PTallsqrtTGHCother);
+  flistTghCutsOther->Add(hptD0PTallTGHCother);
+  flistTghCutsOther->Add(hptD0vsptBTGHCother);
+  flistTghCutsOther->Add(hpD0vspBTGHCother);
+  flistTghCutsOther->Add(hptD0vsptcquarkTGHCother);
+  flistTghCutsOther->Add(hpD0vspcquarkTGHCother);
+
+  TH1F *hd0zD0ptTGHCother;
+  TH1F *hInvMassD0TGHCother,*hInvMassD0barTGHCother;
+  TH2F *hInvMassPtTGHCother=new TH2F("hInvMassPtTGHCother","Candidate p_{t} Vs invariant mass",330,1.700,2.030,200,0.,20.);
+  THnSparseF *hSparseTGHCother=new THnSparseF("hSparseTGHCother","Candidate Masses, pt, Imp Par;massD0;massD0bar;pt;impactpar;selcase",5,nbinsSparse);
+  hSparseTGHCother->SetBinEdges(0,massbins);
+  hSparseTGHCother->SetBinEdges(1,massbins);
+  hSparseTGHCother->SetBinEdges(2,ptbinsForNsparse);
+  hSparseTGHCother->SetBinEdges(3,impparbins);
+  hSparseTGHCother->SetBinEdges(4,massHypoBins); 
+  flistTghCutsOther->Add(hSparseTGHCother);
+  TH1F *hetaTGHCother;
+  TH1F *hCosPDPBTGHCother;
+  TH1F *hCosPcPDTGHCother;
+  flistTghCutsOther->Add(hInvMassPtTGHCother);
+// %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
+  TH2F *hd0D0VSd0xd0TGHCotherpt;
+  TH2F *hangletracksVSd0xd0TGHCotherpt;
+  TH2F *hangletracksVSd0D0TGHCotherpt;
+  TH1F *hd0xd0TGHCotherpt;
+
+  TH2F *hTOFpidTGHCother=new TH2F("hTOFpidTGHCother","TOF time VS momentum",10,0.,4.,50,-50000.,50000.);
+  flistTghCutsOther->Add(hTOFpidTGHCother);
+
+  for(Int_t i=0;i<fnbins;i++){
+    namehist="hd0zD0ptTGHCother_pt";
+    namehist+=i;
+    titlehist="d0(z) Tight Cuts Otherm ptbin=";
+    titlehist+=i;
+    hd0zD0ptTGHCother=new TH1F(namehist.Data(),titlehist.Data(),1000,-3000,3000.);
+    hd0zD0ptTGHCother->SetXTitle("d_{0}(z)    [#mum]");
+    hd0zD0ptTGHCother->SetYTitle("Entries");
+    flistTghCutsOther->Add(hd0zD0ptTGHCother);
+
+    namehist="hInvMassD0TGHCother_pt";
+    namehist+=i;
+    titlehist="Invariant Mass Tight Cuts Other ptbin=";
+    titlehist+=i;
+    hInvMassD0TGHCother=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
+    hInvMassD0TGHCother->SetXTitle("Invariant Mass    [GeV]");
+    hInvMassD0TGHCother->SetYTitle("Entries");
+    flistTghCutsOther->Add(hInvMassD0TGHCother);
+
+    namehist="hInvMassD0barTGHCother_pt";
+    namehist+=i;
+    titlehist="Invariant Mass D0bar Tight Cuts Other ptbin=";
+    titlehist+=i;
+    hInvMassD0barTGHCother=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
+    hInvMassD0barTGHCother->SetXTitle("Invariant Mass    [GeV]");
+    hInvMassD0barTGHCother->SetYTitle("Entries");
+    flistTghCutsOther->Add(hInvMassD0barTGHCother);
+
+    namehist="hetaTGHCother_pt";
+    namehist+=i;
+    titlehist="eta Tight Cuts Other ptbin=";
+    titlehist+=i;
+    hetaTGHCother=new TH1F(namehist.Data(),titlehist.Data(),100,-3.,3.);
+    hetaTGHCother->SetXTitle("Pseudorapidity");
+    hetaTGHCother->SetYTitle("Entries");
+    flistTghCutsOther->Add(hetaTGHCother);
+
+    namehist="hCosPDPBTGHCother_pt";
+    namehist+=i;
+    titlehist="Cosine between D0 momentum and B momentum, ptbin=";
+    titlehist+=i;
+    hCosPDPBTGHCother=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
+    hCosPDPBTGHCother->SetXTitle("Cosine between D0 momentum and B momentum");
+    hCosPDPBTGHCother->SetYTitle("Entries");
+    flistTghCutsOther->Add(hCosPDPBTGHCother);
+
+    namehist="hCosPcPDTGHCother_pt";
+    namehist+=i;
+    titlehist="Cosine between cquark momentum and D0 momentum, ptbin=";
+    titlehist+=i;
+    hCosPcPDTGHCother=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
+    hCosPcPDTGHCother->SetXTitle("Cosine between c quark momentum and D0 momentum");
+    hCosPcPDTGHCother->SetYTitle("Entries");
+    flistTghCutsOther->Add(hCosPcPDTGHCother);
+
+// %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
+    namehist="hd0xd0TGHCother_pt";
+    namehist+=i;
+    titlehist="d0xd0 Tight Cuts Other ptbin=";
+    titlehist+=i;
+    hd0xd0TGHCotherpt=new TH1F(namehist.Data(),titlehist.Data(),1000,-50000.,10000.);
+    hd0xd0TGHCotherpt->SetXTitle("d_{0}^{K}xd_{0}^{#pi}   [#mum^2]");
+    hd0xd0TGHCotherpt->SetYTitle("Entries");
+    flistTghCutsOther->Add(hd0xd0TGHCotherpt);
+
+
+    namehist="hd0D0VSd0xd0TGHCother_pt";
+    namehist+=i;
+    titlehist="d_{0}^{D^{0}} Vs d_{0}^{K}xd_{0}^{#pi} Tight Cuts Other ptbin=";
+    titlehist+=i;
+    hd0D0VSd0xd0TGHCotherpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,100,-300,300);
+    hd0D0VSd0xd0TGHCotherpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
+    hd0D0VSd0xd0TGHCotherpt->SetYTitle(" d_{0}^{D^{0}}    [#mum]");
+    flistTghCutsOther->Add(hd0D0VSd0xd0TGHCotherpt);
+    
+    
+    namehist="hangletracksVSd0xd0TGHCother_pt";
+    namehist+=i;
+    titlehist="Angle between K and #pi tracks Vs d_{0}^{K}xd_{0}^{#pi} Tight Cuts Other ptbin=";
+    titlehist+=i;
+    hangletracksVSd0xd0TGHCotherpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,40,-0.1,3.24);
+    hangletracksVSd0xd0TGHCotherpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
+    hangletracksVSd0xd0TGHCotherpt->SetYTitle(" angle between K and #p tracks  [rad]");
+    flistTghCutsOther->Add(hangletracksVSd0xd0TGHCotherpt);
+    
+
+    namehist="hangletracksVSd0D0TGHCother_pt";
+    namehist+=i;
+    titlehist="Angle between K and #pi tracks Vs d_{0}^{D^{0}} Tight Cuts Other ptbin=";
+    titlehist+=i;
+    hangletracksVSd0D0TGHCotherpt=new TH2F(namehist.Data(),titlehist.Data(),200,-400.,400.,40,-0.12,3.24);
+    hangletracksVSd0D0TGHCotherpt->SetXTitle(" d_{0}^{D^{0}} [#mum]");
+    hangletracksVSd0D0TGHCotherpt->SetYTitle(" angle between K and #p tracks  [rad]");
+    flistTghCutsOther->Add(hangletracksVSd0D0TGHCotherpt);
+    
+  }
+  // %%%%%%%% END OF NEW HISTOS %%%%%%%%%%%%%
+  //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+
   //############# d0 D0 histos ###############à
   TH1F *hd0D0TGHCotherPM = new TH1F("hd0D0TGHCotherPM","D^{0} impact par. plot , Tight Cuts ,Other,Mass Peak (All momenta)",1000,-1000.,1000.);
   hd0D0TGHCotherPM->SetXTitle("Impact parameter [#mum]");
@@ -2461,12 +5279,12 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
   flistTghCutsOther->Add(hd0D0VtxTrueTGHCotherSB);
   flistTghCutsOther->Add(hMCd0D0TGHCotherSB);
   
-  TH1F **hd0D0ptTGHCotherPM=new TH1F*[fnbins];
-  TH1F **hMCd0D0ptTGHCotherPM=new TH1F*[fnbins];
-  TH1F ** hd0D0VtxTrueptTGHCotherPM=new TH1F*[fnbins];
-  TH1F **hd0D0ptTGHCotherSB=new TH1F*[fnbins];
-  TH1F **hMCd0D0ptTGHCotherSB=new TH1F*[fnbins];
-  TH1F ** hd0D0VtxTrueptTGHCotherSB=new TH1F*[fnbins];
+  TH1F *hd0D0ptTGHCotherPM;
+  TH1F *hMCd0D0ptTGHCotherPM;
+  TH1F *hd0D0VtxTrueptTGHCotherPM;
+  TH1F *hd0D0ptTGHCotherSB;
+  TH1F *hMCd0D0ptTGHCotherSB;
+  TH1F *hd0D0VtxTrueptTGHCotherSB;
   namehist="hd0D0ptTGHCother_";
   titlehist="D^{0} impact par. plot, Tight Cuts, Other, ";
   for(Int_t i=0;i<fnbins;i++){
@@ -2481,23 +5299,23 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
     strtitlept+=fptbins[i+1];
     strtitlept.Append(" [GeV/c]");
     
-    hd0D0ptTGHCotherPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0ptTGHCotherPM[i]->SetXTitle("Impact parameter [#mum] ");
-    hd0D0ptTGHCotherPM[i]->SetYTitle("Entries");
-    flistTghCutsOther->Add(hd0D0ptTGHCotherPM[i]);
+    hd0D0ptTGHCotherPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0ptTGHCotherPM->SetXTitle("Impact parameter [#mum] ");
+    hd0D0ptTGHCotherPM->SetYTitle("Entries");
+    flistTghCutsOther->Add(hd0D0ptTGHCotherPM);
 
     strnamept.ReplaceAll("hd0D0","hMCd0D0");
-    hMCd0D0ptTGHCotherPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hMCd0D0ptTGHCotherPM[i]->SetXTitle("MC Impact parameter [#mum] ");
-    hMCd0D0ptTGHCotherPM[i]->SetYTitle("Entries");
-    flistTghCutsOther->Add(hMCd0D0ptTGHCotherPM[i]);
+    hMCd0D0ptTGHCotherPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hMCd0D0ptTGHCotherPM->SetXTitle("MC Impact parameter [#mum] ");
+    hMCd0D0ptTGHCotherPM->SetYTitle("Entries");
+    flistTghCutsOther->Add(hMCd0D0ptTGHCotherPM);
  
 
     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
-    hd0D0VtxTrueptTGHCotherPM[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0VtxTrueptTGHCotherPM[i]->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
-    hd0D0VtxTrueptTGHCotherPM[i]->SetYTitle("Entries");
-    flistTghCutsOther->Add(hd0D0VtxTrueptTGHCotherPM[i]);
+    hd0D0VtxTrueptTGHCotherPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0VtxTrueptTGHCotherPM->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
+    hd0D0VtxTrueptTGHCotherPM->SetYTitle("Entries");
+    flistTghCutsOther->Add(hd0D0VtxTrueptTGHCotherPM);
     
     strnamept=namehist;
     strnamept.Append("SBMss_pt");
@@ -2510,29 +5328,58 @@ void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
     strtitlept+=fptbins[i+1];
     strtitlept.Append(" [GeV/c]");
     
-    hd0D0ptTGHCotherSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0ptTGHCotherSB[i]->SetXTitle("Impact parameter [#mum] ");
-    hd0D0ptTGHCotherSB[i]->SetYTitle("Entries");
-    flistTghCutsOther->Add(hd0D0ptTGHCotherSB[i]);
+    hd0D0ptTGHCotherSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0ptTGHCotherSB->SetXTitle("Impact parameter [#mum] ");
+    hd0D0ptTGHCotherSB->SetYTitle("Entries");
+    flistTghCutsOther->Add(hd0D0ptTGHCotherSB);
 
     strnamept.ReplaceAll("hd0D0","hMCd0D0");
-    hMCd0D0ptTGHCotherSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hMCd0D0ptTGHCotherSB[i]->SetXTitle("MC Impact parameter [#mum] ");
-    hMCd0D0ptTGHCotherSB[i]->SetYTitle("Entries");
-    flistTghCutsOther->Add(hMCd0D0ptTGHCotherSB[i]);
+    hMCd0D0ptTGHCotherSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hMCd0D0ptTGHCotherSB->SetXTitle("MC Impact parameter [#mum] ");
+    hMCd0D0ptTGHCotherSB->SetYTitle("Entries");
+    flistTghCutsOther->Add(hMCd0D0ptTGHCotherSB);
 
     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
-    hd0D0VtxTrueptTGHCotherSB[i] = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
-    hd0D0VtxTrueptTGHCotherSB[i]->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
-    hd0D0VtxTrueptTGHCotherSB[i]->SetYTitle("Entries");
-    flistTghCutsOther->Add(hd0D0VtxTrueptTGHCotherSB[i]);
+    hd0D0VtxTrueptTGHCotherSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
+    hd0D0VtxTrueptTGHCotherSB->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
+    hd0D0VtxTrueptTGHCotherSB->SetYTitle("Entries");
+    flistTghCutsOther->Add(hd0D0VtxTrueptTGHCotherSB);
   }
+  Printf("AFTER DATA HISTOS CREATION \n");
+
+  delete ptbinlimitsCxyLxy;
+
+
+  PostData(1,fNentries);
+  PostData(2,fSignalType);
+  PostData(3,fSignalTypeLsCuts);
+  PostData(4,fSignalTypeTghCuts);
+  PostData(5,fCounter);
+  PostData(6,flistMCproperties);
+  PostData(7,flistNoCutsSignal);
+  PostData(8,flistNoCutsBack);
+  PostData(9,flistNoCutsFromB);
+  PostData(10,flistNoCutsFromDstar);
+  PostData(11,flistNoCutsOther);
+  PostData(12,flistLsCutsSignal);
+  PostData(13,flistLsCutsBack);
+  PostData(14,flistLsCutsFromB);
+  PostData(15,flistLsCutsFromDstar);
+  PostData(16,flistLsCutsOther);
+  PostData(17,flistTghCutsSignal);
+  PostData(18,flistTghCutsBack);
+  PostData(19,flistTghCutsFromB);
+  PostData(20,flistTghCutsFromDstar);
+  PostData(21,flistTghCutsOther);
+
+  return;
 
-  
 }
 
 
 
+
+
 //________________________________________________________________________
 void AliAnalysisTaskSECharmFraction::UserExec(Option_t */*option*/)
 {
@@ -2540,9 +5387,11 @@ void AliAnalysisTaskSECharmFraction::UserExec(Option_t */*option*/)
   // heavy flavor candidates association to MC truth
   
   AliAODEvent *aod = dynamic_cast<AliAODEvent*> (InputEvent());
-
-  TClonesArray *arrayD0toKpi=0;
-
+  if (!aod) {
+    Printf("ERROR: aod not available");
+    return;
+  }
+  TClonesArray *arrayD0toKpi;
   if(!aod && AODEvent() && IsStandardAOD()) {
     // In case there is an AOD handler writing a standard AOD, use the AOD 
     // event in memory rather than the input (ESD) event.    
@@ -2551,86 +5400,228 @@ void AliAnalysisTaskSECharmFraction::UserExec(Option_t */*option*/)
     // have to taken from the AOD event hold by the AliAODExtension
     AliAODHandler* aodHandler = (AliAODHandler*) 
       ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
+
     if(aodHandler->GetExtensions()) {
       AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject("AliAOD.VertexingHF.root");
-      AliAODEvent *aodFromExt = ext->GetAOD();
-      arrayD0toKpi=(TClonesArray*)aodFromExt->GetList()->FindObject("D0toKpi");
+      AliAODEvent* aodFromExt = ext->GetAOD();
+      if(fLikeSign){
+       // load 2Prong Like Sign                                                   
+       arrayD0toKpi =(TClonesArray*)aodFromExt->GetList()->FindObject("LikeSign2Prong");
+       if(!arrayD0toKpi) {
+         Printf("AliAnalysisTaskSECharmFraction::UserExec: LikeSign branch not found!\n");
+         return;
+       }
+      }
+      else {
+       // load D0->Kpi candidates                                                   
+       arrayD0toKpi = (TClonesArray*)aodFromExt->GetList()->FindObject("D0toKpi");
+       if(!arrayD0toKpi) {
+         Printf("AliAnalysisTaskSECharmFraction::UserExec: D0toKpi branch not found!\n");
+         return;
+       }
+      }  
     }
   } else {
-    arrayD0toKpi=(TClonesArray*)aod->GetList()->FindObject("D0toKpi");
+    if(fLikeSign){
+      // load 2Prong Like Sign                                                   
+      arrayD0toKpi =(TClonesArray*)aod->GetList()->FindObject("LikeSign2Prong");
+      if(!arrayD0toKpi) {
+       Printf("AliAnalysisTaskSECharmFraction::UserExec: LikeSign branch not found!\n");
+       return;
+      }
+    }
+    else {
+      // load D0->Kpi candidates                                                   
+      arrayD0toKpi = (TClonesArray*)aod->GetList()->FindObject("D0toKpi");
+      if(!arrayD0toKpi) {
+       Printf("AliAnalysisTaskSECharmFraction::UserExec: D0toKpi branch not found!\n");
+       return;
+      }
+    }     
   }
 
+
   if(!arrayD0toKpi) {
-    Printf("AliAnalysisTaskSECharmFraction::UserExec: D0toKpi branch not found!\n");
+    printf("AliAnalysisTaskSECharmFraction::UserExec: input branch not found!\n");
     return;
   }
+
+  //histogram filled with 1 for every AOD
+  fNentries->Fill(0);
+  fCounter->StoreEvent(aod,fCutsLoose,fReadMC); 
+  
+  // trigger class for PbPb C0SMH-B-NOPF-ALLNOTRD, C0SMH-B-NOPF-ALL
+  //  TString trigclass=aod->GetFiredTriggerClasses();
+  // if(trigclass.Contains("C0SMH-B-NOPF-ALLNOTRD") || trigclass.Contains("C0SMH-B-NOPF-ALL")) fNentries->Fill(14);
+  Int_t nSelectedloose=0, nSelectedtight=0; 
+
+  Bool_t isEventSelTGHT=kTRUE,isEventSelLOOSE=kTRUE;
+  if(!fCutsTight->IsEventSelected(aod)){
+    isEventSelTGHT=kFALSE;
+    if(fCutsTight->GetWhyRejection()==1){ 
+      // rejected for pileup
+      fNentries->Fill(2);    
+    }
+    if(fCutsTight->GetWhyRejection()==6){
+      // |prim Vtx Zspd| > acceptable
+      fNentries->Fill(4);      
+    }
+  }
+  else {
+    fNentries->Fill(1);    
+  }
+  if(!fCutsLoose->IsEventSelected(aod)){
+    isEventSelLOOSE=kFALSE;
+    if(fCutsLoose->GetWhyRejection()==1){
+      // rejected for pileup    
+      fNentries->Fill(9);
+      
+    }
+    if(fCutsLoose->GetWhyRejection()==6){
+      // |prim Vtx Z| > acceptable
+      fNentries->Fill(11);      
+    }
+  }
+  else {
+    fNentries->Fill(8);    
+  }
   
+  if(!(isEventSelTGHT||isEventSelLOOSE)){
+      PostData(1,fNentries);
+      return;
+  }
+  // fix for temporary bug in ESDfilter
+  // the AODs with null vertex pointer didn't pass the PhysSel
+  if(!aod->GetPrimaryVertex() || TMath::Abs(aod->GetMagneticField())<0.001){
+    if(isEventSelTGHT)fNentries->Fill(19);
+    if(isEventSelLOOSE)fNentries->Fill(20);
+    PostData(1,fNentries);
+    return;
+  }
   // AOD primary vertex
   AliAODVertex *vtx1 = (AliAODVertex*)aod->GetPrimaryVertex();
-  
-  
-  // load MC particles
-  TClonesArray *arrayMC = 
-    (TClonesArray*)aod->GetList()->FindObject(AliAODMCParticle::StdBranchName());
-  if(!arrayMC) {
-    Printf("AliAnalysisTaskSECharmFraction::UserExec: MC particles branch not found!\n");
+  TString primTitle = vtx1->GetTitle();
+  if(primTitle.Contains("VertexerTracks") && vtx1->GetNContributors()>0) { 
+    
+    if(isEventSelTGHT)fNentries->Fill(3);
+    if(isEventSelLOOSE)fNentries->Fill(10);
+  }
+  else {
+    PostData(1,fNentries);
     return;
+    
   }
+
+  // FILL n-tracks counter
+  if(isEventSelTGHT)fNentries->Fill(5,aod->GetNumberOfTracks());
+  if(isEventSelLOOSE)fNentries->Fill(12,aod->GetNumberOfTracks());
   
-  // load MC header
-  AliAODMCHeader *aodmcHeader = 
-    (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
-  if(!aodmcHeader) {
-    Printf("AliAnalysisTaskSECharmFraction::UserExec: MC header branch not found!\n");
-    return;
+
+  Bool_t aziListIsFilled=kFALSE;
+  Double_t azilist[30000];
+  Int_t trkIDlist[30000],nprim=0;
+  
+  for(Int_t ephi=0;ephi<30000;ephi++){
+    azilist[ephi]=-999.;
+    trkIDlist[ephi]=-999;
   }
+  //aziListIsFilled=kFALSE;
+    
+
+
+
   
-  // MC primary vertex
+  TClonesArray *arrayMC=0x0;
+  AliAODMCHeader *aodmcHeader=0x0;
   Double_t vtxTrue[3];
-  aodmcHeader->GetVertex(vtxTrue);
   
-  if (!aod) {
-    Printf("ERROR: aod not available");
-    return;
+  if(fReadMC){
+    // load MC particles
+    arrayMC = 
+      (TClonesArray*)aod->GetList()->FindObject(AliAODMCParticle::StdBranchName());
+    if(!arrayMC) {
+      Printf("AliAnalysisTaskSECharmFraction::UserExec: MC particles branch not found!\n");
+      return;
+    }
+    // load MC header
+    aodmcHeader = 
+      (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
+    if(!aodmcHeader) {
+      Printf("AliAnalysisTaskSECharmFraction::UserExec: MC header branch not found!\n");
+      return;
+    }
+    // MC primary vertex
+    aodmcHeader->GetVertex(vtxTrue);
+    // FILL HISTOS FOR D0 mesons, c quarks and D0 from B properties
+    FillHistoMCproperties(arrayMC);
   }
-  //histogram filled with 1 for every AOD
-  fNentries->Fill(1);
-  PostData(1,fNentries);
 
 
   //Printf("There are %d tracks in this event", aod->GetNumberOfTracks());
   //  Int_t nTotHF=0,nTotDstar=0,nTot3Prong=0;
   Int_t nTotD0toKpi=0;
-  Int_t okd0tight,okd0bartight,okd0loose,okd0barloose;
+  Int_t okd0tight,okd0bartight,okd0loose,okd0barloose,okd0tightnopid,okd0bartightnopid;
+  Bool_t defaultNC=kTRUE;
   Bool_t isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar,isSideBand;
   Bool_t isinacceptance;
   Int_t signallevel=-1;
-  Int_t ptbin; 
+  Int_t ptbin,nVtx
   //  const  Int_t nptbins=10;
   Double_t invMassD0,invMassD0bar,ptD0,massmumtrue;
   
  
   AliAODRecoDecayHF *aodDMC=0x0;// to be used to create a fake true sec vertex
-  // make trkIDtoEntry register (temporary)
-  Int_t trkIDtoEntry[100000];
-  for(Int_t it=0;it<aod->GetNumberOfTracks();it++) {
-    AliAODTrack *track = aod->GetTrack(it);
-    if(track->GetID()<0) {
-      //printf("Track ID <0, id= %d\n",track->GetID());
-      return;
+  // make trkIDtoEntry register (temporary)  
+  
+  if(fFastAnalysis<1){
+    Int_t trkIDtoEntry[100000];
+    fptAll=0.;
+    fptAllSq=0.;
+    fptMax[0]=0.;
+    fptMax[1]=0.;
+    fptMax[2]=0.;
+    for(Int_t it=0;it<aod->GetNumberOfTracks();it++) {
+      AliAODTrack *track = aod->GetTrack(it);
+      fptAll+=track->Pt();
+      fptAllSq+=track->Pt()*track->Pt();
+      if(track->Pt()>fptMax[0]){
+       fptMax[2]=fptMax[1];
+       fptMax[1]=fptMax[0];
+       fptMax[0]=track->Pt();
+      }
+      else if(track->Pt()>fptMax[1]){
+       fptMax[2]=fptMax[1];
+       fptMax[1]=track->Pt();
+      }
+      else if(track->Pt()>fptMax[2])fptMax[2]=track->Pt();
+      if(track->GetID()<0) {
+       if(isEventSelTGHT)fNentries->Fill(19);
+       if(isEventSelLOOSE)fNentries->Fill(20);
+       //printf("Track ID <0, id= %d\n",track->GetID());
+       PostData(1,fNentries);
+       return;
+      }
+      trkIDtoEntry[track->GetID()]=it;
     }
-    trkIDtoEntry[track->GetID()]=it;
   }
-  
-  
+
   // loop over D0->Kpi candidates
   Int_t nD0toKpi = arrayD0toKpi->GetEntriesFast();
   nTotD0toKpi += nD0toKpi;
+  // fille D0 candidate counter 
+  if(isEventSelTGHT)fNentries->Fill(6,nD0toKpi);
+  if(isEventSelLOOSE)fNentries->Fill(13,nD0toKpi);
+  
   //   cout<<"Number of D0->Kpi: "<<nD0toKpi<<endl;
   
   for (Int_t iD0toKpi = 0; iD0toKpi < nD0toKpi; iD0toKpi++) {
     if(aodDMC!=0x0)delete aodDMC;
       
+    defaultNC=kTRUE;
     isPeakD0=kFALSE;
     isPeakD0bar=kFALSE;
     isSideBandD0=kFALSE;
@@ -2639,6 +5630,8 @@ void AliAnalysisTaskSECharmFraction::UserExec(Option_t */*option*/)
     isinacceptance=kFALSE;
     okd0tight=0;
     okd0bartight=0;
+    okd0tightnopid=0;
+    okd0bartightnopid=0;
     okd0loose=0;
     okd0barloose=0;
   
@@ -2646,155 +5639,818 @@ void AliAnalysisTaskSECharmFraction::UserExec(Option_t */*option*/)
     
 
     AliAODRecoDecayHF2Prong *d = (AliAODRecoDecayHF2Prong*)arrayD0toKpi->UncheckedAt(iD0toKpi);
-    Bool_t unsetvtx=kFALSE;
-    if(!d->GetOwnPrimaryVtx()) {
-      d->SetOwnPrimaryVtx(vtx1); // needed to compute all variables
-      unsetvtx=kTRUE;
-    }
+   //  Bool_t unsetvtx=kFALSE;
+//     if(!d->GetOwnPrimaryVtx()) {
+//       d->SetOwnPrimaryVtx(vtx1); // needed to compute all variables
+//       unsetvtx=kTRUE;
+//     }
+
+    //recalculate vertex w/o daughters
+    AliAODVertex *origownvtx=0x0;
+    if(fCleanCandOwnVtx){      
+      if(d->GetOwnPrimaryVtx()) origownvtx=new AliAODVertex(*d->GetOwnPrimaryVtx());
+      if(!fCutsTight->RecalcOwnPrimaryVtx(d,aod))  defaultNC=kFALSE;   
       
+    }
+
+  
+    // ############ MISALIGN HERE: TEMPORARY SOLUTION ##########
+    //    d->Misalign("resC");
+
     
+    //############# SIGNALLEVEL DESCRIPTION #####################
+    // TO BE CONSIDERED WITH GREAT CARE, only =0 and =1 (and MC selection when possible) are reliable
+    //                                    For the other signallevel numbers the order in which cut are applied is relevant 
+    // signallevel =0,1: is selected as signal,is signal (MC)
+    //               from 2 to 20: MC information
+    //              from 21 to 29: "detector" selection (acceptance, pt, refits) 
+    //                                                  21: acceptance, eta (N.B. before 24 May was signallevel=9)     
+    //                                                  22: isinfiducialacceptance
+    //                                                  23: single track p
+    //                                                  25: ITS cluster selection
+    //                                                  26: TPC refit
+    //                                                  27: ITS refit
+    //                                                  28: no (TOF||TPC) pid information (no kTOFpid,kTOFout,kTIME,kTPCpid,...)
+    //
+    //              from 30 to 39: PID selection
+    //                                                  31: no Kaon compatible tracks found between daughters
+    //                                                  32: no Kaon identified tracks found (strong sel. at low momenta)
+    //                                                  33: both mass hypotheses are rejected 
+    //              from 40 to 45: standard cut selection
+    //              from 45 to 49: special cut signal kinematic selection
+    //                                                  46: pstar cut
+    //              from 50 to 60: special cut selection
+    //                                                  51: Nvtx contributors
+    //                                                  52: angle between tracks
+    //                                                  53: vtx not reconstructed when excludind daughters 
+    //                                                  54: track not propagated to dca when the vtx is recalculated
+    //                                                  55: single track normalized impact par.
+    //                                                  56: normalized d0xd0 
+    //                                                  57: d0xd0 cut with vtx on the fly
+    //                                                  58,59: cut normalized decay lenght and decay lenght
     //####### DATA SELECTION ####################################
     //
     // ######## CHECK FOR ACCEPTANCE ##########
     ptD0=d->Pt();
-    isinacceptance = (TMath::Abs(d->EtaProng(0))<fAcceptanceCuts[0]&&TMath::Abs(d->EtaProng(1))<fAcceptanceCuts[0]); //eta acceptance
-    
-    //######## INVARIANT MASS SELECTION ###############
-    CheckInvMassD0(d,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar);
-    if((isSideBandD0||isSideBandD0bar)&&!(isPeakD0||isPeakD0bar))isSideBand=kTRUE;// TEMPORARY, NOT DONE IN THE METHOD CALLED ABOVE ONLY FOR FURTHER SIDE BAND STUDY
-  
+    ptbin=fCutsTight->PtBin(ptD0);
+    //    Double_t relangle=d->ProngsRelAngle(0,1);
+    // UPV: HERE TO CHANGE WITH:
+     //  isinacceptance = (TMath::Abs(d->EtaProng(0))<fAcceptanceCuts[0]&&TMath::Abs(d->EtaProng(1))<fAcceptanceCuts[0]); //eta acceptance 
+
     // INVESTIGATE SIGNAL TYPE : ACCESS TO MC INFORMATION
-    aodDMC=GetD0toKPiSignalType(d,arrayMC,signallevel,massmumtrue,vtxTrue);
-    if(!isinacceptance)signallevel=9;
-    fSignalType->Fill(signallevel);
-  
-    // END OF BACKGROUND TYPE SELECTION
+    if(fReadMC){
+      aodDMC=GetD0toKPiSignalType(d,arrayMC,signallevel,massmumtrue,vtxTrue);
+    }
+    else signallevel=0;
+    //   ACCOUNT FOR ETA & ITS CLUSTER SELECTION
+    if(fFastAnalysis<1){  // ALREADY DONE BY AliRDHFCutsD0ToKPi selection
+      isinacceptance=fCutsTight->AreDaughtersSelected(d); 
+      if(!isinacceptance)signallevel=21;
+    }
+    if(!fCutsTight->IsInFiducialAcceptance(ptD0,d->Y(421))){
+      isinacceptance=kFALSE;
+      signallevel=22; 
+    }
+    else{
+      nSelectedloose++;
+    }
+   
+    //###################################################################################
+    //
+    // ################ SPECIAL ADDITIONAL CUTS FOR SIGNAL SEARCH #######################
+    //  UPV: ITS CLUSTER SELECTION ALREADY DONE , COUNT THEM THE SAME
+    //  
+    Int_t nlayers=0,nSPD=0,nSSD=0;
+    Bool_t spd1=kFALSE;
+    if(fFastAnalysis<1){
+      for(Int_t idg=0;idg<d->GetNDaughters();idg++){
+       
+       AliAODTrack *dgTrack = (AliAODTrack*)d->GetDaughter(idg);
+       if(TESTBIT(dgTrack->GetITSClusterMap(),5)){
+         nlayers++;
+         nSSD++;
+       }
+      if(TESTBIT(dgTrack->GetITSClusterMap(),4)){
+       nlayers++;
+       nSSD++;
+      }
+      if(TESTBIT(dgTrack->GetITSClusterMap(),3))nlayers++;
+      if(TESTBIT(dgTrack->GetITSClusterMap(),2))nlayers++;
+      if(TESTBIT(dgTrack->GetITSClusterMap(),1)){
+       nlayers++;
+       nSPD++;
+      }
+      if(TESTBIT(dgTrack->GetITSClusterMap(),0)){
+       nlayers++;
+       nSPD++;
+       spd1=kTRUE;
+      }
+      }
+    }
+    /*
+      // ######## NOW SELECTION ##########
+      if(dgTrack->Pt()<0.5){
+       // ########## k-Both selection ##############
+       if(nlayers<5)signallevel=25;
+       if(nSPD<2)signallevel=25;
+      }
+      else if(dgTrack->Pt()<1.){
+       // ########## 4 its clust (1 SSD,1 SPD) && k-Any selection ##############
+       if(nlayers<4)signallevel=25;
+       if(nSSD<1)signallevel=25;
+       if(nSPD<1)signallevel=25;
+      }
+      else{ 
+       // ########## 3 its clust (1 SPD, 1 SSD) && k-Any selection ##########
+       if(nlayers<3)signallevel=25;
+       if(nSSD<1)signallevel=25;
+       if(nSPD<1)signallevel=25;           
+      }
+    }
+  */
+
+
+   
+
+    //###########   END OF SPECIAL CUTS        ######################
+    //
+    //###############################################################
 
     // NOW APPLY CUTS
-    //NO CUTS CASE IS FOR FREE
+    // Check tighter cuts w/o PID:
+    // 
+    //    Int_t ncont=vtx1->GetNContributors();   
+    if(fFastAnalysis<1)if(vtx1->GetNContributors()<1)signallevel=51;
+  
+    if(defaultNC&&fFastAnalysis<1&&fNtrMaxforVtx<2)defaultNC=SpecialSelD0(d,nVtx);// No More in USE!
+    if(isEventSelTGHT&&defaultNC){
+      Bool_t iscutusingpid=fCutsTight->GetIsUsePID();
+      fCutsTight->SetUsePID(kFALSE);
+      Int_t isSelectedTightNoPid=fCutsTight->IsSelected(d,AliRDHFCuts::kAll,aod);
+      switch(isSelectedTightNoPid){
+      case 0:
+       okd0tightnopid=kFALSE;
+       okd0bartightnopid=kFALSE;
+       break;
+      case 1:
+       okd0tightnopid=kTRUE;
+       okd0bartightnopid=kFALSE;
+       break;
+      case 2:
+       okd0tightnopid=kFALSE;
+       okd0bartightnopid=kTRUE;
+       break;
+      case 3:
+       okd0tightnopid=kTRUE;
+       okd0bartightnopid=kTRUE;
+       break;
+      default:
+       okd0tightnopid=kTRUE;
+       okd0bartightnopid=kTRUE;
+       break;
+      }
+      
     
-    // CHECK TIGHTER CUTS 
-    ptbin=SetStandardCuts(ptD0,flargeInvMassCut);
-    d->SelectD0(fVHFtight->GetD0toKpiCuts(),okd0tight,okd0bartight);
-    if(((isPeakD0&&okd0tight)||(isPeakD0bar&&okd0bartight))&&isinacceptance)fSignalTypeTghCuts->Fill(signallevel);
+      //    signallevel=fCutsTight->GetSelectionStep();
+      fSignalType->Fill(signallevel);
+      
+    
+      
+      
+      // ######### SPECIAL SELECTION PID ##############
+      fCutsTight->SetUsePID(iscutusingpid);
+      if(okd0tightnopid||okd0bartightnopid){
+       Int_t isSelectedPid=fCutsTight->IsSelected(d,AliRDHFCuts::kPID,aod);
+       Int_t isSelectedTight=fCutsTight->CombineSelectionLevels(3,isSelectedTightNoPid,isSelectedPid);
+       switch(isSelectedTight){
+       case 0:
+         okd0tight=kFALSE;
+         okd0bartight=kFALSE;
+         break;
+       case 1:
+         okd0tight=kTRUE;
+         okd0bartight=kFALSE;
+         break;
+       case 2:
+         okd0tight=kFALSE;
+         okd0bartight=kTRUE;
+         break;
+       case 3:
+         okd0tight=kTRUE;
+         okd0bartight=kTRUE;
+         break;
+       default:
+         okd0tight=kTRUE;
+         okd0bartight=kTRUE;
+         break;
+       }
+      }
+    }
+    else{
+      fSignalType->Fill(signallevel);
+    }
+
+    
+  
+    
+    if(isEventSelLOOSE&&defaultNC){
+      // CHECK LOOSER CUTS 
+      //ptbin=SetStandardCuts(ptD0,flargeInvMassCut);
+      
+      //    d->SelectD0(fCutsLoose->GetD0toKpiCuts(),okd0loose,okd0barloose);
+      Int_t isSelectedLoose=fCutsLoose->IsSelected(d,AliRDHFCuts::kAll,aod);
+      switch(isSelectedLoose){
+      case 0:
+       okd0loose=kFALSE;
+       okd0barloose=kFALSE;
+       break;
+      case 1:
+       okd0loose=kTRUE;
+       okd0barloose=kFALSE;
+       break;
+      case 2:
+       okd0loose=kFALSE;
+       okd0barloose=kTRUE;
+      break;
+      case 3:
+       okd0loose=kTRUE;
+       okd0barloose=kTRUE;
+       break;
+      default:
+       okd0loose=kTRUE;
+       okd0barloose=kTRUE;
+       break;
+      }
+     
+    }
     
-    // CHECK LOOSER CUTS 
-    ptbin=SetStandardCuts(ptD0,flargeInvMassCut);
-    d->SelectD0(fVHFloose->GetD0toKpiCuts(),okd0loose,okd0barloose);
+  
+    //NO CUTS Case: force okD0 and okD0bar = kTRUE
+    //     special cuts are applied also in the "NO Cuts" case
+    //
+    //
+    // SPECIAL modification:
+    // IMPORTANT!!!!!!  ONLY FOR TEMPORARY CONVENIENCE
+    // IF fusePID is kTRUE, NO CUTS BECOMES NO PID case with tight cuts (fill signal histos when 30<=signallevel<40 )!!!!!!!!!!  
+    if((!fusePID)&&isEventSelTGHT){
+      okd0tightnopid=defaultNC;
+      okd0bartightnopid=defaultNC;
+    }        
+
+    if(okd0loose||okd0barloose||okd0tight||okd0bartight||okd0tightnopid||okd0bartightnopid){
+      //######## INVARIANT MASS SELECTION ###############
+      CheckInvMassD0(d,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar);
+      if((isSideBandD0||isSideBandD0bar)){
+       if(!(isPeakD0||isPeakD0bar))isSideBand=kTRUE; //(isSideBand no more used in the following, can remove it)
+       else {// AVOID TO CONSIDER IN THE SIDEBAND  THOSE  CANDIDATES FOR WHICH 1 MASS HYPOTHESIS IS IN THE PEAK REGION
+         isSideBand=kFALSE; 
+         isSideBandD0=kFALSE;
+         isSideBandD0bar=kFALSE;          
+       }
+      }
+      if(fFastAnalysis<2){
+       if(!aziListIsFilled){
+         FillAziList(aod,azilist,trkIDlist,nprim);
+         aziListIsFilled=kTRUE;
+       }
+       
+       if(signallevel==1||signallevel==0){
+         if(nprim!=0){
+           FillAziHistos(d,flistNoCutsSignal,ptbin,azilist,trkIDlist,nprim,okd0tightnopid,okd0bartightnopid,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar); 
+           FillAziHistos(d,flistTghCutsSignal,ptbin,azilist,trkIDlist,nprim,okd0tight,okd0bartight,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar); 
+           FillAziHistos(d,flistLsCutsSignal,ptbin,azilist,trkIDlist,nprim,okd0loose,okd0barloose,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar);    
+         }
+       }
+       
+      }
+    }
+    if(((isPeakD0&&okd0tight)||(isPeakD0bar&&okd0bartight))&&isinacceptance)fSignalTypeTghCuts->Fill(signallevel);
     if(((isPeakD0&&okd0loose)||(isPeakD0bar&&okd0barloose))&&isinacceptance)fSignalTypeLsCuts->Fill(signallevel);
+  
    
     
+  
     //###################    FILL HISTOS      ########################
     //################################################################
     //
     //######## improvement: SPEED HERE CAN BE IMPROVED: CALCULATE ONCE AND FOR ALL 
     //            CANDIDATE VARIABLES   
 
-    //NO CUTS Case: force okD0 and okD0bar = kTRUE
-    if(signallevel==1)FillHistos(d,flistNoCutsSignal,ptbin,kTRUE,kTRUE,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBand,massmumtrue,aodDMC,vtxTrue);
-    else if(signallevel==2)FillHistos(d,flistNoCutsFromDstar,ptbin,kTRUE,kTRUE,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBand,massmumtrue,aodDMC,vtxTrue);
-    else if(signallevel==3||signallevel==4)FillHistos(d,flistNoCutsFromB,ptbin,kTRUE,kTRUE,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBand,massmumtrue,aodDMC,vtxTrue);
-    else if(signallevel==-1||signallevel==7||signallevel==8||signallevel==10||signallevel==9)FillHistos(d,flistNoCutsBack,ptbin,kTRUE,kTRUE,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBand,massmumtrue,aodDMC,vtxTrue);
-    else if(signallevel==5||signallevel==6)FillHistos(d,flistNoCutsOther,ptbin,kTRUE,kTRUE,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBand,massmumtrue,aodDMC,vtxTrue);
+   
+    if(signallevel==1||signallevel==0)FillHistos(d,flistNoCutsSignal,ptbin,okd0tightnopid,okd0bartightnopid,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar,massmumtrue,aodDMC,vtxTrue);    // else if(fusePID&&signallevel>=30&&signallevel<40)FillHistos(d,flistNoCutsSignal,ptbin,okd0tightnopid,okd0bartightnopid,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar,massmumtrue,aodDMC,vtxTrue);// OLD LINE, COULD BE REMOVED 
+    else if(signallevel==2)FillHistos(d,flistNoCutsFromDstar,ptbin,okd0tightnopid,okd0bartightnopid,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar,massmumtrue,aodDMC,vtxTrue);
+    else if(signallevel==3||signallevel==4)FillHistos(d,flistNoCutsFromB,ptbin,okd0tightnopid,okd0bartightnopid,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar,massmumtrue,aodDMC,vtxTrue);
+    else if(signallevel==-1||signallevel==7||signallevel==8||signallevel==10||signallevel==9||signallevel==11)FillHistos(d,flistNoCutsBack,ptbin,okd0tightnopid,okd0bartightnopid,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar,massmumtrue,aodDMC,vtxTrue);
+    else if(signallevel==5||signallevel==6)FillHistos(d,flistNoCutsOther,ptbin,okd0tightnopid,okd0bartightnopid,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar,massmumtrue,aodDMC,vtxTrue);
+    
 
+    
     //LOOSE CUTS Case
-    if(signallevel==1)FillHistos(d,flistLsCutsSignal,ptbin,okd0loose,okd0barloose,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBand,massmumtrue,aodDMC,vtxTrue);
-    else if(signallevel==2)FillHistos(d,flistLsCutsFromDstar,ptbin,okd0loose,okd0barloose,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBand,massmumtrue,aodDMC,vtxTrue);
-    else if(signallevel==3||signallevel==4)FillHistos(d,flistLsCutsFromB,ptbin,okd0loose,okd0barloose,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBand,massmumtrue,aodDMC,vtxTrue);
-    else if(signallevel==-1||signallevel==7||signallevel==8||signallevel==10)FillHistos(d,flistLsCutsBack,ptbin,okd0loose,okd0barloose,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBand,massmumtrue,aodDMC,vtxTrue);
-    else if(signallevel==5||signallevel==6)FillHistos(d,flistLsCutsOther,ptbin,okd0loose,okd0barloose,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBand,massmumtrue,aodDMC,vtxTrue);
+    if(okd0loose||okd0barloose)fNentries->Fill(14);
+
+    if(signallevel==1||signallevel==0)FillHistos(d,flistLsCutsSignal,ptbin,okd0loose,okd0barloose,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar,massmumtrue,aodDMC,vtxTrue);
+    else if(signallevel==2)FillHistos(d,flistLsCutsFromDstar,ptbin,okd0loose,okd0barloose,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar,massmumtrue,aodDMC,vtxTrue);
+    else if(signallevel==3||signallevel==4)FillHistos(d,flistLsCutsFromB,ptbin,okd0loose,okd0barloose,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar,massmumtrue,aodDMC,vtxTrue);
+    else if(signallevel==-1||signallevel==7||signallevel==8||signallevel==10||signallevel==11)FillHistos(d,flistLsCutsBack,ptbin,okd0loose,okd0barloose,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar,massmumtrue,aodDMC,vtxTrue);
+    else if(signallevel==5||signallevel==6)FillHistos(d,flistLsCutsOther,ptbin,okd0loose,okd0barloose,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar,massmumtrue,aodDMC,vtxTrue);
 
     //TIGHT CUTS Case
-    if(signallevel==1)FillHistos(d,flistTghCutsSignal,ptbin,okd0tight,okd0bartight,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBand,massmumtrue,aodDMC,vtxTrue);
-    else if(signallevel==2)FillHistos(d,flistTghCutsFromDstar,ptbin,okd0tight,okd0bartight,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBand,massmumtrue,aodDMC,vtxTrue);
-    else if(signallevel==3||signallevel==4)FillHistos(d,flistTghCutsFromB,ptbin,okd0tight,okd0bartight,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBand,massmumtrue,aodDMC,vtxTrue);
-    else if(signallevel==-1||signallevel==7||signallevel==8||signallevel==10)FillHistos(d,flistTghCutsBack,ptbin,okd0tight,okd0bartight,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBand,massmumtrue,aodDMC,vtxTrue);
-    else if(signallevel==5||signallevel==6)FillHistos(d,flistTghCutsOther,ptbin,okd0tight,okd0bartight,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBand,massmumtrue,aodDMC,vtxTrue);
+    if(okd0tight||okd0bartight){
+      fNentries->Fill(7);
+      nSelectedtight++; 
+    }
     
+    if(signallevel==1||signallevel==0)FillHistos(d,flistTghCutsSignal,ptbin,okd0tight,okd0bartight,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar,massmumtrue,aodDMC,vtxTrue);
+    else if(signallevel==2)FillHistos(d,flistTghCutsFromDstar,ptbin,okd0tight,okd0bartight,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar,massmumtrue,aodDMC,vtxTrue);
+    else if(signallevel==3||signallevel==4)FillHistos(d,flistTghCutsFromB,ptbin,okd0tight,okd0bartight,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar,massmumtrue,aodDMC,vtxTrue);
+    else if(signallevel==-1||signallevel==7||signallevel==8||signallevel==10||signallevel==11)FillHistos(d,flistTghCutsBack,ptbin,okd0tight,okd0bartight,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar,massmumtrue,aodDMC,vtxTrue);
+    else if(signallevel==5||signallevel==6)FillHistos(d,flistTghCutsOther,ptbin,okd0tight,okd0bartight,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar,massmumtrue,aodDMC,vtxTrue);
     
+
+    // ######## PRINTING INFO FOR D0-like candidate
+
+    if(nSPD==2&&ptD0>2.){
+      if((okd0tight&&TMath::Abs(invMassD0-1.864)<0.01)||(okd0bartight&&TMath::Abs(invMassD0bar-1.864)<0.01)){
+       //printf("INFO FOR DRAWING: \n pt: %f \n Rapidity: %f \n Period Number: %d \n Run Number: %d \n BunchCrossNumb: %d \n OrbitNumber: %d \n",ptD0,d->Y(421),aod->GetPeriodNumber(),aod->GetRunNumber(),aod->GetBunchCrossNumber(),aod->GetOrbitNumber());
+       //printf("PrimVtx NContributors: %d \n Prongs Rel Angle: %f \n \n",ncont,relangle);
+      }
+    }
     if(aodDMC!=0x0){
       delete aodDMC;
       aodDMC=0x0;
     }
     
-    if(unsetvtx) d->UnsetOwnPrimaryVtx();
+    if(fCleanCandOwnVtx)fCutsTight->CleanOwnPrimaryVtx(d,aod,origownvtx);
+    
+
+    //   if(unsetvtx) d->UnsetOwnPrimaryVtx();
     
   }
+
+
+  fCounter->StoreCandidates(aod,nSelectedloose,kTRUE);  
+  fCounter->StoreCandidates(aod,nSelectedtight,kFALSE); 
+  
   
   // ####################### POST OUTPUT TLIST DATA #########################
   // ####### histo for #AOD entries already posted
-  
+  PostData(1,fNentries);
   PostData(2,fSignalType);
   PostData(3,fSignalTypeLsCuts);
   PostData(4,fSignalTypeTghCuts);
-  PostData(5,flistNoCutsSignal);
-  PostData(6,flistNoCutsBack);
-  PostData(7,flistNoCutsFromB);
-  PostData(8,flistNoCutsFromDstar);
-  PostData(9,flistNoCutsOther);
-  PostData(10,flistLsCutsSignal);
-  PostData(11,flistLsCutsBack);
-  PostData(12,flistLsCutsFromB);
-  PostData(13,flistLsCutsFromDstar);
-  PostData(14,flistLsCutsOther);
-  PostData(15,flistTghCutsSignal);
-  PostData(16,flistTghCutsBack);
-  PostData(17,flistTghCutsFromB);
-  PostData(18,flistTghCutsFromDstar);
-  PostData(19,flistTghCutsOther);
+  PostData(5,fCounter);
+  PostData(6,flistMCproperties);
+  PostData(7,flistNoCutsSignal);
+  PostData(8,flistNoCutsBack);
+  PostData(9,flistNoCutsFromB);
+  PostData(10,flistNoCutsFromDstar);
+  PostData(11,flistNoCutsOther);
+  PostData(12,flistLsCutsSignal);
+  PostData(13,flistLsCutsBack);
+  PostData(14,flistLsCutsFromB);
+  PostData(15,flistLsCutsFromDstar);
+  PostData(16,flistLsCutsOther);
+  PostData(17,flistTghCutsSignal);
+  PostData(18,flistTghCutsBack);
+  PostData(19,flistTghCutsFromB);
+  PostData(20,flistTghCutsFromDstar);
+  PostData(21,flistTghCutsOther);
 
   return;
 }
 
+
+
 //_________________________________________
-Int_t AliAnalysisTaskSECharmFraction::SetStandardCuts(Double_t pt,Double_t invMassCut){
-  //#############
-  // TEMPORARY: to be change in :
-  //             for(j<nptbins)
-  //                       if pt < standardptbin[j+1]
-  //                            SetCuts, bin=j
-  //                            break 
-  //                            
-  // the way the cuts are set is for further development
-  //   (to be interfaced with AliAnalsysTaskSETuneCuts)
+Int_t  AliAnalysisTaskSECharmFraction::SetStandardCuts(Float_t *&ptbinlimits){
+  //
+  // creating cuts for D0 -> Kpi
   //
-  // Cuts: 
-  // 0 = inv. mass half width [GeV]
-  // 1 = dca [cm]
-  // 2 = cosThetaStar
-  // 3 = pTK [GeV/c]
-  // 4 = pTPi [GeV/c]
-  // 5 = d0K [cm]   upper limit!
-  // 6 = d0Pi [cm]  upper limit!
-  // 7 = d0d0 [cm^2]
-  // 8 = cosThetaPoint
 
-  Int_t ptbin=-1;
-  if (pt>0. && pt<=1.) {
-    ptbin=0;
-    fVHFtight->SetD0toKpiCuts(invMassCut,0.04,0.8,0.5,0.5,0.05,0.05,-0.0002,0.5);
-    fVHFloose->SetD0toKpiCuts(invMassCut,0.04,0.8,0.5,0.5,0.05,0.05,-0.00025,0.7);
+  Printf("Using Default Cuts as set in AliAnalysisTaskSECharmFraction \n");
+  //  const Double_t ptmin = 0.1;
+  const Double_t ptmax = 9999.;
+  const Int_t nptbins =13;
+  const Int_t nvars=9;
+  Int_t varycuts=-1;
+  
+  if(fCutsTight){
+    delete fCutsTight;fCutsTight=NULL;
+  }
+  if(fCutsLoose){
+    delete fCutsLoose;fCutsLoose=NULL;
   }
+
+
+  fCutsTight = new AliRDHFCutsD0toKpi();
+  fCutsTight->SetName("D0toKpiCutsStandard");
+  fCutsTight->SetTitle("Standard Cuts for D0 analysis");
+  
+  fCutsLoose = new AliRDHFCutsD0toKpi();
+  fCutsLoose->SetName("D0toKpiCutsLoose");
+  fCutsLoose->SetTitle("Loose Cuts for D0 analysis");
+  
+  // EVENT CUTS
+  fCutsTight->SetMinVtxContr(1);
+  fCutsLoose->SetMinVtxContr(1);
+  
+  // TRACKS ON SINGLE TRACKS
+  AliESDtrackCuts *esdTrackCuts = new AliESDtrackCuts("AliESDtrackCuts","default");
+  esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
+  esdTrackCuts->SetRequireTPCRefit(kTRUE);
+  esdTrackCuts->SetRequireITSRefit(kTRUE);
+  //  esdTrackCuts->SetMinNClustersITS(4);
+  esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
+  esdTrackCuts->SetMinDCAToVertexXY(0.);
+  esdTrackCuts->SetEtaRange(-0.8,0.8);
+  esdTrackCuts->SetPtRange(0.3,1.e10);
+  
+
+  fCutsTight->AddTrackCuts(esdTrackCuts);
+  fCutsLoose->AddTrackCuts(esdTrackCuts);
   
-  if(pt>1. && pt<=3.) {
+  
+
+  Float_t ptbins[nptbins+1];
+  ptbins[0]=0.;
+  ptbins[1]=0.5;       
+  ptbins[2]=1.;
+  ptbins[3]=2.;
+  ptbins[4]=3.;
+  ptbins[5]=4.;
+  ptbins[6]=5.;
+  ptbins[7]=6.;
+  ptbins[8]=8.;
+  ptbins[9]=12.;
+  ptbins[10]=16.;
+  ptbins[11]=20.;
+  ptbins[12]=24.;
+  ptbins[13]=ptmax;
+
+  fCutsTight->SetGlobalIndex(nvars,nptbins);
+  fCutsLoose->SetGlobalIndex(nvars,nptbins);
+  fCutsTight->SetPtBins(nptbins+1,ptbins);
+  fCutsLoose->SetPtBins(nptbins+1,ptbins);
+  
+  /*   Float_t cutsArrayD0toKpiStand_1[9]={0.200,300.*1E-4,0.8,0.3,0.3,1000.*1E-4,1000.*1E-4,-35000.*1E-8,0.7};   // pt<1 
+               Float_t cutsArrayD0toKpiStand_2[9]={0.200,200.*1E-4,0.8,0.4,0.4,1000.*1E-4,1000.*1E-4,-30000.*1E-8,0.8}; // 1<=pt<2 
+               Float_t cutsArrayD0toKpiStand_3[9]={0.200,200.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-26000.*1E-8,0.94};   // 2<=pt<3 
+               Float_t cutsArrayD0toKpiStand_4[9]={0.200,200.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-15000.*1E-8,0.88};   // 3<=pt<5 
+               Float_t cutsArrayD0toKpiStand_5[9]={0.200,150.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-10000.*1E-8,0.9};   // 5<=pt<8
+               Float_t cutsArrayD0toKpiStand_6[9]={0.200,150.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-10000.*1E-8,0.9};   // 8<pt<12
+               Float_t cutsArrayD0toKpiStand_7[9]={0.200,150.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-10000.*1E-8,0.9}; // pt>12
+       */
+
+       const Int_t nvary=3;
+       Float_t varyd0xd0[nptbins][nvary]={{-35000.*1E-8,-40000.*1E-8,-50000.*1E-8},/* pt<0.5*/
+                                          {-35000.*1E-8,-40000.*1E-8,-50000.*1E-8},/* 0.5<pt<1*/
+                                          {-25000.*1E-8,-32000.*1E-8,-38000.*1E-8},/* 1<pt<2 */
+                                          {-22000.*1E-8,-26000.*1E-8,-30000.*1E-8},/* 2<pt<3 */
+                                          {-12000.*1E-8,-15000.*1E-8,-20000.*1E-8},/* 3<pt<4 */
+                                          {-12000.*1E-8,-15000.*1E-8,-20000.*1E-8},/* 4<pt<5 */
+                                          {-5000.*1E-8,-10000.*1E-8,-15000.*1E-8},/* 5<pt<6 */
+                                          {-5000.*1E-8,-10000.*1E-8,-15000.*1E-8},/* 6<pt<8 */
+                                          {-0.*1E-8,-10000.*1E-8,-12000.*1E-8},/* 8<pt<12 */
+                                          {5000.*1E-8,-5000.*1E-8,-10000.*1E-8},/* 12<pt<16 */
+                                          {5000.*1E-8,-5000.*1E-8,-10000.*1E-8},/* 16<pt<20 */
+                                          {5000.*1E-8,-5000.*1E-8,-10000.*1E-8},/* 20<pt<24 */
+                                          {5000.*1E-8,-5000.*1E-8,-10000.*1E-8}};/* pt>24 */
+       
+
+       Float_t varyCosPoint[nptbins][nvary]={{0.75,0.80,0.85},/* 0<pt<0.5 */
+                                             {0.75,0.80,0.85},/* 0.5<pt<1*/
+                                             {0.75,0.80,0.85},/* 1<pt<2 */
+                                             {0.92,0.94,0.95},/* 2<pt<3 */
+                                             {0.85,0.88,0.91},/* 3<pt<4 */
+                                             {0.85,0.88,0.91},/* 4<pt<5 */
+                                             {0.88,0.90,0.92},/* 5<pt<6 */
+                                             {0.88,0.90,0.92},/* 6<pt<8 */
+                                             {0.85,0.90,0.92},/* 8<pt<12 */
+                                             {0.85,0.90,0.92},/* 12<pt<16 */
+                                             {0.8,0.85,0.9},/* 16<pt<20 */
+                                             {0.8,0.85,0.9},/* 20<pt<24 */
+                                             {0.75,0.82,0.9}};/* pt>24 */
+       
+
+       
+       if(varycuts==-1){//DEFAULT CUTS
+         varycuts=11;
+         varyd0xd0[9][1]=-10000.*1E-8;
+         varyd0xd0[10][1]=-10000.*1E-8;
+         varyd0xd0[11][1]=-10000.*1E-8;          
+         varyd0xd0[12][1]=-10000.*1E-8;
+       }
+       Int_t vcd0xd0=varycuts/10;
+       Int_t vccospoint=varycuts%10;
+       // ######################## STAND VARY CUTS  ###########################################        
+       Float_t cutsMatrixD0toKpiStand[nptbins][nvars]={{0.400,300.*1E-4,0.8,0.3,0.3,1000.*1E-4,1000.*1E-4,varyd0xd0[0][vcd0xd0],varyCosPoint[0][vccospoint]},/* 0<pt<0.5*/
+                                                       {0.400,300.*1E-4,0.8,0.3,0.3,1000.*1E-4,1000.*1E-4,varyd0xd0[1][vcd0xd0],varyCosPoint[1][vccospoint]},/* 0.5<pt<1*/
+                                                       {0.400,300.*1E-4,0.8,0.4,0.4,1000.*1E-4,1000.*1E-4,varyd0xd0[2][vcd0xd0],varyCosPoint[2][vccospoint]},/* 1<pt<2 */
+                                                       {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,varyd0xd0[3][vcd0xd0],varyCosPoint[3][vccospoint]},/* 2<pt<3 */
+                                                       {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,varyd0xd0[4][vcd0xd0],varyCosPoint[4][vccospoint]},/* 3<pt<4 */
+                                                       {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,varyd0xd0[5][vcd0xd0],varyCosPoint[5][vccospoint]},/* 4<pt<5*/     
+                                                       {0.400,250.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,varyd0xd0[6][vcd0xd0],varyCosPoint[6][vccospoint]},/* 5<pt<6 */
+                                                       {0.400,250.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,varyd0xd0[7][vcd0xd0],varyCosPoint[7][vccospoint]},/* 6<pt<8 */
+                                                       {0.400,250.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,varyd0xd0[8][vcd0xd0],varyCosPoint[8][vccospoint]},/* 8<pt<12 */
+                                                       {0.400,250.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,varyd0xd0[9][vcd0xd0],varyCosPoint[9][vccospoint]},/*12< pt <16*/
+                                                       {0.400,250.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,varyd0xd0[10][vcd0xd0],varyCosPoint[10][vccospoint]}, /*16< pt <20*/
+                                                       {0.400,250.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,varyd0xd0[11][vcd0xd0],varyCosPoint[11][vccospoint]}, /*20< pt <24*/
+                                                       {0.400,250.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,varyd0xd0[12][vcd0xd0],varyCosPoint[12][vccospoint]}
+       };/* pt > 24*/
+       
+       Float_t cutsMatrixD0toKpiLoose[nptbins][nvars]={{0.400,300.*1E-4,0.8,0.3,0.3,1000.*1E-4,1000.*1E-4,-35000.*1E-8,0.73},/* pt<0.5*/
+                                                       {0.400,300.*1E-4,0.8,0.3,0.3,1000.*1E-4,1000.*1E-4,-35000.*1E-8,0.73},/* 0.5<pt<1*/
+                                                       {0.400,300.*1E-4,0.8,0.4,0.4,1000.*1E-4,1000.*1E-4,-25000.*1E-8,0.75},/* 1<pt<2 */
+                                                       {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-15000.*1E-8,0.8},/* 2<pt<3 */
+                                                       {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-8000.*1E-8,0.85},/* 3<pt<4 */
+                                                       {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-8000.*1E-8,0.85},/* 4<pt<5 */
+                                                       {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-8000.*1E-8,0.85},/* 5<pt<6 */
+                                                       {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-8000.*1E-8,0.85},/* 6<pt<8 */
+                                                       {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-5000.*1E-8,0.85},/* 8<pt<12 */
+                                                       {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-0.*1E-8,0.85},/* 12<pt<16 */
+                                                       {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,0.*1E-8,0.85},/* 16<pt<20 */
+                                                       {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,0.*1E-8,0.85},/* 20<pt<24 */
+                                                       {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,0.*1E-8,0.85}};/* pt>24 */
+       
+       
+       //CREATE TRANSPOSE MATRIX...REVERSE INDICES as required by AliRDHFCuts
+       Float_t **cutsMatrixTransposeStand=new Float_t*[nvars];
+       for(Int_t iv=0;iv<nvars;iv++)cutsMatrixTransposeStand[iv]=new Float_t[nptbins];
+       Float_t **cutsMatrixTransposeLoose=new Float_t*[nvars];
+       for(Int_t iv=0;iv<nvars;iv++)cutsMatrixTransposeLoose[iv]=new Float_t[nptbins];
+
+       for (Int_t ibin=0;ibin<nptbins;ibin++){
+         for (Int_t ivar = 0; ivar<nvars; ivar++){
+           cutsMatrixTransposeStand[ivar][ibin]=cutsMatrixD0toKpiStand[ibin][ivar];
+           cutsMatrixTransposeLoose[ivar][ibin]=cutsMatrixD0toKpiLoose[ibin][ivar];
+           //printf("cutsMatrixD0toKpi[%d][%d] = %f\n",ibin, ivar,cutsMatrixD0toKpiStand[ibin][ivar]);
+         }
+       }
+
+
+
+       fCutsTight->SetCuts(nvars,nptbins,cutsMatrixTransposeStand);
+       fCutsLoose->SetCuts(nvars,nptbins,cutsMatrixTransposeLoose);
+
+
+       for (Int_t ivar = 0; ivar<nvars; ivar++){
+         delete [] cutsMatrixTransposeStand[ivar];
+         delete [] cutsMatrixTransposeLoose[ivar];
+       }
+       delete [] cutsMatrixTransposeStand;
+       cutsMatrixTransposeStand=NULL;
+       delete [] cutsMatrixTransposeLoose;
+       cutsMatrixTransposeLoose=NULL;
+
+
+
+       fCutsTight->SetUseSpecialCuts(kTRUE);
+       fCutsLoose->SetUseSpecialCuts(kTRUE);
+       fCutsTight->SetRemoveDaughtersFromPrim(kTRUE);
+       fCutsLoose->SetRemoveDaughtersFromPrim(kTRUE);
+       // PID SETTINGS
+       AliAODPidHF* pidObj=new AliAODPidHF();
+       //pidObj->SetName("pid4D0");
+       Int_t mode=1;
+       const Int_t nlims=2;
+       Double_t plims[nlims]={0.6,0.8}; //TPC limits in momentum [GeV/c]
+       Bool_t compat=kTRUE; //effective only for this mode
+       Bool_t asym=kTRUE;
+       Double_t sigmas[5]={2.,1.,0.,3.,0.}; //to be checked and to be modified with new implementation of setters by Rossella
+       pidObj->SetAsym(asym);// if you want to use the asymmetric bands in TPC
+       pidObj->SetMatch(mode);
+       pidObj->SetPLimit(plims,nlims);
+       pidObj->SetSigma(sigmas);
+       pidObj->SetCompat(compat);
+       pidObj->SetTPC(kTRUE);
+       pidObj->SetTOF(kTRUE);
+
+       fCutsTight->SetPidHF(pidObj);
+       fCutsLoose->SetPidHF(pidObj);
+       delete pidObj; pidObj=NULL;
+       fCutsTight->SetUsePID(kTRUE);
+       fCutsLoose->SetUsePID(kTRUE);
+
+       fCutsTight->SetUseDefaultPID(kFALSE);
+       fCutsLoose->SetUseDefaultPID(kFALSE);
+
+       // PILE UP REJECTION
+       fCutsTight->SetOptPileup(AliRDHFCuts::kRejectPileupEvent);
+       fCutsLoose->SetOptPileup(AliRDHFCuts::kRejectPileupEvent);
+
+       ptbinlimits=ptbins;
+       fCutsTight->PrintAll();
+
+
+       return nptbins;
+}
+
+
+//_________________________________________
+Int_t AliAnalysisTaskSECharmFraction::SetStandardCuts(Double_t pt,Double_t invMassCut){
+  // UPV: this should set the cut object
+
+  //#############
+  // TEMPORARY: to be change in :
+  //             for(j<nptbins)
+  //                       if pt < standardptbin[j+1]
+  //                            SetCuts, bin=j
+  //                            break 
+  //                            
+  // the way the cuts are set is for further development
+  //   (to be interfaced with AliAnalsysTaskSETuneCuts)
+  //
+  // Cuts: 
+  // 0 = inv. mass half width [GeV]
+  // 1 = dca [cm]
+  // 2 = cosThetaStar
+  // 3 = pTK [GeV/c]
+  // 4 = pTPi [GeV/c]
+  // 5 = d0K [cm]   upper limit!
+  // 6 = d0Pi [cm]  upper limit!
+  // 7 = d0d0 [cm^2]
+  // 8 = cosThetaPoint  
+  Int_t ptbin=-1;
+
+
+  /*//#######################################################################
+  //###########################################################################
+  //                    STANDARD SETS OF CUTS ("tight"~PPR like;  commented loose are more stringent than "tight")
+  // #########################################################################
+  Int_t ptbin=-1;
+  if(pt>0. && pt<=1.) {
+  ptbin=0;
+    fCutsTight->SetD0toKpiCuts(invMassCut,0.04,0.8,0.5,0.5,0.05,0.05,-0.0002,0.5);
+    // fCutsLoose->SetD0toKpiCuts(invMassCut,0.04,0.8,0.5,0.5,0.05,0.05,-0.00025,0.7);
+    fCutsLoose->SetD0toKpiCuts(invMassCut,0.04,0.8,0.3,0.3,1.,1.,-0.0002,0.7);
+  }   
+  if(pt>1. && pt<=2.) {
     ptbin=1;  
-    fVHFtight->SetD0toKpiCuts(invMassCut,0.03,0.8,0.6,0.6,0.05,0.05,-0.0002,0.6);
-    fVHFloose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,1,1,-0.00025,0.8);
+    fCutsTight->SetD0toKpiCuts(invMassCut,0.03,0.8,0.6,0.6,0.05,0.05,-0.0002,0.6);
+    //fCutsLoose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,1,1,-0.00025,0.8);
+    fCutsLoose->SetD0toKpiCuts(invMassCut,0.03,0.8,0.3,0.3,1.,1.,-0.0001,0.7);
     //printf("I'm in the bin %d\n",ptbin);
   }
-  
-  if(pt>3. && pt<=5.){
+  if(pt>2. && pt<=3.) {
     ptbin=2;  
-    fVHFtight->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.05,0.05,-0.0001,0.8);
-    fVHFloose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.05,0.05,-0.00015,0.8);
+    fCutsTight->SetD0toKpiCuts(invMassCut,0.03,0.8,0.6,0.6,0.05,0.05,-0.0002,0.6);
+    //fCutsLoose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,1,1,-0.00025,0.8);
+    fCutsLoose->SetD0toKpiCuts(invMassCut,0.03,0.8,0.3,0.3,1.,1.,-0.0001,0.7);
+    //printf("I'm in the bin %d\n",ptbin);
+  } 
+  if(pt>3. && pt<=5.){
+    ptbin=3;  
+    fCutsTight->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.05,0.05,-0.0001,0.8);
+    //    fCutsLoose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.05,0.05,-0.00015,0.8);
+    fCutsLoose->SetD0toKpiCuts(invMassCut,0.03,0.8,0.4,0.4,1.,1.,-0.0001,0.75);
     //printf("I'm in the bin %d\n",ptbin);
   }
   if(pt>5.){
-    ptbin=3;
-    fVHFtight->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.05,0.05,-0.00005,0.8);
-    fVHFloose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.05,0.05,-0.00015,0.9);
+    ptbin=4;
+    fCutsTight->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.05,0.05,-0.00005,0.8);
+    //    fCutsLoose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.05,0.05,-0.00015,0.9);
+    fCutsLoose->SetD0toKpiCuts(invMassCut,0.03,0.8,0.5,0.5,1.,1.,-0.00005,0.75);
+  }//if(pt>5)
+  return ptbin;
+  //############################################################################
+  */
+
+
+
+  /* //#######################################################################
+     //################# VARY CUTS for d0xd0 STUDY  ##########################
+
+if(pt>0. && pt<=1.) {
+     ptbin=0;
+     fCutsTight->SetD0toKpiCuts(invMassCut,0.04,0.8,0.5,0.5,0.05,0.05,-0.0002,0.5);
+     // fCutsLoose->SetD0toKpiCuts(invMassCut,0.04,0.8,0.5,0.5,0.05,0.05,-0.00025,0.7);
+     fCutsLoose->SetD0toKpiCuts(invMassCut,0.04,0.8,0.3,0.3,1.,1.,-0.0002,0.7);
+     }  
+     if(pt>1. && pt<=2.) {
+     ptbin=1;  
+     fCutsTight->SetD0toKpiCuts(invMassCut,0.03,0.8,0.6,0.6,0.05,0.05,0.2,0.6);
+     //fCutsLoose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,1,1,-0.00025,0.8);
+     fCutsLoose->SetD0toKpiCuts(invMassCut,0.03,0.8,0.3,0.3,1.,1.,-0.0001,0.1);
+     //printf("I'm in the bin %d\n",ptbin);
+     }
+     if(pt>2. && pt<=3.) {
+     ptbin=2;  
+     fCutsTight->SetD0toKpiCuts(invMassCut,0.03,0.8,0.6,0.6,0.05,0.05,0.2,0.6);
+     //fCutsLoose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,1,1,-0.00025,0.8);
+     fCutsLoose->SetD0toKpiCuts(invMassCut,0.03,0.8,0.3,0.3,1.,1.,-0.0001,0.1);
+     //printf("I'm in the bin %d\n",ptbin);
+     }  
+     if(pt>3. && pt<=5.){
+     ptbin=3;  
+     fCutsTight->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.05,0.05,0.2,0.8);
+     //    fCutsLoose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.05,0.05,-0.00015,0.8);
+     fCutsLoose->SetD0toKpiCuts(invMassCut,0.03,0.3,0.4,0.4,1.,1.,-0.0001,0.1);
+     //printf("I'm in the bin %d\n",ptbin);
+     }
+     if(pt>5.){
+     ptbin=4;
+     fCutsTight->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.05,0.05,0.2,0.8);
+     //    fCutsLoose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.05,0.05,-0.00015,0.9);
+     fCutsLoose->SetD0toKpiCuts(invMassCut,0.03,0.8,0.5,0.5,1.,1.,-0.00005,0.1);
+     }//if(pt>5)
+     return ptbin;
+     //     #################################################################
+  */    
+
+  //##########################################################################
+  //################## CUTS with d0xd0 cut released  #########################
+  //###                    and TGHC cuts d0K and d0Pi to 0.1 instead of 0.05
+  //### USED FOR PHDthesis
+  //##########################################################################
+  /* if(pt>0. && pt<=1.) {
+     ptbin=0;
+     fCutsTight->SetD0toKpiCuts(invMassCut,0.04,0.8,0.5,0.5,0.1,0.1,-0.000,0.5);
+     // fCutsLoose->SetD0toKpiCuts(invMassCut,0.04,0.8,0.5,0.5,0.05,0.05,-0.00025,0.7);
+     fCutsLoose->SetD0toKpiCuts(invMassCut,0.04,0.8,0.3,0.3,1.,1.,-0.000,0.7);
+     }   
+     if(pt>1. && pt<=2.) {
+     ptbin=1;  
+     fCutsTight->SetD0toKpiCuts(invMassCut,0.03,0.8,0.6,0.6,0.1,0.1,-0.000,0.6);
+     //fCutsLoose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,1,1,-0.00025,0.8);
+     fCutsLoose->SetD0toKpiCuts(invMassCut,0.03,0.8,0.4,0.4,1.,1.,-0.0000,0.7);
+     //printf("I'm in the bin %d\n",ptbin);
+     }
+     if(pt>2. && pt<=3.) {
+     ptbin=2;  
+     fCutsTight->SetD0toKpiCuts(invMassCut,0.03,0.8,0.6,0.6,0.1,0.1,-0.000,0.6);
+     //fCutsLoose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,1,1,-0.00025,0.8);
+     fCutsLoose->SetD0toKpiCuts(invMassCut,0.03,0.8,0.4,0.4,1.,1.,-0.000,0.7);
+     //printf("I'm in the bin %d\n",ptbin);
+     } 
+     if(pt>3. && pt<=5.){
+     ptbin=3;  
+     fCutsTight->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.1,0.1,-0.000,0.8);
+     //    fCutsLoose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.05,0.05,-0.00015,0.8);
+     fCutsLoose->SetD0toKpiCuts(invMassCut,0.03,0.8,0.5,0.5,1.,1.,-0.000,0.75);
+     //printf("I'm in the bin %d\n",ptbin);
+     }
+     if(pt>5.){
+     ptbin=4;
+     fCutsTight->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.1,0.1,-0.0000,0.8);
+     //    fCutsLoose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.05,0.05,-0.00015,0.9);
+     fCutsLoose->SetD0toKpiCuts(invMassCut,0.03,0.8,0.5,0.5,1.,1.,-0.0000,0.75);
+     }//if(pt>5)
+     return ptbin;
+  */
+
+
+
+
+  //########## LOOKING FOR SIGNAL #####################
+  /*  
+  if(pt>0. && pt<=1.) {
+    ptbin=0;
+    fCutsTight->SetD0toKpiCuts(5*invMassCut,0.03,0.8,0.3,0.3,0.1,0.1,-0.00035,0.7);
+    // fCutsLoose->SetD0toKpiCuts(invMassCut,0.04,0.8,0.5,0.5,0.05,0.05,-0.00025,0.7);
+    fCutsLoose->SetD0toKpiCuts(5*invMassCut,0.04,0.8,0.3,0.3,0.1,0.1,-0.00025,0.7);
+  }   
+  if(pt>1. && pt<=2.) {
+    ptbin=1;  
+    fCutsTight->SetD0toKpiCuts(5*invMassCut,0.02,0.8,0.4,0.4,0.1,0.1,-0.00035,0.8);
+    //fCutsLoose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,1,1,-0.00025,0.8);
+    fCutsLoose->SetD0toKpiCuts(5*invMassCut,0.03,0.8,0.3,0.3,0.1,0.1,-0.0025,0.75);
+    //printf("I'm in the bin %d\n",ptbin);
+  }
+  if(pt>2. && pt<=3.) {
+    ptbin=2;  
+    fCutsTight->SetD0toKpiCuts(5*invMassCut,0.02,0.8,0.7,0.7,0.1,0.1,-0.00026,0.94);
+    //fCutsLoose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,1,1,-0.00025,0.8);
+    fCutsLoose->SetD0toKpiCuts(5*invMassCut,0.02,0.8,0.7,0.7,0.1,0.1,-0.0002,0.92);
+    //printf("I'm in the bin %d\n",ptbin);
+  } 
+  if(pt>3. && pt<=5.){
+    ptbin=3;  
+    fCutsTight->SetD0toKpiCuts(5*invMassCut,0.02,0.8,0.7,0.7,0.1,0.1,-0.00015,0.88);
+    //    fCutsLoose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.05,0.05,-0.00015,0.8);
+    fCutsLoose->SetD0toKpiCuts(5*invMassCut,0.02,0.8,0.7,0.7,0.1,0.1,-0.00015,0.9);
+    //printf("I'm in the bin %d\n",ptbin);
+  }
+  if(pt>5.&& pt<=8.){
+    ptbin=4;
+    fCutsTight->SetD0toKpiCuts(5*invMassCut,0.015,0.8,0.7,0.7,0.1,0.1,-0.0001,0.9);
+    //    fCutsLoose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.05,0.05,-0.00015,0.9);
+    fCutsLoose->SetD0toKpiCuts(5*invMassCut,0.02,0.8,0.7,0.7,0.1,0.1,-0.0000,0.88);
   }//if(pt>5)
+  if(pt>8.&&pt<=12.){
+    ptbin=5;
+    fCutsTight->SetD0toKpiCuts(5*invMassCut,0.015,0.8,0.7,0.7,0.1,0.1,-0.0001,0.9);
+    //    fCutsLoose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.05,0.05,-0.00015,0.9);
+    fCutsLoose->SetD0toKpiCuts(5*invMassCut,0.015,0.8,0.7,0.7,0.1,0.1,-0.0005,0.88);
+  }//if(pt>5)
+  
   return ptbin;
+  */
+  printf("AliAnalysisTaskSECharmFraction::Obsolete method! Parameters pt=%f,invmasscut=%f not used \n",pt,invMassCut);
+  return ptbin;  
+
 }
 
 //__________________________________________________________
@@ -2819,24 +6475,139 @@ void AliAnalysisTaskSECharmFraction::CheckInvMassD0(AliAODRecoDecayHF2Prong *d,D
 }
        
 
-
-//_______________________
+//__________________________________________________________________
 AliAODRecoDecayHF* AliAnalysisTaskSECharmFraction::GetD0toKPiSignalType(const AliAODRecoDecayHF2Prong *d,TClonesArray *arrayMC,Int_t &signaltype,Double_t &massMumTrue,Double_t *primaryVtx){
   //THIS METHOD CHECK THE TYPE OF SIGNAL/BACKGROUND THE CANDIDATE IS. 
   //  IF (!AND ONLY IF) THE TWO DAUGHTERS COME FROM A COMMONE MOTHER A FAKE TRUE SECONDARY VERTEX IS CONSTRUCTED (aodDMC)  
   //
   // THE FOLLOWING SCHEME IS ADOPTED: signaltype is set to
-                        //  1:signal (D0 prompt); 2: signal D0 from Dstar; 3: D0 fromB 4: D0 from Dstar fromB
-                        // then background categories: -1: one or both daughters is a fake track
-                        //                             5: both daughters come from a D meson != D0
-                        //                             6: both daughters come from a D0->4prongs  
-                        //                             7: both daughetrs are primaries
-                        //                             8: generic background (can include one of the previous if desired)
-                        //                             9: daughters out of acceptance
-                        //                            10: pathologic cases (not clear)
-                        //                            11: end of the method without output
-                        //                            12: different result than MatchToMC method
+  //  1:signal (D0 prompt); 2: signal D0 from Dstar; 3: D0 fromB 4: D0 from Dstar fromB
+  // then background categories: -1: one or both daughters is a fake track
+  //                             5: both daughters come from a D meson != D0
+  //                             6: both daughters come from a D0->4prongs  
+  //                             7: both daughetrs are primaries
+  //                             8: generic background (can include one of the previous if desired)
+  //                             9: daughters out of acceptance
+  //                            10: pathologic cases (not clear)
+  //                            11: end of the method without output
+  //                            12: different result than MatchToMC method
+  
+  AliAODMCParticle *mum1=0x0;
+  AliAODMCParticle *b1=0x0,*b2=0x0;
+  AliAODMCParticle *grandmoth1=0x0;
+  massMumTrue=-1;
+  AliAODRecoDecayHF *aodDMC=0x0;
+  Int_t pdgdaughters[2]={211,321};
+  Int_t labMum=d->MatchToMC(421,arrayMC,2,pdgdaughters);
+  if(labMum==-1){
+    signaltype=-1;
+    return aodDMC;    
+  }
+
+  // get daughter AOD tracks
+  AliAODTrack *trk0 = (AliAODTrack*)d->GetDaughter(0);
+  AliAODTrack *trk1 = (AliAODTrack*)d->GetDaughter(1);
+  if(trk0==0x0||trk1==0x0){
+    AliDebug(2,"Delete tracks I AM \n");
+  
+    signaltype=-1;
+    return aodDMC;
+   
+  }
+
+  b1=(AliAODMCParticle*)arrayMC->At(trk0->GetLabel());
+  b2=(AliAODMCParticle*)arrayMC->At(trk1->GetLabel());
+  mum1=(AliAODMCParticle*)arrayMC->At(labMum);  
+  massMumTrue=mum1->GetCalcMass();
+  aodDMC=ConstructFakeTrueSecVtx(b1,b2,mum1,primaryVtx);
+  if(aodDMC==0x0){
+    signaltype=10;
+    return aodDMC;
+  }
+
+  Bool_t isfromDstar=kFALSE;
+  grandmoth1=(AliAODMCParticle*)arrayMC->At(mum1->GetMother());
+  if(TMath::Abs(grandmoth1->GetPdgCode())==413||TMath::Abs(grandmoth1->GetPdgCode())==423)isfromDstar=kTRUE;// D0 COMING FROM A D0*
+  
+  Int_t origin=CheckOrigin(arrayMC,mum1);
+  if(origin==4){
+      if(isfromDstar)signaltype=2;
+      else signaltype=1;
+      return aodDMC;
+  }
+  else if(origin==5){
+    if(isfromDstar)signaltype=4;
+    else signaltype=3;
+    return aodDMC;
+  }
+  else if(origin==-1){
+    signaltype=11;
+    return aodDMC;
+  }
+  else if(origin==-2){
+    signaltype=-1;
+    return aodDMC;
+  }
+  
+  signaltype=11;// JUST FOR SAFETY: SHOULD NEVER REACH THIS POINT
+  return aodDMC;
+
+}
+
+//_________________________________________________________________________________________________
+Int_t AliAnalysisTaskSECharmFraction::CheckOrigin(const TClonesArray* arrayMC, const AliAODMCParticle *mcPartCandidate) const {                
+  //
+  // checking whether the mother of the particles come from a charm or a bottom quark
+  //
+       
+  Int_t pdgGranma = 0;
+  Int_t mother = 0;
+  mother = mcPartCandidate->GetMother();
+
+  Int_t abspdgGranma =0;
+  Bool_t isFromB=kFALSE;
+  Bool_t isQuarkFound=kFALSE;
+  while (mother >0 ){
+    
+    AliAODMCParticle* mcGranma = dynamic_cast<AliAODMCParticle*>(arrayMC->At(mother));
+    if (mcGranma){
+      pdgGranma = mcGranma->GetPdgCode();
+      abspdgGranma = TMath::Abs(pdgGranma);
+      if ((abspdgGranma > 500 && abspdgGranma < 600) || (abspdgGranma > 5000 && abspdgGranma < 6000)){
+       isFromB=kTRUE;
+      }
+      if(abspdgGranma==4 || abspdgGranma==5) isQuarkFound=kTRUE;
+      mother = mcGranma->GetMother();
+    }else{
+      AliError("Failed casting the mother particle!");
+      return -2;
+    }
+  }
+  
+  if(!isQuarkFound)return -1;
+  if(isFromB) return 5;  
+  else return 4;
+}
 
+//__________________________________________________
+AliAODRecoDecayHF* AliAnalysisTaskSECharmFraction::GetD0toKPiSignalTypeObsolete(const AliAODRecoDecayHF2Prong *d,TClonesArray *arrayMC,Int_t &signaltype,Double_t &massMumTrue,Double_t *primaryVtx){// OBSOLETE METHOD!!!!!
+  //THIS METHOD CHECK THE TYPE OF SIGNAL/BACKGROUND THE CANDIDATE IS. 
+  //  IF (!AND ONLY IF) THE TWO DAUGHTERS COME FROM A COMMONE MOTHER A FAKE TRUE SECONDARY VERTEX IS CONSTRUCTED (aodDMC)  
+  //
+  // THE FOLLOWING SCHEME IS ADOPTED: signaltype is set to
+  //  1:signal (D0 prompt); 2: signal D0 from Dstar; 3: D0 fromB 4: D0 from Dstar fromB
+  // then background categories: -1: one or both daughters is a fake track
+  //                             5: both daughters come from a D meson != D0
+  //                             6: both daughters come from a D0->4prongs  
+  //                             7: both daughetrs are primaries
+  //                             8: generic background (can include one of the previous if desired)
+  //                             9: daughters out of acceptance
+  //                            10: pathologic cases (not clear)
+  //                            11: end of the method without output
+  //                            12: different result than MatchToMC method
+  
   AliAODMCParticle *mum1=0x0;
   AliAODMCParticle *b1=0x0,*b2=0x0;
   AliAODMCParticle *grandmoth1=0x0;
@@ -2857,7 +6628,7 @@ AliAODRecoDecayHF* AliAnalysisTaskSECharmFraction::GetD0toKPiSignalType(const Al
   }
   dglabels[0]=trk0->GetLabel();
   dglabels[1]=trk1->GetLabel();
-  if(dglabels[0]==-1||dglabels[1]==-1){
+  if(dglabels[0]<0||dglabels[1]<0){
     AliDebug(2,"HERE I AM \n");
 
     //fake tracks
@@ -2870,11 +6641,13 @@ AliAODRecoDecayHF* AliAnalysisTaskSECharmFraction::GetD0toKPiSignalType(const Al
   
   b1=(AliAODMCParticle*)arrayMC->At(trk0->GetLabel());
   b2=(AliAODMCParticle*)arrayMC->At(trk1->GetLabel());
-  
-  if(b1->GetMother()==-1||b2->GetMother()==-1){
-    //Tracks with no mother  ????? FAKE DECAY VERTEX
-    
+  if(!b1||!b2){
+    //Tracks with no mother  ??? FAKE DECAY VERTEX
+    signaltype=10;
+    return aodDMC;
+  }
+  if(b1->GetMother()<0||b2->GetMother()<0){
+    //Tracks with no mother  ??? FAKE DECAY VERTEX
     signaltype=10;
     return aodDMC;
   }
@@ -2930,7 +6703,7 @@ AliAODRecoDecayHF* AliAnalysisTaskSECharmFraction::GetD0toKPiSignalType(const Al
    
   }
   
-  if(mum1->GetMother()==-1){
+  if(mum1->GetMother()<0){
     // A particle coming from nothing
     signaltype=10;
     return aodDMC;
@@ -2956,7 +6729,7 @@ AliAODRecoDecayHF* AliAnalysisTaskSECharmFraction::GetD0toKPiSignalType(const Al
   */
   //     if(fcheckMCD0){//THIS CHECK IS NEEDED TO AVOID POSSIBLE FAILURE IN THE SECOND WHILE, FOR DEBUGGING
   while(TMath::Abs(grandmoth1->GetPdgCode())!=4&&TMath::Abs(grandmoth1->GetPdgCode())!=5){
-    if(grandmoth1->GetMother()==-1){
+    if(grandmoth1->GetMother()<0){
       //### THE FOLLOWING IN CASE OF DEBUGGING ##########à
       /*printf("mother=-1, pdgcode: %d \n",grandmoth1->GetPdgCode());
        Int_t son=grandmoth1->GetDaughter(0);
@@ -3016,7 +6789,7 @@ AliAODRecoDecayHF* AliAnalysisTaskSECharmFraction::ConstructFakeTrueSecVtx(const
   else {
     if(b2->Charge()==-1){
       //printf("Same charges for prongs \n");
-      return 0x0;
+      if(!fLikeSign)return 0x0;
     }
     charge[1]=1;
   }
@@ -3065,108 +6838,332 @@ AliAODRecoDecayHF* AliAnalysisTaskSECharmFraction::ConstructFakeTrueSecVtx(const
 }
 
 //________________________________________________________
-Bool_t AliAnalysisTaskSECharmFraction::FillHistos(AliAODRecoDecayHF2Prong *d,TList *&list,Int_t ptbin,Int_t okD0,Int_t okD0bar,Double_t invMassD0,Double_t invMassD0bar,Bool_t isPeakD0,Bool_t isPeakD0bar,Bool_t isSideBand,Double_t massmumtrue,AliAODRecoDecayHF *aodDMC,Double_t *vtxTrue){//FILL THE HISTOGRAMS: TAKE THE HISTOS FROM THE list NAME
+Bool_t AliAnalysisTaskSECharmFraction::FillHistos(AliAODRecoDecayHF2Prong *d,TList *&list,Int_t ptbin,Int_t okD0,Int_t okD0bar,Double_t invMassD0,Double_t invMassD0bar,Bool_t isPeakD0,Bool_t isPeakD0bar,Bool_t isSideBandD0,Bool_t isSideBandD0bar,Double_t massmumtrue,AliAODRecoDecayHF *aodDMC,Double_t *vtxTrue){//FILL THE HISTOGRAMS: TAKE THE HISTOS FROM THE list NAME
 
   
   if((!okD0)&&(!okD0bar))return kTRUE;
+  if(ptbin==-1)return kTRUE;
+  //  flistNoCutsSignal->Add(hptD0NCsign);
+  // flistNoCutsSignal->Add(hptD0VsMaxPtNCsign);
+  // flistNoCutsSignal->Add(hptD0PTallsqrtNCsign);
+  //  flistNoCutsSignal->Add(hptD0PTallNCsign);
+  
+  // %%%%%% TO BE DONE 
+  //    flistNoCutsSignal->Add(hptD0vsptBNCsign);
+  // flistNoCutsSignal->Add(hpD0vspBNCsign);
+  //flistNoCutsSignal->Add(hptD0vsptcquarkNCsign);
+  //flistNoCutsSignal->Add(hpD0vspcquarkNCsign);
+  // %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  
+  // DONE
+  //hd0zD0ptLSCsign_pt
+  //hInvMassD0LSCsign_pt
+  //hetaLSCsign_pt
+  //
+  // %%% TO BE DONE %% 
+  //hCosPDPBLSCsign_pt
+  //hCosPcPDLSCsign_pt
   
+  Double_t pt=d->Pt();
+  Double_t impparxy=d->ImpParXY()*10000.;
+
+
+
   // ######### Get Standard label for hist in tlist ###############
   TString namehist=list->GetName(),str;
   namehist.ReplaceAll("list","");
 
   //  ######### Global properties histos #################
   // ####### take care: only for candidates which pass the cuts !! not for side band ########
-  if((isPeakD0&&okD0)||(isPeakD0bar&&okD0bar)){
-    str="hCPtaVSd0d0";
-    str.Append(namehist.Data());
-    ((TH1F*)list->FindObject(str.Data()))->Fill(1e8*d->Prodd0d0(),d->CosPointingAngle());
-    
-    str="hSecVtxZ";
-    str.Append(namehist.Data());
-    ((TH1F*)list->FindObject(str.Data()))->Fill(d->GetSecVtxZ());
-    
-    str="hSecVtxX";
-    str.Append(namehist.Data());
-    ((TH1F*)list->FindObject(str.Data()))->Fill(d->GetSecVtxX()*10000.);
-    
-    str="hSecVtxY";
-    str.Append(namehist.Data());
-    ((TH1F*)list->FindObject(str.Data()))->Fill(d->GetSecVtxY()*10000.);
-    
-    str="hSecVtxXY";
+  if(fFastAnalysis<2){ 
+    if((isPeakD0&&okD0)||(isPeakD0bar&&okD0bar)){
+      str="hCPtaVSd0d0";
+      str.Append(namehist.Data());
+      ((TH1F*)list->FindObject(str.Data()))->Fill(1e8*d->Prodd0d0(),d->CosPointingAngle());
+      
+      str="hSecVtxZ";
+      str.Append(namehist.Data());
+      ((TH1F*)list->FindObject(str.Data()))->Fill(d->GetSecVtxZ());
+      
+      str="hSecVtxX";
+      str.Append(namehist.Data());
+      ((TH1F*)list->FindObject(str.Data()))->Fill(d->GetSecVtxX()*10000.);
+      
+      str="hSecVtxY";
+      str.Append(namehist.Data());
+      ((TH1F*)list->FindObject(str.Data()))->Fill(d->GetSecVtxY()*10000.);
+      
+      str="hSecVtxXY";
+      str.Append(namehist.Data());
+      ((TH2F*)list->FindObject(str.Data()))->Fill(d->GetSecVtxX()*10000.,d->GetSecVtxY()*10000.);
+      
+      str="hSecVtxPhi";
+      str.Append(namehist.Data());
+      ((TH1F*)list->FindObject(str.Data()))->Fill(TMath::ATan2(d->GetSecVtxY()*10000.,d->GetSecVtxX()*10000.)*TMath::RadToDeg());
+      
+      
+      str="hd0singlTrack";
+      str.Append(namehist.Data());
+      ((TH1F*)list->FindObject(str.Data()))->Fill(d->Getd0Prong(0)*10000.);
+      ((TH1F*)list->FindObject(str.Data()))->Fill(d->Getd0Prong(1)*10000.);
+      
+      str="hCPta";
+      str.Append(namehist.Data());
+      ((TH1F*)list->FindObject(str.Data()))->Fill(d->CosPointingAngle());
+      
+      str="hd0xd0";
+      str.Append(namehist.Data());
+      ((TH1F*)list->FindObject(str.Data()))->Fill(1e8*d->Prodd0d0());
+      
+      //%%%%%%%% NEW HISTO %%%%%%%%%%
+      str="hdca";
+      str.Append(namehist.Data());
+      ((TH1F*)list->FindObject(str.Data()))->Fill(1e4*d->GetDCA());
+      
+      str="hcosthetastar";
+      str.Append(namehist.Data());
+      if(okD0)((TH1F*)list->FindObject(str.Data()))->Fill(d->CosThetaStarD0());
+      if(okD0bar)((TH1F*)list->FindObject(str.Data()))->Fill(d->CosThetaStarD0bar());
+      
+      str="hptD0";
+      str.Append(namehist.Data());
+      ((TH1F*)list->FindObject(str.Data()))->Fill(pt);
+      
+      str="hptD0VsMaxPt";
+      str.Append(namehist.Data());
+      Int_t pr=0;
+      if(d->PtProng(1)>d->PtProng(0))pr=1;
+      if(d->PtProng(pr)<fptMax[0]) ((TH1F*)list->FindObject(str.Data()))->Fill(pt-fptMax[0]);
+      else if(d->PtProng(TMath::Abs(pr-1))<fptMax[1])((TH1F*)list->FindObject(str.Data()))->Fill(pt-fptMax[1]);
+      else ((TH1F*)list->FindObject(str.Data()))->Fill(pt-fptMax[2]);
+      
+      
+      str="hptD0PTallsqrt";
+      str.Append(namehist.Data());
+      Double_t sumsqrpt=fptAllSq-d->PtProng(1)*d->PtProng(1)-d->PtProng(0)*d->PtProng(0);
+      if(sumsqrpt>0.)((TH1F*)list->FindObject(str.Data()))->Fill(pt,TMath::Sqrt(sumsqrpt));
+      
+      str="hptD0PTall";
+      str.Append(namehist.Data());
+      ((TH1F*)list->FindObject(str.Data()))->Fill(pt,fptAll-d->PtProng(1)-d->PtProng(0));
+      
+      
+      str="hd0zD0pt";
+      str.Append(namehist.Data());
+      str.Append("_pt");
+      str+=ptbin;
+      if(d->GetPrimaryVtx()!=0x0)((TH1F*)list->FindObject(str.Data()))->Fill(1e4*(d->Zv()-d->GetPrimaryVtx()->GetZ()));
+      
+      str="heta";
+      str.Append(namehist.Data());
+      str.Append("_pt");
+      str+=ptbin;
+      ((TH1F*)list->FindObject(str.Data()))->Fill(d->Eta());
+      
+      // OTHER NEW ADDITIONAL HISTOS
+      
+      str="hd0xd0";
+      str.Append(namehist.Data());
+      str.Append("_pt");
+      str+=ptbin;
+      //printf("Hist name: %s \n",str.Data());
+      ((TH1F*)list->FindObject(str.Data()))->Fill(1e8*d->Prodd0d0());
+      
+      
+      str="hd0D0VSd0xd0";
+      str.Append(namehist.Data());
+      str.Append("_pt");
+      str+=ptbin;
+      //printf("Hist name: %s \n",str.Data());
+      ((TH2F*)list->FindObject(str.Data()))->Fill(1e8*d->Prodd0d0(),impparxy);
+      
+      
+      str="hangletracksVSd0xd0";
+      str.Append(namehist.Data());
+      str.Append("_pt");
+      str+=ptbin;
+      //printf("Hist name: %s \n",str.Data());
+      ((TH2F*)list->FindObject(str.Data()))->Fill(1e8*d->Prodd0d0(),d->ProngsRelAngle(0,1));
+      
+      str="hangletracksVSd0D0";
+      str.Append(namehist.Data());
+      str.Append("_pt");
+      str+=ptbin;
+      //  printf("Hist name: %s \n",str.Data());
+      ((TH2F*)list->FindObject(str.Data()))->Fill(impparxy,d->ProngsRelAngle(0,1));
+    // ####################################################
+    }
+  }  
+  
+  //  ######### Invariant mass histos #################
+  if(fFastAnalysis<1){ 
+    str="hMass";
     str.Append(namehist.Data());
-    ((TH2F*)list->FindObject(str.Data()))->Fill(d->GetSecVtxX()*10000.,d->GetSecVtxY()*10000.);
+    ((TH1F*)list->FindObject(str.Data()))->Fill(invMassD0);
+    ((TH1F*)list->FindObject(str.Data()))->Fill(invMassD0bar);
     
-    str="hSecVtxPhi";
-    str.Append(namehist.Data());
-    ((TH1F*)list->FindObject(str.Data()))->Fill(TMath::ATan2(d->GetSecVtxY()*10000.,d->GetSecVtxX()*10000.)*TMath::RadToDeg());
     
-    str="hCPta";
+    if(isPeakD0||isPeakD0bar){
+      str="hMass";
+      str.Append(namehist.Data());
+      str.Append("PM");
+      if(isPeakD0&&okD0)((TH1F*)list->FindObject(str.Data()))->Fill(invMassD0);
+      if(isPeakD0bar&&okD0bar)((TH1F*)list->FindObject(str.Data()))->Fill(invMassD0bar);
+    }
+  }
+
+  // The Following is a NEW HISTO  
+  str="hInvMassD0";
+  str.Append(namehist.Data());
+  str.Append("_pt");
+  str+=ptbin;
+  if(okD0)((TH1F*)list->FindObject(str.Data()))->Fill(invMassD0);
+  if((!fsplitMassD0D0bar)&&okD0bar)((TH1F*)list->FindObject(str.Data()))->Fill(invMassD0bar);
+  str="hInvMassD0bar";
+  str.Append(namehist.Data());
+  str.Append("_pt");
+  str+=ptbin;
+  if(fsplitMassD0D0bar&&okD0bar)((TH1F*)list->FindObject(str.Data()))->Fill(invMassD0bar);
+  
+
+  // FILLING OF THE SPARSE HISTO
+  if(fFastAnalysis<=2){ // ONLY IF NOT VERY FAST ANALYSIS
+    str="hSparse";
     str.Append(namehist.Data());
-    ((TH1F*)list->FindObject(str.Data()))->Fill(d->CosPointingAngle());
+
+    Double_t point[5]={invMassD0,invMassD0bar,pt,impparxy,0.};
+    if(okD0&&okD0bar)point[4]=3.5;
+    else if(okD0)point[4]=1.5;
+    else if(okD0bar)point[4]=2.5;
+    if(fReadMC&&aodDMC!=0x0&&namehist.Contains("fromB")){     
+      point[3]=aodDMC->ImpParXY()*10000.;
+    }
+    ((THnSparseF*)list->FindObject(str.Data()))->Fill(point);
+    if(fReadMC&&aodDMC!=0x0&&namehist.Contains("fromB")){     
+      point[3]=impparxy;
+      str="hSparseReco";
+      str.Append(namehist.Data());
+      ((THnSparseF*)list->FindObject(str.Data()))->Fill(point);
+    }
+
     
-    str="hd0xd0";
+    str="hInvMassPt";
     str.Append(namehist.Data());
-    ((TH1F*)list->FindObject(str.Data()))->Fill(1e8*d->Prodd0d0());
+    if(okD0)((TH2F*)list->FindObject(str.Data()))->Fill(invMassD0,pt);
+    if(okD0bar)((TH2F*)list->FindObject(str.Data()))->Fill(invMassD0bar,pt);
+
   }
-  
-  
-  //  ######### Invariant mass histos #################
-  str="hMass";
-  str.Append(namehist.Data());
-  ((TH1F*)list->FindObject(str.Data()))->Fill(invMassD0);
-  ((TH1F*)list->FindObject(str.Data()))->Fill(invMassD0bar);
-   
-      
-  if(isPeakD0||isPeakD0bar){
+
+
+
+
+  if(fFastAnalysis<=3&&namehist.Contains("sign")){
+    str="hSparseCxyLxy";
+    str.Append(namehist.Data()); 
+    Double_t nLxy=d->NormalizedDecayLengthXY()*d->P()/pt;
+    Double_t cosPxy=TMath::Abs(d->CosPointingAngleXY());
+    Double_t point[4]={invMassD0,pt,cosPxy,nLxy};
+    if(okD0){
+      //      printf("Listname: %s, Here the histo : %p \n",namehist.Data(),((THnSparseF*)list->FindObject(str.Data())));
+      ((THnSparseF*)list->FindObject(str.Data()))->Fill(point);
+    }
+    point[0]=invMassD0bar;
+    if(okD0bar){
+      ((THnSparseF*)list->FindObject(str.Data()))->Fill(point);
+    }
+  }
+
+
+
+  /* if(isPeakD0||isPeakD0bar){
     str="hMass";
     str.Append(namehist.Data());
     str.Append("PM");
     if(isPeakD0&&okD0)((TH1F*)list->FindObject(str.Data()))->Fill(invMassD0);
     if(isPeakD0bar&&okD0bar)((TH1F*)list->FindObject(str.Data()))->Fill(invMassD0bar);
-  }
-  if(isSideBand){
-    str="hMass";
+    // The Following is a NEW HISTO
+    str="hInvMassD0";
     str.Append(namehist.Data());
-    str.Append("SB");
-    if(okD0)((TH1F*)list->FindObject(str.Data()))->Fill(invMassD0);
-    if(okD0bar)((TH1F*)list->FindObject(str.Data()))->Fill(invMassD0bar);
-  }
-  
-  if(massmumtrue>0.){
-    str="hMassTrue";
-    str.Append(namehist.Data());
-    ((TH1F*)list->FindObject(str.Data()))->Fill(massmumtrue);
-    
-    if(isPeakD0||isPeakD0bar){
-      str="hMassTrue";
+    str.Append("_pt");
+    str+=ptbin;
+    if(isPeakD0&&okD0)((TH1F*)list->FindObject(str.Data()))->Fill(invMassD0);
+    if(isPeakD0bar&&okD0bar)((TH1F*)list->FindObject(str.Data()))->Fill(invMassD0bar);
+    }*/
+  if(fFastAnalysis<2){ 
+    if(isSideBandD0||isSideBandD0bar){
+      str="hMass";
       str.Append(namehist.Data());
-      str.Append("PM");
-      ((TH1F*)list->FindObject(str.Data()))->Fill(massmumtrue);
+      str.Append("SB");
+      if(okD0)((TH1F*)list->FindObject(str.Data()))->Fill(invMassD0);
+      if(okD0bar)((TH1F*)list->FindObject(str.Data()))->Fill(invMassD0bar);
     }
-    if(isSideBand){
+  }
+  
+  if(fReadMC){
+    if(massmumtrue>0.){
       str="hMassTrue";
       str.Append(namehist.Data());
-      str.Append("SB");
       ((TH1F*)list->FindObject(str.Data()))->Fill(massmumtrue);
+      
+      if(isPeakD0||isPeakD0bar){
+       str="hMassTrue";
+       str.Append(namehist.Data());
+       str.Append("PM");
+       ((TH1F*)list->FindObject(str.Data()))->Fill(massmumtrue);
+      }
+      if(isSideBandD0||isSideBandD0bar){
+       str="hMassTrue";
+       str.Append(namehist.Data());
+       str.Append("SB");
+       ((TH1F*)list->FindObject(str.Data()))->Fill(massmumtrue);
+      }
     }
   }
-  
+
   // ################ D0 Impact Parameter Histos #####################
-  if((isPeakD0&&okD0)||(isPeakD0bar&&okD0bar)){
+  if(isPeakD0||isPeakD0bar){    
+   
     str="hd0D0";
     str.Append(namehist.Data());
     str.Append("PM");
-    ((TH1F*)list->FindObject(str.Data()))->Fill(d->ImpParXY()*10000.);
+    if(!fReadMC){
+      // WE COUNT TWICE A CANDIDATE UNDER THE INV MASS PEAK BOTH AS a D0 and a D0bar (if selected) for DATA ONLY
+      // THIS BECAUSE WE SUBTRACT a "BACKGROUND" AMOUNT ESTIMATED USING THE INV MASS FIT INFORMATION
+      // WHICH SHOULD ACCOUNT FOR REFLECTIONS
+      if(isPeakD0&&okD0){
+       ((TH1F*)list->FindObject(str.Data()))->Fill(impparxy);
+      }
+      if(isPeakD0bar&&okD0bar){
+       ((TH1F*)list->FindObject(str.Data()))->Fill(impparxy);
+      }
+    }
+    else {
+      if((isPeakD0&&okD0)||(isPeakD0bar&&okD0bar))((TH1F*)list->FindObject(str.Data()))->Fill(impparxy);
+    }
     
     str="hd0D0pt";
     str.Append(namehist.Data());
     str.Append("_PkMss_pt");
-    str+=ptbin;
-    ((TH1F*)list->FindObject(str.Data()))->Fill(d->ImpParXY()*10000.);
-     
+    str+=ptbin;     
+    if(!fReadMC){
+      // WE COUNT TWICE A CANDIDATE UNDER THE INV MASS PEAK BOTH AS a D0 and a D0bar (if selected) for DATA ONLY
+      // THIS BECAUSE WE SUBTRACT a "BACKGROUND" AMOUNT ESTIMATED USING THE INV MASS FIT INFORMATION
+      // WHICH SHOULD ACCOUNT FOR REFLECTIONS
+      if(isPeakD0&&okD0){
+       ((TH1F*)list->FindObject(str.Data()))->Fill(impparxy);
+      }
+      if(isPeakD0bar&&okD0bar){
+       ((TH1F*)list->FindObject(str.Data()))->Fill(impparxy);
+      }
+    }
+    else {
+      if((isPeakD0&&okD0)||(isPeakD0bar&&okD0bar))((TH1F*)list->FindObject(str.Data()))->Fill(impparxy);
+    }
+    
     
-    if(vtxTrue){
+    if(fReadMC&&vtxTrue){
+      // ONLY AN HISTO FOR QA: WE DO NOT CONSIDER THE IMPACT PARAMETER FOR EACH MASS HYPOTHESIS
       str="hd0D0VtxTrue";
       str.Append(namehist.Data());
       str.Append("PM");
@@ -3179,10 +7176,11 @@ Bool_t AliAnalysisTaskSECharmFraction::FillHistos(AliAODRecoDecayHF2Prong *d,TLi
       ((TH1F*)list->FindObject(str.Data()))->Fill(d->AliAODRecoDecay::ImpParXY(vtxTrue)*10000.);
     }
     
-    if(aodDMC!=0x0){
-      aodDMC->Print("");
-      aodDMC->ImpParXY();
-      aodDMC->Print("");
+    if(fReadMC&&aodDMC!=0x0){
+      // WE NEED JUST THE SHAPE: AVOID TAKING THE IMPACT PAR FOR EACH MASS HYPO PASSING THE CUTS
+      // aodDMC->Print("");
+      //aodDMC->ImpParXY();
+      // aodDMC->Print("");
       str="hMCd0D0";
       str.Append(namehist.Data());
       str.Append("PM");
@@ -3193,23 +7191,26 @@ Bool_t AliAnalysisTaskSECharmFraction::FillHistos(AliAODRecoDecayHF2Prong *d,TLi
       str.Append("_PkMss_pt");
       str+=ptbin;
       ((TH1F*)list->FindObject(str.Data()))->Fill(aodDMC->ImpParXY()*10000.);
-    }
-    
-  }
-  else if(isSideBand){
+    }       
+  } 
+  else if(isSideBandD0||isSideBandD0bar){
+    // WE ASSUME THE IMPACT PARAMETER DISTRIBUION FOR BACKGROUND(SIDEBANDS) CANDIDATES
+    // IS NOT CORRELATED TO THE INVARIANT MASSES. THEREFORE WE JUST TAKE ONE TIME
+    // THE IMPACT PARAMETER AND NOT ONE FOR EACH MASS HYPOTHESIS PASSING THE CUTS
+
     str="hd0D0";
     str.Append(namehist.Data());
     str.Append("SB");
-    ((TH1F*)list->FindObject(str.Data()))->Fill(d->ImpParXY()*10000.);
+    ((TH1F*)list->FindObject(str.Data()))->Fill(impparxy);
     
     str="hd0D0pt";
     str.Append(namehist.Data());
     str.Append("_SBMss_pt");
     str+=ptbin;
-    ((TH1F*)list->FindObject(str.Data()))->Fill(d->ImpParXY()*10000.);
+    ((TH1F*)list->FindObject(str.Data()))->Fill(impparxy);
     
     
-    if(vtxTrue){
+    if(fReadMC&&vtxTrue){
       str="hd0D0VtxTrue";
       str.Append(namehist.Data());
       str.Append("SB");
@@ -3223,7 +7224,7 @@ Bool_t AliAnalysisTaskSECharmFraction::FillHistos(AliAODRecoDecayHF2Prong *d,TLi
       
     }
     
-    if(aodDMC!=0x0){
+    if(fReadMC&&aodDMC!=0x0){
       str="hMCd0D0";
       str.Append(namehist.Data());
       str.Append("SB");
@@ -3242,25 +7243,292 @@ Bool_t AliAnalysisTaskSECharmFraction::FillHistos(AliAODRecoDecayHF2Prong *d,TLi
 }
 
 
-void AliAnalysisTaskSECharmFraction::SetNPtBins(Int_t nbins,const Double_t *ptbins){
+ void  AliAnalysisTaskSECharmFraction::FillHistoMCproperties(TClonesArray *arrayMC){ 
+    //#############################################################
+    //            HERE LOOK AT global properties of D0 mesons, c quarks and B
+    // 
+    //#############################################################
+   Double_t pxyzMum[3],pxyzDaught[3],cosOpenAngle=-1.1,ptmum,ptdaught;
+   Int_t ncdaught=0,cquarksMC=0,nD0all=0,nD0FromB=0,nBdaught=0,nD0bquark=0,nD0bMeson=0,nD0bBaryon=0;
+   for (Int_t iPart=0; iPart<arrayMC->GetEntriesFast(); iPart++) { 
+     AliAODMCParticle* mcPart = dynamic_cast<AliAODMCParticle*>(arrayMC->At(iPart));
+     if (!mcPart) {
+       AliWarning("Particle not found in tree, skipping"); 
+       continue;
+     } 
+     if (TMath::Abs(mcPart->GetPdgCode()) == 4){
+       cquarksMC++;  
+       mcPart->PxPyPz(pxyzMum);
+       ptmum=mcPart->Pt();
+       
+       ((TH1F*)flistMCproperties->FindObject("hMCcquarkAllPt"))->Fill(ptmum);
+       ((TH1F*)flistMCproperties->FindObject("hMCcquarkAllEta"))->Fill(mcPart->Eta());
+       ((TH1F*)flistMCproperties->FindObject("hMCcquarkAllEnergy"))->Fill(mcPart->E());
+       //NOW LOOK FOR A D0 among cquark daughters
+       ncdaught=mcPart->GetDaughter(1)-mcPart->GetDaughter(0)+1;
+       ((TH1F*)flistMCproperties->FindObject("hMCcquarkNdaught"))->Fill(ncdaught);
+       if(ncdaught>1){
+        for(Int_t iDaught=mcPart->GetDaughter(0);iDaught<mcPart->GetDaughter(1);iDaught++){
+          AliAODMCParticle* mcPartD0 = dynamic_cast<AliAODMCParticle*>(arrayMC->At(iDaught));
+          if(mcPartD0==0x0)continue;
+          if(TMath::Abs(mcPartD0->GetPdgCode()) == 421){
+            // a D0 coming from a c quark
+            mcPartD0->PxPyPz(pxyzDaught);
+            ptdaught=mcPartD0->Pt();
+            ((TH1F*)flistMCproperties->FindObject("hMCD0fromcPt"))->Fill(ptdaught);
+            ((TH1F*)flistMCproperties->FindObject("hMCD0fromcEta"))->Fill(mcPartD0->Eta());
+            ((TH1F*)flistMCproperties->FindObject("hMCD0fromcEnergy"))->Fill(mcPartD0->E());
+            // ##############################################################################################
+            //                            Compare D0 momentum and c quarks: 
+            //              NB: here ALL D0 are considered, also those not decaying in KPi !!!
+            // ##############################################################################################
+            ((TH2F*)flistMCproperties->FindObject("hMCD0VscquarkPt"))->Fill(mcPart->Pt(),mcPartD0->Pt());
+            ((TH2F*)flistMCproperties->FindObject("hMCD0VscquarkEnergy"))->Fill(mcPart->E(),mcPartD0->E());
+            ((TH1F*)flistMCproperties->FindObject("hMCD0deltacquarkEnergy"))->Fill(mcPartD0->E()/mcPart->E());
+            ((TH1F*)flistMCproperties->FindObject("hMCD0EnergyVsAvcquarkDaughtEn"))->Fill((mcPartD0->E()-(mcPart->E()/ncdaught))/mcPart->E());
+            //calculate open angle
+            if((pxyzMum[0]!=0.||pxyzMum[1]!=0.||pxyzMum[2]!=0.)&&(pxyzDaught[0]!=0.||pxyzDaught[1]!=0.||pxyzDaught[2]!=0.))cosOpenAngle=(pxyzDaught[0]*pxyzMum[0]+pxyzDaught[1]*pxyzMum[1]+pxyzDaught[2]*pxyzMum[2])/(TMath::Sqrt(pxyzDaught[0]*pxyzDaught[0]+pxyzDaught[1]*pxyzDaught[1]+pxyzDaught[2]*pxyzDaught[2])*TMath::Sqrt(pxyzDaught[0]*pxyzDaught[0]+pxyzDaught[1]*pxyzDaught[1]+pxyzDaught[2]*pxyzDaught[2]));
+            ((TH1F*)flistMCproperties->FindObject("hMCD0cquarkAngle"))->Fill(cosOpenAngle);
+            ((TH2F*)flistMCproperties->FindObject("hMCD0cquarkAngleEnergy"))->Fill(mcPart->E(),cosOpenAngle);
+          }
+        }
+       }
+     }
+     
+     // NOW LOOK FOR D0 not coming from cquarks
+      if (TMath::Abs(mcPart->GetPdgCode()) == 421){
+       nD0all++;  
+       if(mcPart->GetMother()<0)continue;
+       AliAODMCParticle* mcD0Parent = dynamic_cast<AliAODMCParticle*>(arrayMC->At(mcPart->GetMother()));
+       if(mcD0Parent==0x0)continue;
+       Bool_t notfound=kFALSE,bMeson=kFALSE,bBaryon=kFALSE;
+       //CheckOrigin
+       while(TMath::Abs(mcD0Parent->GetPdgCode())!=4&&TMath::Abs(mcD0Parent->GetPdgCode())!=5){
+         if(500<TMath::Abs(mcD0Parent->GetPdgCode())%10000&&TMath::Abs(mcD0Parent->GetPdgCode())<600){
+           bMeson=kTRUE;
+           break;
+         }
+         else if (5000<TMath::Abs(mcD0Parent->GetPdgCode())&&TMath::Abs(mcD0Parent->GetPdgCode())<6000){
+           bBaryon=kTRUE;
+           break;
+         }
+         if(mcD0Parent->GetMother()==0x0){
+           notfound=kTRUE;
+           break;
+         };
+         if(mcD0Parent->GetMother()<0){
+           notfound=kTRUE;
+           break;
+         }
+         mcD0Parent=dynamic_cast<AliAODMCParticle*>(arrayMC->At(mcD0Parent->GetMother()));
+         if(mcD0Parent==0x0) break;
+       }
+
+       if(mcD0Parent==0x0)continue;
+       if(notfound)continue;
+       if(TMath::Abs(mcD0Parent->GetPdgCode())==4)continue;//D0 from c quarks already counted
+       ((TH1F*)flistMCproperties->FindObject("hMCfromBpdgB"))->Fill(TMath::Abs(mcD0Parent->GetPdgCode()));
+       if(bBaryon)nD0bBaryon++;
+       else if(bMeson)nD0bMeson++;
+       else nD0bquark++;
+       nD0FromB++;
+       mcD0Parent->PxPyPz(pxyzMum);
+       ptmum=mcD0Parent->Pt();
+       ((TH1F*)flistMCproperties->FindObject("hMCBhadrPt"))->Fill(ptmum);
+       ((TH1F*)flistMCproperties->FindObject("hMCBhadrEta"))->Fill(mcD0Parent->Eta());
+       ((TH1F*)flistMCproperties->FindObject("hMCBhadrEnergy"))->Fill(mcD0Parent->E());
+       
+       nBdaught=mcD0Parent->GetDaughter(1)-mcD0Parent->GetDaughter(0)+1;
+       ((TH1F*)flistMCproperties->FindObject("hMCBhadrNdaught"))->Fill(nBdaught);
+
+       
+       // Now take properties of this D0 coming from a B
+       mcPart->PxPyPz(pxyzDaught);
+       ptdaught=mcPart->Pt();
+       ((TH1F*)flistMCproperties->FindObject("hMCD0fromBPt"))->Fill(ptdaught);
+       ((TH1F*)flistMCproperties->FindObject("hMCD0fromBEta"))->Fill(mcPart->Eta());
+       ((TH1F*)flistMCproperties->FindObject("hMCD0fromBEnergy"))->Fill(mcPart->E());
+       // ##############################################################################################
+       //                            Compare D0 momentum and b hadron: 
+       //              NB: here ALL D0 are considered, also those not decaying in KPi !!!
+       // ##############################################################################################
+       ((TH2F*)flistMCproperties->FindObject("hMCD0VsBhadrPt"))->Fill(mcD0Parent->Pt(),mcPart->Pt());
+       ((TH2F*)flistMCproperties->FindObject("hMCD0VsBhadrEnergy"))->Fill(mcD0Parent->E(),mcPart->E());
+       ((TH1F*)flistMCproperties->FindObject("hMCD0deltaBhadrEnergy"))->Fill(mcPart->E()/mcD0Parent->E());
+       ((TH1F*)flistMCproperties->FindObject("hMCD0EnergyVsAvBDaughtEn"))->Fill((mcPart->E()-(mcD0Parent->E()/nBdaught))/mcD0Parent->E());
+       //calculate open angle
+       if((pxyzMum[0]!=0.||pxyzMum[1]!=0.||pxyzMum[2]!=0.)&&(pxyzDaught[0]!=0.||pxyzDaught[1]!=0.||pxyzDaught[2]!=0.))cosOpenAngle=(pxyzDaught[0]*pxyzMum[0]+pxyzDaught[1]*pxyzMum[1]+pxyzDaught[2]*pxyzMum[2])/(TMath::Sqrt(pxyzDaught[0]*pxyzDaught[0]+pxyzDaught[1]*pxyzDaught[1]+pxyzDaught[2]*pxyzDaught[2])*TMath::Sqrt(pxyzDaught[0]*pxyzDaught[0]+pxyzDaught[1]*pxyzDaught[1]+pxyzDaught[2]*pxyzDaught[2]));
+       ((TH1F*)flistMCproperties->FindObject("hMCD0BhadrAngle"))->Fill(cosOpenAngle);
+       ((TH2F*)flistMCproperties->FindObject("hMCD0BhadrAngleEnergy"))->Fill(mcPart->E(),cosOpenAngle);
+      }
+   }
+   ((TH1F*)flistMCproperties->FindObject("hMCPartFound"))->Fill(1,cquarksMC);
+   ((TH1F*)flistMCproperties->FindObject("hMCPartFound"))->Fill(2,nD0all);
+   ((TH1F*)flistMCproperties->FindObject("hMCPartFound"))->Fill(3,nD0FromB);
+   ((TH1F*)flistMCproperties->FindObject("hMCPartFound"))->Fill(4,nD0bMeson);
+   ((TH1F*)flistMCproperties->FindObject("hMCPartFound"))->Fill(5,nD0bBaryon);
+   
+ }
+
+
+void AliAnalysisTaskSECharmFraction::SetPtBins(Int_t nbins,const Float_t *ptbins){
   if((fptbins)!=0x0)delete fptbins;
-  fnbins=nbins;fptbins=new Double_t[fnbins];
-  memcpy(fptbins,ptbins,fnbins*sizeof(Double_t));
+  fnbins=nbins;fptbins=new Float_t[fnbins];
+  memcpy(fptbins,ptbins,fnbins*sizeof(Float_t));
   return;
 }
 
 void AliAnalysisTaskSECharmFraction::SetStandardMassSelection(){
   //SET THE DEFAULT VALUES FOR INVARIANT MASS SELECTION
+
+  /*HERE DEFAULT
+    SetSignalInvMassCut();
+    SetLargeInvMassCut();
+    SetSideBandInvMassCut();
+    SetSideBandInvMassWindow();
+  */
+
+  // HERE FOR SEARCH FOR SIGNAL
   SetSignalInvMassCut();
   SetLargeInvMassCut();
   SetSideBandInvMassCut();
   SetSideBandInvMassWindow();
   return;
+}
+
+Bool_t AliAnalysisTaskSECharmFraction::SpecialSelD0(AliAODRecoDecayHF2Prong *d,Int_t &nusedforVtx){
+  
+  AliAODTrack *trk0 = (AliAODTrack*)d->GetDaughter(0);
+  AliAODTrack *trk1 = (AliAODTrack*)d->GetDaughter(1);
+  nusedforVtx=0;
+  if(trk0->GetUsedForPrimVtxFit())nusedforVtx++;
+  if(trk1->GetUsedForPrimVtxFit())nusedforVtx++;
+  if(nusedforVtx>fNtrMaxforVtx)return kFALSE;
+  
+  if(TMath::Abs(d->Getd0Prong(1)) < -99999.  || 
+     TMath::Abs(d->Getd0Prong(0)) < -99999.) return kFALSE;
+  
+  return kTRUE;
+}
+
+
+
+AliAODVertex* AliAnalysisTaskSECharmFraction::GetPrimaryVtxSkipped(AliAODEvent *aodev,AliAODRecoDecayHF2Prong *d){
+  //Calculate the primary vertex w/o the daughter tracks of the candidate
+  
+  AliESDVertex *vertexESD=0x0;
+  AliAODVertex *vertexAOD=0x0;
+  AliVertexerTracks *vertexer = new AliVertexerTracks(aodev->GetMagneticField());
+  
+  Int_t skipped[2];
+  Int_t nTrksToSkip=2;
+  AliAODTrack *dgTrack = (AliAODTrack*)d->GetDaughter(0);
+  skipped[0]=dgTrack->GetID();
+  dgTrack = (AliAODTrack*)d->GetDaughter(1);
+  skipped[1]=dgTrack->GetID();
+
+  //
+  vertexer->SetSkipTracks(nTrksToSkip,skipped);
+  vertexESD = (AliESDVertex*)vertexer->FindPrimaryVertex(aodev); 
+  vertexer->SetMinClusters(4);  
+  if(!vertexESD) return vertexAOD;
+  if(vertexESD->GetNContributors()<=0) { 
+    AliDebug(2,"vertexing failed"); 
+    delete vertexESD; vertexESD=NULL;
+    return vertexAOD;
   }
+  
+  delete vertexer; vertexer=NULL;
+  
+  
+  // convert to AliAODVertex
+  Double_t pos[3],cov[6],chi2perNDF;
+  vertexESD->GetXYZ(pos); // position
+  vertexESD->GetCovMatrix(cov); //covariance matrix
+  chi2perNDF = vertexESD->GetChi2toNDF();
+  delete vertexESD; vertexESD=NULL;
+  
+  vertexAOD = new AliAODVertex(pos,cov,chi2perNDF);
+  return vertexAOD;
+  
+}
+
+
+
+ Bool_t AliAnalysisTaskSECharmFraction::FillAziList(AliAODEvent *aod,Double_t azilist[30000],Int_t trkIDlist[30000],Int_t &nprim)const{
+   Int_t ntracks=aod->GetNumberOfTracks();
+   Double_t ptmin=1.;
+   if(ntracks>30000){
+     nprim=1;
+     return kFALSE;      
+   }
+   nprim=0;
+   for(Int_t it=0;it<ntracks;it++) {
+     AliAODTrack *track = aod->GetTrack(it);
+     
+     if(track->IsPrimaryCandidate()){
+       if(track->Pt()>ptmin){
+        
+        azilist[nprim]=track->Phi();
+        trkIDlist[nprim]=track->GetID();
+        nprim++;
+       }
+     }
+   }
+   return kTRUE;
+ }
+ void AliAnalysisTaskSECharmFraction::FillAziHistos(AliAODRecoDecayHF2Prong *d,TList *&list,Int_t ptbin,Double_t azilist[30000],Int_t trkIDlist[30000],Int_t nprim,Int_t okD0,Int_t okD0bar,Bool_t isPeakD0,Bool_t isPeakD0bar,Bool_t isSideBandD0,Bool_t isSideBandD0bar)const{
+   
+   if((!okD0)&&(!okD0bar))return;
+   if(ptbin==-1)return;
+   TString namehist=list->GetName(),str;
+   namehist.ReplaceAll("list","");
+   //   Double_t ptD=d->Pt();
+   str="hPhiHist";
+   if(isPeakD0||isPeakD0bar)str.Append("PM");
+   else if(isSideBandD0||isSideBandD0bar)str.Append("SB");
+   else return;
+   str.Append(namehist.Data());
+   str.Append("_pt");
+   str+=ptbin;
+   
+   AliAODTrack *dtr;
+   dtr=(AliAODTrack*)d->GetDaughter(0);
+   Int_t id1=dtr->GetID();
+   dtr=(AliAODTrack*)d->GetDaughter(1);
+   Int_t id2=dtr->GetID();
+   
+   Double_t phi=d->Phi();      
+   Double_t weight=1./nprim;
+   Double_t azi;
+   for(Int_t j=0;j<nprim;j++){
+     if(trkIDlist[j]!=id1&&trkIDlist[j]!=id2){
+       azi=azilist[j]-phi;
+       if(azi>TMath::Pi())azi-=2.*TMath::Pi();
+       else if(azi<-TMath::Pi())azi+=2.*TMath::Pi();
+       
+       ((TH1F*)list->FindObject(str.Data()))->Fill(azi,weight);
+     }
+   }
+   
+   
+ }
+
+
+
+
+
+
+
 
 
 void AliAnalysisTaskSECharmFraction::Terminate(const Option_t*){
   //TERMINATE METHOD: NOTHING TO DO
 
 
+
 }