4 # pragma warning( disable : 2259 ) 10 # pragma warning( disable : 4996 ) 23 using AIDA::IHistogram1D;
24 using AIDA::IHistogram2D;
25 using AIDA::IProfile1D;
29 int binsY,
double iminY,
double imaxY ) {
30 auto p =
new Histogram2D(
new TH2D( title.
c_str(), title.
c_str(), binsX, iminX, imaxX, binsY, iminY, imaxY ) );
35 auto p =
new Histogram2D(
36 new TH2D( title.
c_str(), title.
c_str(), eX.size() - 1, &eX.front(), eY.size() - 1, &eY.front() ) );
41 auto p =
new Histogram2D( rep );
46 TH2D* h = getRepresentation<AIDA::IHistogram2D, TH2D>( hist );
47 Histogram2D*
n = h ?
new Histogram2D(
new TH2D( *h ) ) : nullptr;
53 TH2* r = getRepresentation<IHistogram2D, TH2>( hist );
54 TH1D* t = r ? r->ProjectionX(
"_px", first, last,
"e" ) :
nullptr;
55 if ( t ) t->SetName( nam.
c_str() );
56 Histogram1D* p = ( t ?
new Histogram1D( t ) : nullptr );
62 TH2* r = getRepresentation<IHistogram2D, TH2>( hist );
63 TH1D* t = r ? r->ProjectionY(
"_py", first, last,
"e" ) :
nullptr;
64 if ( t ) t->SetName( nam.
c_str() );
65 Histogram1D* p = ( t ?
new Histogram1D( t ) : nullptr );
71 TH2* r = getRepresentation<IHistogram2D, TH2>( hist );
72 TH1D* t = r ? r->ProjectionY(
"_px", first, last,
"e" ) :
nullptr;
73 if ( t ) t->SetName( nam.
c_str() );
74 Histogram1D* p = ( t ?
new Histogram1D( t ) : nullptr );
80 TH2* r = Gaudi::getRepresentation<IHistogram2D, TH2>( hist );
81 TProfile* t = r ? r->ProfileX(
"_pfx", first, last,
"e" ) :
nullptr;
82 if ( t ) t->SetName( nam.
c_str() );
83 Profile1D* p = ( t ?
new Profile1D( t ) : nullptr );
89 TH2* r = getRepresentation<IHistogram2D, TH2>( hist );
90 TProfile* t = r ? r->ProfileY(
"_pfx", first, last,
"e" ) :
nullptr;
91 if ( t ) t->SetName( nam.
c_str() );
92 Profile1D* p = ( t ?
new Profile1D( t ) : nullptr );
99 if ( className ==
"AIDA::IHistogram2D" )
100 return (IHistogram2D*)
this;
101 else if ( className ==
"AIDA::IHistogram" )
102 return (IHistogram*)
this;
108 if ( binHeight( indexX, indexY ) <= 0 )
return 0;
109 double xx = binHeight( indexX, indexY ) / binError( indexX, indexY );
110 return int( xx * xx + 0.5 );
115 TH2D* imp = dynamic_cast<TH2D*>( rep );
116 if ( !imp )
throw std::runtime_error(
"Cannot adopt native histogram representation." );
118 m_xAxis.initialize( m_rep->GetXaxis(), true );
119 m_yAxis.initialize( m_rep->GetYaxis(), true );
120 const TArrayD* a = m_rep->GetSumw2();
121 if ( !a || ( a && a->GetSize() == 0 ) ) m_rep->Sumw2();
122 setTitle( m_rep->GetTitle() );
130 m_rep->SetDirectory(
nullptr );
134 adoptRepresentation( rep );
135 m_sumwx = m_sumwy = 0;
136 m_rep->SetDirectory(
nullptr );
141 m_rep->SetBinContent( rIndexX( i ), rIndexY( j ), height );
142 m_rep->SetBinError( rIndexX( i ), rIndexY( j ), error );
144 if ( i >= 0 && j >= 0 ) {
145 m_sumwx += centreX * height;
146 m_sumwy += centreY * height;
148 m_sumEntries += entries;
155 return Base::reset();
161 # pragma warning( push ) 162 # pragma warning( disable : 1572 ) 167 ( weight == 1. ) ? m_rep->Fill( x, y ) : m_rep->Fill( x, y, weight );
172 m_rep->SetEntries( m_sumEntries );
174 stat[0] = sumBinHeights();
176 if ( equivalentBinEntries() != 0 ) stat[1] = ( sumBinHeights() * sumBinHeights() ) / equivalentBinEntries();
179 if ( sumBinHeights() != 0 ) meanX = m_sumwx / sumBinHeights();
180 stat[3] = ( meanX * meanX + rmsX * rmsX ) * sumBinHeights();
183 if ( sumBinHeights() != 0 ) meanY = m_sumwy / sumBinHeights();
184 stat[5] = ( meanY * meanY + rmsY * rmsY ) * sumBinHeights();
186 m_rep->PutStats( &stat.
front() );
192 const char* title = h.title().
c_str();
193 if ( h.xAxis().isFixedBinning() && h.yAxis().isFixedBinning() )
194 m_rep.reset(
new TH2D( title, title, h.xAxis().bins(), h.xAxis().lowerEdge(), h.xAxis().upperEdge(),
195 h.yAxis().bins(), h.yAxis().lowerEdge(), h.yAxis().upperEdge() ) );
198 for (
int i = 0; i < h.xAxis().bins(); ++i ) eX.
push_back( h.xAxis().binLowerEdge( i ) );
200 eX.push_back( h.xAxis().upperEdge() );
201 for (
int i = 0; i < h.yAxis().bins(); ++i ) eY.push_back( h.yAxis().binLowerEdge( i ) );
203 eY.push_back( h.yAxis().upperEdge() );
204 m_rep.reset(
new TH2D( title, title, eX.size() - 1, &eX.front(), eY.size() - 1, &eY.front() ) );
206 m_xAxis.initialize( m_rep->GetXaxis(), true );
207 m_yAxis.initialize( m_rep->GetYaxis(), true );
213 double sumw = h.sumBinHeights();
215 if ( h.equivalentBinEntries() != 0 ) sumw2 = ( sumw * sumw ) / h.equivalentBinEntries();
216 double sumwx = h.meanX() * h.sumBinHeights();
217 double sumwx2 = ( h.meanX() * h.meanX() + h.rmsX() * h.rmsX() ) * h.sumBinHeights();
218 double sumwy = h.meanY() * h.sumBinHeights();
219 double sumwy2 = ( h.meanY() * h.meanY() + h.rmsY() * h.rmsY() ) * h.sumBinHeights();
223 for (
int i = -2; i < xAxis().bins(); ++i ) {
224 for (
int j = -2; j < yAxis().bins(); ++j ) {
226 m_rep->SetBinContent( rIndexX( i ), rIndexY( j ), h.binHeight( i, j ) );
227 m_rep->SetBinError( rIndexX( i ), rIndexY( j ), h.binError( i, j ) );
229 if ( i >= 0 && j >= 0 ) { sumwxy += h.binHeight( i, j ) * h.binMeanX( i, j ) * h.binMeanY( i, j ); }
234 m_rep->SetEntries( h.allEntries() );
237 m_rep->PutStats( stat.
data() );
242 # pragma warning( pop ) bool setRms(double rmsX, double rmsY)
Sets the rms of the histogram.
std::pair< DataObject *, AIDA::IHistogram2D * > createH2D(const AIDA::IHistogram2D &hist)
Copy constructor.
std::pair< DataObject *, AIDA::IHistogram1D * > slice1DY(const std::string &name, const AIDA::IHistogram2D &h, int firstbin, int lastbin)
Create 1D slice from 2D histogram.
void * cast(const std::string &className) const override
Introspection method.
bool fill(double x, double y, double weight=1.) override
Fill the Histogram2D with a value and the.
virtual bool setBinContents(int binIndexX, int binIndexY, int entries, double height, double error, double centreX, double centreY)
Fast filling method for a given bin. It can be also the over/underflow bin.
std::vector< double > Edges
int binEntries(int indexX, int indexY) const override
The number of entries (ie the number of times fill was called for this bin).
void adoptRepresentation(TObject *rep) override
Adopt ROOT histogram representation.
Histogram2D()
Standard Constructor.
std::pair< DataObject *, AIDA::IHistogram1D * > slice1DX(const std::string &name, const AIDA::IHistogram2D &h, int firstbin, int lastbin)
Create 1D slice from 2D histogram.
bool setTitle(const std::string &title) override
Set the title of the object.
std::unique_ptr< IMPLEMENTATION > m_rep
Reference to underlying implementation.
void copyFromAida(const AIDA::IHistogram2D &h)
Create new histogram from any AIDA based histogram.
std::pair< DataObject *, AIDA::IProfile1D * > profile1DY(const std::string &name, const AIDA::IHistogram2D &h, int firstbin, int lastbin)
Create 1D profile in Y from 2D histogram.
std::pair< DataObject *, AIDA::IHistogram1D * > project1DY(const std::string &name, const AIDA::IHistogram2D &h, int firstbin, int lastbin)
Create 1D projection in Y from 2D histogram.
Header file for std:chrono::duration-based Counters.
std::pair< DataObject *, AIDA::IProfile1D * > profile1DX(const std::string &name, const AIDA::IHistogram2D &h, int firstbin, int lastbin)
Create 1D profile in X from 2D histogram.
Common AIDA implementation stuff for histograms and profiles using ROOT implementations.