ROOT logo
#ifndef ALIJETRESPONSEMAKER_H
#define ALIJETRESPONSEMAKER_H

// $Id$

class TClonesArray;
class TH2;
class THnSparse;
class AliNamedArrayI;

#include "AliEmcalJet.h"
#include "AliAnalysisTaskEmcalJet.h"

class AliJetResponseMaker : public AliAnalysisTaskEmcalJet {
 public:
  AliJetResponseMaker();
  AliJetResponseMaker(const char *name);
  virtual ~AliJetResponseMaker();

  enum MatchingType{
    kNoMatching = 0,
    kGeometrical = 1,
    kMCLabel = 2,
    kSameCollections = 3
  };

  void                        UserCreateOutputObjects();

  void                        SetMatching(MatchingType t, Double_t p1=1, Double_t p2=1)       { fMatching = t; fMatchingPar1 = p1; fMatchingPar2 = p2; }
  void                        SetPtHardBin(Int_t b)                                           { fSelectPtHardBin   = b         ; }
  void                        SetUseCellsToMatch(Bool_t i)                                    { fUseCellsToMatch   = i         ; }
  void                        SetMinJetMCPt(Float_t pt)                                       { fMinJetMCPt        = pt        ; }
  void                        SetHistoType(Int_t b)                                           { fHistoType         = b         ; }
  void                        SetDeltaPtAxis(Int_t b)                                         { fDeltaPtAxis       = b         ; }
  void                        SetDeltaEtaDeltaPhiAxis(Int_t b)                                { fDeltaEtaDeltaPhiAxis= b       ; }
  void                        SetNEFAxis(Int_t b)                                             { fNEFAxis           = b         ; }
  void                        SetZAxis(Int_t b)                                               { fZAxis             = b         ; }

 protected:
  void                        ExecOnce();
  void                        DoJetLoop();
  Bool_t                      FillHistograms();
  Bool_t                      Run();
  Bool_t                      DoJetMatching();
  void                        SetMatchingLevel(AliEmcalJet *jet1, AliEmcalJet *jet2, MatchingType matching);
  void                        GetGeometricalMatchingLevel(AliEmcalJet *jet1, AliEmcalJet *jet2, Double_t &d) const;
  void                        GetMCLabelMatchingLevel(AliEmcalJet *jet1, AliEmcalJet *jet2, Double_t &d1, Double_t &d2) const;
  void                        GetSameCollectionsMatchingLevel(AliEmcalJet *jet1, AliEmcalJet *jet2, Double_t &d1, Double_t &d2) const;
  void                        FillMatchingHistos(Double_t Pt1, Double_t Pt2, Double_t Eta1, Double_t Eta2, Double_t Phi1, Double_t Phi2, 
					     Double_t A1, Double_t A2, Double_t d, Double_t CE1, Double_t CE2, Double_t CorrPt1, Double_t CorrPt2, 
					     Double_t MCPt1, Double_t NEF1, Double_t NEF2, Double_t LeadingPt1, Double_t LeadingPt2);
  void                        FillJetHisto(Double_t Phi, Double_t Eta, Double_t Pt, Double_t A, Double_t NEF, Double_t LeadingPt, Double_t CorrPt, Double_t MCPt, Int_t Set);
  void                        AllocateTH2();
  void                        AllocateTHnSparse();

  MatchingType                fMatching;                               // matching type
  Double_t                    fMatchingPar1;                           // matching parameter for jet1-jet2 matching
  Double_t                    fMatchingPar2;                           // matching parameter for jet2-jet1 matching
  Bool_t                      fUseCellsToMatch;                        // use cells instead of clusters to match jets (slower but sometimes needed)
  Double_t                    fMinJetMCPt;                             // minimum jet MC pt
  Int_t                       fHistoType;                              // histogram type (0=TH2, 1=THnSparse)
  Int_t                       fDeltaPtAxis;                            // add delta pt axis in THnSparse (default=0)
  Int_t                       fDeltaEtaDeltaPhiAxis;                   // add delta eta and delta phi axes in THnSparse (default=0)
  Int_t                       fNEFAxis;                                // add NEF axis in matching THnSparse (default=0)
  Int_t                       fZAxis;                                  // add Z axis in matching THnSparse (default=0)

  Bool_t                      fIsJet1Rho;                              //!whether the jet1 collection has to be average subtracted
  Bool_t                      fIsJet2Rho;                              //!whether the jet2 collection has to be average subtracted

  TH2                        *fHistRejectionReason1;                   //!Rejection reason vs. jet pt
  TH2                        *fHistRejectionReason2;                   //!Rejection reason vs. jet pt

  // THnSparse
  THnSparse                  *fHistJets1;                              //!jet1 THnSparse
  THnSparse                  *fHistJets2;                              //!jet2 THnSparse
  THnSparse                  *fHistMatching;                           //!matching THnSparse

  // Jets 1
  TH2                        *fHistJets1PhiEta;                        //!phi-eta distribution of jets 1
  TH2                        *fHistJets1PtArea;                        //!inclusive jet pt vs. area histogram 1
  TH2                        *fHistJets1CorrPtArea;                    //!inclusive jet pt vs. area histogram 1
  TH2                        *fHistJets1NEFvsPt;                       //!Jet neutral energy fraction vs. jet pt 1
  TH2                        *fHistJets1CEFvsCEFPt;                    //!Jet charged energy fraction vs. charged jet pt 1
  TH2                        *fHistJets1ZvsPt;                         //!Constituent Pt over Jet Pt ratio vs. jet pt 1

  // Jets 2
  TH2                        *fHistJets2PhiEta;                        //!phi-eta distribution of jets 2
  TH2                        *fHistJets2PtArea;                        //!inclusive jet pt vs. area histogram 2
  TH2                        *fHistJets2CorrPtArea;                    //!inclusive jet pt vs. area histogram 2
  TH2                        *fHistJets2NEFvsPt;                       //!Jet neutral energy fraction vs. jet pt 2
  TH2                        *fHistJets2CEFvsCEFPt;                    //!Jet charged energy fraction vs. charged jet pt 2
  TH2                        *fHistJets2ZvsPt;                         //!Constituent Pt over Jet Pt ratio vs. jet pt 2

  // Jet1-Jet2 matching
  TH2                        *fHistCommonEnergy1vsJet1Pt;              //!common energy 1 (%) vs jet 1 pt
  TH2                        *fHistCommonEnergy2vsJet2Pt;              //!common energy 2 (%) vs jet 2 pt
  TH2                        *fHistDistancevsJet1Pt;                   //!distance vs jet 1 pt
  TH2                        *fHistDistancevsJet2Pt;                   //!distance vs jet 2 pt
  TH2                        *fHistDistancevsCommonEnergy1;            //!distance vs common energy 1 (%)
  TH2                        *fHistDistancevsCommonEnergy2;            //!distance vs common energy 2 (%)
  TH2                        *fHistCommonEnergy1vsCommonEnergy2;       //!common energy 1 (%) vs common energy 2 (%)
  TH2                        *fHistDeltaEtaDeltaPhi;                   //!delta eta vs delta phi of matched jets

  TH2                        *fHistJet2PtOverJet1PtvsJet2Pt;           //!jet 2 pt over jet 1 pt vs jet 2 pt
  TH2                        *fHistJet1PtOverJet2PtvsJet1Pt;           //!jet 1 pt over jet 2 pt vs jet 1 pt
  TH2                        *fHistDeltaPtvsJet1Pt;                    //!delta pt between matched jets vs jet 1 pt
  TH2                        *fHistDeltaPtvsJet2Pt;                    //!delta pt between matched jets vs jet 2 pt
  TH2                        *fHistDeltaPtOverJet1PtvsJet1Pt;          //!delta pt / jet 1 pt between matched jets vs jet 1 pt
  TH2                        *fHistDeltaPtOverJet2PtvsJet2Pt;          //!delta pt / jet 2 pt between matched jets vs jet 2 pt
  TH2                        *fHistDeltaPtvsDistance;                  //!delta pt between matched jets vs distance
  TH2                        *fHistDeltaPtvsCommonEnergy1;             //!delta pt between matched jets vs common energy 1 (%)
  TH2                        *fHistDeltaPtvsCommonEnergy2;             //!delta pt between matched jets vs common energy 2 (%)
  TH2                        *fHistDeltaPtvsArea1;                     //!delta pt between matched jets vs jet 1 area
  TH2                        *fHistDeltaPtvsArea2;                     //!delta pt between matched jets vs jet 2 area
  TH2                        *fHistDeltaPtvsDeltaArea;                 //!delta pt between matched jets vs delta area
  TH2                        *fHistJet1PtvsJet2Pt;                     //!correlation jet 1 pt vs jet 2 pt

  TH2                        *fHistDeltaCorrPtOverJet1CorrPtvsJet1CorrPt;//!delta pt corr / jet 1 corr pt between matched jets vs jet 1 corr pt
  TH2                        *fHistDeltaCorrPtOverJet2CorrPtvsJet2CorrPt;//!delta pt corr / jet 2 corr pt between matched jets vs jet 2 corr pt
  TH2                        *fHistDeltaCorrPtvsJet1CorrPt;            //!delta pt corr between matched jets vs jet 1 corr pt 
  TH2                        *fHistDeltaCorrPtvsJet2CorrPt;            //!delta pt corr between matched jets vs jet 2 corr pt
  TH2                        *fHistDeltaCorrPtvsDistance;              //!delta pt corr between matched jets vs distance
  TH2                        *fHistDeltaCorrPtvsCommonEnergy1;         //!delta pt corr between matched jets vs common energy 1 (%)
  TH2                        *fHistDeltaCorrPtvsCommonEnergy2;         //!delta pt corr between matched jets vs common energy 2 (%)
  TH2                        *fHistDeltaCorrPtvsArea1;                 //!delta pt corr between matched jets vs jet 1 area
  TH2                        *fHistDeltaCorrPtvsArea2;                 //!delta pt corr between matched jets vs jet 2 area
  TH2                        *fHistDeltaCorrPtvsDeltaArea;             //!delta pt corr between matched jets vs delta area
  TH2                        *fHistJet1CorrPtvsJet2CorrPt;             //!correlation jet 1 corr pt vs jet 2 corr pt

  TH2                        *fHistDeltaMCPtOverJet1MCPtvsJet1MCPt;    //!jet 1 MC pt - jet2 pt / jet 1 MC pt vs jet 1 pt
  TH2                        *fHistDeltaMCPtOverJet2PtvsJet2Pt;        //!jet 1 MC pt - jet2 pt / jet 2 pt vs jet 2 pt
  TH2                        *fHistDeltaMCPtvsJet1MCPt;                //!jet 1 MC pt - jet2 pt vs jet 1 MC pt
  TH2                        *fHistDeltaMCPtvsJet2Pt;                  //!jet 1 MC pt - jet2 pt vs jet 2 pt
  TH2                        *fHistDeltaMCPtvsDistance;                //!jet 1 MC pt - jet2 pt vs distance
  TH2                        *fHistDeltaMCPtvsCommonEnergy1;           //!jet 1 MC pt - jet2 pt vs common energy 1 (%)
  TH2                        *fHistDeltaMCPtvsCommonEnergy2;           //!jet 1 MC pt - jet2 pt vs common energy 2 (%)
  TH2                        *fHistDeltaMCPtvsArea1;                   //!jet 1 MC pt - jet2 pt vs jet 1 area
  TH2                        *fHistDeltaMCPtvsArea2;                   //!jet 1 MC pt - jet2 pt vs jet 2 area
  TH2                        *fHistDeltaMCPtvsDeltaArea;               //!jet 1 MC pt - jet2 pt vs delta area
  TH2                        *fHistJet1MCPtvsJet2Pt;                   //!correlation jet 1 MC pt vs jet 2 pt

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

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