Changeset 7811
- Timestamp:
- 11/18/11 19:57:07 (8 years ago)
- Location:
- trunk/projects/slim-plugin/src/main/java
- Files:
-
- 11 edited
- 3 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/projects/slim-plugin/src/main/java/imagej/slim/Test.java
r7805 r7811 11 11 import imagej.slim.fitting.params.ILocalFitParams; 12 12 import imagej.slim.fitting.config.Configuration; 13 14 import loci.curvefitter.ICurveFitter.FitAlgorithm; 15 import loci.curvefitter.ICurveFitter.FitFunction; 13 16 14 17 import java.util.ArrayList; … … 25 28 _fittingEngine = Configuration.getInstance().getFittingEngine(); 26 29 _fittingEngine.setThreads(Configuration.getInstance().getThreads()); 27 IGlobalFitParams params = new GlobalFitParams(); 30 _fittingEngine.setCurveFitter(Configuration.getInstance().getCurveFitter()); 31 32 double[] y = new double[]{ 33 0,3,1,2,2,0,0,0,1,1,0,0,1,1,0,1,0,2,2,1,1,1,1,1,0,1,2,1,0,0,1,0,2,3,2,0,0, 34 0,0,1,0,2,0,2,0,0,0,2,0,0,2,3,2,3,4,3,7,12,3,5,3,7,10,1,7,3,6,8,1,10,6,4,6, 35 7,6,4,7,4,3,4,3,0,2,3,1,4,2,3,5,1,3,6,5,7,4,3,4,6,6,5,3,3,5,5,4,1,3,4,4,5, 36 5,3,4,3,2,2,4,3,3,2,4,1,3,3,4,4,2,6,0,1,0,6,3,3,4,3,3,4,1,3,0,2,1,1,2,1,1, 37 0,3,2,1,1,2,1,3,1,1,3,1,1,0,2,1,1,3,0,3,1,1,2,0,1,3,0,2,0,1,4,1,1,3,0,3,1, 38 3,2,4,1,1,0,3,1,2,0,1,1,0,2,1,4,2,0,2,0,2,0,2,0,2,0,0,1,2,0,0,1,0,1,1,2,2, 39 1,3,3,1,1,1,2,0,0,0,4,2,1,1,2,3,4,1,4,1,2,1,2,2,0,2,0,1,0,1,1,0,1,1,1 }; 40 double[] yFitted = new double[y.length]; 41 double xInc = 0.0390625; 42 int fitStart = 40; 43 int fitStop = 210; 44 int nData = y.length; 45 double[] sig = null; // new double[] { 1.0 }; 46 double[] params = new double[] { 0.0, 0.5, 100.0, 0.5 }; 47 48 IGlobalFitParams globalFitParams = new GlobalFitParams(); 49 globalFitParams.setFitAlgorithm(FitAlgorithm.RLD_LMA); 50 globalFitParams.setFitFunction(FitFunction.SINGLE_EXPONENTIAL); 51 globalFitParams.setXInc(xInc); 52 globalFitParams.setPrompt(null); 53 globalFitParams.setChiSquareTarget(0.0); 54 //TODO globalFitParams.setStartPrompt/setStopPrompt/setStartDecay/setStopDecay 55 56 System.out.println(" x inc is " + globalFitParams.getXInc()); 57 58 ILocalFitParams localFitParams = new LocalFitParams(); 59 localFitParams.setY(y); 60 localFitParams.setSig(sig); 61 localFitParams.setParams(params); 62 localFitParams.setFitStart(fitStart); 63 localFitParams.setFitStop(fitStop); 64 localFitParams.setYFitted(yFitted); //TODO ARG kludgey 65 66 /*IGlobalFitParams params = new GlobalFitParams(); 28 67 List<ILocalFitParams> dataList = new ArrayList<ILocalFitParams>(); 29 68 for (int i = 0; i < 128*128; ++i) { 30 69 ILocalFitParams data = new LocalFitParams(); 31 data.setId(i);70 //data.setId(i); 32 71 dataList.add(data); 33 } 72 }*/ 73 List<ILocalFitParams> dataList = new ArrayList<ILocalFitParams>(); 74 dataList.add(localFitParams); 34 75 long time = System.currentTimeMillis(); 35 _fittingEngine.fit( params, dataList);76 _fittingEngine.fit(globalFitParams, dataList); 36 77 System.out.println("DONE " + ((float) (System.currentTimeMillis() - time)/1000) + " secs"); 37 78 _fittingEngine.shutdown(); -
trunk/projects/slim-plugin/src/main/java/imagej/slim/fitting/callable/FittingEngineCallable.java
r7807 r7811 1 1 // 2 // SLIMCurveCallable.java2 // FittingEngineCallable.java 3 3 // 4 4 … … 35 35 package imagej.slim.fitting.callable; 36 36 37 import imagej.slim.fitting.params. LocalFitResult;37 import imagej.slim.fitting.params.FitResults; 38 38 import imagej.slim.fitting.params.ILocalFitParams; 39 39 import imagej.slim.fitting.params.IGlobalFitParams; 40 import imagej.slim.fitting.params.I LocalFitResults;41 import java.util.Random; 40 import imagej.slim.fitting.params.IFitResults; 41 42 42 import loci.curvefitter.CurveFitData; 43 import loci.curvefitter.GrayCurveFitter;44 import loci.curvefitter.GrayNRCurveFitter;45 43 import loci.curvefitter.ICurveFitData; 46 44 import loci.curvefitter.ICurveFitter; 47 import loci.curvefitter.JaolhoCurveFitter;48 import loci.curvefitter.MarkwardtCurveFitter;49 import loci.curvefitter.SLIMCurveFitter;50 45 51 46 /** 47 * This class brings together everything needed to fit one pixel. 52 48 * 53 49 * @author Aivar Grislis 54 50 */ 55 public class SLIMCurveCallable implements IFittingEngineCallable {51 public class FittingEngineCallable implements IFittingEngineCallable { 56 52 private ICurveFitter _curveFitter; 57 53 private IGlobalFitParams _globalParams; 58 54 private ILocalFitParams _localParams; 59 private I LocalFitResults _result;55 private IFitResults _result; 60 56 61 57 @Override … … 69 65 70 66 @Override 71 public ILocalFitResults call() { 72 System.out.println(">>> " + _localParams.getId() + "-" + Thread.currentThread().getName()); 73 _result = new LocalFitResult(); 74 _result.setId(_localParams.getId()); 75 76 if (true) { 77 int waitTime = (new Random()).nextInt(10); 78 try { 79 Thread.sleep(waitTime); 80 } 81 catch (InterruptedException e) { 67 public IFitResults call() { 68 _curveFitter.setFitAlgorithm(_globalParams.getFitAlgorithm()); 69 _curveFitter.setFitFunction(_globalParams.getFitFunction()); 70 _curveFitter.setInstrumentResponse(_globalParams.getPrompt()); 71 _curveFitter.setXInc(_globalParams.getXInc()); 72 _curveFitter.setFree(_globalParams.getFree()); 73 74 ICurveFitData curveFitData = new CurveFitData(); 75 curveFitData.setChiSquareTarget(_globalParams.getChiSquareTarget()); 76 curveFitData.setYCount(_localParams.getY()); 77 curveFitData.setSig(_localParams.getSig()); 78 curveFitData.setParams(_localParams.getParams()); 79 curveFitData.setYFitted(_localParams.getYFitted()); //TODO awkward and kludgey! How is this a local parameter? It actually winds up in results. 80 ICurveFitData[] curveFitDataArray = new ICurveFitData[] { curveFitData }; 82 81 83 } 84 } 85 86 System.out.println("<<< " + _localParams.getId() + "-" + Thread.currentThread().getName()); 82 _curveFitter.fitData(curveFitDataArray, _localParams.getFitStart(), _localParams.getFitStop()); 83 84 _result = new FitResults(); 85 _result.setChiSquare(curveFitData.getChiSquare()); 86 _result.setParams(curveFitData.getParams()); 87 _result.setYFitted(curveFitData.getYFitted()); 88 87 89 return _result; 88 90 } -
trunk/projects/slim-plugin/src/main/java/imagej/slim/fitting/callable/IFittingEngineCallable.java
r7807 r7811 37 37 import imagej.slim.fitting.params.ILocalFitParams; 38 38 import imagej.slim.fitting.params.IGlobalFitParams; 39 import imagej.slim.fitting.params.I LocalFitResults;39 import imagej.slim.fitting.params.IFitResults; 40 40 import loci.curvefitter.ICurveFitter; 41 41 … … 46 46 * @author Aivar Grislis 47 47 */ 48 public interface IFittingEngineCallable extends Callable<I LocalFitResults> {48 public interface IFittingEngineCallable extends Callable<IFitResults> { 49 49 50 50 public void setup(ICurveFitter curveFitter, 51 51 IGlobalFitParams params, ILocalFitParams data); 52 52 53 public I LocalFitResults call();53 public IFitResults call(); 54 54 } -
trunk/projects/slim-plugin/src/main/java/imagej/slim/fitting/config/Configuration.java
r7805 r7811 36 36 37 37 import imagej.slim.fitting.callable.IFittingEngineCallable; 38 import imagej.slim.fitting.callable. SLIMCurveCallable;38 import imagej.slim.fitting.callable.FittingEngineCallable; 39 39 import imagej.slim.fitting.cursor.LameCursorEstimator; 40 40 import imagej.slim.fitting.cursor.ICursorEstimator; … … 42 42 import imagej.slim.fitting.engine.ThreadedFittingEngine; 43 43 44 import loci.curvefitter.ICurveFitter; 45 import loci.curvefitter.SLIMCurveFitter; 46 44 47 /** 45 48 * Handles configuration specific to the SLIM Plugin. 49 * 50 * A singleton so only one configuration per SLIM Plugin. 46 51 * 47 52 * @author Aivar Grislis … … 51 56 private int _threads = 8; 52 57 private IFittingEngine _fittingEngine; 58 private ICurveFitter _curveFitter; 53 59 private ICursorEstimator _cursorEstimator; 54 60 55 61 /** 56 * Private constructor for Singleton pattern.62 * Private constructor for singleton pattern. 57 63 */ 58 64 private Configuration() { … … 77 83 } 78 84 85 public synchronized ICurveFitter getCurveFitter() { 86 if (null == _curveFitter) { 87 _curveFitter = new SLIMCurveFitter(); 88 } 89 return _curveFitter; 90 } 91 79 92 public synchronized ICursorEstimator getCursorEstimator() { 80 93 if (null == _cursorEstimator) { … … 85 98 86 99 public IFittingEngineCallable newFittingEngineCallable() { 87 return new SLIMCurveCallable();100 return new FittingEngineCallable(); 88 101 } 89 102 -
trunk/projects/slim-plugin/src/main/java/imagej/slim/fitting/engine/IFittingEngine.java
r7805 r7811 37 37 import imagej.slim.fitting.params.ILocalFitParams; 38 38 import imagej.slim.fitting.params.IGlobalFitParams; 39 import imagej.slim.fitting.params.ILocalFitResults; 39 import imagej.slim.fitting.params.IFitResults; 40 40 41 import java.util.List; 42 43 import loci.curvefitter.ICurveFitter; 41 44 42 45 /** … … 46 49 */ 47 50 public interface IFittingEngine { 48 public ILocalFitResults fit(IGlobalFitParams params, ILocalFitParams data); 49 public List<ILocalFitResults> fit(IGlobalFitParams params, List<ILocalFitParams> dataList); 51 public void shutdown(); 50 52 public void setThreads(int threads); 51 public void shutdown(); 53 public void setCurveFitter(ICurveFitter curveFitter); 54 public IFitResults fit(IGlobalFitParams params, ILocalFitParams data); 55 public List<IFitResults> fit(IGlobalFitParams params, List<ILocalFitParams> dataList); 52 56 } -
trunk/projects/slim-plugin/src/main/java/imagej/slim/fitting/engine/ThreadedFittingEngine.java
r7807 r7811 37 37 import imagej.slim.fitting.params.ILocalFitParams; 38 38 import imagej.slim.fitting.params.IGlobalFitParams; 39 import imagej.slim.fitting.params.I LocalFitResults;39 import imagej.slim.fitting.params.IFitResults; 40 40 import imagej.slim.fitting.callable.IFittingEngineCallable; 41 41 import imagej.slim.fitting.config.Configuration; 42 43 import loci.curvefitter.ICurveFitter; 44 42 45 import java.util.ArrayList; 43 46 import java.util.List; … … 53 56 private static int THREADS = 4; 54 57 private int _threads = THREADS; 55 private ThreadPool<ILocalFitResults> _threadPool; 58 private ThreadPool<IFitResults> _threadPool; 59 private ICurveFitter _curveFitter; 56 60 57 61 public ThreadedFittingEngine() { 58 _threadPool = new ThreadPool<I LocalFitResults>();62 _threadPool = new ThreadPool<IFitResults>(); 59 63 } 60 64 … … 74 78 _threadPool.setThreads(threads); 75 79 } 76 80 81 /** 82 * Sets curve fitter to use. 83 * 84 * @param curve fitter 85 */ 86 public synchronized void setCurveFitter(ICurveFitter curveFitter) { 87 _curveFitter = curveFitter; 88 } 89 77 90 /** 78 91 * Fits a single pixel with given parameters. … … 84 97 * @return results 85 98 */ 86 public synchronized I LocalFitResults fit99 public synchronized IFitResults fit 87 100 (final IGlobalFitParams params, final ILocalFitParams data) { 88 101 IFittingEngineCallable callable 89 102 = Configuration.getInstance().newFittingEngineCallable(); 90 callable.setup( null, params, data); //TODO ARG pass in an ICurveFitter103 callable.setup(_curveFitter, params, data); 91 104 return callable.call(); 92 105 } … … 99 112 * @return results one or more pixels results 100 113 */ 101 public synchronized List<I LocalFitResults> fit114 public synchronized List<IFitResults> fit 102 115 (final IGlobalFitParams params, final List<ILocalFitParams> dataList) { 103 116 … … 108 121 IFittingEngineCallable callable 109 122 = Configuration.getInstance().newFittingEngineCallable(); 110 callable.setup( null, params, data); //TODO ARG pass in an ICurveFitter123 callable.setup(_curveFitter, params, data); 111 124 callableList.add(callable); 112 125 } 113 126 114 List<I LocalFitResults> resultList = _threadPool.process(callableList);127 List<IFitResults> resultList = _threadPool.process(callableList); 115 128 return resultList; 116 129 } -
trunk/projects/slim-plugin/src/main/java/imagej/slim/fitting/params/FitResults.java
r7805 r7811 40 40 * @author Aivar Grislis 41 41 */ 42 public class LocalFitResult implements ILocalFitResults { 43 private int _id; 42 public class FitResults implements IFitResults { 43 double _chiSquare; 44 double[] _params; 45 double[] _yFitted; 44 46 45 public void set Id(int id) {46 _ id = id;47 public void setChiSquare(double chiSquare) { 48 _chiSquare = chiSquare; 47 49 } 48 50 49 public int getId() { 50 return _id; 51 public double getChiSquare() { 52 return _chiSquare; 53 } 54 55 public void setParams(double[] params) { 56 _params = params; 57 } 58 59 public double[] getParams() { 60 return _params; 61 } 62 63 public void setYFitted(double[] yFitted) { 64 _yFitted = yFitted; 65 } 66 67 public double[] getYFitted() { 68 return _yFitted; 51 69 } 52 70 } -
trunk/projects/slim-plugin/src/main/java/imagej/slim/fitting/params/GlobalFitParams.java
r7806 r7811 35 35 package imagej.slim.fitting.params; 36 36 37 import loci.curvefitter.ICurveFitter.FitAlgorithm; 38 import loci.curvefitter.ICurveFitter.FitFunction; 39 37 40 /** 38 41 * This contains the global fitting parameters, i.e. those valid for the whole … … 42 45 */ 43 46 public class GlobalFitParams implements IGlobalFitParams { 47 private FitAlgorithm _fitAlgorithm; 48 private FitFunction _fitFunction; 49 private double _xInc; 44 50 private double[] _prompt; 45 int _startPrompt; 46 int _stopPrompt; 47 int _startDecay; 48 int _stopDecay; 51 private double _chiSquareTarget; 52 private boolean[] _free; 53 private int _startPrompt; 54 private int _stopPrompt; 55 private int _startDecay; 56 private int _stopDecay; 57 58 @Override 59 public void setFitAlgorithm(FitAlgorithm fitAlgorithm) { 60 _fitAlgorithm = fitAlgorithm; 61 } 49 62 63 @Override 64 public FitAlgorithm getFitAlgorithm() { 65 return _fitAlgorithm; 66 } 67 68 @Override 69 public void setFitFunction(FitFunction fitFunction) { 70 _fitFunction = fitFunction; 71 } 72 73 @Override 74 public FitFunction getFitFunction() { 75 return _fitFunction; 76 } 77 78 @Override 79 public void setXInc(double xInc) { 80 _xInc = xInc; 81 } 82 83 @Override 84 public double getXInc() { 85 return _xInc; 86 } 87 88 @Override 50 89 public void setPrompt(double[] prompt) { 51 90 _prompt = prompt; 52 91 } 53 92 93 @Override 54 94 public double[] getPrompt() { 55 95 return _prompt; 56 96 } 57 97 98 @Override 99 public void setChiSquareTarget(double chiSquareTarget) { 100 _chiSquareTarget = chiSquareTarget; 101 } 102 103 @Override 104 public double getChiSquareTarget() { 105 return _chiSquareTarget; 106 } 107 108 @Override 109 public void setFree(boolean[] free) { 110 _free = free; 111 } 112 113 @Override 114 public boolean[] getFree() { 115 return _free; 116 } 117 118 @Override 58 119 public void setStartPrompt(int startPrompt) { 59 120 _startPrompt = startPrompt; 60 121 } 61 122 123 @Override 62 124 public void setStopPrompt(int stopPrompt) { 63 125 _stopPrompt = stopPrompt; 64 126 } 65 127 128 @Override 66 129 public void setStartDecay(int startDecay) { 67 130 _startDecay = startDecay; 68 131 } 69 132 133 @Override 70 134 public void setStopDecay(int stopDecay) { 71 135 _stopDecay = stopDecay; -
trunk/projects/slim-plugin/src/main/java/imagej/slim/fitting/params/IFitResults.java
r7805 r7811 40 40 * @author Aivar Grislis 41 41 */ 42 public interface ILocalFitResults { 43 public void setId(int id); 42 public interface IFitResults { 44 43 45 public int getId(); 44 public void setChiSquare(double chiSquare); 45 46 public double getChiSquare(); 47 48 public void setParams(double[] params); 49 50 public double[] getParams(); 51 52 public void setYFitted(double[] yFitted); 53 54 public double[] getYFitted(); 46 55 } -
trunk/projects/slim-plugin/src/main/java/imagej/slim/fitting/params/IGlobalFitParams.java
r7806 r7811 35 35 package imagej.slim.fitting.params; 36 36 37 import loci.curvefitter.ICurveFitter.FitAlgorithm; 38 import loci.curvefitter.ICurveFitter.FitFunction; 39 37 40 /** 38 41 * Interface for container for the global fitting parameters, i.e. those valid … … 43 46 public interface IGlobalFitParams { 44 47 48 public void setFitAlgorithm(FitAlgorithm fitAlgorithm); 49 50 public FitAlgorithm getFitAlgorithm(); 51 52 public void setFitFunction(FitFunction fitFunction); 53 54 public FitFunction getFitFunction(); 55 56 public void setXInc(double xInc); 57 58 public double getXInc(); 59 45 60 public void setPrompt(double[] prompt); 46 61 47 public double[] getPrompt(); 62 public double[] getPrompt(); 63 64 public void setChiSquareTarget(double chiSquareTarget); 65 66 public double getChiSquareTarget(); 67 68 public void setFree(boolean[] free); 69 70 public boolean[] getFree(); 71 72 public void setStartPrompt(int startPrompt); 73 74 public void setStopPrompt(int stopPrompt); 75 76 public void setStartDecay(int startDecay); 77 78 public void setStopDecay(int stopDecay); 48 79 } -
trunk/projects/slim-plugin/src/main/java/imagej/slim/fitting/params/ILocalFitParams.java
r7805 r7811 43 43 public interface ILocalFitParams { 44 44 45 public void set Id(int id);45 public void setY(double[] y); 46 46 47 public int getId(); 47 public double[] getY(); 48 49 public void setSig(double[] sig); 50 51 public double[] getSig(); 52 53 public void setFitStart(int fitStart); 54 55 public int getFitStart(); 56 57 public void setFitStop(int fitStop); 58 59 public int getFitStop(); 60 61 public void setParams(double[] params); 62 63 public double[] getParams(); 64 65 public void setYFitted(double[] yFitted); //TODO ARG not really a fit param 66 67 public double[] getYFitted(); //TODO ARG not really a fit param 48 68 } -
trunk/projects/slim-plugin/src/main/java/imagej/slim/fitting/params/LocalFitParams.java
r7805 r7811 42 42 */ 43 43 public class LocalFitParams implements ILocalFitParams { 44 private int _id; 44 private double[] _y; 45 private double[] _sig; 46 private int _fitStart; 47 private int _fitStop; 48 private double[] _params; 49 private double[] _yFitted; 45 50 46 public void setId(int id) { 47 _id = id; 51 @Override 52 public void setY(double[] y) { 53 _y = y; 48 54 } 49 55 50 public int getId() { 51 return _id; 56 @Override 57 public double[] getY() { 58 return _y; 59 } 60 61 @Override 62 public void setSig(double[] sig) { 63 _sig = sig; 64 } 65 66 @Override 67 public double[] getSig() { 68 return _sig; 69 } 70 71 @Override 72 public void setFitStart(int fitStart) { 73 _fitStart = fitStart; 74 } 75 76 @Override 77 public int getFitStart() { 78 return _fitStart; 79 } 80 81 @Override 82 public void setFitStop(int fitStop) { 83 _fitStop = fitStop; 84 } 85 86 @Override 87 public int getFitStop() { 88 return _fitStop; 89 } 90 91 @Override 92 public void setParams(double[] params) { 93 _params = params; 94 } 95 96 @Override 97 public double[] getParams() { 98 return _params; 99 } 100 101 @Override 102 public void setYFitted(double[] yFitted) { 103 _yFitted = yFitted; 104 } 105 106 @Override 107 public double[] getYFitted() { 108 return _yFitted; 52 109 } 53 110 } -
trunk/projects/slim-plugin/src/main/java/loci/slim/CursorHelper.java
r7795 r7811 37 37 import loci.curvefitter.CurveFitData; 38 38 import loci.curvefitter.ICurveFitData; 39 import loci.curvefitter.ICurveFitter; 39 40 import loci.curvefitter.SLIMCurveFitter; 40 41 … … 285 286 CurveFitData[] data = new CurveFitData[] { curveFitData }; 286 287 287 SLIMCurveFitter curveFitter = new SLIMCurveFitter(SLIMCurveFitter.AlgorithmType.RLD_LMA); 288 SLIMCurveFitter curveFitter = new SLIMCurveFitter(); 289 curveFitter.setFitAlgorithm(ICurveFitter.FitAlgorithm.RLD_LMA); 288 290 curveFitter.setXInc(xInc); 289 291 curveFitter.setFree(free); -
trunk/projects/slim-plugin/src/main/java/loci/slim/SLIMProcessor.java
r7804 r7811 81 81 import mpicbg.imglib.type.numeric.real.DoubleType; 82 82 83 // Kludge in the new stuff: 84 import imagej.slim.fitting.params.IGlobalFitParams; 85 import imagej.slim.fitting.params.LocalFitParams; 86 import imagej.slim.fitting.params.GlobalFitParams; 87 import imagej.slim.fitting.engine.IFittingEngine; 88 import imagej.slim.fitting.params.ILocalFitParams; 89 import imagej.slim.fitting.params.IFitResults; 90 import imagej.slim.fitting.config.Configuration; 91 92 83 93 84 94 //TODO tidy up SLIMProcessor … … 95 105 */ 96 106 public class SLIMProcessor <T extends RealType<T>> { 107 private static boolean OLD_STYLE = false; // fully krausened, from God's Country in WI 108 109 private imagej.slim.fitting.engine.IFittingEngine _fittingEngine; 110 97 111 private static final String X = "X"; 98 112 private static final String Y = "Y"; … … 1025 1039 // process the pixels 1026 1040 if (++pixelsToProcessCount >= PIXEL_COUNT) { 1027 pixelsToProcessCount = 0; 1028 ICurveFitData[] data = curveFitDataList.toArray(new ICurveFitData[0]); 1029 curveFitDataList.clear(); 1030 curveFitter.fitData(data, m_startBin, m_stopBin); 1031 setFittedParamsFromData(resultsCursor, data); 1032 colorizePixels(dataColorizer, m_channel, data, pixelList.toArray(new ChunkyPixel[0])); 1033 pixelList.clear(); 1041 if (OLD_STYLE) { 1042 pixelsToProcessCount = 0; 1043 ICurveFitData[] data = curveFitDataList.toArray(new ICurveFitData[0]); 1044 curveFitDataList.clear(); 1045 curveFitter.fitData(data, m_startBin, m_stopBin); 1046 setFittedParamsFromData(resultsCursor, data); 1047 colorizePixels(dataColorizer, m_channel, data, pixelList.toArray(new ChunkyPixel[0])); 1048 pixelList.clear(); 1049 } 1050 else { 1051 pixelsToProcessCount = 0; 1052 ICurveFitData[] data = curveFitDataList.toArray(new ICurveFitData[0]); 1053 curveFitDataList.clear(); 1054 1055 if (null == _fittingEngine) { 1056 _fittingEngine = Configuration.getInstance().getFittingEngine(); 1057 _fittingEngine.setThreads(Configuration.getInstance().getThreads()); 1058 _fittingEngine.setCurveFitter(Configuration.getInstance().getCurveFitter()); 1059 } 1060 1061 1062 IGlobalFitParams globalFitParams = new GlobalFitParams(); 1063 globalFitParams.setFitAlgorithm(loci.curvefitter.ICurveFitter.FitAlgorithm.RLD_LMA); 1064 globalFitParams.setFitFunction(loci.curvefitter.ICurveFitter.FitFunction.SINGLE_EXPONENTIAL); 1065 globalFitParams.setXInc(m_timeRange); 1066 globalFitParams.setPrompt(null); 1067 if (null != m_excitationPanel) { 1068 globalFitParams.setPrompt(m_excitationPanel.getValues(1)); 1069 } 1070 globalFitParams.setChiSquareTarget(data[0].getChiSquareTarget()); 1071 globalFitParams.setFree(translateFree(uiPanel.getFunction(), uiPanel.getFree())); 1072 1073 java.util.List<ILocalFitParams> dataList = new ArrayList<ILocalFitParams>(); 1074 1075 for (ICurveFitData datum : data) { 1076 ILocalFitParams localFitParams = new LocalFitParams(); 1077 localFitParams.setY(datum.getYCount()); 1078 localFitParams.setSig(datum.getSig()); 1079 localFitParams.setParams(datum.getParams()); 1080 localFitParams.setFitStart(m_startBin); 1081 localFitParams.setFitStop(m_stopBin); 1082 localFitParams.setYFitted(datum.getYFitted()); 1083 dataList.add(localFitParams); 1084 } 1085 1086 java.util.List<IFitResults> results = _fittingEngine.fit(globalFitParams, dataList); 1087 1088 double[] lifetimes = new double[pixelList.size()]; 1089 for (int i = 0; i < pixelList.size(); ++i) { 1090 lifetimes[i] = results.get(i).getParams()[3]; 1091 } 1092 1093 //TODO ARG setFittedParamsFromData(resultsCursor, data); 1094 colorizePixelsII(dataColorizer, m_channel, lifetimes, pixelList.toArray(new ChunkyPixel[0])); 1095 pixelList.clear(); 1096 1097 //TODO so the results are not getting saved to an Imglib Image 1098 //TODO this technique of building an array of ICurveFitData, then breaking that down into 1099 // IGlobalFitParams and ILocalFitParams 1100 1101 } 1102 1034 1103 } 1035 1104 } … … 1037 1106 // handle any leftover pixels 1038 1107 if (!m_cancel && pixelsToProcessCount > 0) { 1039 pixelsToProcessCount = 0; 1040 ICurveFitData[] data = curveFitDataList.toArray(new ICurveFitData[0]); 1041 curveFitDataList.clear(); 1042 curveFitter.fitData(data, m_startBin, m_stopBin); 1043 setFittedParamsFromData(resultsCursor, data); 1044 colorizePixels(dataColorizer, m_channel, data, pixelList.toArray(new ChunkyPixel[0])); 1108 if (OLD_STYLE) { 1109 pixelsToProcessCount = 0; 1110 ICurveFitData[] data = curveFitDataList.toArray(new ICurveFitData[0]); 1111 curveFitDataList.clear(); 1112 curveFitter.fitData(data, m_startBin, m_stopBin); 1113 setFittedParamsFromData(resultsCursor, data); 1114 colorizePixels(dataColorizer, m_channel, data, pixelList.toArray(new ChunkyPixel[0])); 1115 1116 } 1117 else { 1118 pixelsToProcessCount = 0; 1119 ICurveFitData[] data = curveFitDataList.toArray(new ICurveFitData[0]); 1120 curveFitDataList.clear(); 1121 1122 if (null == _fittingEngine) { 1123 _fittingEngine = Configuration.getInstance().getFittingEngine(); 1124 _fittingEngine.setThreads(Configuration.getInstance().getThreads()); 1125 _fittingEngine.setCurveFitter(Configuration.getInstance().getCurveFitter()); 1126 } 1127 1128 1129 IGlobalFitParams globalFitParams = new GlobalFitParams(); 1130 globalFitParams.setFitAlgorithm(loci.curvefitter.ICurveFitter.FitAlgorithm.RLD_LMA); 1131 globalFitParams.setFitFunction(loci.curvefitter.ICurveFitter.FitFunction.SINGLE_EXPONENTIAL); 1132 globalFitParams.setXInc(m_timeRange); 1133 globalFitParams.setPrompt(null); 1134 if (null != m_excitationPanel) { 1135 globalFitParams.setPrompt(m_excitationPanel.getValues(1)); 1136 } 1137 globalFitParams.setChiSquareTarget(data[0].getChiSquareTarget()); 1138 globalFitParams.setFree(translateFree(uiPanel.getFunction(), uiPanel.getFree())); 1139 1140 java.util.List<ILocalFitParams> dataList = new ArrayList<ILocalFitParams>(); 1141 1142 for (ICurveFitData datum : data) { 1143 ILocalFitParams localFitParams = new LocalFitParams(); 1144 localFitParams.setY(datum.getYCount()); 1145 localFitParams.setSig(datum.getSig()); 1146 localFitParams.setParams(datum.getParams()); 1147 localFitParams.setFitStart(m_startBin); 1148 localFitParams.setFitStop(m_stopBin); 1149 localFitParams.setYFitted(datum.getYFitted()); 1150 dataList.add(localFitParams); 1151 } 1152 1153 java.util.List<IFitResults> results = _fittingEngine.fit(globalFitParams, dataList); 1154 1155 double[] lifetimes = new double[pixelList.size()]; 1156 for (int i = 0; i < pixelList.size(); ++i) { 1157 lifetimes[i] = results.get(i).getParams()[3]; 1158 } 1159 1160 //TODO ARG setFittedParamsFromData(resultsCursor, data); 1161 colorizePixelsII(dataColorizer, m_channel, lifetimes, pixelList.toArray(new ChunkyPixel[0])); 1162 1163 } 1045 1164 } 1046 1165 } … … 1251 1370 } 1252 1371 } 1253 1372 1373 private void setFittedParamsFromDataII(LocalizableByDimCursor<DoubleType> cursor, ICurveFitData dataArray[]) { 1374 int x, y; 1375 double[] params; 1376 for (ICurveFitData data : dataArray) { 1377 setFittedParams(cursor, data.getChannel(), data.getX(), data.getY(), data.getParams()); 1378 } 1379 } 1380 1254 1381 private void setFittedParams(LocalizableByDimCursor<DoubleType> cursor, int channel, int x, int y, double[] params) { 1255 1382 int position[] = new int[4]; … … 1325 1452 dataColorizer.update(); 1326 1453 } 1327 1454 1455 void colorizePixelsII(DataColorizer dataColorizer, int channel, double[] lifetime, ChunkyPixel pixels[]) { 1456 1457 // draw as you go; 'chunky' pixels get smaller as the overall fit progresses 1458 for (int i = 0; i < pixels.length; ++i) { 1459 ChunkyPixel pixel = pixels[i]; 1460 //TODO tau is 3, 1 is C double lifetime = data[i].getParams()[1]; 1461 1462 1463 //TODO quick fix 1464 if (lifetime[i] < 0.0) { 1465 System.out.println("negative lifetime " + lifetime + " at " + pixel.getX() + " " + pixel.getY()); 1466 return; 1467 } 1468 1469 //TODO debugging: 1470 //if (lifetime > 2 * m_param[1]) { 1471 // System.out.println("BAD FIT??? x " + pixel.getX() + " y " + pixel.getY() + " fitted lifetime " + lifetime); 1472 //} 1473 1474 //TODO BUG: 1475 // With the table as is, you can get 1476 // x y w h 1477 // 12 15 2 1 1478 // 14 15 2 1 1479 // all within the same drawing cycle. 1480 // So it looks like a 4x1 slice gets drawn (it 1481 // is composed of two adjacent 2x1 slices with 1482 // potentially two different colors). 1483 //if (pixel.getWidth() == 2) { 1484 // System.out.println("x " + pixel.getX() + " y " + pixel.getY() + " w " + pixel.getWidth() + " h " + pixel.getHeight()); 1485 //} 1486 //System.out.println("w " + pixel.getWidth() + " h " + pixel.getHeight()); 1487 //System.out.println("lifetime is " + lifetime); 1488 //Color color = lifetimeColorMap(MAXIMUM_LIFETIME, lifetime); 1489 //imageProcessor.setColor(color); 1490 boolean firstTime = true; 1491 for (int x = pixel.getX(); x < pixel.getX() + pixel.getWidth(); ++x) { 1492 for (int y = pixel.getY(); y < pixel.getY() + pixel.getHeight(); ++y) { 1493 if (wantFitted(channel, x, y)) { 1494 dataColorizer.setData(firstTime, x, y , lifetime[i]); 1495 firstTime = false; 1496 } 1497 } 1498 } 1499 } 1500 dataColorizer.update(); 1501 } 1502 1328 1503 /** 1329 1504 * Checks criterion for whether this pixel needs to get fitted or drawn. … … 1470 1645 break; */ 1471 1646 case BARBER_RLD: 1472 curveFitter = new GrayCurveFitter(0); 1647 curveFitter = new GrayCurveFitter(); 1648 curveFitter.setFitAlgorithm(ICurveFitter.FitAlgorithm.RLD); 1473 1649 break; 1474 1650 case BARBER_LMA: 1475 curveFitter = new GrayCurveFitter(1); 1651 curveFitter = new GrayCurveFitter(); 1652 curveFitter.setFitAlgorithm(ICurveFitter.FitAlgorithm.LMA); 1476 1653 break; 1477 1654 case MARKWARDT: … … 1479 1656 break; 1480 1657 case BARBER2_RLD: 1481 curveFitter = new GrayNRCurveFitter(0); 1658 curveFitter = new GrayNRCurveFitter(); 1659 curveFitter.setFitAlgorithm(ICurveFitter.FitAlgorithm.RLD); 1482 1660 break; 1483 1661 case BARBER2_LMA: 1484 curveFitter = new GrayNRCurveFitter(1); 1662 curveFitter = new GrayNRCurveFitter(); 1663 curveFitter.setFitAlgorithm(ICurveFitter.FitAlgorithm.RLD); 1485 1664 break; 1486 1665 case SLIMCURVE_RLD: 1487 curveFitter = new SLIMCurveFitter(SLIMCurveFitter.AlgorithmType.RLD); 1666 curveFitter = new SLIMCurveFitter(); 1667 curveFitter.setFitAlgorithm(ICurveFitter.FitAlgorithm.RLD); 1488 1668 break; 1489 1669 case SLIMCURVE_LMA: 1490 curveFitter = new SLIMCurveFitter(SLIMCurveFitter.AlgorithmType.LMA); 1670 curveFitter = new SLIMCurveFitter(); 1671 curveFitter.setFitAlgorithm(ICurveFitter.FitAlgorithm.LMA); 1491 1672 break; 1492 1673 case SLIMCURVE_RLD_LMA: 1493 curveFitter = new SLIMCurveFitter(SLIMCurveFitter.AlgorithmType.RLD_LMA); 1674 curveFitter = new SLIMCurveFitter(); 1675 curveFitter.setFitAlgorithm(ICurveFitter.FitAlgorithm.RLD_LMA); 1494 1676 break; 1495 1677 }
Note: See TracChangeset
for help on using the changeset viewer.