ROOT logo
#ifndef ALIANALYSISTASKHJETEMBED_H
#define ALIANALYSISTASKHJETEMBED_H

#include <vector>

class TH2F;
class TH1F;
class TF1;
class TH3F;
class THnSparse;
class TClonesArray;
class TObject;
class TString;
class AliNamedString;
class AliAODEvent;
class AliESDEvent;
class AliMCEvent;
class AliRhoParameter;
class TRandom3;
class AliEmcalJet;
class AliVTrack;

template<class T> class TParameter;

#include "AliAnalysisTaskSE.h"

class AliAnalysisTaskHJetEmbed : public AliAnalysisTaskSE {
 public:
  AliAnalysisTaskHJetEmbed();
  AliAnalysisTaskHJetEmbed(const char *name);
  virtual ~AliAnalysisTaskHJetEmbed();

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

  void SetMaxVtxZ(Double_t z)                     { fMaxVtxZ=z;                     }
  void SetCollisionSystem(char *s)                { fCollisionSystem=s;             }
  void SetRunPeriod(char *p)                      { fPeriod=p;                      }
  void SetMCParticleArrName(char *s)              { fMCParticleArrName=s;           }
  void SetTrackArrName(char *s)                   { fTrackArrName=s;                }
  void SetTrkPtRange(Double_t min, Double_t max)  { fMinTrkPt=min; fMaxTrkPt=max;   }
  void SetTrkPhiRange(Double_t min, Double_t max) { fMinTrkPhi=min; fMaxTrkPhi=max; }
  void SetTrkEtaRange(Double_t min, Double_t max) { fMinTrkEta=min; fMaxTrkEta=max; }
  void SetTTtype(Int_t type)                      { fTTtype=type;                   }
  void SetRadius(Double_t rad)                    { fRadius=rad;                    }
  void SetPLJetArrName(char *s)                   { fPLJetArrName=s;                }
  void SetDLJetArrName(char *s)                   { fDLJetArrName=s;                }
  void SetJetArrName(char *s)                     { fJetArrName=s;                  }
  void SetRhoName(char *s)                        { fRhoName=s;                     }
  void SetRunQA(Bool_t run)                       { fRunQA=run;                     }
  void SetRunPL(Bool_t run)                       { fRunPL=run;                     }
  void SetRunDL(Bool_t run)                       { fRunDL=run;                     }
  void SetRunHJet(Bool_t run)                     { fRunHJet=run;                   }
  void SetRunMatch(Bool_t run)                    { fRunMatch=run;                  }
  void SetTTRanges(Double_t *min, Double_t *max)
  {
    for(Int_t i=0; i<kNTT; i++)
      {
	fMinTTPt[i] = min[i];
	fMaxTTPt[i] = max[i];
      }
  }



protected:
  void         RunQA();
  void         RunHJet(const Double_t minPt, const Double_t maxPt);
  void         RunMatch(const TClonesArray *tracks, const Int_t leadingIndex);
  void         FillHJetCor(const TClonesArray *tracks, const Int_t leadingIndex, const TClonesArray *jetArray, THnSparse *hTT, THnSparse *hn, Bool_t isBkg = kFALSE);
  Int_t        FindGeoMatchedJet(const AliEmcalJet* jet, const TClonesArray *jetArray, Double_t &dR);
  Int_t        FindEnergyMatchedJet(const AliEmcalJet* jet, const TClonesArray *jetArray, Double_t &dR, Double_t &fraction);
  Bool_t       AcceptTrack(const AliVParticle *track);
  Bool_t       IsGoodJet(const AliEmcalJet* jet);
  Double_t     GetZ(const Double_t trkPx, const Double_t trkPy, const Double_t trkPz, const Double_t jetPx, const Double_t jetPy, const Double_t jetPz);
  Double_t     GetDPhi(const Double_t phi1, const Double_t phi2);
  Double_t     CalculateDPhi(const Double_t phi1, const Double_t phi2);
  Double_t     GetJetDistance(const AliEmcalJet *jet1, const AliEmcalJet* jet2);

  enum { kNTrig = 3  };
  enum { kNTT = 4 };

 private:
  Int_t             fVerbosity;            //! Control output
  Int_t             fAnaType;              //  0-local; 1-grid
  TString           fPeriod;               //  Run period
  TString           fCollisionSystem;      //  Collision system
  AliVEvent         *fEvent;               //! Input event 
  Int_t             fTriggerType;          //! Trigger type of the event
  Double_t          fCentrality;           //! V0M for current event
  Double_t          fMaxVtxZ;              //  Maximum z of vertices
  TString           fMCParticleArrName;    //
  TClonesArray      *fMCParticleArray;     //!
  TString           fTrackArrName;         //  Name of the input track array
  TClonesArray      *fTrackArray;          //! Array of input tracks
  Int_t             fTriggerTrkIndex;      //! Index of the trigger track in the event 
  Double_t          fMinTrkPt;             //
  Double_t          fMaxTrkPt;             //
  Double_t          fMinTrkEta;            //
  Double_t          fMaxTrkEta;            //
  Double_t          fMinTrkPhi;            //
  Double_t          fMaxTrkPhi;            //
  Int_t             fTTtype;               //
  Double_t          fMinTTPt[kNTT];        //
  Double_t          fMaxTTPt[kNTT];        //
  Double_t          fRadius;               //  Jet radius
  TString           fJetArrName;           //  Name of the found jet array
  TString           fPLJetArrName;         //  Name of the embedded PYTHIA jet array on particle level
  TString           fDLJetArrName;         //  Name of the embedded PYTHIA jet array on detector level
  TClonesArray      *fJetArray;            //! Array of the found jets
  TClonesArray      *fPLJetArray;          //! Array of the embedded PYTHIA jet array on particle level
  TClonesArray      *fDLJetArray;          //! Array of the embedded PYTHIA jet array on detector level
  TString           fRhoName;              //  Name of the rho parameter
  AliRhoParameter   *fRho;                 //! Rho parameter
  Double_t          fRhoValue;             //! Value of the rho parameter
  AliNamedString    *fPtHardBinName;       //!Pt hard bin param
  Int_t             fPtHardBin;            //!        
  TRandom3          *fRandom;              //!

  Bool_t            fRunQA;                //  Flag to run QA
  Bool_t            fRunHJet;              //  Flag to run h+jet 
  Bool_t            fRunMatch;             //  Flag to run matching
  Bool_t            fRunPL;                //
  Bool_t            fRunDL;                //

  TList             *fOutputList;                //! Output list
  TH1F              *fhEventStat;                //!
  TH1F              *fhPtHardBins;               //!

  TH1F              *fhVtxZ[kNTrig];             //!
  TH1F              *fhCentrality[kNTrig];       //!
  TH2F              *fhRhoVsCent[kNTrig];        //!

  // QA histograms
  THnSparse         *fhPLJetPtVsCent[kNTrig];    //!
  THnSparse         *fhDLJetPtVsCent[kNTrig];    //!

  // HJet
  THnSparse         *fhPLTT[kNTrig];             //!
  THnSparse         *fhDLTT[kNTrig];             //!          
  THnSparse         *fhPLHJet[kNTrig];           //!
  THnSparse         *fhDLHJet[kNTrig];           //!
  THnSparse         *fhTTPtQA[kNTrig];           //!
  THnSparse         *fhTTPt[kNTrig];             //!
  THnSparse         *fhHJet[kNTrig];             //!


  // Matching
  THnSparse         *fhJetPtGeoMatch[kNTrig];    //!
  THnSparse         *fhJetPtEnMatch[kNTrig];     //!

  THnSparse         *fhJetPhiGeoMatch[kNTrig];   //!
  THnSparse         *fhJetPhiEnMatch[kNTrig];    //!

  AliAnalysisTaskHJetEmbed(const AliAnalysisTaskHJetEmbed&);            // not implemented
  AliAnalysisTaskHJetEmbed &operator=(const AliAnalysisTaskHJetEmbed&); // not implemented

  ClassDef(AliAnalysisTaskHJetEmbed, 3);
};

#endif


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