119 fFoamType(kSeparate),
126 fFillFoamWithOrigWeights(
kFALSE),
127 fDTSeparation(kFoam),
158 fFoamType(kSeparate),
165 fFillFoamWithOrigWeights(
kFALSE),
166 fDTSeparation(kFoam),
173 if(strlen(
name) > 128)
174 Log() << kFATAL <<
"Name too long " <<
name.Data() <<
Endl;
186 delete fVariableNames;
188 if (fDistr)
delete fDistr;
189 if (fPseRan)
delete fPseRan;
190 if (fXmin) {
delete [] fXmin; fXmin=0; }
191 if (fXmax) {
delete [] fXmax; fXmax=0; }
195 for(
Int_t i=0; i<fNCells; i++)
delete fCells[i];
225 , fFoamType(kSeparate)
232 , fFillFoamWithOrigWeights(
kFALSE)
233 , fDTSeparation(kFoam)
240 Log() << kFATAL <<
"COPY CONSTRUCTOR NOT IMPLEMENTED" <<
Endl;
253 Log() << kFATAL <<
"<SetDim>: Dimension is zero or negative!" <<
Endl;
256 if (fXmin)
delete [] fXmin;
257 if (fXmax)
delete [] fXmax;
267 if (idim<0 || idim>=GetTotDim())
268 Log() << kFATAL <<
"<SetXmin>: Dimension out of bounds!" <<
Endl;
278 if (idim<0 || idim>=GetTotDim())
279 Log() << kFATAL <<
"<SetXmax>: Dimension out of bounds!" <<
Endl;
297 if(fPseRan==0) Log() << kFATAL <<
"Random number generator not set" <<
Endl;
298 if(fDistr==0) Log() << kFATAL <<
"Distribution function not set" <<
Endl;
299 if(fDim==0) Log() << kFATAL <<
"Zero dimension not allowed" <<
Endl;
306 if(fRvec==0) Log() << kFATAL <<
"Cannot initialize buffer fRvec" <<
Endl;
310 if(fAlpha==0) Log() << kFATAL <<
"Cannot initialize buffer fAlpha" <<
Endl;
315 fInhiDiv =
new Int_t[fDim];
316 for(
Int_t i=0; i<fDim; i++) fInhiDiv[i]=0;
320 fMaskDiv =
new Int_t[fDim];
321 for(
Int_t i=0; i<fDim; i++) fMaskDiv[i]=1;
325 for(
Int_t i=0; i<fDim; i++){
327 hname = fName+
TString(
"_HistEdge_");
329 htitle =
TString(
"Edge Histogram No. ");
331 (*fHistEdg)[i] =
new TH1D(hname.
Data(),htitle.
Data(),fNBin,0.0, 1.0);
332 ((
TH1D*)(*fHistEdg)[i])->Sumw2();
360 for(
Int_t i=0; i<fNCells; i++)
delete fCells[i];
366 Log() << kFATAL <<
"not enough memory to create " << fNCells
369 for(
Int_t i=0; i<fNCells; i++){
371 fCells[i]->SetSerial(i);
380 for(
Long_t iCell=0; iCell<=fLastCe; iCell++){
381 Explore( fCells[iCell] );
392 if (fLastCe==fNCells){
393 Log() << kFATAL <<
"Too many cells" <<
Endl;
397 cell = fCells[fLastCe];
399 cell->
Fill(status, parent, 0, 0);
452 cell->
GetHcub(cellPosi,cellSize);
462 for (
Int_t idim = 0; idim < fDim; ++idim)
463 vol_scale *= fXmax[idim] - fXmin[idim];
469 toteventsOld = GetCellElement(cell, 0);
480 for (i=0;i<fDim;i++) ((
TH1D *)(*fHistEdg)[i])->Reset();
484 for (iev=0;iev<fNSampl;iev++){
487 if (fDim>0)
for (j=0; j<fDim; j++) xRand[j]= cellPosi[j] +fAlpha[j]*(cellSize[j]);
489 wt = dx*Eval(xRand, event_density);
490 totevents += event_density;
494 for (k=0; k<fDim; k++) {
496 ((
TH1D *)(*fHistEdg)[nProj])->Fill(xproj,wt);
504 if (ceSum[3]>wt) ceSum[3]=wt;
505 if (ceSum[4]<wt) ceSum[4]=wt;
507 if (ceSum[1]>0) nevEff = ceSum[0]*ceSum[0]/ceSum[1];
509 if ( nevEff >= fNBin*fEvPerBin)
break;
513 if (fNSampl>0) totevents /= fNSampl;
517 if (cell==fCells[0] && ceSum[0]<=0.0){
519 Log() << kFATAL <<
"No events were found during exploration of "
520 <<
"root cell. Please check PDEFoam parameters nSampl "
521 <<
"and VolFrac." <<
Endl;
523 Log() << kWARNING <<
"Negative number of events found during "
524 <<
"exploration of root cell" <<
Endl;
529 for (k=0; k<fDim;k++){
531 if ( fInhiDiv[k]==1) fMaskDiv[k] =0;
538 Double_t intTrue = ceSum[0]/(nevMC+0.000001);
541 if (kBest == -1) Varedu(ceSum,kBest,xBest,yBest);
542 intDriv =sqrt(ceSum[1]/nevMC) -intTrue;
549 SetCellElement(cell, 0, totevents);
553 for (parent = cell->
GetPare(); parent!=0; parent = parent->
GetPare()){
556 parent->
SetIntg( parIntg +intTrue -intOld );
557 parent->
SetDriv( parDriv +intDriv -driOld );
558 SetCellElement( parent, 0, GetCellElement(parent, 0) + totevents - toteventsOld);
575 Double_t ssw = sqrt(sswAll)/sqrt(nent);
583 for(
Int_t kProj=0; kProj<fDim; kProj++) {
584 if( fMaskDiv[kProj]) {
591 for(
Int_t jLo=1; jLo<=fNBin; jLo++) {
594 for(
Int_t jUp=jLo; jUp<=fNBin;jUp++) {
596 asswIn += Sqr(((
TH1D *)(*fHistEdg)[kProj])->GetBinError( jUp));
601 if ( (xUp-xLo) < std::numeric_limits<double>::epsilon()) sswIn=0.;
602 else sswIn = sqrt(asswIn) /sqrt(nent*(xUp-xLo)) *(xUp-xLo);
603 if ( (1.0-xUp+xLo) < std::numeric_limits<double>::epsilon()) sswOut=0.;
604 else if ( sswAll-asswIn < std::numeric_limits<double>::epsilon()) sswOut=0.;
605 else sswOut= sqrt(sswAll-asswIn)/sqrt(nent*(1.0-xUp+xLo)) *(1.0-xUp+xLo);
606 if( (sswIn+sswOut) < sswtBest) {
607 sswtBest = sswIn+sswOut;
624 if(iLo == 0) xBest=yBest;
625 if(iUp == fNBin) yBest=xBest;
630 if( (kBest >= fDim) || (kBest<0) )
631 Log() << kFATAL <<
"Something wrong with kBest" <<
Endl;
641 fPseRan->RndmArray(fDim,fRvec);
642 for(
Int_t k=0; k<fDim; k++) fAlpha[k] = fRvec[k];
662 for(i=0; i<=fLastCe; i++) {
663 if( fCells[i]->GetStat() == 1 ) {
665 driv = fCells[i]->GetDriv();
666 if (driv < std::numeric_limits<float>::epsilon())
671 if (xDiv <= std::numeric_limits<Double_t>::epsilon() ||
672 xDiv >= 1.0 - std::numeric_limits<Double_t>::epsilon())
676 if (GetMaxDepth() > 0)
677 bCutMaxDepth = fCells[i]->GetDepth() < GetMaxDepth();
681 bCutNmin = GetCellElement(fCells[i], 0) > GetNmin();
684 if(driv > drivMax && bCutNmin && bCutMaxDepth) {
693 Log() << kVERBOSE <<
"Warning: No cell with more than "
694 << GetNmin() <<
" events found!" <<
Endl;
695 else if (!bCutMaxDepth)
696 Log() << kVERBOSE <<
"Warning: Maximum depth reached: "
697 << GetMaxDepth() <<
Endl;
699 Log() << kWARNING <<
"<PDEFoam::PeekMax>: no more candidate cells (drivMax>0) found for further splitting." <<
Endl;
720 if(fLastCe+1 >= fNCells) Log() << kFATAL <<
"Buffer limit is reached, fLastCe=fnBuf" <<
Endl;
727 if( kBest<0 || kBest>=fDim ) Log() << kFATAL <<
"Wrong kBest" <<
Endl;
733 Int_t d1 = CellFill(1, cell);
734 Int_t d2 = CellFill(1, cell);
738 Explore( (fCells[d1]) );
739 Explore( (fCells[d2]) );
754 std::vector<Double_t> xvec;
755 xvec.reserve(GetTotDim());
756 for (
Int_t idim = 0; idim < GetTotDim(); ++idim)
757 xvec.push_back( VarTransformInvers(idim, xRand[idim]) );
759 return GetDistr()->Density(xvec, event_density);
770 fTimer->Init(fNCells);
775 while ( (fLastCe+2) < fNCells ) {
778 if ( (iCell<0) || (iCell>fLastCe) ) {
779 Log() << kVERBOSE <<
"Break: "<< fLastCe+1 <<
" cells created" <<
Endl;
781 for (
Long_t jCell=fLastCe+1; jCell<fNCells; jCell++)
782 delete fCells[jCell];
786 newCell = fCells[iCell];
790 if ( Divide( newCell )==0)
break;
795 Log() << kVERBOSE << GetNActiveCells() <<
" active cells created" <<
Endl;
805 if(fDim==0) Log() << kFATAL <<
"SetInhiDiv: fDim=0" <<
Endl;
807 fInhiDiv =
new Int_t[ fDim ];
808 for(
Int_t i=0; i<fDim; i++) fInhiDiv[i]=0;
811 if( ( 0<=iDim) && (iDim<fDim)) {
812 fInhiDiv[iDim] = inhiDiv;
814 Log() << kFATAL <<
"Wrong iDim" <<
Endl;
825 Int_t errors, warnings;
829 errors = 0; warnings = 0;
830 if (level==1) Log() << kVERBOSE <<
"Performing consistency checks for created foam" <<
Endl;
831 for(iCell=1; iCell<=fLastCe; iCell++) {
832 cell = fCells[iCell];
837 if (level==1) Log() << kFATAL <<
"ERROR: Cell's no %d has only one daughter " << iCell <<
Endl;
841 if (level==1) Log() << kFATAL <<
"ERROR: Cell's no %d has no daughter and is inactive " << iCell <<
Endl;
845 if (level==1) Log() << kFATAL <<
"ERROR: Cell's no %d has two daughters and is active " << iCell <<
Endl;
849 if( (cell->
GetPare())!=fCells[0] ) {
852 if (level==1) Log() << kFATAL <<
"ERROR: Cell's no %d parent not pointing to this cell " << iCell <<
Endl;
860 if (level==1) Log() << kFATAL <<
"ERROR: Cell's no %d daughter 0 not pointing to this cell " << iCell <<
Endl;
866 if (level==1) Log() << kFATAL <<
"ERROR: Cell's no %d daughter 1 not pointing to this cell " << iCell <<
Endl;
871 if(level==1) Log() << kFATAL <<
"ERROR: Cell no. " << iCell <<
" has Volume of <1E-50" <<
Endl;
876 for(iCell=0; iCell<=fLastCe; iCell++) {
877 cell = fCells[iCell];
880 if(level==1) Log() << kFATAL <<
"ERROR: Cell no. " << iCell <<
" is active but Volume is 0 " <<
Endl;
885 Log() << kVERBOSE <<
"Check has found " << errors <<
" errors and " << warnings <<
" warnings." <<
Endl;
888 Info(
"CheckAll",
"Check - found total %d errors \n",errors);
898 if (iCell < 0 || iCell > fLastCe) {
899 Log() << kWARNING <<
"<PrintCell(iCell=" << iCell
900 <<
")>: cell number " << iCell <<
" out of bounds!"
906 fCells[iCell]->GetHcub(cellPosi,cellSize);
907 Int_t kBest = fCells[iCell]->GetBest();
908 Double_t xBest = fCells[iCell]->GetXdiv();
910 Log() <<
"Cell[" << iCell <<
"]={ ";
911 Log() <<
" " << fCells[iCell] <<
" " <<
Endl;
912 Log() <<
" Xdiv[abs. coord.]="
913 << VarTransformInvers(kBest,cellPosi[kBest] + xBest*cellSize[kBest])
915 Log() <<
" Abs. coord. = (";
916 for (
Int_t idim=0; idim<fDim; idim++) {
917 Log() <<
"dim[" << idim <<
"]={"
918 << VarTransformInvers(idim,cellPosi[idim]) <<
","
919 << VarTransformInvers(idim,cellPosi[idim] + cellSize[idim])
924 Log() <<
")" <<
Endl;
925 fCells[iCell]->
Print(
"1");
927 Log() <<
"Elements: [";
930 for (
Int_t i=0; i<
vec->GetNrows(); i++){
931 if (i>0) Log() <<
", ";
932 Log() << GetCellElement(fCells[iCell], i);
936 Log() <<
"]" <<
Endl;
945 for(
Long_t iCell=0; iCell<=fLastCe; iCell++)
959 std::vector<Float_t> values = ev->
GetValues();
960 std::vector<Float_t> tvalues = VarTransform(values);
965 SetCellElement(cell, 0, GetCellElement(cell, 0) + wt);
966 SetCellElement(cell, 1, GetCellElement(cell, 1) + wt*wt);
976 Log() << kVERBOSE <<
"Delete cell elements" <<
Endl;
977 for (
Long_t iCell = 0; iCell < fNCells; ++iCell) {
978 TObject* elements = fCells[iCell]->GetElement();
981 fCells[iCell]->SetElement(NULL);
1019 std::vector<Float_t> txvec(VarTransform(xvec));
1021 return GetCellValue(FindCell(txvec), cv);
1023 return kernel->
Estimate(
this, txvec, cv);
1047 std::map<Int_t,Float_t> txvec;
1048 for (std::map<Int_t,Float_t>::const_iterator it=xvec.begin(); it!=xvec.end(); ++it)
1049 txvec.insert(std::pair<Int_t, Float_t>(it->first, VarTransform(it->first, it->second)));
1052 std::vector<PDEFoamCell*> cells = FindCells(txvec);
1055 std::vector<Float_t> cell_values;
1056 cell_values.reserve(cells.size());
1057 for (std::vector<PDEFoamCell*>::const_iterator cell_it=cells.begin();
1058 cell_it != cells.end(); ++cell_it)
1059 cell_values.push_back(GetCellValue(*cell_it, cv));
1083 PDEFoamVect cellPosi0(GetTotDim()), cellSize0(GetTotDim());
1091 cell0->
GetHcub(cellPosi0,cellSize0);
1093 if (xvec.at(idim)<=cellPosi0[idim]+cellSize0[idim])
1121 PDEFoamVect cellPosi0(GetTotDim()), cellSize0(GetTotDim());
1129 map<Int_t, Float_t>::const_iterator it = txvec.find(idim);
1131 if (it != txvec.end()){
1135 cell0->
GetHcub(cellPosi0,cellSize0);
1137 if (it->second <= cellPosi0[idim] + cellSize0[idim])
1143 FindCells(txvec, cell->
GetDau0(), cells);
1144 FindCells(txvec, cell->
GetDau1(), cells);
1148 cells.push_back(cell);
1169 std::map<Int_t, Float_t> txvec_map;
1170 for (
UInt_t i=0; i<txvec.size(); ++i)
1171 txvec_map.insert(std::pair<Int_t, Float_t>(i, txvec.at(i)));
1174 std::vector<PDEFoamCell*> cells(0);
1177 FindCells(txvec_map, fCells[0], cells);
1200 std::vector<PDEFoamCell*> cells(0);
1203 FindCells(txvec, fCells[0], cells);
1222 if ( GetTotDim()!=1 )
1223 Log() << kFATAL <<
"<Draw1Dim>: function can only be used for 1-dimensional foams!"
1229 h1=
new TH1D(hname,
"1-dimensional Foam", nbin, fXmin[0], fXmax[0]);
1231 if (!
h1) Log() << kFATAL <<
"ERROR: Can not create histo" << hname <<
Endl;
1236 std::vector<Float_t> txvec;
1239 if (kernel != NULL) {
1241 val = kernel->
Estimate(
this, txvec, cell_value);
1243 val = GetCellValue(FindCell(txvec), cell_value);
1274 if ((idim1>=GetTotDim()) || (idim1<0) ||
1275 (idim2>=GetTotDim()) || (idim2<0) ||
1277 Log() << kFATAL <<
"<Project2>: wrong dimensions given: "
1278 << idim1 <<
", " << idim2 <<
Endl;
1284 Log() << kWARNING <<
"Warning: number of bins too big: " << nbin
1285 <<
" Using 1000 bins for each dimension instead." <<
Endl;
1287 }
else if (nbin<1) {
1288 Log() << kWARNING <<
"Wrong bin number: " << nbin
1289 <<
"; set nbin=50" <<
Endl;
1299 h1 =
new TH2D(hname.
Data(),
TString::Format(
"var%d vs var%d",idim1,idim2).
Data(), nbin, fXmin[idim1], fXmax[idim1], nbin, fXmin[idim2], fXmax[idim2]);
1301 if (!
h1) Log() << kFATAL <<
"ERROR: Can not create histo" << hname <<
Endl;
1309 std::map<Int_t, Float_t> txvec;
1315 std::vector<TMVA::PDEFoamCell*> cells = FindCells(txvec);
1320 for (std::vector<TMVA::PDEFoamCell*>::const_iterator it = cells.begin();
1321 it != cells.end(); ++it) {
1323 PDEFoamVect cellPosi(GetTotDim()), cellSize(GetTotDim());
1324 (*it)->GetHcub(cellPosi,cellSize);
1327 std::vector<Float_t> tvec;
1328 for (
Int_t i=0; i<GetTotDim(); ++i) {
1329 if ( i != idim1 && i != idim2 )
1330 tvec.push_back(cellPosi[i] + 0.5*cellSize[i]);
1332 tvec.push_back(txvec[i]);
1334 if (kernel != NULL) {
1336 sum_cv += kernel->
Estimate(
this, tvec, cell_value);
1338 sum_cv += GetCellValue(FindCell(tvec), cell_value);
1363 return GetCellElement(cell, 0);
1366 return GetCellElement(cell, 1);
1368 case kValueDensity: {
1371 if (volume > numeric_limits<double>::epsilon()) {
1372 return GetCellValue(cell, kValue)/volume;
1376 Log() << kWARNING <<
"<GetCellDensity(cell)>: ERROR: cell volume"
1377 <<
" negative or zero!"
1378 <<
" ==> return cell density 0!"
1379 <<
" cell volume=" << volume
1380 <<
" cell entries=" << GetCellValue(cell, kValue) <<
Endl;
1382 Log() << kWARNING <<
"<GetCellDensity(cell)>: WARNING: cell volume"
1383 <<
" close to zero!"
1384 <<
" cell volume: " << volume <<
Endl;
1406 Log() << kFATAL <<
"<GetCellValue>: unknown cell value" <<
Endl;
1448 Log() << kFATAL <<
"<SetCellElement> ERROR: cell element is not a TVectorD*" <<
Endl;
1464 Log() << kINFO <<
"Elapsed time: " + fTimer->GetElapsedTime()
1471 if (fNCells >= 100) modulo =
Int_t(fNCells/100);
1472 if (fLastCe%modulo == 0) fTimer->DrawProgressBar( fLastCe );
1515 if (GetTotDim() != 2)
1516 Log() << kFATAL <<
"RootPlot2dim() can only be used with "
1517 <<
"two-dimensional foams!" <<
Endl;
1520 ECellValue cell_value = kValue;
1524 cell_value = kValue;
1525 }
else if (opt.
Contains(
"rms_ov_mean")){
1526 cell_value = kRmsOvMean;
1533 plotcellnumber =
kTRUE;
1536 std::ofstream outfile(
filename, std::ios::out);
1538 outfile<<
"{" << std::endl;
1543 outfile <<
"TColor *graycolors[100];" << std::endl;
1544 outfile <<
"for (Int_t i=0.; i<100; i++)" << std::endl;
1545 outfile <<
" graycolors[i]=new TColor(1000+i, 1-(Float_t)i/100.,1-(Float_t)i/100.,1-(Float_t)i/100.);"<< std::endl;
1548 outfile <<
"cMap = new TCanvas(\"" << fName <<
"\",\"Cell Map for "
1549 << fName <<
"\",600,600);" << std::endl;
1551 outfile<<
"TBox*a=new TBox();"<<std::endl;
1552 outfile<<
"a->SetFillStyle(0);"<<std::endl;
1553 outfile<<
"a->SetLineWidth(4);"<<std::endl;
1554 outfile<<
"TBox *b1=new TBox();"<<std::endl;
1555 outfile<<
"TText*t=new TText();"<<std::endl;
1557 outfile << (
colors ?
"gStyle->SetPalette(1, 0);" :
"gStyle->SetPalette(0);")
1559 outfile <<
"b1->SetFillStyle(1001);"<<std::endl;
1560 outfile<<
"TBox *b2=new TBox();"<<std::endl;
1561 outfile <<
"b2->SetFillStyle(0);"<<std::endl;
1564 outfile <<
"b1->SetFillStyle(0);"<<std::endl;
1576 for (
Long_t iCell=1; iCell<=fLastCe; iCell++) {
1577 if ( fCells[iCell]->GetStat() == 1) {
1578 Float_t value = GetCellValue(fCells[iCell], cell_value);
1585 outfile <<
"// observed minimum and maximum of distribution: " << std::endl;
1586 outfile <<
"// Float_t zmin = "<< zmin <<
";" << std::endl;
1587 outfile <<
"// Float_t zmax = "<< zmax <<
";" << std::endl;
1590 outfile <<
"// used minimum and maximum of distribution (taking into account log scale if applicable): " << std::endl;
1591 outfile <<
"Float_t zmin = "<< zmin <<
";" << std::endl;
1592 outfile <<
"Float_t zmax = "<< zmax <<
";" << std::endl;
1598 Float_t scale = (ncolors-1)/(zmax - zmin);
1599 PDEFoamVect cellPosi(GetTotDim()), cellSize(GetTotDim());
1603 outfile <<
"// =========== Rectangular cells ==========="<< std::endl;
1604 for (
Long_t iCell=1; iCell<=fLastCe; iCell++) {
1605 if ( fCells[iCell]->GetStat() == 1) {
1606 fCells[iCell]->GetHcub(cellPosi,cellSize);
1607 x1 = offs+lpag*(cellPosi[0]);
1608 y1 = offs+lpag*(cellPosi[1]);
1609 x2 = offs+lpag*(cellPosi[0]+cellSize[0]);
1610 y2 = offs+lpag*(cellPosi[1]+cellSize[1]);
1614 Float_t value = GetCellValue(fCells[iCell], cell_value);
1624 outfile <<
"b1->SetFillColor(" << color <<
");" << std::endl;
1628 outfile<<
"b1->DrawBox("<<
x1<<
","<<
y1<<
","<<
x2<<
","<<
y2<<
");"<<std::endl;
1630 outfile<<
"b2->DrawBox("<<
x1<<
","<<
y1<<
","<<
x2<<
","<<
y2<<
");"<<std::endl;
1633 if (plotcellnumber) {
1634 outfile<<
"t->SetTextColor(4);"<<std::endl;
1636 outfile<<
"t->SetTextSize(0.025);"<<std::endl;
1637 else if(fLastCe<251)
1638 outfile<<
"t->SetTextSize(0.015);"<<std::endl;
1640 outfile<<
"t->SetTextSize(0.008);"<<std::endl;
1641 x = offs+lpag*(cellPosi[0]+0.5*cellSize[0]);
1642 y = offs+lpag*(cellPosi[1]+0.5*cellSize[1]);
1643 outfile<<
"t->DrawText("<<
x<<
","<<
y<<
","<<
"\""<<iCell<<
"\""<<
");"<<std::endl;
1647 outfile<<
"// ============== End Rectangles ==========="<< std::endl;
1649 outfile <<
"}" << std::endl;
1660 GetDistr()->FillBinarySearchTree(ev);
1669 if(fDistr)
delete fDistr;
static const Float_t kVlow
static const Float_t kHigh
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
virtual Double_t GetBinCenter(Int_t bin) const
Return center of bin.
virtual void SetOwner(Bool_t enable=kTRUE)
Set whether this collection is the owner (enable==true) of its content.
1-D histogram with a double per channel (see TH1 documentation)}
virtual Double_t GetBinCenter(Int_t bin) const
Return bin center for 1D histogram.
virtual Int_t GetNbinsY() const
static void AddDirectory(Bool_t add=kTRUE)
Sets the flag controlling the automatic add of histograms in memory.
virtual Int_t GetNbinsX() const
virtual void SetBinContent(Int_t bin, Double_t content)
Set bin content see convention for numbering bins in TH1::GetBin In case the bin number is greater th...
virtual Double_t GetBinContent(Int_t bin) const
Return content of bin number bin.
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)
This class is the abstract kernel interface for PDEFoam.
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'.
void DeleteBinarySearchTree()
Delete the foam's density estimator, which contains the binary search tree.
void MakeAlpha()
Internal subprogram used by Create.
TObjArray * fVariableNames
collection of all variable names
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.
Int_t Divide(PDEFoamCell *)
Internal subprogram used by Create.
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.
TH1D * Draw1Dim(ECellValue cell_value, Int_t nbin, PDEFoamKernelBase *kernel=nullptr)
Draws 1-dimensional foam (= histogram)
Double_t Eval(Double_t *xRand, Double_t &event_density)
Internal subprogram.
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
virtual ~PDEFoam()
Default destructor.
PDEFoam()
Default constructor for streamer, user should not use it.
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.
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.
void SetInhiDiv(Int_t, Int_t)
This can be called before Create, after setting kDim It defines which variables are excluded in the p...
void InitCells()
Internal subprogram used by Create.
PDEFoamCell * FindCell(const std::vector< Float_t > &) const
Find cell that contains 'xvec' (in foam coordinates [0,1]).
void FillBinarySearchTree(const Event *ev)
Insert event to internal foam's density estimator PDEFoamDensityBase.
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.
void Varedu(Double_t[5], Int_t &, Double_t &, Double_t &)
Internal subprogram used by Create.
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 ...
void CheckAll(Int_t)
User utility, miscellaneous and debug.
void SetDim(Int_t kDim)
Sets dimension of cubical space.
Timing information for training and evaluation of MVA methods.
Mother of all ROOT objects.
virtual void Print(Option_t *option="") const
This method must be overridden when a class wants to print itself.
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
void SetPalette(Int_t ncolors=kBird, Int_t *colors=nullptr, Float_t alpha=1.)
See TColor::SetPalette.
Int_t GetColorPalette(Int_t i) const
Return color number i in current palette.
Int_t GetNumberOfColors() const
Return number of colors in the color palette.
MsgLogger & Endl(MsgLogger &ml)
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.