use of org.vcell.vmicro.op.display.DisplayProfileLikelihoodPlotsOp in project vcell by virtualcell.
the class VFrapProcess method main.
public static void main(String[] args) {
try {
File baseDir = new File(".");
// File baseDir = new File("/Users/schaff/Documents/workspace/VCell_5.4");
// initialize computing environment
//
File workingDirectory = new File(baseDir, "workingDir");
LocalWorkspace localWorkspace = new LocalWorkspace(workingDirectory);
//
// import raw image time series data from VFRAP file format (can have noise, background, etc ... can be actual microscopy data)
//
ClientTaskStatusSupport progressListener = new ClientTaskStatusSupport() {
String message = "";
int progress = 0;
@Override
public void setProgress(int progress) {
this.progress = progress;
}
@Override
public void setMessage(String message) {
this.message = message;
}
@Override
public boolean isInterrupted() {
return false;
}
@Override
public int getProgress() {
return progress;
}
@Override
public void addProgressDialogListener(ProgressDialogListener progressDialogListener) {
}
};
//
// generate fake data (and save?)
//
// ImageTimeSeries<UShortImage> simulatedFluorescence = generateFakeData(localWorkspace, progressListener);
// new ExportRawTimeSeriesToVFrapOp().exportToVFRAP(vfrapFile, simulatedFluorescence, null);
//
// analyze raw data (from file?) using Keyworthy method.
//
File vfrapFile = new File(baseDir, "vfrapPaper/rawData/sim3/workflow.txt.save");
ImageTimeSeries<UShortImage> fluorTimeSeriesImages = new ImportRawTimeSeriesFromVFrapOp().importRawTimeSeriesFromVFrap(vfrapFile);
VFrapProcessResults results = compute(fluorTimeSeriesImages, 0.85, 0.4, localWorkspace, progressListener);
new DisplayTimeSeriesOp().displayImageTimeSeries(fluorTimeSeriesImages, "raw data", null);
new DisplayImageOp().displayImage(results.cellROI_2D.getRoiImages()[0], "cell ROI", null);
new DisplayImageOp().displayImage(results.bleachROI_2D.getRoiImages()[0], "bleach ROI", null);
new DisplayDependentROIsOp().displayDependentROIs(results.imageDataROIs, results.cellROI_2D, "data rois", null);
new DisplayTimeSeriesOp().displayImageTimeSeries(results.normalizedTimeSeries, "normalized data", null);
new DisplayProfileLikelihoodPlotsOp().displayProfileLikelihoodPlots(results.profileDataOne, "one fluorescent pool", null);
new DisplayProfileLikelihoodPlotsOp().displayProfileLikelihoodPlots(results.profileDataTwoWithPenalty, "too pools", null);
} catch (Exception e) {
e.printStackTrace(System.out);
}
}
use of org.vcell.vmicro.op.display.DisplayProfileLikelihoodPlotsOp in project vcell by virtualcell.
the class WorkflowObjectsPanel method displayData.
private void displayData(TaskContext taskContext, WorkflowObject workflowObject) {
if (workflowObject instanceof DataInput || workflowObject instanceof DataOutput) {
String title = parametersFunctionsTableModel.getName(workflowObject);
WindowListener listener = new WindowAdapter() {
};
Object data = null;
if (workflowObject instanceof WorkflowDataSource) {
WorkflowDataSource dataHolder = (WorkflowDataSource) workflowObject;
data = taskContext.getRepository().getData(dataHolder);
} else if (workflowObject instanceof DataInput) {
DataInput dataInput = (DataInput) workflowObject;
data = taskContext.getData(dataInput);
}
if (data instanceof RowColumnResultSet) {
RowColumnResultSet rc = (RowColumnResultSet) data;
try {
new DisplayPlotOp().displayPlot(rc, title, listener);
} catch (ExpressionException e) {
e.printStackTrace();
}
} else if (data instanceof ROI) {
ROI roi = (ROI) data;
Image image = roi.getRoiImages()[0];
new DisplayImageOp().displayImage(image, title, listener);
} else if (data instanceof ProfileData[]) {
ProfileData[] profileData = (ProfileData[]) data;
new DisplayProfileLikelihoodPlotsOp().displayProfileLikelihoodPlots(profileData, title, listener);
} else if (data instanceof Image) {
Image image = (Image) data;
new DisplayImageOp().displayImage(image, title, listener);
} else if (data instanceof ImageTimeSeries) {
ImageTimeSeries imageTimeSeries = (ImageTimeSeries) data;
try {
DisplayTimeSeries.displayImageTimeSeries(imageTimeSeries, title, listener);
} catch (ImageException | IOException e) {
e.printStackTrace();
}
}
}
}
use of org.vcell.vmicro.op.display.DisplayProfileLikelihoodPlotsOp 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.vmicro.op.display.DisplayProfileLikelihoodPlotsOp 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);
}
Aggregations