00001 #include <cmath>
00002 #include "constants.h"
00003 #include "message.h"
00004 #include "sou1d_gauss.h"
00005
00006 using namespace std;
00007
00008
00009
00011 bool CGaussianSource::Read(const parameterMap& s){
00012 mSigma = parameter::getD(s,"width",0.);
00013 mAmplitude = parameter::getD(s,"height",0.);
00014 mOffset = parameter::getD(s,"offset",0.);
00015 return CSourceFtnBase::Read(s)&&CObject1d::Read(s);
00016 }
00017
00019 bool CGaussianSource::Write(parameterMap& s){
00020 CSourceFtnBase::Write(s)&&CObject1d::Write(s);
00021 parameter::set(s,"width",mSigma);
00022 parameter::set(s,"height",mAmplitude);
00023 parameter::set(s,"offset",mOffset);
00024 return true;
00025 }
00026
00027
00028 void CGaussianSource::SetParameter(GaussianParameter ParameterName,double value)
00029 {
00030 switch(ParameterName)
00031 {
00032 case Amplitude:
00033 mAmplitude=value;
00034 break;
00035 case Sigma:
00036 mSigma=value;
00037 break;
00038 case Offset:
00039 mOffset=value;
00040 break;
00041 default:
00042 MESSAGE<<"How the #$^$#^ did you get to here?"<<ENDM_FATAL;
00043 }
00044 }
00045
00046
00047 double CGaussianSource::Function(double r)
00048 {
00049 double tmp;
00050 tmp = (r-mOffset)/mSigma;
00051
00052
00053 return mAmplitude/pow(mSigma*mSigma*4.0*PI,3.0/2.0)*exp(-tmp*tmp/4.0);
00054 }