thepeg is hosted by Hepforge, IPPP Durham
ThePEG 2.3.0
Histogram2D.h
1// -*- C++ -*-
2#ifndef LWH_Histogram2D_H
3#define LWH_Histogram2D_H
4//
5// This is the declaration of the Histogram1D class.
6//
7
8#include "AIHistogram2D.h"
9#include "ManagedObject.h"
10#include "Axis.h"
11#include "VariAxis.h"
12#include <vector>
13#include <stdexcept>
14
15#include <iostream>
16
17namespace LWH {
18
19 using namespace AIDA;
20
21
25 class Histogram2D: public IHistogram2D, public ManagedObject {
26
27 public:
28
30 friend class HistogramFactory;
31
32 public:
33
37 Histogram2D(int nx, double lox, double upx,
38 int ny, double loy, double upy)
39 : xfax(new Axis(nx, lox, upx)), xvax(0), yfax(new Axis(ny, loy, upy)),
40 sum(nx + 2, std::vector<int>(ny + 2)),
41 sumw(nx + 2, std::vector<double>(ny + 2)),
42 sumw2(nx + 2, std::vector<double>(ny + 2)),
43 sumxw(nx + 2, std::vector<double>(ny + 2)),
44 sumx2w(nx + 2, std::vector<double>(ny + 2)),
45 sumyw(nx + 2, std::vector<double>(ny + 2)),
46 sumy2w(nx + 2, std::vector<double>(ny + 2)) {
47 xax = xfax;
48 yax = yfax;
49 }
50
54 Histogram2D(const std::vector<double> & xedges,
55 const std::vector<double> & yedges)
56 : xfax(0), xvax(new VariAxis(xedges)),
57 yfax(0), yvax(new VariAxis(xedges)),
58 sum(xedges.size() + 1, std::vector<int>(yedges.size() + 1)),
59 sumw(xedges.size() + 1, std::vector<double>(yedges.size() + 1)),
60 sumw2(xedges.size() + 1, std::vector<double>(yedges.size() + 1)),
61 sumxw(xedges.size() + 1, std::vector<double>(yedges.size() + 1)),
62 sumx2w(xedges.size() + 1, std::vector<double>(yedges.size() + 1)),
63 sumyw(xedges.size() + 1, std::vector<double>(yedges.size() + 1)),
64 sumy2w(xedges.size() + 1, std::vector<double>(yedges.size() + 1)) {
65 xax = xvax;
66 yax = yvax;
67 }
68
73 : IBaseHistogram(h), IHistogram(h), IHistogram2D(h), ManagedObject(h),
74 xfax(0), xvax(0), yfax(0), yvax(0),
75 sum(h.sum), sumw(h.sumw), sumw2(h.sumw2),
76 sumxw(h.sumxw), sumx2w(h.sumx2w) ,
77 sumyw(h.sumyw), sumy2w(h.sumy2w){
78 const VariAxis * hxvax = dynamic_cast<const VariAxis *>(h.xax);
79 if ( hxvax ) xax = xvax = new VariAxis(*hxvax);
80 else xax = xfax = new Axis(dynamic_cast<const Axis &>(*h.xax));
81 const VariAxis * hyvax = dynamic_cast<const VariAxis *>(h.yax);
82 if ( hyvax ) yax = yvax = new VariAxis(*hyvax);
83 else yax = yfax = new Axis(dynamic_cast<const Axis &>(*h.yax));
84 }
85
87 virtual ~Histogram2D() {
88 delete xax;
89 delete yax;
90 }
91
96 std::string title() const {
97 return theTitle;
98 }
99
104 std::string name() const {
105 return title();
106 }
107
113 bool setTitle(const std::string & title) {
114 theTitle = title;
115 return true;
116 }
117
121 IAnnotation & annotation() {
122 throw std::runtime_error("LWH cannot handle annotations");
123 return *anno;
124 }
125
129 const IAnnotation & annotation() const {
130 throw std::runtime_error("LWH cannot handle annotations");
131 return *anno;
132 }
133
138 int dimension() const {
139 return 2;
140 }
141
146 bool reset() {
147 const int nx = xax->bins() + 2;
148 const int ny = yax->bins() + 2;
149 sum = std::vector< std::vector<int> >(nx, std::vector<int>(ny));
150 sumw = std::vector< std::vector<double> >(nx, std::vector<double>(ny));
151 sumw2 = sumw;
152 sumxw = sumw;
153 sumx2w = sumw;
154 sumyw = sumw;
155 sumy2w = sumw;
156 return true;
157 }
158
164 int entries() const {
165 int si = 0;
166 for ( int ix = 2; ix < xax->bins() + 2; ++ix )
167 for ( int iy = 2; iy < yax->bins() + 2; ++iy ) si += sum[ix][iy];
168 return si;
169 }
170
178 int allEntries() const {
179 return entries() + extraEntries();
180 }
181
186 int extraEntries() const {
187 int esum = sum[0][0] + sum[1][0] + sum[0][1] + sum[1][1];
188 for ( int ix = 2; ix < xax->bins() + 2; ++ix )
189 esum += sum[ix][0] + sum[ix][1];
190 for ( int iy = 2; iy < yax->bins() + 2; ++iy )
191 esum += sum[0][iy] + sum[1][iy];
192 return esum;
193 }
194
200 double equivalentBinEntries() const {
201 double sw = 0.0;
202 double sw2 = 0.0;
203 for ( int ix = 2; ix < xax->bins() + 2; ++ix )
204 for ( int iy = 2; iy < yax->bins() + 2; ++iy ) {
205 sw += sumw[ix][iy];
206 sw2 += sumw2[ix][iy];
207 }
208 return sw2/(sw*sw);
209 }
210
217 double sumBinHeights() const {
218 double sw = 0.0;
219 for ( int ix = 2; ix < xax->bins() + 2; ++ix )
220 for ( int iy = 2; iy < yax->bins() + 2; ++iy ) sw += sumw[ix][iy];
221 return sw;
222 }
223
229 double sumAllBinHeights() const {
231 }
232
237 double sumExtraBinHeights() const {
238 int esum = sumw[0][0] + sumw[1][0] + sumw[0][1] + sumw[1][1];
239 for ( int ix = 2; ix < xax->bins() + 2; ++ix )
240 esum += sumw[ix][0] + sumw[ix][1];
241 for ( int iy = 2; iy < yax->bins() + 2; ++iy )
242 esum += sumw[0][iy] + sumw[1][iy];
243 return esum;
244 }
245
251 double minBinHeight() const {
252 double minw = sumw[2][2];
253 for ( int ix = 2; ix < xax->bins() + 2; ++ix )
254 for ( int iy = 2; iy < yax->bins() + 2; ++iy )
255 minw = std::min(minw, sumw[ix][iy]);
256 return minw;
257 }
258
264 double maxBinHeight() const{
265 double maxw = sumw[2][2];
266 for ( int ix = 2; ix < xax->bins() + 2; ++ix )
267 for ( int iy = 2; iy < yax->bins() + 2; ++iy )
268 maxw = std::max(maxw, sumw[ix][iy]);
269 return maxw;
270 }
271
279 bool fill(double x, double y, double weight = 1.) {
280 int ix = xax->coordToIndex(x) + 2;
281 int iy = yax->coordToIndex(y) + 2;
282 ++sum[ix][iy];
283 sumw[ix][iy] += weight;
284 sumxw[ix][iy] += x*weight;
285 sumx2w[ix][iy] += x*x*weight;
286 sumyw[ix][iy] += y*weight;
287 sumy2w[ix][iy] += y*y*weight;
288 sumw2[ix][iy] += weight*weight;
289 return weight >= 0 && weight <= 1;
290 }
291
298 double binMeanX(int xindex, int yindex) const {
299 int ix = xindex + 2;
300 int iy = yindex + 2;
301 return sumw[ix][iy] != 0.0? sumxw[ix][iy]/sumw[ix][iy]:
302 ( xvax? xvax->binMidPoint(xindex): xfax->binMidPoint(xindex) );
303 };
304
311 double binMeanY(int xindex, int yindex) const {
312 int ix = xindex + 2;
313 int iy = yindex + 2;
314 return sumw[ix][iy] != 0.0? sumyw[ix][iy]/sumw[ix][iy]:
315 ( yvax? yvax->binMidPoint(yindex): xfax->binMidPoint(yindex) );
316 };
317
324 double binRmsX(int xindex, int yindex) const {
325 int ix = xindex + 2;
326 int iy = yindex + 2;
327 return sumw[ix][iy] == 0.0 || sum[ix][iy] < 2? xax->binWidth(xindex):
328 std::sqrt(std::max(sumw[ix][iy]*sumx2w[ix][iy] -
329 sumxw[ix][iy]*sumxw[ix][iy], 0.0))/sumw[ix][iy];
330 };
331
338 double binRmsY(int xindex, int yindex) const {
339 int ix = xindex + 2;
340 int iy = yindex + 2;
341 return sumw[ix][iy] == 0.0 || sum[ix][iy] < 2? yax->binWidth(yindex):
342 std::sqrt(std::max(sumw[ix][iy]*sumy2w[ix][iy] -
343 sumyw[ix][iy]*sumyw[ix][iy], 0.0))/sumw[ix][iy];
344 };
345
352 int binEntries(int xindex, int yindex) const {
353 return sum[xindex + 2][yindex + 2];
354 }
355
363 virtual int binEntriesX(int index) const {
364 int ret = 0;
365 for ( int iy = 2; iy < yax->bins() + 2; ++iy )
366 ret += sum[index + 2][iy];
367 return ret;
368 }
369
377 virtual int binEntriesY(int index) const {
378 int ret = 0;
379 for ( int ix = 2; ix < xax->bins() + 2; ++ix )
380 ret += sum[ix][index + 2];
381 return ret;
382 }
383
390 double binHeight(int xindex, int yindex) const {
393 return sumw[xindex + 2][yindex + 2];
394 }
395
403 virtual double binHeightX(int index) const {
404 double ret = 0;
405 for ( int iy = 2; iy < yax->bins() + 2; ++iy )
406 ret += sumw[index + 2][iy];
407 return ret;
408 }
409
417 virtual double binHeightY(int index) const {
418 double ret = 0;
419 for ( int ix = 2; ix < xax->bins() + 2; ++ix )
420 ret += sumw[ix][index + 2];
421 return ret;
422 }
423
430 double binError(int xindex, int yindex) const {
431 return std::sqrt(sumw2[xindex + 2][yindex + 2]);
432 }
433
439 double meanX() const {
440 double s = 0.0;
441 double sx = 0.0;
442 for ( int ix = 2; ix < xax->bins() + 2; ++ix )
443 for ( int iy = 2; iy < yax->bins() + 2; ++iy ) {
444 s += sumw[ix][iy];
445 sx += sumxw[ix][iy];
446 }
447 return s != 0.0? sx/s: 0.0;
448 }
449
455 double meanY() const {
456 double s = 0.0;
457 double sy = 0.0;
458 for ( int ix = 2; ix < xax->bins() + 2; ++ix )
459 for ( int iy = 2; iy < yax->bins() + 2; ++iy ) {
460 s += sumw[ix][iy];
461 sy += sumyw[ix][iy];
462 }
463 return s != 0.0? sy/s: 0.0;
464 }
465
471 double rmsX() const {
472 double s = 0.0;
473 double sx = 0.0;
474 double sx2 = 0.0;
475 for ( int ix = 2; ix < xax->bins() + 2; ++ix )
476 for ( int iy = 2; iy < yax->bins() + 2; ++iy ) {
477 s += sumw[ix][iy];
478 sx += sumxw[ix][iy];
479 sx2 += sumx2w[ix][iy];
480 }
481 return s != 0.0? std::sqrt(std::max(s*sx2 - sx*sx, 0.0))/s:
482 xax->upperEdge() - xax->lowerEdge();
483 }
484
490 double rmsY() const {
491 double s = 0.0;
492 double sy = 0.0;
493 double sy2 = 0.0;
494 for ( int ix = 2; ix < xax->bins() + 2; ++ix )
495 for ( int iy = 2; iy < yax->bins() + 2; ++iy ) {
496 s += sumw[ix][iy];
497 sy += sumyw[ix][iy];
498 sy2 += sumy2w[ix][iy];
499 }
500 return s != 0.0? std::sqrt(std::max(s*sy2 - sy*sy, 0.0))/s:
501 yax->upperEdge() - yax->lowerEdge();
502 }
503
505 double getSumW(int xindex, int yindex) const {
506 return sumw[xindex + 2][yindex + 2];
507 }
508
510 double getSumW2(int xindex, int yindex) const {
511 return sumw2[xindex + 2][yindex + 2];
512 }
513
515 double getSumXW(int xindex, int yindex) const {
516 return sumxw[xindex + 2][yindex + 2];
517 }
518
520 double getSumX2W(int xindex, int yindex) const {
521 return sumx2w[xindex + 2][yindex + 2];
522 }
523
525 double getSumYW(int xindex, int yindex) const {
526 return sumyw[xindex + 2][yindex + 2];
527 }
528
530 double getSumY2W(int xindex, int yindex) const {
531 return sumy2w[xindex + 2][yindex + 2];
532 }
533
538 const IAxis & xAxis() const {
539 return *xax;
540 }
541
546 const IAxis & yAxis() const {
547 return *yax;
548 }
549
557 int coordToIndexX(double coord) const {
558 return xax->coordToIndex(coord);
559 }
560
568 int coordToIndexY(double coord) const {
569 return yax->coordToIndex(coord);
570 }
571
577 bool add(const Histogram2D & h) {
578 if ( xax->upperEdge() != h.xax->upperEdge() ||
579 xax->lowerEdge() != h.xax->lowerEdge() ||
580 xax->bins() != h.xax->bins() ) return false;
581 if ( yax->upperEdge() != h.yax->upperEdge() ||
582 yax->lowerEdge() != h.yax->lowerEdge() ||
583 yax->bins() != h.yax->bins() ) return false;
584 for ( int ix = 0; ix < xax->bins() + 2; ++ix )
585 for ( int iy = 0; iy < yax->bins() + 2; ++iy ) {
586 sum[ix][iy] += h.sum[ix][iy];
587 sumw[ix][iy] += h.sumw[ix][iy];
588 sumxw[ix][iy] += h.sumxw[ix][iy];
589 sumx2w[ix][iy] += h.sumx2w[ix][iy];
590 sumyw[ix][iy] += h.sumyw[ix][iy];
591 sumy2w[ix][iy] += h.sumy2w[ix][iy];
592 sumw2[ix][iy] += h.sumw2[ix][iy];
593 }
594 return true;
595 }
596
602 bool add(const IHistogram2D & hist) {
603 return add(dynamic_cast<const Histogram2D &>(hist));
604 }
605
610 bool scale(double s) {
611 for ( int ix = 0; ix < xax->bins() + 2; ++ix )
612 for ( int iy = 0; iy < yax->bins() + 2; ++iy ) {
613 sumw[ix][iy] *= s;
614 sumxw[ix][iy] *= s;
615 sumx2w[ix][iy] *= s;
616 sumyw[ix][iy] *= s;
617 sumy2w[ix][iy] *= s;
618 sumw2[ix][iy] *= s*s;
619 }
620 return true;
621 }
622
630 void normalize(double intg) {
631 double oldintg = sumAllBinHeights();
632 if ( oldintg == 0.0 ) return;
633 for ( int ix = 0; ix < xax->bins() + 2; ++ix )
634 for ( int iy = 0; iy < yax->bins() + 2; ++iy ) {
635 double fac = intg/oldintg;
636 if ( ix >= 2 && iy >= 2 )
637 fac /= (xax->binUpperEdge(ix - 2) - xax->binLowerEdge(ix - 2))*
638 (yax->binUpperEdge(iy - 2) - yax->binLowerEdge(iy - 2));
639 sumw[ix][iy] *= fac;
640 sumxw[ix][iy] *= fac;
641 sumx2w[ix][iy] *= fac;
642 sumyw[ix][iy] *= fac;
643 sumy2w[ix][iy] *= fac;
644 sumw2[ix][iy] *= fac*fac;
645 }
646 }
647
652 // double integral() const {
653 // double intg = sumw[0] + sumw[1];
654 // for ( int i = 2; i < ax->bins() + 2; ++i )
655
656 // is this right? Leave out bin width factor?
657
658 // intg += sumw[ix][iy]*(ax->binUpperEdge(i - 2) - ax->binLowerEdge(i - 2));
659 // return intg;
660 // }
661
666 void * cast(const std::string &) const {
667 return 0;
668 }
669
673 bool writeXML(std::ostream & os, std::string path, std::string name) {
674 //std::cout << "Writing out histogram " << name << " in AIDA file format!" << std::endl;
675 os << " <histogram2d name=\"" << name
676 << "\"\n title=\"" << title()
677 << "\" path=\"" << path
678 << "\">\n <axis max=\"" << xax->upperEdge()
679 << "\" numberOfBins=\"" << xax->bins()
680 << "\" min=\"" << xax->lowerEdge()
681 << "\" direction=\"x\"";
682 if ( xvax ) {
683 os << ">\n";
684 for ( int i = 0, N = xax->bins() - 1; i < N; ++i )
685 os << " <binBorder value=\"" << xax->binUpperEdge(i) << "\"/>\n";
686 os << " </axis>\n";
687 } else {
688 os << "/>\n";
689 }
690 os << " <axis max=\"" << yax->upperEdge()
691 << "\" numberOfBins=\"" << yax->bins()
692 << "\" min=\"" << yax->lowerEdge()
693 << "\" direction=\"y\"";
694 if ( yvax ) {
695 os << ">\n";
696 for ( int i = 0, N = yax->bins() - 1; i < N; ++i )
697 os << " <binBorder value=\"" << yax->binUpperEdge(i) << "\"/>\n";
698 os << " </axis>\n";
699 } else {
700 os << "/>\n";
701 }
702 os << " <statistics entries=\"" << entries()
703 << "\">\n <statistic mean=\"" << meanX()
704 << "\" direction=\"x\"\n rms=\"" << rmsX()
705 << "\"/>\n </statistics>\n <statistic mean=\"" << meanY()
706 << "\" direction=\"y\"\n rms=\"" << rmsY()
707 << "\"/>\n </statistics>\n <data2d>\n";
708 for ( int ix = 0; ix < xax->bins() + 2; ++ix )
709 for ( int iy = 0; iy < yax->bins() + 2; ++iy )
710 if ( sum[ix][iy] ) {
711 os << " <bin2d binNumX=\"";
712 if ( ix == 0 ) os << "UNDERFLOW";
713 else if ( ix == 1 ) os << "OVERFLOW";
714 else os << ix - 2;
715 os << "\" binNumY=\"";
716 if ( iy == 0 ) os << "UNDERFLOW";
717 else if ( iy == 1 ) os << "OVERFLOW";
718 else os << iy - 2;
719 os << "\" entries=\"" << sum[ix][iy]
720 << "\" height=\"" << sumw[ix][iy]
721 << "\"\n error=\"" << std::sqrt(sumw2[ix][iy])
722 << "\" error2=\"" << sumw2[ix][iy]
723 << "\"\n weightedMeanX=\"" << binMeanX(ix - 2, iy - 2)
724 << "\" weightedRmsX=\"" << binRmsX(ix - 2, iy - 2)
725 << "\"\n weightedMeanY=\"" << binMeanY(ix - 2, iy - 2)
726 << "\" weightedRmsY=\"" << binRmsY(ix - 2, iy - 2)
727 << "\"/>\n";
728 }
729 os << " </data2d>\n </histogram2d>" << std::endl;
730 return true;
731 }
732
733
738 bool writeFLAT(std::ostream & os, std::string path, std::string name) {
739 os << "#2D " << path << "/" << name << " " << xax->lowerEdge()
740 << " " << xax->bins() << " " << xax->upperEdge() << " "
741 << yax->lowerEdge() << " " << yax->bins() << " " << yax->upperEdge()
742 << " \"" << title() << "\"" << std::endl;
743 for ( int ix = 2; ix < xax->bins() + 2; ++ix ) {
744 for ( int iy = 2; iy < yax->bins() + 2; ++iy )
745 os << 0.5*(xax->binLowerEdge(ix - 2)+xax->binUpperEdge(ix - 2)) << " "
746 << 0.5*(yax->binLowerEdge(iy - 2)+yax->binUpperEdge(iy - 2))
747 << " " << sumw[ix][iy] << " " << sqrt(sumw2[ix][iy])
748 << " " << sum[ix][iy] << std::endl;
749 os << std::endl;
750 }
751 os << std::endl;
752 return true;
753 }
754
755
756
757 #ifdef HAVE_ROOT
761 //bool writeROOT(std::ostream & os, std::string path, std::string name) {
762 bool writeROOT(TFile* file, std::string path, std::string name) {
763
764 //std::cout << "Writing out histogram " << name.c_str() << " in ROOT file format" << std::endl;
765
766 TH1D* hist1d;
767 int nbins;
768 if (!vax || vax->isFixedBinning() ) {//equidistant binning (easier case)
769 nbins = ax->bins();
770 hist1d = new TH1D(name.c_str(), title().c_str(), nbins, ax->lowerEdge(), ax->upperEdge());
771 }
772 else {
773 nbins = vax->bins();
774 double* bins = new double[nbins+1];
775 for (int i=0; i<nbins; ++i) {
776 bins[ix][iy] = vax->binEdges(i).first;
777 }
778 bins[nbins] = vax->binEdges(nbins-1).second; //take last bin right border
779 hist1d = new TH1D(name.c_str(), title().c_str(), nbins, bins);
780 delete [] bins;
781 }
782
783
784 double entries = 0;
785 for ( int i = 0; i < nbins + 2; ++i ) {
786 if ( sum[ix][iy] ) {
787 //i==0: underflow->RootBin(0), i==1: overflow->RootBin(NBins+1)
788 entries = entries + sum[ix][iy];
789 int j=i;
790 if (i==0) j=0; //underflow
791 else if (i==1) j=nbins+1; //overflow
792 if (i>=2) j=i-1; //normal bin entries
793 hist1d->SetBinContent(j, sumw[ix][iy]);
794 hist1d->SetBinError(j, sqrt(sumw2[ix][iy]));
795 //hist1d->Fill(binMean(i), sumw[ix][iy]);
796 }
797 }
798
799 hist1d->Sumw2();
800 hist1d->SetEntries(entries);
801
802 std::string DirName; //remove preceding slash from directory name, else ROOT error
803 for (unsigned int i=1; i<path.size(); ++i) DirName += path[i];
804 if (!file->Get(DirName.c_str())) file->mkdir(DirName.c_str());
805 file->cd(DirName.c_str());
806 hist1d->Write();
807
808 delete hist1d;
809
810 return true;
811 }
812
813 #endif
814
815
816
817 private:
818
820 std::string theTitle;
821
823 IAxis * xax;
824
827
830
832 IAxis * yax;
833
836
839
841 std::vector< std::vector<int> > sum;
842
844 std::vector< std::vector<double> > sumw;
845
847 std::vector< std::vector<double> > sumw2;
848
850 std::vector< std::vector<double> > sumxw;
851
853 std::vector< std::vector<double> > sumx2w;
854
856 std::vector< std::vector<double> > sumyw;
857
859 std::vector< std::vector<double> > sumy2w;
860
862 IAnnotation * anno;
863
864 };
865
866}
867
868#endif /* LWH_Histogram1D_H */
An Axis represents a binned histogram axis.
Definition: Axis.h:30
double binMidPoint(int index) const
Return the midpoint of the specified bin.
Definition: Axis.h:134
User level interface to 1D Histogram.
Definition: Histogram2D.h:25
virtual ~Histogram2D()
Destructor.
Definition: Histogram2D.h:87
std::vector< std::vector< double > > sumy2w
The weighted y-square-values.
Definition: Histogram2D.h:859
std::string theTitle
The title.
Definition: Histogram2D.h:820
int coordToIndexX(double coord) const
Get the bin number corresponding to a given coordinate along the x axis.
Definition: Histogram2D.h:557
int coordToIndexY(double coord) const
Get the bin number corresponding to a given coordinate along the y axis.
Definition: Histogram2D.h:568
bool reset()
Reset the Histogram; as if just created.
Definition: Histogram2D.h:146
double meanX() const
The mean of the IHistogram2D along the x axis.
Definition: Histogram2D.h:439
const IAxis & yAxis() const
Get the y axis of the IHistogram2D.
Definition: Histogram2D.h:546
std::vector< std::vector< double > > sumyw
The weighted y-values.
Definition: Histogram2D.h:856
std::vector< std::vector< int > > sum
The counts.
Definition: Histogram2D.h:841
double sumExtraBinHeights() const
Sum of heights in the UNDERFLOW and OVERFLOW bins.
Definition: Histogram2D.h:237
double meanY() const
The mean of the IHistogram2D along the y axis.
Definition: Histogram2D.h:455
double binError(int xindex, int yindex) const
The error of a given bin.
Definition: Histogram2D.h:430
std::vector< std::vector< double > > sumw2
The squared weights.
Definition: Histogram2D.h:847
VariAxis * xvax
Pointer (possibly null) to a axis with fixed bin width.
Definition: Histogram2D.h:829
VariAxis * yvax
Pointer (possibly null) to a axis with fixed bin width.
Definition: Histogram2D.h:838
const IAxis & xAxis() const
Get the x axis of the IHistogram2D.
Definition: Histogram2D.h:538
IAnnotation & annotation()
Not implemented in LWH.
Definition: Histogram2D.h:121
double sumBinHeights() const
Sum of in-range bin heights in the IHistogram, UNDERFLOW and OVERFLOW bins are excluded.
Definition: Histogram2D.h:217
double maxBinHeight() const
Maximum height of the in-range bins, i.e.
Definition: Histogram2D.h:264
double rmsX() const
The RMS of the IHistogram2D along the x axis.
Definition: Histogram2D.h:471
const IAnnotation & annotation() const
Not implemented in LWH.
Definition: Histogram2D.h:129
Axis * xfax
Pointer (possibly null) to a axis with fixed bin width.
Definition: Histogram2D.h:826
double getSumY2W(int xindex, int yindex) const
The weighted x-square-values.
Definition: Histogram2D.h:530
IAxis * yax
The axis.
Definition: Histogram2D.h:832
double binHeight(int xindex, int yindex) const
Total height of the corresponding bin (ie the sum of the weights in this bin).
Definition: Histogram2D.h:390
Axis * yfax
Pointer (possibly null) to a axis with fixed bin width.
Definition: Histogram2D.h:835
int binEntries(int xindex, int yindex) const
Number of entries in the corresponding bin (ie the number of times fill was called for this bin).
Definition: Histogram2D.h:352
double binMeanX(int xindex, int yindex) const
The weighted mean along the x-axis of a bin.
Definition: Histogram2D.h:298
double getSumW2(int xindex, int yindex) const
The squared weights.
Definition: Histogram2D.h:510
double binRmsX(int xindex, int yindex) const
The weighted x-RMS of a bin.
Definition: Histogram2D.h:324
bool add(const Histogram2D &h)
Add to this Histogram2D the contents of another IHistogram2D.
Definition: Histogram2D.h:577
virtual double binHeightX(int index) const
Sum of all the heights of the bins along a given x bin.
Definition: Histogram2D.h:403
void normalize(double intg)
Scale the given histogram so that the integral over all bins (including overflow) gives intg.
Definition: Histogram2D.h:630
double binMeanY(int xindex, int yindex) const
The weighted mean along the y-axis of a bin.
Definition: Histogram2D.h:311
bool writeXML(std::ostream &os, std::string path, std::string name)
Write out the histogram in the AIDA xml format.
Definition: Histogram2D.h:673
virtual double binHeightY(int index) const
Sum of all the heights of the bins along a given y bin.
Definition: Histogram2D.h:417
std::string name() const
Get the Histogram's name.
Definition: Histogram2D.h:104
virtual int binEntriesX(int index) const
Sum of all the entries of the bins along a given x bin.
Definition: Histogram2D.h:363
Histogram2D(const std::vector< double > &xedges, const std::vector< double > &yedges)
Standard constructor for variable bin width.
Definition: Histogram2D.h:54
double getSumX2W(int xindex, int yindex) const
The weighted x-square-values.
Definition: Histogram2D.h:520
int allEntries() const
Sum of the entries in all the IHistogram's bins, i.e in-range bins, UNDERFLOW and OVERFLOW.
Definition: Histogram2D.h:178
std::vector< std::vector< double > > sumw
The weights.
Definition: Histogram2D.h:844
virtual int binEntriesY(int index) const
Sum of all the entries of the bins along a given y bin.
Definition: Histogram2D.h:377
bool writeFLAT(std::ostream &os, std::string path, std::string name)
Write out the histogram in a flat text file suitable for eg.
Definition: Histogram2D.h:738
double equivalentBinEntries() const
Number of equivalent entries, i.e.
Definition: Histogram2D.h:200
bool fill(double x, double y, double weight=1.)
Fill the IHistogram1D with a value and the corresponding weight.
Definition: Histogram2D.h:279
std::vector< std::vector< double > > sumxw
The weighted x-values.
Definition: Histogram2D.h:850
bool setTitle(const std::string &title)
Set the histogram title.
Definition: Histogram2D.h:113
Histogram2D(const Histogram2D &h)
Copy constructor.
Definition: Histogram2D.h:72
int extraEntries() const
Number of entries in the UNDERFLOW and OVERFLOW bins.
Definition: Histogram2D.h:186
double getSumW(int xindex, int yindex) const
The weights.
Definition: Histogram2D.h:505
bool add(const IHistogram2D &hist)
Add to this IHistogram1D the contents of another IHistogram1D.
Definition: Histogram2D.h:602
double rmsY() const
The RMS of the IHistogram2D along the x axis.
Definition: Histogram2D.h:490
IAxis * xax
The axis.
Definition: Histogram2D.h:823
double binRmsY(int xindex, int yindex) const
The weighted y-RMS of a bin.
Definition: Histogram2D.h:338
int entries() const
Get the number of in-range entries in the Histogram.
Definition: Histogram2D.h:164
double minBinHeight() const
Minimum height of the in-range bins, i.e.
Definition: Histogram2D.h:251
void * cast(const std::string &) const
Return the integral over the histogram bins assuming it has been normalize()d.
Definition: Histogram2D.h:666
double getSumXW(int xindex, int yindex) const
The weighted x-values.
Definition: Histogram2D.h:515
Histogram2D(int nx, double lox, double upx, int ny, double loy, double upy)
Standard constructor.
Definition: Histogram2D.h:37
int dimension() const
Get the Histogram's dimension.
Definition: Histogram2D.h:138
double getSumYW(int xindex, int yindex) const
The weighted x-values.
Definition: Histogram2D.h:525
std::vector< std::vector< double > > sumx2w
The weighted x-square-values.
Definition: Histogram2D.h:853
std::string title() const
Get the Histogram's title.
Definition: Histogram2D.h:96
double sumAllBinHeights() const
Sum of the heights of all the IHistogram's bins, i.e in-range bins, UNDERFLOW and OVERFLOW.
Definition: Histogram2D.h:229
IAnnotation * anno
dummy pointer to non-existen annotation.
Definition: Histogram2D.h:862
bool scale(double s)
Scale the contents of this histogram with the given factor.
Definition: Histogram2D.h:610
User level interface for factory classes of Histograms (binned, unbinned, and profile).
The creator of trees.
Definition: ManagedObject.h:25
An VariAxis represents a binned histogram axis.
Definition: VariAxis.h:31
double binMidPoint(int index) const
Return the midpoint of the specified bin.
Definition: VariAxis.h:166
The LWH namespace contains a Light-Weight Histogram package which implements the most rudimentary his...
STL namespace.