Skip to content

Commit f861dea

Browse files
providing efficiency from ccdb
1 parent 05c70b3 commit f861dea

File tree

1 file changed

+70
-2
lines changed

1 file changed

+70
-2
lines changed

PWGHF/HFC/Tasks/taskCorrelationDstarHadrons.cxx

Lines changed: 70 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929

3030
#include <TString.h>
3131

32+
#include <string>
3233
#include <vector>
3334

3435
using namespace o2;
@@ -78,10 +79,19 @@ const std::vector<double> vecEfficiencyTracksDefault(nPtBinsTrackEfficiency);
7879
struct HfTaskCorrelationDstarHadrons {
7980

8081
Configurable<bool> applyEfficiency{"applyEfficiency", true, "Flag for applying efficiency weights"};
82+
Configurable<bool> useCcdbEfficiency{"useCcdbEfficiency", false, "Flag for using efficiency values from CCDB (if false, efficiency values must be provided via json files)"};
83+
Configurable<std::string> ccdbUrl{"ccdbUrl", "http://alice-ccdb.cern.ch", "url of the ccdb repository"};
84+
Configurable<std::string> ccdbPathEfficiencyDstar{"ccdbPathEfficiencyDstar", "/HFCALIB/hf_efficiency_dstar_pt", "path in ccdb for Dstar efficiency values"};
85+
Configurable<std::string> ccdbPathEfficiencyTracks{"ccdbPathEfficiencyTracks", "/HFCALIB/hf_efficiency_tracks_pt", "path in ccdb for track efficiency values"};
86+
Configurable<int64_t> ccdbTimestamp{"ccdbTimestamp", -1, "timestamp for retrieving efficiency values from CCDB"};
87+
Configurable<std::string> efficiencyDstarFileName{"efficiencyDstarFileName", "EfficiencyDstar.root", "name of the efficiency file for Dstar"};
88+
Configurable<std::string> efficiencyTracksFileName{"efficiencyTracksFileName", "EfficiencyTracks.root", "name of the efficiency file for tracks"};
89+
Configurable<int> nEfficiencyHist{"nEfficiencyHist", 1, "if MB nEfficiencyHist = 1, if Centrality classes nEfficiencyHist = number of centrality classes (i.e. 10)"};
90+
8191
// pT ranges for correlation plots: the default values are those embedded in hf_cuts_dplus_to_pi_k_pi (i.e. the mass pT bins), but can be redefined via json files
8292
Configurable<std::vector<double>> binsPtCorrelations{"binsPtCorrelations", std::vector<double>{vecBinsPtCorrelationsDefault}, "pT bin limits for correlation plots"};
8393

84-
// efficiency configirables for candidate Dstar
94+
// efficiency configurables for candidate Dstar
8595
Configurable<std::vector<double>> binsPtEfficiency{"binsPtEfficiency", std::vector<double>{o2::analysis::hf_cuts_dstar_to_d0_pi::vecBinsPt}, "pT bin limits for efficiency"};
8696
Configurable<std::vector<double>> efficiencyDstar{"efficiencyDstar", std::vector<double>{vecEfficiencyDstarDefault}, "efficiency values for Dstar vs pT bin"};
8797

@@ -102,6 +112,10 @@ struct HfTaskCorrelationDstarHadrons {
102112

103113
HistogramRegistry registry{"registry", {}, OutputObjHandlingPolicy::AnalysisObject, true, true};
104114

115+
o2::ccdb::CcdbApi ccdbApi;
116+
std::vector<TH1F*> vecHistEfficiencyDstar;
117+
std::vector<TH1D*> vecHistEfficiencyTracks;
118+
105119
void init(InitContext&)
106120
{
107121

@@ -120,6 +134,51 @@ struct HfTaskCorrelationDstarHadrons {
120134
registry.add("hCorrel2DPtIntSidebands", stringDHadron + stringSideband + stringDeltaPhi + stringDeltaEta + "entries", {HistType::kTH2D, {axisSpecDeltaPhi, axisSpecDeltaEta}}, true);
121135
registry.add("hDeltaEtaPtIntSidebands", stringDHadron + stringSideband + stringDeltaEta + "entries", {HistType::kTH1D, {axisSpecDeltaEta}}, true);
122136
registry.add("hDeltaPhiPtIntSidebands", stringDHadron + stringSideband + stringDeltaPhi + "entries", {HistType::kTH1D, {axisSpecDeltaPhi}}, true);
137+
138+
if (applyEfficiency && useCcdbEfficiency) {
139+
ccdbApi.init(ccdbUrl);
140+
std::map<std::string, std::string> const metadata;
141+
bool const isEfficiencyDstarfileAvailable = ccdbApi.retrieveBlob(ccdbPathEfficiencyDstar, ".", metadata, ccdbTimestamp, false, efficiencyDstarFileName);
142+
if (!isEfficiencyDstarfileAvailable) {
143+
LOGF(fatal, "Failed to retrieve efficiency file for Dstar from CCDB");
144+
}
145+
bool const isEfficiencyTracksfileAvailable = ccdbApi.retrieveBlob(ccdbPathEfficiencyTracks, ".", metadata, ccdbTimestamp, false, efficiencyTracksFileName);
146+
if (!isEfficiencyTracksfileAvailable) {
147+
LOGF(fatal, "Failed to retrieve efficiency file for tracks from CCDB");
148+
}
149+
150+
TFile* efficiencyDstarRootFile = TFile::Open(efficiencyDstarFileName.value.c_str(), "READ");
151+
if (!efficiencyDstarRootFile || efficiencyDstarRootFile->IsZombie()) {
152+
LOGF(fatal, "Failed to open efficiency file for Dstar");
153+
}
154+
155+
TFile* efficiencyTracksRootFile = TFile::Open(efficiencyTracksFileName.value.c_str(), "READ");
156+
if (!efficiencyTracksRootFile || efficiencyTracksRootFile->IsZombie()) {
157+
LOGF(fatal, "Failed to open efficiency file for tracks");
158+
}
159+
160+
vecHistEfficiencyDstar.resize(nEfficiencyHist);
161+
vecHistEfficiencyTracks.resize(nEfficiencyHist);
162+
163+
for (int iHist = 0; iHist < nEfficiencyHist; iHist++) {
164+
vecHistEfficiencyDstar[iHist] = dynamic_cast<TH1F*>(efficiencyDstarRootFile->Get(Form("hEfficiencyDstar_%d", iHist)));
165+
if (!vecHistEfficiencyDstar[iHist]) {
166+
LOGF(fatal, "Failed to retrieve Dstar efficiency histogram hEfficiencyDstar_%d from file", iHist);
167+
}
168+
169+
vecHistEfficiencyTracks[iHist] = dynamic_cast<TH1D*>(efficiencyTracksRootFile->Get(Form("hEfficiencyTracks_%d", iHist)));
170+
if (!vecHistEfficiencyTracks[iHist]) {
171+
LOGF(fatal, "Failed to retrieve track efficiency histogram hEfficiencyTracks_%d from file", iHist);
172+
}
173+
vecHistEfficiencyDstar[iHist]->SetDirectory(nullptr);
174+
vecHistEfficiencyTracks[iHist]->SetDirectory(nullptr);
175+
}
176+
177+
efficiencyDstarRootFile->Close();
178+
efficiencyTracksRootFile->Close();
179+
delete efficiencyDstarRootFile;
180+
delete efficiencyTracksRootFile;
181+
}
123182
}
124183

125184
void processData(aod::DstarHadronPair const& dstarHPairs)
@@ -150,12 +209,21 @@ struct HfTaskCorrelationDstarHadrons {
150209
// }
151210
float netEfficiencyWeight = 1.0;
152211

153-
if (applyEfficiency) {
212+
if (applyEfficiency && !useCcdbEfficiency) {
154213
float const efficiencyWeightDstar = efficiencyDstar->at(effBinPtDstar);
155214
// LOG(info)<<"efficiencyWeightDstar "<<efficiencyWeightDstar;
156215
float const efficiencyWeightTracks = efficiencyTracks->at(effBinPtTrack);
157216
// LOG(info)<<"efficiencyWeightTracks "<<efficiencyWeightTracks;
158217
netEfficiencyWeight = 1.0 / (efficiencyWeightDstar * efficiencyWeightTracks);
218+
} else if (applyEfficiency && useCcdbEfficiency && nEfficiencyHist == 1) {
219+
float const efficiencyWeightDstar = vecHistEfficiencyDstar[0]->GetBinContent(vecHistEfficiencyDstar[0]->GetXaxis()->FindBin(ptDstar));
220+
// LOG(info)<<"efficiencyWeightDstar "<<efficiencyWeightDstar;
221+
float const efficiencyWeightTracks = vecHistEfficiencyTracks[0]->GetBinContent(vecHistEfficiencyTracks[0]->GetXaxis()->FindBin(ptTrack));
222+
// LOG(info)<<"efficiencyWeightTracks "<<efficiencyWeightTracks;
223+
netEfficiencyWeight = 1.0 / (efficiencyWeightDstar * efficiencyWeightTracks);
224+
} else if (applyEfficiency && useCcdbEfficiency && nEfficiencyHist > 1) {
225+
// to do
226+
LOGF(fatal, "Using CCDB efficiency with more than 1 histogram is not implemented yet");
159227
}
160228

161229
// check if correlation entry belongs to signal region, sidebands or is outside both, and fill correlation plots

0 commit comments

Comments
 (0)