96using std::numeric_limits, std::nothrow, std::map;
171 if(strlen(
name) > 128)
172 Log() << kFATAL <<
"Name too long " <<
name.Data() <<
Endl;
238 Log() << kFATAL <<
"COPY CONSTRUCTOR NOT IMPLEMENTED" <<
Endl;
251 Log() << kFATAL <<
"<SetDim>: Dimension is zero or negative!" <<
Endl;
266 Log() << kFATAL <<
"<SetXmin>: Dimension out of bounds!" <<
Endl;
277 Log() << kFATAL <<
"<SetXmax>: Dimension out of bounds!" <<
Endl;
295 if(
fPseRan==0)
Log() << kFATAL <<
"Random number generator not set" <<
Endl;
296 if(
fDistr==0)
Log() << kFATAL <<
"Distribution function not set" <<
Endl;
297 if(
fDim==0)
Log() << kFATAL <<
"Zero dimension not allowed" <<
Endl;
304 if(
fRvec==0)
Log() << kFATAL <<
"Cannot initialize buffer fRvec" <<
Endl;
308 if(
fAlpha==0)
Log() << kFATAL <<
"Cannot initialize buffer fAlpha" <<
Endl;
327 htitle =
TString(
"Edge Histogram No. ");
364 Log() << kFATAL <<
"not enough memory to create " <<
fNCells
391 Log() << kFATAL <<
"Too many cells" <<
Endl;
397 cell->
Fill(status, parent, 0, 0);
450 cell->
GetHcub(cellPosi,cellSize);
460 for (
Int_t idim = 0; idim <
fDim; ++idim)
485 if (
fDim>0)
for (j=0; j<
fDim; j++) xRand[j]= cellPosi[j] +
fAlpha[j]*(cellSize[j]);
487 wt = dx*
Eval(xRand, event_density);
488 totevents += event_density;
492 for (k=0; k<
fDim; k++) {
502 if (ceSum[3]>wt) ceSum[3]=wt;
503 if (ceSum[4]<wt) ceSum[4]=wt;
505 if (ceSum[1]>0) nevEff = ceSum[0]*ceSum[0]/ceSum[1];
515 if (cell==
fCells[0] && ceSum[0]<=0.0){
517 Log() << kFATAL <<
"No events were found during exploration of "
518 <<
"root cell. Please check PDEFoam parameters nSampl "
519 <<
"and VolFrac." <<
Endl;
521 Log() << kWARNING <<
"Negative number of events found during "
522 <<
"exploration of root cell" <<
Endl;
527 for (k=0; k<
fDim;k++){
536 Double_t intTrue = ceSum[0]/(nevMC+0.000001);
539 if (kBest == -1)
Varedu(ceSum,kBest,xBest,yBest);
540 intDriv =sqrt(ceSum[1]/nevMC) -intTrue;
551 for (parent = cell->
GetPare(); parent!=0; parent = parent->
GetPare()){
554 parent->
SetIntg( parIntg +intTrue -intOld );
555 parent->
SetDriv( parDriv +intDriv -driOld );
573 Double_t ssw = sqrt(sswAll)/sqrt(nent);
581 for(
Int_t kProj=0; kProj<
fDim; kProj++) {
599 if ( (xUp-xLo) < std::numeric_limits<double>::epsilon()) sswIn=0.;
600 else sswIn = sqrt(asswIn) /sqrt(nent*(xUp-xLo)) *(xUp-xLo);
601 if ( (1.0-xUp+xLo) < std::numeric_limits<double>::epsilon()) sswOut=0.;
602 else if ( sswAll-asswIn < std::numeric_limits<double>::epsilon()) sswOut=0.;
603 else sswOut= sqrt(sswAll-asswIn)/sqrt(nent*(1.0-xUp+xLo)) *(1.0-xUp+xLo);
604 if( (sswIn+sswOut) < sswtBest) {
605 sswtBest = sswIn+sswOut;
622 if(iLo == 0) xBest=yBest;
623 if(iUp ==
fNBin) yBest=xBest;
628 if( (kBest >=
fDim) || (kBest<0) )
629 Log() << kFATAL <<
"Something wrong with kBest" <<
Endl;
661 if(
fCells[
i]->GetStat() == 1 ) {
664 if (driv < std::numeric_limits<float>::epsilon())
669 if (xDiv <= std::numeric_limits<Double_t>::epsilon() ||
670 xDiv >= 1.0 - std::numeric_limits<Double_t>::epsilon())
682 if(driv > drivMax && bCutNmin && bCutMaxDepth) {
691 Log() << kVERBOSE <<
"Warning: No cell with more than "
693 else if (!bCutMaxDepth)
694 Log() << kVERBOSE <<
"Warning: Maximum depth reached: "
697 Log() << kWARNING <<
"<PDEFoam::PeekMax>: no more candidate cells (drivMax>0) found for further splitting." <<
Endl;
725 if( kBest<0 || kBest>=
fDim )
Log() << kFATAL <<
"Wrong kBest" <<
Endl;
752 std::vector<Double_t> xvec;
757 return GetDistr()->Density(xvec, event_density);
776 if ( (iCell<0) || (iCell>
fLastCe) ) {
777 Log() << kVERBOSE <<
"Break: "<<
fLastCe+1 <<
" cells created" <<
Endl;
788 if (
Divide( newCell )==0)
break;
803 if(
fDim==0)
Log() << kFATAL <<
"SetInhiDiv: fDim=0" <<
Endl;
809 if( ( 0<=iDim) && (iDim<
fDim)) {
812 Log() << kFATAL <<
"Wrong iDim" <<
Endl;
823 Int_t errors, warnings;
827 errors = 0; warnings = 0;
828 if (level==1)
Log() << kVERBOSE <<
"Performing consistency checks for created foam" <<
Endl;
829 for(iCell=1; iCell<=
fLastCe; iCell++) {
835 if (level==1)
Log() << kFATAL <<
"ERROR: Cell's no %d has only one daughter " << iCell <<
Endl;
839 if (level==1)
Log() << kFATAL <<
"ERROR: Cell's no %d has no daughter and is inactive " << iCell <<
Endl;
843 if (level==1)
Log() << kFATAL <<
"ERROR: Cell's no %d has two daughters and is active " << iCell <<
Endl;
850 if (level==1)
Log() << kFATAL <<
"ERROR: Cell's no %d parent not pointing to this cell " << iCell <<
Endl;
858 if (level==1)
Log() << kFATAL <<
"ERROR: Cell's no %d daughter 0 not pointing to this cell " << iCell <<
Endl;
864 if (level==1)
Log() << kFATAL <<
"ERROR: Cell's no %d daughter 1 not pointing to this cell " << iCell <<
Endl;
869 if(level==1)
Log() << kFATAL <<
"ERROR: Cell no. " << iCell <<
" has Volume of <1E-50" <<
Endl;
874 for(iCell=0; iCell<=
fLastCe; iCell++) {
878 if(level==1)
Log() << kFATAL <<
"ERROR: Cell no. " << iCell <<
" is active but Volume is 0 " <<
Endl;
883 Log() << kVERBOSE <<
"Check has found " << errors <<
" errors and " << warnings <<
" warnings." <<
Endl;
886 Info(
"CheckAll",
"Check - found total %d errors \n",errors);
896 if (iCell < 0 || iCell >
fLastCe) {
897 Log() << kWARNING <<
"<PrintCell(iCell=" << iCell
898 <<
")>: cell number " << iCell <<
" out of bounds!"
904 fCells[iCell]->GetHcub(cellPosi,cellSize);
908 Log() <<
"Cell[" << iCell <<
"]={ ";
910 Log() <<
" Xdiv[abs. coord.]="
913 Log() <<
" Abs. coord. = (";
915 Log() <<
"dim[" << idim <<
"]={"
923 fCells[iCell]->Print(
"1");
925 Log() <<
"Elements: [";
929 if (
i>0)
Log() <<
", ";
957 std::vector<Float_t> values = ev->
GetValues();
974 Log() << kVERBOSE <<
"Delete cell elements" <<
Endl;
979 fCells[iCell]->SetElement(NULL);
1021 return kernel->
Estimate(
this, txvec, cv);
1045 std::map<Int_t,Float_t> txvec;
1046 for (std::map<Int_t,Float_t>::const_iterator it=xvec.begin(); it!=xvec.end(); ++it)
1047 txvec.insert(std::pair<Int_t, Float_t>(it->first,
VarTransform(it->first, it->second)));
1050 std::vector<PDEFoamCell*> cells =
FindCells(txvec);
1053 std::vector<Float_t> cell_values;
1054 cell_values.reserve(cells.size());
1055 for (std::vector<PDEFoamCell*>::const_iterator cell_it=cells.begin();
1056 cell_it != cells.end(); ++cell_it)
1089 cell0->
GetHcub(cellPosi0,cellSize0);
1091 if (xvec.at(idim)<=cellPosi0[idim]+cellSize0[idim])
1129 if (it != txvec.end()){
1133 cell0->
GetHcub(cellPosi0,cellSize0);
1135 if (it->second <= cellPosi0[idim] + cellSize0[idim])
1146 cells.push_back(cell);
1167 std::map<Int_t, Float_t> txvec_map;
1169 txvec_map.insert(std::pair<Int_t, Float_t>(
i, txvec.at(
i)));
1172 std::vector<PDEFoamCell*> cells(0);
1198 std::vector<PDEFoamCell*> cells(0);
1221 Log() << kFATAL <<
"<Draw1Dim>: function can only be used for 1-dimensional foams!"
1229 if (!
h1)
Log() << kFATAL <<
"ERROR: Can not create histo" << hname <<
Endl;
1232 for (
Int_t ibinx=1; ibinx<=
h1->GetNbinsX(); ++ibinx) {
1234 std::vector<Float_t> txvec;
1237 if (kernel != NULL) {
1239 val = kernel->
Estimate(
this, txvec, cell_value);
1244 h1->SetBinContent(ibinx, val +
h1->GetBinContent(ibinx));
1272 if ((idim1>=
GetTotDim()) || (idim1<0) ||
1275 Log() << kFATAL <<
"<Project2>: wrong dimensions given: "
1276 << idim1 <<
", " << idim2 <<
Endl;
1282 Log() << kWARNING <<
"Warning: number of bins too big: " << nbin
1283 <<
" Using 1000 bins for each dimension instead." <<
Endl;
1285 }
else if (nbin<1) {
1286 Log() << kWARNING <<
"Wrong bin number: " << nbin
1287 <<
"; set nbin=50" <<
Endl;
1299 if (!
h1)
Log() << kFATAL <<
"ERROR: Can not create histo" << hname <<
Endl;
1303 for (
Int_t xbin = 1; xbin <=
h1->GetNbinsX(); ++xbin) {
1304 for (
Int_t ybin = 1; ybin <=
h1->GetNbinsY(); ++ybin) {
1307 std::map<Int_t, Float_t> txvec;
1308 txvec[idim1] =
VarTransform(idim1,
h1->GetXaxis()->GetBinCenter(xbin));
1309 txvec[idim2] =
VarTransform(idim2,
h1->GetYaxis()->GetBinCenter(ybin));
1313 std::vector<TMVA::PDEFoamCell*> cells =
FindCells(txvec);
1318 for (std::vector<TMVA::PDEFoamCell*>::const_iterator it = cells.begin();
1319 it != cells.end(); ++it) {
1322 (*it)->GetHcub(cellPosi,cellSize);
1325 std::vector<Float_t> tvec;
1327 if (
i != idim1 &&
i != idim2 )
1328 tvec.push_back(cellPosi[
i] + 0.5*cellSize[
i]);
1330 tvec.push_back(txvec[
i]);
1332 if (kernel != NULL) {
1334 sum_cv += kernel->
Estimate(
this, tvec, cell_value);
1341 h1->SetBinContent(xbin, ybin, sum_cv +
h1->GetBinContent(xbin, ybin));
1366 case kValueDensity: {
1369 if (volume > numeric_limits<double>::epsilon()) {
1374 Log() << kWARNING <<
"<GetCellDensity(cell)>: ERROR: cell volume"
1375 <<
" negative or zero!"
1376 <<
" ==> return cell density 0!"
1377 <<
" cell volume=" << volume
1380 Log() << kWARNING <<
"<GetCellDensity(cell)>: WARNING: cell volume"
1381 <<
" close to zero!"
1382 <<
" cell volume: " << volume <<
Endl;
1404 Log() << kFATAL <<
"<GetCellValue>: unknown cell value" <<
Endl;
1446 Log() << kFATAL <<
"<SetCellElement> ERROR: cell element is not a TVectorD*" <<
Endl;
1462 Log() << kINFO <<
"Elapsed time: " +
fTimer->GetElapsedTime()
1514 Log() << kFATAL <<
"RootPlot2dim() can only be used with "
1515 <<
"two-dimensional foams!" <<
Endl;
1518 ECellValue cell_value = kValue;
1522 cell_value = kValue;
1523 }
else if (opt.
Contains(
"rms_ov_mean")){
1524 cell_value = kRmsOvMean;
1531 plotcellnumber =
kTRUE;
1534 std::ofstream outfile(
filename, std::ios::out);
1536 outfile<<
"{" << std::endl;
1541 outfile <<
"TColor *graycolors[100];" << std::endl;
1542 outfile <<
"for (Int_t i=0.; i<100; i++)" << std::endl;
1543 outfile <<
" graycolors[i]=new TColor(1000+i, 1-(Float_t)i/100.,1-(Float_t)i/100.,1-(Float_t)i/100.);"<< std::endl;
1546 outfile <<
"cMap = new TCanvas(\"" <<
fName <<
"\",\"Cell Map for "
1547 <<
fName <<
"\",600,600);" << std::endl;
1549 outfile<<
"TBox*a=new TBox();"<<std::endl;
1550 outfile<<
"a->SetFillStyle(0);"<<std::endl;
1551 outfile<<
"a->SetLineWidth(4);"<<std::endl;
1552 outfile<<
"TBox *b1=new TBox();"<<std::endl;
1553 outfile<<
"TText*t=new TText();"<<std::endl;
1555 outfile << (
colors ?
"gStyle->SetPalette(1, 0);" :
"gStyle->SetPalette(0);")
1557 outfile <<
"b1->SetFillStyle(1001);"<<std::endl;
1558 outfile<<
"TBox *b2=new TBox();"<<std::endl;
1559 outfile <<
"b2->SetFillStyle(0);"<<std::endl;
1562 outfile <<
"b1->SetFillStyle(0);"<<std::endl;
1575 if (
fCells[iCell]->GetStat() == 1) {
1583 outfile <<
"// observed minimum and maximum of distribution: " << std::endl;
1584 outfile <<
"// Float_t zmin = "<< zmin <<
";" << std::endl;
1585 outfile <<
"// Float_t zmax = "<< zmax <<
";" << std::endl;
1588 outfile <<
"// used minimum and maximum of distribution (taking into account log scale if applicable): " << std::endl;
1589 outfile <<
"Float_t zmin = "<< zmin <<
";" << std::endl;
1590 outfile <<
"Float_t zmax = "<< zmax <<
";" << std::endl;
1596 Float_t scale = (ncolors-1)/(zmax - zmin);
1601 outfile <<
"// =========== Rectangular cells ==========="<< std::endl;
1603 if (
fCells[iCell]->GetStat() == 1) {
1604 fCells[iCell]->GetHcub(cellPosi,cellSize);
1605 x1 = offs+lpag*(cellPosi[0]);
1606 y1 = offs+lpag*(cellPosi[1]);
1607 x2 = offs+lpag*(cellPosi[0]+cellSize[0]);
1608 y2 = offs+lpag*(cellPosi[1]+cellSize[1]);
1622 outfile <<
"b1->SetFillColor(" << color <<
");" << std::endl;
1626 outfile<<
"b1->DrawBox("<<
x1<<
","<<
y1<<
","<<
x2<<
","<<
y2<<
");"<<std::endl;
1628 outfile<<
"b2->DrawBox("<<
x1<<
","<<
y1<<
","<<
x2<<
","<<
y2<<
");"<<std::endl;
1631 if (plotcellnumber) {
1632 outfile<<
"t->SetTextColor(4);"<<std::endl;
1634 outfile<<
"t->SetTextSize(0.025);"<<std::endl;
1636 outfile<<
"t->SetTextSize(0.015);"<<std::endl;
1638 outfile<<
"t->SetTextSize(0.008);"<<std::endl;
1639 x = offs+lpag*(cellPosi[0]+0.5*cellSize[0]);
1640 y = offs+lpag*(cellPosi[1]+0.5*cellSize[1]);
1641 outfile<<
"t->DrawText("<<
x<<
","<<
y<<
","<<
"\""<<iCell<<
"\""<<
");"<<std::endl;
1645 outfile<<
"// ============== End Rectangles ==========="<< std::endl;
1647 outfile <<
"}" << std::endl;
1658 GetDistr()->FillBinarySearchTree(ev);
static const Float_t kVlow
static const Float_t kHigh
if(isa< VarDecl >(D)||isa< FieldDecl >(D)||isa< EnumConstantDecl >(D))
void Info(const char *location, const char *msgfmt,...)
Use this function for informational messages.
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 filename
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t wmin
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void value
Option_t Option_t TPoint TPoint const char x2
Option_t Option_t TPoint TPoint const char x1
Option_t Option_t TPoint TPoint const char y2
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t wmax
Option_t Option_t TPoint TPoint const char y1
R__EXTERN TStyle * gStyle
TVectorT< Double_t > TVectorD
1-D histogram with a double per channel (see TH1 documentation)
static void AddDirectory(Bool_t add=kTRUE)
Sets the flag controlling the automatic add of histograms in memory.
static Bool_t AddDirectoryStatus()
Static function: cannot be inlined on Windows/NT.
2-D histogram with a double per channel (see TH1 documentation)
std::vector< Float_t > & GetValues()
ostringstream derivative to redirect and format output
void Fill(Int_t, PDEFoamCell *, PDEFoamCell *, PDEFoamCell *)
Fills in certain data into newly allocated cell.
void SetDau0(PDEFoamCell *Daug)
void SetXdiv(Double_t Xdiv)
void Print(Option_t *option) const
Printout of the cell geometry parameters for the debug purpose.
void SetElement(TObject *fobj)
void CalcVolume()
Calculates volume of the cell using size params which are calculated.
PDEFoamCell * GetPare() const
PDEFoamCell * GetDau1() const
PDEFoamCell * GetDau0() const
void SetDau1(PDEFoamCell *Daug)
Double_t GetVolume() const
TObject * GetElement() const
void SetDriv(Double_t Driv)
void GetHcub(PDEFoamVect &, PDEFoamVect &) const
Provides size and position of the cell These parameter are calculated by analyzing information in all...
void SetIntg(Double_t Intg)
virtual Float_t Estimate(PDEFoam *, std::vector< Float_t > &, ECellValue)=0
Implementation of PDEFoam.
Double_t GetCellElement(const PDEFoamCell *cell, UInt_t i) const
Returns cell element i of cell 'cell'.
Bool_t fPeekMax
BACKWARDS COMPATIBILITY: peek up cell with max. driver integral for split.
void DeleteBinarySearchTree()
Delete the foam's density estimator, which contains the binary search tree.
void MakeAlpha()
Internal subprogram used by Create.
Timer * fTimer
! timer for graphical output
TObjArray * fVariableNames
collection of all variable names
Float_t fVolFrac
BACKWARDS COMPATIBILITY: volume fraction (with respect to total phase space.
UInt_t GetMaxDepth() const
virtual Float_t GetCellValue(const std::vector< Float_t > &xvec, ECellValue cv, PDEFoamKernelBase *)
This function finds the cell, which corresponds to the given untransformed event vector 'xvec' and re...
void OutputGrow(Bool_t finished=false)
Overridden function of PDEFoam to avoid native foam output.
void SetCellElement(PDEFoamCell *cell, UInt_t i, Double_t value)
Set cell element i of cell to value.
PDEFoam(const PDEFoam &)
Copy Constructor NOT IMPLEMENTED (NEVER USED)
Float_t VarTransformInvers(Int_t idim, Float_t x) const
Double_t * fRvec
[fDim] random number vector from r.n. generator fDim+1 maximum elements
Float_t VarTransform(Int_t idim, Float_t x) const
Int_t Divide(PDEFoamCell *)
Internal subprogram used by Create.
Bool_t fFillFoamWithOrigWeights
BACKWARDS COMPATIBILITY: fill the foam with boost or orig. weights.
EDTSeparation fDTSeparation
BACKWARDS COMPATIBILITY: split cells according to decision tree logic.
void PrintCell(Long_t iCell=0)
Prints geometry of and elements of 'iCell', as well as relations to parent and daughter cells.
void ResetCellElements()
Remove the cell elements from all cells.
void Grow()
Internal subprogram used by Create.
friend class PDEFoamKernelBase
TH1D * Draw1Dim(ECellValue cell_value, Int_t nbin, PDEFoamKernelBase *kernel=nullptr)
Draws 1-dimensional foam (= histogram)
MsgLogger * fLogger
! message logger
Double_t Eval(Double_t *xRand, Double_t &event_density)
Internal subprogram.
Int_t fNBin
No. of bins in the edge histogram for cell MC exploration.
void PrintCells()
Prints geometry of ALL cells of the FOAM.
void SetXmax(Int_t idim, Double_t wmax)
set upper foam bound in dimension idim
PDEFoamDensityBase * GetDistr() const
Double_t * fXmin
[fDim] minimum for variable transform
virtual ~PDEFoam()
Default destructor.
PDEFoam()
Default constructor for streamer, user should not use it.
TRandom3 * fPseRan
Pointer to user-defined generator of pseudorandom numbers.
virtual TH2D * Project2(Int_t idim1, Int_t idim2, ECellValue cell_value=kValue, PDEFoamKernelBase *kernel=nullptr, UInt_t nbin=50)
Project foam variable idim1 and variable idim2 to histogram.
PDEFoamDensityBase * fDistr
! distribution of training events
virtual Bool_t CellValueIsUndefined(PDEFoamCell *)
Returns true, if the value of the given cell is undefined.
virtual void FillFoamCells(const Event *ev, Float_t wt)
This function fills a weight 'wt' into the PDEFoam cell, which corresponds to the given event 'ev'.
void Create()
Basic initialization of FOAM invoked by the user.
TObjArray * fHistEdg
Histograms of wt, one for each cell edge.
void SetInhiDiv(Int_t, Int_t)
This can be called before Create, after setting kDim It defines which variables are excluded in the p...
Int_t * fInhiDiv
! [fDim] Flags for inhibiting cell division
void InitCells()
Internal subprogram used by Create.
Double_t * fAlpha
[fDim] Internal parameters of the hyperrectangle
PDEFoamCell * FindCell(const std::vector< Float_t > &) const
Find cell that contains 'xvec' (in foam coordinates [0,1]).
UInt_t fNElements
BACKWARDS COMPATIBILITY: number of variables in every cell.
Int_t * fMaskDiv
! [fDim] Dynamic Mask for cell division
void FillBinarySearchTree(const Event *ev)
Insert event to internal foam's density estimator PDEFoamDensityBase.
UInt_t fMaxDepth
maximum depth of cell tree
Int_t fNCells
Maximum number of cells.
PDEFoamCell ** fCells
[fNCells] Array of ALL cells
virtual void Explore(PDEFoamCell *Cell)
Internal subprogram used by Create.
void SetXmin(Int_t idim, Double_t wmin)
set lower foam bound in dimension idim
std::vector< TMVA::PDEFoamCell * > FindCells(const std::vector< Float_t > &) const
Find all cells, that contain txvec.
UInt_t GetNActiveCells() const
Int_t fDim
Dimension of the integration/simulation space.
UInt_t fNmin
minimal number of events in cell to split cell
void Varedu(Double_t[5], Int_t &, Double_t &, Double_t &)
Internal subprogram used by Create.
Int_t fLastCe
Index of the last cell.
Int_t CellFill(Int_t, PDEFoamCell *)
Internal subprogram used by Create.
Long_t PeekMax()
Internal subprogram used by Create.
void RootPlot2dim(const TString &filename, TString opt, Bool_t createCanvas=kTRUE, Bool_t colors=kTRUE)
Debugging tool which plots the cells of a 2-dimensional PDEFoam as rectangles in C++ format readable ...
TString fName
Name of a given instance of the FOAM class.
Int_t fNoAct
Number of active cells.
Double_t * fXmax
[fDim] maximum for variable transform
void CheckAll(Int_t)
User utility, miscellaneous and debug.
Int_t fNSampl
No. of MC events, when dividing (exploring) cell.
void SetDim(Int_t kDim)
Sets dimension of cubical space.
Int_t fEvPerBin
Maximum number of effective (wt=1) events per bin.
EFoamType fFoamType
BACKWARDS COMPATIBILITY: type of foam.
Timing information for training and evaluation of MVA methods.
TObject()
TObject constructor.
Random number generator class based on M.
const char * Data() const
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
MsgLogger & Endl(MsgLogger &ml)
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.