Search in sources :

Example 61 with Origin

use of org.vcell.util.Origin in project vcell by virtualcell.

the class GenerateTrivial2DPsfOp method generateTrivial2D_Psf.

public UShortImage generateTrivial2D_Psf() {
    // psf image is now expecting a 3x3 image that are all zeros with a 1 in the middle (Kronecker delta)
    short[] pixels = new short[] { 0, 0, 0, 0, 1, 0, 0, 0, 0 };
    Origin origin = new Origin(0, 0, 0);
    Extent extent = new Extent(1, 1, 1);
    ISize isize = new ISize(3, 3, 1);
    UShortImage psfImage;
    try {
        psfImage = new UShortImage(pixels, origin, extent, isize.getX(), isize.getY(), isize.getZ());
    } catch (ImageException e) {
        e.printStackTrace();
        throw new RuntimeException("unexpected image exception: " + e.getMessage(), e);
    }
    return psfImage;
}
Also used : Origin(org.vcell.util.Origin) ImageException(cbit.image.ImageException) Extent(org.vcell.util.Extent) ISize(org.vcell.util.ISize) UShortImage(cbit.vcell.VirtualMicroscopy.UShortImage)

Example 62 with Origin

use of org.vcell.util.Origin in project vcell by virtualcell.

the class FitBleachSpotOp method main.

public static void main(String[] args) {
    try {
        int numX = 100;
        int numY = 100;
        double center_i = 52.44;
        double center_j = 51.39;
        double K = 30;
        double high = 0.9;
        double sigma2 = 4;
        float[] pixels = new float[numX * numY];
        Origin origin = new Origin(0, 0, 0);
        Extent extent = new Extent(1, 1, 1);
        FloatImage image = new FloatImage(pixels, origin, extent, numX, numY, 1);
        int index = 0;
        for (int j = 0; j < numY; j++) {
            for (int i = 0; i < numX; i++) {
                double radius = ((i - center_i) * (i - center_i) + (j - center_j) * (j - center_j));
                pixels[index++] = (float) (high - FastMath.exp(-K * FastMath.exp(-radius / sigma2)));
            }
        }
        double init_center_i = 50;
        double init_center_j = 50;
        double init_sigma2 = 2;
        GaussianFitResults fitResults = fitToGaussian(init_center_i, init_center_j, init_sigma2, image);
        System.out.println(fitResults);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
Also used : Origin(org.vcell.util.Origin) FloatImage(cbit.vcell.VirtualMicroscopy.FloatImage) Extent(org.vcell.util.Extent)

Example 63 with Origin

use of org.vcell.util.Origin in project vcell by virtualcell.

the class FitBleachSpotOp method fit.

public FitBleachSpotOpResults fit(NormalizedSampleFunction bleachROI, FloatImage normImage) {
    // 
    // find initial guess by centroid from bleach ROI and total area of bleach ROI (assuming a circle of radius R)
    // 
    ISize size = bleachROI.getISize();
    if (size.getZ() > 1) {
        throw new RuntimeException("expecting 2D bleach region ROI");
    }
    short[] pixels = bleachROI.toROI(1e-5).getBinaryPixelsXYZ(1);
    long numPixelsInROI = 0;
    Extent extent = bleachROI.getExtent();
    double totalX_um = 0.0;
    double totalY_um = 0.0;
    double total_I = 0.0;
    double total_J = 0.0;
    int pixelIndex = 0;
    for (int i = 0; i < size.getX(); i++) {
        double x = extent.getX() * (i + 0.5) / (size.getX() - 1);
        for (int j = 0; j < size.getY(); j++) {
            if (pixels[pixelIndex] != 0) {
                double y = extent.getY() * (j + 0.5) / (size.getY() - 1);
                totalX_um += x;
                totalY_um += y;
                total_I += i;
                total_J += j;
                numPixelsInROI++;
            }
            pixelIndex++;
        }
    }
    Origin origin = bleachROI.getOrigin();
    double roiCenterX_um = origin.getX() + totalX_um / numPixelsInROI;
    double roiCenterY_um = origin.getY() + totalY_um / numPixelsInROI;
    double roiCenterI_pixelscale = total_I / numPixelsInROI;
    double roiCenterJ_pixelscale = total_J / numPixelsInROI;
    // Area = PI * R^2
    // R = sqrt(Area/PI)
    double roiBleachSpotArea_um2 = (extent.getX() * extent.getY() * numPixelsInROI) / (size.getX() * size.getY());
    double roiBleachRadius_um = Math.sqrt(roiBleachSpotArea_um2 / Math.PI);
    double roiBleachRadius_pixelscale = Math.sqrt(numPixelsInROI / Math.PI);
    FitBleachSpotOpResults results = new FitBleachSpotOpResults();
    results.bleachRadius_ROI = roiBleachRadius_um;
    results.centerX_ROI = roiCenterX_um;
    results.centerY_ROI = roiCenterY_um;
    GaussianFitResults gfresults = fitToGaussian(roiCenterI_pixelscale, roiCenterJ_pixelscale, roiBleachRadius_pixelscale * roiBleachRadius_pixelscale, normImage);
    results.bleachFactorK_GaussianFit = gfresults.K;
    results.bleachRadius_GaussianFit = Math.sqrt(gfresults.radius2);
    results.centerX_GaussianFit = origin.getX() + extent.getX() * (gfresults.centerI + 0.5) / size.getX();
    results.centerY_GaussianFit = origin.getY() + extent.getY() * (gfresults.centerJ + 0.5) / size.getY();
    return results;
}
Also used : Origin(org.vcell.util.Origin) Extent(org.vcell.util.Extent) ISize(org.vcell.util.ISize)

Example 64 with Origin

use of org.vcell.util.Origin in project vcell by virtualcell.

the class RunFakeSimOp method runRefSimulation.

public ImageTimeSeries<UShortImage> runRefSimulation(LocalWorkspace localWorkspace, Simulation simulation, double max_intensity, double bleachBlackoutStartTime, double bleachBlackoutStopTime, boolean hasNoise, ClientTaskStatusSupport progressListener) throws Exception {
    User owner = LocalWorkspace.getDefaultOwner();
    KeyValue simKey = LocalWorkspace.createNewKeyValue();
    runFVSolverStandalone(new File(localWorkspace.getDefaultSimDataDirectory()), simulation, progressListener);
    Extent extent = simulation.getMathDescription().getGeometry().getExtent();
    Origin origin = simulation.getMathDescription().getGeometry().getOrigin();
    VCDataIdentifier vcDataIdentifier = new VCSimulationDataIdentifier(new VCSimulationIdentifier(simulation.getKey(), simulation.getVersion().getOwner()), 0);
    CartesianMesh mesh = localWorkspace.getDataSetControllerImpl().getMesh(vcDataIdentifier);
    ISize isize = new ISize(mesh.getSizeX(), mesh.getSizeY(), mesh.getSizeZ());
    double[] dataTimes = localWorkspace.getDataSetControllerImpl().getDataSetTimes(vcDataIdentifier);
    DataProcessingOutputDataValues dataProcessingOutputDataValues = (DataProcessingOutputDataValues) localWorkspace.getDataSetControllerImpl().doDataOperation(new DataProcessingOutputDataValuesOP(vcDataIdentifier, SimulationContext.FLUOR_DATA_NAME, TimePointHelper.createAllTimeTimePointHelper(), DataIndexHelper.createSliceDataIndexHelper(0), null, null));
    ArrayList<SourceDataInfo> sourceDataInfoArr = dataProcessingOutputDataValues.createSourceDataInfos(new ISize(mesh.getSizeX(), mesh.getSizeY(), 1), origin, extent);
    // find scale factor to scale up the data to avoid losing precision when casting double to short
    double maxDataValue = 0;
    for (int i = 0; i < dataTimes.length; i++) {
        if (sourceDataInfoArr.get(i).getMinMax() != null) {
            maxDataValue = Math.max(maxDataValue, sourceDataInfoArr.get(i).getMinMax().getMax());
        } else {
            double[] doubleData = (double[]) sourceDataInfoArr.get(i).getData();
            for (int j = 0; j < doubleData.length; j++) {
                maxDataValue = Math.max(maxDataValue, doubleData[j]);
            }
        }
    }
    double scale = max_intensity / maxDataValue;
    ArrayList<UShortImage> outputImages = new ArrayList<UShortImage>();
    ArrayList<Double> outputTimes = new ArrayList<Double>();
    for (int i = 0; i < dataTimes.length; i++) {
        if (dataTimes[i] < bleachBlackoutStartTime || dataTimes[i] > bleachBlackoutStopTime) {
            // saving each time step 2D double array to a UShortImage
            double[] doubleData = (double[]) sourceDataInfoArr.get(i).getData();
            short[] shortData = new short[isize.getX() * isize.getY()];
            for (int j = 0; j < shortData.length; j++) {
                double dData = doubleData[j] * scale;
                if (dData < 0 || dData > 65535.0) {
                    throw new RuntimeException("scaled pixel out of range of unsigned 16 bit integer, original simulated value = " + doubleData[j] + ", scale = " + scale + ", scaled value = " + dData);
                }
                short sData = (short) (0x0000ffff & ((int) dData));
                if (hasNoise && dData > 0.0) {
                    if (dData > 20) {
                        shortData[j] = (short) (0x0000ffff & (int) RandomVariable.normal(dData, Math.sqrt(dData)));
                    } else {
                        shortData[j] = (short) (0x0000ffff & RandomVariable.poisson(dData));
                    }
                } else {
                    shortData[j] = sData;
                }
            }
            outputTimes.add(dataTimes[i]);
            outputImages.add(new UShortImage(shortData, sourceDataInfoArr.get(i).getOrigin(), sourceDataInfoArr.get(i).getExtent(), sourceDataInfoArr.get(i).getXSize(), sourceDataInfoArr.get(i).getYSize(), 1));
            if (progressListener != null) {
                int progress = (int) (((i + 1) * 1.0 / dataTimes.length) * 100);
                progressListener.setProgress(progress);
            }
        }
    }
    double[] outputTimesArray = new double[outputTimes.size()];
    for (int i = 0; i < outputTimes.size(); i++) {
        outputTimesArray[i] = outputTimes.get(i);
    }
    ImageTimeSeries<UShortImage> fakeFluorTimeSeries = new ImageTimeSeries<UShortImage>(UShortImage.class, outputImages.toArray(new UShortImage[0]), outputTimesArray, 1);
    return fakeFluorTimeSeries;
}
Also used : Origin(org.vcell.util.Origin) VCSimulationIdentifier(cbit.vcell.solver.VCSimulationIdentifier) User(org.vcell.util.document.User) KeyValue(org.vcell.util.document.KeyValue) Extent(org.vcell.util.Extent) ISize(org.vcell.util.ISize) ArrayList(java.util.ArrayList) SourceDataInfo(cbit.image.SourceDataInfo) ImageTimeSeries(org.vcell.vmicro.workflow.data.ImageTimeSeries) UShortImage(cbit.vcell.VirtualMicroscopy.UShortImage) VCSimulationDataIdentifier(cbit.vcell.solver.VCSimulationDataIdentifier) CartesianMesh(cbit.vcell.solvers.CartesianMesh) DataProcessingOutputDataValuesOP(cbit.vcell.simdata.DataOperation.DataProcessingOutputDataValuesOP) DataProcessingOutputDataValues(cbit.vcell.simdata.DataOperationResults.DataProcessingOutputDataValues) File(java.io.File) VCDataIdentifier(org.vcell.util.document.VCDataIdentifier)

Aggregations

Origin (org.vcell.util.Origin)64 Extent (org.vcell.util.Extent)58 ISize (org.vcell.util.ISize)45 CartesianMesh (cbit.vcell.solvers.CartesianMesh)18 VCImageUncompressed (cbit.image.VCImageUncompressed)17 FieldDataFileOperationSpec (cbit.vcell.field.io.FieldDataFileOperationSpec)17 ImageException (cbit.image.ImageException)14 RegionImage (cbit.vcell.geometry.RegionImage)14 VCImage (cbit.image.VCImage)13 ArrayList (java.util.ArrayList)13 Expression (cbit.vcell.parser.Expression)12 IOException (java.io.IOException)12 SubVolume (cbit.vcell.geometry.SubVolume)11 File (java.io.File)11 UShortImage (cbit.vcell.VirtualMicroscopy.UShortImage)10 Geometry (cbit.vcell.geometry.Geometry)9 ExternalDataIdentifier (org.vcell.util.document.ExternalDataIdentifier)8 ImageDataset (cbit.vcell.VirtualMicroscopy.ImageDataset)7 BioModel (cbit.vcell.biomodel.BioModel)7 AnalyticSubVolume (cbit.vcell.geometry.AnalyticSubVolume)7