14 #include <RtypesCore.h>
18 #include <TParameter.h>
36 std::string
filename,
long unsigned int layer_index,
float eta_min,
37 float eta_max,
float energy_shift) {
50 std::vector<float> &eta_mins =
m_min_eta.at(layer_index);
51 std::vector<std::vector<float>> &phi_mins =
m_min_phi.at(layer_index);
52 std::vector<std::vector<float>> &modulation =
m_modulation.at(layer_index);
53 std::vector<float> &energy_shifts =
m_energy_shift.at(layer_index);
55 if (eta_mins.empty()) {
60 energy_shifts.push_back(-1.0);
61 energy_shifts.push_back(-1.0);
65 eta_mins.insert(eta_mins.begin(),
eta_min);
66 phi_mins.insert(phi_mins.begin(), std::vector<float>());
67 modulation.insert(modulation.begin(), std::vector<float>());
68 energy_shifts.insert(energy_shifts.begin(), -1.0);
72 auto eta_it = std::upper_bound(
m_min_eta.at(layer_index).begin(),
79 if (
eta_min > eta_mins.at(eta_mins.size() - 1)) {
81 phi_mins.push_back(std::vector<float>());
82 modulation.push_back(std::vector<float>());
83 energy_shifts.push_back(-1.0);
87 phi_mins.push_back(std::vector<float>());
88 modulation.push_back(std::vector<float>());
89 energy_shifts.push_back(-1.0);
94 phi_mins.insert(phi_mins.begin() +
eta_index + 1, std::vector<float>());
95 modulation.insert(modulation.begin() +
eta_index + 1,
96 std::vector<float>());
97 energy_shifts.insert(energy_shifts.begin() +
eta_index + 1, -1.0);
103 phi_mins.insert(phi_mins.begin() +
eta_index + 1, std::vector<float>());
104 modulation.insert(modulation.begin() +
eta_index + 1,
105 std::vector<float>());
106 energy_shifts.insert(energy_shifts.begin() +
eta_index + 1, -1.0);
110 energy_shifts.at(
eta_index) = energy_shift;
114 TFile *muon_corr = TFile::Open(
filename.c_str());
115 TH2F *muon_corr_hist = (
TH2F *)muon_corr->Get(
"hWt_Layer0");
117 int n_bins = muon_corr_hist->GetNbinsX();
119 for (
int i = 1;
i <= n_bins;
i++) {
121 muon_corr_hist->GetXaxis()->GetBinLowEdge(
i));
124 muon_corr_hist->GetXaxis()->GetBinUpEdge(n_bins));
126 for (
int i = 1;
i <= n_bins;
i++) {
127 modulation.at(
eta_index).push_back(muon_corr_hist->GetBinContent(
i));
130 TParameter<double> *param =
131 (TParameter<double> *)muon_corr->Get(
"energy_shift");
133 energy_shifts.at(
eta_index) = param->GetVal();
134 std::cout <<
"Energy shift: " << energy_shifts.at(
eta_index) << std::endl;
143 std::tuple<int, long unsigned int, long unsigned int>
145 float phi,
float eta,
long unsigned int layer_index)
const {
147 float eta_abs = TMath::Abs(
eta);
149 auto eta_it = std::upper_bound(
m_min_eta.at(layer_index).begin(),
150 m_min_eta.at(layer_index).end(), eta_abs);
166 return std::make_tuple(1, 0, 0);
172 "Found eta outside of the specified eta range for the phi modulation");
178 <<
" Eta max of bin: "
180 return std::make_tuple(2, 0, 0);
185 float cell_phi = cellele->
phi();
187 float phi_within_cell =
phi - cell_phi;
191 phi_within_cell = fmod(phi_within_cell, phi_cell_size);
193 if (phi_within_cell < 0)
194 phi_within_cell += phi_cell_size;
197 const std::vector<float> &modulation =
200 if (phi_mins.size() == 0) {
201 return std::make_tuple(-1, 0, 0);
206 std::upper_bound(phi_mins.begin(), phi_mins.end(), phi_within_cell);
212 <<
" outside of the modulation correction vector");
214 <<
" Phi within cell: " << phi_within_cell);
217 ATH_MSG_ERROR(
"Modulation correction size: " << modulation.size());
218 ATH_MSG_ERROR(
"Phi bin boundaries size: " << phi_mins.size());
221 return std::make_tuple(
235 long unsigned int layer_index)
const {
240 if (
m_min_eta.at(layer_index).size() == 0) {
253 hit.
E() = reweighted_energy;
255 return reweighted_energy;
259 float energy,
float phi,
float eta,
long unsigned int layer_index)
const {
265 if (
m_min_eta.at(layer_index).size() == 0) {
284 const std::vector<float> &modulation =
300 long unsigned int layer_index)
const {
305 if (
m_min_eta.at(layer_index).size() == 0) {
317 float reweighted_energy =
319 hit.
E() = reweighted_energy;
321 return reweighted_energy;
325 float energy,
float phi,
float eta,
long unsigned int layer_index)
const {
331 if (
m_min_eta.at(layer_index).size() == 0) {
350 const std::vector<float> &modulation =