ROOT logo
//====================================================================
// 
// Base class for classes that calculate the multiplicity in the
// central region event-by-event
// 
// Inputs: 
//   - AliESDEvent 
//
// Outputs: 
//   - AliAODCentralMult 
// 
// Histograms 
//   
// Corrections used 
#include "AliCentralMCMultiplicityTask.h"
#include "AliCentralCorrectionManager.h"
#include "AliCentralCorrAcceptance.h"
#include "AliCentralCorrSecondaryMap.h"
#include "AliForwardUtil.h"
#include "AliAODForwardMult.h"
#include "AliLog.h"
#include "AliAODHandler.h"
#include "AliInputEventHandler.h"
#include "AliESDInputHandler.h"
#include "AliAnalysisManager.h"
#include "AliESDEvent.h"
#include "AliMultiplicity.h"
#include "AliFMDEventInspector.h"
#include <AliMCEvent.h>
#include <AliTrackReference.h>
#include <AliStack.h>
#include <TROOT.h>
#include <TH1D.h>
#include <TH2D.h>
#include <TH3D.h>
#include <TFile.h>
#include <TError.h>
#include <iostream>
#include <iomanip>

//====================================================================
AliCentralMCMultiplicityTask::AliCentralMCMultiplicityTask(const char* name) 
  : AliCentralMultiplicityTask(name),
    fTrackDensity(name),
    fAODMCCentral(kTRUE)
{
  // 
  // Constructor 
  //   
  DGUARD(fDebug,3,"Named CTOR of AliCentralMCMultiplicityTask: %s", 
	 name);
  fBranchNames = 
    "ESD:AliESDRun.,AliESDHeader.,AliMultiplicity.,"
    "SPDVertex.,PrimaryVertex.";
}
//____________________________________________________________________
AliCentralMCMultiplicityTask::AliCentralMCMultiplicityTask() 
  : AliCentralMultiplicityTask(),
    fTrackDensity(),
    fAODMCCentral(kTRUE)
{
  // 
  // Constructor 
  // 
  DGUARD(fDebug, 3,"Default CTOR of AliCentralMCMultiplicityTask");
}
//____________________________________________________________________
void
AliCentralMCMultiplicityTask::CreateBranches(AliAODHandler* ah) 
{
  // 
  // Create output objects 
  // 
  //
  DGUARD(fDebug,1,"Create user output in AliCentralMCMultiplicityTask");
  AliCentralMultiplicityTask::CreateBranches(ah);

  if (!ah) 
    // AliFatal("No AOD output handler set in analysis manager");
    return;

  
  TObject* obj = &fAODMCCentral;
  ah->AddBranch("AliAODCentralMult", &obj);
}
//____________________________________________________________________
Bool_t
AliCentralMCMultiplicityTask::Book()
{
  AliCentralMultiplicityTask::Book();
  fTrackDensity.CreateOutputObjects(fList);
  return true;
}
//____________________________________________________________________
Bool_t AliCentralMCMultiplicityTask::PreData(const TAxis& v, const TAxis& e)
{
  AliCentralMultiplicityTask::PreData(v, e);
  fAODMCCentral.Init(e);  
  return true;
}

//____________________________________________________________________
Bool_t AliCentralMCMultiplicityTask::PreEvent()
{
  AliCentralMultiplicityTask::PreEvent();  
  fAODMCCentral.Clear("");
  return true;
}
//____________________________________________________________________
Bool_t AliCentralMCMultiplicityTask::Event(AliESDEvent& esd) 
{
  // 
  // Process each event 
  // 
  // Parameters:
  //    option Not used
  //  
  DGUARD(fDebug,1,"Process event in AliCentralMCMultiplicityTask");

  fIvz               = 0;
  Bool_t   lowFlux   = kFALSE;
  UInt_t   triggers  = 0;
  UShort_t ivz       = 0;
  TVector3 ip;
  Double_t cent      = -1;
  UShort_t nClusters = 0;
  UInt_t   found     = fInspector.Process(&esd, triggers, lowFlux, 
					  ivz, ip, cent, nClusters);

  // Make sure AOD is filled
  MarkEventForStore();

  // Is this accepted for analysis? 
  Bool_t isAccepted = true;

  // No event or no trigger 
  if (found &  AliFMDEventInspector::kNoEvent)    isAccepted = false;
  if (found &  AliFMDEventInspector::kNoTriggers) isAccepted = false;
  if (found &  AliFMDEventInspector::kNoSPD)      isAccepted = false;
  if (found &  AliFMDEventInspector::kNoVertex)   isAccepted = false;
  if (triggers & AliAODForwardMult::kPileUp)      isAccepted = false;
  if (found &  AliFMDEventInspector::kBadVertex)  isAccepted = false; 

  VtxBin* bin = static_cast<VtxBin*>(fVtxList->At(ivz));
  if (!bin) return false;

  //Doing analysis
  if (isAccepted) {
    const AliMultiplicity* spdmult = esd.GetMultiplicity();
    TH2D&                  aodHist = fAODCentral.GetHistogram();

    ProcessESD(aodHist, spdmult);
    bin->Correct(aodHist, fUseSecondary, fUseAcceptance);
  
    if (triggers & AliAODForwardMult::kInel) 
      fHData->Add(&(fAODCentral.GetHistogram()));
  }

  const AliMCEvent*  mcEvent = MCEvent();
  if (!mcEvent) return false;
  TH2D&              hist    = fAODMCCentral.GetHistogram();


  fTrackDensity.Calculate(*mcEvent, ip.Z(), hist, NULL);
  bin->Correct(hist, fUseSecondary, fUseAcceptance, false);

  return true;
}

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