ROOT logo
//
// rho mass scale task
// task to estimate scale factor for rho_m
//
// Author: M.Verweij

#include <TClonesArray.h>
#include <TH1F.h>
#include <TH2F.h>
#include <TH3F.h>
#include <THnSparse.h>
#include <TList.h>
#include <TLorentzVector.h>
#include <TProfile.h>
#include <TChain.h>
#include <TSystem.h>
#include <TFile.h>
#include <TKey.h>

#include "AliAnalysisManager.h"
// #include "AliAODMCHeader.h"
// #include "AliMCEvent.h"
// #include "AliGenPythiaEventHeader.h"
// #include "AliAODEvent.h"
#include "AliLog.h"
#include "AliVCluster.h"
#include "AliVTrack.h"
#include "AliEmcalJet.h"
#include "AliRhoParameter.h"
#include "AliEmcalParticle.h"
#include "AliJetContainer.h"
#include "AliParticleContainer.h"

#include "AliAnalysisTaskRhoMassScale.h"

ClassImp(AliAnalysisTaskRhoMassScale)

//________________________________________________________________________
AliAnalysisTaskRhoMassScale::AliAnalysisTaskRhoMassScale() : 
  AliAnalysisTaskEmcalJet("AliAnalysisTaskRhoMassScale", kTRUE),
  fContainerNeutral(0),
  fContainerCharged(1),
  fRhoMNeutralName(""),
  fRhoMChargedEmcalName(""),
  fRhoMCharged2xEmcalName(""),
  fRhoMNeutral(0),
  fRhoMChargedEmcal(0),
  fRhoMCharged2xEmcal(0),
  fHistScaleEmcalvsCent(0),
  fHistScale2EmcalvsCent(0),
  fHistDeltaScale2EmcalvsCent(0),
  fHistScaleEmcalvsMult(0),
  fHistScale2EmcalvsMult(0),
  fHistDeltaScale2EmcalvsMult(0)
{
  // Default constructor.

  SetMakeGeneralHistograms(kTRUE);
}

//________________________________________________________________________
AliAnalysisTaskRhoMassScale::AliAnalysisTaskRhoMassScale(const char *name) : 
  AliAnalysisTaskEmcalJet(name, kTRUE),  
  fContainerNeutral(0),
  fContainerCharged(1),
  fRhoMNeutralName(""),
  fRhoMChargedEmcalName(""),
  fRhoMCharged2xEmcalName(""),
  fRhoMNeutral(0),
  fRhoMChargedEmcal(0),
  fRhoMCharged2xEmcal(0),
  fHistScaleEmcalvsCent(0),
  fHistScale2EmcalvsCent(0),
  fHistDeltaScale2EmcalvsCent(0),
  fHistScaleEmcalvsMult(0),
  fHistScale2EmcalvsMult(0),
  fHistDeltaScale2EmcalvsMult(0)
{
  // Standard constructor.

  SetMakeGeneralHistograms(kTRUE);
}

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

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

  AliAnalysisTaskEmcalJet::UserCreateOutputObjects();

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

  //Create histograms
  TString histName = "";
  TString histTitle = "";
 
  histName = "fHistScaleEmcalvsCent";
  histTitle = TString::Format("%s;Centrality;s_{EMC}",histName.Data());
  fHistScaleEmcalvsCent= new TH2F(histName.Data(),histTitle.Data(), 101, -1, 100, 500, 0, 5);
  fOutput->Add(fHistScaleEmcalvsCent);

  histName = "fHistScale2EmcalvsCent";
  histTitle = TString::Format("%s;Centrality;s_{2 #times EMC}",histName.Data());
  fHistScale2EmcalvsCent = new TH2F(histName.Data(),histTitle.Data(), 101, -1, 100, 500, 0, 5);
  fOutput->Add(fHistScale2EmcalvsCent);

  histName = "fHistDeltaScale2EmcalvsCent";
  histTitle = TString::Format("%s;Centrality;s_{2 #times EMC}-s_{EMC}",histName.Data());
  fHistDeltaScale2EmcalvsCent = new TH2F(histName.Data(),histTitle.Data(), 101, -1, 100, 500, -2.5, 2.5);
  fOutput->Add(fHistDeltaScale2EmcalvsCent);

  histName = "fHistScaleEmcalvsMult";
  histTitle = TString::Format("%s;#it{N}_{track};s_{EMC}",histName.Data());
  fHistScaleEmcalvsMult= new TH2F(histName.Data(),histTitle.Data(), 800, 0, 4000, 500, 0, 5);
  fOutput->Add(fHistScaleEmcalvsMult);

  histName = "fHistScale2EmcalvsMult";
  histTitle = TString::Format("%s;#it{N}_{track};s_{2 #times EMC}",histName.Data());
  fHistScale2EmcalvsMult = new TH2F(histName.Data(),histTitle.Data(), 800, 0, 4000, 500, 0, 5);
  fOutput->Add(fHistScale2EmcalvsMult);

  histName = "fHistDeltaScale2EmcalvsMult";
  histTitle = TString::Format("%s;#it{N}_{track};s_{2 #times EMC}-s_{EMC}",histName.Data());
  fHistDeltaScale2EmcalvsMult = new TH2F(histName.Data(),histTitle.Data(), 800, 0, 4000, 500, -2.5, 2.5);
  fOutput->Add(fHistDeltaScale2EmcalvsMult);
 
  // =========== 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;
    }
    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.
}

//________________________________________________________________________
Bool_t AliAnalysisTaskRhoMassScale::Run()
{
  // Run analysis code here, if needed. It will be executed before FillHistograms().
  return kTRUE;
}

//________________________________________________________________________
Bool_t AliAnalysisTaskRhoMassScale::FillHistograms()
{
  // Fill histograms.

  Double_t rhomNe        = fRhoMNeutral->GetVal();
  Double_t rhomChEmcal   = fRhoMChargedEmcal->GetVal();
  Double_t rhomCh2xEmcal = fRhoMCharged2xEmcal->GetVal();

  Double_t scale = -1.; Double_t scale2 = -1.;
  if(rhomChEmcal>0.)   scale = (rhomNe+rhomChEmcal)/rhomChEmcal;
  if(rhomCh2xEmcal>0.) scale2 = (rhomNe+rhomChEmcal)/rhomCh2xEmcal;

  fHistScaleEmcalvsCent->Fill(fCent,scale);
  fHistScale2EmcalvsCent->Fill(fCent,scale2);
  fHistDeltaScale2EmcalvsCent->Fill(fCent,scale2-scale);

  Int_t mult = -1;
  if(GetParticleContainer(0))
    mult = GetParticleContainer(0)->GetNAcceptedParticles();

  fHistScaleEmcalvsMult->Fill(mult,scale);
  fHistScale2EmcalvsMult->Fill(mult,scale2);
  fHistDeltaScale2EmcalvsMult->Fill(mult,scale2-scale);

  return kTRUE;
}

//________________________________________________________________________
Bool_t AliAnalysisTaskRhoMassScale::RetrieveEventObjects() {
  //
  // retrieve event objects
  if (!AliAnalysisTaskEmcalJet::RetrieveEventObjects())
    return kFALSE;

  if (!fRhoMNeutralName.IsNull() && !fRhoMNeutral) { // get rho_m from the event
    fRhoMNeutral = dynamic_cast<AliRhoParameter*>(InputEvent()->FindListObject(fRhoMNeutralName));
    if (!fRhoMNeutral) {
      AliError(Form("%s: Could not retrieve rho %s!", GetName(), fRhoMNeutralName.Data()));
      fInitialized = kFALSE;
      return kFALSE;
    }
  }

  if (!fRhoMChargedEmcalName.IsNull() && !fRhoMChargedEmcal) { // get rho_m from the event
    fRhoMChargedEmcal = dynamic_cast<AliRhoParameter*>(InputEvent()->FindListObject(fRhoMChargedEmcalName));
    if (!fRhoMChargedEmcal) {
      AliError(Form("%s: Could not retrieve rho %s!", GetName(), fRhoMChargedEmcalName.Data()));
      fInitialized = kFALSE;
      return kFALSE;
    }
  }

  if (!fRhoMCharged2xEmcalName.IsNull() && !fRhoMCharged2xEmcal) { // get rho_m from the event
    fRhoMCharged2xEmcal = dynamic_cast<AliRhoParameter*>(InputEvent()->FindListObject(fRhoMCharged2xEmcalName));
    if (!fRhoMCharged2xEmcal) {
      AliError(Form("%s: Could not retrieve rho %s!", GetName(), fRhoMCharged2xEmcalName.Data()));
      fInitialized = kFALSE;
      return kFALSE;
    }
  }

  return kTRUE;
}

//_______________________________________________________________________
void AliAnalysisTaskRhoMassScale::Terminate(Option_t *) 
{
  // Called once at the end of the analysis.
}

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