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());
89 histo->GetXaxis()->GetXmin(),
90 histo->GetXaxis()->GetXmax());
104 if (isEta1Barrel && isEta2Barrel) {
123 inline void fillTH1Plots(
const float val,
const std::pair<TLorentzVector, TLorentzVector>& momenta) {
126 <<
"In" << __FUNCTION__ <<
"," << __LINE__ <<
"trying to fill a plot not booked!" << std::endl;
132 edm::LogError(
"PlotsVsDiLeptonRegion") <<
"undefined di-muon kinematics" << std::endl;
140 const std::pair<TLorentzVector, TLorentzVector>& momenta) {
143 <<
"In" << __FUNCTION__ <<
"," << __LINE__ <<
"trying to fill a plot not booked!" << std::endl;
149 edm::LogError(
"PlotsVsDiLeptonRegion") <<
"undefined di-muon kinematics" << std::endl;
186 edm::LogError(
"PlotsVsKinematics") <<
"The initialization flavour is not correct!" << std::endl;
205 namePostfix =
m_flav ?
"EEPhi" :
"MMPhi";
206 titlePostfix = fmt::sprintf(
"%s%s pair #phi;%s^{+}%s^{-} #phi", sed, sed, sed, sed);
211 namePostfix =
m_flav ?
"EEEta" :
"MuMuEta";
212 titlePostfix = fmt::sprintf(
"%s%s pair #eta;%s^{+}%s^{-} #eta", sed, sed, sed, sed);
217 namePostfix =
m_flav ?
"EPlusPhi" :
"MuPlusPhi";
218 titlePostfix = fmt::sprintf(
"%s^{+} #phi;%s^{+} #phi [rad]", sed, sed);
223 namePostfix =
m_flav ?
"EPlusEta" :
"MuPlusEta";
224 titlePostfix = fmt::sprintf(
"%s^{+} #eta;%s^{+} #eta", sed, sed);
229 namePostfix =
m_flav ?
"EMinusPhi" :
"MuMinusPhi";
230 titlePostfix = fmt::sprintf(
"%s^{-} #phi;%s^{-} #phi [rad]", sed, sed);
235 namePostfix =
m_flav ?
"EMinusEta" :
"MuMinusEta";
236 titlePostfix = fmt::sprintf(
"%s^{-} #eta;%s^{+} #eta", sed, sed);
239 throw cms::Exception(
"LogicalError") <<
" there is not such Axis choice as " << xAx;
243 const auto& h2title = fmt::sprintf(
"%s vs %s;%s% s",
265 TFileDirectory&
fs,
const float valmin,
const float valmax,
const int nxbins,
const int nybins) {
268 <<
"In" << __FUNCTION__ <<
"," << __LINE__
269 <<
"trying to book plots without the right constructor being called!" << std::endl;
279 TH1F::SetDefaultSumw2(kTRUE);
282 m_h2_map[xAxis::Z_ETA] =
fs.make<TH2F>(fmt::sprintf(
"%sVsMuMuEta",
m_name).c_str(),
283 fmt::sprintf(
"%s vs %s pair #eta;%s #eta;%s",
m_title, dilep, dilep,
m_ytitle).c_str(),
285 nybins, valmin, valmax);
287 m_h2_map[xAxis::Z_PHI] =
fs.make<TH2F>(fmt::sprintf(
"%sVsMuMuPhi",
m_name).c_str(),
288 fmt::sprintf(
"%s vs %s pair #phi;%s #phi [rad];%s",
m_title, dilep, dilep,
m_ytitle).c_str(),
289 nxbins, -maxMuMuEta, maxMuMuEta,
290 nybins, valmin, valmax);
292 m_h2_map[xAxis::LP_ETA] =
fs.make<TH2F>(fmt::sprintf(
"%sVsMuPlusEta",
m_name).c_str(),
293 fmt::sprintf(
"%s vs %s #eta;%s #eta;%s",
m_title, lep, lep,
m_ytitle).c_str(),
294 nxbins, -maxMuEta, maxMuEta,
295 nybins, valmin, valmax);
297 m_h2_map[xAxis::LP_PHI] =
fs.make<TH2F>(fmt::sprintf(
"%sVsMuPlusPhi",
m_name).c_str(),
298 fmt::sprintf(
"%s vs %s #phi;%s #phi [rad];%s",
m_title, lep, lep,
m_ytitle).c_str(),
300 nybins, valmin, valmax);
302 m_h2_map[xAxis::LM_ETA] =
fs.make<TH2F>(fmt::sprintf(
"%sVsMuMinusEta",
m_name).c_str(),
303 fmt::sprintf(
"%s vs %s #eta;%s #eta;%s",
m_title, lem, lem,
m_ytitle).c_str(),
304 nxbins, -maxMuEta, maxMuEta,
305 nybins, valmin, valmax);
307 m_h2_map[xAxis::LM_PHI] =
fs.make<TH2F>(fmt::sprintf(
"%sVsMuMinusPhi",
m_name).c_str(),
308 fmt::sprintf(
"%s vs %s #phi;%s #phi [rad];%s",
m_title, lem, lem,
m_ytitle).c_str(),
310 nybins, valmin, valmax);
318 inline void fillPlots(
const float val,
const std::pair<TLorentzVector, TLorentzVector>& momenta) {
321 <<
"In" << __FUNCTION__ <<
"," << __LINE__ <<
"trying to fill a plot not booked!" << std::endl;
325 m_h2_map[xAxis::Z_ETA]->Fill((momenta.first + momenta.second).Eta(),
val);
326 m_h2_map[xAxis::Z_PHI]->Fill((momenta.first + momenta.second).Phi(),
val);
327 m_h2_map[xAxis::LP_ETA]->Fill((momenta.first).Eta(),
val);
328 m_h2_map[xAxis::LP_PHI]->Fill((momenta.first).Phi(),
val);
329 m_h2_map[xAxis::LM_ETA]->Fill((momenta.second).Eta(),
val);
330 m_h2_map[xAxis::LM_PHI]->Fill((momenta.second).Phi(),
val);
336 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