18#include "HistSparse1D.hh"
22#include "TMultiGraph.h"
32TH1Set::TH1Set(
const char* name,
34 TH1D(name, title, 1, 0, 1)
40Int_t TH1Set::Fill(Double_t x, Double_t w)
45 if (data.HasAbscissa(x))
46 {bin = abscissaToBinIndex[x];}
53 if (!fSumw2.fN && w != 1.0 && !TestBit(TH1::kIsNotW) ) Sumw2();
54 if (fSumw2.fN) fSumw2.fArray[bin] += w*w;
55 AddBinContent(bin, w);
56 if (bin == 0 || bin > fXaxis.GetNbins())
69void TH1Set::DoFillN(Int_t ntimes,
const Double_t *x,
const Double_t *w, Int_t stride)
72 for (Int_t i=0;i<ntimes;i+=stride)
78Int_t TH1Set::AddNewBin(
long long int x)
80 Int_t nBinsNew = fXaxis.GetNbins()+1;
81 fXaxis.Set(nBinsNew, fXaxis.GetXmin(), fXaxis.GetXmax()+1);
82 abscissaToBinIndex[x] = nBinsNew;
87Bool_t TH1Set::Add(
const TH1 *h1, Double_t c1)
89 Bool_t result = TH1D::Add(h1, c1);
91 auto casted =
dynamic_cast<const TH1Set*
>(h1);
96 auto& d = casted->data;
97 for (
const auto& bin : d)
98 {data[bin.first] += bin.second;}
104Double_t TH1Set::GetBinContentByAbscissa(
long long int x)
const
106 return data.HasAbscissa(x) ? GetBinContent(abscissaToBinIndex.at(x)) : 0;
109Double_t TH1Set::GetBinErrorByAbscissa(
long long int x)
const
111 return data.HasAbscissa(x) ? GetBinError(abscissaToBinIndex.at(x)) : 0;
114void TH1Set::SetBinContentByAbscissa(
long long int x, Double_t newValue)
116 if (data.HasAbscissa(x))
117 {SetBinContent(abscissaToBinIndex.at(x), newValue);}
119 {SetBinContent(AddNewBin(x), newValue);}
122void TH1Set::SetBinErrorByAbscissa(
long long int x, Double_t newError)
124 if (data.HasAbscissa(x))
125 {SetBinError(abscissaToBinIndex.at(x), newError);}
127 {SetBinError(AddNewBin(x), newError);}
TH1D but with a category axis.