use of org.vcell.util.Extent in project vcell by virtualcell.
the class XmlHelper method imageToXML.
static String imageToXML(VCImage vcImage, boolean printKeys) throws XmlParseException {
String xmlString = null;
if (vcImage == null) {
throw new XmlParseException("Invalid input for VCImage: " + vcImage);
}
Xmlproducer xmlProducer = new Xmlproducer(printKeys);
Extent extent = vcImage.getExtent();
Element container = new Element(IMAGE_CONTAINER);
Element imageElement = xmlProducer.getXML(vcImage);
Element extentElement = xmlProducer.getXML(extent);
container.addContent(imageElement);
container.addContent(extentElement);
container = XmlUtil.setDefaultNamespace(container, Namespace.getNamespace(XMLTags.VCML_NS));
xmlString = XmlUtil.xmlToString(container);
return xmlString;
}
use of org.vcell.util.Extent in project vcell by virtualcell.
the class FunctionRangeGenerator method main.
public static void main(String[] args) {
try {
Expression exp = new Expression("a+log(b)+c");
VarStatistics[] varStats = new VarStatistics[3];
varStats[0] = new VarStatistics("a", new double[] { 1.0, 2.0, 3.0 }, new double[] { 1.0, 2.0, 3.0 });
varStats[1] = new VarStatistics("b", new double[] { 1.0, 2.0, 3.0 }, new double[] { 1.0, 2.0, 3.0 });
varStats[2] = new VarStatistics("c", new double[] { 1.0, 2.0, 3.0 }, new double[] { 1.0, 2.0, 3.0 });
double[] times = new double[] { 0.0, 1.0, 2.0 };
Extent extent = new Extent(5, 5, 5);
Origin origin = new Origin(0, 0, 0);
// int numSamplesPerDim = 10;
byte[] pixels = new byte[3 * 3 * 3];
BitSet indomain = new BitSet(pixels.length);
for (int i = 0; i < pixels.length; i++) {
indomain.set(i);
}
VCImageUncompressed vcImage = new VCImageUncompressed(null, pixels, extent, 3, 3, 3);
RegionImage regionImage = new RegionImage(vcImage, 3, extent, origin, RegionImage.NO_SMOOTHING);
CartesianMesh mesh = CartesianMesh.createSimpleCartesianMesh(origin, extent, new ISize(regionImage.getNumX(), regionImage.getNumY(), regionImage.getNumZ()), regionImage, true);
FunctionStatistics results = FunctionRangeGenerator.getFunctionStatistics(exp, varStats, times, mesh, indomain, VariableType.VOLUME);
System.out.println(results.getDefaultDatasetRange().toString());
} catch (Exception e) {
e.printStackTrace();
}
}
use of org.vcell.util.Extent in project vcell by virtualcell.
the class DisplayTimeSeries method displayImageTimeSeries.
public static void displayImageTimeSeries(final ImageTimeSeries<Image> imageTimeSeries, String title, WindowListener windowListener) throws ImageException, IOException {
ISize size = imageTimeSeries.getISize();
int dimension = (size.getZ() > 0) ? (3) : (2);
Extent extent = imageTimeSeries.getExtent();
Origin origin = imageTimeSeries.getAllImages()[0].getOrigin();
// don't care ... no surfaces
double filterCutoffFrequency = 0.5;
VCImage vcImage = new VCImageUncompressed(null, new byte[size.getXYZ()], extent, size.getX(), size.getY(), size.getZ());
RegionImage regionImage = new RegionImage(vcImage, dimension, extent, origin, filterCutoffFrequency);
final CartesianMesh mesh = CartesianMesh.createSimpleCartesianMesh(origin, extent, size, regionImage);
final DataIdentifier dataIdentifier = new DataIdentifier("var", VariableType.VOLUME, new Domain("domain"), false, "var");
final DataSetController dataSetController = new DataSetController() {
@Override
public ExportEvent makeRemoteFile(OutputContext outputContext, ExportSpecs exportSpecs) throws DataAccessException, RemoteProxyException {
throw new RuntimeException("not yet implemented");
}
@Override
public TimeSeriesJobResults getTimeSeriesValues(OutputContext outputContext, VCDataIdentifier vcdataID, TimeSeriesJobSpec timeSeriesJobSpec) throws RemoteProxyException, DataAccessException {
throw new RuntimeException("not yet implemented");
}
@Override
public SimDataBlock getSimDataBlock(OutputContext outputContext, VCDataIdentifier vcdataID, String varName, double time) throws RemoteProxyException, DataAccessException {
double timePoint = time;
double[] timePoints = getDataSetTimes(vcdataID);
int index = -1;
for (int i = 0; i < timePoints.length; i++) {
if (timePoint == timePoints[i]) {
index = i;
break;
}
}
double[] data = imageTimeSeries.getAllImages()[index].getDoublePixels();
PDEDataInfo pdeDataInfo = new PDEDataInfo(null, null, varName, time, 0);
VariableType varType = VariableType.VOLUME;
return new SimDataBlock(pdeDataInfo, data, varType);
}
@Override
public boolean getParticleDataExists(VCDataIdentifier vcdataID) throws DataAccessException, RemoteProxyException {
return false;
}
@Override
public ParticleDataBlock getParticleDataBlock(VCDataIdentifier vcdataID, double time) throws DataAccessException, RemoteProxyException {
return null;
}
@Override
public ODESimData getODEData(VCDataIdentifier vcdataID) throws DataAccessException, RemoteProxyException {
return null;
}
@Override
public CartesianMesh getMesh(VCDataIdentifier vcdataID) throws RemoteProxyException, DataAccessException {
return mesh;
}
@Override
public PlotData getLineScan(OutputContext outputContext, VCDataIdentifier vcdataID, String variable, double time, SpatialSelection spatialSelection) throws RemoteProxyException, DataAccessException {
throw new RuntimeException("not yet implemented");
}
@Override
public AnnotatedFunction[] getFunctions(OutputContext outputContext, VCDataIdentifier vcdataID) throws DataAccessException, RemoteProxyException {
return new AnnotatedFunction[0];
}
@Override
public double[] getDataSetTimes(VCDataIdentifier vcdataID) throws RemoteProxyException, DataAccessException {
return imageTimeSeries.getImageTimeStamps();
}
@Override
public DataSetTimeSeries getDataSetTimeSeries(VCDataIdentifier vcdataID, String[] variableNames) throws DataAccessException, RemoteProxyException {
throw new RuntimeException("not yet implemented");
}
@Override
public DataSetMetadata getDataSetMetadata(VCDataIdentifier vcdataID) throws DataAccessException, RemoteProxyException {
throw new RuntimeException("not yet implemented");
}
@Override
public DataIdentifier[] getDataIdentifiers(OutputContext outputContext, VCDataIdentifier vcdataID) throws RemoteProxyException, DataAccessException {
return new DataIdentifier[] { dataIdentifier };
}
@Override
public FieldDataFileOperationResults fieldDataFileOperation(FieldDataFileOperationSpec fieldDataFileOperationSpec) throws RemoteProxyException, DataAccessException {
throw new RuntimeException("not yet implemented");
}
@Override
public DataOperationResults doDataOperation(DataOperation dataOperation) throws DataAccessException, RemoteProxyException {
throw new RuntimeException("not yet implemented");
}
@Override
public VtuFileContainer getEmptyVtuMeshFiles(VCDataIdentifier vcdataID, int timeIndex) throws RemoteProxyException, DataAccessException {
throw new RuntimeException("not yet implemented");
}
@Override
public double[] getVtuTimes(VCDataIdentifier vcdataID) throws RemoteProxyException, DataAccessException {
throw new RuntimeException("not yet implemented");
}
@Override
public double[] getVtuMeshData(OutputContext outputContext, VCDataIdentifier vcdataID, VtuVarInfo var, double time) throws RemoteProxyException, DataAccessException {
// TODO Auto-generated method stub
return null;
}
@Override
public VtuVarInfo[] getVtuVarInfos(OutputContext outputContext, VCDataIdentifier vcDataIdentifier) throws DataAccessException, RemoteProxyException {
// TODO Auto-generated method stub
return null;
}
@Override
public NFSimMolecularConfigurations getNFSimMolecularConfigurations(VCDataIdentifier vcdataID) throws RemoteProxyException, DataAccessException {
// TODO Auto-generated method stub
return null;
}
};
DataSetControllerProvider dataSetControllerProvider = new DataSetControllerProvider() {
@Override
public DataSetController getDataSetController() throws DataAccessException {
return dataSetController;
}
};
VCDataManager vcDataManager = new VCDataManager(dataSetControllerProvider);
OutputContext outputContext = new OutputContext(new AnnotatedFunction[0]);
VCDataIdentifier vcDataIdentifier = new VCDataIdentifier() {
public User getOwner() {
return new User("nouser", null);
}
public KeyValue getDataKey() {
return null;
}
public String getID() {
return "mydata";
}
};
PDEDataManager pdeDataManager = new PDEDataManager(outputContext, vcDataManager, vcDataIdentifier);
ClientPDEDataContext myPdeDataContext = new ClientPDEDataContext(pdeDataManager);
PDEDataViewer pdeDataViewer = new PDEDataViewer();
JFrame jframe = new JFrame();
jframe.setTitle(title);
jframe.getContentPane().add(pdeDataViewer);
jframe.setSize(1000, 600);
jframe.setVisible(true);
if (windowListener != null) {
jframe.addWindowListener(windowListener);
}
pdeDataViewer.setPdeDataContext(myPdeDataContext);
}
use of org.vcell.util.Extent 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();
}
}
use of org.vcell.util.Extent 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;
}
Aggregations