ROOT logo
//
// Class to do the sharing correction for MC data.
//
// Input: 
//    - AliESDFMD object  - from reconstruction
//    - Kinematics
//    - Track-References
//
// Output: 
//    - AliESDFMD object  - copy of input, but with signals merged 
//
// Corrections used: 
//    - ELoss fits
//
// Histograms: 
//    - For each ring (FMD1i, FMD2i, FMD2o, FMD3i, FMD3o) the distribution of 
//      signals before and after the filter.  
//    - For each ring (see above), an array of distributions of number of 
//      hit strips for each vertex bin (if enabled - see Init method)
// 
#include "AliFMDMCSharingFilter.h"
#include <AliESDFMD.h>
#include <AliMCEvent.h>
#include <AliTrackReference.h>
#include <AliStack.h>
#include <TAxis.h>
#include <TList.h>
#include <TH1.h>
#include <TMath.h>
#include "AliFMDStripIndex.h"
#include "AliFMDFloatMap.h"
#include <AliLog.h>
#include <TROOT.h>
#include <iostream>
#include <iomanip>

ClassImp(AliFMDMCSharingFilter)
#if 0
; // This is for Emacs
#endif 

//____________________________________________________________________
AliFMDMCSharingFilter::AliFMDMCSharingFilter(const char* title)
  : AliFMDSharingFilter(title), 
    fTrackDensity(title),
    fFMD1i(0),
    fFMD2i(0),
    fFMD2o(0),
    fFMD3i(0),
    fFMD3o(0)// , fOperComp(0)
{
  // 
  // Constructor 
  // 
  // Parameters:
  //    title Title of object  - not significant 
  //
  fFMD1i = new TH2D("FMD1i_corr", "Merged vs MC", 21, -.5, 20.5, 300, 0, 15);
  fFMD2i = new TH2D("FMD2i_corr", "Merged vs MC", 21, -.5, 20.5, 300, 0, 15);
  fFMD2o = new TH2D("FMD2o_corr", "Merged vs MC", 21, -.5, 20.5, 300, 0, 15);
  fFMD3i = new TH2D("FMD3i_corr", "Merged vs MC", 21, -.5, 20.5, 300, 0, 15);
  fFMD3o = new TH2D("FMD3o_corr", "Merged vs MC", 21, -.5, 20.5, 300, 0, 15);
  fFMD1i->SetYTitle("#Delta E/#Delta_{mip} (ESD)");
  fFMD1i->SetXTitle("Hits (MC)");
  fFMD2i->SetYTitle("#Delta E/#Delta_{mip} (ESD)");
  fFMD2i->SetXTitle("Hits (MC)");
  fFMD2o->SetYTitle("#Delta E/#Delta_{mip} (ESD)");
  fFMD2o->SetXTitle("Hits (MC)");
  fFMD3i->SetYTitle("#Delta E/#Delta_{mip} (ESD)");
  fFMD3i->SetXTitle("Hits (MC)");
  fFMD3o->SetYTitle("#Delta E/#Delta_{mip} (ESD)");
  fFMD3o->SetXTitle("Hits (MC)");
  fFMD1i->SetDirectory(0);
  fFMD2i->SetDirectory(0);
  fFMD2o->SetDirectory(0);
  fFMD3i->SetDirectory(0);
  fFMD3o->SetDirectory(0);

#if 0
  fOper     = new AliFMDFloatMap(0,0,0,0);
  fOperComp = new TH2I("operComp", "Operation vs # track refs", 
		       kMergedInto, kNone-.5, kMergedInto+.5, 
		       20, -.5, 19.5);
  fOperComp->SetXTitle("Operation");
  fOperComp->SetYTitle("# of track refs in sector");
  fOperComp->SetZTitle("Observations");
  fOperComp->GetXaxis()->SetBinLabel(kNone,            "None");
  fOperComp->GetXaxis()->SetBinLabel(kCandidate,       "Candidate");
  fOperComp->GetXaxis()->SetBinLabel(kMergedWithOther, "Merged w/other");
  fOperComp->GetXaxis()->SetBinLabel(kMergedInto,      "Merged into");
  fOperComp->SetDirectory(0);
#endif
}

//____________________________________________________________________
AliFMDMCSharingFilter::AliFMDMCSharingFilter(const AliFMDMCSharingFilter& o)
  : AliFMDSharingFilter(o), 
    fTrackDensity(o.fTrackDensity),
    fFMD1i(o.fFMD1i),
    fFMD2i(o.fFMD2i),
    fFMD2o(o.fFMD2o),
    fFMD3i(o.fFMD3i),
    fFMD3o(o.fFMD3o) // ,  fOperComp(o.fOperComp)
{
  // 
  // Copy constructor 
  // 
  // Parameters:
  //    o Object to copy from 
  //
}

//____________________________________________________________________
AliFMDMCSharingFilter::~AliFMDMCSharingFilter()
{
  // 
  // Destructor
  //
}

//____________________________________________________________________
AliFMDMCSharingFilter&
AliFMDMCSharingFilter::operator=(const AliFMDMCSharingFilter& o)
{
  // 
  // Assignment operator 
  // 
  // Parameters:
  //    o Object to assign from 
  // 
  // Return:
  //    Reference to this 
  //
  AliFMDSharingFilter::operator=(o);
  fTrackDensity = o.fTrackDensity;
  return *this;
}


//____________________________________________________________________
Bool_t
AliFMDMCSharingFilter::FilterMC(const AliESDFMD&  input, 
				const AliMCEvent& event,
				Double_t          vz,
				AliESDFMD&        output, 
				TH2D*             primary)
{
  // 
  // Filter the input kinematics and track references, using 
  // some of the ESD information
  // 
  // Parameters:
  //    input   Input ESD event
  //    event   Input MC event
  //    vz      Vertex position 
  //    output  Output ESD-like object
  //    primary Per-event histogram of primaries 
  //
  // Return:
  //    True on succes, false otherwise 
  //
  output.Clear();


  fTrackDensity.Calculate(input, event, vz, output, primary);

  return kTRUE;
}

//____________________________________________________________________
void
AliFMDMCSharingFilter::CompareResults(const AliESDFMD&  esd, 
				      const AliESDFMD&  mc)
{
  // 
  // Compare the result of merging to the monte-carlo truth.  This
  // fills the correlation histograms
  // 
  // Parameters:
  //    esd  ESD after sharing correction
  //    mc   MC ESD 
  //

  // Copy eta values to output 
  for (UShort_t d = 1; d <= 3; d++) { 
    UShort_t nq = (d == 1 ? 1 : 2);
    for (UShort_t q = 0; q < nq; q++) {
      Char_t   r  = (q == 0 ? 'I' : 'O');
      UShort_t ns = (q == 0 ?  20 :  40);
      UShort_t nt = (q == 0 ? 512 : 256);
      TH2*     co = 0;
      switch (d) { 
      case 1: co = fFMD1i; break;
      case 2: co = (q == 0 ? fFMD2i : fFMD2o); break;
      case 3: co = (q == 0 ? fFMD3i : fFMD3o); break;
      }

      for (UShort_t s = 0; s < ns; s++) {
	for (UShort_t t = 0; t < nt; t++) { 
	  Float_t mEsd = esd.Multiplicity(d, r, s, t);
	  Float_t mMc  = mc.Multiplicity(d, r, s, t);

	  co->Fill(mMc, mEsd);
	} 
      }
    }
  }
}
  
//____________________________________________________________________
void
AliFMDMCSharingFilter::CreateOutputObjects(TList* dir)
{
  // 
  // Define the output histograms.  These are put in a sub list of the
  // passed list.   The histograms are merged before the parent task calls 
  // AliAnalysisTaskSE::Terminate 
  // 
  // Parameters:
  //    dir Directory to add to 
  //
  AliFMDSharingFilter::CreateOutputObjects(dir);
  TList* d = static_cast<TList*>(dir->FindObject(GetName()));
  TList* cd = new TList;
  cd->SetOwner();
  cd->SetName("esd_mc_comparion");
  d->Add(cd);
  cd->Add(fFMD1i);
  cd->Add(fFMD2i);
  cd->Add(fFMD2o);
  cd->Add(fFMD3i);
  cd->Add(fFMD3o);
  // cd->Add(fOperComp);
  fTrackDensity.CreateOutputObjects(d);
}

//____________________________________________________________________
void
AliFMDMCSharingFilter::Terminate(const TList* dir, TList* output, Int_t nEvents)
{
  // 
  // Scale the histograms to the total number of events 
  // 
  // Parameters:
  //    dir     Where the output is 
  //    nEvents Number of events 
  //
  AliFMDSharingFilter::Terminate(dir, output, nEvents);
}

//____________________________________________________________________
void
AliFMDMCSharingFilter::SetDebug(Int_t dbg)
{
  AliFMDSharingFilter::SetDebug(dbg);
  fTrackDensity.SetDebug(dbg > 2);
}

//____________________________________________________________________
void
AliFMDMCSharingFilter::Print(Option_t* option) const
{
  // 
  // Print information
  // 
  // Parameters:
  //    option Not used 
  //
  AliFMDSharingFilter::Print(option);
  gROOT->IncreaseDirLevel();
  fTrackDensity.Print(option);
  gROOT->DecreaseDirLevel();

}

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