Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Data Structures | File List | Namespace Members | Data Fields | Globals | Related Pages

fittingRoutines.h

00001 #ifndef FITTING_ROUTINES_H
00002 #define FITTING_ROUTINES_H
00003 
00004 #include "histogram.h"
00005 #define NCHIPS 16
00006 #define NCOLS 18
00007 #define NROWS 160
00008 #define NPIXELS (NCHIPS*NCOLS*NROWS)
00009 #define MAXBINS (HISTOGRAM_BIN_MAX)
00010 
00011 typedef struct { 
00012     float mu, sigma, a0, sigmaInv;
00013 } GaussianCurve;
00014 
00015 typedef struct {
00016     unsigned int pixelId, tPixel, iterations;
00017     float chi2;
00018     GaussianCurve s;
00019 } PixelFit;
00020 
00021 typedef struct {
00022     float *x, *y, *w;
00023     int n;
00024 } FitData;
00025 
00026 #if 0
00027 /* jsv. in a perfect world */
00028 typedef struct {
00029     GaussianCurve s;
00030     float chi2;
00031 } PixelFit;
00032 #endif
00033 
00034 typedef struct {
00035     float dt, tBegin, tFinal;
00036 } ManualSeek;
00037 
00038 typedef struct {
00039     float deltaMu, deltaSigma; /* user provides initial deltaMu and deltaSigma */
00040     float muEpsilon, sigmaEpsilon; /* user provides convergence criterion */
00041     float sigmaMin; /* sigma values below sigmaMin are rounded to this value */
00042     float concavitySmallness; /* determines smallness criterion for 2nd derivative */
00043     int nIters, maxIters, converge, muConverge, sigmaConverge;
00044     int ndf; /* number of degrees of freedom */
00045     float chi2; /* final result for chi2 */
00046     float chi2CutOff; /* if we get chi2 greater than this value, abandon calculation */
00047     float muCutOff, sigmaCutOff; /* if we get values greater than these, abandon */
00048     void * curve; /* additional information about the curve */
00049 /* options */
00050     int extraIter; /* 1 = after convergence, iterate once more for good measure */
00051     float (*findMinSigma)(FitData *pfd, GaussianCurve *ps, void *pFit);
00052     float (*findMinMu)(FitData *pfd, GaussianCurve *ps, void *pFit);
00053     float (*chiSquared)(FitData *pfd,GaussianCurve *s);
00054     int (*sGuess)(FitData *pfd,GaussianCurve *sParams,void *vpfit);
00055     int (*fitSCurve)(FitData *pfd, void *vpfit);
00056     ManualSeek manualSeekMu, manualSeekSigma;
00057 } Fit;
00058 
00059 typedef struct {
00060     float x, y;
00061  } Point;
00062 
00063 /* function declarations */
00064 
00065 void loadFitArrayX(MDAT32 val[], UINT32 nBins);
00066 void loadFitArrayY(UINT32 binSize, void *baseAddr, UINT32 delta, UINT32 nBins);
00067 
00068 void setSigma(GaussianCurve *ps,float sigma);
00069 float errf_ext(float x, GaussianCurve *psp);
00070 float *log_ext(float x, GaussianCurve *psp);
00071 float abs_ext(float x);
00072 int sGuess(FitData *pfd, GaussianCurve *pSParams, void *vpfit);
00073 float nextAbscissa(Point *pt);
00074 float parabolicAbscissa(Point *pt);
00075 int fitSCurveAim(FitData *pfd, void *vpfit);
00076 int fitSCurveCrawl(FitData *pfd, void *vpfit);
00077 int fitSCurveParabolicAlgorithm(FitData *pfd, void *vpfit);
00078 int fitSCurveBruteForce(FitData *pfd, void *vpfit);
00079 int defaultFit(Fit *pfit);
00080 PixelFit *fitModule(void *histBase,int nBins);
00081 float chiSquared(FitData *pfd,GaussianCurve *s);
00082 float logLikelihood(FitData *pfd, GaussianCurve *s);
00083 int extractGoodData(FitData *pfdi,FitData *pfdo);
00084 
00085 extern far float data_weight[];
00086 extern far float data_errf[];
00087 extern far float data_logx[];
00088 extern far float inverse_lut_interval;
00089 extern far float inverse_weight_lut_interval;
00090 
00091 #define WEIGHT_LUT_LENGTH 1001
00092 #define LUT_WIDTH 3500
00093 #define LUT_LENGTH (2*LUT_WIDTH+1)
00094 
00095 typedef struct {
00096     int id, nBins, *binCount;
00097     float xStart, xFinal, dx;
00098     void (*fill)(void *pHist,float y);
00099     void (*close)(void *pHist);
00100 } Hist1F;
00101 
00102 Hist1F *hist1FOpen(int nBins,float xStart,float xFinal);
00103 
00104 float manualFindMinSigma(FitData *pfd, GaussianCurve *ps, void *pFit);
00105 float manualFindMinMu(FitData *pfd, GaussianCurve *ps, void *pFit);
00106 
00107 #endif

Generated on Fri Dec 16 19:38:10 2005 for SCT DAQ/DCS Software - C++ by doxygen 1.3.5