MaCh3  2.6.1
Reference Guide
StyleManager.cpp
Go to the documentation of this file.
1 #include "StyleManager.h"
2 
3 namespace M3 {
4 namespace Plotting {
5 StyleManager::StyleManager(const std::string& styleConfigName) {
6  _styleConfig = M3OpenConfig(styleConfigName);
7 }
8 
9 std::string StyleManager::prettifyName(const std::string &origName, const std::string &nameType) const {
10  YAML::Node prettyNames = _styleConfig["PrettyNames"][nameType];
11  auto prettyName = GetFromManager<std::string>(prettyNames[origName], origName, __FILE__, __LINE__);
12 
13  return prettyName;
14 }
15 
16 void StyleManager::setPalette(const int rootPlotStyle) const {
17  // set the colour palette to one of the root palettes
18  gStyle->SetPalette(rootPlotStyle);
19 }
20 
21 void StyleManager::setPalette(const std::string& configStyleName) const {
22  // set the colour palette to one of the palettes defined in PlottingConfig.yaml
23 
24  // get the definition of the provided style from the config file
25  YAML::Node palettes = _styleConfig["ColorPallettes"];
26  YAML::Node styleDef;
27  if (palettes) {
28  styleDef = palettes[configStyleName];
29  }
30 
31  auto paletteDef = GetFromManager<std::vector<std::vector<double>>>(
32  styleDef,
33  std::vector<std::vector<double>>{
34  {4.0}, // NCont
35  {0.0 , 0.33 , 0.66 , 1.0}, // stops
36  {0.0 , 0.0 , 0.0 , 0.0}, // Reds
37  {0.0 , 0.0 , 1.0 , 0.0}, // Greens
38  {0.0 , 1.0 , 0.0 , 0.0} // Blues
39  }, __FILE__, __LINE__);
40  const Int_t NCont = Int_t(paletteDef[0][0]);
41 
42  std::vector<double> stopVec = paletteDef[1];
43  std::vector<double> redsVec = paletteDef[2];
44  std::vector<double> greensVec = paletteDef[3];
45  std::vector<double> bluesVec = paletteDef[4];
46 
47  // get the number of colour stops and check all vectors are same size
48  const size_t NRGBs = stopVec.size();
49  if (redsVec.size() != NRGBs || greensVec.size() != NRGBs ||
50  bluesVec.size() != NRGBs)
51  {
52  MACH3LOG_ERROR("invalid colour palette defined in style config file: {}");
53  MACH3LOG_ERROR("RGB arrays don't all have the same size, please fix that");
54  }
55 
56  // now actually set the palette
57  TColor::CreateGradientColorTable(int(NRGBs), stopVec.data(), redsVec.data(), greensVec.data(), bluesVec.data(), NCont);
58  gStyle->SetNumberContours(NCont);
59 }
60 
61 void StyleManager::setTH1Style(TH1 *hist, const std::string& styleName) const {
62  // get the definition of the provided style from the config file
63  YAML::Node TH1Styles = _styleConfig["TH1Styles"];
64  YAML::Node styleDef ;
65  if (TH1Styles) {
66  styleDef = TH1Styles[styleName];
67  }
68 
69  hist->SetMarkerColor(GetFromManager<Color_t>(styleDef["MarkerColor"], kRed, __FILE__, __LINE__));
70  hist->SetMarkerStyle(GetFromManager<Color_t>(styleDef["MarkerStyle"], 7, __FILE__, __LINE__));
71  hist->SetFillColor(GetFromManager<Color_t>(styleDef["FillColor"], kRed, __FILE__, __LINE__));
72  hist->SetFillStyle(GetFromManager<Color_t>(styleDef["FillStyle"], 3003, __FILE__, __LINE__));
73  hist->SetLineColor(GetFromManager<Color_t>(styleDef["LineColor"], kRed, __FILE__, __LINE__));
74  hist->SetLineStyle(GetFromManager<Color_t>(styleDef["LineStyle"], 1, __FILE__, __LINE__));
75 }
76 
77 double StyleManager::getBinWidthScale(const std::string &Name) const {
78  constexpr const double DefaultScalingFactor = 10;
79  if(!_styleConfig["BinWidthScaleFactor"]) return DefaultScalingFactor;
80 
81  return GetFromManager<double>(_styleConfig["BinWidthScaleFactor"][Name], DefaultScalingFactor, __FILE__, __LINE__);
82 }
83 
84 } // namespace Plotting
85 } // namespace M3
#define MACH3LOG_ERROR
Definition: MaCh3Logger.h:37
#define M3OpenConfig(filename)
Macro to simplify calling LoadYaml with file and line info.
Definition: YamlHelper.h:590
double getBinWidthScale(const std::string &Name) const
Get bin-width scaling factor for a given kinematic variable.
StyleManager(const std::string &configName)
Constructor.
Definition: StyleManager.cpp:5
void setTH1Style(TH1 *hist, const std::string &styleName) const
Set the style of a TH1 to one of the styles defined in the style config.
std::string prettifyName(const std::string &origName, const std::string &nameType) const
Definition: StyleManager.cpp:9
void setPalette(const int rootPlotStyle) const
Set the root colour palette to one of the default root pallettes as defined in (root docs)[https://ro...
Main namespace for MaCh3 software.