26 const std::string& title,
int nBins,
double xlow,
34 const std::string& title,
const Edges& e ) {
41 const AIDA::IHistogram1D& hist ) {
52 if ( className ==
"AIDA::IHistogram1D" )
return const_cast<AIDA::IHistogram1D*
>( (AIDA::IHistogram1D*)
this );
53 if ( className ==
"AIDA::IHistogram" )
return const_cast<AIDA::IHistogram*
>( (AIDA::IHistogram*)
this );
61 return int( xx * xx + 0.5 );
66 TH1D* imp =
dynamic_cast<TH1D*
>( rep );
67 if ( !imp )
throw std::runtime_error(
"Cannot adopt native histogram representation." );
82 if ( initialize_axis ) {
m_axis.initialize(
m_rep->GetXaxis(),
false ); }
83 const TArrayD* a =
m_rep->GetSumw2();
84 if ( !a || ( a && a->GetSize() == 0 ) )
m_rep->Sumw2();
86 m_rep->SetDirectory(
nullptr );
94 for (
int i = 1, n =
m_rep->GetNbinsX(); i <= n; ++i ) {
119 if ( i != AIDA::IAxis::UNDERFLOW_BIN && i != AIDA::IAxis::OVERFLOW_BIN )
m_sumwx += centre * height;
162 m_rep->Fill( x, weight );
168 std::string
title = h.title() +
"Copy";
169 if ( h.axis().isFixedBinning() ) {
171 new TH1D(
title.
c_str(),
title.
c_str(), h.axis().bins(), h.axis().lowerEdge(), h.axis().upperEdge() ) );
174 for (
int i = 0; i < h.axis().bins(); ++i ) { e.push_back( h.axis().binLowerEdge( i ) ); }
176 e.push_back( h.axis().upperEdge() );
184 double sumw = h.sumBinHeights();
188 sumw2 = ( sumw * sumw ) / h.equivalentBinEntries();
190 double sumwx = h.mean() * h.sumBinHeights();
191 double sumwx2 = ( h.mean() * h.mean() + h.rms() * h.rms() ) * h.sumBinHeights();
194 for (
int i = -2; i <
axis().bins(); ++i ) {
196 m_rep->SetBinContent(
rIndex( i ), h.binHeight( i ) );
197 m_rep->SetBinError(
rIndex( i ), h.binError( i ) );
201 m_rep->SetEntries( h.allEntries() );
216 for (
int j = 0; j <
size; j++ ) {
217 std::string key, value;
220 if (
"Title" == key ) {
title = value; }
223 int isFixedBinning, bins;
224 s >> isFixedBinning >> bins;
226 if ( isFixedBinning ) {
227 s >> lowerEdge >> upperEdge;
231 edges.resize( bins );
232 for (
int i = 0; i <= bins; ++i ) s >> edges[i];
240 for (
int i = 0; i <= bins + 1; ++i ) {
249 s >> stats[0] >> stats[1] >> stats[2] >> stats[3];
250 m_rep->PutStats( stats );
257 for (
int i = 0; i <
annotation().size(); i++ ) {
261 const AIDA::IAxis&
axis( this->
axis() );
262 const int isFixedBinning =
axis.isFixedBinning();
263 const int bins =
axis.bins();
264 s << isFixedBinning << bins;
265 if ( isFixedBinning ) {
266 s <<
axis.lowerEdge();
268 for (
int i = 0; i < bins; ++i ) s <<
axis.binLowerEdge( i );
270 s <<
axis.upperEdge();
271 for (
int i = 0; i <= bins + 1; ++i ) s <<
m_rep->GetBinContent( i ) <<
m_rep->GetBinError( i );
273 s <<
m_rep->GetEntries();
275 m_rep->GetStats( stats );
276 s << stats[0] << stats[1] << stats[2] << stats[3];
_Tp abs(const complex< _Tp > &)
constexpr auto size(const _Container &__cont) noexcept(noexcept(__cont.size())) -> decltype(__cont.size())
static constexpr _Tp epsilon() noexcept
const _CharT * c_str() const noexcept
constexpr const_reference front() const noexcept
AIDA::IAnnotation & annotation() override
int allEntries() const override
int binEntries(int index) const override
Number of entries in the corresponding bin (ie the number of times fill was called for this bin).
std::string title() const override
double binHeight(int index) const override
virtual double equivalentBinEntries() const
void adoptRepresentation(TObject *rep) override
Adopt ROOT histogram representation.
void * cast(const std::string &cl) const override
Manual cast by class name.
bool setTitle(const std::string &title) override
double sumBinHeights() const override
Generic1D< AIDA::IHistogram1D, TH1D > Base
double rms() const override
double binError(int index) const override
virtual int rIndex(int index) const
std::unique_ptr< TH1D > m_rep
int entries() const override
double mean() const override
StreamBuffer & serialize(StreamBuffer &s)
Serialization mechanism, Serialize the object for reading.
void adoptRepresentation(TObject *rep) override
Adopt ROOT histogram representation.
Histogram1D()
Standard constructor.
double m_sumwx
cache sumwx when setting contents since I don't have bin mean
bool setRms(double rms)
Update histogram RMS.
std::mutex m_fillSerialization
virtual bool setStatistics(int allEntries, double eqBinEntries, double mean, double rms)
set histogram statistics
void init(const std::string &title, bool initialize_axis=true)
bool fill(double x, double weight) override
Fill the Profile1D with a value and the corresponding weight.
virtual bool setBinContents(int i, int entries, double height, double error, double centre)
set bin content (entries and centre are not used )
void copyFromAida(const AIDA::IHistogram1D &h)
Create new histogram from any AIDA based histogram.
The ISvcLocator is the interface implemented by the Service Factory in the Application Manager to loc...
Gaudi::Monitoring::Hub & monitoringHub()
The stream buffer is a small object collecting object data.
This file provides a Grammar for the type Gaudi::Accumulators::Axis It allows to use that type from p...
GAUDI_API ISvcLocator * svcLocator()
T * getRepresentation(const Q &hist)
std::pair< DataObject *, AIDA::IHistogram1D * > createH1D(ISvcLocator *svcLocator, const std::string &path, const AIDA::IHistogram1D &hist)
Copy constructor.
void registerEntity(std::string c, std::string n, std::string t, T &ent)