Fixed a stupid inlining-mistake in the integrator-classes

This commit is contained in:
Bastian M. Wojek 2008-12-24 13:12:04 +00:00
parent ce9f98c37d
commit d95607cf9c
2 changed files with 30 additions and 24 deletions

View File

@ -5,12 +5,11 @@
Author: Bastian M. Wojek Author: Bastian M. Wojek
e-mail: bastian.wojek@psi.ch e-mail: bastian.wojek@psi.ch
2008/12/03 2008/12/24
***************************************************************************/ ***************************************************************************/
#include "TIntegrator.h" #include "TIntegrator.h"
#include "TMath.h"
using namespace std; using namespace std;
@ -27,26 +26,5 @@ TIntegrator::~TIntegrator(){
fFunc=0; fFunc=0;
} }
inline double TIntegrator::FuncAtXgsl(double x, void *obj)
{
return ((TIntegrator*)obj)->FuncAtX(x);
}
double TIntegrator::IntegrateFunc(double x1, double x2)
{
fFunc = &TIntegrator::FuncAtXgsl;
return fIntegrator->Integral(fFunc, (this), x1, x2);
}
inline double TIntBesselJ0Exp::FuncAtX(double x) const
{
return TMath::BesselJ0(TMath::TwoPi()*fPar[0]*x) * TMath::Exp(-fPar[1]*x);
}
inline double TIntSinGss::FuncAtX(double x) const
{
return TMath::Sin(TMath::TwoPi()*fPar[0]*x) * TMath::Exp(-0.5*fPar[1]*fPar[1]*x*x);
}

View File

@ -5,7 +5,7 @@
Author: Bastian M. Wojek Author: Bastian M. Wojek
e-mail: bastian.wojek@psi.ch e-mail: bastian.wojek@psi.ch
2008/12/03 2008/12/24
***************************************************************************/ ***************************************************************************/
@ -13,11 +13,14 @@
#define _TIntegrator_H_ #define _TIntegrator_H_
#include "Math/GSLIntegrator.h" #include "Math/GSLIntegrator.h"
#include "TMath.h"
#include<vector> #include<vector>
using namespace std; using namespace std;
// Integrator base class - the function to be integrated have to be implemented in a derived class
class TIntegrator { class TIntegrator {
public: public:
TIntegrator(); TIntegrator();
@ -35,6 +38,19 @@ class TIntegrator {
mutable double (*fFunc)(double, void *); mutable double (*fFunc)(double, void *);
}; };
inline double TIntegrator::FuncAtXgsl(double x, void *obj)
{
return ((TIntegrator*)obj)->FuncAtX(x);
}
inline double TIntegrator::IntegrateFunc(double x1, double x2)
{
fFunc = &TIntegrator::FuncAtXgsl;
return fIntegrator->Integral(fFunc, (this), x1, x2);
}
// To be integrated: Bessel function times Exponential
class TIntBesselJ0Exp : public TIntegrator { class TIntBesselJ0Exp : public TIntegrator {
public: public:
TIntBesselJ0Exp() {} TIntBesselJ0Exp() {}
@ -42,6 +58,13 @@ class TIntBesselJ0Exp : public TIntegrator {
double FuncAtX(double) const; double FuncAtX(double) const;
}; };
inline double TIntBesselJ0Exp::FuncAtX(double x) const
{
return TMath::BesselJ0(TMath::TwoPi()*fPar[0]*x) * TMath::Exp(-fPar[1]*x);
}
// To be integrated: Sine times Gaussian
class TIntSinGss : public TIntegrator { class TIntSinGss : public TIntegrator {
public: public:
TIntSinGss() {} TIntSinGss() {}
@ -49,4 +72,9 @@ class TIntSinGss : public TIntegrator {
double FuncAtX(double) const; double FuncAtX(double) const;
}; };
inline double TIntSinGss::FuncAtX(double x) const
{
return TMath::Sin(TMath::TwoPi()*fPar[0]*x) * TMath::Exp(-0.5*fPar[1]*fPar[1]*x*x);
}
#endif //_TIntegrator_H_ #endif //_TIntegrator_H_