1 #ifndef Alignment_OfflineValidation_DiLeptonVertexHelpers_h 2 #define Alignment_OfflineValidation_DiLeptonVertexHelpers_h 6 #include <fmt/printf.h> 8 #include "TLorentzVector.h" 66 if (((TObject*)
histo)->InheritsFrom(
"TH2")) {
67 zTitle =
histo->GetZaxis()->GetTitle();
74 if (((TObject*)
histo)->InheritsFrom(
"TH2")) {
79 histo->GetXaxis()->GetXmin(),
80 histo->GetXaxis()->GetXmax(),
82 histo->GetYaxis()->GetXmin(),
83 histo->GetYaxis()->GetXmax());
88 histo->GetXaxis()->GetXmin(),
89 histo->GetXaxis()->GetXmax());
103 if (isEta1Barrel && isEta2Barrel) {
122 inline void fillTH1Plots(
const float val,
const std::pair<TLorentzVector, TLorentzVector>& momenta) {
125 <<
"In" << __FUNCTION__ <<
"," << __LINE__ <<
"trying to fill a plot not booked!" << std::endl;
131 edm::LogError(
"PlotsVsDiLeptonRegion") <<
"undefined di-muon kinematics" << std::endl;
139 const std::pair<TLorentzVector, TLorentzVector>& momenta) {
142 <<
"In" << __FUNCTION__ <<
"," << __LINE__ <<
"trying to fill a plot not booked!" << std::endl;
148 edm::LogError(
"PlotsVsDiLeptonRegion") <<
"undefined di-muon kinematics" << std::endl;
185 edm::LogError(
"PlotsVsKinematics") <<
"The initialization flavour is not correct!" << std::endl;
204 namePostfix =
m_flav ?
"EEPhi" :
"MMPhi";
205 titlePostfix = fmt::sprintf(
"%s%s pair #phi;%s^{+}%s^{-} #phi", sed, sed, sed, sed);
210 namePostfix =
m_flav ?
"EEEta" :
"MuMuEta";
211 titlePostfix = fmt::sprintf(
"%s%s pair #eta;%s^{+}%s^{-} #eta", sed, sed, sed, sed);
216 namePostfix =
m_flav ?
"EPlusPhi" :
"MuPlusPhi";
217 titlePostfix = fmt::sprintf(
"%s^{+} #phi;%s^{+} #phi [rad]", sed, sed);
222 namePostfix =
m_flav ?
"EPlusEta" :
"MuPlusEta";
223 titlePostfix = fmt::sprintf(
"%s^{+} #eta;%s^{+} #eta", sed, sed);
228 namePostfix =
m_flav ?
"EMinusPhi" :
"MuMinusPhi";
229 titlePostfix = fmt::sprintf(
"%s^{-} #phi;%s^{-} #phi [rad]", sed, sed);
234 namePostfix =
m_flav ?
"EMinusEta" :
"MuMinusEta";
235 titlePostfix = fmt::sprintf(
"%s^{-} #eta;%s^{+} #eta", sed, sed);
238 throw cms::Exception(
"LogicalError") <<
" there is not such Axis choice as " << xAx;
242 const auto& h2title = fmt::sprintf(
"%s vs %s;%s% s",
264 TFileDirectory&
fs,
const float valmin,
const float valmax,
const int nxbins,
const int nybins) {
267 <<
"In" << __FUNCTION__ <<
"," << __LINE__
268 <<
"trying to book plots without the right constructor being called!" << std::endl;
278 TH1F::SetDefaultSumw2(kTRUE);
281 m_h2_map[xAxis::Z_ETA] =
fs.make<TH2F>(fmt::sprintf(
"%sVsMuMuEta",
m_name).c_str(),
282 fmt::sprintf(
"%s vs %s pair #eta;%s #eta;%s",
m_title, dilep, dilep,
m_ytitle).c_str(),
284 nybins, valmin, valmax);
286 m_h2_map[xAxis::Z_PHI] =
fs.make<TH2F>(fmt::sprintf(
"%sVsMuMuPhi",
m_name).c_str(),
287 fmt::sprintf(
"%s vs %s pair #phi;%s #phi [rad];%s",
m_title, dilep, dilep,
m_ytitle).c_str(),
288 nxbins, -maxMuMuEta, maxMuMuEta,
289 nybins, valmin, valmax);
291 m_h2_map[xAxis::LP_ETA] =
fs.make<TH2F>(fmt::sprintf(
"%sVsMuPlusEta",
m_name).c_str(),
292 fmt::sprintf(
"%s vs %s #eta;%s #eta;%s",
m_title, lep, lep,
m_ytitle).c_str(),
293 nxbins, -maxMuEta, maxMuEta,
294 nybins, valmin, valmax);
296 m_h2_map[xAxis::LP_PHI] =
fs.make<TH2F>(fmt::sprintf(
"%sVsMuPlusPhi",
m_name).c_str(),
297 fmt::sprintf(
"%s vs %s #phi;%s #phi [rad];%s",
m_title, lep, lep,
m_ytitle).c_str(),
299 nybins, valmin, valmax);
301 m_h2_map[xAxis::LM_ETA] =
fs.make<TH2F>(fmt::sprintf(
"%sVsMuMinusEta",
m_name).c_str(),
302 fmt::sprintf(
"%s vs %s #eta;%s #eta;%s",
m_title, lem, lem,
m_ytitle).c_str(),
303 nxbins, -maxMuEta, maxMuEta,
304 nybins, valmin, valmax);
306 m_h2_map[xAxis::LM_PHI] =
fs.make<TH2F>(fmt::sprintf(
"%sVsMuMinusPhi",
m_name).c_str(),
307 fmt::sprintf(
"%s vs %s #phi;%s #phi [rad];%s",
m_title, lem, lem,
m_ytitle).c_str(),
309 nybins, valmin, valmax);
317 inline void fillPlots(
const float val,
const std::pair<TLorentzVector, TLorentzVector>& momenta) {
320 <<
"In" << __FUNCTION__ <<
"," << __LINE__ <<
"trying to fill a plot not booked!" << std::endl;
324 m_h2_map[xAxis::Z_ETA]->Fill((momenta.first + momenta.second).Eta(),
val);
325 m_h2_map[xAxis::Z_PHI]->Fill((momenta.first + momenta.second).Phi(),
val);
326 m_h2_map[xAxis::LP_ETA]->Fill((momenta.first).Eta(),
val);
327 m_h2_map[xAxis::LP_PHI]->Fill((momenta.first).Phi(),
val);
328 m_h2_map[xAxis::LM_ETA]->Fill((momenta.second).Eta(),
val);
329 m_h2_map[xAxis::LM_PHI]->Fill((momenta.second).Phi(),
val);
335 xAxis::Z_PHI, xAxis::Z_ETA, xAxis::LP_PHI, xAxis::LP_ETA, xAxis::LM_PHI, xAxis::LM_ETA};
T getParameter(std::string const &) const
const std::string m_ytitle
unsigned int eventsAfterVtx
const float m_etaBoundary
void fillTH1Plots(const float val, const std::pair< TLorentzVector, TLorentzVector > &momenta)
unsigned int eventsAfterDist
~PlotsVsKinematics()=default
Log< level::Error, false > LogError
std::map< etaRegion, TH2F * > m_h2_map
unsigned int eventsAfterEta
std::map< xAxis, TH2F * > m_h2_map
const std::vector< xAxis > axisChoices
const std::vector< std::string > m_etaRegionNames
const std::vector< etaRegion > m_etaRegions
void bookSet(const TFileDirectory &fs, const TH1 *histo)
PlotsVsKinematics(flavour FLAV, const std::string &name, const std::string &tt, const std::string &ytt)
Abs< T >::type abs(const T &t)
PlotsVsKinematics(flavour FLAV)
Log< level::Info, false > LogInfo
~PlotsVsDiLeptonRegion()=default
void bookPlots(TFileDirectory &fs, const float valmin, const float valmax, const int nxbins, const int nybins)
std::map< etaRegion, TH1F * > m_h1_map
unsigned int eventsAfterPt
PlotsVsDiLeptonRegion(const float etaBoundary)
etaRegion getEtaRegion(const double eta1, const double eta2)
void fillPlots(const float val, const std::pair< TLorentzVector, TLorentzVector > &momenta)
void bookFromPSet(const TFileDirectory &fs, const edm::ParameterSet &hpar)
void fillTH2Plots(const float valX, const float valY, const std::pair< TLorentzVector, TLorentzVector > &momenta)
unsigned int eventsAfterMult
const std::string m_title