98#define BXOPE std::cout<<\
99"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"<<std::endl<<\
101#define BXTXT(text) std::cout<<\
102"F "<<std::setw(40)<< text <<" F"<<std::endl
103#define BX1I(name,numb,text) std::cout<<\
104"F "<<std::setw(10)<<name<<" = "<<std::setw(10)<<numb<<" = " <<std::setw(50)<<text<<" F"<<std::endl
105#define BX1F(name,numb,text) std::cout<<"F "<<std::setw(10)<<name<<\
106 " = "<<std::setw(15)<<std::setprecision(8)<<numb<<" = "<<std::setw(40)<<text<<" F"<<std::endl
107#define BX2F(name,numb,err,text) std::cout<<"F "<<std::setw(10)<<name<<\
108" = "<<std::setw(15)<<std::setprecision(8)<<numb<<" +- "<<std::setw(15)<<std::setprecision(8)<<err<< \
109 " = "<<std::setw(25)<<text<<" F"<<std::endl
110#define BXCLO std::cout<<\
112"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"<<std::endl
118#define SW2 setprecision(7) << std::setw(12)
147 fDim(0), fNCells(0), fRNmax(0),
148 fOptDrive(0), fChat(0), fOptRej(0),
149 fNBin(0), fNSampl(0), fEvPerBin(0),
150 fMaskDiv(0), fInhiDiv(0), fOptPRD(0), fXdivPRD(0),
151 fNoAct(0), fLastCe(0), fCells(0),
152 fMCMonit(0), fMaxWtRej(0), fPrimAcu(0),
153 fHistEdg(0), fHistDbg(0), fHistWt(0),
154 fMCvect(0), fMCwt(0), fRvec(0),
155 fRho(0), fMethodCall(0), fPseRan(0),
156 fNCalls(0), fNEffev(0),
157 fSumWt(0), fSumWt2(0),
158 fSumOve(0), fNevGen(0),
159 fWtMax(0), fWtMin(0),
160 fPrime(0), fMCresult(0), fMCerror(0),
168 fDim(0), fNCells(0), fRNmax(0),
169 fOptDrive(0), fChat(0), fOptRej(0),
170 fNBin(0), fNSampl(0), fEvPerBin(0),
171 fMaskDiv(0), fInhiDiv(0), fOptPRD(0), fXdivPRD(0),
172 fNoAct(0), fLastCe(0), fCells(0),
173 fMCMonit(0), fMaxWtRej(0), fPrimAcu(0),
174 fHistEdg(0), fHistDbg(0), fHistWt(0),
175 fMCvect(0), fMCwt(0), fRvec(0),
176 fRho(0), fMethodCall(0), fPseRan(0),
177 fNCalls(0), fNEffev(0),
178 fSumWt(0), fSumWt2(0),
179 fSumOve(0), fNevGen(0),
180 fWtMax(0), fWtMin(0),
181 fPrime(0), fMCresult(0), fMCerror(0),
184 if(strlen(
Name) >129) {
185 Error(
"TFoam",
"Name too long %s \n",
Name);
188 fDate=
" Release date: 2005.04.10";
271 Error(
"TFoam",
"COPY CONSTRUCTOR NOT IMPLEMENTED \n");
331 BXTXT(
"****************************************");
332 BXTXT(
"****** TFoam::Initialize ******");
333 BXTXT(
"****************************************");
336 BX1I(
" kDim",
fDim,
" Dimension of the hyper-cubical space ");
337 BX1I(
" nCells",
fNCells,
" Requested number of Cells (half of them active) ");
338 BX1I(
" nSampl",
fNSampl,
" No of MC events in exploration of a cell ");
339 BX1I(
" nBin",
fNBin,
" No of bins in histograms, MC exploration of cell ");
340 BX1I(
" EvPerBin",
fEvPerBin,
" Maximum No effective_events/bin, MC exploration ");
341 BX1I(
" OptDrive",
fOptDrive,
" Type of Driver =1,2 for Sigma,WtMax ");
342 BX1I(
" OptRej",
fOptRej,
" MC rejection on/off for OptRej=0,1 ");
343 BX1F(
" MaxWtRej",
fMaxWtRej,
" Maximum wt in rejection for wt=1 evts");
347 if(
fPseRan==0)
Error(
"Initialize",
"Random number generator not set \n");
349 if(
fDim==0)
Error(
"Initialize",
"Zero dimension not allowed \n");
357 if(
fRvec==0)
Error(
"Initialize",
"Cannot initialize buffer fRvec \n");
361 if(
fAlpha==0)
Error(
"Initialize",
"Cannot initialize buffer fAlpha \n" );
364 if(
fMCvect==0)
Error(
"Initialize",
"Cannot initialize buffer fMCvect \n" );
389 htitle=
TString(
"Edge Histogram No. ");
400 htitle=
TString(
"Debug Histogram ");
432 BXTXT(
"*** TFoam::Initialize FINISHED!!! ***");
433 BX1I(
" nCalls",
fNCalls,
"Total number of function calls ");
434 BX1F(
" XPrime",
fPrime,
"Primary total integral ");
435 BX1F(
" XDiver",driver,
"Driver total integral ");
436 BX1F(
" mcResult",
fMCresult,
"Estimate of the true MC Integral ");
462 if(
fCells==0)
Error(
"InitCells",
"Cannot initialize CELLS \n" );
483 Error(
"CellFill",
"Too many cells\n");
490 cell->
Fill(Status, parent, 0, 0);
536 cell->
GetHcub(cellPosi,cellSize);
568 for(j=0; j<
fDim; j++)
569 xRand[j]= cellPosi[j] +
fAlpha[j]*(cellSize[j]);
576 for(k=0; k<
fDim; k++) {
587 if (ceSum[3]>wt) ceSum[3]=wt;
588 if (ceSum[4]<wt) ceSum[4]=wt;
590 nevEff = ceSum[1] == 0. ? 0. : ceSum[0]*ceSum[0]/ceSum[1];
595 for(k=0; k<
fDim;k++){
603 for(k=0; k<
fDim; k++) {
605 rmax= cellPosi[k] +cellSize[k];
611 if( (rmin +1
e-99 <rdiv) && (rdiv< rmax -1
e-99)) {
613 xBest= (rdiv-cellPosi[k])/cellSize[k] ;
625 Double_t intTrue = ceSum[0]/(nevMC+0.000001);
631 if(kBest == -1)
Varedu(ceSum,kBest,xBest,yBest);
633 intDriv =
sqrt(ceSum[1]/nevMC) -intTrue;
634 intPrim =
sqrt(ceSum[1]/nevMC);
637 if(kBest == -1)
Carver(kBest,xBest,yBest);
638 intDriv =ceSum[4] -intTrue;
642 Error(
"Explore",
"Wrong fOptDrive = \n" );
656 for(parent = cell->
GetPare(); parent!=0; parent = parent->
GetPare()){
659 parent->
SetIntg( parIntg +intTrue -intOld );
660 parent->
SetDriv( parDriv +intDriv -driOld );
681 Double_t swIn,swOut,sswIn,sswOut,xLo,xUp;
687 for(
Int_t kProj=0; kProj<
fDim; kProj++) {
698 aswIn += ((
TH1D *)(*
fHistEdg)[kProj])->GetBinContent(jUp);
703 swOut = (swAll-aswIn)/nent;
704 sswIn =
sqrt(asswIn) /
sqrt(nent*(xUp-xLo)) *(xUp-xLo);
705 sswOut=
sqrt(sswAll-asswIn)/
sqrt(nent*(1.0-xUp+xLo)) *(1.0-xUp+xLo);
706 if( (sswIn+sswOut) < sswtBest) {
707 sswtBest = sswIn+sswOut;
709 sigmIn = sswIn -swIn;
710 sigmOut = sswOut-swOut;
723 if( ((iBin-0.5)/
fNBin > xMin) && ((iBin-0.5)/
fNBin < xMax) ){
724 ((
TH1D *)(*
fHistDbg)[kProj])->SetBinContent(iBin,sigmIn/(xMax-xMin));
726 ((
TH1D *)(*
fHistDbg)[kProj])->SetBinContent(iBin,sigmOut/(1-xMax+xMin));
734 if(iLo == 0) xBest=yBest;
735 if(iUp ==
fNBin) yBest=xBest;
741 if( (kBest >=
fDim) || (kBest<0) )
Error(
"Varedu",
"Something wrong with kBest - kBest = %d dim = %d\n",kBest,
fDim);
754 Double_t carve,carvTot,carvMax,carvOne,binMax;
755 Int_t jLow,jUp,iLow,iUp;
761 if(bins==0)
Error(
"Carver",
"Cannot initialize buffer Bins \n" );
768 for(kProj=0; kProj<
fDim; kProj++)
774 for(iBin=0; iBin<
fNBin;iBin++){
775 bins[iBin]= ((
TH1D *)(*
fHistEdg)[kProj])->GetBinContent(iBin+1);
783 for(iBin=0;iBin<
fNBin;iBin++){
784 carvTot = carvTot + (binMax-bins[iBin]);
792 for(iBin=0; iBin<
fNBin;iBin++) {
796 for(j=iBin; j>-1; j-- ) {
797 if(theBin< bins[j])
break;
804 for(j=iBin; j<
fNBin; j++) {
805 if(theBin< bins[j])
break;
811 carve = (iUp-iLow+1)*(binMax-theBin);
812 if( carve > carvOne) {
819 if( carvTot > carvMax) {
826 if(jLow == 0 ) xBest = yBest;
827 if(jUp ==
fNBin-1) yBest = xBest;
834 for(iBin=0; iBin<
fNBin; iBin++)
835 ((
TH1D *)(*fHistDbg)[kProj])->SetBinContent(iBin+1,binMax);
836 for(iBin=jLow; iBin<jUp+1; iBin++)
837 ((
TH1D *)(*fHistDbg)[kProj])->SetBinContent(iBin+1,yLevel);
839 if( (kBest >=
fDim) || (kBest<0) )
Error(
"Carver",
"Something wrong with kBest - kBest = %d dim = %d\n",kBest,
fDim);
869 if( (iCell<0) || (iCell>
fLastCe) ) {
870 Error(
"Grow",
"Wrong iCell \n");
881 std::cout<<
fDim<<std::flush;
883 std::cout<<
"."<<std::flush;
884 if( (
fLastCe%(100*kEcho))==0) std::cout<<
"|"<<
fLastCe<<std::endl<<std::flush;
888 if(
Divide( newCell )==0)
break;
891 std::cout<<std::endl<<std::flush;
908 if(
fCells[i]->GetStat() == 1 ) {
919 std::cout <<
"STOP in TFoam::PeekMax: not found iCell=" << iCell << std::endl;
944 if( kBest<0 || kBest>=
fDim )
Error(
"Divide",
"Wrong kBest \n");
980 for(iCell=0; iCell<=
fLastCe; iCell++) {
981 if (
fCells[iCell]->GetStat()==1) {
988 if(
fPrime == 0.)
Error(
"MakeActiveList",
"Integrand function is zero \n" );
991 if(
fPrimAcu==0 )
Error(
"MakeActiveList",
"Cant allocate fCellsAct or fPrimAcu \n");
994 for(iCell=0; iCell<
fNoAct; iCell++) {
1011 Info(
"ResetPseRan",
"Resetting random number generator \n");
1025 Error(
"SetRho",
"Bad function \n" );
1039 Error(
"SetRho",
"Bad function \n" );
1054 Info(
"ResetRho",
"!!! Resetting distribution function !!!\n");
1096 hit = lo + (
Int_t)( (
hi-lo)*(random-flo)/(fhi-flo)+0.5);
1137 rCell->
GetHcub(cellPosi,cellSize);
1138 for(j=0; j<
fDim; j++)
1218 mcError = mcResult *mCerelat;
1263 Double_t mCerelat= mcError/mcResult;
1270 if(wtMax>0.0) mCeff=aveWt/wtMax;
1271 mcEf2 =
sigma/aveWt;
1275 BXTXT(
"****************************************");
1276 BXTXT(
"****** TFoam::Finalize ******");
1277 BXTXT(
"****************************************");
1278 BX1I(
" NevGen",
fNevGen,
"Number of generated events in the MC generation ");
1279 BX1I(
" nCalls",
fNCalls,
"Total number of function calls ");
1280 BXTXT(
"----------------------------------------");
1281 BX1F(
" AveWt",aveWt,
"Average MC weight ");
1282 BX1F(
" WtMin",
fWtMin,
"Minimum MC weight (absolute) ");
1283 BX1F(
" WtMax",
fWtMax,
"Maximum MC weight (absolute) ");
1284 BXTXT(
"----------------------------------------");
1285 BX1F(
" XPrime",
fPrime,
"Primary total integral, R_prime ");
1286 BX1F(
" XDiver",driver,
"Driver total integral, R_loss ");
1287 BXTXT(
"----------------------------------------");
1288 BX2F(
" IntMC", mcResult, mcError,
"Result of the MC Integral");
1289 BX1F(
" mCerelat", mCerelat,
"Relative error of the MC integral ");
1290 BX1F(
" <w>/WtMax",mCeff,
"MC efficiency, acceptance rate");
1291 BX1F(
" Sigma/<w>",mcEf2,
"MC efficiency, variance/ave_wt");
1292 BX1F(
" WtMax",wtMax,
"WtMax(esp= 0.0005) ");
1293 BX1F(
" Sigma",
sigma,
"variance of MC weight ");
1296 BX1F(
"<OveW>/<W>",avOve,
"Contrib. of events wt>MaxWtRej");
1314 if(
fDim==0)
Error(
"TFoam",
"SetInhiDiv: fDim=0 \n");
1320 if( ( 0<=iDim) && (iDim<
fDim)) {
1323 Error(
"SetInhiDiv:",
"Wrong iDim \n");
1344 if(
fDim<=0)
Error(
"SetXdivPRD",
"fDim=0 \n");
1345 if(
len<1 )
Error(
"SetXdivPRD",
"len<1 \n");
1352 if( ( 0<=iDim) && (iDim<
fDim)) {
1355 Error(
"SetXdivPRD",
"Second allocation of XdivPRD not allowed \n");
1357 for(i=0; i<
len; i++) {
1361 Error(
"SetXdivPRD",
"Wrong iDim \n");
1364 std::cout<<
" SetXdivPRD, idim= "<<iDim<<
" len= "<<
len<<
" "<<std::endl;
1365 for(i=0; i<
len; i++) {
1366 if (iDim <
fDim) std::cout<< (*
fXdivPRD[iDim])[i] <<
" ";
1368 std::cout<<std::endl;
1369 for(i=0; i<
len; i++) std::cout<< xDiv[i] <<
" ";
1370 std::cout<<std::endl;
1382 Int_t errors, warnings;
1386 errors = 0; warnings = 0;
1387 if (level==1) std::cout <<
"///////////////////////////// FOAM_Checks /////////////////////////////////" << std::endl;
1388 for(iCell=1; iCell<=
fLastCe; iCell++) {
1394 if (level==1)
Error(
"CheckAll",
"ERROR: Cell's no %ld has only one daughter \n",iCell);
1398 if (level==1)
Error(
"CheckAll",
"ERROR: Cell's no %ld has no daughter and is inactive \n",iCell);
1402 if (level==1)
Error(
"CheckAll",
"ERROR: Cell's no %ld has two daughters and is active \n",iCell);
1409 if (level==1)
Error(
"CheckAll",
"ERROR: Cell's no %ld parent not pointing to this cell\n ",iCell);
1417 if (level==1)
Error(
"CheckAll",
"ERROR: Cell's no %ld daughter 0 not pointing to this cell \n",iCell);
1423 if (level==1)
Error(
"CheckAll",
"ERROR: Cell's no %ld daughter 1 not pointing to this cell \n",iCell);
1429 for(iCell=0; iCell<=
fLastCe; iCell++) {
1433 if(level==1)
Warning(
"CheckAll",
"Warning: Cell no. %ld is active but empty \n", iCell);
1438 Info(
"CheckAll",
"Check has found %d errors and %d warnings \n",errors, warnings);
1441 Info(
"CheckAll",
"Check - found total %d errors \n",errors);
1452 for(iCell=0; iCell<=
fLastCe; iCell++) {
1453 std::cout<<
"Cell["<<iCell<<
"]={ ";
1455 std::cout<<std::endl;
1457 std::cout<<
"}"<<std::endl;
1467 std::ofstream outfile(
filename, std::ios::out);
1472 outfile<<
"{" << std::endl;
1473 outfile<<
"cMap = new TCanvas(\"Map1\",\" Cell Map \",600,600);"<<std::endl;
1475 outfile<<
"TBox*a=new TBox();"<<std::endl;
1476 outfile<<
"a->SetFillStyle(0);"<<std::endl;
1477 outfile<<
"a->SetLineWidth(4);"<<std::endl;
1478 outfile<<
"a->SetLineColor(2);"<<std::endl;
1479 outfile<<
"a->DrawBox("<<offs<<
","<<offs<<
","<<(offs+lpag)<<
","<<(offs+lpag)<<
");"<<std::endl;
1481 outfile<<
"TText*t=new TText();"<<std::endl;
1482 outfile<<
"t->SetTextColor(4);"<<std::endl;
1484 outfile<<
"t->SetTextSize(0.025);"<<std::endl;
1486 outfile<<
"t->SetTextSize(0.015);"<<std::endl;
1488 outfile<<
"t->SetTextSize(0.008);"<<std::endl;
1490 outfile<<
"TBox*b=new TBox();"<<std::endl;
1491 outfile <<
"b->SetFillStyle(0);"<<std::endl;
1495 outfile <<
"// =========== Rectangular cells ==========="<< std::endl;
1496 for(iCell=1; iCell<=
fLastCe; iCell++) {
1497 if(
fCells[iCell]->GetStat() == 1) {
1499 x1 = offs+lpag*( cellPosi[0]);
y1 = offs+lpag*( cellPosi[1]);
1500 x2 = offs+lpag*(cellPosi[0]+cellSize[0]);
y2 = offs+lpag*(cellPosi[1]+cellSize[1]);
1503 outfile<<
"b->DrawBox("<<
x1<<
","<<
y1<<
","<<
x2<<
","<<
y2<<
");"<<std::endl;
1506 x = offs+lpag*(cellPosi[0]+0.5*cellSize[0]);
y = offs+lpag*(cellPosi[1]+0.5*cellSize[1]);
1507 outfile<<
"t->DrawText("<<
x<<
","<<
y<<
","<<
"\""<<iCell<<
"\""<<
");"<<std::endl;
1511 outfile<<
"// ============== End Rectangles ==========="<< std::endl;
1515 outfile <<
"}" << std::endl;
1523 Info(
"LinkCells",
"VOID function for backward compatibility \n");
#define BX1F(name, numb, text)
#define BX1I(name, numb, text)
#define BX2F(name, numb, err, text)
static const Double_t gVlow
static const Double_t gHigh
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 WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t result
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 Atom_t Atom_t Time_t UChar_t len
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 y1
Double_t Density(Int_t nDim, Double_t *x) override
~FoamIntegrandFunction() override
FoamIntegrandFunction(FunctionPtr func)
Double_t(* FunctionPtr)(Int_t, Double_t *)
void SetXdiv(Double_t Xdiv)
TFoamCell * GetDau1() const
void CalcVolume()
Calculates volume of the cell using size params which are calculated.
Double_t GetVolume() const
TFoamCell * GetDau0() const
void Print(Option_t *option) const override
Printout of the cell geometry parameters for the debug purpose.
void GetHcub(TFoamVect &, TFoamVect &) const
Provides size and position of the cell These parameter are calculated by analyzing information in all...
TFoamCell * GetPare() const
void SetSerial(Int_t Serial)
void Fill(Int_t, TFoamCell *, TFoamCell *, TFoamCell *)
Fills in certain data into newly allocated cell.
void SetDau1(TFoamCell *Daug)
void SetPrim(Double_t Prim)
void SetDriv(Double_t Driv)
void SetIntg(Double_t Intg)
void SetDau0(TFoamCell *Daug)
Abstract class representing n-dimensional real positive integrand function.
virtual Double_t Density(Int_t ndim, Double_t *)=0
Small auxiliary class for controlling MC weight.
void Fill(Double_t)
Filling analyzed weight.
void GetMCeff(Double_t, Double_t &, Double_t &)
Calculates Efficiency= aveWt/wtLim for a given tolerance level epsilon<<1 using information stored in...
Auxiliary class TFoamVect of n-dimensional vector, with dynamic allocation used for the cartesian geo...
TFoam is the main class of the multi-dimensional general purpose Monte Carlo event generator (integra...
virtual void MakeActiveList()
Internal method used by Initialize.
virtual void CheckAll(Int_t)
User utility, miscellaneous and debug.
TString fName
Name of a given instance of the FOAM class.
virtual Int_t Divide(TFoamCell *)
Internal method used by Initialize.
virtual void PrintCells()
Prints geometry of ALL cells of the FOAM.
TH1D * fHistWt
Histogram of the MC wt.
virtual void GetMCvect(Double_t *)
User may get generated MC point/vector with help of this method.
TFoamIntegrand * fRho
! Pointer to the user-defined integrand function/distribution
TRandom * fPseRan
Pointer to user-defined generator of pseudorandom numbers.
Double_t fMCerror
and its error
Double_t fPrime
Primary integral R' (R=R'<wt>)
Int_t fChat
Chat=0,1,2 chat level in output, Chat=1 normal level.
virtual void InitCells()
Internal method used by Initialize.
Double_t fNevGen
Total number of the generated MC events.
virtual void MakeEvent()
User method.
Double_t fSumWt2
Total sum of wt and wt^2.
TFoamVect ** fXdivPRD
! Lists of division values encoded in one vector per direction
~TFoam() override
Default destructor.
virtual Long_t PeekMax()
Internal method used by Initialize.
virtual void GenerCel2(TFoamCell *&)
Internal method.
virtual void Initialize()
Basic initialization of FOAM invoked by the user.
virtual void GetIntNorm(Double_t &, Double_t &)
User method.
TFoamMaxwt * fMCMonit
Monitor of the MC weight for measuring MC efficiency.
Int_t fRNmax
Maximum No. of the rand. numb. requested at once.
Int_t * fInhiDiv
! [fDim] Flags for inhibiting cell division
Long_t fNCalls
Total number of the function calls.
virtual Double_t GetMCwt()
User may get weight MC weight using this method.
Double_t fWtMin
Maximum/Minimum MC weight.
virtual void ResetRho(TFoamIntegrand *Rho)
User may optionally reset the distribution using this method.
Int_t fEvPerBin
Maximum number of effective (wt=1) events per bin.
virtual void GetIntegMC(Double_t &, Double_t &)
User method.
Double_t fMaxWtRej
Maximum weight in rejection for getting wt=1 events.
Int_t fNCells
Maximum number of cells.
Double_t * fRvec
[fRNmax] random number vector from r.n. generator fDim+1 maximum elements
virtual void RootPlot2dim(Char_t *)
Debugging tool which plots 2-dimensional cells as rectangles in C++ format readable for root.
Double_t * fAlpha
[fDim] Internal parameters of the hyper-rectangle
Int_t fOptDrive
Optimization switch =1,2 for variance or maximum weight optimization.
virtual void Explore(TFoamCell *Cell)
Internal method used by Initialize.
virtual Double_t Eval(Double_t *)
Internal method.
virtual void MakeAlpha()
Internal method used by Initialize.
virtual void ResetPseRan(TRandom *PseRan)
User may optionally reset random number generator using this method.
TMethodCall * fMethodCall
! ROOT's pointer to user-defined global distribution function
Double_t Sqr(Double_t x) const
Int_t fLastCe
Index of the last cell.
Int_t fOptPRD
Option switch for predefined division, for quick check.
TObjArray * fHistDbg
Histograms of wt, for debug.
virtual void SetXdivPRD(Int_t, Int_t, Double_t[])
This should be called before Initialize, after setting kDim It predefines values of the cell division...
Double_t fSumOve
Total Sum of overweighted events.
virtual void SetInhiDiv(Int_t, Int_t)
This can be called before Initialize, after setting kDim It defines which variables are excluded in t...
std::vector< Long_t > fCellsAct
Index of active cells, constructed at the end of foam build-up.
Int_t * fMaskDiv
! [fDim] Dynamic Mask for cell division
virtual void LinkCells(void)
virtual void SetRho(TFoamIntegrand *Rho)
User may use this method to set the distribution object.
virtual void SetRhoInt(Double_t(*fun)(Int_t, Double_t *))
User may use this method to set the distribution object as a global function pointer (and not as an i...
Int_t fNoAct
Number of active cells.
virtual void Finalize(Double_t &, Double_t &)
May be called optionally by the user after the MC run.
Long_t fNEffev
Total number of effective events (wt=1) in the foam buildup.
Int_t fOptRej
Switch =0 for weighted events; =1 for unweighted events in MC.
Double_t * fPrimAcu
[fNoAct] Array of cumulative probability of all active cells
virtual Double_t MCgenerate(Double_t *MCvect)
User method which generates MC event and returns MC weight.
Double_t * fMCvect
[fDim] Generated MC vector for the outside user
TString fVersion
Actual version of the FOAM like (1.01m)
virtual Int_t CellFill(Int_t, TFoamCell *)
Internal method used by Initialize.
Int_t fDim
Dimension of the integration/simulation space.
Int_t fNSampl
No. of MC events, when dividing (exploring) cell.
TString fDate
Release date of FOAM.
TFoamCell ** fCells
[fNCells] Array of ALL cells
virtual void SetPseRan(TRandom *PseRan)
TObjArray * fHistEdg
Histograms of wt, one for each cell edge.
Double_t fMCresult
True Integral R from MC series.
virtual void GetWtParams(Double_t, Double_t &, Double_t &, Double_t &)
May be called optionally after the MC run.
Int_t fNBin
No. of bins in the edge histogram for cell MC exploration.
virtual void Grow()
Internal method used by Initialize.
TFoam()
Default constructor for streamer, user should not use it.
virtual void Varedu(Double_t[], Int_t &, Double_t &, Double_t &)
Internal method used by Initialize.
virtual void Carver(Int_t &, Double_t &, Double_t &)
Internal method used by Initialize.
1-D histogram with a double per channel (see TH1 documentation)}
void Reset(Option_t *option="") override
Reset.
static void AddDirectory(Bool_t add=kTRUE)
Sets the flag controlling the automatic add of histograms in memory.
virtual Int_t Fill(Double_t x)
Increment bin with abscissa X by 1.
static Bool_t AddDirectoryStatus()
Static function: cannot be inlined on Windows/NT.
void Execute(const char *, const char *, int *=nullptr) override
Execute method on this object with the given parameter string, e.g.
void SetParamPtrs(void *paramArr, Int_t nparam=-1)
ParamArr is an array containing the function argument values.
void Delete(Option_t *option="") override
Remove all objects from the array AND delete all heap based objects.
Mother of all ROOT objects.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
This is the base class for the ROOT Random number generators.
virtual void RndmArray(Int_t n, Float_t *array)
Return an array of n random numbers uniformly distributed in ]0,1].
Double_t Rndm() override
Machine independent random number generator.
const char * Data() const
VecExpr< UnaryOp< Sqrt< T >, VecExpr< A, T, D >, T >, T, D > sqrt(const VecExpr< A, T, D > &rhs)
Short_t Max(Short_t a, Short_t b)
Short_t Min(Short_t a, Short_t b)
static uint64_t sum(uint64_t i)