ROOT logo
#ifndef ALIRSNMINIANALYSISTASK_H
#define ALIRSNMINIANALYSISTASK_H

//
// Analysis task for 'mini' sub-package
// Contains all definitions needed for running an analysis:
// -- global event cut
// -- a list of track cuts (any number)
// -- definitions of output histograms
// -- values to be computed.
//

#include <TString.h>
#include <TClonesArray.h>

#include "AliAnalysisTaskSE.h"

#include "AliRsnEvent.h"
#include "AliRsnMiniValue.h"
#include "AliRsnMiniOutput.h"

class TList;

class AliTriggerAnalysis;
class AliRsnMiniEvent;
class AliRsnCutSet;

class AliRsnMiniAnalysisTask : public AliAnalysisTaskSE {

public:

   AliRsnMiniAnalysisTask();
   AliRsnMiniAnalysisTask(const char *name, Bool_t isMC = kFALSE);
   AliRsnMiniAnalysisTask(const AliRsnMiniAnalysisTask &copy);
   AliRsnMiniAnalysisTask &operator=(const AliRsnMiniAnalysisTask &copy);
   virtual ~AliRsnMiniAnalysisTask();

   void                UseMC(Bool_t yn = kTRUE)           {fUseMC = yn;}
   void                UseESDTriggerMask(UInt_t trgMask)     {fTriggerMask = trgMask;}
   void                UseCentrality(const char *type)    {fUseCentrality = kTRUE; fCentralityType = type; fCentralityType.ToUpper();}
   void                SetUseCentralityPatch(Bool_t isAOD049) {fUseAOD049CentralityPatch = isAOD049;}
   void                SetUseCentralityPatchPbPb2011(Int_t centralityPatchPbPb2011) {fUseCentralityPatchPbPb2011 = centralityPatchPbPb2011;}
   void                UseMultiplicity(const char *type)  {fUseCentrality = kFALSE; fCentralityType = type; fCentralityType.ToUpper();}
   void                UseContinuousMix()                 {fContinuousMix = kTRUE;}
   void                UseBinnedMix()                     {fContinuousMix = kFALSE;}
   void                SetNMix(Int_t nmix)                {fNMix = nmix;}
   void                SetMaxDiffMult (Double_t val)      {fMaxDiffMult  = val;}
   void                SetMaxDiffVz   (Double_t val)      {fMaxDiffVz    = val;}
   void                SetMaxDiffAngle(Double_t val)      {fMaxDiffAngle = val;}
   void                SetEventCuts(AliRsnCutSet *cuts)   {fEventCuts    = cuts;}
   void                SetMixPrintRefresh(Int_t n)        {fMixPrintRefresh = n;}
   void                SetMaxNDaughters(Short_t n)        {fMaxNDaughters = n;}
   void                SetCheckMomentumConservation(Bool_t checkP) {fCheckP = checkP;}
   void                SetCheckFeedDown(Bool_t checkFeedDown)      {fCheckFeedDown = checkFeedDown;}
   void                SetDselection(UShort_t originDselection);
   void 	       SetRejectCandidateIfNotFromQuark(Bool_t opt){fRejectIfNoQuark=opt;}
   void                SetMotherAcceptanceCutMinPt(Float_t minPt)  {fMotherAcceptanceCutMinPt = minPt;}
   void                SetMotherAcceptanceCutMaxEta(Float_t maxEta){fMotherAcceptanceCutMaxEta = maxEta;}
   void                KeepMotherInAcceptance(Bool_t keepMotherInAcceptance) {fKeepMotherInAcceptance = keepMotherInAcceptance;}
   Int_t               AddTrackCuts(AliRsnCutSet *cuts);
   TClonesArray       *Outputs()                          {return &fHistograms;}
   TClonesArray       *Values()                           {return &fValues;}
   Short_t             GetMaxNDaughters()                 {return fMaxNDaughters;}
   void                SetEventQAHist(TString type,TH2F *histo);
   void                UseBigOutput(Bool_t b=kTRUE) { fBigOutput = b; }

   virtual void        UserCreateOutputObjects();
   virtual void        UserExec(Option_t *);
   virtual void        Terminate(Option_t *);
   virtual void        FinishTaskOutput();

   Int_t               ValueID(AliRsnMiniValue::EType type, Bool_t useMC = kFALSE);
   Int_t               CreateValue(AliRsnMiniValue::EType type, Bool_t useMC = kFALSE);
   AliRsnMiniOutput   *CreateOutput(const char *name, AliRsnMiniOutput::EOutputType type, AliRsnMiniOutput::EComputation src);
   AliRsnMiniOutput   *CreateOutput(const char *name, const char *outType, const char *compType);

private:

   Char_t   CheckCurrentEvent();
   void     FillMiniEvent(Char_t evType);
   Double_t ComputeAngle();
   Double_t ComputeCentrality(Bool_t isESD);
   Double_t ComputeMultiplicity(Bool_t isESD,TString type);
   Double_t ComputeTracklets();
   Double_t ApplyCentralityPatchAOD049();
   Double_t ApplyCentralityPatchPbPb2011();
   void     FillTrueMotherESD(AliRsnMiniEvent *event);
   void     FillTrueMotherAOD(AliRsnMiniEvent *event);
   void     StoreTrueMother(AliRsnMiniPair *pair, AliRsnMiniEvent *event);
   Bool_t   EventsMatch(AliRsnMiniEvent *event1, AliRsnMiniEvent *event2);

   Bool_t               fUseMC;           //  use or not MC info
   Int_t                fEvNum;           //! absolute event counter
   UInt_t               fTriggerMask;   //trigger mask
   Bool_t               fUseCentrality;   //  if true, use centrality for event, otherwise use multiplicity
   TString              fCentralityType;  //  definition used to choose what centrality or multiplicity to use
   Bool_t               fUseAOD049CentralityPatch; //flag to enable AOD049 centrality patch
   Int_t                fUseCentralityPatchPbPb2011; //for PbPb 2011 centrality flattening

   Bool_t               fContinuousMix;   //  mixing --> technique chosen (continuous or binned)
   Int_t                fNMix;            //  mixing --> required number of mixes
   Double_t             fMaxDiffMult;     //  mixing --> max difference in multiplicity
   Double_t             fMaxDiffVz;       //  mixing --> max difference in Vz of prim vert
   Double_t             fMaxDiffAngle;    //  mixing --> max difference in reaction plane angle

   TList               *fOutput;          //  output list
   TClonesArray         fHistograms;      //  list of histogram definitions
   TClonesArray         fValues;          //  list of values to be computed
   TH1F                *fHEventStat;      //  histogram of event statistics
   TH1F                *fHAEventsVsMulti; //  histogram of event statistics
   TH1F                *fHAEventsVsTracklets; //  histogram of event statistics
   TH2F                *fHAEventVz;       //  histogram of vertex-z vs. multiplicity/centrality
   TH2F                *fHAEventMultiCent;//  histogram of multiplicity vs. centrality
   TH2F                *fHAEventPlane;    //  histogram of event plane vs. multiplicity/centrality

   AliRsnCutSet        *fEventCuts;       //  cuts on events
   TObjArray            fTrackCuts;       //  list of single track cuts
   AliRsnEvent          fRsnEvent;        //! interface object to the event
   TTree               *fEvBuffer;        //! mini-event buffer
   AliTriggerAnalysis  *fTriggerAna;      //! trigger analysis
   AliESDtrackCuts     *fESDtrackCuts;    //! quality cut for ESD tracks
   AliRsnMiniEvent     *fMiniEvent;       //! mini-event cursor
   Bool_t               fBigOutput;       // flag if open file for output list
   Int_t                fMixPrintRefresh; // how often info in mixing part is printed
   Short_t              fMaxNDaughters;   // maximum number of allowed mother's daughter
   Bool_t               fCheckP;          // flag to set in order to check the momentum conservation for mothers
   
   Bool_t               fCheckFeedDown;      // flag to set in order to check the particle feed down (specific for D meson analysis)
   UShort_t 		fOriginDselection;   // flag to select D0 origins. 0 Only from charm 1 only from beauty 2 both from charm and beauty (specific for D meson analysis)
   Bool_t   		fKeepDfromB;  	     // flag for the feed down from b quark decay (specific for D meson analysis)			
   Bool_t   		fKeepDfromBOnly;     // flag to keep only the charm particles that comes from beauty decays (specific for D meson analysis)
   Bool_t 		fRejectIfNoQuark;    // flag to remove events not generated with PYTHIA
   Float_t              fMotherAcceptanceCutMinPt;              // cut value to apply when selecting the mothers inside a defined acceptance
   Float_t              fMotherAcceptanceCutMaxEta;             // cut value to apply when selecting the mothers inside a defined acceptance
   Bool_t               fKeepMotherInAcceptance;                // flag to keep also mothers in acceptance

   ClassDef(AliRsnMiniAnalysisTask, 11);   // AliRsnMiniAnalysisTask
};


#endif
 AliRsnMiniAnalysisTask.h:1
 AliRsnMiniAnalysisTask.h:2
 AliRsnMiniAnalysisTask.h:3
 AliRsnMiniAnalysisTask.h:4
 AliRsnMiniAnalysisTask.h:5
 AliRsnMiniAnalysisTask.h:6
 AliRsnMiniAnalysisTask.h:7
 AliRsnMiniAnalysisTask.h:8
 AliRsnMiniAnalysisTask.h:9
 AliRsnMiniAnalysisTask.h:10
 AliRsnMiniAnalysisTask.h:11
 AliRsnMiniAnalysisTask.h:12
 AliRsnMiniAnalysisTask.h:13
 AliRsnMiniAnalysisTask.h:14
 AliRsnMiniAnalysisTask.h:15
 AliRsnMiniAnalysisTask.h:16
 AliRsnMiniAnalysisTask.h:17
 AliRsnMiniAnalysisTask.h:18
 AliRsnMiniAnalysisTask.h:19
 AliRsnMiniAnalysisTask.h:20
 AliRsnMiniAnalysisTask.h:21
 AliRsnMiniAnalysisTask.h:22
 AliRsnMiniAnalysisTask.h:23
 AliRsnMiniAnalysisTask.h:24
 AliRsnMiniAnalysisTask.h:25
 AliRsnMiniAnalysisTask.h:26
 AliRsnMiniAnalysisTask.h:27
 AliRsnMiniAnalysisTask.h:28
 AliRsnMiniAnalysisTask.h:29
 AliRsnMiniAnalysisTask.h:30
 AliRsnMiniAnalysisTask.h:31
 AliRsnMiniAnalysisTask.h:32
 AliRsnMiniAnalysisTask.h:33
 AliRsnMiniAnalysisTask.h:34
 AliRsnMiniAnalysisTask.h:35
 AliRsnMiniAnalysisTask.h:36
 AliRsnMiniAnalysisTask.h:37
 AliRsnMiniAnalysisTask.h:38
 AliRsnMiniAnalysisTask.h:39
 AliRsnMiniAnalysisTask.h:40
 AliRsnMiniAnalysisTask.h:41
 AliRsnMiniAnalysisTask.h:42
 AliRsnMiniAnalysisTask.h:43
 AliRsnMiniAnalysisTask.h:44
 AliRsnMiniAnalysisTask.h:45
 AliRsnMiniAnalysisTask.h:46
 AliRsnMiniAnalysisTask.h:47
 AliRsnMiniAnalysisTask.h:48
 AliRsnMiniAnalysisTask.h:49
 AliRsnMiniAnalysisTask.h:50
 AliRsnMiniAnalysisTask.h:51
 AliRsnMiniAnalysisTask.h:52
 AliRsnMiniAnalysisTask.h:53
 AliRsnMiniAnalysisTask.h:54
 AliRsnMiniAnalysisTask.h:55
 AliRsnMiniAnalysisTask.h:56
 AliRsnMiniAnalysisTask.h:57
 AliRsnMiniAnalysisTask.h:58
 AliRsnMiniAnalysisTask.h:59
 AliRsnMiniAnalysisTask.h:60
 AliRsnMiniAnalysisTask.h:61
 AliRsnMiniAnalysisTask.h:62
 AliRsnMiniAnalysisTask.h:63
 AliRsnMiniAnalysisTask.h:64
 AliRsnMiniAnalysisTask.h:65
 AliRsnMiniAnalysisTask.h:66
 AliRsnMiniAnalysisTask.h:67
 AliRsnMiniAnalysisTask.h:68
 AliRsnMiniAnalysisTask.h:69
 AliRsnMiniAnalysisTask.h:70
 AliRsnMiniAnalysisTask.h:71
 AliRsnMiniAnalysisTask.h:72
 AliRsnMiniAnalysisTask.h:73
 AliRsnMiniAnalysisTask.h:74
 AliRsnMiniAnalysisTask.h:75
 AliRsnMiniAnalysisTask.h:76
 AliRsnMiniAnalysisTask.h:77
 AliRsnMiniAnalysisTask.h:78
 AliRsnMiniAnalysisTask.h:79
 AliRsnMiniAnalysisTask.h:80
 AliRsnMiniAnalysisTask.h:81
 AliRsnMiniAnalysisTask.h:82
 AliRsnMiniAnalysisTask.h:83
 AliRsnMiniAnalysisTask.h:84
 AliRsnMiniAnalysisTask.h:85
 AliRsnMiniAnalysisTask.h:86
 AliRsnMiniAnalysisTask.h:87
 AliRsnMiniAnalysisTask.h:88
 AliRsnMiniAnalysisTask.h:89
 AliRsnMiniAnalysisTask.h:90
 AliRsnMiniAnalysisTask.h:91
 AliRsnMiniAnalysisTask.h:92
 AliRsnMiniAnalysisTask.h:93
 AliRsnMiniAnalysisTask.h:94
 AliRsnMiniAnalysisTask.h:95
 AliRsnMiniAnalysisTask.h:96
 AliRsnMiniAnalysisTask.h:97
 AliRsnMiniAnalysisTask.h:98
 AliRsnMiniAnalysisTask.h:99
 AliRsnMiniAnalysisTask.h:100
 AliRsnMiniAnalysisTask.h:101
 AliRsnMiniAnalysisTask.h:102
 AliRsnMiniAnalysisTask.h:103
 AliRsnMiniAnalysisTask.h:104
 AliRsnMiniAnalysisTask.h:105
 AliRsnMiniAnalysisTask.h:106
 AliRsnMiniAnalysisTask.h:107
 AliRsnMiniAnalysisTask.h:108
 AliRsnMiniAnalysisTask.h:109
 AliRsnMiniAnalysisTask.h:110
 AliRsnMiniAnalysisTask.h:111
 AliRsnMiniAnalysisTask.h:112
 AliRsnMiniAnalysisTask.h:113
 AliRsnMiniAnalysisTask.h:114
 AliRsnMiniAnalysisTask.h:115
 AliRsnMiniAnalysisTask.h:116
 AliRsnMiniAnalysisTask.h:117
 AliRsnMiniAnalysisTask.h:118
 AliRsnMiniAnalysisTask.h:119
 AliRsnMiniAnalysisTask.h:120
 AliRsnMiniAnalysisTask.h:121
 AliRsnMiniAnalysisTask.h:122
 AliRsnMiniAnalysisTask.h:123
 AliRsnMiniAnalysisTask.h:124
 AliRsnMiniAnalysisTask.h:125
 AliRsnMiniAnalysisTask.h:126
 AliRsnMiniAnalysisTask.h:127
 AliRsnMiniAnalysisTask.h:128
 AliRsnMiniAnalysisTask.h:129
 AliRsnMiniAnalysisTask.h:130
 AliRsnMiniAnalysisTask.h:131
 AliRsnMiniAnalysisTask.h:132
 AliRsnMiniAnalysisTask.h:133
 AliRsnMiniAnalysisTask.h:134
 AliRsnMiniAnalysisTask.h:135
 AliRsnMiniAnalysisTask.h:136
 AliRsnMiniAnalysisTask.h:137
 AliRsnMiniAnalysisTask.h:138
 AliRsnMiniAnalysisTask.h:139
 AliRsnMiniAnalysisTask.h:140
 AliRsnMiniAnalysisTask.h:141