Changeset 7669


Ignore:
Timestamp:
03/22/11 21:13:58 (9 years ago)
Author:
aivar
Message:

Don't clobber fixed parameters when doing an RLD to be followed by an LMA.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/projects/curve-fitter/src/main/java/loci/curvefitter/SLIMCurveFitter.java

    r7668 r7669  
    161161        // portion to be fitted and specify an initial x. 
    162162        //TODO ARG August use initial X of 0. 
     163 
     164        boolean[] free = m_free.clone(); 
     165        if (AlgorithmType.RLD.equals(m_algorithmType)) { 
     166            // pure RLD (versus RLD followed by LMA) has no way to fix 
     167            // parameters 
     168            for (int i = 0; i < free.length; ++i) { 
     169                free[i] = true; 
     170            } 
     171        } 
    163172 
    164173        DoubleByReference chiSquare = new DoubleByReference(); 
     
    197206                        chiSquareTarget 
    198207                        ); 
    199                // set outgoing parameters 
     208                // set outgoing parameters, unless they are fixed 
    200209                data.getParams()[0] = chiSquare.getValue(); 
    201                 data.getParams()[1] = z.getValue(); 
    202                 data.getParams()[2] = a.getValue(); 
    203                 data.getParams()[3] = tau.getValue(); 
     210                if (free[0]) { 
     211                    data.getParams()[1] = z.getValue(); 
     212                } 
     213                if (free[1]) { 
     214                    data.getParams()[2] = a.getValue(); 
     215                } 
     216                if (free[2]) { 
     217                    data.getParams()[3] = tau.getValue(); 
     218                } 
    204219            } 
    205220        } 
     
    212227                    nInstrumentResponse = m_instrumentResponse.length; 
    213228                } 
    214                 double[] params = new double[data.getParams().length]; 
     229                for (int i = 0; i < m_free.length; ++i) { 
     230                    if (!m_free[i]) { 
     231                        System.out.println("fix " + i + " at " + data.getParams()[i]); 
     232                    } 
     233                } 
    215234                returnValue = s_library.LMA_fit( 
    216235                        m_xInc, 
     
    228247                        chiSquareTarget 
    229248                        ); 
     249                for (int i = 0; i < m_free.length; ++i) { 
     250                    if (!m_free[i]) { 
     251                        System.out.println("fixed " + i + " result " + data.getParams()[i]); 
     252                    } 
     253                } 
    230254            } 
    231255        } 
Note: See TracChangeset for help on using the changeset viewer.