76   fInterpolMethod( 
PDF::kSpline2 ),
 
   83   fHistAvgEvtPerBin  ( 0 ),
 
   84   fHistDefinedNBins  ( 0 ),
 
   87   fBorderMethodString( 0 ),
 
   88   fInterpolateString ( 0 ),
 
 
  119   fInterpolMethod( 
method ),
 
  126   fHistAvgEvtPerBin  ( 0 ),
 
  127   fHistDefinedNBins  ( 0 ),
 
  128   fKDEtypeString     ( 0 ),
 
  129   fKDEiterString     ( 0 ),
 
  130   fBorderMethodString( 0 ),
 
  131   fInterpolateString ( 0 ),
 
  136   fReadingVersion( 0 ),
 
 
  163   fInterpolMethod( 
PDF::kKDE ),
 
  170   fHistAvgEvtPerBin  ( 0 ),
 
  171   fHistDefinedNBins  ( 0 ),
 
  172   fKDEtypeString     ( 0 ),
 
  173   fKDEiterString     ( 0 ),
 
  174   fBorderMethodString( 0 ),
 
  175   fInterpolateString ( 0 ),
 
  180   fReadingVersion( 0 ),
 
 
  204   fInterpolMethod( 
PDF::kSpline0 ),
 
  211   fHistAvgEvtPerBin  ( 50 ),
 
  212   fHistDefinedNBins  ( 0 ),
 
  213   fKDEtypeString     ( 
"Gauss" ),
 
  214   fKDEiterString     ( 
"Nonadaptive" ),
 
  215   fBorderMethodString( 
"None" ),
 
  216   fInterpolateString ( 
"Spline2" ),
 
  221   fReadingVersion( 0 ),
 
 
  248   if (fSpline       != 
NULL) 
delete fSpline;
 
  249   if (fHist         != 
NULL) 
delete fHist;
 
  250   if (fPDFHist      != 
NULL) 
delete fPDFHist;
 
  251   if (fHistOriginal != 
NULL) 
delete fHistOriginal;
 
  252   if (fIGetVal      != 
NULL) 
delete fIGetVal;
 
  253   if (fGraph        != 
NULL) 
delete fGraph;
 
 
  261   GetThisPdfThreadLocal() = 
this;
 
  263   if (hist == 
NULL) Log() << kFATAL << 
"Called without valid histogram pointer!" << 
Endl;
 
  267      Log() << kFATAL << 
"Number of entries <= 0 (" << hist->
GetEntries() << 
" in histogram: " << hist->
GetTitle() << 
")" << 
Endl;
 
  270     Log()<< kDEBUG << 
"Create " 
  274            << 
"type KDE kernel for histogram: \"" << hist->
GetName() << 
"\"" 
  280         Log() << kFATAL << 
"PDF construction called with minnsmooth<0" << 
Endl;
 
  281      else if (fMaxNsmooth<=0)
 
  282         fMaxNsmooth = fMinNsmooth;
 
  283      else if (fMaxNsmooth<fMinNsmooth)
 
  284         Log() << kFATAL << 
"PDF construction called with maxnsmooth<minnsmooth" << 
Endl;
 
  289   fHistOriginal->SetTitle( fHistOriginal->GetName() ); 
 
  290   fHist        ->SetTitle( fHist->GetName() );
 
  293   fHistOriginal->SetDirectory(
nullptr);
 
  294   fHist        ->SetDirectory(
nullptr);
 
  297   if (fInterpolMethod == 
PDF::kKDE) BuildKDEPDF();
 
  298   else                              BuildSplinePDF();
 
 
  306   if (
evtNum == 0 && fHistDefinedNBins == 0)
 
  307      Log() << kFATAL << 
"No number of bins set for PDF" << 
Endl;
 
  308   else if (fHistDefinedNBins > 0)
 
  310   else if ( 
evtNum > 0 && fHistAvgEvtPerBin > 0 )
 
  313      Log() << kFATAL << 
"No number of bins or average event per bin set for PDF" << fHistAvgEvtPerBin << 
Endl;
 
 
  323   if (fInterpolMethod != 
PDF::kSpline0 && fCheckHist) CheckHist();
 
  326   if (fMaxNsmooth > 0 && fMinNsmooth >=0 ) SmoothHistogram();
 
  332   switch (fInterpolMethod) {
 
  337      fUseHistogram = 
kTRUE;
 
  349      fSpline = 
new TSpline3( 
"spline3", fGraph );
 
  353      fSpline = 
new TSpline5( 
"spline5", fGraph );
 
  357      Log() << kWARNING << 
"No valid interpolation method given! Use Spline2" << 
Endl;
 
  359      Log() << kFATAL << 
" Well.. .thinking about it, I better quit so you notice you are forced to fix the mistake " << 
Endl;
 
  365   if (!UseHistogram()) {
 
  366      fSpline->SetTitle( (
TString)fHist->GetTitle() + fSpline->GetTitle() );
 
  367      fSpline->SetName ( (
TString)fHist->GetName()  + fSpline->GetName()  );
 
  373   if (integral < 0) Log() << kFATAL << 
"Integral: " << integral << 
" <= 0" << 
Endl;
 
  377      if (integral>0) fPDFHist->Scale( 1.0/integral );
 
  379   fPDFHist->SetDirectory(
nullptr);
 
 
  388   fPDFHist = 
new TH1F( 
"", 
"", fgNbin_PdfHist, GetXmin(), GetXmax() );
 
  389   fPDFHist->SetTitle( (
TString)fHist->GetTitle() + 
"_hist from_KDE" );
 
  390   fPDFHist->SetName ( (
TString)fHist->GetName()  + 
"_hist_from_KDE" );
 
  394   Float_t histoUpperEdge = fPDFHist->GetBinLowEdge(fPDFHist->GetNbinsX()) + fPDFHist->GetBinWidth(fPDFHist->GetNbinsX());
 
  397                                          fKDEborder, fFineFactor );
 
  398   kern->SetKernelType(fKDEtype);
 
  400   for (
Int_t i=1;i<fHist->GetNbinsX();i++) {
 
  402      for (
Int_t j=1;
j<fPDFHist->GetNbinsX();
j++) {
 
  404         fPDFHist->AddBinContent(
j,fHist->GetBinContent(i)*
 
  405                                 kern->GetBinKernelIntegral(fPDFHist->GetBinLowEdge(
j),
 
  406                                                            fPDFHist->GetBinLowEdge(
j+1),
 
  407                                                            fHist->GetBinCenter(i),
 
  411      if (fKDEborder == 3) { 
 
  416            for (
Int_t j=1;
j<fPDFHist->GetNbinsX();
j++) {
 
  418               fPDFHist->AddBinContent(
j,fHist->GetBinContent(i)*
 
  419                                       kern->GetBinKernelIntegral(fPDFHist->GetBinLowEdge(
j),
 
  420                                                                  fPDFHist->GetBinLowEdge(
j+1),
 
  426         if (i > 4*fHist->GetNbinsX()/5) { 
 
  427            for (
Int_t j=1;
j<fPDFHist->GetNbinsX();
j++) {
 
  429               fPDFHist->AddBinContent( 
j,fHist->GetBinContent(i)*
 
  430                                        kern->GetBinKernelIntegral(fPDFHist->GetBinLowEdge(
j),
 
  431                                                                   fPDFHist->GetBinLowEdge(
j+1),
 
  438   fPDFHist->SetEntries(fHist->GetEntries());
 
  444   if (integral < 0) Log() << kFATAL << 
"Integral: " << integral << 
" <= 0" << 
Endl;
 
  448      if (integral>0) fPDFHist->Scale( 1.0/integral );
 
  449   fPDFHist->SetDirectory(
nullptr);
 
 
  456   if(fHist->GetNbinsX()==1) 
return;
 
  457   if (fMaxNsmooth == fMinNsmooth) {
 
  458      fHist->Smooth( fMinNsmooth );
 
  465   for (
Int_t bin=0; bin<fHist->GetNbinsX(); bin++) {
 
  466      if (fHist->GetBinContent(bin+1) <= fHist->GetBinError(bin+1)) 
continue;
 
  467      Err = fHist->GetBinError(bin+1) / fHist->GetBinContent(bin+1);
 
  475   fNSmoothHist = 
new TH1I(
"",
"",fHist->GetNbinsX(),0,fHist->GetNbinsX());
 
  476   fNSmoothHist->SetTitle( (
TString)fHist->GetTitle() + 
"_Nsmooth" );
 
  477   fNSmoothHist->SetName ( (
TString)fHist->GetName()  + 
"_Nsmooth" );
 
  478   for (
Int_t bin=0; bin<fHist->GetNbinsX(); bin++) {
 
  479      if (fHist->GetBinContent(bin+1) <= fHist->GetBinError(bin+1))
 
  482         Err = fHist->GetBinError(bin+1) / fHist->GetBinContent(bin+1);
 
  486      fNSmoothHist->SetBinContent(bin+1,
smooth);
 
  491   for (
Int_t n=fMaxNsmooth; 
n>=0; 
n--) {
 
  493      if (
n <= fMinNsmooth) { fHist->Smooth(); 
continue; }
 
  495      for (
Int_t bin=0; bin < fHist->GetNbinsX(); bin++) {
 
  496         if (fNSmoothHist->GetBinContent(bin+1) >= 
n) {
 
  501            fHist->Smooth(1,
"R");
 
 
  524   if (UseHistogram()) {
 
  526      fPDFHist = (
TH1*)fHist->Clone();
 
  527      fPDFHist->SetTitle( (
TString)fHist->GetTitle() + 
"_hist from_spline0" );
 
  528      fPDFHist->SetName ( (
TString)fHist->GetName()  + 
"_hist_from_spline0" );
 
  532      fPDFHist = 
new TH1F( 
"", 
"", fgNbin_PdfHist, GetXmin(), GetXmax() );
 
  533      fPDFHist->SetTitle( (
TString)fHist->GetTitle() + 
"_hist from_" + fSpline->GetTitle() );
 
  534      fPDFHist->SetName ( (
TString)fHist->GetName()  + 
"_hist_from_" + fSpline->GetTitle() );
 
  536      for (
Int_t bin=1; bin <= fgNbin_PdfHist; bin++) {
 
  537         Double_t x = fPDFHist->GetBinCenter( bin );
 
  542         if (
y <= fgEpsilon) 
y = fHist->GetBinContent( fHist->FindBin( 
x ) );
 
  543         fPDFHist->SetBinContent( bin, 
TMath::Max(
y, fgEpsilon) );
 
  546   fPDFHist->SetDirectory(
nullptr);
 
 
  555      Log() << kFATAL << 
"<CheckHist> Called without valid histogram pointer!" << 
Endl;
 
  558   Int_t nbins = fHist->GetNbinsX();
 
  562   for (
Int_t bin=1; bin<=nbins; bin++)
 
  563      if (fHist->GetBinContent(bin) == 0) 
emptyBins++;
 
  567            <<
"%) of the bins in hist '" 
  568            << fHist->GetName() << 
"' are empty!" << 
Endl;
 
  569      Log() << kWARNING << 
"X_min=" << GetXmin()
 
  570            << 
" mean=" << fHist->GetMean() << 
" X_max= " << GetXmax() << 
Endl;
 
 
  595   for (
Int_t bin=1; bin<=nbins; bin++) {
 
  613         if (
d > 1) { 
nc1++; 
if (
d > 2) { 
nc2++; 
if (
d > 3) { 
nc3++; 
if (
d > 6) 
nc6++; } } }
 
  617   Log() << kDEBUG << 
"Validation result for PDF \"" << 
originalHist->GetTitle() << 
"\"" << 
": " << 
Endl;
 
  618   Log() << kDEBUG << 
TString::Format( 
"    chi2/ndof(!=0) = %.1f/%i = %.2f (Prob = %.2f)",
 
  621      Log() << kDEBUG << 
"Comparison of the original histogram \"" << 
originalHist->GetTitle() << 
"\"" << 
Endl;
 
  622      Log() << kDEBUG << 
"with the corresponding PDF gave a chi2/ndof of " << 
chi2/ndof << 
"," << 
Endl;
 
  623      Log() << kDEBUG << 
"which corresponds to a deviation of more than 5 sigma! Please check!" << 
Endl;
 
  625   Log() << kDEBUG << 
TString::Format( 
"    #bins-found(#expected-bins) deviating > [1,2,3,6] sigmas: " \
 
  626                  "[%i(%i),%i(%i),%i(%i),%i(%i)]",
 
 
  636   Double_t integral = fPDFHist->GetSumOfWeights();
 
  637   integral *= GetPdfHistBinWidth();
 
 
  647   return ThisPDF()->GetVal( 
x[0] );
 
 
  657   if (fgManualIntegration) {
 
  663      if (
imax > fPDFHist->GetNbinsX()) 
imax = fPDFHist->GetNbinsX();
 
  673                  << 
"dx   = " << 
dx   << std::endl
 
  674                  << 
"bini = " << 
bini << std::endl
 
  675                  << 
"xmin = " << 
xmin << std::endl
 
  676                  << 
"xmax = " << 
xmax << std::endl
 
  677                  << 
"imin = " << 
imin << std::endl
 
  678                  << 
"imax = " << 
imax << std::endl
 
  679                  << 
"low edge of imin" << fPDFHist->GetBinLowEdge(
imin) << std::endl
 
  680                  << 
"low edge of imin+1" << fPDFHist->GetBinLowEdge(
imin+1) << 
Endl;
 
  681            Log() << kFATAL << 
"<GetIntegral> dx = " << 
dx << 
" < 0" << 
Endl;
 
  683         integral += fPDFHist->GetBinContent(
bini)*
dx;
 
  690      if (fIGetVal == 0) fIGetVal = 
new TF1( 
"IGetVal", 
PDF::IGetVal, GetXmin(), GetXmax(), 0 );
 
  691      integral = fIGetVal->Integral( 
xmin, 
xmax );
 
 
  703   Int_t bin = fPDFHist->FindBin(
x);
 
  709   if (UseHistogram()) {
 
  711      retval = fPDFHist->GetBinContent( bin );
 
  716      if ((
x > fPDFHist->GetBinCenter(bin) && bin != fPDFHist->GetNbinsX()) || bin == 1)
 
  723      Double_t dy = fPDFHist->GetBinContent( bin ) - fPDFHist->GetBinContent( 
nextbin );
 
  724      retval = fPDFHist->GetBinContent( bin ) + (
x - fPDFHist->GetBinCenter( bin ))*
dy/
dx;
 
 
  821   DeclareOptionRef( fNsmooth, 
TString::Format(
"NSmooth%s",fSuffix.Data()),
 
  822                     "Number of smoothing iterations for the input histograms" );
 
  823   DeclareOptionRef( fMinNsmooth, 
TString::Format(
"MinNSmooth%s",fSuffix.Data()),
 
  824                     "Min number of smoothing iterations, for bins with most data" );
 
  826   DeclareOptionRef( fMaxNsmooth, 
TString::Format(
"MaxNSmooth%s",fSuffix.Data()),
 
  827                     "Max number of smoothing iterations, for bins with least data" );
 
  829   DeclareOptionRef( fHistAvgEvtPerBin, 
TString::Format(
"NAvEvtPerBin%s",fSuffix.Data()),
 
  830                     "Average number of events per PDF bin" );
 
  832   DeclareOptionRef( fHistDefinedNBins, 
TString::Format(
"Nbins%s",fSuffix.Data()),
 
  833                     "Defined number of bins for the histogram from which the PDF is created" );
 
  835   DeclareOptionRef( fCheckHist, 
TString::Format(
"CheckHist%s",fSuffix.Data()),
 
  836                     "Whether or not to check the source histogram of the PDF" );
 
  838   DeclareOptionRef( fInterpolateString, 
TString::Format(
"PDFInterpol%s",fSuffix.Data()),
 
  839                     "Interpolation method for reference histograms (e.g. Spline2 or KDE)" );
 
  840   AddPreDefVal(
TString(
"Spline0")); 
 
  841   AddPreDefVal(
TString(
"Spline1")); 
 
  842   AddPreDefVal(
TString(
"Spline2")); 
 
  843   AddPreDefVal(
TString(
"Spline3")); 
 
  844   AddPreDefVal(
TString(
"Spline5")); 
 
  847   DeclareOptionRef( fKDEtypeString, 
TString::Format(
"KDEtype%s",fSuffix.Data()), 
"KDE kernel type (1=Gauss)" );
 
  848   AddPreDefVal(
TString(
"Gauss"));
 
  850   DeclareOptionRef( fKDEiterString, 
TString::Format(
"KDEiter%s",fSuffix.Data()), 
"Number of iterations (1=non-adaptive, 2=adaptive)" );
 
  851   AddPreDefVal(
TString(
"Nonadaptive"));
 
  852   AddPreDefVal(
TString(
"Adaptive"));
 
  854   DeclareOptionRef( fFineFactor , 
TString::Format(
"KDEFineFactor%s",fSuffix.Data()),
 
  855                     "Fine tuning factor for Adaptive KDE: Factor to multiply the width of the kernel");
 
  857   DeclareOptionRef( fBorderMethodString, 
TString::Format(
"KDEborder%s",fSuffix.Data()),
 
  858                     "Border effects treatment (1=no treatment , 2=kernel renormalization, 3=sample mirroring)" );
 
  860   AddPreDefVal(
TString(
"Renorm"));
 
  861   AddPreDefVal(
TString(
"Mirror"));
 
  863   SetConfigName( GetName() );
 
  864   SetConfigDescription( 
"Configuration options for the PDF class" );
 
 
  871   if (fNsmooth < 0) fNsmooth = 0; 
 
  873   if (fMaxNsmooth < 0 || fMinNsmooth < 0) { 
 
  874      fMinNsmooth = fMaxNsmooth = fNsmooth;
 
  878      Log() << kFATAL << 
"ERROR: MaxNsmooth = " 
  879            << fMaxNsmooth << 
" < MinNsmooth = " << fMinNsmooth << 
Endl;
 
  882   if (fMaxNsmooth < 0 || fMinNsmooth < 0) {
 
  883      Log() << kFATAL << 
"ERROR: MaxNsmooth = " 
  884            << fMaxNsmooth << 
" or MinNsmooth = " << fMinNsmooth << 
" smaller than zero" << 
Endl;
 
  893   else if (fInterpolateString == 
"KDE"    ) fInterpolMethod = 
TMVA::PDF::kKDE;
 
  894   else if (fInterpolateString != 
""       ) {
 
  895      Log() << kFATAL << 
"unknown setting for option 'InterpolateMethod': " << fKDEtypeString << ((fSuffix==
"")?
"":
Form(
" for pdf with suffix %s",fSuffix.Data())) << 
Endl;
 
  900   else if (fKDEtypeString != 
""           )
 
  901      Log() << kFATAL << 
"unknown setting for option 'KDEtype': " << fKDEtypeString << ((fSuffix==
"")?
"":
Form(
" for pdf with suffix %s",fSuffix.Data())) << 
Endl;
 
  904   else if (fKDEiterString != 
""           )
 
  905      Log() << kFATAL << 
"unknown setting for option 'KDEiter': " << fKDEtypeString << ((fSuffix==
"")?
"":
Form(
" for pdf with suffix %s",fSuffix.Data())) << 
Endl;
 
  910   else if  ( fKDEiterString != 
""            ) { 
 
  911      Log() << kFATAL << 
"unknown setting for option 'KDEBorder': " << fKDEtypeString << ((fSuffix==
"")?
"":
Form(
" for pdf with suffix %s",fSuffix.Data())) << 
Endl;
 
 
  988      newhist->SetDirectory(
nullptr);
 
  992      for (
UInt_t i=0; i<nbins; i++) {
 
  994         newhist->SetBinContent(i+1,val);
 
 1006         Log() << kFATAL << 
"Number of bins in content and binning array differs"<<
Endl;
 
 1012      newhist->SetDirectory(
nullptr);
 
 1013      for (
UInt_t i=0; i<nbins; i++) {
 
 1015         newhist->SetBinContent(i+1,val);
 
 1020   hnameSmooth.ReplaceAll( 
"_original", 
"_smoothed" );
 
 1022   if (fHistOriginal != 0) 
delete fHistOriginal;
 
 1026   fHist->SetDirectory(
nullptr);
 
 1028   if (fInterpolMethod == 
PDF::kKDE) BuildKDEPDF();
 
 1029   else                              BuildSplinePDF();
 
 
 1038   os << 
"MinNSmooth      " << pdf.
fMinNsmooth << std::endl;
 
 1039   os << 
"MaxNSmooth      " << pdf.
fMaxNsmooth << std::endl;
 
 1041   os << 
"KDE_type        " << pdf.
fKDEtype << std::endl;
 
 1042   os << 
"KDE_iter        " << pdf.
fKDEiter << std::endl;
 
 1043   os << 
"KDE_border      " << pdf.
fKDEborder << std::endl;
 
 1044   os << 
"KDE_finefactor  " << pdf.
fFineFactor << std::endl;
 
 1054      << 
"   " << std::setprecision(12) << 
histToWrite->GetXaxis()->GetXmin()    
 
 1055      << 
"   " << std::setprecision(12) << 
histToWrite->GetXaxis()->GetXmax()    
 
 1059   os << 
"Weights " << std::endl;
 
 1060   os << std::setprecision(8);
 
 1061   for (
Int_t i=0; i<nBins; i++) {
 
 1062      os << std::setw(15) << std::left << 
histToWrite->GetBinContent(i+1) << std::right << 
" ";
 
 1063      if ((i+1)%5==0) os << std::endl;
 
 1066   os << std::setprecision(
dp);
 
 1084         {
istr >> pdf.fMinNsmooth; pdf.fMaxNsmooth=pdf.fMinNsmooth;}
 
 1085      else if (
devnullS==
"MinNSmooth") 
istr >> pdf.fMinNsmooth;
 
 1086      else if (
devnullS==
"MaxNSmooth") 
istr >> pdf.fMaxNsmooth;
 
 1092      else if (
devnullS == 
"KDE_finefactor") {
 
 1093         istr  >> pdf.fFineFactor;
 
 1094         if (pdf.GetReadingVersion() != 0 && pdf.GetReadingVersion() < 
TMVA_VERSION(3,7,3)) { 
 
 1105   hnameSmooth.ReplaceAll( 
"_original", 
"_smoothed" );
 
 1109      std::cout << 
"PDF, trying to create a histogram without defined binning"<< std::endl;
 
 1113   newhist->SetDirectory(
nullptr);
 
 1115   for (
Int_t i=0; i<nbins; i++) {
 
 1117      newhist->SetBinContent(i+1,val);
 
 1120   if (pdf.fHistOriginal != 0) 
delete pdf.fHistOriginal;
 
 1124   pdf.fHist->SetDirectory(
nullptr);
 
 1126   if (pdf.fMinNsmooth>=0) pdf.BuildSplinePDF();
 
 1138   return GetThisPdfThreadLocal();
 
 
bool Bool_t
Boolean (0=false, 1=true) (bool)
int Int_t
Signed integer 4 bytes (int)
float Float_t
Float 4 bytes (float)
double Double_t
Double 8 bytes.
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
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 length
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
#define TMVA_VERSION(a, b, c)
A TGraph is an object made of two arrays X and Y with npoints each.
1-D histogram with a float per channel (see TH1 documentation)
1-D histogram with an int per channel (see TH1 documentation)
TH1 is the base class of all histogram classes in ROOT.
virtual Double_t GetEntries() const
Return the current number of entries.
TObject * Clone(const char *newname="") const override
Make a complete copy of the underlying object.
KDE Kernel for "smoothing" the PDFs.
ostringstream derivative to redirect and format output
PDF wrapper for histograms; uses user-defined spline interpolation.
static const Bool_t fgManualIntegration
manual integration (sum over bins) or DGAUSS
KDEKernel::EKernelType fKDEtype
Kernel type to use for KDE.
void FillHistToGraph()
Simple conversion.
void BuildPDF(const TH1 *theHist)
KDEKernel::EKernelBorder fKDEborder
The method to take care about "border" effects (string)
static Double_t IGetVal(Double_t *, Double_t *)
static external auxiliary function (integrand)
TString fBorderMethodString
Int_t fMaxNsmooth
Max number of smoothing iterations.
void ValidatePDF(TH1 *original=nullptr) const
comparison of original histogram with reference PDF
TMVA::PDF::EInterpolateMethod fInterpolMethod
interpolation method
Double_t GetValInverse(Double_t y, Bool_t isMonotonouslyIncreasingFunction=kFALSE) const
returns value
void CheckHist() const
sanity check: compare PDF with original histogram
void FindBinInverse(const TH1 *histogram, Int_t &lowerBin, Int_t &higherBin, Double_t &lowerBinValue, Double_t &higherBinValue, Double_t y, Bool_t isMonotonouslyIncreasingFunction=kFALSE) const
find bin from value on ordinate
Int_t fHistDefinedNBins
source hist bin num set by user
void ReadXML(void *pdfnode)
XML file reading.
TString fInterpolateString
Int_t fNsmooth
Min number of smoothing iterations.
void DeclareOptions()
define the options (their key words) that can be set in the option string
void AddXMLTo(void *parent)
XML file writing.
void BuildSplinePDF()
build the PDF from the original histograms
void FillSplineToHist()
creates high-binned reference histogram to be used instead of the PDF for speed reasons
void BuildKDEPDF()
creates high-binned reference histogram to be used instead of the PDF for speed reasons
Int_t fMinNsmooth
Min number of smoothing iterations.
Int_t GetHistNBins(Int_t evtNum=0)
static const Double_t fgEpsilon
minimum PDF return
TH1 * GetOriginalHist() const
Float_t fFineFactor
fine tuning factor for Adaptive KDE
static PDF *& GetThisPdfThreadLocal()
Double_t GetVal(Double_t x) const
returns value PDF(x)
Int_t fHistAvgEvtPerBin
avg event per source hist bin
Double_t GetIntegral() const
computes normalisation
Bool_t fCheckHist
check of source histogram
MsgLogger * fLogger
! message logger
TString fKDEtypeString
strings used to read definitions
static const Int_t fgNbin_PdfHist
number of bins in high-binned reference histogram
PDF(const TString &name, Bool_t norm=kTRUE)
default constructor needed for ROOT I/O
KDEKernel::EKernelIter fKDEiter
Number of iterations (adaptive or not)
static PDF * ThisPDF(void)
Linear interpolation of TGraph.
Quadratic interpolation of TGraph.
const char * GetName() const override
Returns name of object.
const char * GetTitle() const override
Returns title of object.
Class to create third splines to interpolate knots Arbitrary conditions can be introduced for first a...
Class to create quintic natural splines to interpolate knots Arbitrary conditions can be introduced f...
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
static std::ostream & Err()
std::istream & operator>>(std::istream &istr, BinaryTree &tree)
std::ostream & operator<<(std::ostream &os, const BinaryTree &tree)
MsgLogger & Endl(MsgLogger &ml)
Short_t Max(Short_t a, Short_t b)
Returns the largest of a and b.
Double_t Prob(Double_t chi2, Int_t ndf)
Computation of the probability for a certain Chi-squared (chi2) and number of degrees of freedom (ndf...
Double_t Sqrt(Double_t x)
Returns the square root of x.
Short_t Min(Short_t a, Short_t b)
Returns the smallest of a and b.
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.