Custom Fitting Procedure

Hi!

I have a question about a custom fitting procedure I am writing. If one uses the built-in fitting, when there is an issue during fit, like parameters could be linearly dependent or a parameter cannot be held fixed and constrained at the same time, one gets some note about these errors. But when using custom fitting with catching any errors by
V_fitError
, etc. these two errors (and maybe other) are cought by a rather general fit error code, which is then not very useful to understand what the issue is during a fit.

So I would like to know how to use (mimic) the built-in fitting error warnings (like the two mentioned) in a custom fitting procedure? Are there any codes available that IGOR is using to check on linear dependency, etc. which I could use too in my custom fitting procedure?


Thanks for any help.

Gregor
V_fitError doesn't catch the sorts of errors you are talking about. Since those errors stop the fit before it gets going, they are reported in the usual way. To catch them, so that you can do something friendlier than aborting your procedure, use a try-catch block around your call to FuncFit.

John Weeks
WaveMetrics, Inc.
support@wavemetrics.com
Hi John!

First of all thanks for the reply. Well, in fact I am already using a try catch around FuncFit, here is part of the code I am using now (I have omitted some of the history printing part of the code and some parameters of FuncFit for clarity, because it is a bit long line)

		try
			FuncFit/M=2/NTHR=0/Q/H=fixfit FitProc para_fit_value  data_counts /X=data_be /W=data_err /I=1 /D=data_fit /R=data_res /E=para_epsilon /C=limits; AbortOnRTE
			AbortOnValue V_FitError, 1
		catch
			sText = "Error during curve FIT:"
			if (V_AbortCode == -4)
				Variable CFerror = GetRTError(1)
				sText = GetErrMessage(CFerror)
			elseif (V_AbortCode == 1)
				if ((V_FitError & kAnyError) != 0)
					switch (V_FitQuitReason)
						case 1:
							sText = "Iteration Limit Reached"
							break
						case 2:
							sText = "User Stopped the Fit"
							break
						case 3:
							sText = "Limit of Passes Without Chi-Square Decreasing Reached"
							break
					endswitch
				endif			
				if ((V_FitError & kSingularMatrix) != 0)
					sText = "Singular Matrix encountered"
				endif
				if ((V_FitError & kOutOfMemory) != 0)
					sText = "Out of memory"
				endif
				if ((V_FitError & kNANorINF) != 0)
					sText = "Fit function returned NaN or INF"
				endif
				if ((V_FitError & kFitFuncStop) != 0)
					sText = "Fit function requested stop"
				endif
				if ((V_FitError & kReentrant) != 0)
					sText = "Reentrant curve fitting"
				endif
			endif
			return 1
		endtry


The problem is, that the special cases of (nearly) linearly dependent parameters, or parameters being held and constrained (maybe also other) are being caught just as "Error during curve FIT" (see above code), but none of the special purpose variables (V_FitError, V_FitQuitReason, V_AbortCode) are set in a way that these cases could be recognized.
So my question is how can I recognize these special cases of fit errors using a code like the one above?

Thanks again!

Gregor

--
Gregor K
ALOISA Beamline
Elettra Synchrotron