80 lines
3.6 KiB
TeX
80 lines
3.6 KiB
TeX
\subsection{Fit and Center}
|
|
This is a fit routine for SICS. It takes a scan and tries to find a peak and
|
|
its position. Trials showed that fitting a gauss function is not robust
|
|
enough for this facility which has to cope with bizarre peak shapes, half
|
|
finished measurements and the like. The algorithm choosen tries to find the
|
|
center of gravity of the peak. It does this by searching for the maximum
|
|
point in the diagram first. Then the points where the peak is below
|
|
half maximum are searched for either side of the peak. Within these
|
|
limits the COG is calculated. When this is done fit will print some
|
|
info about the peak.
|
|
|
|
Center will the drive the scan variable to the COG of the peak.
|
|
|
|
The interface to this simple facility is simple:
|
|
|
|
\begin{flushleft} \small
|
|
\begin{minipage}{\linewidth} \label{scrap1}
|
|
$\langle$fitinter {\footnotesize ?}$\rangle\equiv$
|
|
\vspace{-1ex}
|
|
\begin{list}{}{} \item
|
|
\mbox{}\verb@@\\
|
|
\mbox{}\verb@ typedef struct __FitCenter *pFit;@\\
|
|
\mbox{}\verb@@\\
|
|
\mbox{}\verb@/*--------------------------------------------------------------------------*/@\\
|
|
\mbox{}\verb@ pFit CreateFitCenter(pScanData pScan);@\\
|
|
\mbox{}\verb@ void DeleteFitCenter(void *pData);@\\
|
|
\mbox{}\verb@/*-------------------------------------------------------------------------*/@\\
|
|
\mbox{}\verb@ int CalculateFit(pFit self);@\\
|
|
\mbox{}\verb@ /* @\\
|
|
\mbox{}\verb@ CalcluateFit returns: -1 when left FWHM could not be found@\\
|
|
\mbox{}\verb@ -2 when right FWHM could not be found@\\
|
|
\mbox{}\verb@ 1 on success@\\
|
|
\mbox{}\verb@ */@\\
|
|
\mbox{}\verb@ int CalculateFitFromData(pFit self, float fAxis[], long lSum[], @\\
|
|
\mbox{}\verb@ int iLen);@\\
|
|
\mbox{}\verb@ void GetFitResults(pFit self, float *fNewCenter, float *fStdDev,@\\
|
|
\mbox{}\verb@ float *FWHM, float *fMax);@\\
|
|
\mbox{}\verb@ int DriveCenter(pFit self, SConnection *pCon, SicsInterp *pSics);@\\
|
|
\mbox{}\verb@/*-------------------------------------------------------------------------*/@\\
|
|
\mbox{}\verb@ int FitFactory(SConnection *pCon,SicsInterp *pSics, void *pData,@\\
|
|
\mbox{}\verb@ int argc, char *argv[]);@\\
|
|
\mbox{}\verb@ int FitWrapper(SConnection *pCon,SicsInterp *pSics, void *pData,@\\
|
|
\mbox{}\verb@ int argc, char *argv[]);@\\
|
|
\mbox{}\verb@ int CenterWrapper(SConnection *pCon,SicsInterp *pSics, void *pData,@\\
|
|
\mbox{}\verb@ int argc, char *argv[]);@\\
|
|
\mbox{}\verb@@$\diamond$
|
|
\end{list}
|
|
\vspace{-1ex}
|
|
\footnotesize\addtolength{\baselineskip}{-1ex}
|
|
\begin{list}{}{\setlength{\itemsep}{-\parsep}\setlength{\itemindent}{-\leftmargin}}
|
|
\item Macro referenced in scrap ?.
|
|
\end{list}
|
|
\end{minipage}\\[4ex]
|
|
\end{flushleft}
|
|
\begin{flushleft} \small
|
|
\begin{minipage}{\linewidth} \label{scrap2}
|
|
\verb@"fitcenter.h"@ {\footnotesize ? }$\equiv$
|
|
\vspace{-1ex}
|
|
\begin{list}{}{} \item
|
|
\mbox{}\verb@@\\
|
|
\mbox{}\verb@/*---------------------------------------------------------------------------@\\
|
|
\mbox{}\verb@ F I T C E N T E R@\\
|
|
\mbox{}\verb@@\\
|
|
\mbox{}\verb@ A simple peak finding and center of gravity determination facility for@\\
|
|
\mbox{}\verb@ SICS.@\\
|
|
\mbox{}\verb@@\\
|
|
\mbox{}\verb@ copyright: see copyright.h@\\
|
|
\mbox{}\verb@@\\
|
|
\mbox{}\verb@ Mark Koennecke, October 1997@\\
|
|
\mbox{}\verb@----------------------------------------------------------------------------*/@\\
|
|
\mbox{}\verb@#ifndef SICSFITCENTER@\\
|
|
\mbox{}\verb@#define SICSFITCENTER@\\
|
|
\mbox{}\verb@@$\langle$fitinter {\footnotesize ?}$\rangle$\verb@@\\
|
|
\mbox{}\verb@#endif@\\
|
|
\mbox{}\verb@@$\diamond$
|
|
\end{list}
|
|
\vspace{-2ex}
|
|
\end{minipage}\\[4ex]
|
|
\end{flushleft}
|