MaCh3  2.2.3
Reference Guide
Public Member Functions | Private Member Functions | Private Attributes | List of all members
MaCh3Plotting::StyleManager Class Reference

EW: provides centralized styling utilities for plots, including name prettification and style application. More...

#include <Plotting/plottingUtils/styleManager.h>

Public Member Functions

 StyleManager (std::string configName)
 Constructor. More...
 
 StyleManager (const StyleManager &)=delete
 
 StyleManager (StyleManager &&)=default
 
 ~StyleManager ()
 
std::string prettifyParamName (const std::string &origName) const
 Convert hideous and vulgar internal parameter name into a beautiful presentable name. More...
 
std::string prettifySampleName (const std::string &origName) const
 Convert hideous and vulgar internal sample name into a beautiful presentable name. More...
 
void setPalette (const int rootPlotStyle) const
 Set the root colour palette to one of the default root pallettes as defined in (root docs)[https://root.cern.ch/doc/master/classTColor.html#C05]. More...
 
void setPalette (const std::string &configStyleName) const
 Set the root colour palette to one of the ones defined in the style config. More...
 
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. More...
 

Private Member Functions

std::string prettifyName (const std::string &origName, const std::string &nameType) const
 

Private Attributes

YAML::Node _styleConfig
 

Detailed Description

EW: provides centralized styling utilities for plots, including name prettification and style application.

Author
Ewan Miller

Definition at line 20 of file styleManager.h.

Constructor & Destructor Documentation

◆ StyleManager() [1/3]

MaCh3Plotting::StyleManager::StyleManager ( std::string  configName)

Constructor.

Parameters
configNameThe style config to read from

Definition at line 4 of file styleManager.cpp.

4  {
5  _styleConfig = M3OpenConfig(styleConfigName);
6 }
#define M3OpenConfig(filename)
Macro to simplify calling LoadYaml with file and line info.
Definition: YamlHelper.h:561

◆ StyleManager() [2/3]

MaCh3Plotting::StyleManager::StyleManager ( const StyleManager )
delete

◆ StyleManager() [3/3]

MaCh3Plotting::StyleManager::StyleManager ( StyleManager &&  )
default

◆ ~StyleManager()

MaCh3Plotting::StyleManager::~StyleManager ( )
inline

Definition at line 30 of file styleManager.h.

30  {
31  MACH3LOG_DEBUG("##### Deleting StyleManager Instance #####");
32  }
#define MACH3LOG_DEBUG
Definition: MaCh3Logger.h:24

Member Function Documentation

◆ prettifyName()

std::string MaCh3Plotting::StyleManager::prettifyName ( const std::string &  origName,
const std::string &  nameType 
) const
private

Definition at line 8 of file styleManager.cpp.

8  {
9  YAML::Node prettyNames = _styleConfig["PrettyNames"][nameType];
10  auto prettyName = GetFromManager<std::string>(prettyNames[origName], origName, __FILE__, __LINE__);
11 
12  return prettyName;
13 }

◆ prettifyParamName()

std::string MaCh3Plotting::StyleManager::prettifyParamName ( const std::string &  origName) const
inline

Convert hideous and vulgar internal parameter name into a beautiful presentable name.

The pretty parameter names should be specified in the style config file

Parameters
origNameThe "internal" name used to uniquely identify the parameter inside the plotting code
Returns
A beautiful formatted name that can be used in plots

Definition at line 39 of file styleManager.h.

39  {
40  return prettifyName(origName, "parameters");
41  };
std::string prettifyName(const std::string &origName, const std::string &nameType) const
Definition: styleManager.cpp:8

◆ prettifySampleName()

std::string MaCh3Plotting::StyleManager::prettifySampleName ( const std::string &  origName) const
inline

Convert hideous and vulgar internal sample name into a beautiful presentable name.

The pretty sample names should be specified in the style config file

Parameters
origNameThe "internal" name used to uniquely identify the sample inside the plotting code
Returns
A beautiful formatted name that can be used in plots

Definition at line 48 of file styleManager.h.

48  {
49  return prettifyName(origName, "samples");
50  };

◆ setPalette() [1/2]

void MaCh3Plotting::StyleManager::setPalette ( const int  rootPlotStyle) const

Set the root colour palette to one of the default root pallettes as defined in (root docs)[https://root.cern.ch/doc/master/classTColor.html#C05].

Parameters
rootPlotStyleThe index of the palette as defined by root

Definition at line 15 of file styleManager.cpp.

15  {
16  // set the colour palette to one of the root palettes
17  gStyle->SetPalette(rootPlotStyle);
18 }

◆ setPalette() [2/2]

void MaCh3Plotting::StyleManager::setPalette ( const std::string &  configStyleName) const

Set the root colour palette to one of the ones defined in the style config.

Parameters
rootPlotStyleThe name of the palette you want to use, should be the same as it appears in the style config

Definition at line 20 of file styleManager.cpp.

20  {
21  // set the colour palette to one of the palettes defined in PlottingConfig.yaml
22 
23  // get the definition of the provided style from the config file
24  YAML::Node palettes = _styleConfig["ColorPallettes"];
25  YAML::Node styleDef;
26  if (palettes) {
27  styleDef = palettes[configStyleName];
28  }
29 
30  auto paletteDef = GetFromManager<std::vector<std::vector<double>>>(
31  styleDef["MarkerColor"],
32  std::vector<std::vector<double>>{
33  {4.0}, // NCont
34  {0.0 , 0.33 , 0.66 , 1.0}, // stops
35  {0.0 , 0.0 , 0.0 , 0.0}, // Reds
36  {0.0 , 0.0 , 1.0 , 0.0}, // Greens
37  {0.0 , 1.0 , 0.0 , 0.0} // Blues
38  }, __FILE__, __LINE__);
39  const Int_t NCont = Int_t(paletteDef[0][0]);
40 
41  std::vector<double> stopVec = paletteDef[1];
42  std::vector<double> redsVec = paletteDef[2];
43  std::vector<double> greensVec = paletteDef[3];
44  std::vector<double> bluesVec = paletteDef[4];
45 
46  // get the number of colour stops and check all vectors are same size
47  const size_t NRGBs = stopVec.size();
48  if (redsVec.size() != NRGBs || greensVec.size() != NRGBs ||
49  bluesVec.size() != NRGBs)
50  {
51  MACH3LOG_ERROR("invalid colour palette defined in style config file: {}");
52  MACH3LOG_ERROR("RGB arrays don't all have the same size, please fix that");
53  }
54 
55  // now actually set the palette
56  TColor::CreateGradientColorTable(int(NRGBs), stopVec.data(), redsVec.data(), greensVec.data(), bluesVec.data(), NCont);
57  gStyle->SetNumberContours(NCont);
58 }
#define MACH3LOG_ERROR
Definition: MaCh3Logger.h:27

◆ setTH1Style()

void MaCh3Plotting::StyleManager::setTH1Style ( TH1 *  hist,
const std::string &  styleName 
) const

Set the style of a TH1 to one of the styles defined in the style config.

Parameters
histThe TH1 that you wish to modify
styleNameThe name of the style you want to use, as it appears in the config file

Definition at line 60 of file styleManager.cpp.

60  {
61  // get the definition of the provided style from the config file
62  YAML::Node TH1Styles = _styleConfig["TH1Styles"];
63  YAML::Node styleDef ;
64  if (TH1Styles) {
65  styleDef = TH1Styles[styleName];
66  }
67 
68  hist->SetMarkerColor(GetFromManager<Color_t>(styleDef["MarkerColor"], kRed, __FILE__, __LINE__));
69  hist->SetMarkerStyle(GetFromManager<Color_t>(styleDef["MarkerStyle"], 7, __FILE__, __LINE__));
70  hist->SetFillColor(GetFromManager<Color_t>(styleDef["FillColor"], kRed, __FILE__, __LINE__));
71  hist->SetFillStyle(GetFromManager<Color_t>(styleDef["FillStyle"], 3003, __FILE__, __LINE__));
72  hist->SetLineColor(GetFromManager<Color_t>(styleDef["LineColor"], kRed, __FILE__, __LINE__));
73  hist->SetLineStyle(GetFromManager<Color_t>(styleDef["LineStyle"], 1, __FILE__, __LINE__));
74 }

Member Data Documentation

◆ _styleConfig

YAML::Node MaCh3Plotting::StyleManager::_styleConfig
private

Definition at line 69 of file styleManager.h.


The documentation for this class was generated from the following files: