4 # pragma warning( disable : 2259 ) 10 # pragma warning( disable : 4996 ) 20 auto p =
new Histogram1D(
new TH1D( title.
c_str(), title.
c_str(), nBins, xlow, xup ) );
25 auto p =
new Histogram1D(
new TH1D( title.
c_str(), title.
c_str(), e.size() - 1, &e.front() ) );
30 TH1D* h = getRepresentation<AIDA::IHistogram1D, TH1D>( hist );
31 auto n = ( h ?
new Histogram1D(
new TH1D( *h ) ) : nullptr );
38 if ( className ==
"AIDA::IHistogram1D" )
return const_cast<AIDA::IHistogram1D*>( (AIDA::IHistogram1D*)
this );
39 if ( className ==
"AIDA::IHistogram" )
return const_cast<AIDA::IHistogram*>( (AIDA::IHistogram*)
this );
45 if ( binHeight( index ) <= 0 )
return 0;
46 double xx = binHeight( index ) / binError( index );
47 return int( xx * xx + 0.5 );
52 TH1D* imp = dynamic_cast<TH1D*>( rep );
53 if ( !imp )
throw std::runtime_error(
"Cannot adopt native histogram representation." );
62 init( m_rep->GetTitle() );
67 m_classType =
"IHistogram1D";
68 if ( initialize_axis ) { m_axis.initialize( m_rep->GetXaxis(), false ); }
69 const TArrayD* a = m_rep->GetSumw2();
70 if ( !a || ( a && a->GetSize() == 0 ) ) m_rep->Sumw2();
72 m_rep->SetDirectory(
nullptr );
80 for (
int i = 1,
n = m_rep->GetNbinsX(); i <=
n; ++i ) {
81 m_sumwx += m_rep->GetBinContent( i ) * m_rep->GetBinCenter( i );
82 m_sumEntries += m_rep->GetBinContent( i );
96 init( m_rep->GetTitle() );
102 m_rep->SetBinContent( rIndex( i ), height );
103 m_rep->SetBinError( rIndex( i ), error );
105 if ( i != AIDA::IAxis::UNDERFLOW_BIN && i != AIDA::IAxis::OVERFLOW_BIN ) m_sumwx += centre * height;
106 m_sumEntries += entries;
113 # pragma warning( push ) 114 # pragma warning( disable : 1572 ) 117 m_rep->SetEntries( m_sumEntries );
120 stat[0] = sumBinHeights();
122 if ( equivalentBinEntries() != 0 ) stat[1] = ( sumBinHeights() * sumBinHeights() ) / equivalentBinEntries();
125 if ( sumBinHeights() != 0 )
mean = m_sumwx / sumBinHeights();
127 m_rep->PutStats( &stat.
front() );
133 m_rep->SetEntries( allEntries );
137 stat[0] = sumBinHeights();
140 if ( eqBinEntries != 0 ) stat[1] = ( sumBinHeights() * sumBinHeights() ) / eqBinEntries;
142 stat[2] =
mean * sumBinHeights();
145 m_rep->PutStats( &stat.
front() );
152 ( weight == 1. ) ? m_rep->Fill( x ) : m_rep->Fill( x, weight );
159 if ( h.axis().isFixedBinning() ) {
161 new TH1D( title.
c_str(), title.
c_str(), h.axis().bins(), h.axis().lowerEdge(), h.axis().upperEdge() ) );
164 for (
int i = 0; i < h.axis().bins(); ++i ) { e.
push_back( h.axis().binLowerEdge( i ) ); }
166 e.push_back( h.axis().upperEdge() );
167 m_rep.reset(
new TH1D( title.
c_str(), title.
c_str(), e.size() - 1, &e.front() ) );
169 m_axis.initialize( m_rep->GetXaxis(), false );
174 double sumw = h.sumBinHeights();
177 if ( h.equivalentBinEntries() != 0 ) sumw2 = ( sumw * sumw ) / h.equivalentBinEntries();
179 double sumwx = h.mean() * h.sumBinHeights();
180 double sumwx2 = ( h.mean() * h.mean() + h.rms() * h.rms() ) * h.sumBinHeights();
183 for (
int i = -2; i < axis().bins(); ++i ) {
185 m_rep->SetBinContent( rIndex( i ), h.binHeight( i ) );
186 m_rep->SetBinError( rIndex( i ), h.binError( i ) );
190 m_rep->SetEntries( h.allEntries() );
197 m_rep->PutStats( &stat.
front() );
202 # pragma warning( pop ) 210 for (
int j = 0; j <
size; j++ ) {
213 annotation().addItem( key, value );
214 if (
"Title" == key ) { title = value; }
216 double lowerEdge, upperEdge, binHeight, binError;
217 int isFixedBinning, bins;
218 s >> isFixedBinning >> bins;
220 if ( isFixedBinning ) {
221 s >> lowerEdge >> upperEdge;
222 m_rep.reset(
new TH1D( title.
c_str(), title.
c_str(), bins, lowerEdge, upperEdge ) );
226 for (
int i = 0; i <= bins; ++i ) s >> edges[i];
227 m_rep.reset(
new TH1D( title.
c_str(), title.
c_str(), edges.size() - 1, &edges.front() ) );
229 m_axis.initialize( m_rep->GetXaxis(), true );
234 for (
int i = 0; i <= bins + 1; ++i ) {
235 s >> binHeight >> binError;
236 m_rep->SetBinContent( i, binHeight );
237 m_rep->SetBinError( i, binError );
241 m_rep->SetEntries( allEntries );
243 s >> stats[0] >> stats[1] >> stats[2] >> stats[3];
244 m_rep->PutStats( stats );
250 s << static_cast<int>( annotation().
size() );
251 for (
int i = 0; i < annotation().size(); i++ ) {
252 s << annotation().key( i );
253 s << annotation().value( i );
255 const AIDA::IAxis& axis( this->axis() );
256 const int isFixedBinning = axis.isFixedBinning();
257 const int bins = axis.bins();
258 s << isFixedBinning << bins;
259 if ( isFixedBinning ) {
260 s << axis.lowerEdge();
262 for (
int i = 0; i < bins; ++i )
s << axis.binLowerEdge( i );
264 s << axis.upperEdge();
265 for (
int i = 0; i <= bins + 1; ++i )
s << m_rep->GetBinContent( i ) << m_rep->GetBinError( i );
267 s << m_rep->GetEntries();
269 m_rep->GetStats( stats );
270 s << stats[0] << stats[1] << stats[2] << stats[3];
bool fill(double x, double weight) override
Fill the Profile1D with a value and the corresponding weight.
constexpr auto size(const T &, Args &&...) noexcept
void adoptRepresentation(TObject *rep) override
Adopt ROOT histogram representation.
void * cast(const std::string &cl) const override
Manual cast by class name.
virtual bool setStatistics(int allEntries, double eqBinEntries, double mean, double rms)
set histogram statistics
The stream buffer is a small object collecting object data.
StreamBuffer & serialize(StreamBuffer &s)
Serialization mechanism, Serialize the object for reading.
bool reset() override
need to overwrite reset to reset the sums
std::vector< double > Edges
void init(const std::string &title, bool initialize_axis=true)
void adoptRepresentation(TObject *rep) override
Adopt ROOT histogram representation.
void copyFromAida(const AIDA::IHistogram1D &h)
Create new histogram from any AIDA based histogram.
bool setRms(double rms)
Update histogram RMS.
int binEntries(int index) const override
Number of entries in the corresponding bin (ie the number of times fill was called for this bin).
virtual bool setBinContents(int i, int entries, double height, double error, double centre)
set bin content (entries and centre are not used )
Histogram1D()
Standard constructor.
Header file for std:chrono::duration-based Counters.
std::pair< DataObject *, AIDA::IHistogram1D * > createH1D(const AIDA::IHistogram1D &hist)
Copy constructor.
Common AIDA implementation stuff for histograms and profiles using ROOT implementations.