ThreeB 1.1
|
ImageJ plugin class. More...
Inherits PlugInFilter.
Public Member Functions | |
int | setup (String arg_, ImagePlus img) |
void | run (ImageProcessor ip) |
Package Attributes | |
ImagePlus | window |
ByteProcessor | mask |
String | arg |
ImageJ plugin class.
Definition at line 132 of file three_B.java.
int three_B::setup | ( | String | arg_, |
ImagePlus | img | ||
) | [inline] |
void three_B::run | ( | ImageProcessor | ip | ) | [inline] |
Definition at line 145 of file three_B.java.
References SPair::a, arg, SPair::b, Util::getFileName(), mask, Util::read(), and window.
{ //Load the config file contents Reader cfgstream = new InputStreamReader(getClass().getClassLoader().getResourceAsStream("multispot5.cfg")); String cfg = Util.read(cfgstream); try{ cfgstream.close(); } catch(IOException close_err){ Toolkit.getDefaultToolkit().beep(); ij.IJ.showStatus("Error reading config file."); return; } //Some basic error checking if reading of the config file from //the JAR archive fails. if(cfg == "") { Toolkit.getDefaultToolkit().beep(); ij.IJ.showStatus("Error reading config file."); return; } //The image from getMask() is only the size of the ROI //We need it to be congruent with the original image, in order //to work with the C++ code. mask = new ByteProcessor(ip.getWidth(), ip.getHeight()); int x = ip.getRoi().x; int y = ip.getRoi().y; //Rectangular selections do not have a mask set, so we get //a null pointer exception when we try to copy. //So, we have to manually set the pixels, rather than just //copy them try{ mask.copyBits(ip.getMask(), x, y, Blitter.COPY); } catch(NullPointerException e) { for(int r=0; r < ip.getRoi().height; r++) for(int c=0; c < ip.getRoi().width; c++) mask.set(c+x, r+y, 255); } //Count the number of set pixels in the mask. This is used to //warn the user if the number is not within a reasonable range. int count=0; for(int r=0; r < mask.getHeight(); r++) for(int c=0; c < mask.getWidth(); c++) if(mask.get(c, r) != 0) count ++; //The non-config file parameters are the range of frames to operate on //and the pixel size in nm (the config works in terms of FWHM in pixels). //These have to be sepficied whether the basic or advanced dialog is used. int firstfr; int lastfr; double pixel_size_in_nm; ImageStack s = window.getStack(); if(arg.equals("advanced")) { AdvancedDialog ad = new AdvancedDialog(cfg, s.getSize()); if(!ad.wasOKed()) return; cfg = ad.getTextArea1().getText(); /*pixel_size_in_nm = ad.getPixelSize(); firstfr = ad.getFirstFrame(); lastfr = ad.getLastFrame();*/ pixel_size_in_nm = ad.getNextNumber(); firstfr = (int)ad.getNextNumber(); lastfr = (int)ad.getNextNumber(); } else { ThreeBDialog gd = new ThreeBDialog(count, mask.getWidth()*mask.getHeight(), s.getSize()); gd.showDialog(); if(!gd.wasOKed()) return; /*final double fwhm = gd.getFWHM(); pixel_size_in_nm = gd.getPixelSize(); final int initial_spots = gd.getSpots(); firstfr = gd.getFirstFrame(); lastfr = gd.getLastFrame();*/ //We have to use getNextNumber, otherwise macro recording does not work. final double fwhm = gd.getNextNumber(); pixel_size_in_nm = gd.getNextNumber(); final int initial_spots = (int)gd.getNextNumber(); firstfr = (int)gd.getNextNumber(); lastfr = (int)gd.getNextNumber(); //Compute the parameters of the log-normal prior such that the mode //matches the size of the spots. final double sigma = (fwhm / pixel_size_in_nm) / (2*Math.sqrt(2*Math.log(2))); final double blur_sigma=0.1; //s = exp(mu-sig^2) //ln s = mu - sig^2 //mu = ln s + sig^2 final double blur_mu = Math.log(sigma) + blur_sigma*blur_sigma; //Initialized from the current time. Random rng = new Random(); // //Append stuff to the config file now. This will be parsed later in C++. cfg = cfg + "placement.uniform.num_spots=" + Integer.toString(initial_spots) + "\n" + "blur.mu=" + Double.toString(blur_mu) + "\n" + "blur.sigma=" + Double.toString(blur_sigma) + "\n" + "seed=" + Integer.toString(rng.nextInt(16777216)) + "\n"; } //Acquire a filename to save moderately safely. SPair f = Util.getFileName(window.getTitle()); final String fname = f.a; final String fullname = f.b; if(fname!= null) { //Create the 3B runner and the control panel, then execute the control panel in the //GUI thread. final Rectangle roi = ip.getRoi(); final double pixel_size_in_nm_ = pixel_size_in_nm; final ThreeBRunner tbr = new ThreeBRunner(mask, s, cfg, fullname, firstfr, lastfr); SwingUtilities.invokeLater( new Runnable() { public void run() { new EControlPanel(roi, pixel_size_in_nm_, fname, tbr); } } ); } }
ImagePlus three_B::window [package] |
Definition at line 134 of file three_B.java.
ByteProcessor three_B::mask [package] |
Definition at line 135 of file three_B.java.
Referenced by run().
String three_B::arg [package] |
Definition at line 136 of file three_B.java.