Re: Voigt function fit using MPFIT [message #86118 is a reply to message #86115] |
Tue, 08 October 2013 11:14  |
Mats Löfdahl
Messages: 263 Registered: January 2012
|
Senior Member |
|
|
On 2013-10-08 03:39, Sreelakshmi S wrote:
> On Wednesday, October 2, 2013 4:42:55 PM UTC+5:30, Sreelakshmi S wrote:
>> Hi,
>>
>>
>>
>> I have a set of observed data of flux vs wavelength.I am trying MPFIT to fit a voigt function. I defined the function as
>>
>>
>>
>> FUNCTION fit,p,X=x2,Y=nflux2
>>
>>
>>
>> model=double((voigt(p[0],p[1])*1e-13)/(p[3]*sqrt(!pi)))
>>
>> return,(Y-model)/err
>>
>>
>>
>> END
>>
>>
>>
>> But when I run this, the following errors are coming
>>
>>
>>
>> FUNCTION fit,x2=X,nflux2=Y,p
>>
>> ^
>>
>> % Programs can't be compiled from single statement mode.
>>
>>
>>
>>
>>
>> return,(Y-model)/1
>>
>> ^
>>
>> % Syntax error.
>>
>>
>>
>> Why is this happening?
>
> Hi,
> Thank you for your inputs.
> I have modified the function as
>
> FUNCTION voigtfit,p,x,y,er
>
> lambda1=1025.7230
> gamma1=1.897e08
> f1=2.638e-2
>
> av1=double((gamma1*lambda1*1e-13)/(4*!pi*p[0]))
> u1=(y/p[0])-(p[1]/p[0])
> dop1=double(p[0]/lambda1)
>
> phi1=double((voigt(av1,u1)*1e-13)/(dop1*sqrt(!pi)))
> tau1=double(2.654e-02*p[2]*f1*phi1)
> model1=double(exp(-tau1))
> return,(y-model1)/er
> END
>
> and I am calling this function from IDL as below
>
> fac={X:vel,Y:nflux2,ERR:dy}
> result=double(mpfit('voigtfit',p,functargs=fac))
>
> Now when I run this an error comes
> % MPFIT: Error detected while calling voigtfit:
> % MPFIT:Keyword parameter not allowed in call.
> % MPFIT: Error condition detected. Returning to main level.
>
> Which is the keyword here? What is this error?
There are instructions at the beginning of mpfit.pro. They say how the
function voightfit (or myfunct, as it is called there) should be
defined. It should have a single non-keyword parameter only, the
parameter list P. All other parameters must be keyword parameters,
corresponding to the parameter list in functargs.
So you need something like
FUNCTION voigtfit,p,x=x,y=y,er=er
The reason you get a "keyword parameter not allowed in call" is that
mpfit tries to call voigtfit with the keyword parameters you specified
by defining fac the way you did and giving it to mpfit through the
functargs keyword.
|
|
|