4 //===================================================================
5 // Class AliQuarkoniaEfficiency
7 // This class will provide the quarkonia reconstruction efficiency
8 // in ALICE without acceptance consideration.
11 // Reconstruction efficiency has been evaluated by means of a flat
12 // y and pt distribution of quarkonia in -4 < y < -2.5,
13 // 0 < pt < 20 GeV/c. Weights have been used to evaluate the
14 // reconstruction efficiency in different parameterizations.
16 // Beware that efficiency histos are preliminary.
17 // Just Jpsi, Dimuon, UnlikePair trigger
18 // efficiencies should be considered.
22 // Double_t eff,error;
23 // AliQuarkoniaEfficiency * JPsiEff = new AliQuarkoniaEfficiency();
25 // JPsiEff->GetEfficiency(Rapidity,Pt,eff,error);
26 // printf(" eff = %2.2e error %2.2e \n",eff,error);
30 //===================================================================
37 #include "AliQuarkoniaEfficiency.h"
41 //_______________________________________________________________________
42 AliQuarkoniaEfficiency::AliQuarkoniaEfficiency(Int_t quarkoniaResonance, Int_t decayChannel,
43 Int_t simParameterization):
44 fEfficiencyFileName("QuarkoniaEfficiency.root"),
45 fQuarkoniaResonance(quarkoniaResonance),
46 fDecayChannel(decayChannel),
47 fParameterization(simParameterization),
48 fTriggerType(kPairUnlikeApt),
55 //_______________________________________________________________________
56 AliQuarkoniaEfficiency::~AliQuarkoniaEfficiency()
62 //_______________________________________________________________________
63 void AliQuarkoniaEfficiency::Init()
66 switch (fQuarkoniaResonance) {
80 SetTitle("UpsilonPP");
90 switch (fDecayChannel) {
95 SetName("Dielectron");
100 switch (fParameterization){
108 param = "CDFscaledPP";
113 switch (fTriggerType){
115 trig = "SinglePlusLpt";
118 trig = "SinglePlusHpt";
121 trig = "SinglePlusApt";
123 case kSingleMinusLpt:
124 trig = "SingleMinusLpt";
126 case kSingleMinusHpt:
127 trig = "SingleMinusHpt";
129 case kSingleMinusApt:
130 trig = "SingleMinusApt";
132 case kSingleUndefLpt:
133 trig = "SingleUndefLpt";
135 case kSingleUndefHpt:
136 trig = "SingleUndefHpt";
138 case kSingleUndefApt:
139 trig = "SingleUndefApt";
142 trig = "PairUnlikeLpt";
145 trig = "PairUnlikeHpt";
148 trig = "PairUnlikeApt";
151 trig = "PairLikeLpt";
154 trig = "PairLikeHpt";
157 trig = "PairLikeApt";
162 if(!fEfficiency) delete fEfficiency;
164 TFile efficiencyFile(fEfficiencyFileName);
165 if ( efficiencyFile.IsOpen() ) {
167 char quarkoniaDir[15];
168 snprintf(quarkoniaDir,15,"%s",GetTitle());
169 if (! efficiencyFile.cd(quarkoniaDir) ){
170 AliError(Form("Directory %s not found in file %s \n Efficiency data for quarkonia %s and channel %s not found ",
171 quarkoniaDir,fEfficiencyFileName.Data(),GetTitle(),GetName() ));
176 snprintf(histosDir,30,"%s/%s_%s_%s",quarkoniaDir,GetTitle(),GetName(),param);
177 if(! efficiencyFile.cd(histosDir) ){
178 AliError(Form("Subdirectory %s/%s not found in file %s \n Efficiency data for quarkonia %s and channel %s not found ",
179 quarkoniaDir,histosDir,fEfficiencyFileName.Data(),GetTitle(),GetName() ));
184 if(fTrigger) snprintf(histoname,50,"h%sEfficiencyPtRap_%s",GetTitle(),trig);
185 else snprintf(histoname,50,"h%sEfficiencyPtRap",GetTitle());
186 char histonameposition[99];
187 snprintf(histonameposition,99,"%s/%s",histosDir,histoname);
188 fEfficiency = (TH2F*)efficiencyFile.Get(histonameposition);
190 if ( !fEfficiency ) {
191 AliError(Form("Histo %s not found in file %s \n Efficiency data for quarkonia %s and channel %s not found",
192 histoname, fEfficiencyFileName.Data(), GetTitle(), GetName() ));
195 fEfficiency->SetDirectory(0);
197 efficiencyFile.Close();
201 AliError(Form("File %s not found",fEfficiencyFileName.Data()));
206 //_______________________________________________________________________
207 TH2F* AliQuarkoniaEfficiency::GetEfficiencyHisto() const
209 // Returns the efficiency histogram
210 if (fEfficiency) return fEfficiency;
212 AliError(Form("Efficiency data for quarkonia %s and channel %s not found",GetTitle(),GetName()));
217 //_______________________________________________________________________
218 void AliQuarkoniaEfficiency::GetEfficiency(Float_t rap, Float_t pT, Double_t &eff, Double_t &error)
220 // Evaluates the efficiency for a given (y,Pt) of the quarkonia
225 AliError(Form("Efficiency data for quarkonia %s and channel %s not found",GetTitle(),GetName()));
228 if ( rap < (fEfficiency->GetXaxis())->GetXmin() ||
229 rap > (fEfficiency->GetXaxis())->GetXmax() ||
230 pT < (fEfficiency->GetYaxis())->GetXmin() ||
231 pT > (fEfficiency->GetYaxis())->GetXmax() ) {
232 AliInfo("Values out of range");
237 binx = fEfficiency->GetXaxis()->FindBin(rap);
238 biny = fEfficiency->GetYaxis()->FindBin(pT);
239 eff = fEfficiency->GetBinContent(binx,biny);
240 error = fEfficiency->GetBinError(binx,biny);