ROOT logo
// 
// This class calculates the exclusive charged particle density
// in each for the 5 FMD rings. 
//
// Input:
//   - 5 RingHistos objects - each with a number of vertex dependent 
//     2D histograms of the inclusive charge particle density 
//
// Output:
//   - 5 RingHistos objects - each with a number of vertex dependent 
//     2D histograms of the exclusive charge particle density 
// 
// Corrections used: 
//   - AliFMDCorrSecondaryMap;
//   - AliFMDCorrVertexBias
//   - AliFMDCorrMergingEfficiency
//
#include "AliFMDMCCorrector.h"
#include <AliESDFMD.h>
#include <TAxis.h>
#include <TList.h>
#include <TMath.h>
#include "AliForwardCorrectionManager.h"
#include "AliFMDCorrSecondaryMap.h"
#include "AliFMDCorrVertexBias.h"
#include "AliLog.h"
#include <TH2D.h>
#include <TROOT.h>
#include <TProfile2D.h>
#include <iostream>
ClassImp(AliFMDMCCorrector)
#if 0
; // For Emacs
#endif 


//____________________________________________________________________
AliFMDMCCorrector::~AliFMDMCCorrector()
{
  // 
  // Destructor 
  //
  // if (fComps) fComps->Clear();
  // if (fFMD1i) delete fFMD1i;
  // if (fFMD2i) delete fFMD2i;
  // if (fFMD2o) delete fFMD2o;
  // if (fFMD3i) delete fFMD3i;
  // if (fFMD3o) delete fFMD3o;
}

//____________________________________________________________________
AliFMDMCCorrector&
AliFMDMCCorrector::operator=(const AliFMDMCCorrector& o)
{
  // 
  // Assignement operator
  // 
  // Parameters:
  //    o Object to assign from 
  // 
  // Return:
  //    Reference to this object
  //
  if (&o == this) return *this; 
  AliFMDCorrector::operator=(o);
  fSecondaryForMC = o.fSecondaryForMC;
  return *this;
}

//____________________________________________________________________
Bool_t
AliFMDMCCorrector::CorrectMC(AliForwardUtil::Histos& hists,
			       UShort_t                vtxbin)
{
  // 
  // Do the calculations 
  // 
  // Parameters:
  //    hists    Cache of histograms 
  //    vtxBin   Vertex bin 
  // 
  // Return:
  //    true on successs 
  //
  if ((!fUseSecondaryMap || !fSecondaryForMC) && fUseVertexBias) 
    return kTRUE;

  AliForwardCorrectionManager& fcm = AliForwardCorrectionManager::Instance();

  UShort_t uvb = 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');
      TH2D*       h  = hists.Get(d,r);


      if (fUseSecondaryMap && fSecondaryForMC) {
        TH2D*       bg = fcm.GetSecondaryMap()->GetCorrection(d,r,uvb);
        if (!bg) {
          AliWarning(Form("No secondary correction for FMDM%d%c in vertex bin %d",
              d, r, uvb));
          continue;
        }
        // Divide by primary/total ratio
        h->Divide(bg);
      }
      if (fUseVertexBias) {
        TH2D*       ef = fcm.GetVertexBias()->GetCorrection(r, uvb);
	if (!ef) {
          AliWarning(Form("No event vertex bias correction in vertex bin %d",
			uvb));
          continue;
        }
        // Divide by the event selection efficiency
        h->Divide(ef);
      }
    }
  }
  
  return kTRUE;
}

//____________________________________________________________________
void
AliFMDMCCorrector::SetupForData(const TAxis& eAxis)
{
  // 
  // Initialize this object 
  // 
  // Parameters:
  //    etaAxis Eta axis to use 
  //
  AliFMDCorrector::SetupForData(eAxis);

  fFMD1i = Make(1,'I',eAxis);
  fFMD2i = Make(2,'I',eAxis);
  fFMD2o = Make(2,'O',eAxis);
  fFMD3i = Make(3,'I',eAxis);
  fFMD3o = Make(3,'O',eAxis);

  fComps->Add(fFMD1i);
  fComps->Add(fFMD2i);
  fComps->Add(fFMD2o);
  fComps->Add(fFMD3i);
  fComps->Add(fFMD3o);
}

//____________________________________________________________________
TProfile2D*
AliFMDMCCorrector::Make(UShort_t d, Char_t r, 
				const TAxis& axis) const
{
  // 
  // MAke comparison profiles
  // 
  // Parameters:
  //    d     Detector 
  //    r     Ring 
  //    axis  Eta axis 
  // 
  // Return:
  //    Newly allocated profile object
  //
  TProfile2D* ret = new TProfile2D(Form("FMD%d%c_esd_vs_mc", d, r),
				   Form("ESD/MC signal for FMD%d%c", d, r),
				   axis.GetNbins(), 
				   axis.GetXmin(),
				   axis.GetXmax(), 
				   (r == 'I' || r == 'i') ? 20 : 40,
				   0, 2*TMath::Pi());
  ret->GetXaxis()->SetTitle("#eta");
  ret->GetYaxis()->SetTitle("#varphi [degrees]");
  ret->GetZaxis()->SetTitle("#LT primary density ESD/MC#GT");
  ret->SetDirectory(0);
  return ret;
}
//____________________________________________________________________
void
AliFMDMCCorrector::Fill(UShort_t d, Char_t r, TH2* esd, TH2* mc)
{
  // 
  // Fill comparison profiles
  // 
  // Parameters:
  //    d    Detector 
  //    r    Ring 
  //    esd  ESD histogram
  //    mc   MC histogram
  //
  if (!esd || !mc) return;
  TProfile2D* p = 0;
  switch (d) { 
  case 1:  p = fFMD1i;                                   break;
  case 2:  p = (r == 'I' || r == 'i' ? fFMD2i : fFMD2o); break;
  case 3:  p = (r == 'I' || r == 'i' ? fFMD3i : fFMD3o); break;
  }
  if (!p) return;

  for (Int_t iEta = 1; iEta <= esd->GetNbinsX(); iEta++) { 
    Double_t eta = esd->GetXaxis()->GetBinCenter(iEta);
    for (Int_t iPhi = 1; iPhi <= esd->GetNbinsY(); iPhi++) { 
      Double_t phi  = esd->GetYaxis()->GetBinCenter(iPhi);
      Double_t mEsd = esd->GetBinContent(iEta,iPhi);
      Double_t mMc  = mc->GetBinContent(iEta,iPhi);
      
      p->Fill(eta, phi, (mMc > 0 ? mEsd / mMc : 0));
    }
  }
}

//____________________________________________________________________
Bool_t
AliFMDMCCorrector::CompareResults(AliForwardUtil::Histos& esd,
					  AliForwardUtil::Histos& mc)
{
  // 
  // Compare the result of analysing the ESD for 
  // the inclusive charged particle density to analysing 
  // MC truth 
  // 
  // Parameters:
  //    esd 
  //    mc 
  // 
  // Return:
  //   true 
  //
  Fill(1, 'I', esd.Get(1,'I'), mc.Get(1,'I'));
  Fill(2, 'I', esd.Get(2,'I'), mc.Get(2,'I'));
  Fill(2, 'O', esd.Get(2,'O'), mc.Get(2,'O'));
  Fill(3, 'I', esd.Get(3,'I'), mc.Get(3,'I'));
  Fill(3, 'O', esd.Get(3,'O'), mc.Get(3,'O'));

  return kTRUE;
}

//____________________________________________________________________
void
AliFMDMCCorrector::CreateOutputObjects(TList* dir)
{
  // 
  // Output diagnostic histograms to directory 
  // 
  // Parameters:
  //    dir List to write in
  //  
  AliFMDCorrector::CreateOutputObjects(dir);
  TList* d = static_cast<TList*>(dir->FindObject(GetName()));

  fComps = new TList;
  fComps->SetName("esd_mc_comparison");
  d->Add(fComps);
}
#define PFB(N,FLAG)				\
  do {									\
    AliForwardUtil::PrintName(N);					\
    std::cout << std::boolalpha << (FLAG) << std::noboolalpha << std::endl; \
  } while(false)

//____________________________________________________________________
void
AliFMDMCCorrector::Print(Option_t* option) const
{
  // 
  // Print information
  // Parameters:
  //    option Not used 
  //
  AliFMDCorrector::Print(option);
  gROOT->IncreaseDirLevel();
  PFB("Use sec. map on MC", fSecondaryForMC);
  gROOT->DecreaseDirLevel();
}

//____________________________________________________________________
//
// EOF
//
	  


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