1 //===================================================================
2 // Class AliQuarkoniaEfficiency
4 // This class will provide the quarkonia reconstruction efficiency
5 // in ALICE without acceptance consideration.
8 // Reconstruction efficiency has been evaluated by means of a flat
9 // y and pt distribution of quarkonia in -4 < y < -2.5,
10 // 0 < pt < 20 GeV/c. Weights have been used to evaluate the
11 // reconstruction efficiency in different parameterizations.
13 // Beware that efficiency histos are preliminary.
14 // Just Jpsi, Dimuon, UnlikePair trigger
15 // efficiencies should be considered.
19 // Double_t eff,error;
20 // AliQuarkoniaEfficiency * JPsiEff = new AliQuarkoniaEfficiency();
22 // JPsiEff->GetEfficiency(Rapidity,Pt,eff,error);
23 // printf(" eff = %2.2e error %2.2e \n",eff,error);
27 //===================================================================
34 #include "AliQuarkoniaEfficiency.h"
38 //_______________________________________________________________________
39 AliQuarkoniaEfficiency::AliQuarkoniaEfficiency(Int_t quarkoniaResonance, Int_t decayChannel,
40 Int_t simParameterization):
41 fEfficiencyFileName("QuarkoniaEfficiency.root"),
42 fQuarkoniaResonance(quarkoniaResonance),
43 fDecayChannel(decayChannel),
44 fParameterization(simParameterization),
45 fTriggerType(kPairUnlikeApt),
52 //_______________________________________________________________________
53 AliQuarkoniaEfficiency::~AliQuarkoniaEfficiency()
59 //_______________________________________________________________________
60 void AliQuarkoniaEfficiency::Init()
63 switch (fQuarkoniaResonance) {
77 SetTitle("UpsilonPP");
87 switch (fDecayChannel) {
92 SetName("Dielectron");
97 switch (fParameterization){
105 param = "CDFscaledPP";
110 switch (fTriggerType){
112 trig = "SinglePlusLpt";
115 trig = "SinglePlusHpt";
118 trig = "SinglePlusApt";
120 case kSingleMinusLpt:
121 trig = "SingleMinusLpt";
123 case kSingleMinusHpt:
124 trig = "SingleMinusHpt";
126 case kSingleMinusApt:
127 trig = "SingleMinusApt";
129 case kSingleUndefLpt:
130 trig = "SingleUndefLpt";
132 case kSingleUndefHpt:
133 trig = "SingleUndefHpt";
135 case kSingleUndefApt:
136 trig = "SingleUndefApt";
139 trig = "PairUnlikeLpt";
142 trig = "PairUnlikeHpt";
145 trig = "PairUnlikeApt";
148 trig = "PairLikeLpt";
151 trig = "PairLikeHpt";
154 trig = "PairLikeApt";
159 if(!fEfficiency) delete fEfficiency;
161 TFile efficiencyFile(fEfficiencyFileName);
162 if ( efficiencyFile.IsOpen() ) {
164 char quarkoniaDir[15];
165 sprintf(quarkoniaDir,"%s",GetTitle());
166 if (! efficiencyFile.cd(quarkoniaDir) ){
167 AliError(Form("Directory %s not found in file %s \n Efficiency data for quarkonia %s and channel %s not found ",
168 quarkoniaDir,fEfficiencyFileName.Data(),GetTitle(),GetName() ));
173 sprintf(histosDir,"%s/%s_%s_%s",quarkoniaDir,GetTitle(),GetName(),param);
174 if(! efficiencyFile.cd(histosDir) ){
175 AliError(Form("Subdirectory %s/%s not found in file %s \n Efficiency data for quarkonia %s and channel %s not found ",
176 quarkoniaDir,histosDir,fEfficiencyFileName.Data(),GetTitle(),GetName() ));
181 if(fTrigger) sprintf(histoname,"h%sEfficiencyPtRap_%s",GetTitle(),trig);
182 else sprintf(histoname,"h%sEfficiencyPtRap",GetTitle());
183 char histonameposition[99];
184 sprintf(histonameposition,"%s/%s",histosDir,histoname);
185 fEfficiency = (TH2F*)efficiencyFile.Get(histonameposition);
187 if ( !fEfficiency ) {
188 AliError(Form("Histo %s not found in file %s \n Efficiency data for quarkonia %s and channel %s not found",
189 histoname,GetTitle(), GetName() ));
192 fEfficiency->SetDirectory(0);
194 efficiencyFile.Close();
198 AliError(Form("File %s not found",fEfficiencyFileName.Data()));
203 //_______________________________________________________________________
204 TH2F* AliQuarkoniaEfficiency::GetEfficiencyHisto() const
206 // Returns the efficiency histogram
207 if (fEfficiency) return fEfficiency;
209 AliError(Form("Efficiency data for quarkonia %s and channel %s not found",GetTitle(),GetName()));
214 //_______________________________________________________________________
215 void AliQuarkoniaEfficiency::GetEfficiency(Float_t rap, Float_t pT, Double_t &eff, Double_t &error)
217 // Evaluates the efficiency for a given (y,Pt) of the quarkonia
222 AliError(Form("Efficiency data for quarkonia %s and channel %s not found",GetTitle(),GetName()));
225 if ( rap < (fEfficiency->GetXaxis())->GetXmin() ||
226 rap > (fEfficiency->GetXaxis())->GetXmax() ||
227 pT < (fEfficiency->GetYaxis())->GetXmin() ||
228 pT > (fEfficiency->GetYaxis())->GetXmax() ) {
229 AliInfo("Values out of range");
234 binx = fEfficiency->GetXaxis()->FindBin(rap);
235 biny = fEfficiency->GetYaxis()->FindBin(pT);
236 eff = fEfficiency->GetBinContent(binx,biny);
237 error = fEfficiency->GetBinError(binx,biny);