diff --git a/ChangeLog b/ChangeLog index 4bbe7137..7c19f899 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,6 +4,7 @@ changes since 0.17.0 =================================== +NEW 2016-04-22 Added the theory function muMinusExpTF for mu minus fits NEW 2016-02-23 It is now possible to export the averaged data/Fourier changes since 0.16.0 diff --git a/src/classes/PTheory.cpp b/src/classes/PTheory.cpp index 30c0003c..3c093b3a 100644 --- a/src/classes/PTheory.cpp +++ b/src/classes/PTheory.cpp @@ -507,6 +507,10 @@ Double_t PTheory::Func(register Double_t t, const PDoubleVector& paramValues, co return Polynom(t, paramValues, funcValues) * fMul->Func(t, paramValues, funcValues) + fAdd->Func(t, paramValues, funcValues); break; + case THEORY_MU_MINUS_EXP: + return MuMinusExpTF(t, paramValues, funcValues) * fMul->Func(t, paramValues, funcValues) + + fAdd->Func(t, paramValues, funcValues); + break; case THEORY_USER_FCN: return UserFcn(t, paramValues, funcValues) * fMul->Func(t, paramValues, funcValues) + fAdd->Func(t, paramValues, funcValues); @@ -599,6 +603,9 @@ Double_t PTheory::Func(register Double_t t, const PDoubleVector& paramValues, co case THEORY_DYNAMIC_TF_NK: return DynamicNKTF (t, paramValues, funcValues) * fMul->Func(t, paramValues, funcValues); break; + case THEORY_MU_MINUS_EXP: + return MuMinusExpTF(t, paramValues, funcValues) * fMul->Func(t, paramValues, funcValues); + break; case THEORY_POLYNOM: return Polynom(t, paramValues, funcValues) * fMul->Func(t, paramValues, funcValues); break; @@ -695,6 +702,9 @@ Double_t PTheory::Func(register Double_t t, const PDoubleVector& paramValues, co case THEORY_DYNAMIC_TF_NK: return DynamicNKTF (t, paramValues, funcValues) + fAdd->Func(t, paramValues, funcValues); break; + case THEORY_MU_MINUS_EXP: + return MuMinusExpTF(t, paramValues, funcValues) + fAdd->Func(t, paramValues, funcValues); + break; case THEORY_POLYNOM: return Polynom(t, paramValues, funcValues) + fAdd->Func(t, paramValues, funcValues); break; @@ -789,6 +799,9 @@ Double_t PTheory::Func(register Double_t t, const PDoubleVector& paramValues, co case THEORY_DYNAMIC_TF_NK: return DynamicNKTF(t, paramValues, funcValues); break; + case THEORY_MU_MINUS_EXP: + return MuMinusExpTF(t, paramValues, funcValues); + break; case THEORY_POLYNOM: return Polynom(t, paramValues, funcValues); break; @@ -2942,6 +2955,46 @@ Double_t PTheory::GetDynKTLFValue(const Double_t t) const return fDynLFFuncValue[idx]+df; } +//-------------------------------------------------------------------------- +/** + *

theory function: MuMinusExpTF + * + * \f[ = N_0 \exp(-t/tau) [1 + A \exp(-\lambda t) \cos(2\pi\nu t + \phi)] \f] + * + * meaning of paramValues: \f$t_{\rm shift}\f$, \f$N_0\f$, \f$\tau\f$, \f$A\f$, \f$\lambda\f$, \f$\phi\f$, \f$\nu\f$ + * + * return: function value + * + * \param t time in \f$(\mu\mathrm{s})\f$, or x-axis value for non-muSR fit + * \param paramValues parameter values + * \param funcValues vector with the functions (i.e. functions of the parameters) + */ +Double_t PTheory::MuMinusExpTF(register Double_t t, const PDoubleVector& paramValues, const PDoubleVector& funcValues) const +{ + // expected parameters: N0 tau A lambda phase frequency [tshift] + + Double_t val[7]; + + assert(fParamNo.size() <= 7); + + // check if FUNCTIONS are used + for (UInt_t i=0; i