5#ifndef INDETTRACKPERFMON_PLOTMGR_H
6#define INDETTRACKPERFMON_PLOTMGR_H
40 PlotMgr(
const std::string& dirName,
41 const std::string& anaTag,
52 const std::string& identifier,
53 std::string_view folderOverride =
"",
54 std::string_view nameOverride =
"" )
const;
67 const std::string& identifier,
68 std::string_view folderOverride =
"",
69 std::string_view nameOverride =
"" )
74 ATH_MSG_WARNING(
"Trying to book empty or non-valid plot : " << identifier );
75 return StatusCode::RECOVERABLE;
78 return StatusCode::SUCCESS;
104 TH1* pTh1,
float value,
float weight=1. )
const;
108 TH2* pTh2,
float xval,
float yval,
float weight=1. )
const;
112 TH3* pTh3,
float xval,
float yval,
float zval,
float weight=1. )
const;
117 TProfile* pTprofile,
float xval,
float yval,
float weight=1. )
const;
122 TProfile2D* pTprofile,
float xval,
float yval,
float zval,
float weight=1. )
const;
126 TEfficiency* pTeff,
float value,
bool accepted,
float weight=1. )
const;
130 TEfficiency* pTeff2d,
float xvalue,
float yvalue,
bool accepted,
float weight=1. )
const;
137 P*& pHisto,
const std::vector<float>& binning,
char axis )
139 if( binning.empty() ) {
140 ATH_MSG_ERROR(
"Non-valid variable plot binning : " << pHisto->GetName() );
141 return StatusCode::FAILURE;
143 if( axis ==
'X' ) pHisto->GetXaxis()->Set( binning.size()-1, binning.data() );
144 if( axis ==
'Y' ) pHisto->GetYaxis()->Set( binning.size()-1, binning.data() );
145 if( axis ==
'Z' ) pHisto->GetZaxis()->Set( binning.size()-1, binning.data() );
146 return StatusCode::SUCCESS;
152 P*& pHisto,
const std::vector<float>& binning,
char axis )
154 if( binning.empty() ) {
155 ATH_MSG_ERROR(
"Non-valid variable plot binning : " << pHisto->GetName() );
156 return StatusCode::FAILURE;
158 std::vector<double> binningD( binning.begin(), binning.end() );
159 if( axis ==
'X' ) pHisto->SetBins( binningD.size()-1, binningD.data() );
162 pHisto->GetTotalHistogram()->GetNbinsX(),
163 pHisto->GetTotalHistogram()->GetXaxis()->GetXbins()->GetArray(),
164 binningD.size()-1, binningD.data() );
166 return StatusCode::SUCCESS;
172 P*& pHisto,
unsigned int nBins,
float absMin,
float absMax,
char axis )
176 return StatusCode::SUCCESS;
182 P*& pHisto,
unsigned int nBins,
float absMin,
float absMax,
char axis )
186 return StatusCode::SUCCESS;
192 unsigned int nBins,
float absMin,
float absMax,
193 bool symmetriseAroundZero =
false );
198 P*& pHisto,
const std::vector< std::string >& binLabels,
char axis )
201 size_t nBinsX = pHisto->GetXaxis()->GetNbins();
202 if( nBinsX != binLabels.size() ) {
203 ATH_MSG_ERROR(
"Mismstch in number of X bin labels for : " << pHisto->GetName() );
204 return StatusCode::FAILURE;
206 for(
size_t bin = 0;
bin < nBinsX;
bin++ ) {
207 pHisto->GetXaxis()->SetBinLabel(
bin+1, binLabels[
bin ].c_str() );
211 size_t nBinsY = pHisto->GetYaxis()->GetNbins();
212 if( nBinsY != binLabels.size() ) {
213 ATH_MSG_ERROR(
"Mismstch in number of Y bin labels for : " << pHisto->GetName() );
214 return StatusCode::FAILURE;
216 for(
size_t bin = 0;
bin < nBinsY;
bin++ ) {
217 pHisto->GetYaxis()->SetBinLabel(
bin+1, binLabels[
bin ].c_str() );
221 size_t nBinsZ = pHisto->GetZaxis()->GetNbins();
222 if( nBinsZ != binLabels.size() ) {
223 ATH_MSG_ERROR(
"Mismstch in number of Z bin labels for : " << pHisto->GetName() );
224 return StatusCode::FAILURE;
226 for(
size_t bin = 0;
bin < nBinsZ;
bin++ ) {
227 pHisto->GetZaxis()->SetBinLabel(
bin+1, binLabels[
bin ].c_str() );
230 return StatusCode::SUCCESS;
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
Class to store (internally) each plot definition in this package (originally based on the SingleHisto...
AthMessaging(IMessageSvc *msgSvc, const std::string &name)
Constructor.
StatusCode setLogLinearBins(P *&pHisto, unsigned int nBins, float absMin, float absMax, char axis)
Set Log-Linear axis.
StatusCode setVariableBins(P *&pHisto, const std::vector< float > &binning, char axis)
SetVariableBins.
StatusCode setBinLabels(P *&pHisto, const std::vector< std::string > &binLabels, char axis)
SetBinLabels (for TH* and TProfile* only).
StatusCode setLogLinearBinsEff(P *&pHisto, unsigned int nBins, float absMin, float absMax, char axis)
Set Log-Linear axis (for Efficiencies).
StatusCode retrieveAndBook(P *&pHisto, const std::string &identifier, std::string_view folderOverride="", std::string_view nameOverride="")
SinglePlotDefinition retrieveDefinition(const std::string &identifier, std::string_view folderOverride="", std::string_view nameOverride="") const
Retrieve a single histogram definition, given the unique string identifier.
StatusCode book(TH1 *&pHisto, const SinglePlotDefinition &def)
Book a TH1 histogram.
StatusCode setVariableBinsEff(P *&pHisto, const std::vector< float > &binning, char axis)
SetVariableBins (for Efficiencies).
std::vector< float > getLogLinearBins(unsigned int nBins, float absMin, float absMax, bool symmetriseAroundZero=false)
Get Log-Linear binning vector inherited from InDetPhysValMonitoring/src/logLinearBinning....
StatusCode initialize()
initialize
StatusCode fill(TH1 *pTh1, float value, float weight=1.) const
PlotMgr(const std::string &dirName, const std::string &anaTag, PlotMgr *pParent=nullptr)
Constructor taking parent node and directory name for plots pParent = nullptr by default to book plot...
virtual ~PlotMgr()=default
Destructor.
PlotBase(PlotBase *parent, std::string_view sDir)