use of net.imagej.ImgPlus in project vcell by virtualcell.
the class ProjectService method load.
public Task<Project, String> load(File root) {
final Task<Project, String> task = new Task<Project, String>() {
@Override
protected Project doInBackground() throws Exception {
Project project = new Project(root.getName());
String rootPath = root.getAbsolutePath();
File[] dataFiles = Paths.get(rootPath, "data").toFile().listFiles();
File[] geometryFiles = Paths.get(rootPath, "geometry").toFile().listFiles();
File[] modelDirectories = Paths.get(rootPath, "models").toFile().listFiles();
File[] resultsFiles = Paths.get(rootPath, "results").toFile().listFiles();
int numFiles = dataFiles.length + geometryFiles.length + modelDirectories.length + resultsFiles.length;
int numLoaded = 0;
if (dataFiles != null) {
for (File dataFile : dataFiles) {
try {
setSubtask(dataFile.getName());
Dataset data = datasetIOService.open(dataFile.getAbsolutePath());
project.getData().add(data);
numLoaded++;
setProgress(numLoaded * 100 / numFiles);
} catch (IOException e) {
e.printStackTrace();
}
}
}
if (geometryFiles != null) {
for (File geometryFile : geometryFiles) {
try {
setSubtask(geometryFile.getName());
Dataset geometry = datasetIOService.open(geometryFile.getAbsolutePath());
// Geometry datasets are saved as 8-bit images so we must convert back to 1-bit
if (geometry.firstElement() instanceof UnsignedByteType) {
@SuppressWarnings("unchecked") Img<UnsignedByteType> img = (Img<UnsignedByteType>) geometry.getImgPlus().getImg();
Img<BitType> converted = opService.convert().bit(img);
ImgPlus<BitType> convertedImgPlus = new ImgPlus<>(converted, geometry.getName());
geometry.setImgPlus(convertedImgPlus);
}
project.getGeometry().add(geometry);
numLoaded++;
setProgress(numLoaded * 100 / numFiles);
} catch (IOException e) {
e.printStackTrace();
}
}
}
if (modelDirectories != null) {
for (File modelDirectory : modelDirectories) {
setSubtask(modelDirectory.getName());
SBMLDocument sbmlDocument = null;
BufferedImage image = null;
File[] modelFiles = modelDirectory.listFiles();
System.out.println(modelFiles.length);
// Invalid model directory
if (modelFiles.length > 2)
continue;
for (File modelFile : modelFiles) {
System.out.println(modelFile.getName());
if (FilenameUtils.getExtension(modelFile.getName()).equals("xml")) {
sbmlDocument = new SBMLReader().readSBML(modelFile);
System.out.println("Loaded sbml");
} else if (FilenameUtils.getExtension(modelFile.getName()).equals("png")) {
image = ImageIO.read(modelFile);
System.out.println("Loaded image");
}
}
if (sbmlDocument != null) {
VCellModel vCellModel = new VCellModel(modelDirectory.getName(), null, sbmlDocument);
vCellModel.setImage(image);
project.getModels().add(vCellModel);
System.out.println("Added model");
}
numLoaded++;
setProgress(numLoaded * 100 / numFiles);
}
}
if (resultsFiles != null) {
for (File resultsFile : resultsFiles) {
try {
setSubtask(resultsFile.getName());
Dataset results = datasetIOService.open(resultsFile.getAbsolutePath());
// Loading 1-dimensional tif images adds a dimension
// so must crop out empty dimensions
@SuppressWarnings("unchecked") ImgPlus<T> imgPlus = (ImgPlus<T>) results.getImgPlus();
int numDimensions = imgPlus.numDimensions();
long[] dimensions = new long[2 * imgPlus.numDimensions()];
for (int i = 0; i < numDimensions; i++) {
dimensions[i] = 0;
dimensions[i + numDimensions] = imgPlus.dimension(i) - 1;
}
FinalInterval interval = Intervals.createMinMax(dimensions);
ImgPlus<T> cropped = opService.transform().crop(imgPlus, interval, true);
results.setImgPlus(cropped);
project.getResults().add(results);
numLoaded++;
setProgress(numLoaded * 100 / numFiles);
} catch (IOException e) {
e.printStackTrace();
}
}
}
currentProjectRoot = root;
return project;
}
};
return task;
}
Aggregations