14 # pragma warning( disable : 2259 ) 20 # pragma warning( disable : 4996 ) 30 auto p =
new Histogram1D(
new TH1D( title.
c_str(), title.
c_str(), nBins, xlow, xup ) );
35 auto p =
new Histogram1D(
new TH1D( title.
c_str(), title.
c_str(), e.size() - 1, &e.front() ) );
40 TH1D* h = getRepresentation<AIDA::IHistogram1D, TH1D>( hist );
41 auto n = ( h ?
new Histogram1D(
new TH1D( *h ) ) :
nullptr );
48 if ( className ==
"AIDA::IHistogram1D" )
return const_cast<AIDA::IHistogram1D*>( (AIDA::IHistogram1D*)
this );
49 if ( className ==
"AIDA::IHistogram" )
return const_cast<AIDA::IHistogram*>( (AIDA::IHistogram*)
this );
55 if ( binHeight( index ) <= 0 )
return 0;
56 double xx = binHeight( index ) / binError( index );
57 return int( xx * xx + 0.5 );
62 TH1D* imp = dynamic_cast<TH1D*>( rep );
63 if ( !imp )
throw std::runtime_error(
"Cannot adopt native histogram representation." );
72 init( m_rep->GetTitle() );
77 m_classType =
"IHistogram1D";
78 if ( initialize_axis ) { m_axis.initialize( m_rep->GetXaxis(), false ); }
79 const TArrayD* a = m_rep->GetSumw2();
80 if ( !a || ( a && a->GetSize() == 0 ) ) m_rep->Sumw2();
82 m_rep->SetDirectory(
nullptr );
90 for (
int i = 1,
n = m_rep->GetNbinsX(); i <=
n; ++i ) {
91 m_sumwx += m_rep->GetBinContent( i ) * m_rep->GetBinCenter( i );
92 m_sumEntries += m_rep->GetBinContent( i );
106 init( m_rep->GetTitle() );
112 m_rep->SetBinContent( rIndex( i ), height );
113 m_rep->SetBinError( rIndex( i ), error );
115 if ( i != AIDA::IAxis::UNDERFLOW_BIN && i != AIDA::IAxis::OVERFLOW_BIN ) m_sumwx += centre * height;
116 m_sumEntries += entries;
123 # pragma warning( push ) 124 # pragma warning( disable : 1572 ) 127 m_rep->SetEntries( m_sumEntries );
130 stat[0] = sumBinHeights();
132 if ( equivalentBinEntries() != 0 ) stat[1] = ( sumBinHeights() * sumBinHeights() ) / equivalentBinEntries();
135 if ( sumBinHeights() != 0 )
mean = m_sumwx / sumBinHeights();
137 m_rep->PutStats( &stat.
front() );
143 m_rep->SetEntries( allEntries );
147 stat[0] = sumBinHeights();
150 if ( eqBinEntries != 0 ) stat[1] = ( sumBinHeights() * sumBinHeights() ) / eqBinEntries;
152 stat[2] =
mean * sumBinHeights();
155 m_rep->PutStats( &stat.
front() );
161 auto guard = std::scoped_lock{m_fillSerialization};
162 ( weight == 1. ) ? m_rep->Fill( x ) : m_rep->Fill( x, weight );
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() );
177 m_rep.reset(
new TH1D( title.
c_str(), title.
c_str(), e.size() - 1, &e.front() ) );
179 m_axis.initialize( m_rep->GetXaxis(), false );
184 double sumw = h.sumBinHeights();
187 if ( h.equivalentBinEntries() != 0 ) sumw2 = ( sumw * sumw ) / h.equivalentBinEntries();
189 double sumwx = h.mean() * h.sumBinHeights();
190 double sumwx2 = ( h.mean() * h.mean() + h.rms() * h.rms() ) * h.sumBinHeights();
193 for (
int i = -2; i < axis().bins(); ++i ) {
195 m_rep->SetBinContent( rIndex( i ), h.binHeight( i ) );
196 m_rep->SetBinError( rIndex( i ), h.binError( i ) );
200 m_rep->SetEntries( h.allEntries() );
207 m_rep->PutStats( &stat.
front() );
212 # pragma warning( pop ) 220 for (
int j = 0; j <
size; j++ ) {
223 if ( !annotation().addItem( key, value ) ) { annotation().setValue( key, value ); };
224 if (
"Title" == key ) { title = value; }
226 double lowerEdge, upperEdge, binHeight, binError;
227 int isFixedBinning, bins;
228 s >> isFixedBinning >> bins;
230 if ( isFixedBinning ) {
231 s >> lowerEdge >> upperEdge;
232 m_rep.reset(
new TH1D( title.
c_str(), title.
c_str(), bins, lowerEdge, upperEdge ) );
236 for (
int i = 0; i <= bins; ++i ) s >> edges[i];
237 m_rep.reset(
new TH1D( title.
c_str(), title.
c_str(), edges.size() - 1, &edges.front() ) );
239 m_axis.initialize( m_rep->GetXaxis(), true );
244 for (
int i = 0; i <= bins + 1; ++i ) {
245 s >> binHeight >> binError;
246 m_rep->SetBinContent( i, binHeight );
247 m_rep->SetBinError( i, binError );
251 m_rep->SetEntries( allEntries );
253 s >> stats[0] >> stats[1] >> stats[2] >> stats[3];
254 m_rep->PutStats( stats );
260 s << static_cast<int>( annotation().
size() );
261 for (
int i = 0; i < annotation().size(); i++ ) {
262 s << annotation().key( i );
263 s << annotation().value( i );
265 const AIDA::IAxis& axis( this->axis() );
266 const int isFixedBinning = axis.isFixedBinning();
267 const int bins = axis.bins();
268 s << isFixedBinning << bins;
269 if ( isFixedBinning ) {
270 s << axis.lowerEdge();
272 for (
int i = 0; i < bins; ++i )
s << axis.binLowerEdge( i );
274 s << axis.upperEdge();
275 for (
int i = 0; i <= bins + 1; ++i )
s << m_rep->GetBinContent( i ) << m_rep->GetBinError( i );
277 s << m_rep->GetEntries();
279 m_rep->GetStats( stats );
280 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.