Changeset 7024


Ignore:
Timestamp:
10/04/10 18:51:55 (9 years ago)
Author:
aivar
Message:

TIdy up code.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/maven/projects/slim-plugin/src/main/java/loci/SLIMProcessor.java

    r7017 r7024  
    6565import loci.curvefitter.JaolhoCurveFitter; 
    6666import loci.curvefitter.MarkwardtCurveFitter; 
     67import loci.curvefitter.SLIMCurveFitter; 
    6768import loci.formats.ChannelSeparator; 
    6869import loci.formats.FormatException; 
     
    9293    private static final Character LAMBDA = '\u03bb'; 
    9394    private static final Character SIGMA = '\u03c3'; 
     95    private static final Character SUB_1 = '\u2081'; 
     96    private static final Character SUB_2 = '\u2082'; 
     97    private static final Character SUB_3 = '\u2083'; 
    9498 
    9599    //TODO total kludge; just to get started 
     
    148152    private int m_y; 
    149153 
    150     private double m_fitA1; 
    151     private double m_fitT1; 
    152     private double m_fitA2; 
    153     private double m_fitT2; 
    154     private double m_fitA3; 
    155     private double m_fitT3; 
    156     private double m_fitC; 
     154    private double[] m_param = new double[7]; 
     155    private boolean[] m_free = { true, true, true, true, true, true, true }; 
    157156 
    158157    private boolean m_fitA1fixed; 
     
    163162    private boolean m_fitT3fixed; 
    164163    private boolean m_fitCfixed; 
    165     private boolean m_free[] = { true, true, true, true, true, true, true }; 
    166164 
    167165    private int m_startBin; 
     
    544542        } 
    545543        switch (m_function) { 
     544            /* 
    546545            case SINGLE_EXPONENTIAL: 
    547546                dialog.addNumericField("A", m_fitA1, 5); 
     
    582581            case STRETCHED_EXPONENTIAL: 
    583582                break; 
     583            */ 
     584            case SINGLE_EXPONENTIAL: 
     585                dialog.addNumericField("A", 
     586                        m_param[0], 5); 
     587                dialog.addCheckbox("Fix", 
     588                        !m_free[0]); 
     589                dialog.addNumericField("" + LAMBDA, 
     590                        m_param[1], 5); 
     591                dialog.addCheckbox("Fix", 
     592                        !m_free[1]); 
     593                dialog.addNumericField("C", 
     594                        m_param[2], 5); 
     595                dialog.addCheckbox("Fix", 
     596                        !m_free[2]); 
     597                break; 
     598            case DOUBLE_EXPONENTIAL: 
     599                dialog.addNumericField("A" + SUB_1, 
     600                        m_param[0], 5); 
     601                dialog.addCheckbox("Fix", 
     602                        !m_free[0]); 
     603                dialog.addNumericField("" + LAMBDA + SUB_1, 
     604                        m_param[1], 5); 
     605                dialog.addCheckbox("Fix", 
     606                        !m_free[1]); 
     607                dialog.addNumericField("A" + SUB_2, 
     608                        m_param[2], 5); 
     609                dialog.addCheckbox("Fix", 
     610                        !m_free[2]); 
     611                dialog.addNumericField("" + LAMBDA + SUB_2, 
     612                        m_param[3], 5); 
     613                dialog.addCheckbox("Fix", 
     614                        !m_free[3]); 
     615                dialog.addNumericField("C", 
     616                        m_param[4], 5); 
     617                dialog.addCheckbox("Fix", 
     618                        !m_free[4]); 
     619                break; 
     620            case TRIPLE_EXPONENTIAL: 
     621                dialog.addNumericField("A" + SUB_1, 
     622                        m_param[0], 5); 
     623                dialog.addCheckbox("Fix", 
     624                        !m_free[0]); 
     625                dialog.addNumericField("" + LAMBDA + SUB_1, 
     626                        m_param[1], 5); 
     627                dialog.addCheckbox("Fix", 
     628                        !m_free[1]); 
     629                dialog.addNumericField("A" + SUB_2, 
     630                        m_param[2], 5); 
     631                dialog.addCheckbox("Fix", 
     632                        !m_free[2]); 
     633                dialog.addNumericField("" + LAMBDA + SUB_2, 
     634                        m_param[3], 5); 
     635                dialog.addCheckbox("Fix", 
     636                        !m_free[3]); 
     637                dialog.addNumericField("A" + SUB_3, 
     638                        m_param[4], 5); 
     639                dialog.addCheckbox("Fix", 
     640                        !m_free[4]); 
     641                dialog.addNumericField("" + LAMBDA + SUB_3, 
     642                        m_param[5], 5); 
     643                dialog.addCheckbox("Fix", 
     644                        !m_free[5]); 
     645                dialog.addNumericField("C", 
     646                        m_param[6], 5); 
     647                dialog.addCheckbox("Fix", 
     648                        !m_free[6]); 
     649                break; 
     650            case STRETCHED_EXPONENTIAL: 
     651                break; 
     652 
    584653        } 
    585654        if (0 == m_stopBin) { 
     
    601670        switch (m_function) { 
    602671            case SINGLE_EXPONENTIAL: 
    603                 m_fitA1 = dialog.getNextNumber(); 
    604                 m_fitA1fixed = dialog.getNextBoolean(); 
    605                 m_fitT1 = dialog.getNextNumber(); 
    606                 m_fitT1fixed = dialog.getNextBoolean(); 
    607                 m_fitC = dialog.getNextNumber(); 
    608                 m_fitCfixed = dialog.getNextBoolean(); 
     672                m_param[0] = dialog.getNextNumber(); 
     673                m_free[0] = !dialog.getNextBoolean(); 
     674                m_param[1] = dialog.getNextNumber(); 
     675                m_free[1] = !dialog.getNextBoolean(); 
     676                m_param[2] = dialog.getNextNumber(); 
     677                m_free[2] = !dialog.getNextBoolean(); 
    609678                break; 
    610679            case DOUBLE_EXPONENTIAL: 
    611                 m_fitA1 = dialog.getNextNumber(); 
    612                 m_fitA1fixed = dialog.getNextBoolean(); 
    613                 m_fitT1 = dialog.getNextNumber(); 
    614                 m_fitT1fixed = dialog.getNextBoolean(); 
    615                 m_fitA2 = dialog.getNextNumber(); 
    616                 m_fitA2fixed = dialog.getNextBoolean(); 
    617                 m_fitT2 = dialog.getNextNumber(); 
    618                 m_fitT2fixed = dialog.getNextBoolean(); 
    619                 m_fitC = dialog.getNextNumber(); 
    620                 m_fitCfixed = dialog.getNextBoolean(); 
     680                m_param[0] = dialog.getNextNumber(); 
     681                m_free[0] = !dialog.getNextBoolean(); 
     682                m_param[1] = dialog.getNextNumber(); 
     683                m_free[1] = !dialog.getNextBoolean(); 
     684                m_param[2] = dialog.getNextNumber(); 
     685                m_free[2] = !dialog.getNextBoolean(); 
     686                m_param[3] = dialog.getNextNumber(); 
     687                m_free[3] = !dialog.getNextBoolean(); 
     688                m_param[4] = dialog.getNextNumber(); 
     689                m_free[4] = !dialog.getNextBoolean(); 
    621690                break; 
    622691            case TRIPLE_EXPONENTIAL: 
    623                 m_fitA1 = dialog.getNextNumber(); 
    624                 m_fitA1fixed = dialog.getNextBoolean(); 
    625                 m_fitT1 = dialog.getNextNumber(); 
    626                 m_fitT1fixed = dialog.getNextBoolean(); 
    627                 m_fitA2 = dialog.getNextNumber(); 
    628                 m_fitA2fixed = dialog.getNextBoolean(); 
    629                 m_fitT2 = dialog.getNextNumber(); 
    630                 m_fitT2fixed = dialog.getNextBoolean(); 
    631                 m_fitA3 = dialog.getNextNumber(); 
    632                 m_fitA3fixed = dialog.getNextBoolean(); 
    633                 m_fitT3 = dialog.getNextNumber(); 
    634                 m_fitT3fixed = dialog.getNextBoolean(); 
    635                 m_fitC = dialog.getNextNumber(); 
    636                 m_fitCfixed = dialog.getNextBoolean(); 
     692                m_param[0] = dialog.getNextNumber(); 
     693                m_free[0] = !dialog.getNextBoolean(); 
     694                m_param[1] = dialog.getNextNumber(); 
     695                m_free[1] = !dialog.getNextBoolean(); 
     696                m_param[2] = dialog.getNextNumber(); 
     697                m_free[2] = !dialog.getNextBoolean(); 
     698                m_param[3] = dialog.getNextNumber(); 
     699                m_free[3] = !dialog.getNextBoolean(); 
     700                m_param[4] = dialog.getNextNumber(); 
     701                m_free[4] = !dialog.getNextBoolean(); 
     702                m_param[5] = dialog.getNextNumber(); 
     703                m_free[5] = !dialog.getNextBoolean(); 
     704                m_param[6] = dialog.getNextNumber(); 
     705                m_free[6] = !dialog.getNextBoolean(); 
    637706               break; 
    638707            case STRETCHED_EXPONENTIAL: 
     
    668737            case SINGLE_EXPONENTIAL: 
    669738                params = new double[3]; 
    670                 params[0] = m_fitA1; 
    671                 params[1] = m_fitT1; 
    672                 params[2] = m_fitC; 
     739                params[0] = m_param[0]; 
     740                params[1] = m_param[1]; 
     741                params[2] = m_param[2]; 
    673742                break; 
    674743            case DOUBLE_EXPONENTIAL: 
    675744                params = new double[5]; 
    676                 params[0] = m_fitA1; 
    677                 params[1] = m_fitT1; 
    678                 params[2] = m_fitA2; 
    679                 params[3] = m_fitT2; 
    680                 params[4] = m_fitC; 
     745                params[0] = m_param[0]; 
     746                params[1] = m_param[1]; 
     747                params[2] = m_param[2]; 
     748                params[3] = m_param[3]; 
     749                params[4] = m_param[4]; 
    681750                break; 
    682751            case TRIPLE_EXPONENTIAL: 
    683752                params = new double[7]; 
    684                 params[0] = m_fitA1; 
    685                 params[1] = m_fitT1; 
    686                 params[2] = m_fitA2; 
    687                 params[3] = m_fitT2; 
    688                 params[4] = m_fitA3; 
    689                 params[5] = m_fitT3; 
    690                 params[6] = m_fitC; 
     753                params[0] = m_param[0]; 
     754                params[1] = m_param[1]; 
     755                params[2] = m_param[2]; 
     756                params[3] = m_param[3]; 
     757                params[4] = m_param[4]; 
     758                params[5] = m_param[5]; 
     759                params[6] = m_param[6]; 
    691760                break; 
    692761            case STRETCHED_EXPONENTIAL: 
    693762                break; 
    694763         } 
    695          params[0] = m_fitA1; 
    696          params[1] = m_fitT1; 
    697          params[2] = m_fitC; 
    698764 
    699765        // build the data 
    700766        ArrayList<ICurveFitData> curveFitDataList = new ArrayList<ICurveFitData>(); 
    701767        ICurveFitData curveFitData; 
    702         double yDataArray[]; 
     768        double yCount[]; 
    703769        double yFitted[]; 
    704770        switch (m_region) { 
     
    707773                curveFitData = new CurveFitData(); 
    708774                curveFitData.setParams(params); 
    709                 yDataArray = new double[m_timeBins]; 
     775                yCount = new double[m_timeBins]; 
    710776                for (int b = 0; b < m_timeBins; ++b) { 
    711                     yDataArray[b] = 0.0; 
     777                    yCount[b] = 0.0; 
    712778                } 
    713779                int photons = 0; 
     
    715781                    for (int x = 0; x < m_width; ++x) { 
    716782                        for (int b = 0; b < m_timeBins; ++b) { 
    717                             yDataArray[b] += m_data[0][y][x][b]; 
     783                            yCount[b] += m_data[0][y][x][b]; 
    718784                            photons += m_data[0][y][x][b]; 
    719785                        } 
     
    721787                } 
    722788                System.out.println("SUMMED photons " + photons); 
    723                 curveFitData.setYData(yDataArray); 
     789                curveFitData.setYCount(yCount); 
    724790                yFitted = new double[m_timeBins]; 
    725791                curveFitData.setYFitted(yFitted); 
     
    732798                    curveFitData = new CurveFitData(); 
    733799                    curveFitData.setParams(params.clone()); 
    734                     yDataArray = new double[m_timeBins]; 
     800                    yCount = new double[m_timeBins]; 
    735801                    for (int b = 0; b < m_timeBins; ++b) { 
    736                         yDataArray[b] = 0.0; 
     802                        yCount[b] = 0.0; 
    737803                    } 
    738804                    Rectangle bounds = roi.getBounds(); 
     
    742808                                System.out.println("roi " + roiNumber + " x " + x + " Y " + y); 
    743809                                for (int b = 0; b < m_timeBins; ++b) { 
    744                                     yDataArray[b] += m_data[0][y][x][b]; 
     810                                    yCount[b] += m_data[0][y][x][b]; 
    745811                                } 
    746812                            } 
    747813                        } 
    748814                    } 
    749                     curveFitData.setYData(yDataArray); 
     815                    curveFitData.setYCount(yCount); 
    750816                    yFitted = new double[m_timeBins]; 
    751817                    curveFitData.setYFitted(yFitted); 
     
    756822                curveFitData = new CurveFitData(); 
    757823                curveFitData.setParams(params); 
    758                 yDataArray = new double[m_timeBins]; 
     824                yCount = new double[m_timeBins]; 
    759825                for (int b = 0; b < m_timeBins; ++b) { 
    760                     yDataArray[b] = m_data[0][m_height - m_y - 1][m_x][b]; 
    761                 } 
    762                 curveFitData.setYData(yDataArray); 
     826                    yCount[b] = m_data[0][m_height - m_y - 1][m_x][b]; 
     827                } 
     828                curveFitData.setYCount(yCount); 
    763829                yFitted = new double[m_timeBins]; 
    764830                curveFitData.setYFitted(yFitted); 
     
    775841                                    curveFitData = new CurveFitData(); 
    776842                                    curveFitData.setParams(params.clone()); //TODO if you don't clone here each pixel fit uses results of previous fit to start 
    777                                     yDataArray = new double[m_timeBins]; 
     843                                    yCount = new double[m_timeBins]; 
    778844                                    for (int b = 0; b < m_timeBins; ++b) { 
    779                                         yDataArray[b] = m_data[0][y][x][b]; 
     845                                        yCount[b] = m_data[0][y][x][b]; 
    780846                                    } 
    781                                     curveFitData.setYData(yDataArray); 
     847                                    curveFitData.setYCount(yCount); 
    782848                                    yFitted = new double[m_timeBins]; 
    783849                                    curveFitData.setYFitted(yFitted); 
     
    793859                            curveFitData = new CurveFitData(); 
    794860                            curveFitData.setParams(params.clone()); //TODO if you don't clone here each pixel fit uses results of previous fit to start 
    795                             yDataArray = new double[m_timeBins]; 
     861                            yCount = new double[m_timeBins]; 
    796862                            for (int b = 0; b < m_timeBins; ++b) { 
    797                                 yDataArray[b] = m_data[0][y][x][b]; 
     863                                yCount[b] = m_data[0][y][x][b]; 
    798864                            } 
    799                             curveFitData.setYData(yDataArray); 
     865                            curveFitData.setYCount(yCount); 
    800866                            yFitted = new double[m_timeBins]; 
    801867                            curveFitData.setYFitted(yFitted); 
     
    832898                curveFitter = new GrayNRCurveFitter(1); 
    833899                break; 
    834 //            case SLIMCURVE_RLD: 
    835 //                curveFitter = new SLIMCurveFitter(0); 
    836 //                break; 
    837 //            case SLIMCURVE_LMA: 
    838 //                curveFitter = new SLIMCurveFitter(1); 
    839 //                break; 
     900            case SLIMCURVE_RLD: 
     901                curveFitter = new SLIMCurveFitter(0); 
     902                break; 
     903            case SLIMCURVE_LMA: 
     904                curveFitter = new SLIMCurveFitter(1); 
     905                break; 
    840906        } 
    841907        curveFitter.setXInc(m_timeRange); 
     
    927993            switch (m_function) { 
    928994                case SINGLE_EXPONENTIAL: 
    929                     m_fitA1 = params[0]; 
    930                     m_fitT1 = params[1]; 
    931                     m_fitC  = params[2]; 
     995                    m_param[0] = params[0]; 
     996                    m_param[1] = params[1]; 
     997                    m_param[2]  = params[2]; 
    932998                    break; 
    933999                case DOUBLE_EXPONENTIAL: 
    934                     m_fitA1 = params[0]; 
    935                     m_fitT1 = params[1]; 
    936                     m_fitA2 = params[2]; 
    937                     m_fitT2 = params[3]; 
    938                     m_fitC = params[4]; 
     1000                    m_param[0] = params[0]; 
     1001                    m_param[1] = params[1]; 
     1002                    m_param[2] = params[2]; 
     1003                    m_param[3] = params[3]; 
     1004                    m_param[4] = params[4]; 
    9391005                    break; 
    9401006                case TRIPLE_EXPONENTIAL: 
    941                     m_fitA1 = params[0]; 
    942                     m_fitT1 = params[1]; 
    943                     m_fitA2 = params[2]; 
    944                     m_fitT2 = params[3]; 
    945                     m_fitA3 = params[4]; 
    946                     m_fitT3 = params[5]; 
    947                     m_fitC = params[6]; 
     1007                    m_param[0] = params[0]; 
     1008                    m_param[1] = params[1]; 
     1009                    m_param[2] = params[2]; 
     1010                    m_param[3] = params[3]; 
     1011                    m_param[4] = params[4]; 
     1012                    m_param[5] = params[5]; 
     1013                    m_param[6] = params[6]; 
    9481014                    break; 
    9491015                case STRETCHED_EXPONENTIAL: 
     
    9761042            case SINGLE_EXPONENTIAL: 
    9771043                params = new double[3]; 
    978                 params[0] = m_fitA1; 
    979                 params[1] = m_fitT1; 
    980                 params[2] = m_fitC; 
     1044                params[0] = m_param[0]; 
     1045                params[1] = m_param[1]; 
     1046                params[2] = m_param[2]; 
    9811047                break; 
    9821048            case DOUBLE_EXPONENTIAL: 
    9831049                params = new double[5]; 
    984                 params[0] = m_fitA1; 
    985                 params[1] = m_fitT1; 
    986                 params[2] = m_fitA2; 
    987                 params[3] = m_fitT2; 
    988                 params[4] = m_fitC; 
     1050                params[0] = m_param[0]; 
     1051                params[1] = m_param[1]; 
     1052                params[2] = m_param[2]; 
     1053                params[3] = m_param[3]; 
     1054                params[4] = m_param[4]; 
    9891055                break; 
    9901056            case TRIPLE_EXPONENTIAL: 
    9911057                params = new double[7]; 
    992                 params[0] = m_fitA1; 
    993                 params[1] = m_fitT1; 
    994                 params[2] = m_fitA2; 
    995                 params[3] = m_fitT2; 
    996                 params[4] = m_fitA3; 
    997                 params[5] = m_fitT3; 
    998                 params[6] = m_fitC; 
     1058                params[0] = m_param[0]; 
     1059                params[1] = m_param[1]; 
     1060                params[2] = m_param[2]; 
     1061                params[3] = m_param[3]; 
     1062                params[4] = m_param[4]; 
     1063                params[5] = m_param[5]; 
     1064                params[6] = m_param[6]; 
    9991065                break; 
    10001066            case STRETCHED_EXPONENTIAL: 
    10011067                break; 
    10021068        } 
    1003         //TODO problem: only use predetermined params for a fixed fit? 
    1004         for (int i = 0; i < params.length; ++i) { 
    1005             params[i] = 1.0; 
    1006         } 
    1007         params[0] = m_fitA1; 
    1008         params[1] = m_fitT1; 
    1009         params[2] = m_fitC; 
    10101069 
    10111070        // show colorized lifetimes 
     
    10191078        ArrayList<ChunkyPixel> pixelList = new ArrayList<ChunkyPixel>(); 
    10201079        ICurveFitData curveFitData; 
    1021         double yDataArray[]; 
     1080        double yCount[]; 
    10221081        double yFitted[]; 
    10231082 
     
    10341093                curveFitData = new CurveFitData(); 
    10351094                curveFitData.setParams(params.clone()); 
    1036                 yDataArray = new double[m_timeBins]; 
     1095                yCount = new double[m_timeBins]; 
    10371096                for (int b = 0; b < m_timeBins; ++b) { 
    1038                     yDataArray[b] = m_data[0][pixel.getY()][pixel.getX()][b]; 
    1039                 } 
    1040                 curveFitData.setYData(yDataArray); 
     1097                    yCount[b] = m_data[0][pixel.getY()][pixel.getX()][b]; 
     1098                } 
     1099                curveFitData.setYCount(yCount); 
    10411100                yFitted = new double[m_timeBins]; 
    10421101                curveFitData.setYFitted(yFitted); 
     
    10961155                curveFitter = new GrayNRCurveFitter(1); 
    10971156                break; 
    1098 //            case SLIMCURVE_RLD: 
    1099 //                curveFitter = new SLIMCurveFitter(0); 
    1100 //                break; 
    1101 //            case SLIMCURVE_LMA: 
    1102 //                curveFitter = new SLIMCurveFitter(1); 
    1103 //                break; 
     1157            case SLIMCURVE_RLD: 
     1158                curveFitter = new SLIMCurveFitter(0); 
     1159                break; 
     1160            case SLIMCURVE_LMA: 
     1161                curveFitter = new SLIMCurveFitter(1); 
     1162                break; 
    11041163        } 
    11051164        curveFitter.setXInc(m_timeRange); 
     
    11141173 
    11151174            //TODO debugging: 
    1116             if (lifetime > 2 * m_fitT1) { 
     1175            if (lifetime > 2 * m_param[1]) { 
    11171176                System.out.println("BAD FIT??? x " + pixel.getX() + " y " + pixel.getY() + " fitted lifetime " + lifetime); 
    11181177            } 
Note: See TracChangeset for help on using the changeset viewer.