ROOT logo

/* $Id$ */

//===================================================================
//  Class AliQuarkoniaEfficiency                               
//
//  This class will provide the quarkonia reconstruction efficiency 
//  in ALICE without acceptance consideration.
//
//
//  Reconstruction efficiency has been evaluated by means of a flat
//  y and pt distribution of quarkonia in -4 < y < -2.5, 
//  0 < pt < 20 GeV/c. Weights have been used to evaluate the
//  reconstruction efficiency in different parameterizations.
//
//  Beware that efficiency histos are preliminary.
//  Just Jpsi, Dimuon, UnlikePair trigger
//  efficiencies should be considered.
//
//
//  Example:
//   Double_t eff,error;
//   AliQuarkoniaEfficiency * JPsiEff = new AliQuarkoniaEfficiency();
//   JPsiEff->Init();
//   JPsiEff->GetEfficiency(Rapidity,Pt,eff,error);
//   printf(" eff = %2.2e  error %2.2e \n",eff,error);
//                                                          
//                                                              
//  Subatech 2006
//===================================================================

// Root 
#include "TFile.h"
#include "TH2.h"

// AliRoot includes
#include "AliQuarkoniaEfficiency.h"
#include "AliLog.h"


//_______________________________________________________________________
AliQuarkoniaEfficiency::AliQuarkoniaEfficiency(Int_t quarkoniaResonance, Int_t decayChannel,
					       Int_t simParameterization):
  fEfficiencyFileName("QuarkoniaEfficiency.root"),
  fQuarkoniaResonance(quarkoniaResonance),     
  fDecayChannel(decayChannel),           
  fParameterization(simParameterization),  
  fTriggerType(kPairUnlikeApt),
  fTrigger(kFALSE),
  fEfficiency(0x0)
{
  // Constructor
}

//_______________________________________________________________________
AliQuarkoniaEfficiency::~AliQuarkoniaEfficiency()
{
  // Destructor
  delete fEfficiency;
}

//_______________________________________________________________________
void AliQuarkoniaEfficiency::Init()
{
  // Initialize method
  switch (fQuarkoniaResonance)  {  
  case kJpsi:
    SetTitle("Jpsi");
    break;
  case kPsiP:
    SetTitle("PsiP");
    break;
  case kUpsilon:
    SetTitle("Upsilon");
    break;
  case kUpsilonP:
    SetTitle("UpsilonP");
    break;
  case kUpsilonPP:
    SetTitle("UpsilonPP");
    break;
  case kOmega:
    SetTitle("Omega");
    break;
  case kPhi:
    SetTitle("Phi");
    break;
  }

  switch (fDecayChannel) {
  case kDimuon:
    SetName("Dimuon");
    break;
  case kDielectron:
    SetName("Dielectron");
    break;
  }

  const char *param=0;
  switch (fParameterization){
  case kFlat:
    param = "Flat";
    break;
  case kCDFscaled:
    param = "CDFscaled";
    break;
  case kCDFscaledPP:
    param = "CDFscaledPP";
    break;
  }
  
  const char *trig=0;
  switch (fTriggerType){
  case kSinglePlusLpt:
    trig = "SinglePlusLpt";
    break;
  case kSinglePlusHpt: 
    trig = "SinglePlusHpt";
    break;
  case kSinglePlusApt:
    trig = "SinglePlusApt";
    break;    
  case kSingleMinusLpt:
    trig = "SingleMinusLpt";
    break;    
  case kSingleMinusHpt:
    trig = "SingleMinusHpt";
    break;    
  case kSingleMinusApt:
    trig = "SingleMinusApt";
    break;    
  case kSingleUndefLpt:
    trig = "SingleUndefLpt";
    break;    
  case kSingleUndefHpt:
    trig = "SingleUndefHpt";
    break;    
  case kSingleUndefApt:
    trig = "SingleUndefApt";
    break;    
  case kPairUnlikeLpt:
    trig = "PairUnlikeLpt";
    break;    
  case kPairUnlikeHpt:
    trig = "PairUnlikeHpt";
    break;    
  case kPairUnlikeApt:
    trig = "PairUnlikeApt";
    break;    
  case kPairLikeLpt:
    trig = "PairLikeLpt";
    break;    
  case kPairLikeHpt:
    trig = "PairLikeHpt";
    break;    
  case kPairLikeApt:
    trig = "PairLikeApt";
    break;    
  }


  if(!fEfficiency) delete fEfficiency; 

  TFile efficiencyFile(fEfficiencyFileName);
  if ( efficiencyFile.IsOpen() ) {

    char quarkoniaDir[15];
    snprintf(quarkoniaDir,15,"%s",GetTitle());
    if (! efficiencyFile.cd(quarkoniaDir) ){
      AliError(Form("Directory %s not found in file %s \n Efficiency data for quarkonia %s and channel %s not found ",
		    quarkoniaDir,fEfficiencyFileName.Data(),GetTitle(),GetName() ));
      return;
    }
    
    char histosDir[30];
    snprintf(histosDir,30,"%s/%s_%s_%s",quarkoniaDir,GetTitle(),GetName(),param);
    if(! efficiencyFile.cd(histosDir) ){
      AliError(Form("Subdirectory %s/%s not found in file %s \n Efficiency data for quarkonia %s and channel %s not found ",
		    quarkoniaDir,histosDir,fEfficiencyFileName.Data(),GetTitle(),GetName() ));
      return;
    }

    char histoname[50];
    if(fTrigger) snprintf(histoname,50,"h%sEfficiencyPtRap_%s",GetTitle(),trig);
    else snprintf(histoname,50,"h%sEfficiencyPtRap",GetTitle());
    char histonameposition[99];
    snprintf(histonameposition,99,"%s/%s",histosDir,histoname);
    fEfficiency = (TH2F*)efficiencyFile.Get(histonameposition);

    if ( !fEfficiency ) {
      AliError(Form("Histo %s not found in file %s \n Efficiency data for quarkonia %s and channel %s not found",
		    histoname, fEfficiencyFileName.Data(), GetTitle(), GetName() ));
    }
    else {
      fEfficiency->SetDirectory(0);
    }
    efficiencyFile.Close();

  }
  else {
    AliError(Form("File %s not found",fEfficiencyFileName.Data()));
  }

}

//_______________________________________________________________________
TH2F*  AliQuarkoniaEfficiency::GetEfficiencyHisto() const
{
  // Returns the efficiency histogram
  if (fEfficiency) return fEfficiency;
  else {
    AliError(Form("Efficiency data for quarkonia %s and channel %s not found",GetTitle(),GetName()));
    return 0x0;
  }
}

//_______________________________________________________________________
void  AliQuarkoniaEfficiency::GetEfficiency(Float_t rap, Float_t pT, Double_t &eff, Double_t &error)
{
  // Evaluates the efficiency for a given (y,Pt) of the quarkonia
  Int_t binx=0;
  Int_t biny=0;
  
  if (!fEfficiency) {
    AliError(Form("Efficiency data for quarkonia %s and channel %s not found",GetTitle(),GetName()));
  }
  else {
    if ( rap < (fEfficiency->GetXaxis())->GetXmin()  ||  
	 rap > (fEfficiency->GetXaxis())->GetXmax()  ||
	 pT  < (fEfficiency->GetYaxis())->GetXmin()  ||  
         pT  > (fEfficiency->GetYaxis())->GetXmax()   ) {
      AliInfo("Values out of range");
      eff   = 0.;
      error = 0.;
    }
    else  { 
      binx  = fEfficiency->GetXaxis()->FindBin(rap);  
      biny  = fEfficiency->GetYaxis()->FindBin(pT);
      eff   = fEfficiency->GetBinContent(binx,biny);
      error = fEfficiency->GetBinError(binx,biny);
    }
  } 
}
 AliQuarkoniaEfficiency.cxx:1
 AliQuarkoniaEfficiency.cxx:2
 AliQuarkoniaEfficiency.cxx:3
 AliQuarkoniaEfficiency.cxx:4
 AliQuarkoniaEfficiency.cxx:5
 AliQuarkoniaEfficiency.cxx:6
 AliQuarkoniaEfficiency.cxx:7
 AliQuarkoniaEfficiency.cxx:8
 AliQuarkoniaEfficiency.cxx:9
 AliQuarkoniaEfficiency.cxx:10
 AliQuarkoniaEfficiency.cxx:11
 AliQuarkoniaEfficiency.cxx:12
 AliQuarkoniaEfficiency.cxx:13
 AliQuarkoniaEfficiency.cxx:14
 AliQuarkoniaEfficiency.cxx:15
 AliQuarkoniaEfficiency.cxx:16
 AliQuarkoniaEfficiency.cxx:17
 AliQuarkoniaEfficiency.cxx:18
 AliQuarkoniaEfficiency.cxx:19
 AliQuarkoniaEfficiency.cxx:20
 AliQuarkoniaEfficiency.cxx:21
 AliQuarkoniaEfficiency.cxx:22
 AliQuarkoniaEfficiency.cxx:23
 AliQuarkoniaEfficiency.cxx:24
 AliQuarkoniaEfficiency.cxx:25
 AliQuarkoniaEfficiency.cxx:26
 AliQuarkoniaEfficiency.cxx:27
 AliQuarkoniaEfficiency.cxx:28
 AliQuarkoniaEfficiency.cxx:29
 AliQuarkoniaEfficiency.cxx:30
 AliQuarkoniaEfficiency.cxx:31
 AliQuarkoniaEfficiency.cxx:32
 AliQuarkoniaEfficiency.cxx:33
 AliQuarkoniaEfficiency.cxx:34
 AliQuarkoniaEfficiency.cxx:35
 AliQuarkoniaEfficiency.cxx:36
 AliQuarkoniaEfficiency.cxx:37
 AliQuarkoniaEfficiency.cxx:38
 AliQuarkoniaEfficiency.cxx:39
 AliQuarkoniaEfficiency.cxx:40
 AliQuarkoniaEfficiency.cxx:41
 AliQuarkoniaEfficiency.cxx:42
 AliQuarkoniaEfficiency.cxx:43
 AliQuarkoniaEfficiency.cxx:44
 AliQuarkoniaEfficiency.cxx:45
 AliQuarkoniaEfficiency.cxx:46
 AliQuarkoniaEfficiency.cxx:47
 AliQuarkoniaEfficiency.cxx:48
 AliQuarkoniaEfficiency.cxx:49
 AliQuarkoniaEfficiency.cxx:50
 AliQuarkoniaEfficiency.cxx:51
 AliQuarkoniaEfficiency.cxx:52
 AliQuarkoniaEfficiency.cxx:53
 AliQuarkoniaEfficiency.cxx:54
 AliQuarkoniaEfficiency.cxx:55
 AliQuarkoniaEfficiency.cxx:56
 AliQuarkoniaEfficiency.cxx:57
 AliQuarkoniaEfficiency.cxx:58
 AliQuarkoniaEfficiency.cxx:59
 AliQuarkoniaEfficiency.cxx:60
 AliQuarkoniaEfficiency.cxx:61
 AliQuarkoniaEfficiency.cxx:62
 AliQuarkoniaEfficiency.cxx:63
 AliQuarkoniaEfficiency.cxx:64
 AliQuarkoniaEfficiency.cxx:65
 AliQuarkoniaEfficiency.cxx:66
 AliQuarkoniaEfficiency.cxx:67
 AliQuarkoniaEfficiency.cxx:68
 AliQuarkoniaEfficiency.cxx:69
 AliQuarkoniaEfficiency.cxx:70
 AliQuarkoniaEfficiency.cxx:71
 AliQuarkoniaEfficiency.cxx:72
 AliQuarkoniaEfficiency.cxx:73
 AliQuarkoniaEfficiency.cxx:74
 AliQuarkoniaEfficiency.cxx:75
 AliQuarkoniaEfficiency.cxx:76
 AliQuarkoniaEfficiency.cxx:77
 AliQuarkoniaEfficiency.cxx:78
 AliQuarkoniaEfficiency.cxx:79
 AliQuarkoniaEfficiency.cxx:80
 AliQuarkoniaEfficiency.cxx:81
 AliQuarkoniaEfficiency.cxx:82
 AliQuarkoniaEfficiency.cxx:83
 AliQuarkoniaEfficiency.cxx:84
 AliQuarkoniaEfficiency.cxx:85
 AliQuarkoniaEfficiency.cxx:86
 AliQuarkoniaEfficiency.cxx:87
 AliQuarkoniaEfficiency.cxx:88
 AliQuarkoniaEfficiency.cxx:89
 AliQuarkoniaEfficiency.cxx:90
 AliQuarkoniaEfficiency.cxx:91
 AliQuarkoniaEfficiency.cxx:92
 AliQuarkoniaEfficiency.cxx:93
 AliQuarkoniaEfficiency.cxx:94
 AliQuarkoniaEfficiency.cxx:95
 AliQuarkoniaEfficiency.cxx:96
 AliQuarkoniaEfficiency.cxx:97
 AliQuarkoniaEfficiency.cxx:98
 AliQuarkoniaEfficiency.cxx:99
 AliQuarkoniaEfficiency.cxx:100
 AliQuarkoniaEfficiency.cxx:101
 AliQuarkoniaEfficiency.cxx:102
 AliQuarkoniaEfficiency.cxx:103
 AliQuarkoniaEfficiency.cxx:104
 AliQuarkoniaEfficiency.cxx:105
 AliQuarkoniaEfficiency.cxx:106
 AliQuarkoniaEfficiency.cxx:107
 AliQuarkoniaEfficiency.cxx:108
 AliQuarkoniaEfficiency.cxx:109
 AliQuarkoniaEfficiency.cxx:110
 AliQuarkoniaEfficiency.cxx:111
 AliQuarkoniaEfficiency.cxx:112
 AliQuarkoniaEfficiency.cxx:113
 AliQuarkoniaEfficiency.cxx:114
 AliQuarkoniaEfficiency.cxx:115
 AliQuarkoniaEfficiency.cxx:116
 AliQuarkoniaEfficiency.cxx:117
 AliQuarkoniaEfficiency.cxx:118
 AliQuarkoniaEfficiency.cxx:119
 AliQuarkoniaEfficiency.cxx:120
 AliQuarkoniaEfficiency.cxx:121
 AliQuarkoniaEfficiency.cxx:122
 AliQuarkoniaEfficiency.cxx:123
 AliQuarkoniaEfficiency.cxx:124
 AliQuarkoniaEfficiency.cxx:125
 AliQuarkoniaEfficiency.cxx:126
 AliQuarkoniaEfficiency.cxx:127
 AliQuarkoniaEfficiency.cxx:128
 AliQuarkoniaEfficiency.cxx:129
 AliQuarkoniaEfficiency.cxx:130
 AliQuarkoniaEfficiency.cxx:131
 AliQuarkoniaEfficiency.cxx:132
 AliQuarkoniaEfficiency.cxx:133
 AliQuarkoniaEfficiency.cxx:134
 AliQuarkoniaEfficiency.cxx:135
 AliQuarkoniaEfficiency.cxx:136
 AliQuarkoniaEfficiency.cxx:137
 AliQuarkoniaEfficiency.cxx:138
 AliQuarkoniaEfficiency.cxx:139
 AliQuarkoniaEfficiency.cxx:140
 AliQuarkoniaEfficiency.cxx:141
 AliQuarkoniaEfficiency.cxx:142
 AliQuarkoniaEfficiency.cxx:143
 AliQuarkoniaEfficiency.cxx:144
 AliQuarkoniaEfficiency.cxx:145
 AliQuarkoniaEfficiency.cxx:146
 AliQuarkoniaEfficiency.cxx:147
 AliQuarkoniaEfficiency.cxx:148
 AliQuarkoniaEfficiency.cxx:149
 AliQuarkoniaEfficiency.cxx:150
 AliQuarkoniaEfficiency.cxx:151
 AliQuarkoniaEfficiency.cxx:152
 AliQuarkoniaEfficiency.cxx:153
 AliQuarkoniaEfficiency.cxx:154
 AliQuarkoniaEfficiency.cxx:155
 AliQuarkoniaEfficiency.cxx:156
 AliQuarkoniaEfficiency.cxx:157
 AliQuarkoniaEfficiency.cxx:158
 AliQuarkoniaEfficiency.cxx:159
 AliQuarkoniaEfficiency.cxx:160
 AliQuarkoniaEfficiency.cxx:161
 AliQuarkoniaEfficiency.cxx:162
 AliQuarkoniaEfficiency.cxx:163
 AliQuarkoniaEfficiency.cxx:164
 AliQuarkoniaEfficiency.cxx:165
 AliQuarkoniaEfficiency.cxx:166
 AliQuarkoniaEfficiency.cxx:167
 AliQuarkoniaEfficiency.cxx:168
 AliQuarkoniaEfficiency.cxx:169
 AliQuarkoniaEfficiency.cxx:170
 AliQuarkoniaEfficiency.cxx:171
 AliQuarkoniaEfficiency.cxx:172
 AliQuarkoniaEfficiency.cxx:173
 AliQuarkoniaEfficiency.cxx:174
 AliQuarkoniaEfficiency.cxx:175
 AliQuarkoniaEfficiency.cxx:176
 AliQuarkoniaEfficiency.cxx:177
 AliQuarkoniaEfficiency.cxx:178
 AliQuarkoniaEfficiency.cxx:179
 AliQuarkoniaEfficiency.cxx:180
 AliQuarkoniaEfficiency.cxx:181
 AliQuarkoniaEfficiency.cxx:182
 AliQuarkoniaEfficiency.cxx:183
 AliQuarkoniaEfficiency.cxx:184
 AliQuarkoniaEfficiency.cxx:185
 AliQuarkoniaEfficiency.cxx:186
 AliQuarkoniaEfficiency.cxx:187
 AliQuarkoniaEfficiency.cxx:188
 AliQuarkoniaEfficiency.cxx:189
 AliQuarkoniaEfficiency.cxx:190
 AliQuarkoniaEfficiency.cxx:191
 AliQuarkoniaEfficiency.cxx:192
 AliQuarkoniaEfficiency.cxx:193
 AliQuarkoniaEfficiency.cxx:194
 AliQuarkoniaEfficiency.cxx:195
 AliQuarkoniaEfficiency.cxx:196
 AliQuarkoniaEfficiency.cxx:197
 AliQuarkoniaEfficiency.cxx:198
 AliQuarkoniaEfficiency.cxx:199
 AliQuarkoniaEfficiency.cxx:200
 AliQuarkoniaEfficiency.cxx:201
 AliQuarkoniaEfficiency.cxx:202
 AliQuarkoniaEfficiency.cxx:203
 AliQuarkoniaEfficiency.cxx:204
 AliQuarkoniaEfficiency.cxx:205
 AliQuarkoniaEfficiency.cxx:206
 AliQuarkoniaEfficiency.cxx:207
 AliQuarkoniaEfficiency.cxx:208
 AliQuarkoniaEfficiency.cxx:209
 AliQuarkoniaEfficiency.cxx:210
 AliQuarkoniaEfficiency.cxx:211
 AliQuarkoniaEfficiency.cxx:212
 AliQuarkoniaEfficiency.cxx:213
 AliQuarkoniaEfficiency.cxx:214
 AliQuarkoniaEfficiency.cxx:215
 AliQuarkoniaEfficiency.cxx:216
 AliQuarkoniaEfficiency.cxx:217
 AliQuarkoniaEfficiency.cxx:218
 AliQuarkoniaEfficiency.cxx:219
 AliQuarkoniaEfficiency.cxx:220
 AliQuarkoniaEfficiency.cxx:221
 AliQuarkoniaEfficiency.cxx:222
 AliQuarkoniaEfficiency.cxx:223
 AliQuarkoniaEfficiency.cxx:224
 AliQuarkoniaEfficiency.cxx:225
 AliQuarkoniaEfficiency.cxx:226
 AliQuarkoniaEfficiency.cxx:227
 AliQuarkoniaEfficiency.cxx:228
 AliQuarkoniaEfficiency.cxx:229
 AliQuarkoniaEfficiency.cxx:230
 AliQuarkoniaEfficiency.cxx:231
 AliQuarkoniaEfficiency.cxx:232
 AliQuarkoniaEfficiency.cxx:233
 AliQuarkoniaEfficiency.cxx:234
 AliQuarkoniaEfficiency.cxx:235
 AliQuarkoniaEfficiency.cxx:236
 AliQuarkoniaEfficiency.cxx:237
 AliQuarkoniaEfficiency.cxx:238
 AliQuarkoniaEfficiency.cxx:239
 AliQuarkoniaEfficiency.cxx:240
 AliQuarkoniaEfficiency.cxx:241
 AliQuarkoniaEfficiency.cxx:242
 AliQuarkoniaEfficiency.cxx:243