ROOT logo
#include "AliJEfficiency.h"
#include <TSystem.h>
#include <iostream>
#include <TGrid.h>

// AliJEfficiency
// ...
// ...
// ...
// ...
// TODO

using namespace std;

AliJEfficiency::AliJEfficiency():
  fMode(kAuto),
  fPeriod(-1),
  fTrackCut(),
  fRunTable(),
  fDataPath(""),
  fName(""),
  fPeriodStr(""),
  fMCPeriodStr(""),
  fRunNumber(0),
  fTag(""),
  fInputRootName(""),
  fInputRoot(NULL),
  fCentBin(0x0)
{

}

AliJEfficiency::AliJEfficiency(const AliJEfficiency& obj) :
  fMode(obj.fMode),
  fPeriod(obj.fPeriod),
  fTrackCut(obj.fTrackCut),
  fRunTable(obj.fRunTable),
  fDataPath(obj.fDataPath),
  fName(obj.fName),
  fPeriodStr(obj.fPeriodStr),
  fMCPeriodStr(obj.fMCPeriodStr),
  fRunNumber(obj.fRunNumber),
  fTag(obj.fTag),
  fInputRootName(obj.fInputRootName),
  fInputRoot(obj.fInputRoot),
  fCentBin(obj.fCentBin)
{
  // copy constructor TODO: handling of pointer members
  JUNUSED(obj);
}

AliJEfficiency& AliJEfficiency::operator=(const AliJEfficiency& obj){
  // equal sign operator TODO: content
  JUNUSED(obj);
  return *this;
}

TString AliJEfficiency::GetEffName() {
  /*
     1. kNotUse : no Load, efficiency is 1 always
     2. has fInputRootName : Load that or crash
     3. has fName : Load fName [+runnumber] or crash
     4. has runnumber : Find Good MC period from AliJRunTable, or crash
     3. has period : Find Good MC period from AliJRunTable, or crash

*/
  if( fMode == kNotUse ) {
    cout<<"J_WARNING : Eff Mode is \"NOTUSE\". eff is 1 !!!"<<endl;
    return "";
  }

  //==== 1. fInputRootName
  //==== 2. Eff-fName-fPeriod-fMCPeriod-fRunNumber-fTag.root
  if( fInputRootName.Length() == 0 ){

    //==== SELECT Period : fPeriod, fPeriodStr
    // 1. Use fPeriodStr if it is
    // 2. Use fPeriod    if it is
    // 3. Use RunNumber
    if( fPeriodStr.Length() == 0 ){
      if( fRunNumber > 0  && fPeriod < 0 ) {
        fPeriod = fRunTable.GetRunNumberToPeriod( fRunNumber );
      }
      fPeriodStr = fRunTable.GetPeriodName( fPeriod );
    }
    //==== Select McPeriod
    //==== 1. Use fMCPeriodStr
    //==== 2. Use fPeriod
    if( fMCPeriodStr.Length() == 0 ){
      fMCPeriodStr =  fRunTable.GetMCPeriod( fPeriod );
    }
    //==== Select fRunNumber
    //==== MODE 1 : runnumber = 0;
    if( fMode == kPeriod ) fRunNumber = 0;
    else if( fRunNumber < 0 ){
      cout<< "J_ERROR : Runumber must be >=0. Input runnumber is "<<fRunNumber<<endl;
      gSystem->Exit(1);
    }

    fInputRootName = Form("Eff-%s-%s-%s-%d-%s.root", fName.Data(), fPeriodStr.Data(), fMCPeriodStr.Data(), int(fRunNumber), fTag.Data() );
  }

  return fInputRootName;
}

TString AliJEfficiency::GetEffFullName() {
  GetEffName();
  fInputRootName = fDataPath + "/" + fInputRootName;
  return fInputRootName;
}


bool AliJEfficiency::Load(){
  // Load Efficiency File based on fMode
  if( fMode == kNotUse ) {
    cout<<"J_WARNING : Eff Mode is \"NOTUSE\". eff is 1 !!!"<<endl;
    return true;
  }
  GetEffFullName();
  if (TString(fInputRootName).BeginsWith("alien:"))  TGrid::Connect("alien:");
  fInputRoot = TFile::Open( fInputRootName);
  //fInputRoot = new TFile( fInputRootName,"READ");
  if( !fInputRoot ) {
	  cout<< "J_ERROR : "<<fInputRootName <<" is not exist"<<endl;
	  gSystem->Exit(1);
  }

  //fEffDir[0] = (TDirectory*)fInputRoot->Get("EffRE");
  ///fEffDir[1] = (TDirectory*)fInputRoot->Get("EffMC");
  fEffDir[2] = (TDirectory*)fInputRoot->Get("Efficiency");
  //iif( fEffDir[0] && fEffDir[1] && fEffDir[2] )
  if( !fEffDir[2] )
  {
	  cout<< "J_ERROR : Directory EFF is not exist"<<endl;
	  gSystem->Exit(1);
  }

  fCentBin = (TAxis*)fEffDir[2]->Get("CentralityBin");
  if( !fCentBin ){
	  cout<< "J_ERROR : No CentralityBin in directory"<<endl;
	  gSystem->Exit(1);
  }


  int nVtx = 1;
  int nCentBin = fCentBin->GetNbins();
  for( int ivtx=0;ivtx<nVtx;ivtx++ ){
	  for( int icent=0;icent<nCentBin;icent++ ){
		  for( int icut=0;icut<fTrackCut.GetNCut();icut++ ){
			  fCorrection[ivtx][icent][icut] 
				  = (TGraphErrors*) fEffDir[2]->Get(Form("gCor%02d%02d%02d", ivtx,icent,icut));
			  //cout<<"J_LOG : Eff graph - "<<Form("gCor%02d%02d%02d", ivtx,icent,icut)<<" - "<<g<<endl;
		  }
	  }
  }
  cout<<"J_LOG : Eff file is "<<fInputRootName<<endl;
  cout<<"J_LOG : Eff Cent Bins are ";
  for( int i=0;i<=nCentBin;i++ ){
	  cout<<fCentBin->GetXbins()->At(i)<<" ";
  }
  cout<<endl;
  return true;
}

double AliJEfficiency::GetCorrection( double pt, int icut , double cent ) const {
	// TODO : Function mode
	if( fMode == kNotUse ) return 1;
	int icent = fCentBin->FindBin( cent ) -1 ;
	if( icent < 0 || icent > fCentBin->GetNbins()-1 ) {
		cout<<"J_WARNING : Centrality "<<cent<<" is out of CentBinBorder"<<endl;
		return 1;
	}
	// TODO error check for icent;
	int ivtx = 0;
	if( ! fCorrection[ivtx][icent][icut] ) {
		cout<<"J_WARNING : No Eff Info "<<pt<<"\t"<<icut<<"\t"<<cent<<"\t"<<icent<<endl;
		return 1;
	}
	TGraphErrors * gr = fCorrection[ivtx][icent][icut];
	//=== TEMPERORY SETTING. IT will be removed soon.
	if( pt > 30 ) pt = 30; // Getting eff of 30GeV for lager pt
	double cor = gr->Eval(pt);
	if ( cor < 0.2 ) cor = 0.2;
	return cor;
}

void AliJEfficiency::Write(){
	// Write Efficiency information to root file 
	if( fMode == kNotUse ){
		cout<<"J_LOG : Efficiency mode is \"NotUse\", nothing will be Written" <<endl;
		return;
	}
	cout<<"J_LOG : Efficiency Write to "<<gDirectory->GetName()<<endl;
	TDirectory *cwd = gDirectory;
	TDirectory *eff = gDirectory->mkdir("Efficiency");
	eff->cd();
	int nVtx = 1;
	int nCentBin = fCentBin->GetNbins();
	cout<<nCentBin<<endl;
	for( int ivtx=0;ivtx<nVtx;ivtx++ ){
		for( int icent=0;icent<nCentBin;icent++ ){
			for( int icut=0;icut<fTrackCut.GetNCut();icut++ ){
				cout<<fCorrection[ivtx][icent][icut]<<endl;
				if( !fCorrection[ivtx][icent][icut]) continue;
				fCorrection[ivtx][icent][icut]->Write(Form("gCor%02d%02d%02d", ivtx,icent,icut));
			}
		}
	}
	fCentBin->Write("CentralityBin");
	cwd->cd();
}

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