ROOT logo
// 
// Calculate the corrections in the forward regions
// 
// Inputs: 
//   - AliESDEvent 
//
// Outputs: 
//   - AliAODForwardMult 
// 
// Histograms 
//   
// Corrections used 
// 
#include "AliForwardMCCorrectionsTask.h"
#include "AliForwardCorrectionManager.h"
#include "AliTriggerAnalysis.h"
#include "AliPhysicsSelection.h"
#include "AliLog.h"
#include "AliHeader.h"
#include "AliGenEventHeader.h"
#include "AliESDEvent.h"
#include "AliAODHandler.h"
#include "AliMultiplicity.h"
#include "AliInputEventHandler.h"
#include "AliStack.h"
#include "AliMCEvent.h"
#include "AliAODForwardMult.h"
#include "AliFMDStripIndex.h"
#include "AliFMDCorrSecondaryMap.h"
#include <TH1.h>
#include <TH2D.h>
#include <TDirectory.h>
#include <TTree.h>
#include <TList.h>
#include <TROOT.h>
#include <iostream>

//====================================================================
AliForwardMCCorrectionsTask::AliForwardMCCorrectionsTask()
  : AliBaseMCCorrectionsTask(),
    fTrackDensity(),
    fESDFMD(),
    fSecCorr(0)
{
  // 
  // Constructor 
  // 
  // Parameters:
  //    name Name of task 
  //
}

//____________________________________________________________________
AliForwardMCCorrectionsTask::AliForwardMCCorrectionsTask(const char* name)
  : AliBaseMCCorrectionsTask(name, &(AliForwardCorrectionManager::Instance())),
    fTrackDensity("trackDensity"),
    fESDFMD(),
    fSecCorr(0)
{
  // 
  // Constructor 
  // 
  // Parameters:
  //    name Name of task 
}


//____________________________________________________________________
AliBaseMCCorrectionsTask::VtxBin*
AliForwardMCCorrectionsTask::CreateVtxBin(Double_t low, Double_t high)
{
  return new AliForwardMCCorrectionsTask::VtxBin(low,high, fEtaAxis);
}

//____________________________________________________________________
Bool_t
AliForwardMCCorrectionsTask::PreEvent()
{
  // Clear our ESD object 
  fESDFMD.Clear();
  return true;
}

//____________________________________________________________________
Bool_t
AliForwardMCCorrectionsTask::ProcessESD(const AliESDEvent& esd, 
					const AliMCEvent& mc, 
					AliBaseMCCorrectionsTask::VtxBin& bin,
					Double_t          vz)
{
  AliESDFMD* esdFMD = esd.GetFMDData();

  fTrackDensity.Calculate(*esdFMD, mc, vz, fESDFMD, bin.fPrimary);
  bin.fCounts->Fill(0.5);

  AliForwardMCCorrectionsTask::VtxBin& vb = 
    static_cast<AliForwardMCCorrectionsTask::VtxBin&>(bin);

  // And then bin the data in our vtxbin 
  for (UShort_t d=1; d<=3; d++) { 
    UShort_t nr = (d == 1 ? 1 : 2);
    for (UShort_t q=0; q<nr; q++) { 
      Char_t      r = (q == 0 ? 'I' : 'O');
      UShort_t    ns= (q == 0 ?  20 :  40);
      UShort_t    nt= (q == 0 ? 512 : 256);
      TH2D*       h = vb.fHists.Get(d,r);

      for (UShort_t s=0; s<ns; s++) { 
	for (UShort_t t=0; t<nt; t++) {
	  Float_t mult = fESDFMD.Multiplicity(d,r,s,t);
	  
	  if (mult == 0 || mult > 20) continue;

	  Float_t phi = fESDFMD.Phi(d,r,s,t) / 180 * TMath::Pi();
	  Float_t eta = fESDFMD.Eta(d,r,s,t);
	  h->Fill(eta,phi,mult);
	} // for t
      } // for s 
    } // for q 
  } // for d
  return true;
}
//____________________________________________________________________
void
AliForwardMCCorrectionsTask::CreateCorrections(TList* results)
{
  fSecCorr = new AliFMDCorrSecondaryMap;
  fSecCorr->SetVertexAxis(fVtxAxis);
  fSecCorr->SetEtaAxis(fEtaAxis);
  results->Add(fSecCorr);
}

//____________________________________________________________________
Bool_t 
AliForwardMCCorrectionsTask::FinalizeVtxBin(AliBaseMCCorrectionsTask::VtxBin* 
					    bin,  UShort_t iVz) 
{
  
  AliForwardMCCorrectionsTask::VtxBin* vb = 
    static_cast<AliForwardMCCorrectionsTask::VtxBin*>(bin);
  vb->Terminate(fList, fResults, iVz, fSecCorr);
  return true;
}


//____________________________________________________________________
void
AliForwardMCCorrectionsTask::Print(Option_t* option) const
{
  AliBaseMCCorrectionsTask::Print(option);
  gROOT->IncreaseDirLevel();
  fTrackDensity.Print(option);
  gROOT->DecreaseDirLevel();
}

//====================================================================
AliForwardMCCorrectionsTask::VtxBin::VtxBin()
  : AliBaseMCCorrectionsTask::VtxBin(),
    fHists()
{
}
//____________________________________________________________________
AliForwardMCCorrectionsTask::VtxBin::VtxBin(Double_t low, 
					    Double_t high, 
					    const TAxis& axis)
  :  AliBaseMCCorrectionsTask::VtxBin(low, high, axis, 40),
    fHists()
{
  fHists.Init(axis);
}


//____________________________________________________________________
TList*
AliForwardMCCorrectionsTask::VtxBin::CreateOutputObjects(TList* l)
{
  TList* d = AliBaseMCCorrectionsTask::VtxBin::CreateOutputObjects(l);

  d->Add(fHists.fFMD1i);
  d->Add(fHists.fFMD2i);
  d->Add(fHists.fFMD2o);
  d->Add(fHists.fFMD3i);
  d->Add(fHists.fFMD3o);

  return d;
}

//____________________________________________________________________
TH2D*
AliForwardMCCorrectionsTask::VtxBin::MakeBg(const TH2D* hits, 
					    const TH2D* primary) const
{
  TH2D* h = static_cast<TH2D*>(hits->Clone());
  h->SetDirectory(0);
  TString n(h->GetName());
  n.ReplaceAll("_cache", "");
  h->SetName(n);
  h->Divide(primary);
  
  return h;
}
  
//____________________________________________________________________
void
AliForwardMCCorrectionsTask::VtxBin::Terminate(const TList* input, 
					    TList* output, 
					    UShort_t iVz,
					    AliFMDCorrSecondaryMap* map)
{
  TList* out = new TList;
  out->SetName(GetName());
  out->SetOwner();
  output->Add(out);

  TList* l = static_cast<TList*>(input->FindObject(GetName()));
  if (!l) { 
    AliError(Form("List %s not found in %s", GetName(), input->GetName()));
    return;
  }

  TH2D*   fmd1i = static_cast<TH2D*>(l->FindObject("FMD1I_cache"));
  TH2D*   fmd2i = static_cast<TH2D*>(l->FindObject("FMD2I_cache"));
  TH2D*   fmd2o = static_cast<TH2D*>(l->FindObject("FMD2O_cache"));
  TH2D*   fmd3i = static_cast<TH2D*>(l->FindObject("FMD3I_cache"));
  TH2D*   fmd3o = static_cast<TH2D*>(l->FindObject("FMD3O_cache"));
  TH2D*   primO = static_cast<TH2D*>(l->FindObject("primary"));
  if (!fmd1i || !fmd2i || !fmd2o || !fmd3i || !fmd3o || !primO) {
    AliError(Form("Missing histogram(s): %p,%p,%p,%p,%p,%p",
		  fmd1i, fmd2i, fmd2o, fmd3i, fmd3o, primO));
    return;
  }

  // Half coverage in phi for inners
  TH2D*   primI = static_cast<TH2D*>(primO->Clone());
  primI->SetDirectory(0);
  primI->RebinY(2); 

  TH2D* bg1i = MakeBg(fmd1i, primI);
  TH2D* bg2i = MakeBg(fmd2i, primI);
  TH2D* bg2o = MakeBg(fmd2o, primO);
  TH2D* bg3i = MakeBg(fmd3i, primI);
  TH2D* bg3o = MakeBg(fmd3o, primO);
  map->SetCorrection(1, 'I', iVz, bg1i);
  map->SetCorrection(2, 'I', iVz, bg2i);
  map->SetCorrection(2, 'O', iVz, bg2o);
  map->SetCorrection(3, 'I', iVz, bg3i);
  map->SetCorrection(3, 'O', iVz, bg3o);
  out->Add(bg1i);
  out->Add(bg2i);
  out->Add(bg2o);
  out->Add(bg3i);
  out->Add(bg3o);
 
}

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