Skip to content

Commit 4dfee4c

Browse files
zjxiongOvOypwanggalibuild
authored
[PWGDQ] add json function for event mixing (#15427)
Co-authored-by: ypwangg <ypwangg@mail.ustc.edu.cn> Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
1 parent b576ad1 commit 4dfee4c

File tree

5 files changed

+85
-10
lines changed

5 files changed

+85
-10
lines changed

PWGDQ/Core/MixingLibrary.cxx

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,3 +200,46 @@ void o2::aod::dqmixing::SetUpMixing(MixingHandler* mh, const char* mixingVarible
200200
mh->AddMixingVariable(VarManager::kNTPCcontribLongA, fPileUpLimsHashing.size(), fPileUpLimsHashing);
201201
}
202202
}
203+
204+
// Set up mixing hashing by json
205+
void o2::aod::dqmixing::SetUpMixingFromJSON(MixingHandler* mh, const char* json)
206+
{
207+
rapidjson::Document document;
208+
209+
rapidjson::ParseResult ok = document.Parse(json);
210+
if (!ok) {
211+
LOG(fatal) << "JSON parse error";
212+
return;
213+
}
214+
215+
for (auto it = document.MemberBegin(); it != document.MemberEnd(); ++it) {
216+
std::string nameStr = it->name.GetString();
217+
const auto& obj = it->value;
218+
219+
LOG(info) << "Configuring mixing variable: " << nameStr;
220+
221+
if (!obj.HasMember("var") || !obj.HasMember("LimsHashing")) {
222+
LOG(fatal) << "Missing 'var' or 'LimsHashing' in " << nameStr;
223+
continue;
224+
}
225+
226+
// read var
227+
std::string varStr = obj["var"].GetString();
228+
229+
// read limits
230+
const auto& lims = obj["LimsHashing"];
231+
std::vector<float> limits;
232+
limits.reserve(lims.Size());
233+
for (auto& v : lims.GetArray()) {
234+
limits.push_back(v.GetFloat());
235+
}
236+
237+
if (VarManager::fgVarNamesMap.find(varStr) == VarManager::fgVarNamesMap.end()) {
238+
LOG(fatal) << "Bad variable (" << varStr << ") specified for this mixing setting";
239+
return;
240+
}
241+
242+
// set up mixing variable
243+
mh->AddMixingVariable(VarManager::fgVarNamesMap[varStr], limits.size(), limits);
244+
}
245+
}

PWGDQ/Core/MixingLibrary.h

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,27 @@
1111
//
1212
// Contact: iarsene@cern.ch, i.c.arsene@fys.uio.no
1313
//
14-
#include <TString.h>
14+
15+
#ifndef PWGDQ_CORE_MIXINGLIBRARY_H_
16+
#define PWGDQ_CORE_MIXINGLIBRARY_H_
17+
1518
#include "PWGDQ/Core/MixingHandler.h"
1619
#include "PWGDQ/Core/VarManager.h"
1720

21+
#include <TString.h>
22+
23+
#include "rapidjson/document.h"
24+
1825
namespace o2::aod
1926
{
2027
namespace dqmixing
2128
{
2229
void SetUpMixing(MixingHandler* mh, const char* mixingVarible);
30+
void SetUpMixingFromJSON(MixingHandler* mh, const char* json);
2331
} // namespace dqmixing
2432
} // namespace o2::aod
2533

2634
void o2::aod::dqmixing::SetUpMixing(MixingHandler* mh, const char* mixingVarible);
35+
void o2::aod::dqmixing::SetUpMixingFromJSON(MixingHandler* mh, const char* json);
36+
37+
#endif // PWGDQ_CORE_MIXINGLIBRARY_H_

PWGDQ/Tasks/tableReader.cxx

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ struct AnalysisEventSelection {
163163
OutputObj<THashList> fOutputList{"output"};
164164
// TODO: Provide the mixing variables and binning directly via configurables (e.g. vectors of float)
165165
Configurable<std::string> fConfigMixingVariables{"cfgMixingVars", "", "Mixing configs separated by a comma, default no mixing"};
166+
Configurable<std::string> fConfigMixingVariablesJson{"cfgMixingVarsJSON", "", "Mixing configs in JSON format"};
166167
Configurable<std::string> fConfigEventCuts{"cfgEventCuts", "eventStandard", "Event selection"};
167168
Configurable<bool> fConfigQA{"cfgQA", false, "If true, fill QA histograms"};
168169
Configurable<bool> fConfigRunZorro{"cfgRunZorro", false, "Enable event selection with zorro [WARNING: under debug, do not enable!]"};
@@ -200,12 +201,18 @@ struct AnalysisEventSelection {
200201
}
201202

202203
TString mixVarsString = fConfigMixingVariables.value;
204+
TString mixVarsJsonString = fConfigMixingVariablesJson.value;
203205
std::unique_ptr<TObjArray> objArray(mixVarsString.Tokenize(","));
204-
if (objArray->GetEntries() > 0) {
206+
if (objArray->GetEntries() > 0 || mixVarsJsonString != "") {
205207
fMixHandler = new MixingHandler("mixingHandler", "mixing handler");
206208
fMixHandler->Init();
207-
for (int iVar = 0; iVar < objArray->GetEntries(); ++iVar) {
208-
dqmixing::SetUpMixing(fMixHandler, objArray->At(iVar)->GetName());
209+
if (objArray->GetEntries() > 0) {
210+
for (int iVar = 0; iVar < objArray->GetEntries(); ++iVar) {
211+
dqmixing::SetUpMixing(fMixHandler, objArray->At(iVar)->GetName());
212+
}
213+
}
214+
if (mixVarsJsonString != "") {
215+
dqmixing::SetUpMixingFromJSON(fMixHandler, mixVarsJsonString.Data());
209216
}
210217
}
211218

PWGDQ/Tasks/tableReader_withAssoc.cxx

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,7 @@ struct AnalysisEventSelection {
277277

278278
// TODO: Provide the mixing variables and binning directly via configurables (e.g. vectors of float)
279279
Configurable<std::string> fConfigMixingVariables{"cfgMixingVars", "", "Mixing configs separated by a comma, default no mixing"};
280+
Configurable<std::string> fConfigMixingVariablesJson{"cfgMixingVarsJSON", "", "Mixing configs in JSON format"};
280281
Configurable<std::string> fConfigEventCuts{"cfgEventCuts", "eventStandard", "Event selection"};
281282
Configurable<std::string> fConfigEventCutsJSON{"cfgEventCutsJSON", "", "Additional event cuts specified in JSON format"};
282283
Configurable<std::string> fConfigAddEventHistogram{"cfgAddEventHistogram", "", "Comma separated list of histograms"};
@@ -357,12 +358,18 @@ struct AnalysisEventSelection {
357358
}
358359

359360
TString mixVarsString = fConfigMixingVariables.value;
361+
TString mixVarsJsonString = fConfigMixingVariablesJson.value;
360362
std::unique_ptr<TObjArray> objArray(mixVarsString.Tokenize(","));
361-
if (objArray->GetEntries() > 0) {
363+
if (objArray->GetEntries() > 0 || mixVarsJsonString != "") {
362364
fMixHandler = new MixingHandler("mixingHandler", "mixing handler");
363365
fMixHandler->Init();
364-
for (int iVar = 0; iVar < objArray->GetEntries(); ++iVar) {
365-
dqmixing::SetUpMixing(fMixHandler, objArray->At(iVar)->GetName());
366+
if (objArray->GetEntries() > 0) {
367+
for (int iVar = 0; iVar < objArray->GetEntries(); ++iVar) {
368+
dqmixing::SetUpMixing(fMixHandler, objArray->At(iVar)->GetName());
369+
}
370+
}
371+
if (mixVarsJsonString != "") {
372+
dqmixing::SetUpMixingFromJSON(fMixHandler, mixVarsJsonString.Data());
366373
}
367374
}
368375

PWGDQ/Tasks/tableReader_withAssoc_direct.cxx

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,7 @@ struct AnalysisEventSelection {
250250
OutputObj<THashList> fOutputList{"output"};
251251
OutputObj<TList> fStatsList{"Statistics"};
252252
Configurable<std::string> fConfigMixingVariables{"cfgMixingVars", "", "Mixing configs separated by a comma, default no mixing"};
253+
Configurable<std::string> fConfigMixingVariablesJson{"cfgMixingVarsJSON", "", "Mixing configs in JSON format"};
253254
Configurable<std::string> fConfigEventCuts{"cfgEventCuts", "eventStandard", "Event selection"};
254255
Configurable<std::string> fConfigEventCutsJSON{"cfgEventCutsJSON", "", "Additional event cuts specified in JSON format"};
255256
Configurable<bool> fConfigQA{"cfgQA", false, "If true, fill QA histograms"};
@@ -368,12 +369,18 @@ struct AnalysisEventSelection {
368369
fStatsList->AddAt(histZorroSel, kStatsZorroSel);
369370

370371
TString mixVarsString = fConfigMixingVariables.value;
372+
TString mixVarsJsonString = fConfigMixingVariablesJson.value;
371373
std::unique_ptr<TObjArray> objArray(mixVarsString.Tokenize(","));
372-
if (objArray->GetEntries() > 0) {
374+
if (objArray->GetEntries() > 0 || mixVarsJsonString != "") {
373375
fMixHandler = new MixingHandler("mixingHandler", "mixing handler");
374376
fMixHandler->Init();
375-
for (int iVar = 0; iVar < objArray->GetEntries(); ++iVar) {
376-
dqmixing::SetUpMixing(fMixHandler, objArray->At(iVar)->GetName());
377+
if (objArray->GetEntries() > 0) {
378+
for (int iVar = 0; iVar < objArray->GetEntries(); ++iVar) {
379+
dqmixing::SetUpMixing(fMixHandler, objArray->At(iVar)->GetName());
380+
}
381+
}
382+
if (mixVarsJsonString != "") {
383+
dqmixing::SetUpMixingFromJSON(fMixHandler, mixVarsJsonString.Data());
377384
}
378385
}
379386

0 commit comments

Comments
 (0)