ROOT logo
#ifndef ALIANALYSISTASKEMCALJETMASSSTRUCTURE_H
#define ALIANALYSISTASKEMCALJETMASSSTRUCTURE_H

class TH1;
class TH2;
class TH3;
class TProfile2D;
class THnSparse;
class TClonesArray;
class TArrayI;
class TRandom3;

class AliAnalysisManager;
class AliJetContainer;
class AliEmcalJet;
class AliEmcalJetByJetCorrection;

#include "AliAnalysisTaskEmcalJet.h"

class AliAnalysisTaskEmcalJetMassStructure : public AliAnalysisTaskEmcalJet {
 public:
  enum JetMassType {
    kRaw   = 0,  //mass form anti-kt 4-vector
    kDeriv = 1   //area based subtracted jet mass
  };

  enum JetByJetCorrType {
    kNoCorr  = 0,
    kAnnulus = 1, //reproduce existing particles (over-corrects)
    kMeanPtR = 2
  };

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

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

  //Setters
  void SetJetContainerBase(Int_t c)                             { fContainerBase     = c   ; }
  void SetMinFractionShared(Double_t f)                         { fMinFractionShared = f   ; }
  void SetJetMassType(JetMassType t)                            { fJetMassType       = t   ; }
  void SetFixedTrackEfficiency(Double_t eff)                    { fEfficiencyFixed   = eff ; }
  void SetJetByJetCorrType(JetByJetCorrType t)                  { fCorrType          = t   ; }
  void SetJetByJetCorrObject(AliEmcalJetByJetCorrection *a)     { fEJetByJetCorr     = a   ; }

  //Getters
  AliEmcalJetByJetCorrection *GetJetByJetCorrObject() const     { return fEJetByJetCorr    ; }

 protected:
  Bool_t                              RetrieveEventObjects();
  Bool_t                              Run();
  Bool_t                              FillHistograms();

  Bool_t                              GetSortedArray(Int_t indexes[], Float_t dr[], AliEmcalJet *jet) const;
  Double_t                            GetJetMass(AliEmcalJet *jet);
  Double_t                            GetEfficiency(Double_t pt);
 
  Int_t                               fContainerBase;              // jets to be analyzed
  Double_t                            fMinFractionShared;          // only fill histos for jets if shared fraction larger than X
  JetMassType                         fJetMassType;                // jet mass type to be used

  TRandom3                           *fRandom;                     //! random number generator
  Double_t                            fEfficiencyFixed;            // fixed efficiency for all pT and all types of tracks

  JetByJetCorrType                    fCorrType;                   // jet-by-jet correction method
  AliEmcalJetByJetCorrection         *fEJetByJetCorr;              // object to do jet-by-jet correction
 
  TH3F                              **fh3PtDRMass;                 //! jet pT vs dr(jet axis, constituent) vs cumulative mass density
  TH3F                              **fh3PtDRRho;                  //! jet pT vs dr(jet axis, constituent) vs cumulative pt density
  TH3F                              **fh3PtDRMassCorr;             //! jet pT vs dr(jet axis, constituent) vs cumulative mass density corrected
  TH3F                              **fh3PtDRRhoCorr;              //! jet pT vs dr(jet axis, constituent) vs cumulative pt density corrected
  TH2F                              **fh2PtMass;                   //! jet pT vs mass
  TH2F                              **fh2PtMassCorr;               //! jet pT vs mass corrected
  THnSparse                          *fhnMassResponse;             //! response matrix
  THnSparse                          *fhnMassResponseCorr;         //! response matrix corrected

  TH3F                              **fh3JetPtDRTrackPt;           //! jet pt vs dr(jet axis, constituent) vs pT,track

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

  ClassDef(AliAnalysisTaskEmcalJetMassStructure, 1)
};
#endif

 AliAnalysisTaskEmcalJetMassStructure.h:1
 AliAnalysisTaskEmcalJetMassStructure.h:2
 AliAnalysisTaskEmcalJetMassStructure.h:3
 AliAnalysisTaskEmcalJetMassStructure.h:4
 AliAnalysisTaskEmcalJetMassStructure.h:5
 AliAnalysisTaskEmcalJetMassStructure.h:6
 AliAnalysisTaskEmcalJetMassStructure.h:7
 AliAnalysisTaskEmcalJetMassStructure.h:8
 AliAnalysisTaskEmcalJetMassStructure.h:9
 AliAnalysisTaskEmcalJetMassStructure.h:10
 AliAnalysisTaskEmcalJetMassStructure.h:11
 AliAnalysisTaskEmcalJetMassStructure.h:12
 AliAnalysisTaskEmcalJetMassStructure.h:13
 AliAnalysisTaskEmcalJetMassStructure.h:14
 AliAnalysisTaskEmcalJetMassStructure.h:15
 AliAnalysisTaskEmcalJetMassStructure.h:16
 AliAnalysisTaskEmcalJetMassStructure.h:17
 AliAnalysisTaskEmcalJetMassStructure.h:18
 AliAnalysisTaskEmcalJetMassStructure.h:19
 AliAnalysisTaskEmcalJetMassStructure.h:20
 AliAnalysisTaskEmcalJetMassStructure.h:21
 AliAnalysisTaskEmcalJetMassStructure.h:22
 AliAnalysisTaskEmcalJetMassStructure.h:23
 AliAnalysisTaskEmcalJetMassStructure.h:24
 AliAnalysisTaskEmcalJetMassStructure.h:25
 AliAnalysisTaskEmcalJetMassStructure.h:26
 AliAnalysisTaskEmcalJetMassStructure.h:27
 AliAnalysisTaskEmcalJetMassStructure.h:28
 AliAnalysisTaskEmcalJetMassStructure.h:29
 AliAnalysisTaskEmcalJetMassStructure.h:30
 AliAnalysisTaskEmcalJetMassStructure.h:31
 AliAnalysisTaskEmcalJetMassStructure.h:32
 AliAnalysisTaskEmcalJetMassStructure.h:33
 AliAnalysisTaskEmcalJetMassStructure.h:34
 AliAnalysisTaskEmcalJetMassStructure.h:35
 AliAnalysisTaskEmcalJetMassStructure.h:36
 AliAnalysisTaskEmcalJetMassStructure.h:37
 AliAnalysisTaskEmcalJetMassStructure.h:38
 AliAnalysisTaskEmcalJetMassStructure.h:39
 AliAnalysisTaskEmcalJetMassStructure.h:40
 AliAnalysisTaskEmcalJetMassStructure.h:41
 AliAnalysisTaskEmcalJetMassStructure.h:42
 AliAnalysisTaskEmcalJetMassStructure.h:43
 AliAnalysisTaskEmcalJetMassStructure.h:44
 AliAnalysisTaskEmcalJetMassStructure.h:45
 AliAnalysisTaskEmcalJetMassStructure.h:46
 AliAnalysisTaskEmcalJetMassStructure.h:47
 AliAnalysisTaskEmcalJetMassStructure.h:48
 AliAnalysisTaskEmcalJetMassStructure.h:49
 AliAnalysisTaskEmcalJetMassStructure.h:50
 AliAnalysisTaskEmcalJetMassStructure.h:51
 AliAnalysisTaskEmcalJetMassStructure.h:52
 AliAnalysisTaskEmcalJetMassStructure.h:53
 AliAnalysisTaskEmcalJetMassStructure.h:54
 AliAnalysisTaskEmcalJetMassStructure.h:55
 AliAnalysisTaskEmcalJetMassStructure.h:56
 AliAnalysisTaskEmcalJetMassStructure.h:57
 AliAnalysisTaskEmcalJetMassStructure.h:58
 AliAnalysisTaskEmcalJetMassStructure.h:59
 AliAnalysisTaskEmcalJetMassStructure.h:60
 AliAnalysisTaskEmcalJetMassStructure.h:61
 AliAnalysisTaskEmcalJetMassStructure.h:62
 AliAnalysisTaskEmcalJetMassStructure.h:63
 AliAnalysisTaskEmcalJetMassStructure.h:64
 AliAnalysisTaskEmcalJetMassStructure.h:65
 AliAnalysisTaskEmcalJetMassStructure.h:66
 AliAnalysisTaskEmcalJetMassStructure.h:67
 AliAnalysisTaskEmcalJetMassStructure.h:68
 AliAnalysisTaskEmcalJetMassStructure.h:69
 AliAnalysisTaskEmcalJetMassStructure.h:70
 AliAnalysisTaskEmcalJetMassStructure.h:71
 AliAnalysisTaskEmcalJetMassStructure.h:72
 AliAnalysisTaskEmcalJetMassStructure.h:73
 AliAnalysisTaskEmcalJetMassStructure.h:74
 AliAnalysisTaskEmcalJetMassStructure.h:75
 AliAnalysisTaskEmcalJetMassStructure.h:76
 AliAnalysisTaskEmcalJetMassStructure.h:77
 AliAnalysisTaskEmcalJetMassStructure.h:78
 AliAnalysisTaskEmcalJetMassStructure.h:79
 AliAnalysisTaskEmcalJetMassStructure.h:80
 AliAnalysisTaskEmcalJetMassStructure.h:81
 AliAnalysisTaskEmcalJetMassStructure.h:82
 AliAnalysisTaskEmcalJetMassStructure.h:83
 AliAnalysisTaskEmcalJetMassStructure.h:84
 AliAnalysisTaskEmcalJetMassStructure.h:85
 AliAnalysisTaskEmcalJetMassStructure.h:86
 AliAnalysisTaskEmcalJetMassStructure.h:87
 AliAnalysisTaskEmcalJetMassStructure.h:88