95using std::numeric_limits, std::nothrow, std::map;
170 if(strlen(
name) > 128)
171 Log() << kFATAL <<
"Name too long " <<
name.Data() <<
Endl;
237 Log() << kFATAL <<
"COPY CONSTRUCTOR NOT IMPLEMENTED" <<
Endl;
250 Log() << kFATAL <<
"<SetDim>: Dimension is zero or negative!" <<
Endl;
265 Log() << kFATAL <<
"<SetXmin>: Dimension out of bounds!" <<
Endl;
276 Log() << kFATAL <<
"<SetXmax>: Dimension out of bounds!" <<
Endl;
293 if(
fPseRan==0)
Log() << kFATAL <<
"Random number generator not set" <<
Endl;
294 if(
fDistr==0)
Log() << kFATAL <<
"Distribution function not set" <<
Endl;
295 if(
fDim==0)
Log() << kFATAL <<
"Zero dimension not allowed" <<
Endl;
302 if(
fRvec==0)
Log() << kFATAL <<
"Cannot initialize buffer fRvec" <<
Endl;
306 if(
fAlpha==0)
Log() << kFATAL <<
"Cannot initialize buffer fAlpha" <<
Endl;
325 htitle =
TString(
"Edge Histogram No. ");
360 Log() << kFATAL <<
"not enough memory to create " <<
fNCells
387 Log() << kFATAL <<
"Too many cells" <<
Endl;
393 cell->
Fill(status, parent, 0, 0);
446 cell->
GetHcub(cellPosi,cellSize);
456 for (
Int_t idim = 0; idim <
fDim; ++idim)
481 if (
fDim>0)
for (j=0; j<
fDim; j++) xRand[j]= cellPosi[j] +
fAlpha[j]*(cellSize[j]);
483 wt = dx*
Eval(xRand, event_density);
484 totevents += event_density;
488 for (k=0; k<
fDim; k++) {
498 if (ceSum[3]>wt) ceSum[3]=wt;
499 if (ceSum[4]<wt) ceSum[4]=wt;
501 if (ceSum[1]>0) nevEff = ceSum[0]*ceSum[0]/ceSum[1];
511 if (cell==
fCells[0] && ceSum[0]<=0.0){
513 Log() << kFATAL <<
"No events were found during exploration of "
514 <<
"root cell. Please check PDEFoam parameters nSampl "
515 <<
"and VolFrac." <<
Endl;
517 Log() << kWARNING <<
"Negative number of events found during "
518 <<
"exploration of root cell" <<
Endl;
523 for (k=0; k<
fDim;k++){
532 Double_t intTrue = ceSum[0]/(nevMC+0.000001);
535 if (kBest == -1)
Varedu(ceSum,kBest,xBest,yBest);
536 intDriv =sqrt(ceSum[1]/nevMC) -intTrue;
547 for (parent = cell->
GetPare(); parent!=0; parent = parent->
GetPare()){
550 parent->
SetIntg( parIntg +intTrue -intOld );
551 parent->
SetDriv( parDriv +intDriv -driOld );
569 Double_t ssw = sqrt(sswAll)/sqrt(nent);
577 for(
Int_t kProj=0; kProj<
fDim; kProj++) {
595 if ( (xUp-xLo) < std::numeric_limits<double>::epsilon()) sswIn=0.;
596 else sswIn = sqrt(asswIn) /sqrt(nent*(xUp-xLo)) *(xUp-xLo);
597 if ( (1.0-xUp+xLo) < std::numeric_limits<double>::epsilon()) sswOut=0.;
598 else if ( sswAll-asswIn < std::numeric_limits<double>::epsilon()) sswOut=0.;
599 else sswOut= sqrt(sswAll-asswIn)/sqrt(nent*(1.0-xUp+xLo)) *(1.0-xUp+xLo);
600 if( (sswIn+sswOut) < sswtBest) {
601 sswtBest = sswIn+sswOut;
618 if(iLo == 0) xBest=yBest;
619 if(iUp ==
fNBin) yBest=xBest;
624 if( (kBest >=
fDim) || (kBest<0) )
625 Log() << kFATAL <<
"Something wrong with kBest" <<
Endl;
657 if(
fCells[i]->GetStat() == 1 ) {
659 driv =
fCells[i]->GetDriv();
660 if (driv < std::numeric_limits<float>::epsilon())
665 if (xDiv <= std::numeric_limits<Double_t>::epsilon() ||
666 xDiv >= 1.0 - std::numeric_limits<Double_t>::epsilon())
678 if(driv > drivMax && bCutNmin && bCutMaxDepth) {
687 Log() << kVERBOSE <<
"Warning: No cell with more than "
689 else if (!bCutMaxDepth)
690 Log() << kVERBOSE <<
"Warning: Maximum depth reached: "
693 Log() << kWARNING <<
"<PDEFoam::PeekMax>: no more candidate cells (drivMax>0) found for further splitting." <<
Endl;
721 if( kBest<0 || kBest>=
fDim )
Log() << kFATAL <<
"Wrong kBest" <<
Endl;
748 std::vector<Double_t> xvec;
753 return GetDistr()->Density(xvec, event_density);
772 if ( (iCell<0) || (iCell>
fLastCe) ) {
773 Log() << kVERBOSE <<
"Break: "<<
fLastCe+1 <<
" cells created" <<
Endl;
784 if (
Divide( newCell )==0)
break;
799 if(
fDim==0)
Log() << kFATAL <<
"SetInhiDiv: fDim=0" <<
Endl;
805 if( ( 0<=iDim) && (iDim<
fDim)) {
808 Log() << kFATAL <<
"Wrong iDim" <<
Endl;
819 Int_t errors, warnings;
823 errors = 0; warnings = 0;
824 if (level==1)
Log() << kVERBOSE <<
"Performing consistency checks for created foam" <<
Endl;
825 for(iCell=1; iCell<=
fLastCe; iCell++) {
831 if (level==1)
Log() << kFATAL <<
"ERROR: Cell's no %d has only one daughter " << iCell <<
Endl;
835 if (level==1)
Log() << kFATAL <<
"ERROR: Cell's no %d has no daughter and is inactive " << iCell <<
Endl;
839 if (level==1)
Log() << kFATAL <<
"ERROR: Cell's no %d has two daughters and is active " << iCell <<
Endl;
846 if (level==1)
Log() << kFATAL <<
"ERROR: Cell's no %d parent not pointing to this cell " << iCell <<
Endl;
854 if (level==1)
Log() << kFATAL <<
"ERROR: Cell's no %d daughter 0 not pointing to this cell " << iCell <<
Endl;
860 if (level==1)
Log() << kFATAL <<
"ERROR: Cell's no %d daughter 1 not pointing to this cell " << iCell <<
Endl;
865 if(level==1)
Log() << kFATAL <<
"ERROR: Cell no. " << iCell <<
" has Volume of <1E-50" <<
Endl;
870 for(iCell=0; iCell<=
fLastCe; iCell++) {
874 if(level==1)
Log() << kFATAL <<
"ERROR: Cell no. " << iCell <<
" is active but Volume is 0 " <<
Endl;
879 Log() << kVERBOSE <<
"Check has found " << errors <<
" errors and " << warnings <<
" warnings." <<
Endl;
882 Info(
"CheckAll",
"Check - found total %d errors \n",errors);
892 if (iCell < 0 || iCell >
fLastCe) {
893 Log() << kWARNING <<
"<PrintCell(iCell=" << iCell
894 <<
")>: cell number " << iCell <<
" out of bounds!"
900 fCells[iCell]->GetHcub(cellPosi,cellSize);
904 Log() <<
"Cell[" << iCell <<
"]={ ";
906 Log() <<
" Xdiv[abs. coord.]="
909 Log() <<
" Abs. coord. = (";
911 Log() <<
"dim[" << idim <<
"]={"
919 fCells[iCell]->Print(
"1");
921 Log() <<
"Elements: [";
924 for (
Int_t i=0; i<
vec->GetNrows(); i++){
925 if (i>0)
Log() <<
", ";
953 std::vector<Float_t> values = ev->
GetValues();
970 Log() << kVERBOSE <<
"Delete cell elements" <<
Endl;
975 fCells[iCell]->SetElement(NULL);
1017 return kernel->
Estimate(
this, txvec, cv);
1041 std::map<Int_t,Float_t> txvec;
1042 for (std::map<Int_t,Float_t>::const_iterator it=xvec.begin(); it!=xvec.end(); ++it)
1043 txvec.insert(std::pair<Int_t, Float_t>(it->first,
VarTransform(it->first, it->second)));
1046 std::vector<PDEFoamCell*> cells =
FindCells(txvec);
1049 std::vector<Float_t> cell_values;
1050 cell_values.reserve(cells.size());
1051 for (std::vector<PDEFoamCell*>::const_iterator cell_it=cells.begin();
1052 cell_it != cells.end(); ++cell_it)
1085 cell0->
GetHcub(cellPosi0,cellSize0);
1087 if (xvec.at(idim)<=cellPosi0[idim]+cellSize0[idim])
1123 map<Int_t, Float_t>::const_iterator it = txvec.find(idim);
1125 if (it != txvec.end()){
1129 cell0->
GetHcub(cellPosi0,cellSize0);
1131 if (it->second <= cellPosi0[idim] + cellSize0[idim])
1142 cells.push_back(cell);
1163 std::map<Int_t, Float_t> txvec_map;
1164 for (
UInt_t i=0; i<txvec.size(); ++i)
1165 txvec_map.insert(std::pair<Int_t, Float_t>(i, txvec.at(i)));
1168 std::vector<PDEFoamCell*> cells(0);
1194 std::vector<PDEFoamCell*> cells(0);
1217 Log() << kFATAL <<
"<Draw1Dim>: function can only be used for 1-dimensional foams!"
1225 if (!
h1)
Log() << kFATAL <<
"ERROR: Can not create histo" << hname <<
Endl;
1228 for (
Int_t ibinx=1; ibinx<=
h1->GetNbinsX(); ++ibinx) {
1230 std::vector<Float_t> txvec;
1233 if (kernel != NULL) {
1235 val = kernel->
Estimate(
this, txvec, cell_value);
1240 h1->SetBinContent(ibinx, val +
h1->GetBinContent(ibinx));
1268 if ((idim1>=
GetTotDim()) || (idim1<0) ||
1271 Log() << kFATAL <<
"<Project2>: wrong dimensions given: "
1272 << idim1 <<
", " << idim2 <<
Endl;
1278 Log() << kWARNING <<
"Warning: number of bins too big: " << nbin
1279 <<
" Using 1000 bins for each dimension instead." <<
Endl;
1281 }
else if (nbin<1) {
1282 Log() << kWARNING <<
"Wrong bin number: " << nbin
1283 <<
"; set nbin=50" <<
Endl;
1295 if (!
h1)
Log() << kFATAL <<
"ERROR: Can not create histo" << hname <<
Endl;
1299 for (
Int_t xbin = 1; xbin <=
h1->GetNbinsX(); ++xbin) {
1300 for (
Int_t ybin = 1; ybin <=
h1->GetNbinsY(); ++ybin) {
1303 std::map<Int_t, Float_t> txvec;
1304 txvec[idim1] =
VarTransform(idim1,
h1->GetXaxis()->GetBinCenter(xbin));
1305 txvec[idim2] =
VarTransform(idim2,
h1->GetYaxis()->GetBinCenter(ybin));
1309 std::vector<TMVA::PDEFoamCell*> cells =
FindCells(txvec);
1314 for (std::vector<TMVA::PDEFoamCell*>::const_iterator it = cells.begin();
1315 it != cells.end(); ++it) {
1318 (*it)->GetHcub(cellPosi,cellSize);
1321 std::vector<Float_t> tvec;
1323 if ( i != idim1 && i != idim2 )
1324 tvec.push_back(cellPosi[i] + 0.5*cellSize[i]);
1326 tvec.push_back(txvec[i]);
1328 if (kernel != NULL) {
1330 sum_cv += kernel->
Estimate(
this, tvec, cell_value);
1337 h1->SetBinContent(xbin, ybin, sum_cv +
h1->GetBinContent(xbin, ybin));
1362 case kValueDensity: {
1365 if (volume > numeric_limits<double>::epsilon()) {
1370 Log() << kWARNING <<
"<GetCellDensity(cell)>: ERROR: cell volume"
1371 <<
" negative or zero!"
1372 <<
" ==> return cell density 0!"
1373 <<
" cell volume=" << volume
1376 Log() << kWARNING <<
"<GetCellDensity(cell)>: WARNING: cell volume"
1377 <<
" close to zero!"
1378 <<
" cell volume: " << volume <<
Endl;
1400 Log() << kFATAL <<
"<GetCellValue>: unknown cell value" <<
Endl;
1442 Log() << kFATAL <<
"<SetCellElement> ERROR: cell element is not a TVectorD*" <<
Endl;
1458 Log() << kINFO <<
"Elapsed time: " +
fTimer->GetElapsedTime()
1510 Log() << kFATAL <<
"RootPlot2dim() can only be used with "
1511 <<
"two-dimensional foams!" <<
Endl;
1514 ECellValue cell_value = kValue;
1518 cell_value = kValue;
1519 }
else if (opt.
Contains(
"rms_ov_mean")){
1520 cell_value = kRmsOvMean;
1527 plotcellnumber =
kTRUE;
1530 std::ofstream outfile(filename, std::ios::out);
1532 outfile<<
"{" << std::endl;
1537 outfile <<
"TColor *graycolors[100];" << std::endl;
1538 outfile <<
"for (Int_t i=0.; i<100; i++)" << std::endl;
1539 outfile <<
" graycolors[i]=new TColor(1000+i, 1-(Float_t)i/100.,1-(Float_t)i/100.,1-(Float_t)i/100.);"<< std::endl;
1542 outfile <<
"cMap = new TCanvas(\"" <<
fName <<
"\",\"Cell Map for "
1543 <<
fName <<
"\",600,600);" << std::endl;
1545 outfile<<
"TBox*a=new TBox();"<<std::endl;
1546 outfile<<
"a->SetFillStyle(0);"<<std::endl;
1547 outfile<<
"a->SetLineWidth(4);"<<std::endl;
1548 outfile<<
"TBox *b1=new TBox();"<<std::endl;
1549 outfile<<
"TText*t=new TText();"<<std::endl;
1551 outfile << (
colors ?
"gStyle->SetPalette(1, 0);" :
"gStyle->SetPalette(0);")
1553 outfile <<
"b1->SetFillStyle(1001);"<<std::endl;
1554 outfile<<
"TBox *b2=new TBox();"<<std::endl;
1555 outfile <<
"b2->SetFillStyle(0);"<<std::endl;
1558 outfile <<
"b1->SetFillStyle(0);"<<std::endl;
1571 if (
fCells[iCell]->GetStat() == 1) {
1579 outfile <<
"// observed minimum and maximum of distribution: " << std::endl;
1580 outfile <<
"// Float_t zmin = "<< zmin <<
";" << std::endl;
1581 outfile <<
"// Float_t zmax = "<< zmax <<
";" << std::endl;
1584 outfile <<
"// used minimum and maximum of distribution (taking into account log scale if applicable): " << std::endl;
1585 outfile <<
"Float_t zmin = "<< zmin <<
";" << std::endl;
1586 outfile <<
"Float_t zmax = "<< zmax <<
";" << std::endl;
1592 Float_t scale = (ncolors-1)/(zmax - zmin);
1597 outfile <<
"// =========== Rectangular cells ==========="<< std::endl;
1599 if (
fCells[iCell]->GetStat() == 1) {
1600 fCells[iCell]->GetHcub(cellPosi,cellSize);
1601 x1 = offs+lpag*(cellPosi[0]);
1602 y1 = offs+lpag*(cellPosi[1]);
1603 x2 = offs+lpag*(cellPosi[0]+cellSize[0]);
1604 y2 = offs+lpag*(cellPosi[1]+cellSize[1]);
1613 color =
gStyle->GetColorPalette(
Int_t((value-zmin)*scale));
1615 color = 1000+(
Int_t((value-zmin)*scale));
1618 outfile <<
"b1->SetFillColor(" << color <<
");" << std::endl;
1622 outfile<<
"b1->DrawBox("<<x1<<
","<<y1<<
","<<x2<<
","<<y2<<
");"<<std::endl;
1624 outfile<<
"b2->DrawBox("<<x1<<
","<<y1<<
","<<x2<<
","<<y2<<
");"<<std::endl;
1627 if (plotcellnumber) {
1628 outfile<<
"t->SetTextColor(4);"<<std::endl;
1630 outfile<<
"t->SetTextSize(0.025);"<<std::endl;
1632 outfile<<
"t->SetTextSize(0.015);"<<std::endl;
1634 outfile<<
"t->SetTextSize(0.008);"<<std::endl;
1635 x = offs+lpag*(cellPosi[0]+0.5*cellSize[0]);
1636 y = offs+lpag*(cellPosi[1]+0.5*cellSize[1]);
1637 outfile<<
"t->DrawText("<<
x<<
","<<
y<<
","<<
"\""<<iCell<<
"\""<<
");"<<std::endl;
1641 outfile<<
"// ============== End Rectangles ==========="<< std::endl;
1643 outfile <<
"}" << std::endl;
1654 GetDistr()->FillBinarySearchTree(ev);
static const Float_t kVlow
static const Float_t kHigh
int Int_t
Signed integer 4 bytes (int).
unsigned int UInt_t
Unsigned integer 4 bytes (unsigned int).
long Long_t
Signed long integer 4 bytes (long). Size depends on architecture.
bool Bool_t
Boolean (0=false, 1=true) (bool).
double Double_t
Double 8 bytes.
float Float_t
Float 4 bytes (float).
void Info(const char *location, const char *msgfmt,...)
Use this function for informational messages.
TVectorT< Double_t > TVectorD
TDirectory::TContext keeps track and restore the current directory.
1-D histogram with a double per channel (see TH1 documentation)
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 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)
void Print(Option_t *option) const override
Printout of the cell geometry parameters for the debug purpose.
virtual Float_t Estimate(PDEFoam *, std::vector< Float_t > &, ECellValue)=0
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.