ROOT logo
////////////////////////////////////////////////////////////////////////////////
//                                                                            //
// AliFemtoCutMonitorParticleEtCorr - the cut monitor for particles           //
// which saves particles' et histogram and makes the bin-by-bin correlation   //
//                                                                            //
// Author: Adam.Kisiel@cern.ch                                                //
//                                                                            //
////////////////////////////////////////////////////////////////////////////////
#include "AliFemtoCutMonitorParticleEtCorr.h"
#include "AliFemtoModelHiddenInfo.h"
#include <TH1D.h>
#include <TH2D.h>
#include <TList.h>
#include <TMath.h>

AliFemtoCutMonitorParticleEtCorr::AliFemtoCutMonitorParticleEtCorr():
  AliFemtoCutMonitor(),
  fPhiBins(60),
  fPtPerPhi(0),     
  fPtCovPerPhi(0),
  fPtMultPerPhi(0),
  fNEventsProcessed(0)
{
  // Default constructor
  for (int ib=0; ib<200; ib++) {
    fPtSumEvent[ib] = 0; 
    fMultSumEvent[ib] = 0;
  }
}

AliFemtoCutMonitorParticleEtCorr::AliFemtoCutMonitorParticleEtCorr(const char *aName, int aPhiBins):
  AliFemtoCutMonitor(),
  fPhiBins(aPhiBins),
  fPtPerPhi(0),     
  fPtCovPerPhi(0),
  fPtMultPerPhi(0),
  fNEventsProcessed(0)
{
  // Normal constructor
  char name[200];
  snprintf(name, 200, "EtCorrAvgPt%s", aName);
  fPtPerPhi = new TH1D(name, "Average Pt Per Phi", aPhiBins, -0.5, aPhiBins-0.5);
  snprintf(name, 200, "EtCorrMult%s", aName);
  fPtMultPerPhi = new TH2D(name, "Multiplicity Per Phi", aPhiBins, -0.5, aPhiBins-0.5, aPhiBins, -0.5, aPhiBins-0.5);
  snprintf(name, 200, "EtCorrAvgPtCov%s", aName);
  fPtCovPerPhi = new TH2D(name, "Covariance of Average Pt Per Phi", aPhiBins, -0.5, aPhiBins-0.5, aPhiBins, -0.5, aPhiBins-0.5);

  fPtPerPhi->Sumw2();
  fPtCovPerPhi->Sumw2();
  fPtMultPerPhi->Sumw2();
  fPhiBins = aPhiBins;

  for (int ib=0; ib<200; ib++) {
    fPtSumEvent[ib] = 0; 
    fMultSumEvent[ib] = 0;
  }

}

AliFemtoCutMonitorParticleEtCorr::AliFemtoCutMonitorParticleEtCorr(const AliFemtoCutMonitorParticleEtCorr &aCut):
  AliFemtoCutMonitor(),
  fPhiBins(0),
  fPtPerPhi(0),     
  fPtCovPerPhi(0),
  fPtMultPerPhi(0),
  fNEventsProcessed(0)
{
  // copy constructor
  if (fPtCovPerPhi) delete fPtCovPerPhi;
  fPtCovPerPhi = new TH2D(*aCut.fPtCovPerPhi);
  if (fPtPerPhi) delete fPtPerPhi;
  fPtPerPhi = new TH1D(*aCut.fPtPerPhi);
  if (fPtMultPerPhi) delete fPtMultPerPhi;
  fPtMultPerPhi = new TH2D(*aCut.fPtMultPerPhi);
  fPhiBins = aCut.fPhiBins;
  fNEventsProcessed = aCut.fNEventsProcessed;

  for (int ib=0; ib<200; ib++) {
    fPtSumEvent[ib] = 0; 
    fMultSumEvent[ib] = 0;
  }
}

AliFemtoCutMonitorParticleEtCorr::~AliFemtoCutMonitorParticleEtCorr()
{
  // Destructor
  delete fPtPerPhi;
  delete fPtMultPerPhi;
  delete fPtCovPerPhi;
}

AliFemtoCutMonitorParticleEtCorr& AliFemtoCutMonitorParticleEtCorr::operator=(const AliFemtoCutMonitorParticleEtCorr& aCut)
{
  // assignment operator
  if (this == &aCut) 
    return *this;

  if (fPtCovPerPhi) delete fPtCovPerPhi;
  fPtCovPerPhi = new TH2D(*aCut.fPtCovPerPhi);
  if (fPtPerPhi) delete fPtPerPhi;
  fPtPerPhi = new TH1D(*aCut.fPtPerPhi);
  if (fPtMultPerPhi) delete fPtMultPerPhi;
  fPtMultPerPhi = new TH2D(*aCut.fPtMultPerPhi);
  fPhiBins = aCut.fPhiBins;
  fNEventsProcessed = aCut.fNEventsProcessed;
  
  return *this;
}

AliFemtoString AliFemtoCutMonitorParticleEtCorr::Report(){ 
  // Prepare report from the execution
  string stemp = "*** AliFemtoCutMonitorParticleEtCorr report"; 
  AliFemtoString returnThis = stemp;
  return returnThis; 
}

void AliFemtoCutMonitorParticleEtCorr::Fill(const AliFemtoTrack* aTrack)
{
  // Fill in the monitor histograms with the values from the current track
  //  float tEnergy = ::sqrt(aTrack->P().mag2()+fMass*fMass);
  //  float tRapidity = 0.5*::log((tEnergy+aTrack->P().z())/(tEnergy-aTrack->P().z()));
  float tPt = ::sqrt((aTrack->P().x())*(aTrack->P().x())+(aTrack->P().y())*(aTrack->P().y()));
  //  float tEta = -TMath::Log(TMath::Tan(aTrack->P().theta()/2.0));
  float tPhi = aTrack->P().Phi();
  Double_t tPiTwo = TMath::Pi()*2;

  while (tPhi > tPiTwo) tPhi -= tPiTwo;
  while (tPhi < 0) tPhi += tPiTwo;

  int nbin = (int) floor(tPhi * fPhiBins / tPiTwo);
  fPtSumEvent[nbin] += tPt;
  fMultSumEvent[nbin] += 1;
}

void AliFemtoCutMonitorParticleEtCorr::Write()
{
  // Write out the relevant histograms
  fPtPerPhi->Write();
  fPtCovPerPhi->Write();
  fPtMultPerPhi->Write();
}

TList *AliFemtoCutMonitorParticleEtCorr::GetOutputList()
{
  TList *tOutputList = new TList();
  tOutputList->Add(fPtPerPhi);
  tOutputList->Add(fPtCovPerPhi);
  tOutputList->Add(fPtMultPerPhi);

  return tOutputList;
}

void AliFemtoCutMonitorParticleEtCorr::EventBegin(const AliFemtoEvent* aEvent)
{
  if (aEvent)
    for (int iter=0; iter<fPhiBins; iter++) {
      fPtSumEvent[iter] = 0;
      fMultSumEvent[iter] = 0;
    }
}

void AliFemtoCutMonitorParticleEtCorr::EventEnd(const AliFemtoEvent* aEvent)
{
  if (aEvent) {
    for (int ispt=0; ispt<fPhiBins; ispt++) {
      fPtPerPhi->Fill(ispt, fPtSumEvent[ispt]);
      for (int ispt2=0; ispt2<fPhiBins; ispt2++) {
	fPtCovPerPhi->Fill(ispt, ispt2, fPtSumEvent[ispt]*fPtSumEvent[ispt2]);
	fPtMultPerPhi->Fill(ispt, ispt2, fMultSumEvent[ispt]*fMultSumEvent[ispt2]);
      }
    }
    fNEventsProcessed++;
  }
}

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