]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGHF/vertexingHF/AliAnalysisTaskCombinHF.h
Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[u/mrichter/AliRoot.git] / PWGHF / vertexingHF / AliAnalysisTaskCombinHF.h
1 #ifndef ALIANALYSISTASKCOMBINHF_H
2 #define ALIANALYSISTASKCOMBINHF_H
3
4 /* Copyright(c) 1998-2018, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               */
6
7 /* $Id: $ */ 
8
9 //*************************************************************************
10 // Class AliAnalysisTaskCombinHF
11 // AliAnalysisTaskSE to build D meson candidates by combining tracks
12 //  background is computed LS and track rotations is
13 // Authors: F. Prino, A. Rossi
14 /////////////////////////////////////////////////////////////
15
16 #include <TH1F.h>
17 #include <TH3F.h>
18 #include <THnSparse.h>
19 #include "AliAnalysisTaskSE.h"
20 #include "AliAODTrack.h"
21 #include "AliNormalizationCounter.h"
22 #include "AliRDHFCuts.h"
23
24 class AliAnalysisTaskCombinHF : public AliAnalysisTaskSE
25 {
26  public:
27
28   AliAnalysisTaskCombinHF();
29   AliAnalysisTaskCombinHF(Int_t meson, AliRDHFCuts* analysiscuts);
30   virtual ~AliAnalysisTaskCombinHF();
31
32   virtual void UserCreateOutputObjects();
33   virtual void Init(){};
34   virtual void LocalInit() {Init();}
35   virtual void UserExec(Option_t *option);
36   virtual void Terminate(Option_t *option);
37
38   void SetReadMC(Bool_t read){fReadMC=read;}
39   void SetTrackCuts(AliESDtrackCuts* cuts){
40     if(fTrackCutsAll) delete fTrackCutsAll;
41     fTrackCutsAll=new AliESDtrackCuts(*cuts);
42   }
43   void SetPionTrackCuts(AliESDtrackCuts* cuts){
44     if(fTrackCutsPion) delete fTrackCutsPion;
45     fTrackCutsPion=new AliESDtrackCuts(*cuts);
46   }
47   void SetKaonTrackCuts(AliESDtrackCuts* cuts){
48     if(fTrackCutsKaon) delete fTrackCutsKaon;
49     fTrackCutsKaon=new AliESDtrackCuts(*cuts);
50   }
51   void SetPIDHF(AliAODPidHF* pid){
52     if(fPidHF) delete fPidHF;
53     fPidHF=new AliAODPidHF(*pid);
54   }
55   void SetRDHFCuts(AliRDHFCuts* cuts){
56     fAnalysisCuts=cuts;
57   }
58   void SetFilterMask(UInt_t mask=16){fFilterMask=mask;} 
59   void SetAnalysisLevel(Int_t level){fFullAnalysis=level;}
60   void ConfigureRotation(Int_t n, Double_t phimin, Double_t phimax){
61     fNRotations=n;
62     fMinAngleForRot=phimin;
63     fMaxAngleForRot=phimax;
64   }
65   Bool_t IsTrackSelected(AliAODTrack* track);
66   Bool_t IsKaon(AliAODTrack* track);
67   Bool_t IsPion(AliAODTrack* track);
68   Bool_t SelectAODTrack(AliAODTrack *track, AliESDtrackCuts *cuts);
69   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);
70   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);
71
72   enum EMesonSpecies {kDzero, kDplus, kDstar, kDs};
73
74  private:
75
76   AliAnalysisTaskCombinHF(const AliAnalysisTaskCombinHF &source);
77   AliAnalysisTaskCombinHF& operator=(const AliAnalysisTaskCombinHF& source); 
78
79   TList   *fOutput; //! list send on output slot 0
80   TH1F *fHistNEvents; //!hist. for No. of events
81
82   TH1F *fHistTrackStatus; //!hist. of status of tracks
83   TH3F *fMassVsPtVsY;   //! hist. of Y vs. Pt vs. Mass (all cand)
84   TH3F *fMassVsPtVsYRot;   //! hist. of Y vs. Pt vs. Mass (rotations)
85   TH3F *fMassVsPtVsYLSpp;  //! hist. of Y vs. Pt vs. Mass (like sign ++)
86   TH3F *fMassVsPtVsYLSmm;  //! hist. of Y vs. Pt vs. Mass (like sign --)
87   TH3F *fMassVsPtVsYSig;   //! hist. of Y vs. Pt vs. Mass (signal)
88   TH3F *fMassVsPtVsYRefl;  //! hist. of Y vs. Pt vs. Mass (reflections)
89   TH3F *fMassVsPtVsYBkg;   //! hist. of Y vs. Pt vs. Mass (background)
90   TH1F *fNSelected;        //! hist. of n. of selected D+
91   TH1F *fNormRotated;      //! hist. rotated/selected D+
92   TH1F *fDeltaMass;        //! hist. mass difference after rotations
93   THnSparse *fDeltaMassFullAnalysis; //! hist. mass difference after rotations with more details
94
95   UInt_t fFilterMask; // FilterMask
96   AliESDtrackCuts* fTrackCutsAll; // track selection
97   AliESDtrackCuts* fTrackCutsPion; // pion track selection
98   AliESDtrackCuts* fTrackCutsKaon; // kaon track selection
99   AliAODPidHF* fPidHF; // PID configuration
100   AliRDHFCuts *fAnalysisCuts; // Cuts for candidates
101   Double_t fMinMass; // minimum value of invariant mass
102   Double_t fMaxMass; // maximum value of invariant mass
103
104   Int_t fNRotations; // number of rotations
105   Double_t fMinAngleForRot; // minimum angle for track rotation
106   Double_t fMaxAngleForRot; // maximum angle for track rotation
107   Double_t fMinAngleForRot3; // minimum angle for track rotation (3rd prong)
108   Double_t fMaxAngleForRot3; // maximum angle for track rotation (3rd prong)
109
110   AliNormalizationCounter *fCounter;//!Counter for normalization
111   Int_t fMeson;          // mesonSpecies (see enum)
112   Bool_t  fReadMC;                    //  flag for access to MC
113   Int_t fFullAnalysis; // flag to set analysis level (0 is the fastest)
114
115   ClassDef(AliAnalysisTaskCombinHF,1); // D+ task from AOD tracks
116 };
117
118 #endif