ROOT logo
//
// Jet trigger rejection analysis task.
//
// Author: M.Verweij

#include <TClonesArray.h>
#include <TH1F.h>
#include <TH2F.h>
#include <TH3F.h>
#include <TProfile.h>
#include <THnSparse.h>
#include <TList.h>
#include <TLorentzVector.h>

#include "AliVVZERO.h"
#include "AliEmcalJet.h"
#include "AliRhoParameter.h"
#include "AliLog.h"
#include "AliJetContainer.h"
#include "AliEmcalTriggerPatchInfo.h"
#include "AliPicoTrack.h"

#include "AliAnalysisTaskTriggerRejection.h"

ClassImp(JETriggerRejectionAna::AliAnalysisTaskTriggerRejection)

namespace JETriggerRejectionAna {
  //________________________________________________________________________
  AliAnalysisTaskTriggerRejection::AliAnalysisTaskTriggerRejection() :
    AliAnalysisTaskEmcalJet("AliAnalysisTaskTriggerRejection", kTRUE),
    fContainerFull(0),
    fContainerCharged(1),
    fMaxPatch(0),
    fhnTriggerInfo(0),
    fMainPatchType(kManual),
    fMainTrigCat(kTriggerLevel1Jet),
    fMainTrigSimple(kFALSE)
  {
    // Default constructor.
    SetMakeGeneralHistograms(kTRUE);
  }

  //________________________________________________________________________
  AliAnalysisTaskTriggerRejection::AliAnalysisTaskTriggerRejection(const char *name) :
    AliAnalysisTaskEmcalJet(name, kTRUE),
    fContainerFull(0),
    fContainerCharged(1),
    fMaxPatch(0),
    fhnTriggerInfo(0),
    fMainPatchType(kManual),
    fMainTrigCat(kTriggerLevel1Jet),
    fMainTrigSimple(kFALSE)
  {
    // Standard constructor.
    SetMakeGeneralHistograms(kTRUE);
  }

  //________________________________________________________________________
  AliAnalysisTaskTriggerRejection::~AliAnalysisTaskTriggerRejection()
  {
    // Destructor.
  }

  //________________________________________________________________________
  void AliAnalysisTaskTriggerRejection::UserCreateOutputObjects()
  {
    // Create user output.

    AliAnalysisTaskEmcalJet::UserCreateOutputObjects();

    Bool_t oldStatus = TH1::AddDirectoryStatus();
    TH1::AddDirectory(kFALSE);

    Int_t fgkNCentBins = 21;
    Float_t kMinCent   = 0.;
    Float_t kMaxCent   = 105.;
    
    Int_t fgkNPtBins = 170;
    Float_t kMinPt   = -50.;
    Float_t kMaxPt   = 120.;

    Int_t fgkNVZEROBins = 100;
    Float_t kMinVZERO   = 0.;
    Float_t kMaxVZERO   = 25000;

    const Int_t fgkNEPatch = 100;
    Float_t kMinEPatch = 0.;
    Float_t kMaxEPatch = 200.;

    const Int_t fgkNADC = 100;
    Float_t kMinADC = 0.;
    Float_t kMaxADC = 1500.;

    const Int_t fgkNEta = 10;
    const Int_t fgkNPhi = 10;

    const Int_t nDim = 8;//cent;V0mult;ptjet1;ptjet2;Epatch;ADCpatch;EtaPatch;PhiPatch
    const Int_t nBins[nDim] = {fgkNCentBins,fgkNVZEROBins,fgkNPtBins,fgkNPtBins,fgkNEPatch,fgkNADC,fgkNEta,fgkNPhi};
    const Double_t xmin0[nDim]  = {kMinCent,kMinVZERO,kMinPt,kMinPt,kMinEPatch,kMinADC,-0.7,1.4};
    const Double_t xmax0[nDim]  = {kMaxCent,kMaxVZERO,kMaxPt,kMaxPt,kMaxEPatch,kMaxADC, 0.7,3.14};
    fhnTriggerInfo = new THnSparseF("fhnTriggerInfo",
                                    "hnTriggerInfo;cent;V0mult;ptjet1;ptjet2;Epatch;ADCpatch;EtaPatch;PhiPatch",nDim,nBins,xmin0,xmax0);
    fOutput->Add(fhnTriggerInfo);

    // =========== Switch on Sumw2 for all histos ===========
    for (Int_t i=0; i<fOutput->GetEntries(); ++i) {
      TH1 *h1 = dynamic_cast<TH1*>(fOutput->At(i));
      if (h1){
        h1->Sumw2();
        continue;
      }
      TH2 *h2 = dynamic_cast<TH2*>(fOutput->At(i));
      if (h2){
        h2->Sumw2();
        continue;
      }
      TH3 *h3 = dynamic_cast<TH3*>(fOutput->At(i));
      if (h3){
        h3->Sumw2();
        continue;
      }
      THnSparse *hn = dynamic_cast<THnSparse*>(fOutput->At(i));
      if(hn)hn->Sumw2();
    }

    TH1::AddDirectory(oldStatus);

    PostData(1, fOutput); // Post data for ALL output slots > 0 here.
  }

  //________________________________________________________________________
  void AliAnalysisTaskTriggerRejection::ExtractMainPatch() {

    //Find main trigger
    if(!fTriggerPatchInfo)
      return;

    //number of patches in event
    Int_t nPatch = fTriggerPatchInfo->GetEntriesFast();

    //extract main trigger patch
    Double_t emax = -1.;
    for (Int_t iPatch = 0; iPatch < nPatch; iPatch++) {
      AliEmcalTriggerPatchInfo *patch = (AliEmcalTriggerPatchInfo*)fTriggerPatchInfo->At( iPatch );
      if(patch->GetPatchE()>emax) {
        fMaxPatch = patch;
        emax = patch->GetPatchE();
      }
    }
  }
  //________________________________________________________________________
  Bool_t AliAnalysisTaskTriggerRejection::FillHistograms()
  {
    // Fill histograms.

    if(!GetJetContainer(fContainerFull) || !GetJetContainer(fContainerCharged) || !fMaxPatch)
      return kFALSE;

    //Get leading jets
    AliEmcalJet *leadJet1 = GetJetContainer(fContainerFull)->GetLeadingJet("rho");
    AliEmcalJet *leadJet2 = GetJetContainer(fContainerCharged)->GetLeadingJet("rho");
  
    Double_t ptLeadJet1 = -999;
    Double_t ptLeadJet2 = -999;

    if(leadJet1) ptLeadJet1 = leadJet1->Pt() - GetRhoVal(fContainerFull)*leadJet1->Area();
    if(leadJet2) ptLeadJet2 = leadJet2->Pt() - GetRhoVal(fContainerCharged)*leadJet2->Area();

    Double_t VZEROAmp = (Double_t)(InputEvent()->GetVZEROData()->GetTriggerChargeA() + InputEvent()->GetVZEROData()->GetTriggerChargeC());

    //cent;V0mult;ptjet1;ptjet2;Epatch;ADCpatch;EtaPatch;PhiPatch
    Double_t var[8] = {
      fCent,
      VZEROAmp,
      ptLeadJet1,
      ptLeadJet2,
      fMaxPatch->GetPatchE(),
      (Double_t)fMaxPatch->GetADCAmp(),
      fMaxPatch->GetEtaGeo(),
      fMaxPatch->GetPhiGeo()
    };
    fhnTriggerInfo->Fill(var);

    return kTRUE;
  }

  //________________________________________________________________________
  Bool_t AliAnalysisTaskTriggerRejection::Run()
  {
    // Run analysis code here, if needed. It will be executed before FillHistograms().

    if(fTriggerPatchInfo) { 
      if(fMainPatchType==kManual) ExtractMainPatch();
      else if(fMainPatchType==kEmcalJet) 
        fMaxPatch = GetMainTriggerPatch(fMainTrigCat,fMainTrigSimple);
    }

    return kTRUE;  // If return kFALSE FillHistogram() will NOT be executed.
  }

  //_______________________________________________________________________
  void AliAnalysisTaskTriggerRejection::Terminate(Option_t *) 
  {
    // Called once at the end of the analysis.
  }
}
 AliAnalysisTaskTriggerRejection.cxx:1
 AliAnalysisTaskTriggerRejection.cxx:2
 AliAnalysisTaskTriggerRejection.cxx:3
 AliAnalysisTaskTriggerRejection.cxx:4
 AliAnalysisTaskTriggerRejection.cxx:5
 AliAnalysisTaskTriggerRejection.cxx:6
 AliAnalysisTaskTriggerRejection.cxx:7
 AliAnalysisTaskTriggerRejection.cxx:8
 AliAnalysisTaskTriggerRejection.cxx:9
 AliAnalysisTaskTriggerRejection.cxx:10
 AliAnalysisTaskTriggerRejection.cxx:11
 AliAnalysisTaskTriggerRejection.cxx:12
 AliAnalysisTaskTriggerRejection.cxx:13
 AliAnalysisTaskTriggerRejection.cxx:14
 AliAnalysisTaskTriggerRejection.cxx:15
 AliAnalysisTaskTriggerRejection.cxx:16
 AliAnalysisTaskTriggerRejection.cxx:17
 AliAnalysisTaskTriggerRejection.cxx:18
 AliAnalysisTaskTriggerRejection.cxx:19
 AliAnalysisTaskTriggerRejection.cxx:20
 AliAnalysisTaskTriggerRejection.cxx:21
 AliAnalysisTaskTriggerRejection.cxx:22
 AliAnalysisTaskTriggerRejection.cxx:23
 AliAnalysisTaskTriggerRejection.cxx:24
 AliAnalysisTaskTriggerRejection.cxx:25
 AliAnalysisTaskTriggerRejection.cxx:26
 AliAnalysisTaskTriggerRejection.cxx:27
 AliAnalysisTaskTriggerRejection.cxx:28
 AliAnalysisTaskTriggerRejection.cxx:29
 AliAnalysisTaskTriggerRejection.cxx:30
 AliAnalysisTaskTriggerRejection.cxx:31
 AliAnalysisTaskTriggerRejection.cxx:32
 AliAnalysisTaskTriggerRejection.cxx:33
 AliAnalysisTaskTriggerRejection.cxx:34
 AliAnalysisTaskTriggerRejection.cxx:35
 AliAnalysisTaskTriggerRejection.cxx:36
 AliAnalysisTaskTriggerRejection.cxx:37
 AliAnalysisTaskTriggerRejection.cxx:38
 AliAnalysisTaskTriggerRejection.cxx:39
 AliAnalysisTaskTriggerRejection.cxx:40
 AliAnalysisTaskTriggerRejection.cxx:41
 AliAnalysisTaskTriggerRejection.cxx:42
 AliAnalysisTaskTriggerRejection.cxx:43
 AliAnalysisTaskTriggerRejection.cxx:44
 AliAnalysisTaskTriggerRejection.cxx:45
 AliAnalysisTaskTriggerRejection.cxx:46
 AliAnalysisTaskTriggerRejection.cxx:47
 AliAnalysisTaskTriggerRejection.cxx:48
 AliAnalysisTaskTriggerRejection.cxx:49
 AliAnalysisTaskTriggerRejection.cxx:50
 AliAnalysisTaskTriggerRejection.cxx:51
 AliAnalysisTaskTriggerRejection.cxx:52
 AliAnalysisTaskTriggerRejection.cxx:53
 AliAnalysisTaskTriggerRejection.cxx:54
 AliAnalysisTaskTriggerRejection.cxx:55
 AliAnalysisTaskTriggerRejection.cxx:56
 AliAnalysisTaskTriggerRejection.cxx:57
 AliAnalysisTaskTriggerRejection.cxx:58
 AliAnalysisTaskTriggerRejection.cxx:59
 AliAnalysisTaskTriggerRejection.cxx:60
 AliAnalysisTaskTriggerRejection.cxx:61
 AliAnalysisTaskTriggerRejection.cxx:62
 AliAnalysisTaskTriggerRejection.cxx:63
 AliAnalysisTaskTriggerRejection.cxx:64
 AliAnalysisTaskTriggerRejection.cxx:65
 AliAnalysisTaskTriggerRejection.cxx:66
 AliAnalysisTaskTriggerRejection.cxx:67
 AliAnalysisTaskTriggerRejection.cxx:68
 AliAnalysisTaskTriggerRejection.cxx:69
 AliAnalysisTaskTriggerRejection.cxx:70
 AliAnalysisTaskTriggerRejection.cxx:71
 AliAnalysisTaskTriggerRejection.cxx:72
 AliAnalysisTaskTriggerRejection.cxx:73
 AliAnalysisTaskTriggerRejection.cxx:74
 AliAnalysisTaskTriggerRejection.cxx:75
 AliAnalysisTaskTriggerRejection.cxx:76
 AliAnalysisTaskTriggerRejection.cxx:77
 AliAnalysisTaskTriggerRejection.cxx:78
 AliAnalysisTaskTriggerRejection.cxx:79
 AliAnalysisTaskTriggerRejection.cxx:80
 AliAnalysisTaskTriggerRejection.cxx:81
 AliAnalysisTaskTriggerRejection.cxx:82
 AliAnalysisTaskTriggerRejection.cxx:83
 AliAnalysisTaskTriggerRejection.cxx:84
 AliAnalysisTaskTriggerRejection.cxx:85
 AliAnalysisTaskTriggerRejection.cxx:86
 AliAnalysisTaskTriggerRejection.cxx:87
 AliAnalysisTaskTriggerRejection.cxx:88
 AliAnalysisTaskTriggerRejection.cxx:89
 AliAnalysisTaskTriggerRejection.cxx:90
 AliAnalysisTaskTriggerRejection.cxx:91
 AliAnalysisTaskTriggerRejection.cxx:92
 AliAnalysisTaskTriggerRejection.cxx:93
 AliAnalysisTaskTriggerRejection.cxx:94
 AliAnalysisTaskTriggerRejection.cxx:95
 AliAnalysisTaskTriggerRejection.cxx:96
 AliAnalysisTaskTriggerRejection.cxx:97
 AliAnalysisTaskTriggerRejection.cxx:98
 AliAnalysisTaskTriggerRejection.cxx:99
 AliAnalysisTaskTriggerRejection.cxx:100
 AliAnalysisTaskTriggerRejection.cxx:101
 AliAnalysisTaskTriggerRejection.cxx:102
 AliAnalysisTaskTriggerRejection.cxx:103
 AliAnalysisTaskTriggerRejection.cxx:104
 AliAnalysisTaskTriggerRejection.cxx:105
 AliAnalysisTaskTriggerRejection.cxx:106
 AliAnalysisTaskTriggerRejection.cxx:107
 AliAnalysisTaskTriggerRejection.cxx:108
 AliAnalysisTaskTriggerRejection.cxx:109
 AliAnalysisTaskTriggerRejection.cxx:110
 AliAnalysisTaskTriggerRejection.cxx:111
 AliAnalysisTaskTriggerRejection.cxx:112
 AliAnalysisTaskTriggerRejection.cxx:113
 AliAnalysisTaskTriggerRejection.cxx:114
 AliAnalysisTaskTriggerRejection.cxx:115
 AliAnalysisTaskTriggerRejection.cxx:116
 AliAnalysisTaskTriggerRejection.cxx:117
 AliAnalysisTaskTriggerRejection.cxx:118
 AliAnalysisTaskTriggerRejection.cxx:119
 AliAnalysisTaskTriggerRejection.cxx:120
 AliAnalysisTaskTriggerRejection.cxx:121
 AliAnalysisTaskTriggerRejection.cxx:122
 AliAnalysisTaskTriggerRejection.cxx:123
 AliAnalysisTaskTriggerRejection.cxx:124
 AliAnalysisTaskTriggerRejection.cxx:125
 AliAnalysisTaskTriggerRejection.cxx:126
 AliAnalysisTaskTriggerRejection.cxx:127
 AliAnalysisTaskTriggerRejection.cxx:128
 AliAnalysisTaskTriggerRejection.cxx:129
 AliAnalysisTaskTriggerRejection.cxx:130
 AliAnalysisTaskTriggerRejection.cxx:131
 AliAnalysisTaskTriggerRejection.cxx:132
 AliAnalysisTaskTriggerRejection.cxx:133
 AliAnalysisTaskTriggerRejection.cxx:134
 AliAnalysisTaskTriggerRejection.cxx:135
 AliAnalysisTaskTriggerRejection.cxx:136
 AliAnalysisTaskTriggerRejection.cxx:137
 AliAnalysisTaskTriggerRejection.cxx:138
 AliAnalysisTaskTriggerRejection.cxx:139
 AliAnalysisTaskTriggerRejection.cxx:140
 AliAnalysisTaskTriggerRejection.cxx:141
 AliAnalysisTaskTriggerRejection.cxx:142
 AliAnalysisTaskTriggerRejection.cxx:143
 AliAnalysisTaskTriggerRejection.cxx:144
 AliAnalysisTaskTriggerRejection.cxx:145
 AliAnalysisTaskTriggerRejection.cxx:146
 AliAnalysisTaskTriggerRejection.cxx:147
 AliAnalysisTaskTriggerRejection.cxx:148
 AliAnalysisTaskTriggerRejection.cxx:149
 AliAnalysisTaskTriggerRejection.cxx:150
 AliAnalysisTaskTriggerRejection.cxx:151
 AliAnalysisTaskTriggerRejection.cxx:152
 AliAnalysisTaskTriggerRejection.cxx:153
 AliAnalysisTaskTriggerRejection.cxx:154
 AliAnalysisTaskTriggerRejection.cxx:155
 AliAnalysisTaskTriggerRejection.cxx:156
 AliAnalysisTaskTriggerRejection.cxx:157
 AliAnalysisTaskTriggerRejection.cxx:158
 AliAnalysisTaskTriggerRejection.cxx:159
 AliAnalysisTaskTriggerRejection.cxx:160
 AliAnalysisTaskTriggerRejection.cxx:161
 AliAnalysisTaskTriggerRejection.cxx:162
 AliAnalysisTaskTriggerRejection.cxx:163
 AliAnalysisTaskTriggerRejection.cxx:164
 AliAnalysisTaskTriggerRejection.cxx:165
 AliAnalysisTaskTriggerRejection.cxx:166
 AliAnalysisTaskTriggerRejection.cxx:167
 AliAnalysisTaskTriggerRejection.cxx:168
 AliAnalysisTaskTriggerRejection.cxx:169
 AliAnalysisTaskTriggerRejection.cxx:170
 AliAnalysisTaskTriggerRejection.cxx:171
 AliAnalysisTaskTriggerRejection.cxx:172
 AliAnalysisTaskTriggerRejection.cxx:173
 AliAnalysisTaskTriggerRejection.cxx:174
 AliAnalysisTaskTriggerRejection.cxx:175
 AliAnalysisTaskTriggerRejection.cxx:176
 AliAnalysisTaskTriggerRejection.cxx:177
 AliAnalysisTaskTriggerRejection.cxx:178
 AliAnalysisTaskTriggerRejection.cxx:179
 AliAnalysisTaskTriggerRejection.cxx:180
 AliAnalysisTaskTriggerRejection.cxx:181
 AliAnalysisTaskTriggerRejection.cxx:182
 AliAnalysisTaskTriggerRejection.cxx:183
 AliAnalysisTaskTriggerRejection.cxx:184
 AliAnalysisTaskTriggerRejection.cxx:185
 AliAnalysisTaskTriggerRejection.cxx:186
 AliAnalysisTaskTriggerRejection.cxx:187
 AliAnalysisTaskTriggerRejection.cxx:188
 AliAnalysisTaskTriggerRejection.cxx:189
 AliAnalysisTaskTriggerRejection.cxx:190
 AliAnalysisTaskTriggerRejection.cxx:191
 AliAnalysisTaskTriggerRejection.cxx:192
 AliAnalysisTaskTriggerRejection.cxx:193
 AliAnalysisTaskTriggerRejection.cxx:194
 AliAnalysisTaskTriggerRejection.cxx:195
 AliAnalysisTaskTriggerRejection.cxx:196
 AliAnalysisTaskTriggerRejection.cxx:197
 AliAnalysisTaskTriggerRejection.cxx:198
 AliAnalysisTaskTriggerRejection.cxx:199
 AliAnalysisTaskTriggerRejection.cxx:200
 AliAnalysisTaskTriggerRejection.cxx:201
 AliAnalysisTaskTriggerRejection.cxx:202
 AliAnalysisTaskTriggerRejection.cxx:203
 AliAnalysisTaskTriggerRejection.cxx:204
 AliAnalysisTaskTriggerRejection.cxx:205
 AliAnalysisTaskTriggerRejection.cxx:206