ROOT logo
#ifndef ALIANALYSISTASKEMCALDIJETBASE_H
#define ALIANALYSISTASKEMCALDIJETBASE_H

class TH1;
class TH2;
class TH3;
class TH3F;
class THnSparse;
class TClonesArray;
class TArrayI;
class AliAnalysisManager;
class AliJetContainer;

#include "AliAnalysisTaskEmcalJet.h"

class AliAnalysisTaskEmcalDiJetBase : public AliAnalysisTaskEmcalJet {
 public:
  enum JetFullChargedMatchingType {
    kFraction   = 0,     // match full and charged jets with largest shared charged pt fraction
    kGeo        = 1,     // match full and charged jets geometrically
    kNoMatching = 3      // include autocorrelation in dijet correlation
  };

  enum JetCorrelationType {
    kCorrelateAll = 0,   // correlate all jets with all jets in event
    kCorrelateTwo = 1,   // correlate all jets with leading jet in opposite hemisphere
    kCorrelateLS  = 2    // correlate leading and subleading jet
  };

  AliAnalysisTaskEmcalDiJetBase();
  AliAnalysisTaskEmcalDiJetBase(const char *name);
  virtual ~AliAnalysisTaskEmcalDiJetBase();

  void                        UserCreateOutputObjects();
  void                        Terminate(Option_t *option);

  Bool_t                      SelectEvent();              //decides if event is used for analysis

  //Setters
  void SetDebug(Int_t d)                                        { fDebug = d;}

  void SetJetCorrelationType(JetCorrelationType c)              { fJetCorrelationType = c; }

  void SetFullChargedMatchingType(JetFullChargedMatchingType m) { fJetFullChargedMatchingType = m; }

  void SetTriggerClass(const char *n)       { fTriggerClass = n; }

  void SetContainerFull(Int_t c)            { fContainerFull      = c;}
  void SetContainerCharged(Int_t c)         { fContainerCharged   = c;}
  void SetContainerFullMC(Int_t c)          { fContainerFullMC    = c;}
  void SetContainerChargedMC(Int_t c)       { fContainerChargedMC = c;} 

  void SetRhoType(Int_t i)                  { fRhoType = i;}

  void SetDoChargedCharged(Bool_t b)        { fDoChargedCharged = b;}
  void SetDoFullCharged(Bool_t b)           { fDoFullCharged    = b;}
  void SetDoFullFull(Bool_t b)              { fDoFullFull       = b;}

  void SetPtMinTriggerJet(Double_t ptmin)   { fPtMinTriggerJet  = ptmin;}
  void SetDoPtBias(Bool_t b)                { fDoPtBias         = b;}

  void SetMinSharedFraction(Double_t f)     { fMinFractionShared = f;}

  void ResetMatchFlag()                     { fMatchingDone = kFALSE; }

  //Getters
  Double_t GetDeltaPhi(const AliEmcalJet* jet1, const AliEmcalJet* jet2);
  Double_t GetDeltaPhi(Double_t phi1,Double_t phi2);
  Double_t GetDeltaR(const AliEmcalJet* jet1, const AliEmcalJet* jet2) const;

  Double_t GetZ(const AliVParticle *trk, const AliEmcalJet *jet)       const;
  Double_t GetZ(Double_t trkPx, Double_t trkPy, Double_t trkPz, Double_t jetPx, Double_t jetPy, Double_t jetPz) const;

  AliEmcalJet* GetLeadingJetOppositeHemisphere(Int_t type, Int_t typea, const AliEmcalJet *jetTrig);
  AliEmcalJet* GetSecondLeadingJetOppositeHemisphere(Int_t type, Int_t typea, const AliEmcalJet *jetTrig);

 protected:
  virtual Bool_t                      RetrieveEventObjects();

  Bool_t                      IsSameJet(Int_t jt, Int_t ja, Int_t type, Bool_t isMC = kFALSE);
  Double_t                    GetJetPt(const AliEmcalJet *jet, Int_t type);

  void                        MatchJetsGeo(Int_t cFull, Int_t cCharged,
					   Int_t iDebug = 0, Float_t maxDist = 0.3, Int_t type = 0);
  Double_t                    GetFractionSharedPt(const AliEmcalJet *jetFull, const AliEmcalJet *jetCharged) const;

  void                        SetChargedFractionIndex();
  void                        SetChargedFractionIndexMC();

  Bool_t                     fDebug;                      // debug level
  JetCorrelationType         fJetCorrelationType;         // type of correlation between jets
  JetFullChargedMatchingType fJetFullChargedMatchingType; //matching type between full and charged jets to be used
  TString                    fTriggerClass;               // trigger class to analyze EJ1 or EJ2    

  Int_t             fContainerCharged;          //  number of container with charged jets DET
  Int_t             fContainerFull;             //  number of container with full jets DET
  Int_t             fContainerChargedMC;        //  number of container with charged jets MC
  Int_t             fContainerFullMC;           //  number of container with full jets MC

  Int_t             fRhoType;                   //  rho type
  Double_t          fRhoChVal;                  //  charged rho value
  Double_t          fRhoFullVal;                // scaled charged rho value

  Bool_t            fDoChargedCharged;          //  do charged-charged ana
  Bool_t            fDoFullCharged;             //  do full-charged ana
  Bool_t            fDoFullFull;                //  do full-full ana

  Double_t          fPtMinTriggerJet;           //  minimum pT of trigger jet
  Bool_t            fDoPtBias;                  //  pT trigger jet > pT assoc jet
  Double_t          fMinFractionShared;         //  minimum fraction charged pT

  Bool_t            fMatchingDone;              // flag to indicate if matching is done or not
  TArrayI           faFullFracIndex;            // index of charged jet with largest shared charged fraction - detector level
  TArrayI           faFullFracIndexMC;          // index of charged jet with largest shared charged fraction - particle level

  TH1F             *fhNEvents;                  //! Histo number of events
  TH1              *fHistTrialsSelEvents;       //!trials from pyxsec.root only for selected events

 private:
  AliAnalysisTaskEmcalDiJetBase(const AliAnalysisTaskEmcalDiJetBase&);            // not implemented
  AliAnalysisTaskEmcalDiJetBase &operator=(const AliAnalysisTaskEmcalDiJetBase&); // not implemented

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