7 #include "TDirectory.h"
10 #include "AliQuarkoniaEfficiency.h"
14 AliQuarkoniaEfficiency::AliQuarkoniaEfficiency(Int_t quarkoniaResonance, Int_t decayChannel,
15 Int_t simParameterization):
16 fEfficiencyFileName("QuarkoniaEfficiency.root"),
17 fQuarkoniaResonance(quarkoniaResonance),
18 fDecayChannel(decayChannel),
19 fParameterization(simParameterization),
20 fTriggerType(kPairUnlikeApt),
27 AliQuarkoniaEfficiency::~AliQuarkoniaEfficiency()
32 void AliQuarkoniaEfficiency::Init()
34 switch (fQuarkoniaResonance) {
48 SetTitle("UpsilonPP");
58 switch (fDecayChannel) {
63 SetName("Dielectron");
68 switch (fParameterization){
76 param = "CDFscaledPP";
81 switch (fTriggerType){
83 trig = "SinglePlusLpt";
86 trig = "SinglePlusHpt";
89 trig = "SinglePlusApt";
92 trig = "SingleMinusLpt";
95 trig = "SingleMinusHpt";
98 trig = "SingleMinusApt";
100 case kSingleUndefLpt:
101 trig = "SingleUndefLpt";
103 case kSingleUndefHpt:
104 trig = "SingleUndefHpt";
106 case kSingleUndefApt:
107 trig = "SingleUndefApt";
110 trig = "PairUnlikeLpt";
113 trig = "PairUnlikeHpt";
116 trig = "PairUnlikeApt";
119 trig = "PairLikeLpt";
122 trig = "PairLikeHpt";
125 trig = "PairLikeApt";
130 if(!fEfficiency) delete fEfficiency;
132 TFile efficiencyFile(fEfficiencyFileName);
133 if ( efficiencyFile.IsOpen() ) {
135 char quarkoniaDir[15];
136 sprintf(quarkoniaDir,"%s",GetTitle());
137 if (! efficiencyFile.cd(quarkoniaDir) ){
138 AliError(Form("Directory %s not found in file %s \n Efficiency data for quarkonia %s and channel %s not found ",
139 quarkoniaDir,fEfficiencyFileName.Data(),GetTitle(),GetName() ));
144 sprintf(histosDir,"%s/%s_%s_%s",quarkoniaDir,GetTitle(),GetName(),param);
145 if(! efficiencyFile.cd(histosDir) ){
146 AliError(Form("Subdirectory %s/%s not found in file %s \n Efficiency data for quarkonia %s and channel %s not found ",
147 quarkoniaDir,histosDir,fEfficiencyFileName.Data(),GetTitle(),GetName() ));
152 if(fTrigger) sprintf(histoname,"h%sEfficiencyPtRap_%s",GetTitle(),trig);
153 else sprintf(histoname,"h%sEfficiencyPtRap",GetTitle());
154 char histonameposition[99];
155 sprintf(histonameposition,"%s/%s",histosDir,histoname);
156 fEfficiency = (TH2F*)efficiencyFile.Get(histonameposition);
158 if ( !fEfficiency ) {
159 AliError(Form("Histo %s not found in file %s \n Efficiency data for quarkonia %s and channel %s not found",
160 histoname,GetTitle(), GetName() ));
163 fEfficiency->SetDirectory(0);
165 efficiencyFile.Close();
169 AliError(Form("File %s not found",fEfficiencyFileName.Data()));
174 TH2F* AliQuarkoniaEfficiency::GetEfficiencyHisto() const
176 if (fEfficiency) return fEfficiency;
178 AliError(Form("Efficiency data for quarkonia %s and channel %s not found",GetTitle(),GetName()));
183 void AliQuarkoniaEfficiency::GetEfficiency(Float_t rap, Float_t pT, Double_t &eff, Double_t &error)
189 AliError(Form("Efficiency data for quarkonia %s and channel %s not found",GetTitle(),GetName()));
192 if ( rap < (fEfficiency->GetXaxis())->GetXmin() ||
193 rap > (fEfficiency->GetXaxis())->GetXmax() ||
194 pT < (fEfficiency->GetYaxis())->GetXmin() ||
195 pT > (fEfficiency->GetYaxis())->GetXmax() ) {
196 AliInfo("Values out of range");
201 binx = fEfficiency->GetXaxis()->FindBin(rap);
202 biny = fEfficiency->GetYaxis()->FindBin(pT);
203 eff = fEfficiency->GetBinContent(binx,biny);
204 error = fEfficiency->GetBinError(binx,biny);