package edu.mbl.jif.imaging.series; import java.io.File; import edu.mbl.jif.imaging.tiff.MultipageTiffFile; import edu.mbl.jif.utils.*; public class Stackificator { String directoryName = "."; int slices = 0; MultipageTiffFile[] tifFile; // Assumes Raw PolStacks of N slices public Stackificator (String directoryName, int slices) { this.directoryName = directoryName; this.slices = slices; tifFile = new MultipageTiffFile[slices]; } public void DeStackificate () { // For all the files in a directory, // all having the same number of slices, // generates [slices] files named stackSet_0.tif, stackSet_1.tif, ... // each containing a stack with [files] images. File directory = new File(directoryName); if (directory.isDirectory() == false) { if (directory.exists() == false) { System.out.println("There is no such directory!"); } else { System.out.println("That file is not a directory."); } } else { for (int i = 0; i < tifFile.length; i++) { tifFile[i] = new MultipageTiffFile("stackSet_" + i); } File[] files = directory.listFiles(); System.out.println("Files in directory \"" + directory + "\":"); for (int i = 0; i < files.length; i++) { System.out.println(files[i].getAbsolutePath()); MultipageTiffFile tifSection = new MultipageTiffFile( files[i].getAbsolutePath()); for (int j = 0; j < tifFile.length; j++) { tifFile[j].appendImage(tifSection.getImage(j)); } } } for (int j = 0; j < tifFile.length; j++) { tifFile[j].close(); } } public void ReStackificate () { File directory = new File(directoryName); if (directory.isDirectory() == false) { if (directory.exists() == false) { System.out.println("There is no such directory!"); } else { System.out.println("That file is not a directory."); } } else { for (int i = 0; i < tifFile.length; i++) { tifFile[i] = new MultipageTiffFile("stackSet_" + i); } File[] files = directory.listFiles(); for (int i = 0; i < files.length; i++) { String base = edu.mbl.jif.utils.FileUtil.getBaseName(files[i]. getAbsolutePath()); String path = edu.mbl.jif.utils.FileUtil.getJustPath(files[i]. getAbsolutePath()); base = base + "_X"; String newFile = path + "\\" + base + ".tif"; System.out.println(newFile); MultipageTiffFile tifSection = new MultipageTiffFile(newFile); for (int j = 0; j < tifFile.length; j++) { tifSection.appendImage(tifFile[j].getImage(i)); } } for (int i = 0; i < files.length; i++) { System.out.println(files[i].getAbsolutePath()); MultipageTiffFile tifSection = new MultipageTiffFile( files[i].getAbsolutePath()); for (int j = 0; j < tifFile.length; j++) { tifFile[j].appendImage(tifSection.getImage(j)); } } } for (int j = 0; j < tifFile.length; j++) { tifFile[j].close(); } } public void clearTempFiles () { for (int i = 0; i < slices; i++) { edu.mbl.jif.utils.FileUtil.deleteFile("stackSet_" + i); } } public static void main (String[] args) { String seriesDir = "C:\\PSjData\\project1\\TestSeries\\series\\PS_05_0726_1515_15"; int numberOfSlices = 5; Stackificator s = new Stackificator(seriesDir, numberOfSlices); s.DeStackificate(); // Do deconvolution... s.ReStackificate(); // s.clearTempFiles() } }