Changeset 7606


Ignore:
Timestamp:
01/28/11 14:37:06 (9 years ago)
Author:
paulbarber
Message:

To compile in TRI2, moved declarations to top of relevant block.
Added empty GCI_marquardt.
Added matrix array routinnes.
Added Global and SPA files.

Location:
trunk/projects/slim-curve/src/main/c
Files:
2 added
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/projects/slim-curve/src/main/c/EcfSingle.c

    r7387 r7606  
    490490 
    491491/* This functions does the whole job */ 
     492 
     493int GCI_marquardt(float x[], float y[], int ndata, 
     494                                  noise_type noise, float sig[], 
     495                                  float param[], int paramfree[], int nparam, 
     496                                  restrain_type restrain, 
     497                                  void (*fitfunc)(float, float [], float *, float [], int), 
     498                                  float *fitted, float *residuals, 
     499                                  float **covar, float **alpha, float *chisq, 
     500                                  float chisq_delta, float chisq_percent, float **erraxes) 
     501{ 
     502        // Empty fn to allow compile in TRI2 
     503} 
     504 
    492505#define do_frees \ 
    493506        if (fnvals) free(fnvals);\ 
     
    907920        /* OK, now we've got our (possibly convolved) data, we can do the 
    908921           rest almost exactly as above. */ 
    909  
     922        { 
    910923        float alpha_weight[256]; //TODO establish maximum # bins and use elsewhere (#define) 
    911924        float beta_weight[256]; 
    912  
    913         *chisq = 0.0f; 
    914925        int q; 
    915926        float weight; 
    916         switch (noise) { 
     927 
     928        int i_free; 
     929        int j_free; 
     930        float dot_product; 
     931        float beta_sum; 
     932        float dy_dparam_k_i; 
     933        float *alpha_weight_ptr; 
     934        float *beta_weight_ptr; 
     935 
     936        *chisq = 0.0f; 
     937 
     938                switch (noise) { 
    917939            case NOISE_CONST: 
    918940            { 
     
    10091031                } 
    10101032                if (*chisq <= 0.0f) { 
    1011                     *chisq = 1.0e308f; // don't let chisq=0 through yfit being all -ve 
     1033                    *chisq = 1.0e38f; // don't let chisq=0 through yfit being all -ve 
    10121034                } 
    10131035                break; 
     
    10241046            return 0; 
    10251047        } 
    1026  
    1027         int i_free; 
    1028         int j_free; 
    1029         float dot_product; 
    1030         float beta_sum; 
    1031         float dy_dparam_k_i; 
    1032         float *alpha_weight_ptr; 
    1033         float *beta_weight_ptr; 
    10341048 
    10351049        i_free = 0; 
     
    10721086            } 
    10731087        } // i loop 
    1074  
     1088        } 
    10751089        return 0; 
    10761090} 
  • trunk/projects/slim-curve/src/main/c/EcfUtil.c

    r7594 r7606  
    206206 
    207207                                          ARRAY ALLOCATION ROUTINES 
    208  
     208http://www.nr.com/public-domain.html 
    209209*********************************************************************/ 
    210210 
     
    217217    int data_size = nrows * ncols * sizeof(float); 
    218218    unsigned char *raw = malloc(row_size + data_size); 
    219     if (NULL == raw) 
     219    float **row = (float **) raw; 
     220    float *data = (float *) (row + nrows); 
     221    int i; 
     222 
     223        if (NULL == raw) 
    220224    { 
    221225        return NULL; 
    222226    } 
    223     float **row = (float **) raw; 
    224     float *data = (float *) (row + nrows); 
    225     int i; 
    226     for (i = 0; i < nrows; ++i) 
     227 
     228        for (i = 0; i < nrows; ++i) 
    227229    { 
    228230        row[i] = data; 
     
    242244} 
    243245 
     246float ***GCI_ecf_matrix_array(long nblocks, long nrows, long ncols) 
     247/* allocate a float matrix array with range 
     248   marr[0..nblocks][0..nrows][0..ncols] */ 
     249{ 
     250        long i; 
     251        float ***marr; 
     252 
     253        /* allocate pointers to blocks */ 
     254        if ((marr = (float ***) malloc(nblocks * sizeof(float **))) == NULL) 
     255                return NULL; 
     256 
     257        /* allocate blocks (= pointers to rows) and set pointers to them */ 
     258        if ((marr[0] = (float **) malloc(nblocks * nrows * sizeof(float *))) 
     259                == NULL) { 
     260                free(marr); 
     261                return NULL; 
     262        } 
     263 
     264        for (i=1; i<nblocks; i++) 
     265                marr[i] = marr[i-1] + nrows; 
     266 
     267        /* allocate rows (= pointers to column entries) and set pointers to them */ 
     268        if ((marr[0][0] = (float *)malloc(nblocks * nrows * ncols * sizeof(float))) 
     269                == NULL) { 
     270                free(marr[0]); 
     271                free(marr); 
     272                return NULL; 
     273        } 
     274 
     275        /* This sneaky loop does the whole lot!  For note that 
     276           marr[block][row] = marr[0][block*nrows + row] */ 
     277        for (i=1; i < nblocks * nrows; i++) 
     278                marr[0][i] = marr[0][i-1] + ncols; 
     279 
     280        return marr; 
     281} 
     282 
     283 
     284void GCI_ecf_free_matrix_array(float ***marr) 
     285{ 
     286        if (marr != NULL) { 
     287                free(marr[0][0]); 
     288                free(marr[0]); 
     289                free(marr); 
     290        } 
     291} 
    244292 
    245293/******************************************************************** 
Note: See TracChangeset for help on using the changeset viewer.