use of org.vcell.optimization.ProfileData in project vcell by virtualcell.
the class KenworthyParticleTest method analyzeKeyworthy.
/**
* Fits raw image time series data to uniform disk models (with Guassian or Uniform fluorescence).
*
* @param rawTimeSeriesImages
* @param localWorkspace
* @throws Exception
*/
private static void analyzeKeyworthy(ImageTimeSeries<UShortImage> rawTimeSeriesImages, RowColumnResultSet reducedData, LocalWorkspace localWorkspace) throws Exception {
new DisplayTimeSeriesOp().displayImageTimeSeries(rawTimeSeriesImages, "raw images", (WindowListener) null);
// double cellThreshold = 0.5;
// GeometryRoisAndBleachTiming cellROIresults = new GenerateCellROIsFromRawFrapTimeSeriesOp().generate(rawTimeSeriesImages, cellThreshold);
// ROI backgroundROI = cellROIresults.backgroundROI_2D;
// ROI cellROI = cellROIresults.cellROI_2D;
// int indexOfFirstPostbleach = cellROIresults.indexOfFirstPostbleach;
//
// new DisplayImageOp().displayImage(backgroundROI.getRoiImages()[0], "background ROI", null);
// new DisplayImageOp().displayImage(cellROI.getRoiImages()[0], "cell ROI", null);
//
// NormalizedFrapDataResults normResults = new GenerateNormalizedFrapDataOp().generate(rawTimeSeriesImages, backgroundROI, indexOfFirstPostbleach);
// ImageTimeSeries<FloatImage> normalizedTimeSeries = normResults.normalizedFrapData;
// FloatImage prebleachAvg = normResults.prebleachAverage;
// FloatImage normalizedPostbleach = normalizedTimeSeries.getAllImages()[0];
//
//
// new DisplayTimeSeriesOp().displayImageTimeSeries(normalizedTimeSeries, "normalized images", (WindowListener)null);
// //
// // create a single bleach ROI by thresholding
// //
// double bleachThreshold = 0.80;
// ROI bleachROI = new GenerateBleachRoiOp().generateBleachRoi(normalizedPostbleach, cellROI, bleachThreshold);
//
// //
// // only use bleach ROI for fitting etc.
// //
// // ROI[] dataROIs = new ROI[] { bleachROI };
//
// //
// // fit 2D Gaussian to normalized data to determine center, radius and K factor of bleach (assuming exp(-exp
// //
// FitBleachSpotOpResults fitSpotResults = new FitBleachSpotOp().fit(NormalizedSampleFunction.fromROI(bleachROI), normalizedTimeSeries.getAllImages()[0]);
// double bleachFactorK_GaussianFit = fitSpotResults.bleachFactorK_GaussianFit;
// double bleachRadius_GaussianFit = fitSpotResults.bleachRadius_GaussianFit;
// double bleachRadius_ROI = fitSpotResults.bleachRadius_ROI;
// double centerX_GaussianFit = fitSpotResults.centerX_GaussianFit;
// double centerX_ROI = fitSpotResults.centerX_ROI;
// double centerY_GaussianFit = fitSpotResults.centerY_GaussianFit;
// double centerY_ROI = fitSpotResults.centerY_ROI;
//
// NormalizedSampleFunction[] sampleFunctions = new NormalizedSampleFunction[] {
// NormalizedSampleFunction.fromROI(bleachROI)
// };
//
// get reduced data and errors for each ROI
//
// RowColumnResultSet reducedData = new GenerateReducedDataOp().generateReducedData(normalizedTimeSeries, sampleFunctions);
RowColumnResultSet measurementErrors = new RowColumnResultSet(new String[] { reducedData.getColumnDescriptions()[0].getName(), reducedData.getColumnDescriptions()[1].getName() });
for (int i = 0; i < reducedData.getRowCount(); i++) {
double[] row = new double[] { reducedData.getRow(i)[0], Math.sqrt(reducedData.getRow(i)[1]) };
measurementErrors.addRow(row);
}
new DisplayPlotOp().displayPlot(reducedData, "raw reduced data", null);
new DisplayPlotOp().displayPlot(measurementErrors, "raw reduced noise", null);
//
// find large drop and determine first post-bleach timepoint.
//
double largestDrop = -1000000;
int indexLargestDrop = -1;
for (int i = 1; i < reducedData.getRowCount(); i++) {
double drop = reducedData.getRow(i - 1)[1] - reducedData.getRow(i)[1];
if (drop > largestDrop) {
indexLargestDrop = i;
largestDrop = drop;
}
}
System.out.println("index of first postbleach is " + indexLargestDrop);
//
// normalize data and noise and start with first post-bleach index;
//
RowColumnResultSet normalizedReducedData = new RowColumnResultSet(new String[] { reducedData.getColumnDescriptions()[0].getName(), reducedData.getColumnDescriptions()[1].getName() });
RowColumnResultSet normalizedNoiseData = new RowColumnResultSet(new String[] { reducedData.getColumnDescriptions()[0].getName(), reducedData.getColumnDescriptions()[1].getName() });
for (int i = indexLargestDrop; i < reducedData.getRowCount(); i++) {
double timeAfterBleach = reducedData.getRow(i)[0] - reducedData.getRow(indexLargestDrop)[0];
double normalizedData = reducedData.getRow(i)[1] / reducedData.getRow(0)[1];
double[] newDataRow = new double[] { timeAfterBleach, normalizedData };
normalizedReducedData.addRow(newDataRow);
double normalizedNoise = measurementErrors.getRow(i)[1] / reducedData.getRow(0)[1];
double[] newNoiseRow = new double[] { timeAfterBleach, normalizedNoise };
normalizedNoiseData.addRow(newNoiseRow);
}
new DisplayPlotOp().displayPlot(normalizedReducedData, "normalized reduced data", null);
new DisplayPlotOp().displayPlot(normalizedNoiseData, "normalized reduced noise", null);
NormalizedSampleFunction[] sampleFunctions = new NormalizedSampleFunction[] { NormalizedSampleFunction.createUniform("psf", null, null, new ISize(10, 10, 1)) };
ErrorFunction errorFunction = new ErrorFunctionKenworthy(normalizedReducedData);
// ErrorFunction errorFunction = new ErrorFunctionMeanSquared();
double bleachRadius_ROI = 2;
//
// 2 parameter uniform disk model
//
OptModel uniformDisk2OptModel = new OptModelKenworthyUniformDisk2P(bleachRadius_ROI);
String title_u2 = "Uniform Disk Model - 2 parameters, (Rn=" + bleachRadius_ROI + ")";
OptContext uniformDisk2Context = new Generate2DOptContextOp().generate2DOptContext(uniformDisk2OptModel, normalizedReducedData, normalizedNoiseData, errorFunction);
new DisplayInteractiveModelOp().displayOptModel(uniformDisk2Context, sampleFunctions, localWorkspace, title_u2, null);
//
// 3 parameter uniform disk model
//
OptModel uniformDisk3OptModel = new OptModelKenworthyUniformDisk3P(bleachRadius_ROI);
OptContext uniformDisk3Context = new Generate2DOptContextOp().generate2DOptContext(uniformDisk3OptModel, normalizedReducedData, normalizedNoiseData, errorFunction);
String title_u3 = "Uniform Disk Model - 3 parameters, (Rn=" + bleachRadius_ROI + ")";
new DisplayInteractiveModelOp().displayOptModel(uniformDisk3Context, sampleFunctions, localWorkspace, title_u3, null);
ProfileData[] profileData = new RunProfileLikelihoodGeneralOp().runProfileLikihood(uniformDisk3Context, null);
new DisplayProfileLikelihoodPlotsOp().displayProfileLikelihoodPlots(profileData, "3param model", null);
//
// GaussianFit parameter uniform disk model
//
// FloatImage prebleachBleachAreaImage = new FloatImage(prebleachAvg);
// prebleachBleachAreaImage.and(bleachROI.getRoiImages()[0]); // mask-out all but the bleach area
// double prebleachAvgInROI = prebleachBleachAreaImage.getImageStatistics().meanValue;
// OptModel gaussian2OptModel = new OptModelKenworthyGaussian(prebleachAvgInROI, bleachFactorK_GaussianFit, bleachRadius_GaussianFit, bleachRadius_ROI);
// OptContext gaussianDisk2Context = new Generate2DOptContextOp().generate2DOptContext(gaussian2OptModel, reducedData, measurementErrors, errorFunction);
// String title_g2 = "Gaussian Disk Model - 2 parameters (prebleach="+prebleachAvgInROI+",K="+bleachFactorK_GaussianFit+",Re="+bleachRadius_GaussianFit+",Rnom="+bleachRadius_ROI+")";
// new DisplayInteractiveModelOp().displayOptModel(gaussianDisk2Context, sampleFunctions, localWorkspace, title_g2, null);
}
use of org.vcell.optimization.ProfileData in project vcell by virtualcell.
the class DisplayProfileLikelihoodPlots method compute0.
@Override
protected void compute0(TaskContext context, final ClientTaskStatusSupport clientTaskStatusSupport) throws Exception {
// get input
ProfileData[] profiledata = context.getData(profileData);
String titleString = context.getDataWithDefault(title, "no title");
WindowListener listener = null;
// do op
DisplayProfileLikelihoodPlotsOp op = new DisplayProfileLikelihoodPlotsOp();
op.displayProfileLikelihoodPlots(profiledata, titleString, listener);
// set output
context.setData(displayed, true);
}
use of org.vcell.optimization.ProfileData in project vcell by virtualcell.
the class RunProfileLikelihoodGeneral method compute0.
@Override
protected void compute0(TaskContext context, final ClientTaskStatusSupport clientTaskStatusSupport) throws Exception {
// get input
OptContext optContext = context.getData(this.optContext);
// do op
RunProfileLikelihoodGeneralOp op = new RunProfileLikelihoodGeneralOp();
ProfileData[] profileData = op.runProfileLikihood(optContext, clientTaskStatusSupport);
// set output
context.setData(this.profileData, profileData);
}
Aggregations