Changeset 7803


Ignore:
Timestamp:
11/08/11 10:47:14 (8 years ago)
Author:
paulbarber
Message:

Fixed some memory leaks and some compile warnings.

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

Legend:

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

    r7781 r7803  
    467467                default: 
    468468                        dbgprintf(1, "global_exps_instr: please update me!\n"); 
     469                        GCI_ecf_free_matrix(covar); 
     470                        GCI_ecf_free_matrix(alpha); 
     471                        free(scaled_instr); 
     472                        free(exp_conv[0]); 
    469473                        return -1; 
    470474        } 
     
    599603        ret = GCI_triple_integral_fitting_engine(xincr, summed, data_start, fit_end, 
    600604                                                                                        instr, ninstr, noise, sig, 
    601                                                                                         &Z, &A, &tau, NULL, NULL, NULL, 1.5*(fit_end-fit_start-3)); 
     605                                                                                        &Z, &A, &tau, NULL, NULL, NULL, (float)1.5*(fit_end-fit_start-3)); 
    602606 
    603607        dbgprintf(3, "In est_globals_instr, triple integral ret = %d\n", ret); 
     
    738742                                                          gparam, paramfree, nparam, restrain, fitfunc, 
    739743                                                          fitted, residuals, chisq_global, covar, alpha, 
    740                                                           NULL, 1.5*(fit_end-fit_start-nparamfree), chisq_delta, 0); 
     744                                                          NULL, (float)1.5*(fit_end-fit_start-nparamfree), chisq_delta, 0); 
    741745 
    742746        dbgprintf(3, "In est_globals_instr, marquardt ret = %d\n", ret); 
     
    801805                ret = GCI_triple_integral_fitting_engine(xincr, trans[i], data_start, fit_end, 
    802806                                                                                        instr, ninstr, noise, sig, 
    803                                                                                         &Z, &A, &tau, NULL, NULL, NULL, 1.5*(fit_end-fit_start-3)); 
     807                                                                                        &Z, &A, &tau, NULL, NULL, NULL, (float)1.5*(fit_end-fit_start-3)); 
    804808                if (ret < 0) { 
    805809                        Z = 0; 
     
    17741778                                } 
    17751779                        } 
    1776                         if (*chisq <= 0.0) *chisq = 1.0e308; // don't let chisq=0 through yfit being all -ve 
     1780                        if (*chisq <= 0.0) *chisq = 1.0e38; // don't let chisq=0 through yfit being all -ve 
    17771781                        break; 
    17781782 
     
    18881892                                } 
    18891893                        } 
    1890                         if (*chisq <= 0.0) *chisq = 1.0e308; // don't let chisq=0 through yfit being all -ve 
     1894                        if (*chisq <= 0.0) *chisq = 1.0e38; // don't let chisq=0 through yfit being all -ve 
    18911895                        break; 
    18921896 
     
    20482052                k++; 
    20492053                if (k > MAXITERS) { 
     2054                        free(ochisq_trans); 
    20502055                        return -2; 
    20512056                } 
     
    27302735        for (i=0, instrsum=0; i<ninstr; i++) 
    27312736                instrsum += instr[i]; 
    2732         if (instrsum == 0) return -6; 
     2737        if (instrsum == 0) { 
     2738                GCI_ecf_free_matrix(covar); 
     2739                GCI_ecf_free_matrix(alpha); 
     2740                free(scaled_instr); 
     2741                return -6; 
     2742        } 
     2743         
    27332744        for (i=0; i<ninstr; i++) 
    27342745                scaled_instr[i] = instr[i] / instrsum; 
     
    27492760        if (ret < 0) { 
    27502761                dbgprintf(1, "Fit failed, ret = %d\n", ret); 
     2762                GCI_ecf_free_matrix(covar); 
     2763                GCI_ecf_free_matrix(alpha); 
     2764                free(scaled_instr); 
    27512765                return -10 + ret; 
    27522766        } 
     
    27682782 
    27692783        *df = ntrans * ((fit_end - fit_start) - mlocal) - mglobal; 
     2784 
     2785        GCI_ecf_free_matrix(covar); 
     2786        GCI_ecf_free_matrix(alpha); 
     2787        free(scaled_instr); 
    27702788 
    27712789        return ret; 
     
    28632881                k++; 
    28642882                if (k > MAXITERS) { 
     2883                        free(ochisq_trans); 
    28652884                        return -2; 
    28662885                } 
  • trunk/projects/slim-curve/src/main/c/EcfSingle.c

    r7781 r7803  
    300300        } 
    301301 
     302        free(fitted_preconv); 
     303         
    302304        // OK, so now fitted contains our data for the timeslice of interest. 
    303305        // We can calculate a chisq value and plot the graph, along with 
     
    15821584                                        *chisq += 2.0*(yfit[i]-y[i]) - 2.0*y[i]*log(yfit[i]/y[i]); // was dy[i] * dy[i] * sig2i; 
    15831585                        } 
    1584                         if (*chisq <= 0.0) *chisq = 1.0e308; // don't let chisq=0 through yfit being all -ve 
     1586                        if (*chisq <= 0.0) *chisq = 1.0e38; // don't let chisq=0 through yfit being all -ve 
    15851587                break; 
    15861588 
     
    18221824                        dy[i] = y[i] - yfit[i]; 
    18231825                } 
    1824                 if (*chisq <= 0.0) *chisq = 1.0e308; // don't let chisq=0 through yfit being all -ve 
     1826                if (*chisq <= 0.0) *chisq = 1.0e38; // don't let chisq=0 through yfit being all -ve 
    18251827                break; 
    18261828 
  • trunk/projects/slim-curve/src/main/c/EcfUtil.c

    r7781 r7803  
    143143        returnValue = GCI_solve_Gaussian(work, n, identity[j]); 
    144144        if (returnValue < 0) { 
     145                        GCI_ecf_free_matrix(identity); 
     146                        GCI_ecf_free_matrix(work); 
    145147            return returnValue; 
    146148        } 
  • trunk/projects/slim-curve/src/main/c/GCI_Phasor.c

    r7781 r7803  
    2020#include "GCI_Phasor.h" 
    2121#include <math.h> 
     22#include <string.h> 
    2223 
    2324#ifndef NULL 
     
    6768 
    6869        // rep frequency, lets use the period of the measurement, but we can stay in the units of bins 
    69         w = 2.0*3.1415926535897932384626433832795028841971/(float)nBins; //2.0*PI/(float)nBins; 
     70        w = (float)2.0*(float)3.1415926535897932384626433832795028841971/(float)nBins; //2.0*PI/(float)nBins; 
    7071         
    7172        // integral over data 
     
    7677    // Take care that values correspond to the centre of the bin, hence i+0.5 
    7778        for (i=0, u=0.0; i<nBins; i++)  
    78                 u += (data[i]-bg) * cos(w*((float)i+0.5)); 
     79                u += (data[i]-bg) * (float)cos(w*((float)i+0.5)); 
    7980        u /= I; 
    8081 
    8182        for (i=0, v=0.0; i<nBins; i++)  
    82                 v += (data[i]-bg) * sin(w*((float)i+0.5)); 
     83                v += (data[i]-bg) * (float)sin(w*((float)i+0.5)); 
    8384        v /= I; 
    8485 
    8586        // taus, convert now to real time with xincr 
    8687        *taup = (xincr/w) * (v/u); 
    87         *taum = (xincr/w) * sqrt(1.0/(u*u + v*v) - 1.0); 
     88        *taum = (xincr/w) * (float)sqrt(1.0/(u*u + v*v) - 1.0); 
    8889 
    89         *tau = ((*taup) + (*taum))/2.0; 
     90        *tau = ((*taup) + (*taum))/(float)2.0; 
    9091 
    9192        *U = u; 
     
    101102        // integral over nominal fit data 
    102103        for (Ifit=0.0, i=fit_start; i<fit_end; i++)  
    103                 Ifit += exp(-(i-fit_start)*xincr/(*tau)); 
     104                Ifit += (float)exp(-(i-fit_start)*xincr/(*tau)); 
    104105 
    105106        // Estimate A 
     
    108109        // Calculate fit 
    109110        for (i=fit_start; i<fit_end; i++) 
    110                 fitted[i] = bg + A * exp(-(i-fit_start)*xincr/(*tau)); 
     111                fitted[i] = bg + A * (float)exp(-(i-fit_start)*xincr/(*tau)); 
    111112 
    112113        // OK, so now fitted contains our data for the timeslice of interest. 
     
    132133                                residuals[i] = res; 
    133134                        /* don't let variance drop below 1 */ 
    134                         sigma2 = (fitted[i] > 1 ? 1.0/fitted[i] : 1.0); 
     135                        sigma2 = (fitted[i] > 1 ? (float)1.0/fitted[i] : (float)1.0); 
    135136                        chisq_local += res * res * sigma2; 
    136137                } 
Note: See TracChangeset for help on using the changeset viewer.