-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathComputeCentralityProbabilities.C
71 lines (57 loc) · 2.24 KB
/
ComputeCentralityProbabilities.C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/**
* File : ComputeCentralityProbabilities.C
* Author : Anton Riedel <[email protected]>
* Date : 10.09.2021
* Last Modified Date: 03.03.2022
* Last Modified By : Anton Riedel <[email protected]>
*/
#include "GridHelperMacros.H"
#include <boost/algorithm/string.hpp>
#include <nlohmann/json.hpp>
Int_t ComputeCentralityProbabilities(const char *configFileName,
const char *dataFileName) {
// load config file
std::fstream ConfigFile(configFileName);
nlohmann::json Jconfig = nlohmann::json::parse(ConfigFile);
// open file holding data
TFile *dataFile = new TFile(dataFileName, "READ");
// open output directory
TDirectoryFile *tdirFile = dynamic_cast<TDirectoryFile *>(dataFile->Get(
Jconfig["task"]["OutputTDirectory"].get<std::string>().c_str()));
// open new file holding probabilities
std::string probabilitiesFileName(dataFileName);
boost::replace_all(probabilitiesFileName, "Merged",
"CentralityProbabilities");
TFile *probabilitiesFile =
new TFile(probabilitiesFileName.c_str(), "RECREATE");
// initalize objects
TList *TaskList;
TList *Hists = new TList();
TH1D *cenHist, *cenProbHist;
// loop over all tasks
for (auto KeyTask : *(tdirFile->GetListOfKeys())) {
// get the output list of a task
TaskList = dynamic_cast<TList *>(tdirFile->Get(KeyTask->GetName()));
cenHist = dynamic_cast<TH1D *>(IterateList(
TaskList, std::string("[kRECO]fEventControlHistograms[kCEN][kAFTER]")));
// compute centrality probabilities
cenProbHist =
dynamic_cast<TH1D *>(cenHist->Clone("CentralityProbabilities"));
cenProbHist->SetTitle("centrality probabilities");
for (Int_t i = 1; i <= cenProbHist->GetNbinsX(); i++) {
if (cenHist->GetBinContent(i) < 1.) {
cenProbHist->SetBinContent(i, 0.);
} else {
cenProbHist->SetBinContent(i, 1. / cenHist->GetBinContent(i));
}
}
cenProbHist->Scale(1. / cenProbHist->GetMaximum(), "nosw2");
// write weight histograms to file
Hists->Add(cenProbHist);
Hists->Write(TaskList->GetName(), TObject::kSingleKey);
Hists->Clear();
}
probabilitiesFile->Close();
dataFile->Close();
return 0;
}