use of cbit.vcell.VirtualMicroscopy.UShortImage in project vcell by virtualcell.
the class VFrapProcess method compute.
public static VFrapProcessResults compute(ImageTimeSeries rawTimeSeriesImages, double bleachThreshold, double cellThreshold, LocalWorkspace localWorkspace, ClientTaskStatusSupport clientTaskStatusSupport) throws Exception {
GenerateCellROIsFromRawFrapTimeSeriesOp generateCellROIs = new GenerateCellROIsFromRawFrapTimeSeriesOp();
GeometryRoisAndBleachTiming geometryAndTiming = generateCellROIs.generate(rawTimeSeriesImages, cellThreshold);
GenerateNormalizedFrapDataOp generateNormalizedFrapData = new GenerateNormalizedFrapDataOp();
NormalizedFrapDataResults normalizedFrapResults = generateNormalizedFrapData.generate(rawTimeSeriesImages, geometryAndTiming.backgroundROI_2D, geometryAndTiming.indexOfFirstPostbleach);
GenerateBleachRoiOp generateROIs = new GenerateBleachRoiOp();
ROI bleachROI = generateROIs.generateBleachRoi(normalizedFrapResults.normalizedFrapData.getAllImages()[0], geometryAndTiming.cellROI_2D, bleachThreshold);
GenerateDependentImageROIsOp generateDependentROIs = new GenerateDependentImageROIsOp();
ROI[] dataROIs = generateDependentROIs.generate(geometryAndTiming.cellROI_2D, bleachROI);
NormalizedSampleFunction[] roiSampleFunctions = new NormalizedSampleFunction[dataROIs.length];
for (int i = 0; i < dataROIs.length; i++) {
roiSampleFunctions[i] = NormalizedSampleFunction.fromROI(dataROIs[i]);
}
GenerateReducedDataOp generateReducedNormalizedData = new GenerateReducedDataOp();
RowColumnResultSet reducedData = generateReducedNormalizedData.generateReducedData(normalizedFrapResults.normalizedFrapData, roiSampleFunctions);
ComputeMeasurementErrorOp computeMeasurementError = new ComputeMeasurementErrorOp();
RowColumnResultSet measurementError = computeMeasurementError.computeNormalizedMeasurementError(roiSampleFunctions, geometryAndTiming.indexOfFirstPostbleach, rawTimeSeriesImages, normalizedFrapResults.prebleachAverage, clientTaskStatusSupport);
GenerateTrivial2DPsfOp psf_2D = new GenerateTrivial2DPsfOp();
UShortImage psf = psf_2D.generateTrivial2D_Psf();
// RunRefSimulationOp runRefSimulationFull = new RunRefSimulationOp();
// GenerateReducedROIDataOp generateReducedRefSimData = new GenerateReducedROIDataOp();
RunRefSimulationFastOp runRefSimulationFast = new RunRefSimulationFastOp();
RowColumnResultSet refData = runRefSimulationFast.runRefSimFast(geometryAndTiming.cellROI_2D, normalizedFrapResults.normalizedFrapData, dataROIs, psf, localWorkspace, clientTaskStatusSupport);
final double refDiffusionRate = 1.0;
double[] refSimTimePoints = refData.extractColumn(0);
int numRois = refData.getDataColumnCount() - 1;
int numRefSimTimes = refData.getRowCount();
double[][] refSimData = new double[numRois][numRefSimTimes];
for (int roi = 0; roi < numRois; roi++) {
double[] roiData = refData.extractColumn(roi + 1);
for (int t = 0; t < numRefSimTimes; t++) {
refSimData[roi][t] = roiData[t];
}
}
ErrorFunction errorFunction = new ErrorFunctionNoiseWeightedL2();
OptModelOneDiff optModelOneDiff = new OptModelOneDiff(refSimData, refSimTimePoints, refDiffusionRate);
Generate2DOptContextOp generate2DOptContextOne = new Generate2DOptContextOp();
OptContext optContextOneDiff = generate2DOptContextOne.generate2DOptContext(optModelOneDiff, reducedData, measurementError, errorFunction);
RunProfileLikelihoodGeneralOp runProfileLikelihoodOne = new RunProfileLikelihoodGeneralOp();
ProfileData[] profileDataOne = runProfileLikelihoodOne.runProfileLikihood(optContextOneDiff, clientTaskStatusSupport);
// OptModelTwoDiffWithoutPenalty optModelTwoDiffWithoutPenalty = new OptModelTwoDiffWithoutPenalty(refSimData, refSimTimePoints, refDiffusionRate);
// Generate2DOptContextOp generate2DOptContextTwoWithoutPenalty = new Generate2DOptContextOp();
// OptContext optContextTwoDiffWithoutPenalty = generate2DOptContextTwoWithoutPenalty.generate2DOptContext(optModelTwoDiffWithoutPenalty, reducedData, measurementError);
// RunProfileLikelihoodGeneralOp runProfileLikelihoodTwoWithoutPenalty = new RunProfileLikelihoodGeneralOp();
// ProfileData[] profileDataTwoWithoutPenalty = runProfileLikelihoodTwoWithoutPenalty.runProfileLikihood(optContextTwoDiffWithoutPenalty, clientTaskStatusSupport);
OptModelTwoDiffWithPenalty optModelTwoDiffWithPenalty = new OptModelTwoDiffWithPenalty(refSimData, refSimTimePoints, refDiffusionRate);
Generate2DOptContextOp generate2DOptContextTwoWithPenalty = new Generate2DOptContextOp();
OptContext optContextTwoDiffWithPenalty = generate2DOptContextTwoWithPenalty.generate2DOptContext(optModelTwoDiffWithPenalty, reducedData, measurementError, errorFunction);
RunProfileLikelihoodGeneralOp runProfileLikelihoodTwoWithPenalty = new RunProfileLikelihoodGeneralOp();
ProfileData[] profileDataTwoWithPenalty = runProfileLikelihoodTwoWithPenalty.runProfileLikihood(optContextTwoDiffWithPenalty, clientTaskStatusSupport);
//
// SLOW WAY
//
// runRefSimulationFull.cellROI_2D,generateCellROIs.cellROI_2D);
// runRefSimulationFull.normalizedTimeSeries,generateNormalizedFrapData.normalizedFrapData);
// workflow.addTask(runRefSimulationFull);
// generateReducedRefSimData.imageTimeSeries,runRefSimulationFull.refSimTimeSeries);
// generateReducedRefSimData.imageDataROIs,generateDependentROIs.imageDataROIs);
// workflow.addTask(generateReducedRefSimData);
// DataHolder<RowColumnResultSet> reducedROIData = generateReducedRefSimData.reducedROIData;
// DataHolder<Double> refSimDiffusionRate = runRefSimulationFull.refSimDiffusionRate;
VFrapProcessResults results = new VFrapProcessResults(dataROIs, geometryAndTiming.cellROI_2D, bleachROI, normalizedFrapResults.normalizedFrapData, reducedData, profileDataOne, profileDataTwoWithPenalty);
return results;
}
use of cbit.vcell.VirtualMicroscopy.UShortImage in project vcell by virtualcell.
the class BrownianDynamicsTest method generateTestData.
private ImageTimeSeries<UShortImage> generateTestData(Origin origin, Extent extent, int numX, int numY, int numParticles, double diffusionRate, double psfVar, double bleachRadius, boolean bNoise, boolean bConvolve, double bleachDuration, double endTime) throws ImageException {
double detectorGainAndQuantumYeild = 100;
double totalSampleTime = 0.2;
int numSampleSteps = 1;
int numPrebleach = 2;
ArrayList<UShortImage> images = new ArrayList<UShortImage>();
ArrayList<Double> times = new ArrayList<Double>();
final BrownianDynamics2DSolver solver = new BrownianDynamics2DSolver(origin, extent, numParticles);
boolean initiallyFluorescent = true;
solver.initializeUniform(initiallyFluorescent);
// simulate and write prebleach images
for (int i = 0; i < numPrebleach; i++) {
images.add(solver.sampleImage(numX, numY, origin, extent, diffusionRate, totalSampleTime, numSampleSteps, psfVar, detectorGainAndQuantumYeild, bConvolve, bNoise));
times.add(solver.currentTime());
}
int numBleachSteps = 1;
double bleachCenterX = origin.getX() + 0.5 * extent.getX();
double bleachCenterY = origin.getY() + 0.5 * extent.getY();
double bleachPsfVariance = bleachRadius;
double bleachFactor_K = 10 / bleachDuration;
solver.bleachGuassian(diffusionRate, bleachDuration, numBleachSteps, bleachCenterX, bleachCenterY, bleachPsfVariance, bleachFactor_K);
// wait
double postbleachDelay = 0.1;
solver.step(diffusionRate, postbleachDelay);
while (solver.currentTime() < endTime) {
double samplePsfVariance = psfVar;
images.add(solver.sampleImage(numX, numY, origin, extent, diffusionRate, totalSampleTime, numSampleSteps, psfVar, detectorGainAndQuantumYeild, bConvolve, bNoise));
times.add(solver.currentTime());
// solver.step(diffusionRate, 1-totalSampleTime);
}
double[] timeArray = new double[times.size()];
for (int i = 0; i < timeArray.length; i++) {
timeArray[i] = times.get(i);
}
UShortImage[] imageArray = images.toArray(new UShortImage[images.size()]);
return new ImageTimeSeries<UShortImage>(UShortImage.class, imageArray, timeArray, 1);
}
use of cbit.vcell.VirtualMicroscopy.UShortImage in project vcell by virtualcell.
the class BrownianDynamicsTest method main.
public static void main(String[] args) {
try {
Options commandOptions = new Options();
Option noiseOption = new Option(OPTION_NOISE, false, "sampled images use Poisson statistics for photons, default is to count particles");
commandOptions.addOption(noiseOption);
Option psfOption = new Option(OPTION_PSF, false, "sampled images are convolve with microscope psf, default is to bin");
commandOptions.addOption(psfOption);
Option imageFileOption = new Option(OPTION_IMAGEFILE, true, "file to store image time series");
imageFileOption.setArgName("filename");
imageFileOption.setValueSeparator('=');
commandOptions.addOption(imageFileOption);
Option plotFileOption = new Option(OPTION_PLOTFILE, true, "file to store CSV time series (reduced data for ROIs)");
plotFileOption.setArgName("filename");
plotFileOption.setValueSeparator('=');
commandOptions.addOption(plotFileOption);
Option displayImageOption = new Option(OPTION_DISPLAY_IMAGE, false, "display image time series");
commandOptions.addOption(displayImageOption);
Option displayPlotOption = new Option(OPTION_DISPLAY_PLOT, false, "display plot of bleach roi");
commandOptions.addOption(displayPlotOption);
Option extentOption = new Option(OPTION_EXTENT, true, "extent of entire domain (default " + DEFAULT_EXTENT_SCALE + ")");
extentOption.setArgName("extent");
extentOption.setValueSeparator('=');
commandOptions.addOption(extentOption);
Option imageSizeOption = new Option(OPTION_IMAGE_SIZE, true, "num pixels in x and y (default " + DEFAULT_IMAGE_SIZE + ")");
imageSizeOption.setArgName("numPixels");
imageSizeOption.setValueSeparator('=');
commandOptions.addOption(imageSizeOption);
Option numParticlesOption = new Option(OPTION_NUM_PARTICLES, true, "num particles (default " + DEFAULT_NUM_PARTICLES + ")");
numParticlesOption.setArgName("num");
numParticlesOption.setValueSeparator('=');
commandOptions.addOption(numParticlesOption);
Option diffusionOption = new Option(OPTION_DIFFUSION, true, "diffusion rate (default " + DEFAULT_DIFFUSION + ")");
diffusionOption.setArgName("rate");
diffusionOption.setValueSeparator('=');
commandOptions.addOption(diffusionOption);
Option bleachRadiusOption = new Option(OPTION_BLEACH_RADIUS, true, "bleach radius (default " + DEFAULT_BLEACH_RADIUS + ")");
bleachRadiusOption.setArgName("radius");
bleachRadiusOption.setValueSeparator('=');
commandOptions.addOption(bleachRadiusOption);
Option psfRadiusOption = new Option(OPTION_PSF_RADIUS, true, "psf radius (default " + DEFAULT_PSF_RADIUS + ")");
psfRadiusOption.setArgName("radius");
psfRadiusOption.setValueSeparator('=');
commandOptions.addOption(psfRadiusOption);
Option bleachDurationOption = new Option(OPTION_BLEACH_DURATION, true, "psf radius (default " + DEFAULT_BLEACH_DURATION + ")");
bleachDurationOption.setArgName("duration");
bleachDurationOption.setValueSeparator('=');
commandOptions.addOption(bleachDurationOption);
Option endTimeOption = new Option(OPTION_ENDTIME, true, "end time (default " + DEFAULT_ENDTIME + ")");
endTimeOption.setArgName("time");
endTimeOption.setValueSeparator('=');
commandOptions.addOption(endTimeOption);
CommandLine cmdLine = null;
try {
Parser parser = new BasicParser();
cmdLine = parser.parse(commandOptions, args);
} catch (ParseException e1) {
e1.printStackTrace();
HelpFormatter hf = new HelpFormatter();
hf.printHelp("BrownianDynamicsTest", commandOptions);
System.exit(2);
}
boolean bNoise = cmdLine.hasOption(OPTION_NOISE);
boolean bConvolve = cmdLine.hasOption(OPTION_PSF);
File imageFile = null;
if (cmdLine.hasOption(OPTION_IMAGEFILE)) {
imageFile = new File(cmdLine.getOptionValue(OPTION_IMAGEFILE));
}
File plotFile = null;
if (cmdLine.hasOption(OPTION_PLOTFILE)) {
plotFile = new File(cmdLine.getOptionValue(OPTION_PLOTFILE));
}
boolean bDisplayImage = cmdLine.hasOption(OPTION_DISPLAY_IMAGE);
boolean bDisplayPlot = cmdLine.hasOption(OPTION_DISPLAY_PLOT);
double extentScale = DEFAULT_EXTENT_SCALE;
if (cmdLine.hasOption(OPTION_EXTENT)) {
extentScale = Double.parseDouble(cmdLine.getOptionValue(OPTION_EXTENT));
}
int imageSize = DEFAULT_IMAGE_SIZE;
if (cmdLine.hasOption(OPTION_IMAGE_SIZE)) {
imageSize = Integer.parseInt(cmdLine.getOptionValue(OPTION_IMAGE_SIZE));
}
int numParticles = DEFAULT_NUM_PARTICLES;
if (cmdLine.hasOption(OPTION_NUM_PARTICLES)) {
numParticles = Integer.parseInt(cmdLine.getOptionValue(OPTION_NUM_PARTICLES));
}
double diffusionRate = DEFAULT_DIFFUSION;
if (cmdLine.hasOption(OPTION_DIFFUSION)) {
diffusionRate = Double.parseDouble(cmdLine.getOptionValue(OPTION_DIFFUSION));
}
double bleachRadius = DEFAULT_BLEACH_RADIUS;
if (cmdLine.hasOption(OPTION_BLEACH_RADIUS)) {
bleachRadius = Double.parseDouble(cmdLine.getOptionValue(OPTION_BLEACH_RADIUS));
}
double psfRadius = DEFAULT_PSF_RADIUS;
if (cmdLine.hasOption(OPTION_PSF_RADIUS)) {
psfRadius = Double.parseDouble(cmdLine.getOptionValue(OPTION_PSF_RADIUS));
}
double bleachDuration = DEFAULT_BLEACH_DURATION;
if (cmdLine.hasOption(OPTION_BLEACH_DURATION)) {
bleachDuration = Double.parseDouble(cmdLine.getOptionValue(OPTION_BLEACH_DURATION));
}
double endTime = DEFAULT_ENDTIME;
if (cmdLine.hasOption(OPTION_ENDTIME)) {
endTime = Double.parseDouble(cmdLine.getOptionValue(OPTION_BLEACH_DURATION));
}
//
// hard coded parameters
//
Origin origin = new Origin(0, 0, 0);
Extent extent = new Extent(extentScale, extentScale, 1);
int numX = imageSize;
int numY = imageSize;
double psfVar = psfRadius * psfRadius;
BrownianDynamicsTest test = new BrownianDynamicsTest();
ImageTimeSeries<UShortImage> rawTimeSeries = test.generateTestData(origin, extent, numX, numY, numParticles, diffusionRate, psfVar, bleachRadius * bleachRadius, bNoise, bConvolve, bleachDuration, endTime);
//
if (imageFile != null) {
new ExportRawTimeSeriesToVFrapOp().exportToVFRAP(imageFile, rawTimeSeries, null);
}
//
if (bDisplayImage) {
new DisplayTimeSeriesOp().displayImageTimeSeries(rawTimeSeries, "time series", null);
}
//
// compute reduced data if needed for plotting or saving.
//
RowColumnResultSet reducedData = null;
if (bDisplayPlot || plotFile != null) {
double muX = origin.getX() + 0.5 * extent.getX();
double muY = origin.getY() + 0.5 * extent.getY();
double sigma = Math.sqrt(psfVar);
NormalizedSampleFunction gaussian = NormalizedSampleFunction.fromGaussian("psf", origin, extent, new ISize(numX, numY, 1), muX, muY, sigma);
reducedData = new GenerateReducedDataOp().generateReducedData(rawTimeSeries, new NormalizedSampleFunction[] { gaussian });
}
//
if (plotFile != null) {
FileOutputStream fos = new FileOutputStream(plotFile);
new CSV().exportTo(fos, reducedData);
}
if (bDisplayPlot) {
new DisplayPlotOp().displayPlot(reducedData, "bleached roi", null);
}
} catch (Exception e) {
e.printStackTrace();
}
}
use of cbit.vcell.VirtualMicroscopy.UShortImage in project vcell by virtualcell.
the class KenworthyParticleTest method generateFakeData.
private static ImageTimeSeries<UShortImage> generateFakeData(LocalWorkspace localWorkspace, ClientTaskStatusSupport progressListener) throws Exception {
//
// technical simulation parameters
//
double deltaX = 0.3;
double outputTimeStep = 0.3;
//
// circular 2D cell geometry
//
double cellRadius = 50.0;
String extracellularName = "ec";
String cytosolName = "cytosol";
//
// bleaching experimental protocol
//
double bleachRadius = 1.5;
double bleachDuration = 0.003;
double bleachRate = 500.0;
double postbleachDelay = 0.001;
double postbleachDuration = 25.0;
double psfSigma = 0.01;
//
// underlying physiological model
//
double primaryDiffusionRate = 2.0;
double primaryFraction = 1.0;
double bleachMonitorRate = 0.0000005;
double secondaryDiffusionRate = 0.0;
double secondaryFraction = 0.0;
//
// generate corresponding BioModel with Application and Simulation ready for simulation.
//
Context context = new Context() {
@Override
public User getDefaultOwner() {
return LocalWorkspace.getDefaultOwner();
}
@Override
public KeyValue createNewKeyValue() {
return LocalWorkspace.createNewKeyValue();
}
};
GeneratedModelResults results = new Generate2DExpModel_GaussianBleachOp().generateModel(deltaX, bleachRadius, cellRadius, bleachDuration, bleachRate, postbleachDelay, postbleachDuration, psfSigma, outputTimeStep, primaryDiffusionRate, primaryFraction, bleachMonitorRate, secondaryDiffusionRate, secondaryFraction, extracellularName, cytosolName, context);
Simulation simulation = results.simulation_2D;
double bleachBlackoutStartTime = results.bleachBlackoutBeginTime;
double bleachBlackoutStopTime = results.bleachBlackoutEndTime;
//
// run simulation to get simulated fluorescence (with noise)
//
boolean hasNoise = true;
double maxIntensity = 60000.0;
ImageTimeSeries<UShortImage> simulatedFluorescence = new RunFakeSimOp().runRefSimulation(localWorkspace, simulation, maxIntensity, bleachBlackoutStartTime, bleachBlackoutStopTime, hasNoise, progressListener);
return simulatedFluorescence;
}
use of cbit.vcell.VirtualMicroscopy.UShortImage in project vcell by virtualcell.
the class PhotoactivationExperimentTest method analyzePhotoactivation.
/**
* Fits raw image time series data to uniform disk models (with Guassian or Uniform fluorescence).
*
* @param rawTimeSeriesImages
* @param localWorkspace
* @throws Exception
*/
private static void analyzePhotoactivation(ImageTimeSeries<UShortImage> rawTimeSeriesImages, LocalWorkspace localWorkspace) throws Exception {
//
// correct the timestamps (1 per second).
//
double[] timeStamps = rawTimeSeriesImages.getImageTimeStamps();
for (int i = 0; i < timeStamps.length; i++) {
timeStamps[i] = i;
}
new DisplayTimeSeriesOp().displayImageTimeSeries(rawTimeSeriesImages, "raw images", (WindowListener) null);
ImageTimeSeries<UShortImage> blurredRaw = blurTimeSeries(rawTimeSeriesImages);
new DisplayTimeSeriesOp().displayImageTimeSeries(blurredRaw, "blurred raw images", (WindowListener) null);
double cellThreshold = 0.4;
GeometryRoisAndActivationTiming cellROIresults = new GenerateCellROIsFromRawPhotoactivationTimeSeriesOp().generate(blurredRaw, cellThreshold);
ROI backgroundROI = cellROIresults.backgroundROI_2D;
ROI cellROI = cellROIresults.cellROI_2D;
int indexOfFirstPostactivation = cellROIresults.indexOfFirstPostactivation;
boolean backgroundSubtract = false;
boolean normalizeByPreActivation = false;
NormalizedPhotoactivationDataResults normResults = new GenerateNormalizedPhotoactivationDataOp().generate(rawTimeSeriesImages, backgroundROI, indexOfFirstPostactivation, backgroundSubtract, normalizeByPreActivation);
ImageTimeSeries<FloatImage> normalizedTimeSeries = normResults.normalizedPhotoactivationData;
FloatImage preactivationAvg = normResults.preactivationAverageImage;
FloatImage normalizedPostactivation = normalizedTimeSeries.getAllImages()[0];
new DisplayTimeSeriesOp().displayImageTimeSeries(normalizedTimeSeries, "normalized images", (WindowListener) null);
//
// create a single bleach ROI by thresholding
//
double activatedThreshold = 1000;
ROI activatedROI = new GenerateActivationRoiOp().generateActivatedRoi(blurredRaw.getAllImages()[indexOfFirstPostactivation], cellROI, activatedThreshold);
new DisplayImageOp().displayImage(activatedROI.getRoiImages()[0], "activated roi", null);
new DisplayImageOp().displayImage(cellROI.getRoiImages()[0], "cell roi", null);
new DisplayImageOp().displayImage(backgroundROI.getRoiImages()[0], "background roi", null);
{
//
// only use bleach ROI for fitting etc.
//
NormalizedSampleFunction[] dataROIs = new NormalizedSampleFunction[] { NormalizedSampleFunction.fromROI(activatedROI) };
//
// get reduced data and errors for each ROI
//
RowColumnResultSet reducedData = new GenerateReducedDataOp().generateReducedData(normalizedTimeSeries, dataROIs);
RowColumnResultSet measurementErrors = new ComputeMeasurementErrorOp().computeNormalizedMeasurementError(dataROIs, indexOfFirstPostactivation, rawTimeSeriesImages, preactivationAvg, null);
DisplayPlotOp displayReducedData = new DisplayPlotOp();
displayReducedData.displayPlot(reducedData, "reduced data", null);
DisplayPlotOp displayMeasurementError = new DisplayPlotOp();
displayMeasurementError.displayPlot(measurementErrors, "measurement error", null);
//
// 2 parameter uniform disk model
//
Parameter tau = new Parameter("tau", 0.001, 200.0, 1.0, 0.1);
Parameter f_init = new Parameter("f_init", 0.5, 4000, 1.0, 1.0);
Parameter f_final = new Parameter("f_final", 0.01, 4000, 1.0, 0.5);
Parameter[] parameters = new Parameter[] { tau, f_init, f_final };
OptModel optModel = new OptModel("photoactivation (activated roi)", parameters) {
@Override
public double[][] getSolution0(double[] newParams, double[] solutionTimePoints) {
double tau = newParams[0];
double max = newParams[1];
double offset = newParams[2];
double[][] solution = new double[1][solutionTimePoints.length];
for (int i = 0; i < solution[0].length; i++) {
double t = solutionTimePoints[i];
solution[0][i] = offset + (max - offset) * Math.exp(-t / tau);
}
return solution;
}
@Override
public double getPenalty(double[] parameters2) {
return 0;
}
};
ErrorFunction errorFunction = new ErrorFunctionNoiseWeightedL2();
OptContext uniformDisk2Context = new Generate2DOptContextOp().generate2DOptContext(optModel, reducedData, measurementErrors, errorFunction);
new DisplayInteractiveModelOp().displayOptModel(uniformDisk2Context, dataROIs, localWorkspace, "nonspatial photoactivation - activated ROI only", null);
}
{
//
// only activation ROI for chemistry, cellROI for bleaching
//
NormalizedSampleFunction[] dataROIs = new NormalizedSampleFunction[] { NormalizedSampleFunction.fromROI(activatedROI), NormalizedSampleFunction.fromROI(cellROI) };
//
// get reduced data and errors for each ROI
//
RowColumnResultSet reducedData = new GenerateReducedDataOp().generateReducedData(normalizedTimeSeries, dataROIs);
RowColumnResultSet measurementErrors = new ComputeMeasurementErrorOp().computeNormalizedMeasurementError(dataROIs, indexOfFirstPostactivation, rawTimeSeriesImages, preactivationAvg, null);
DisplayPlotOp displayReducedData = new DisplayPlotOp();
displayReducedData.displayPlot(reducedData, "reduced data (2)", null);
DisplayPlotOp displayMeasurementError = new DisplayPlotOp();
displayMeasurementError.displayPlot(measurementErrors, "measurement error (2)", null);
//
// 2 parameter uniform disk model
//
Parameter tau_active = new Parameter("tau_active", 0.001, 200.0, 1.0, 0.1);
Parameter f_active_init = new Parameter("f_active_init", 0.5, 4000, 1.0, 1.0);
Parameter f_active_amplitude = new Parameter("f_active_amplitude", 0.01, 4000, 1.0, 0.5);
Parameter f_cell_init = new Parameter("f_cell_init", 0.01, 4000, 1.0, 0.1);
Parameter f_cell_amplitude = new Parameter("f_cell_amplitude", 0.01, 4000, 1.0, 0.1);
Parameter tau_cell = new Parameter("tau_cell", 0.00001, 200, 1.0, 1);
Parameter[] parameters = new Parameter[] { tau_active, f_active_init, f_active_amplitude, tau_cell, f_cell_init, f_cell_amplitude };
OptModel optModel = new OptModel("photoactivation (activated and cell rois)", parameters) {
@Override
public double[][] getSolution0(double[] newParams, double[] solutionTimePoints) {
double tau_active = newParams[0];
double max_active = newParams[1];
double amplitude_active = newParams[2];
double tau_cell = newParams[3];
double max_cell = newParams[4];
double amplitude_cell = newParams[5];
final int ACTIVE_ROI = 0;
final int CELL_ROI = 1;
final int NUM_ROIS = 2;
double[][] solution = new double[NUM_ROIS][solutionTimePoints.length];
for (int i = 0; i < solution[0].length; i++) {
double t = solutionTimePoints[i];
solution[ACTIVE_ROI][i] = (max_active - amplitude_active) + (amplitude_active) * Math.exp(-t / tau_active) * Math.exp(-t / tau_cell);
solution[CELL_ROI][i] = (max_cell - amplitude_cell) + (amplitude_cell) * Math.exp(-t / tau_cell);
}
return solution;
}
@Override
public double getPenalty(double[] parameters2) {
return 0;
}
};
ErrorFunctionNoiseWeightedL2 errorFunction = new ErrorFunctionNoiseWeightedL2();
OptContext uniformDisk2Context = new Generate2DOptContextOp().generate2DOptContext(optModel, reducedData, measurementErrors, errorFunction);
new DisplayInteractiveModelOp().displayOptModel(uniformDisk2Context, dataROIs, localWorkspace, "nonspatial photoactivation - activated and cell ROIs", null);
}
}
Aggregations