ROOT logo
//
// Determine MC truth centrality for kinematics-only productions
// pass it via centrality object
//

#include "AliMCTruthCent.h"

#include <TString.h>
#include <TH1.h>
#include <TH2.h>
#include <TChain.h>
#include <TList.h>

#include "AliAnalysisManager.h"
#include "AliVEventHandler.h"
#include "AliMCEvent.h"
#include "AliVParticle.h"
#include "AliLog.h"
#include "AliESDEvent.h"
#include "AliCentrality.h"

ClassImp(AliMCTruthCent)

//________________________________________________________________________
AliMCTruthCent::AliMCTruthCent() :
AliAnalysisTaskSE("AliMCTruthCent"),
fOutputList(0x0),
fFillHistos(kFALSE),
fHMultV0A(0x0), fHMultV0C(0x0), fHMultV0M(0x0), fHMultV0AvsV0C(0x0),
fHCentV0A(0x0), fHCentV0C(0x0), fHCentV0M(0x0), fHCentV0AvsV0C(0x0),
fV0ALo(0.0), fV0AHi(100.0),
fV0CLo(0.0), fV0CHi(100.0),
fV0MLo(0.0), fV0MHi(200.0)
{
  // Constructor.
}

//________________________________________________________________________
AliMCTruthCent::AliMCTruthCent(const char *name) :
AliAnalysisTaskSE(name),
fOutputList(0x0),
fFillHistos(kFALSE),
fHMultV0A(0x0), fHMultV0C(0x0), fHMultV0M(0x0), fHMultV0AvsV0C(0x0),
fHCentV0A(0x0), fHCentV0C(0x0), fHCentV0M(0x0), fHCentV0AvsV0C(0x0),
fV0ALo(0.0), fV0AHi(100.0),
fV0CLo(0.0), fV0CHi(100.0),
fV0MLo(0.0), fV0MHi(200.0)
{
  // Constructor.
  
  // Define input slot
  DefineInput(0, TChain::Class());

}

//________________________________________________________________________
AliMCTruthCent::~AliMCTruthCent()
{
  // Destructor.
  if (fOutputList)
    delete fOutputList;
}

//________________________________________________________________________
void AliMCTruthCent::UserCreateOutputObjects()
{
  // Create my user objects.
  
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (!mgr) {
    AliFatal("No analysis manager!");
    return;
  }
  
  AliVEventHandler *handler = mgr->GetInputEventHandler();
  if (!handler) {
    AliFatal("No input handler!");
    return;
  }
  
  if (!handler->InheritsFrom("AliESDInputHandler")) {
    AliError("Sorry, this only works for kinematics trees ... return");
    return;
  }
  
  if (fFillHistos) {
    fOutputList = new TList();
    fOutputList->SetOwner();
    
    // histograms
    fHMultV0A      = new TH1D("fHMultV0A","V0A multiplicity",500,0.0,500.0);
    fHMultV0C      = new TH1D("fHMultV0C","V0C multiplicity",500,0.0,500.0);
    fHMultV0M      = new TH1D("fHMultV0M","V0M multiplicity",500,0.0,500.0);
    fHMultV0AvsV0C = new TH2D("fHMultV0AvsV0C","V0A vs. C multiplicity",500,0.0,500.0,500,0.0,500.0);
    
    fOutputList->Add(fHMultV0A);
    fOutputList->Add(fHMultV0C);
    fOutputList->Add(fHMultV0M);
    fOutputList->Add(fHMultV0AvsV0C);
    
    fHCentV0A      = new TH1D("fHCentV0A","V0A centrality",100,0.0,100.0);
    fHCentV0C      = new TH1D("fHCentV0C","V0C centrality",100,0.0,100.0);
    fHCentV0M      = new TH1D("fHCentV0M","V0M centrality",100,0.0,100.0);
    fHCentV0AvsV0C = new TH2D("fHCentV0AvsV0C","V0A vs. C centrality",100,0.0,100.0,100,0.0,100.0);
    
    fOutputList->Add(fHCentV0A);
    fOutputList->Add(fHCentV0C);
    fOutputList->Add(fHCentV0M);
    fOutputList->Add(fHCentV0AvsV0C);
    
    PostData(1, fOutputList);
  }
}

//________________________________________________________________________
void AliMCTruthCent::UserExec(Option_t *)
{
  // Main loop, called for each event.
  if (!InputEvent()) {
    AliError("Could not retrieve event! Returning");
    return;
  }
  
  if (!MCEvent()) {
    AliError("Could not retrieve ESD MC event! Returning");
    return;
  }
  
  // can I get the centrality object from the InputEvent?
  // then use it and overwrite the centrality
  AliCentrality *esdCent = InputEvent()->GetCentrality();
  esdCent->SetQuality(0);
  
  // define experiment-like estimators: multiplicity in range of
  // V0A  2.8 < eta <  5.1
  // V0C -3.7 < eta < -1.7
  // V0M: sum of V0A and V0C
  Double_t etaV0ALo = 2.8;
  Double_t etaV0AHi = 5.1;
  Double_t etaV0CLo = -3.7;
  Double_t etaV0CHi = -1.7;
  
  Int_t nV0A = 0;
  Int_t nV0C = 0;
  
  // loop over MC tracks
  Double_t       etaTrack = 0.0;
  AliVParticle * track    = 0x0;
  const Int_t Ntracks = MCEvent()->GetNumberOfTracks();
  for (Int_t iTracks = 0; iTracks < Ntracks; ++iTracks) {
    track = GetTrack(iTracks);
    if (!track)
      continue;
    
    if (track->Charge()==0)
      continue;

    etaTrack = track->Eta();
    
    if (etaTrack>etaV0ALo && etaTrack<etaV0AHi) {
      ++nV0A;
    } else if (etaTrack>etaV0CLo && etaTrack<etaV0CHi) {
      ++nV0C;
    }
  }
  Int_t nV0M = nV0A+nV0C;

  
  // linear centrality approximation
  Double_t centV0A = (fV0AHi-nV0A) / (fV0AHi-fV0ALo);
  centV0A *= 100.0;
  if (centV0A >= 100.0)
    centV0A = 99.9;
  if (centV0A < 0.0)
    centV0A = 0.0;
  esdCent->SetCentralityV0A(centV0A);

  Double_t centV0C = (fV0CHi-nV0C) / (fV0CHi-fV0CLo);
  centV0C *= 100.0;
  if (centV0C >= 100.0)
    centV0C = 99.9;
  if (centV0C < 0.0)
    centV0C = 0.0;
  esdCent->SetCentralityV0C(centV0C);
  
  Double_t centV0M = (fV0MHi-nV0M) / (fV0MHi-fV0MLo);
  centV0M *= 100.0;
  if (centV0M >= 100.0)
    centV0M = 99.9;
  if (centV0M < 0.0)
    centV0M = 0.0;
  esdCent->SetCentralityV0M(centV0M);

  if (fFillHistos) {
    // write out distributions to histograms
    fHMultV0A->Fill(nV0A);
    fHMultV0C->Fill(nV0C);
    fHMultV0M->Fill(nV0M);
    fHMultV0AvsV0C->Fill(nV0A,nV0C);
    
    fHCentV0A->Fill(centV0A);
    fHCentV0C->Fill(centV0C);
    fHCentV0M->Fill(centV0M);
    fHCentV0AvsV0C->Fill(centV0A,centV0C);
    
    PostData(1, fOutputList);
  }

  // next step: get centrality from histogram...
  
}

//________________________________________________________________________
AliVParticle* AliMCTruthCent::GetTrack(Int_t i)
{
  if (!MCEvent()->IsPhysicalPrimary(i))
    return 0;
  
  return MCEvent()->GetTrack(i);
}

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