struct MCintegrate { Int ndim,nfun,n; VecDoub ff,fferr; VecDoub xlo,xhi,x,xx,fn,sf,sferr; Doub vol; VecDoub (*funcsp)(const VecDoub &); VecDoub (*xmapp)(const VecDoub &); Bool (*inregionp)(const VecDoub &); Ran ran; MCintegrate(const VecDoub &xlow, const VecDoub &xhigh, VecDoub funcs(const VecDoub &), Bool inregion(const VecDoub &), VecDoub xmap(const VecDoub &), Int ranseed); void step(Int nstep); void calcanswers(); }; MCintegrate::MCintegrate(const VecDoub &xlow, const VecDoub &xhigh, VecDoub funcs(const VecDoub &), Bool inregion(const VecDoub &), VecDoub xmap(const VecDoub &), Int ranseed) : ndim(xlow.size()), n(0), xlo(xlow), xhi(xhigh), x(ndim), xx(ndim), funcsp(funcs), xmapp(xmap), inregionp(inregion), vol(1.), ran(ranseed) { if (xmapp) nfun = funcs(xmapp(xlo)).size(); else nfun = funcs(xlo).size(); ff.resize(nfun); fferr.resize(nfun); fn.resize(nfun); sf.assign(nfun,0.); sferr.assign(nfun,0.); for (Int j=0;j