Class HistogramManager

Inheritance Relationships

Derived Type

Class Documentation

class HistogramManager

This is used by any class extending to pre-define a set of histograms to book by default.

We expect the user to create a new group of histograms, such as for jets:

class JetHists : public HistogramManager
{
  public:
    JetHists(std::string name, std::string detailStr);
    virtual ~JetHists() ;

    bool m_debug;
    StatusCode initialize();
    StatusCode execute( const xAOD::JetContainer  jets, float eventWeight, int pvLoc = -1);
    StatusCode execute( const xAOD::Jet  jet, float eventWeight, int pvLoc = -1 );
    using HistogramManager::book; // make other overloaded version of book() to show up in subclass
    using HistogramManager::execute; // overload
};

The above example is taken from our implementation in JetHists.

Note

The expectation is that the user does not directly use this class but rather inherits from it.

Subclassed by MetHists

Public Types

typedef std::unordered_map<std::string, TH1*> HistMap_t

Typedef for convenience.

Public Functions

HistogramManager(std::string name, std::string detailStr)

Initialization.

Parameters
  • name – The top-level path in which all histograms are stored under (think of TDirectory)

  • detailStr – Specify the various details of which to plot. For example, jets might want "kinematic substructure".

virtual ~HistogramManager()

Destructor, allows the user to delete histograms that are not being recorded.

inline virtual StatusCode initialize()

Initialize and book all histograms.

Example implementation:

StatusCode JetHists::initialize() {
  m_jetPt          = book(m_name, "jetPt",  "jet p_{T} [GeV]", 120, 0, 3000.);
  return StatusCode::SUCCESS;
}

Note

This should call the overloaded functions HistogramManager::book() to create the histograms so that the user can call hists->record(wk()) to record all histograms to the EventLoop worker.

inline virtual StatusCode execute()

Execute by filling in the histograms.

Example implementation:

StatusCode JetHists::execute( const xAOD::JetContainer  jets, float eventWeight ){
  for(const auto& jet:  jets)
    m_jetPt->Fill( jet->pt()/1.e3, eventWeight );
  return StatusCode::SUCCESS;
}

inline virtual StatusCode finalize()

Finalize anything that needs to be finalized.

Warning

This should rarely be used. There is not a good use case for this functionality but it needs to exist in the off-chance that a user comes along and needs it for their histogram class.

TH1F *book(std::string name, std::string title, std::string xlabel, int xbins, double xlow, double xhigh)

record a histogram and call various functions

Note

This is an overloaded function. It will build the right histogram given the correct number of input arguments.

Parameters
  • name – name of histogram, access it in ROOT file like h_jetPt->Draw()

  • title – usually pointless,put a description of the histogram in here

  • xlabel – label to put on the x-axis

  • xbins – number of xbins to use

  • xlow – lower bound on xbins

  • xhigh – upper bound on xbins

  • xbinsArr – variable xbins, test math \((x_1,y_1)\) and \((x_2,y_2)\)

  • ylabel – label to put on the y-axis

  • ylow – lower bound on ybins

  • yhigh – upper bound on ybins

  • ybinsArr – variable ybins

  • zlabel – label to put on the z-axix

  • zlow – lower bound on zbins

  • zhigh – upper bound on zbins

  • zbinsArr – variable zbins

TH2F *book(std::string name, std::string title, std::string xlabel, int xbins, double xlow, double xhigh, std::string xyabel, int ybins, double ylow, double yhigh)

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

TH3F *book(std::string name, std::string title, std::string xlabel, int xbins, double xlow, double xhigh, std::string ylabel, int ybins, double ylow, double yhigh, std::string zlabel, int zbins, double zlow, double zhigh)

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

TH1F *book(std::string name, std::string title, std::string xlabel, int xbins, const Double_t *xbinsArr)

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

TH2F *book(std::string name, std::string title, std::string xlabel, int xbins, const Double_t *xbinsArr, std::string ylabel, int ybins, double ylow, double yhigh)

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

TH2F *book(std::string name, std::string title, std::string xyabel, int xbins, double xlow, double xhigh, std::string ylabel, int ybins, const Double_t *ybinsArr)

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

TH2F *book(std::string name, std::string title, std::string xyabel, int xbins, const Double_t *xbinsArr, std::string ylabel, int ybins, const Double_t *ybinsArr)

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

TH3F *book(std::string name, std::string title, std::string xlabel, int xbins, const Double_t *xbinsArr, std::string ylabel, int ybins, const Double_t *ybinsArr, std::string zlabel, int zbins, const Double_t *zbinsArr)

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

TProfile *book(std::string name, std::string title, std::string xlabel, int xbins, double xlow, double xhigh, std::string ylabel, double ylow, double yhigh, std::string option = "")

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

TProfile *book(std::string name, std::string title, int xbins, const Double_t *xbinsArr, double ylow, double yhigh)

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

TProfile *book(std::string name, std::string title, int xbins, double xlow, double xhigh, double ylow, double yhigh)

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

void record(EL::IWorker *wk)

record all histograms from HistogramManager::m_allHists to the worker

MsgStream &msg() const

the standard message stream for this algorithm

MsgStream &msg(int level) const

allow ANA_MSG_XXXX macros to be used within algorithms for a given level

TH1 *findHist(const std::string &histName)

Return the pointer to the histogram.

void fillHist(const std::string &histName, double value)

Fill a histogram by name. Can be overloaded with weight.

Parameters
  • histName – The name of the histogram to be filled

  • value – The value to fill the histogram with

void fillHist(const std::string &histName, double value, double weight)

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

void fillHist(const std::string &histName, double valueX, double valueY, double weight)
void fillHist(const std::string &histName, double valueX, double valueY, double valueZ, double weight)
void fillProfile(const std::string &histName, double valueX, double valueY, double weight)

Public Members

HistMap_t m_histMap

The map of histogram names to their pointers.

Protected Attributes

std::string m_name

generically the main name assigned to all histograms

std::string m_detailStr

a detail level in the form of a string

std::vector<TH1*> m_allHists

a container holding all generated histograms

mutable MsgStream m_msg

hold the MsgStream object