4 #ifndef __bayesian_estimator_H
5 #define __bayesian_estimator_H
8 #include "impact_parameter_distribution.h"
16 #include <KVValueRange.h>
17 #include <KVNameValueList.h>
43 double operator()(
double X,
double mean,
double reduced_variance)
69 double operator()(
double X,
double mean,
double reduced_variance)
95 double operator()(
double X,
double mean,
double reduced_variance)
220 <
class FittingFunction,
class FluctuationKernel>
357 if (den > 0)
return num / den;
626 auto obs_vs_b =
new TH2F(
"obs_vs_b", obs_vs_X->
GetTitle(),
627 baxis_nbins, baxis_bmin, baxis_bmax, Ny,
ymin,
ymax);
628 for (
int binx = 1; binx <= Nx; ++binx) {
631 for (
int biny = 1; biny <= Ny; ++biny) {
634 for (
int i = 0; i < stat; ++i) {
646 Error(
"GraphMeanbvsX",
"Need to give histogram of X observable to NormalizeHisto() first");
654 std::cout <<
N << std::endl;
656 for (
int i = 1; i <=
N; ++i) {
660 std::cout << i <<
" " <<
X;
662 g->AddPoint(
X, mean);
663 g->SetPointError(
g->GetN() - 1, 0,
sigma);
664 std::cout <<
" " << mean <<
" " <<
sigma << std::endl;
677 Warning(
"update_fit_params",
"no histogram set with FitHisto(TH1*)");
682 Warning(
"update_fit_params",
"no fit function found in histogram");
704 f->SetLineColor(color);
705 f->SetMarkerColor(color);
708 return f->GetMaximum();
732 int first_bin(0), last_bin(0);
733 for (
int i = 1; i <= incl->
GetNbinsX(); ++i) {
736 if (
sel->GetBinContent(i) > 0) {
737 if (!first_bin) first_bin = i;
754 double cb_mean(0), cb_sqrmean(0), sum_pcb(0);
756 for (
int i = 0; i < 500; ++i) {
757 double cb = i / 499.;
760 cb_mean += p_cb * cb;
761 cb_sqrmean += p_cb * cb * cb;
764 f->SetPoint(i, cb, p_cb);
768 cb_sqrmean /= sum_pcb;
771 sigma_cb =
TMath::Sqrt(cb_sqrmean - cb_mean * cb_mean);
774 f->SetLineColor(color);
775 f->SetMarkerColor(color);
778 if (
TString(opt) ==
"same")
f->Draw(
"l");
803 for (
int i = 0; i < 500; ++i) {
806 if (sig > maxS) maxS = sig;
807 f->SetPoint(i,
b, sig);
809 f->SetLineColor(color);
810 f->SetMarkerColor(color);
813 if (
TString(opt) ==
"same")
f->Draw(
"l");
839 for (
int i = 0; i < npts; ++i) {
842 f->SetPoint(i,
b, sig);
873 int first_bin(0), last_bin(0);
874 for (
int i = 1; i <= incl->
GetNbinsX(); ++i) {
877 if (
sel->GetBinContent(i) > 0) {
878 if (!first_bin) first_bin = i;
893 double bmean(0), bsqrmean(0), sigtot(0);
895 for (
int i = 0; i < 500; ++i) {
899 bsqrmean += sig *
b *
b;
901 f->SetPoint(i,
b, sig);
903 f->SetLineColor(color);
904 f->SetMarkerColor(color);
907 mean = bmean / sigtot;
910 if (
TString(opt) ==
"same")
f->Draw(
"l");
937 int first_bin(0), last_bin(0);
938 for (
int i = 1; i <= incl->
GetNbinsX(); ++i) {
941 if (
sel->GetBinContent(i) > 0) {
942 if (!first_bin) first_bin = i;
957 double bmean(0), bsqrmean(0), sigtot(0);
959 for (
int i = 0; i < 500; ++i) {
963 bsqrmean += sig *
b *
b;
965 f->SetPoint(i,
b, sig);
967 f->SetLineColor(color);
968 f->SetMarkerColor(color);
971 mean = bmean / sigtot;
974 if (
TString(opt) ==
"same")
f->Draw(
"l");
1001 int first_bin(0), last_bin(0);
1002 for (
int i = 1; i <= incl->
GetNbinsX(); ++i) {
1005 if (
sel->GetBinContent(i) > 0) {
1006 if (!first_bin) first_bin = i;
1043 for (
int i = 0; i < 500; ++i) {
1051 Warning(
"GetMeanAndSigmaBDistForXSelection",
"Total cross-section = 0!");
1069 f->SetLineColor(color);
1141 b_range.
Min(), b_range.
Max(), X_range.
Min(), X_range.
Max(), 0);
#define ClassDef(name, id)
winID h TVirtualViewer3D TVirtualGLPainter p
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t sel
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t b
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t g
R__EXTERN TRandom * gRandom
Base class for KaliVeda framework.
Fluctuation kernel using binomial distribution for use with bayesian_estimator.
double operator()(double X, double mean, double reduced_variance)
Fluctuation kernel using negative binomial distribution for use with bayesian_estimator.
double operator()(double X, double mean, double reduced_variance)
Impact parameter distribution reconstruction from experimental data.
double P_X_cb_for_integral(double *x, double *par)
impact_parameter_distribution fIPDist
void DrawBDistForSelection(TH1 *sel, TH1 *incl, double &mean, double &sigma, Option_t *opt="", Color_t color=kRed, const TString &title="")
void DrawCbDistForSelection(TH1 *sel, TH1 *incl, double &mean_cb, double &sigma_cb, Option_t *opt="", Color_t color=kRed, const TString &title="")
void RenormaliseHisto(TH1 *h)
KVNameValueList GetFitParameters() const
double mean_X_vs_b(double *x, double *par)
TF1 p_X_X_integrator_with_selection
virtual ~bayesian_estimator()
double P_X_cb(double X, double cb)
double DrawBDistForXSelection(KVValueRange< double > Xrange, Option_t *opt="", Color_t color=kRed, const TString &title="")
TF1 Cb_dist_for_arb_X_select
void GetMeanAndSigmaBDistForSelection(TH1 *sel, TH1 *incl, double &mean, double &sigma)
TF1 & GetB_dist_for_X_select()
bayesian_estimator(Bool_t integer_variable=false)
TGraph * GraphMeanXvsb(int npts=500)
double cb_dist_for_X_selection(double *x, double *p)
void SetIPDistParams(double sigmaR, double deltab)
FluctuationKernel theKernel
void SetIPDistFromHisto(TH1 *ip_histo)
TF1 * GetFittedP_X(double norm=1.0)
double b_dist_for_arb_X_selection_from_histo(double *x, double *p)
double P_X_cb_for_TF2_obs_vs_b(double *x, double *)
double P_X_from_fit(double *x, double *par)
FittingFunction theFitter
double b_dist_for_arb_X_selection(double *x, double *p)
double DrawCbDistForXSelection(double X1, double X2, Option_t *opt="", Color_t color=kRed, const TString &title="")
void FitHisto(TH1 *h=nullptr)
TGraphErrors * GraphMeanbvsX()
bayesian_estimator(const FittingFunction &previous_fit, Bool_t integer_variable=false)
double b_dist_for_X_selection(double *x, double *p)
impact_parameter_distribution & GetIPDist()
void GetMeanAndSigmaBDistForXSelection(KVValueRange< double > Xrange, double &mean, double &sigma)
double cb_integrated_P_X(double *x, double *p)
TF1 mean_X_vs_cb_function
std::vector< double > sel_rapp
double P_X_cb_for_X_integral(double *x, double *par)
void DrawNormalisedMeanXvsb(const TString &title, Color_t color, Option_t *opt)
void Print(Option_t *="") const
double cb_dist_for_arb_X_selection(double *x, double *p)
double mean_X_vs_cb(double *x, double *par)
TGraph * GraphBDistForXSelection(KVValueRange< double > Xrange, int npts=500)
void DrawBDistForSelectionFromIPHisto(TH1 *sel, TH1 *incl, double &mean, double &sigma, Option_t *opt="", Color_t color=kRed, const TString &title="")
double P_X_cb_for_X_integral_with_selection(double *x, double *par)
TGraph * GraphP_XForGivenB(double b, KVValueRange< double > Xrange, int npts=500)
TF2 * GetJointProbabilityDistribution(KVValueRange< double > b_range, KVValueRange< double > X_range)
void DrawMeanXvsCb(const TString &title="", Color_t color=-1, Option_t *opt="")
TF1 B_dist_for_arb_X_select
TH2 * TransformXaxisToBaxis(const TH2 *obs_vs_X, int baxis_nbins=100, double baxis_bmin=0, double baxis_bmax=1)
TF1 B_dist_for_arb_X_select_from_histo
void DrawFittedP_X(double norm=1.0, Option_t *opt="", Color_t color=kRed, const TString &title="")
Fluctuation kernel using gamma distribution for use with bayesian_estimator.
double operator()(double X, double mean, double reduced_variance)
Class implementing parametrizable impact parameter distributions.
Double_t GetDifferentialCrossSection(double b) const
Double_t GetDifferentialCrossSectionFromHisto(double bb)
TH1 * GetCentralityFromHisto()
const TF1 & GetCentrality()
void SetDeltaB_WithConstantCrossSection(Double_t deltab, Double_t sigmaR=0)
Handles lists of named parameters with different types, a list of KVNamedParameter objects.
Range of values specified by minimum, maximum.
ValueType ValueIofN(Int_t i, Int_t n) const
virtual void SetLineColor(Color_t lcolor)
virtual Double_t GetBinCenter(Int_t bin) const
virtual Double_t GetBinLowEdge(Int_t bin) const
virtual Double_t GetBinWidth(Int_t bin) const
virtual Double_t GetBinUpEdge(Int_t bin) const
virtual Double_t Mean(Double_t a, Double_t b, const Double_t *params=nullptr, Double_t epsilon=0.000001)
virtual TH1 * GetHistogram() const
virtual void SetRange(Double_t xmin, Double_t xmax)
virtual Double_t Integral(Double_t a, Double_t b, Double_t epsrel=1.e-12)
void SetTitle(const char *title="") override
void Draw(Option_t *option="") override
virtual Double_t Variance(Double_t a, Double_t b, const Double_t *params=nullptr, Double_t epsilon=0.000001)
virtual TF1 * DrawCopy(Option_t *option="") const
virtual Double_t GetRandom(Double_t xmin, Double_t xmax, TRandom *rng=nullptr, Option_t *opt=nullptr)
virtual void SetParameters(const Double_t *params)
virtual void SetParNames(const char *name0="p0", const char *name1="p1", const char *name2="p2", const char *name3="p3", const char *name4="p4", const char *name5="p5", const char *name6="p6", const char *name7="p7", const char *name8="p8", const char *name9="p9", const char *name10="p10")
virtual Double_t Eval(Double_t x, Double_t y=0, Double_t z=0, Double_t t=0) const
virtual void SetParameter(const TString &name, Double_t value)
virtual void SetPoint(Int_t i, Double_t x, Double_t y)
virtual Double_t GetBinCenter(Int_t bin) const
virtual Int_t GetNbinsY() const
TObject * FindObject(const char *name) const override
virtual TFitResultPtr Fit(const char *formula, Option_t *option="", Option_t *goption="", Double_t xmin=0, Double_t xmax=0)
virtual Int_t GetNbinsX() const
virtual Double_t GetBinLowEdge(Int_t bin) const
virtual Double_t Integral(Int_t binx1, Int_t binx2, Option_t *option="") const
virtual Double_t GetBinContent(Int_t bin) const
virtual Double_t GetBinWidth(Int_t bin) const
virtual void Scale(Double_t c1=1, Option_t *option="")
virtual Int_t FindBin(Double_t x, Double_t y=0, Double_t z=0)
virtual Double_t GetBinContent(Int_t bin) const
const char * GetTitle() const override
virtual void Warning(const char *method, const char *msgfmt,...) const
virtual void Error(const char *method, const char *msgfmt,...) const
virtual Double_t Uniform(Double_t x1, Double_t x2)
double binomial_pdf(unsigned int k, double p, unsigned int n)
double negative_binomial_pdf(unsigned int k, double p, double n)
double gamma_pdf(double x, double alpha, double theta, double x0=0)
RVec< PromoteTypes< T0, T1 > > pow(const T0 &x, const RVec< T1 > &v)
fit(model, train_loader, val_loader, num_epochs, batch_size, optimizer, criterion, save_best, scheduler)
Double_t Sqrt(Double_t x)