]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGHF/vertexingHF/AliAnalysisTaskCombinHF.h
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGHF / vertexingHF / AliAnalysisTaskCombinHF.h
index 30356af23af76d37350685feb40d0d7cd69e655d..11b57cef32557ca25c123bcb17b2fb20db8c546b 100644 (file)
@@ -15,6 +15,7 @@
 
 #include <TH1F.h>
 #include <TH3F.h>
+#include <TObjString.h>
 #include <THnSparse.h>
 #include "AliAnalysisTaskSE.h"
 #include "AliAODTrack.h"
@@ -38,17 +39,13 @@ public:
   
   void SetReadMC(Bool_t read){fReadMC=read;}
 
-  void SetEventMixingOn(){fDoEventMixing=kTRUE;}
-  void SetEventMixingOff(){fDoEventMixing=kFALSE;}
-  void SetMaxNumberOfEventsForMixing(Int_t maxn){fMaxNumberOfEventsForMixing=maxn;}
-  void SetMaxzVertDistForMix(Double_t dist){
-    fUsePoolsZ=kFALSE; 
-    fMaxzVertDistForMix=dist;
-  }
-  void SetMaxMultDiffForMix(Double_t maxd){
-    fUsePoolsM=kFALSE; 
-    fMaxMultDiffForMix=maxd;
+  void SetEventMixingWithCuts(Double_t maxDeltaVz, Double_t maxDeltaMult){
+    fDoEventMixing=2; fMaxzVertDistForMix=maxDeltaVz; fMaxMultDiffForMix=maxDeltaMult;
   }
+  void SetEventMixingWithPools(){fDoEventMixing=1;}
+  void SetEventMixingOff(){fDoEventMixing=0;}
+  void SetNumberOfEventsForMixing(Int_t minn){fNumberOfEventsForMixing=minn;}
+
   void ConfigureZVertPools(Int_t nPools, Double_t*  zVertLimits);
   void ConfigureMultiplicityPools(Int_t nPools, Double_t*  multLimits);
   void SelectPromptD(){fPromptFeeddown=kPrompt;}
@@ -87,7 +84,11 @@ public:
   void SetPtBinWidth(Double_t binw){fPtBinWidth=binw;}
   void SetEtaAccCut(Double_t etacut){fEtaAccCut=etacut;}
   void SetPtAccCut(Double_t ptcut){fPtAccCut=ptcut;}
-  
+  void SetMultiplicityRange(Double_t mmin=-0.5, Double_t mmax=199.5){
+    fMinMultiplicity=mmin;
+    fMaxMultiplicity=mmax;
+  }
+
   void SetPIDstrategy(Int_t strat){fPIDstrategy=strat;}
   void SetMaxPforIDPion(Double_t maxpIdPion){fmaxPforIDPion=maxpIdPion;}
   void SetMaxPforIDKaon(Double_t maxpIdKaon){fmaxPforIDKaon=maxpIdKaon;}
@@ -105,10 +106,14 @@ public:
   Bool_t FillHistos(Int_t pdgD,Int_t nProngs, AliAODRecoDecay* tmpRD, Double_t* px, Double_t* py, Double_t* pz, UInt_t *pdgdau, TClonesArray *arrayMC, Int_t* dgLabels);
   void FillLSHistos(Int_t pdgD,Int_t nProngs, AliAODRecoDecay* tmpRD, Double_t* px, Double_t* py, Double_t* pz, UInt_t *pdgdau, Int_t charge);
   void FillMEHistos(Int_t pdgD,Int_t nProngs, AliAODRecoDecay* tmpRD, Double_t* px, Double_t* py, Double_t* pz, UInt_t *pdgdau);
+  void FillMEHistosLS(Int_t pdgD,Int_t nProngs, AliAODRecoDecay* tmpRD, Double_t* px, Double_t* py, Double_t* pz, UInt_t *pdgdau, Int_t charge);
   void FillGenHistos(TClonesArray* arrayMC);
   Bool_t CheckAcceptance(TClonesArray* arrayMC, Int_t nProng, Int_t *labDau); 
-  Bool_t CanBeMixed(Double_t zv1, Double_t zv2, Double_t mult1, Double_t mult2); 
-
+  Int_t GetPoolIndex(Double_t zvert, Double_t mult);
+  void ResetPool(Int_t poolIndex);
+  void DoMixingWithPools(Int_t poolIndex);
+  void DoMixingWithCuts();
+  Bool_t CanBeMixed(Double_t zv1, Double_t zv2, Double_t mult1, Double_t mult2);
   enum EMesonSpecies {kDzero, kDplus, kDstar, kDs};
   enum EPrompFd {kNone,kPrompt,kFeeddown,kBoth};
   enum EPIDstrategy {knSigma, kBayesianMaxProb, kBayesianThres};
@@ -125,11 +130,11 @@ private:
   TH1F *fHistCheckOriginSel;  //!hist. of origin (c/b) of D meson
   TH1F *fHistCheckDecChan;    //!hist. of decay channel of D meson
   TH1F *fHistCheckDecChanAcc; //!hist. of decay channel of D meson in acc.
-  TH2F *fPtVsYGen;        //! hist. of Y vs. Pt generated (all D)
-  TH2F *fPtVsYGenLargeAcc; //! hist. of Y vs. Pt generated (|y|<0.9)
-  TH2F *fPtVsYGenLimAcc;  //! hist. of Y vs. Pt generated (|y|<0.5)
-  TH2F *fPtVsYGenAcc;     //! hist. of Y vs. Pt generated (D in acc)
-  TH2F *fPtVsYReco;       //! hist. of Y vs. Pt generated (Reco D)
+  TH3F *fPtVsYVsMultGen;        //! hist. of Y vs. Pt vs. Mult generated (all D)
+  TH3F *fPtVsYVsMultGenLargeAcc; //! hist. of Y vs. Pt vs. Mult generated (|y|<0.9)
+  TH3F *fPtVsYVsMultGenLimAcc;  //! hist. of Y vs. Pt vs. Mult generated (|y|<0.5)
+  TH3F *fPtVsYVsMultGenAcc;     //! hist. of Y vs. Pt vs. Mult generated (D in acc)
+  TH3F *fPtVsYVsMultReco;       //! hist. of Y vs. Pt vs. Mult generated (Reco D)
   TH3F *fMassVsPtVsY;     //! hist. of Y vs. Pt vs. Mass (all cand)
   TH3F *fMassVsPtVsYRot;   //! hist. of Y vs. Pt vs. Mass (rotations)
   TH3F *fMassVsPtVsYLSpp;  //! hist. of Y vs. Pt vs. Mass (like sign ++)
@@ -142,7 +147,10 @@ private:
   TH1F *fDeltaMass;        //! hist. mass difference after rotations
   THnSparse *fDeltaMassFullAnalysis; //! hist. mass difference after rotations with more details
   TH3F *fMassVsPtVsYME;   //! hist. of Y vs. Pt vs. Mass (mixedevents)
-  
+  TH3F *fMassVsPtVsYMELSpp;   //! hist. of Y vs. Pt vs. Mass (mixedevents)
+  TH3F *fMassVsPtVsYMELSmm;   //! hist. of Y vs. Pt vs. Mass (mixedevents)
+  TH2F* fEventsPerPool;   //! hist with number of events per pool  
+  TH2F* fMixingsPerPool;    //! hist with number of mixings per pool  
   UInt_t fFilterMask; // FilterMask
   AliESDtrackCuts* fTrackCutsAll; // track selection
   AliESDtrackCuts* fTrackCutsPion; // pion track selection
@@ -179,25 +187,26 @@ private:
   Double_t fBayesThresKaon;  // threshold for kaon identification via Bayesian PID
   Double_t fBayesThresPion;  // threshold for pion identification via Bayesian PID
 
-  Bool_t fDoEventMixing; // flag for event mixing
-  Int_t  fMaxNumberOfEventsForMixing; // maximum number of events to be used in event mixing
-  Double_t fMaxzVertDistForMix; // cut on zvertex distance for event mixing
-  Double_t fMaxMultDiffForMix; // cut on multiplicity difference for event mixing 
-  Bool_t fUsePoolsZ; // flag for using pools in z vertex
-  Bool_t fUsePoolsM; // flag for using pools in multiplicity
+  Int_t fDoEventMixing; // flag for event mixing
+  Int_t  fNumberOfEventsForMixing; // maximum number of events to be used in event mixing
+  Double_t fMaxzVertDistForMix; // cut on zvertex distance for event mixing with cuts
+  Double_t fMaxMultDiffForMix; // cut on multiplicity difference for event mixing with cuts
   Int_t fNzVertPools; // number of pools in z vertex for event mixing
   Int_t fNzVertPoolsLimSize; // number of pools in z vertex for event mixing +1
   Double_t* fzVertPoolLims; //[fNzVertPoolsLimSize] limits of the pools in zVertex
   Int_t fNMultPools; // number of pools in multiplicity for event mixing
   Int_t fNMultPoolsLimSize; // number of pools in multiplicity for event mixing +1
   Double_t* fMultPoolLims; //[fNMultPoolsLimSize] limits of the pools in multiplicity
-
-  TTree* fEventBuffer;    // structure for event mixing
+  Int_t  fNOfPools; // number of pools
+  TTree** fEventBuffer;   //! structure for event mixing
+  TObjString* fEventInfo;  // unique event Id for event mixing checks
   Double_t fVtxZ;         // zVertex
   Double_t fMultiplicity; // multiplicity
+  Double_t fMinMultiplicity;  // lower limit for multiplcities in MC histos
+  Double_t fMaxMultiplicity; // upper limit for multiplcities in MC histos
   TObjArray* fKaonTracks; // array of kaon-compatible tracks (TLorentzVectors)
   TObjArray* fPionTracks; // array of pion-compatible tracks (TLorentzVectors)  
-  ClassDef(AliAnalysisTaskCombinHF,7); // D0D+ task from AOD tracks
+  ClassDef(AliAnalysisTaskCombinHF,10); // D0D+ task from AOD tracks
 };
 
 #endif