137 #define BXOPE std::cout<<\
138 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"<<std::endl<<\
140 #define BXTXT(text) std::cout<<\
141 "F "<<std::setw(40)<< text <<" F"<<std::endl
142 #define BX1I(name,numb,text) std::cout<<\
143 "F "<<std::setw(10)<<name<<" = "<<std::setw(10)<<numb<<" = " <<std::setw(50)<<text<<" F"<<std::endl
144 #define BX1F(name,numb,text) std::cout<<"F "<<std::setw(10)<<name<<\
145 " = "<<std::setw(15)<<std::setprecision(8)<<numb<<" = "<<std::setw(40)<<text<<" F"<<std::endl
146 #define BX2F(name,numb,err,text) std::cout<<"F "<<std::setw(10)<<name<<\
147 " = "<<std::setw(15)<<std::setprecision(8)<<numb<<" +- "<<std::setw(15)<<std::setprecision(8)<<err<< \
148 " = "<<std::setw(25)<<text<<" F"<<std::endl
149 #define BXCLO std::cout<<\
151 "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"<<std::endl
157 #define SW2 setprecision(7) << std::setw(12)
166 FoamIntegrandFunction(FunctionPtr
func) : fFunc(func) {}
168 virtual ~FoamIntegrandFunction() {}
172 return fFunc(nDim,x);
186 fDim(0), fNCells(0), fRNmax(0),
187 fOptDrive(0), fChat(0), fOptRej(0),
188 fNBin(0), fNSampl(0), fEvPerBin(0),
189 fMaskDiv(0), fInhiDiv(0), fOptPRD(0), fXdivPRD(0),
190 fNoAct(0), fLastCe(0), fCells(0),
191 fMCMonit(0), fMaxWtRej(0), fCellsAct(0), fPrimAcu(0),
192 fHistEdg(0), fHistDbg(0), fHistWt(0),
193 fMCvect(0), fMCwt(0), fRvec(0),
194 fRho(0), fMethodCall(0), fPseRan(0),
195 fNCalls(0), fNEffev(0),
196 fSumWt(0), fSumWt2(0),
197 fSumOve(0), fNevGen(0),
198 fWtMax(0), fWtMin(0),
199 fPrime(0), fMCresult(0), fMCerror(0),
207 fDim(0), fNCells(0), fRNmax(0),
208 fOptDrive(0), fChat(0), fOptRej(0),
209 fNBin(0), fNSampl(0), fEvPerBin(0),
210 fMaskDiv(0), fInhiDiv(0), fOptPRD(0), fXdivPRD(0),
211 fNoAct(0), fLastCe(0), fCells(0),
212 fMCMonit(0), fMaxWtRej(0), fCellsAct(0), fPrimAcu(0),
213 fHistEdg(0), fHistDbg(0), fHistWt(0),
214 fMCvect(0), fMCwt(0), fRvec(0),
215 fRho(0), fMethodCall(0), fPseRan(0),
216 fNCalls(0), fNEffev(0),
217 fSumWt(0), fSumWt2(0),
218 fSumOve(0), fNevGen(0),
219 fWtMax(0), fWtMin(0),
220 fPrime(0), fMCresult(0), fMCerror(0),
223 if(strlen(Name) >129) {
224 Error(
"TFoam",
"Name too long %s \n",Name);
227 fDate=
" Release date: 2005.04.10";
304 if (
fRho && dynamic_cast<FoamIntegrandFunction*>(
fRho) )
delete fRho;
313 Error(
"TFoam",
"COPY CONSTRUCTOR NOT IMPLEMENTED \n");
378 BXTXT(
"****************************************");
379 BXTXT(
"****** TFoam::Initialize ******");
380 BXTXT(
"****************************************");
383 BX1I(
" kDim",
fDim,
" Dimension of the hyper-cubical space ");
384 BX1I(
" nCells",
fNCells,
" Requested number of Cells (half of them active) ");
385 BX1I(
" nSampl",
fNSampl,
" No of MC events in exploration of a cell ");
386 BX1I(
" nBin",
fNBin,
" No of bins in histograms, MC exploration of cell ");
387 BX1I(
" EvPerBin",
fEvPerBin,
" Maximum No effective_events/bin, MC exploration ");
388 BX1I(
" OptDrive",
fOptDrive,
" Type of Driver =1,2 for Sigma,WtMax ");
389 BX1I(
" OptRej",
fOptRej,
" MC rejection on/off for OptRej=0,1 ");
390 BX1F(
" MaxWtRej",
fMaxWtRej,
" Maximum wt in rejection for wt=1 evts");
394 if(
fPseRan==0)
Error(
"Initialize",
"Random number generator not set \n");
396 if(
fDim==0)
Error(
"Initialize",
"Zero dimension not allowed \n");
404 if(
fRvec==0)
Error(
"Initialize",
"Cannot initialize buffer fRvec \n");
408 if(
fAlpha==0)
Error(
"Initialize",
"Cannot initialize buffer fAlpha \n" );
411 if(
fMCvect==0)
Error(
"Initialize",
"Cannot initialize buffer fMCvect \n" );
436 htitle=TString(
"Edge Histogram No. ");
447 htitle=TString(
"Debug Histogram ");
479 BXTXT(
"*** TFoam::Initialize FINISHED!!! ***");
480 BX1I(
" nCalls",
fNCalls,
"Total number of function calls ");
481 BX1F(
" XPrime",
fPrime,
"Primary total integral ");
482 BX1F(
" XDiver",driver,
"Driver total integral ");
483 BX1F(
" mcResult",
fMCresult,
"Estimate of the true MC Integral ");
509 if(
fCells==0)
Error(
"InitCells",
"Cannot initialize CELLS \n" );
530 Error(
"CellFill",
"Too many cells\n");
537 cell->
Fill(Status, parent, 0, 0);
581 cell->
GetHcub(cellPosi,cellSize);
613 for(j=0; j<
fDim; j++)
614 xRand[j]= cellPosi[j] +
fAlpha[j]*(cellSize[j]);
621 for(k=0; k<
fDim; k++) {
632 if (ceSum[3]>wt) ceSum[3]=wt;
633 if (ceSum[4]<wt) ceSum[4]=wt;
635 nevEff = ceSum[0]*ceSum[0]/ceSum[1];
640 for(k=0; k<
fDim;k++){
648 for(k=0; k<
fDim; k++) {
650 rmax= cellPosi[k] +cellSize[k];
656 if( (rmin +1e-99 <rdiv) && (rdiv< rmax -1e-99)) {
658 xBest= (rdiv-cellPosi[k])/cellSize[k] ;
670 Double_t intTrue = ceSum[0]/(nevMC+0.000001);
676 if(kBest == -1)
Varedu(ceSum,kBest,xBest,yBest);
678 intDriv =
sqrt(ceSum[1]/nevMC) -intTrue;
679 intPrim =
sqrt(ceSum[1]/nevMC);
682 if(kBest == -1)
Carver(kBest,xBest,yBest);
683 intDriv =ceSum[4] -intTrue;
687 Error(
"Explore",
"Wrong fOptDrive = \n" );
701 for(parent = cell->
GetPare(); parent!=0; parent = parent->
GetPare()){
704 parent->
SetIntg( parIntg +intTrue -intOld );
705 parent->
SetDriv( parDriv +intDriv -driOld );
725 Double_t swIn,swOut,sswIn,sswOut,xLo,xUp;
731 for(
Int_t kProj=0; kProj<
fDim; kProj++) {
742 aswIn += ((
TH1D *)(*
fHistEdg)[kProj])->GetBinContent(jUp);
747 swOut = (swAll-aswIn)/nent;
748 sswIn =
sqrt(asswIn) /
sqrt(nent*(xUp-xLo)) *(xUp-xLo);
749 sswOut=
sqrt(sswAll-asswIn)/
sqrt(nent*(1.0-xUp+xLo)) *(1.0-xUp+xLo);
750 if( (sswIn+sswOut) < sswtBest) {
751 sswtBest = sswIn+sswOut;
753 sigmIn = sswIn -swIn;
754 sigmOut = sswOut-swOut;
767 if( ((iBin-0.5)/
fNBin > xMin) && ((iBin-0.5)/
fNBin < xMax) ){
768 ((
TH1D *)(*
fHistDbg)[kProj])->SetBinContent(iBin,sigmIn/(xMax-xMin));
770 ((
TH1D *)(*
fHistDbg)[kProj])->SetBinContent(iBin,sigmOut/(1-xMax+xMin));
778 if(iLo == 0) xBest=yBest;
779 if(iUp ==
fNBin) yBest=xBest;
785 if( (kBest >= fDim) || (kBest<0) )
Error(
"Varedu",
"Something wrong with kBest - kBest = %d dim = %d\n",kBest,fDim);
797 Double_t carve,carvTot,carvMax,carvOne,binMax,binTot;
798 Int_t jLow,jUp,iLow,iUp;
804 if(bins==0)
Error(
"Carver",
"Cannot initialize buffer Bins \n" );
811 for(kProj=0; kProj<
fDim; kProj++)
817 for(iBin=0; iBin<
fNBin;iBin++){
818 bins[iBin]= ((
TH1D *)(*
fHistEdg)[kProj])->GetBinContent(iBin+1);
827 for(iBin=0;iBin<
fNBin;iBin++){
828 carvTot = carvTot + (binMax-bins[iBin]);
837 for(iBin=0; iBin<
fNBin;iBin++) {
841 for(j=iBin; j>-1; j-- ) {
842 if(theBin< bins[j])
break;
849 for(j=iBin; j<
fNBin; j++) {
850 if(theBin< bins[j])
break;
856 carve = (iUp-iLow+1)*(binMax-theBin);
857 if( carve > carvOne) {
864 if( carvTot > carvMax) {
871 if(jLow == 0 ) xBest = yBest;
872 if(jUp == fNBin-1) yBest = xBest;
879 for(iBin=0; iBin<
fNBin; iBin++)
880 ((
TH1D *)(*fHistDbg)[kProj])->SetBinContent(iBin+1,binMax);
881 for(iBin=jLow; iBin<jUp+1; iBin++)
882 ((
TH1D *)(*fHistDbg)[kProj])->SetBinContent(iBin+1,yLevel);
884 if( (kBest >= fDim) || (kBest<0) )
Error(
"Carver",
"Something wrong with kBest - kBest = %d dim = %d\n",kBest,fDim);
914 if( (iCell<0) || (iCell>
fLastCe) )
Error(
"Grow",
"Wrong iCell \n");
923 std::cout<<
fDim<<std::flush;
925 std::cout<<
"."<<std::flush;
926 if( (
fLastCe%(100*kEcho))==0) std::cout<<
"|"<<
fLastCe<<std::endl<<std::flush;
930 if(
Divide( newCell )==0)
break;
933 std::cout<<std::endl<<std::flush;
950 if(
fCells[i]->GetStat() == 1 ) {
961 std::cout <<
"STOP in TFoam::PeekMax: not found iCell=" << iCell << std::endl;
985 if( kBest<0 || kBest>=
fDim )
Error(
"Divide",
"Wrong kBest \n");
1022 for(iCell=0; iCell<=
fLastCe; iCell++) {
1023 if (
fCells[iCell]->GetStat()==1) {
1030 if(
fNoAct != n)
Error(
"MakeActiveList",
"Wrong fNoAct \n" );
1031 if(
fPrime == 0.)
Error(
"MakeActiveList",
"Integrand function is zero \n" );
1037 for(iCell=0; iCell<
fNoAct; iCell++) {
1053 Info(
"ResetPseRan",
"Resetting random number generator \n");
1067 Error(
"SetRho",
"Bad function \n" );
1078 if (
fRho && dynamic_cast<FoamIntegrandFunction*>(
fRho) )
delete fRho;
1079 fRho=
new FoamIntegrandFunction(fun);
1081 Error(
"SetRho",
"Bad function \n" );
1095 Info(
"ResetRho",
"!!! Resetting distribution function !!!\n");
1130 paramArr[1]=(
Long_t)xRand;
1155 hit = lo + (
Int_t)( (hi-lo)*(random-flo)/(fhi-flo)+0.5);
1196 rCell->
GetHcub(cellPosi,cellSize);
1197 for(j=0; j<
fDim; j++)
1277 mcError = mcResult *mCerelat;
1322 Double_t mCerelat= mcError/mcResult;
1329 if(wtMax>0.0) mCeff=aveWt/wtMax;
1330 mcEf2 = sigma/aveWt;
1334 BXTXT(
"****************************************");
1335 BXTXT(
"****** TFoam::Finalize ******");
1336 BXTXT(
"****************************************");
1337 BX1I(
" NevGen",
fNevGen,
"Number of generated events in the MC generation ");
1338 BX1I(
" nCalls",
fNCalls,
"Total number of function calls ");
1339 BXTXT(
"----------------------------------------");
1340 BX1F(
" AveWt",aveWt,
"Average MC weight ");
1341 BX1F(
" WtMin",
fWtMin,
"Minimum MC weight (absolute) ");
1342 BX1F(
" WtMax",
fWtMax,
"Maximum MC weight (absolute) ");
1343 BXTXT(
"----------------------------------------");
1344 BX1F(
" XPrime",
fPrime,
"Primary total integral, R_prime ");
1345 BX1F(
" XDiver",driver,
"Driver total integral, R_loss ");
1346 BXTXT(
"----------------------------------------");
1347 BX2F(
" IntMC", mcResult, mcError,
"Result of the MC Integral");
1348 BX1F(
" mCerelat", mCerelat,
"Relative error of the MC integral ");
1349 BX1F(
" <w>/WtMax",mCeff,
"MC efficiency, acceptance rate");
1350 BX1F(
" Sigma/<w>",mcEf2,
"MC efficiency, variance/ave_wt");
1351 BX1F(
" WtMax",wtMax,
"WtMax(esp= 0.0005) ");
1352 BX1F(
" Sigma",sigma,
"variance of MC weight ");
1355 BX1F(
"<OveW>/<W>",avOve,
"Contrib. of events wt>MaxWtRej");
1375 if(
fDim==0)
Error(
"TFoam",
"SetInhiDiv: fDim=0 \n");
1381 if( ( 0<=iDim) && (iDim<
fDim)) {
1384 Error(
"SetInhiDiv:",
"Wrong iDim \n");
1405 if(
fDim<=0)
Error(
"SetXdivPRD",
"fDim=0 \n");
1406 if( len<1 )
Error(
"SetXdivPRD",
"len<1 \n");
1413 if( ( 0<=iDim) && (iDim<
fDim)) {
1416 Error(
"SetXdivPRD",
"Second allocation of XdivPRD not allowed \n");
1418 for(i=0; i<len; i++) {
1422 Error(
"SetXdivPRD",
"Wrong iDim \n");
1425 std::cout<<
" SetXdivPRD, idim= "<<iDim<<
" len= "<<len<<
" "<<std::endl;
1426 for(i=0; i<len; i++) {
1427 if (iDim <
fDim) std::cout<< (*
fXdivPRD[iDim])[i] <<
" ";
1429 std::cout<<std::endl;
1430 for(i=0; i<len; i++) std::cout<< xDiv[i] <<
" ";
1431 std::cout<<std::endl;
1447 errors = 0; warnings = 0;
1448 if (level==1) std::cout <<
"///////////////////////////// FOAM_Checks /////////////////////////////////" << std::endl;
1449 for(iCell=1; iCell<=
fLastCe; iCell++) {
1455 if (level==1)
Error(
"CheckAll",
"ERROR: Cell's no %ld has only one daughter \n",iCell);
1459 if (level==1)
Error(
"CheckAll",
"ERROR: Cell's no %ld has no daughter and is inactive \n",iCell);
1463 if (level==1)
Error(
"CheckAll",
"ERROR: Cell's no %ld has two daughters and is active \n",iCell);
1470 if (level==1)
Error(
"CheckAll",
"ERROR: Cell's no %ld parent not pointing to this cell\n ",iCell);
1476 if(cell != (cell->
GetDau0())->GetPare()) {
1478 if (level==1)
Error(
"CheckAll",
"ERROR: Cell's no %ld daughter 0 not pointing to this cell \n",iCell);
1482 if(cell != (cell->
GetDau1())->GetPare()) {
1484 if (level==1)
Error(
"CheckAll",
"ERROR: Cell's no %ld daughter 1 not pointing to this cell \n",iCell);
1490 for(iCell=0; iCell<=
fLastCe; iCell++) {
1494 if(level==1)
Warning(
"CheckAll",
"Warning: Cell no. %ld is active but empty \n", iCell);
1499 Info(
"CheckAll",
"Check has found %d errors and %d warnings \n",errors, warnings);
1502 Info(
"CheckAll",
"Check - found total %d errors \n",errors);
1513 for(iCell=0; iCell<=
fLastCe; iCell++) {
1514 std::cout<<
"Cell["<<iCell<<
"]={ ";
1516 std::cout<<std::endl;
1518 std::cout<<
"}"<<std::endl;
1533 outfile<<
"{" << std::endl;
1534 outfile<<
"cMap = new TCanvas(\"Map1\",\" Cell Map \",600,600);"<<std::endl;
1536 outfile<<
"TBox*a=new TBox();"<<std::endl;
1537 outfile<<
"a->SetFillStyle(0);"<<std::endl;
1538 outfile<<
"a->SetLineWidth(4);"<<std::endl;
1539 outfile<<
"a->SetLineColor(2);"<<std::endl;
1540 outfile<<
"a->DrawBox("<<offs<<
","<<offs<<
","<<(offs+lpag)<<
","<<(offs+lpag)<<
");"<<std::endl;
1542 outfile<<
"TText*t=new TText();"<<std::endl;
1543 outfile<<
"t->SetTextColor(4);"<<std::endl;
1545 outfile<<
"t->SetTextSize(0.025);"<<std::endl;
1547 outfile<<
"t->SetTextSize(0.015);"<<std::endl;
1549 outfile<<
"t->SetTextSize(0.008);"<<std::endl;
1551 outfile<<
"TBox*b=new TBox();"<<std::endl;
1552 outfile <<
"b->SetFillStyle(0);"<<std::endl;
1556 outfile <<
"// =========== Rectangular cells ==========="<< std::endl;
1557 for(iCell=1; iCell<=
fLastCe; iCell++) {
1558 if(
fCells[iCell]->GetStat() == 1) {
1560 x1 = offs+lpag*( cellPosi[0]); y1 = offs+lpag*( cellPosi[1]);
1561 x2 = offs+lpag*(cellPosi[0]+cellSize[0]); y2 = offs+lpag*(cellPosi[1]+cellSize[1]);
1564 outfile<<
"b->DrawBox("<<x1<<
","<<y1<<
","<<x2<<
","<<y2<<
");"<<std::endl;
1567 x = offs+lpag*(cellPosi[0]+0.5*cellSize[0]); y = offs+lpag*(cellPosi[1]+0.5*cellSize[1]);
1568 outfile<<
"t->DrawText("<<x<<
","<<y<<
","<<
"\""<<iCell<<
"\""<<
");"<<std::endl;
1572 outfile<<
"// ============== End Rectangles ==========="<< std::endl;
1576 outfile <<
"}" << std::endl;
1584 Info(
"LinkCells",
"VOID function for backward compatibility \n");
Int_t fNoAct
Lists of division values encoded in one vector per direction.
virtual void CheckAll(Int_t)
User utility, miscellaneous and debug.
virtual void RootPlot2dim(Char_t *)
Debugging tool which plots 2-dimensional cells as rectangles in C++ format readable for root...
virtual Int_t Fill(Double_t x)
Increment bin with abscissa X by 1.
#define BX2F(name, numb, err, text)
virtual void LinkCells(void)
virtual Double_t Rndm(Int_t i=0)
Machine independent random number generator.
virtual Long_t PeekMax()
Internal subprogram used by Initialize.
virtual void Delete(Option_t *option="")
Remove all objects from the array AND delete all heap based objects.
virtual void GetWtParams(Double_t, Double_t &, Double_t &, Double_t &)
May be called optionally after the MC run.
Int_t fOptPRD
[fDim] Flags for inhibiting cell division
void SetDau1(TFoamCell *Daug)
virtual void RndmArray(Int_t n, Float_t *array)
Return an array of n random numbers uniformly distributed in ]0,1].
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
virtual Double_t MCgenerate(Double_t *MCvect)
User subprogram which generates MC event and returns MC weight.
static const char * filename()
static Bool_t AddDirectoryStatus()
static function: cannot be inlined on Windows/NT
Short_t Min(Short_t a, Short_t b)
virtual void MakeEvent()
User subprogram.
virtual ~TFoam()
Default destructor std::cout<<" DESTRUCTOR entered "<<std::endl;.
An array of references to TObjects.
const TKDTreeBinning * bins
void GetMCeff(Double_t, Double_t &, Double_t &)
Calculates Efficiency= aveWt/wtLim for a given tolerance level epsilon<<1 using information stored in...
virtual void GenerCel2(TFoamCell *&)
Internal subprogram.
virtual void MakeActiveList()
Internal subrogram used by Initialize.
virtual void Grow()
Internal subrogram used by Initialize.
static void AddDirectory(Bool_t add=kTRUE)
Sets the flag controlling the automatic add of histograms in memory.
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...
void SetParamPtrs(void *paramArr, Int_t nparam=-1)
ParamArr is an array containing the function argument values.
virtual Double_t GetMCwt()
User may get weight MC weight using this method.
const char * Data() const
static const double x2[5]
virtual void ResetRho(TFoamIntegrand *Rho)
User may optionally reset the distribution using this method Usually it is done when FOAM object is r...
TObject * At(Int_t idx) const
TMethodCall * fMethodCall
Pointer to the user-defined integrand function/distribution.
This is the base class for the ROOT Random number generators.
virtual void PrintCells()
Prints geometry of ALL cells of the FOAM.
Double_t Sqr(Double_t x) const
#define BX1I(name, numb, text)
Method or function calling interface.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
virtual void Reset(Option_t *option="")
Reset.
void CalcVolume()
Calculates volume of the cell using size params which are calculated.
virtual void Finalize(Double_t &, Double_t &)
May be called optionally by the user after the MC run.
void SetXdiv(Double_t Xdiv)
virtual void MakeAlpha()
Internal subrogram used by Initialize.
void SetDriv(Double_t Driv)
virtual void GetMCvect(Double_t *)
User may get generated MC point/vector with help of this method.
virtual void SetInhiDiv(Int_t, Int_t)
This can be called before Initialize, after setting kDim It defines which variables are excluded in t...
virtual Double_t Density(Int_t ndim, Double_t *)=0
void SetIntg(Double_t Intg)
virtual void Initialize()
Basic initialization of FOAM invoked by the user.
virtual void SetRhoInt(void *Rho)
User may use this to set pointer to the global function (not descending from TFoamIntegrand) serving ...
1-D histogram with a double per channel (see TH1 documentation)}
void GetHcub(TFoamVect &, TFoamVect &) const
Provides size and position of the cell These parameter are calculated by analyzing information in all...
static const Double_t gVlow
void InitWithPrototype(TClass *cl, const char *method, const char *proto, Bool_t objectIsConst=kFALSE, ROOT::EFunctionMatchMode mode=ROOT::kConversionMatch)
Initialize the method invocation environment.
void Fill(Int_t, TFoamCell *, TFoamCell *, TFoamCell *)
Fills in certain data into newly allocated cell.
TFoamCell * GetDau0() const
virtual void Carver(Int_t &, Double_t &, Double_t &)
Internal subrogram used by Initialize.
static const double x1[5]
Double_t GetVolume() const
double func(double *x, double *p)
virtual void SetPseRan(TRandom *PseRan)
virtual void InitCells()
Internal subprogram used by Initialize.
void SetSerial(Int_t Serial)
Mother of all ROOT objects.
TFoamCell * GetPare() const
virtual Int_t CellFill(Int_t, TFoamCell *)
Internal subprogram used by Initialize.
virtual void GetIntNorm(Double_t &, Double_t &)
User subprogram.
virtual void Varedu(Double_t[], Int_t &, Double_t &, Double_t &)
Internal subrogram used by Initialize.
virtual void Explore(TFoamCell *Cell)
Internal subprogram used by Initialize.
void Execute(const char *, const char *, int *=0)
Execute method on this object with the given parameter string, e.g.
Short_t Max(Short_t a, Short_t b)
void SetPrim(Double_t Prim)
virtual void ResetPseRan(TRandom *PseRan)
User may optionally reset random number generator using this method Usually it is done when FOAM obje...
void Fill(Double_t)
Filling analyzed weight.
#define BX1F(name, numb, text)
std::vector< double > errors
float type_of_call hi(const int &, const int &)
virtual const char * Getp2f2funcname(void *) const
void Print(Option_t *option) const
Printout of the cell geometry parameters for the debug purpose.
virtual Double_t Eval(Double_t *)
Internal subprogram.
virtual Int_t Divide(TFoamCell *)
Internal subrogram used by Initialize.
static const Double_t gHigh
R__EXTERN TInterpreter * gCling
Int_t * fInhiDiv
[fDim] Dynamic Mask for cell division
void SetDau0(TFoamCell *Daug)
virtual void SetRho(TFoamIntegrand *Rho)
User may use this method to set the distribution object.
virtual void GetIntegMC(Double_t &, Double_t &)
User subprogram.
TFoamCell * GetDau1() const
TFoam()
Default constructor for streamer, user should not use it.
TRandom * fPseRan
ROOT's pointer to user-defined global distribution function.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.