1 #ifndef Alignment_OfflineValidation_DiLeptonVertexHelpers_h
2 #define Alignment_OfflineValidation_DiLeptonVertexHelpers_h
6 #include <fmt/printf.h>
8 #include "TLorentzVector.h"
60 edm::LogError(
"PlotsVsKinematics") <<
"The initialization flavour is not correct!" << std::endl;
79 namePostfix =
m_flav ?
"EEPhi" :
"MMPhi";
80 titlePostfix = fmt::sprintf(
"%s%s pair #phi;%s^{+}%s^{-} #phi", sed, sed, sed, sed);
85 namePostfix =
m_flav ?
"EEEta" :
"MuMuEta";
86 titlePostfix = fmt::sprintf(
"%s%s pair #eta;%s^{+}%s^{-} #eta", sed, sed, sed, sed);
91 namePostfix =
m_flav ?
"EPlusPhi" :
"MuPlusPhi";
92 titlePostfix = fmt::sprintf(
"%s^{+} #phi;%s^{+} #phi [rad]", sed, sed);
97 namePostfix =
m_flav ?
"EPlusEta" :
"MuPlusEta";
98 titlePostfix = fmt::sprintf(
"%s^{+} #eta;%s^{+} #eta", sed, sed);
103 namePostfix =
m_flav ?
"EMinusPhi" :
"MuMinusPhi";
104 titlePostfix = fmt::sprintf(
"%s^{-} #phi;%s^{-} #phi [rad]", sed, sed);
109 namePostfix =
m_flav ?
"EMinusEta" :
"MuMinusEta";
110 titlePostfix = fmt::sprintf(
"%s^{-} #eta;%s^{+} #eta", sed, sed);
113 throw cms::Exception(
"LogicalError") <<
" there is not such Axis choice as " << xAx;
117 const auto& h2title = fmt::sprintf(
"%s vs %s;%s% s",
139 TFileDirectory& fs,
const float valmin,
const float valmax,
const int nxbins,
const int nybins) {
142 <<
"In" << __FUNCTION__ <<
"," << __LINE__
143 <<
"trying to book plots without the right constructor being called!" << std::endl;
151 static constexpr
float maxMuEta = 2.4;
152 static constexpr
float maxMuMuEta = 3.5;
153 TH1F::SetDefaultSumw2(kTRUE);
157 fmt::sprintf(
"%s vs %s pair #eta;%s #eta;%s",
m_title, dilep, dilep,
m_ytitle).c_str(),
159 nybins, valmin, valmax);
162 fmt::sprintf(
"%s vs %s pair #phi;%s #phi [rad];%s",
m_title, dilep, dilep,
m_ytitle).c_str(),
163 nxbins, -maxMuMuEta, maxMuMuEta,
164 nybins, valmin, valmax);
166 m_h2_map[xAxis::LP_ETA] = fs.
make<TH2F>(fmt::sprintf(
"%sVsMuPlusEta",
m_name).c_str(),
167 fmt::sprintf(
"%s vs %s #eta;%s #eta;%s",
m_title, lep, lep,
m_ytitle).c_str(),
168 nxbins, -maxMuEta, maxMuEta,
169 nybins, valmin, valmax);
171 m_h2_map[xAxis::LP_PHI] = fs.
make<TH2F>(fmt::sprintf(
"%sVsMuPlusPhi",
m_name).c_str(),
172 fmt::sprintf(
"%s vs %s #phi;%s #phi [rad];%s",
m_title, lep, lep,
m_ytitle).c_str(),
174 nybins, valmin, valmax);
176 m_h2_map[xAxis::LM_ETA] = fs.
make<TH2F>(fmt::sprintf(
"%sVsMuMinusEta",
m_name).c_str(),
177 fmt::sprintf(
"%s vs %s #eta;%s #eta;%s",
m_title, lem, lem,
m_ytitle).c_str(),
178 nxbins, -maxMuEta, maxMuEta,
179 nybins, valmin, valmax);
181 m_h2_map[xAxis::LM_PHI] = fs.
make<TH2F>(fmt::sprintf(
"%sVsMuMinusPhi",
m_name).c_str(),
182 fmt::sprintf(
"%s vs %s #phi;%s #phi [rad];%s",
m_title, lem, lem,
m_ytitle).c_str(),
184 nybins, valmin, valmax);
192 inline void fillPlots(
const float val,
const std::pair<TLorentzVector, TLorentzVector>& momenta) {
195 <<
"In" << __FUNCTION__ <<
"," << __LINE__ <<
"trying to fill a plot not booked!" << std::endl;
199 m_h2_map[xAxis::Z_ETA]->Fill((momenta.first + momenta.second).Eta(),
val);
200 m_h2_map[xAxis::Z_PHI]->Fill((momenta.first + momenta.second).Phi(),
val);
201 m_h2_map[xAxis::LP_ETA]->Fill((momenta.first).Eta(),
val);
202 m_h2_map[xAxis::LP_PHI]->Fill((momenta.first).Phi(),
val);
203 m_h2_map[xAxis::LM_ETA]->Fill((momenta.second).Eta(),
val);
204 m_h2_map[xAxis::LM_PHI]->Fill((momenta.second).Phi(),
val);
210 xAxis::Z_PHI, xAxis::Z_ETA, xAxis::LP_PHI, xAxis::LP_ETA, xAxis::LM_PHI, xAxis::LM_ETA};