14 #ifndef ROOT_Math_VirtualIntegrator
15 #define ROOT_Math_VirtualIntegrator
49 class VirtualIntegrator{
54 virtual ~VirtualIntegrator() {}
59 virtual void SetRelTolerance(
double ) = 0;
64 virtual void SetAbsTolerance(
double ) = 0;
69 virtual double Result()
const = 0;
74 virtual double Error()
const = 0;
79 virtual int Status()
const = 0;
85 virtual int NEval()
const {
return -1; }
105 class VirtualIntegratorOneDim :
public VirtualIntegrator {
110 virtual ~VirtualIntegratorOneDim() {}
113 virtual double Integral(
double a,
double b) = 0;
116 virtual void SetFunction(
const IGenFunction &) = 0;
119 virtual double Integral() = 0;
122 virtual double IntegralUp(
double a) = 0;
125 virtual double IntegralLow(
double b) = 0;
128 virtual double Integral(
const std::vector<double> & pts) = 0;
131 virtual double IntegralCauchy(
double a,
double b,
double c) = 0;
135 virtual ROOT::Math::IntegratorOneDimOptions Options()
const = 0;
138 virtual ROOT::Math::IntegrationOneDim::Type Type()
const {
139 return Options().IntegratorType();
144 virtual void SetOptions(
const ROOT::Math::IntegratorOneDimOptions & opt) {
145 SetRelTolerance(opt.RelTolerance() );
146 SetAbsTolerance(opt.AbsTolerance() );
166 class VirtualIntegratorMultiDim :
public VirtualIntegrator {
171 virtual ~VirtualIntegratorMultiDim() {}
174 virtual double Integral(
const double*,
const double*) = 0;
177 virtual void SetFunction(
const IMultiGenFunction &) = 0;
181 virtual ROOT::Math::IntegratorMultiDimOptions Options()
const = 0;
184 virtual ROOT::Math::IntegrationMultiDim::Type Type()
const {
185 return Options().IntegratorType();
189 virtual void SetOptions(
const ROOT::Math::IntegratorMultiDimOptions & opt) {
190 SetRelTolerance(opt.RelTolerance() );
191 SetAbsTolerance(opt.AbsTolerance() );