5#ifndef INDETTRACKPERFMON_PLOTMGR_H
6#define INDETTRACKPERFMON_PLOTMGR_H
39 PlotMgr(
const std::string& dirName,
40 const std::string& anaTag,
51 const std::string& identifier,
52 const std::string& folderOverride =
"",
53 const std::string& nameOverride =
"" )
const;
66 const std::string& identifier,
67 const std::string& folderOverride =
"",
68 const std::string& nameOverride =
"" )
73 ATH_MSG_WARNING(
"Trying to book empty or non-valid plot : " << identifier );
74 return StatusCode::RECOVERABLE;
77 return StatusCode::SUCCESS;
103 TH1* pTh1,
float value,
float weight=1. )
const;
107 TH2* pTh2,
float xval,
float yval,
float weight=1. )
const;
111 TH3* pTh3,
float xval,
float yval,
float zval,
float weight=1. )
const;
116 TProfile* pTprofile,
float xval,
float yval,
float weight=1. )
const;
121 TProfile2D* pTprofile,
float xval,
float yval,
float zval,
float weight=1. )
const;
125 TEfficiency* pTeff,
float value,
bool accepted,
float weight=1. )
const;
129 TEfficiency* pTeff2d,
float xvalue,
float yvalue,
bool accepted,
float weight=1. )
const;
136 P*& pHisto,
const std::vector<float>& binning,
char axis )
138 if( binning.empty() ) {
139 ATH_MSG_ERROR(
"Non-valid variable plot binning : " << pHisto->GetName() );
140 return StatusCode::FAILURE;
142 if( axis ==
'X' ) pHisto->GetXaxis()->Set( binning.size()-1, binning.data() );
143 if( axis ==
'Y' ) pHisto->GetYaxis()->Set( binning.size()-1, binning.data() );
144 if( axis ==
'Z' ) pHisto->GetZaxis()->Set( binning.size()-1, binning.data() );
145 return StatusCode::SUCCESS;
151 P*& pHisto,
const std::vector<float>& binning,
char axis )
153 if( binning.empty() ) {
154 ATH_MSG_ERROR(
"Non-valid variable plot binning : " << pHisto->GetName() );
155 return StatusCode::FAILURE;
157 std::vector<double> binningD( binning.begin(), binning.end() );
158 if( axis ==
'X' ) pHisto->SetBins( binningD.size()-1, binningD.data() );
161 pHisto->GetTotalHistogram()->GetNbinsX(),
162 pHisto->GetTotalHistogram()->GetXaxis()->GetXbins()->GetArray(),
163 binningD.size()-1, binningD.data() );
165 return StatusCode::SUCCESS;
171 P*& pHisto,
unsigned int nBins,
float absMin,
float absMax,
char axis )
175 return StatusCode::SUCCESS;
181 P*& pHisto,
unsigned int nBins,
float absMin,
float absMax,
char axis )
185 return StatusCode::SUCCESS;
191 unsigned int nBins,
float absMin,
float absMax,
192 bool symmetriseAroundZero =
false );
197 P*& pHisto,
const std::vector< std::string >& binLabels,
char axis )
200 size_t nBinsX = pHisto->GetXaxis()->GetNbins();
201 if( nBinsX != binLabels.size() ) {
202 ATH_MSG_ERROR(
"Mismstch in number of X bin labels for : " << pHisto->GetName() );
203 return StatusCode::FAILURE;
205 for(
size_t bin = 0;
bin < nBinsX;
bin++ ) {
206 pHisto->GetXaxis()->SetBinLabel(
bin+1, binLabels[
bin ].c_str() );
210 size_t nBinsY = pHisto->GetYaxis()->GetNbins();
211 if( nBinsY != binLabels.size() ) {
212 ATH_MSG_ERROR(
"Mismstch in number of Y bin labels for : " << pHisto->GetName() );
213 return StatusCode::FAILURE;
215 for(
size_t bin = 0;
bin < nBinsY;
bin++ ) {
216 pHisto->GetYaxis()->SetBinLabel(
bin+1, binLabels[
bin ].c_str() );
220 size_t nBinsZ = pHisto->GetZaxis()->GetNbins();
221 if( nBinsZ != binLabels.size() ) {
222 ATH_MSG_ERROR(
"Mismstch in number of Z bin labels for : " << pHisto->GetName() );
223 return StatusCode::FAILURE;
225 for(
size_t bin = 0;
bin < nBinsZ;
bin++ ) {
226 pHisto->GetZaxis()->SetBinLabel(
bin+1, binLabels[
bin ].c_str() );
229 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 retrieveAndBook(P *&pHisto, const std::string &identifier, const std::string &folderOverride="", const std::string &nameOverride="")
StatusCode setLogLinearBinsEff(P *&pHisto, unsigned int nBins, float absMin, float absMax, char axis)
Set Log-Linear axis (for Efficiencies)
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...
SinglePlotDefinition retrieveDefinition(const std::string &identifier, const std::string &folderOverride="", const std::string &nameOverride="") const
Retrieve a single histogram definition, given the unique string identifier.
virtual ~PlotMgr()=default
Destructor.
PlotBase(PlotBase *parent, const std::string &sDir)