use of ij.macro.Interpreter in project imagej1 by imagej.
the class ImageInfo method getInfo.
private String getInfo(ImagePlus imp, ImageProcessor ip) {
String s = new String("");
if (IJ.getInstance() != null)
s += IJ.getInstance().getInfo() + "\n \n";
s += "Title: " + imp.getTitle() + "\n";
Calibration cal = imp.getCalibration();
int stackSize = imp.getStackSize();
int channels = imp.getNChannels();
int slices = imp.getNSlices();
int frames = imp.getNFrames();
int digits = imp.getBitDepth() == 32 ? 4 : 0;
int dp, dp2;
boolean nonUniformUnits = !cal.getXUnit().equals(cal.getYUnit());
String xunit = cal.getXUnit();
String yunit = cal.getYUnit();
String zunit = cal.getZUnit();
if (cal.scaled()) {
String xunits = cal.getUnits();
String yunits = xunits;
String zunits = xunits;
if (nonUniformUnits) {
xunits = xunit;
yunits = yunit;
zunits = zunit;
}
double pw = imp.getWidth() * cal.pixelWidth;
double ph = imp.getHeight() * cal.pixelHeight;
s += "Width: " + d2s(pw) + " " + xunits + " (" + imp.getWidth() + ")\n";
s += "Height: " + d2s(ph) + " " + yunits + " (" + imp.getHeight() + ")\n";
if (slices > 1) {
double pd = slices * cal.pixelDepth;
s += "Depth: " + d2s(pd) + " " + zunits + " (" + slices + ")\n";
}
s += "Size: " + ImageWindow.getImageSize(imp) + "\n";
double xResolution = 1.0 / cal.pixelWidth;
double yResolution = 1.0 / cal.pixelHeight;
if (xResolution == yResolution)
s += "Resolution: " + d2s(xResolution) + " pixels per " + xunit + "\n";
else {
s += "X Resolution: " + d2s(xResolution) + " pixels per " + xunit + "\n";
s += "Y Resolution: " + d2s(yResolution) + " pixels per " + yunit + "\n";
}
} else {
s += "Width: " + imp.getWidth() + " pixels\n";
s += "Height: " + imp.getHeight() + " pixels\n";
if (stackSize > 1)
s += "Depth: " + slices + " pixels\n";
s += "Size: " + ImageWindow.getImageSize(imp) + "\n";
}
if (stackSize > 1) {
String vunit = cal.getUnit() + "^3";
if (nonUniformUnits)
vunit = "(" + xunit + " x " + yunit + " x " + zunit + ")";
s += "Voxel size: " + d2s(cal.pixelWidth) + "x" + d2s(cal.pixelHeight) + "x" + d2s(cal.pixelDepth) + " " + vunit + "\n";
} else {
String punit = cal.getUnit() + "^2";
if (nonUniformUnits)
punit = "(" + xunit + " x " + yunit + ")";
dp = Tools.getDecimalPlaces(cal.pixelWidth, cal.pixelHeight);
s += "Pixel size: " + d2s(cal.pixelWidth) + "x" + d2s(cal.pixelHeight) + " " + punit + "\n";
}
s += "ID: " + imp.getID() + "\n";
int type = imp.getType();
switch(type) {
case ImagePlus.GRAY8:
s += "Bits per pixel: 8 ";
String lut = "LUT";
if (imp.getProcessor().isColorLut())
lut = "color " + lut;
else
lut = "grayscale " + lut;
if (imp.isInvertedLut())
lut = "inverting " + lut;
s += "(" + lut + ")\n";
if (imp.getNChannels() > 1)
s += displayRanges(imp);
else
s += "Display range: " + (int) ip.getMin() + "-" + (int) ip.getMax() + "\n";
break;
case ImagePlus.GRAY16:
case ImagePlus.GRAY32:
if (type == ImagePlus.GRAY16) {
String sign = cal.isSigned16Bit() ? "signed" : "unsigned";
s += "Bits per pixel: 16 (" + sign + ")\n";
} else
s += "Bits per pixel: 32 (float)\n";
if (imp.getNChannels() > 1)
s += displayRanges(imp);
else {
s += "Display range: ";
double min = ip.getMin();
double max = ip.getMax();
if (cal.calibrated()) {
min = cal.getCValue((int) min);
max = cal.getCValue((int) max);
}
s += d2s(min) + " - " + d2s(max) + "\n";
}
break;
case ImagePlus.COLOR_256:
s += "Bits per pixel: 8 (color LUT)\n";
break;
case ImagePlus.COLOR_RGB:
s += "Bits per pixel: 32 (RGB)\n";
break;
}
String lutName = imp.getProp(LUT.nameKey);
if (lutName != null)
s += "LUT name: " + lutName + "\n";
double interval = cal.frameInterval;
double fps = cal.fps;
if (stackSize > 1) {
ImageStack stack = imp.getStack();
int slice = imp.getCurrentSlice();
String number = slice + "/" + stackSize;
String label = stack.getSliceLabel(slice);
if (label != null && label.contains("\n"))
label = stack.getShortSliceLabel(slice);
if (label != null && label.length() > 0)
label = " (" + label + ")";
else
label = "";
if (interval > 0.0 || fps != 0.0) {
s += "Frame: " + number + label + "\n";
if (fps != 0.0) {
String sRate = Math.abs(fps - Math.round(fps)) < 0.00001 ? IJ.d2s(fps, 0) : IJ.d2s(fps, 5);
s += "Frame rate: " + sRate + " fps\n";
}
if (interval != 0.0)
s += "Frame interval: " + ((int) interval == interval ? IJ.d2s(interval, 0) : IJ.d2s(interval, 5)) + " " + cal.getTimeUnit() + "\n";
} else
s += "Image: " + number + label + "\n";
if (imp.isHyperStack()) {
if (channels > 1)
s += " Channel: " + imp.getChannel() + "/" + channels + "\n";
if (slices > 1)
s += " Slice: " + imp.getSlice() + "/" + slices + "\n";
if (frames > 1)
s += " Frame: " + imp.getFrame() + "/" + frames + "\n";
}
if (imp.isComposite()) {
if (!imp.isHyperStack() && channels > 1)
s += " Channels: " + channels + "\n";
String mode = ((CompositeImage) imp).getModeAsString();
s += " Composite mode: \"" + mode + "\"\n";
}
if (stack.isVirtual()) {
String stackType = "virtual";
if (stack instanceof AVI_Reader)
stackType += " (AVI Reader)";
if (stack instanceof FileInfoVirtualStack)
stackType += " (FileInfoVirtualStack)";
if (stack instanceof ListVirtualStack)
stackType += " (ListVirtualStack)";
s += "Stack type: " + stackType + "\n";
}
} else if (imp.isStack()) {
// one image stack
String label = imp.getStack().getShortSliceLabel(1);
if (label != null && label.length() > 0)
s += "Image: 1/1 (" + label + ")\n";
}
if (imp.isLocked())
s += "**Locked**\n";
if (ip.getMinThreshold() == ImageProcessor.NO_THRESHOLD)
s += "No threshold\n";
else {
double lower = ip.getMinThreshold();
double upper = ip.getMaxThreshold();
String uncalibrated = "";
if (cal.calibrated()) {
uncalibrated = " (" + (int) lower + "-" + (int) upper + ")";
lower = cal.getCValue((int) lower);
upper = cal.getCValue((int) upper);
}
int lutMode = ip.getLutUpdateMode();
String mode = "red";
switch(lutMode) {
case ImageProcessor.BLACK_AND_WHITE_LUT:
mode = "B&W";
break;
case ImageProcessor.NO_LUT_UPDATE:
mode = "invisible";
break;
case ImageProcessor.OVER_UNDER_LUT:
mode = "over/under";
break;
}
s += "Threshold: " + d2s(lower) + "-" + d2s(upper) + uncalibrated + " (" + mode + ")\n";
}
ImageCanvas ic = imp.getCanvas();
double mag = ic != null ? ic.getMagnification() : 1.0;
if (mag != 1.0)
s += "Magnification: " + IJ.d2s(mag, 2) + "\n";
if (ic != null)
s += "ScaleToFit: " + ic.getScaleToFit() + "\n";
String valueUnit = cal.getValueUnit();
if (cal.calibrated()) {
s += " \n";
int curveFit = cal.getFunction();
s += "Calibration function: ";
if (curveFit == Calibration.UNCALIBRATED_OD)
s += "Uncalibrated OD\n";
else if (curveFit == Calibration.CUSTOM)
s += "Custom lookup table\n";
else
s += CurveFitter.fList[curveFit] + "\n";
double[] c = cal.getCoefficients();
if (c != null) {
s += " a: " + IJ.d2s(c[0], 6) + "\n";
s += " b: " + IJ.d2s(c[1], 6) + "\n";
if (c.length >= 3)
s += " c: " + IJ.d2s(c[2], 6) + "\n";
if (c.length >= 4)
s += " c: " + IJ.d2s(c[3], 6) + "\n";
if (c.length >= 5)
s += " c: " + IJ.d2s(c[4], 6) + "\n";
}
s += " Unit: \"" + valueUnit + "\"\n";
} else if (valueUnit != null && !valueUnit.equals("Gray Value")) {
s += "Calibration function: None\n";
s += " Unit: \"" + valueUnit + "\"\n";
} else
s += "Uncalibrated\n";
FileInfo fi = imp.getOriginalFileInfo();
if (fi != null) {
if (fi.url != null && !fi.url.equals(""))
s += "URL: " + fi.url + "\n";
else {
String defaultDir = (fi.directory == null || fi.directory.length() == 0) ? System.getProperty("user.dir") : "";
if (defaultDir.length() > 0) {
defaultDir = defaultDir.replaceAll("\\\\", "/");
defaultDir += "/";
}
s += "Path: " + defaultDir + fi.getFilePath() + "\n";
}
}
ImageWindow win = imp.getWindow();
if (win != null) {
Point loc = win.getLocation();
Rectangle bounds = GUI.getScreenBounds(win);
s += "Screen location: " + (loc.x - bounds.x) + "," + (loc.y - bounds.y) + " (" + bounds.width + "x" + bounds.height + ")\n";
}
if (IJ.isMacOSX()) {
String time = " (" + ImageWindow.setMenuBarTime + "ms)";
s += "SetMenuBarCount: " + Menus.setMenuBarCount + time + "\n";
}
String zOrigin = stackSize > 1 || cal.zOrigin != 0.0 ? "," + d2s(cal.zOrigin) : "";
String origin = d2s(cal.xOrigin) + "," + d2s(cal.yOrigin) + zOrigin;
if (!origin.equals("0,0") || cal.getInvertY())
s += "Coordinate origin: " + origin + "\n";
if (cal.getInvertY())
s += "Inverted y coordinates\n";
String pinfo = imp.getPropsInfo();
if (!pinfo.equals("0"))
s += "Properties: " + pinfo + "\n";
else
s += "No properties\n";
Overlay overlay = imp.getOverlay();
if (overlay != null) {
int n = overlay.size();
String elements = n == 1 ? " element" : " elements";
String selectable = overlay.isSelectable() ? " selectable " : " non-selectable ";
String hidden = imp.getHideOverlay() ? " (hidden)" : "";
s += "Overlay: " + n + selectable + elements + hidden + "\n";
} else
s += "No overlay\n";
Interpreter interp = Interpreter.getInstance();
if (interp != null)
s += "Macro is running" + (Interpreter.isBatchMode() ? " in batch mode" : "") + "\n";
Roi roi = imp.getRoi();
if (roi == null) {
if (cal.calibrated())
s += " \n";
s += "No selection\n";
} else if (roi instanceof RotatedRectRoi) {
s += "\nRotated rectangle selection\n";
double[] p = ((RotatedRectRoi) roi).getParams();
double dx = p[2] - p[0];
double dy = p[3] - p[1];
double major = Math.sqrt(dx * dx + dy * dy);
s += " Length: " + IJ.d2s(major, 2) + "\n";
s += " Width: " + IJ.d2s(p[4], 2) + "\n";
s += " X1: " + IJ.d2s(p[0], 2) + "\n";
s += " Y1: " + IJ.d2s(p[1], 2) + "\n";
s += " X2: " + IJ.d2s(p[2], 2) + "\n";
s += " Y2: " + IJ.d2s(p[3], 2) + "\n";
} else if (roi instanceof EllipseRoi) {
s += "\nElliptical selection\n";
double[] p = ((EllipseRoi) roi).getParams();
double dx = p[2] - p[0];
double dy = p[3] - p[1];
double major = Math.sqrt(dx * dx + dy * dy);
s += " Major: " + IJ.d2s(major, 2) + "\n";
s += " Minor: " + IJ.d2s(major * p[4], 2) + "\n";
s += " X1: " + IJ.d2s(p[0], 2) + "\n";
s += " Y1: " + IJ.d2s(p[1], 2) + "\n";
s += " X2: " + IJ.d2s(p[2], 2) + "\n";
s += " Y2: " + IJ.d2s(p[3], 2) + "\n";
s += " Aspect ratio: " + IJ.d2s(p[4], 2) + "\n";
} else {
s += " \n";
s += roi.getTypeAsString() + " Selection";
String points = null;
if (roi instanceof PointRoi) {
int npoints = ((PolygonRoi) roi).getNCoordinates();
String suffix = npoints > 1 ? "s)" : ")";
points = " (" + npoints + " point" + suffix;
}
String name = roi.getName();
if (name != null) {
s += " (\"" + name + "\")";
if (points != null)
s += "\n " + points;
} else if (points != null)
s += points;
s += "\n";
if (roi instanceof Line) {
Line line = (Line) roi;
s += " X1: " + IJ.d2s(cal.getX(line.x1d)) + "\n";
s += " Y1: " + IJ.d2s(cal.getY(line.y1d, imp.getHeight())) + "\n";
s += " X2: " + IJ.d2s(cal.getX(line.x2d)) + "\n";
s += " Y2: " + IJ.d2s(cal.getY(line.y2d, imp.getHeight())) + "\n";
} else {
Rectangle2D.Double r = roi.getFloatBounds();
int decimals = r.x == (int) r.x && r.y == (int) r.y && r.width == (int) r.width && r.height == (int) r.height ? 0 : 2;
if (cal.scaled()) {
s += " X: " + IJ.d2s(cal.getX(r.x)) + " (" + IJ.d2s(r.x, decimals) + ")\n";
s += " Y: " + IJ.d2s(cal.getY(r.y, imp.getHeight())) + " (" + IJ.d2s(yy(r.y, imp), decimals) + ")\n";
s += " Width: " + IJ.d2s(r.width * cal.pixelWidth) + " (" + IJ.d2s(r.width, decimals) + ")\n";
s += " Height: " + IJ.d2s(r.height * cal.pixelHeight) + " (" + IJ.d2s(r.height, decimals) + ")\n";
} else {
s += " X: " + IJ.d2s(r.x, decimals) + "\n";
s += " Y: " + IJ.d2s(yy(r.y, imp), decimals) + "\n";
s += " Width: " + IJ.d2s(r.width, decimals) + "\n";
s += " Height: " + IJ.d2s(r.height, decimals) + "\n";
}
}
}
return s;
}
use of ij.macro.Interpreter in project imagej1 by imagej.
the class OpenDialog method lookupPathVariable.
public static String lookupPathVariable(String path) {
if (path != null && path.indexOf(".") == -1 && !((new File(path)).exists())) {
if (path.startsWith("&"))
path = path.substring(1);
Interpreter interp = Interpreter.getInstance();
String path2 = interp != null ? interp.getStringVariable(path) : null;
if (path2 != null)
path = path2;
}
return path;
}
use of ij.macro.Interpreter in project imagej1 by imagej.
the class SaveDialog method isMacro.
boolean isMacro() {
String macroOptions = Macro.getOptions();
if (macroOptions != null) {
String path = Macro.getValue(macroOptions, title, null);
if (path == null)
path = Macro.getValue(macroOptions, "path", null);
if (path != null && path.indexOf(".") == -1 && !((new File(path)).exists())) {
// Is 'path' a macro variable?
if (path.startsWith("&"))
path = path.substring(1);
Interpreter interp = Interpreter.getInstance();
String path2 = interp != null ? interp.getStringVariable(path) : null;
if (path2 != null)
path = path2;
}
if (path != null) {
Opener o = new Opener();
dir = o.getDir(path);
name = o.getName(path);
return true;
}
}
return false;
}
use of ij.macro.Interpreter in project imagej1 by imagej.
the class IJ method handleException.
/**
* Displays a stack trace. Use the setExceptionHandler
* method() to override with a custom exception handler.
*/
public static void handleException(Throwable e) {
if (exceptionHandler != null) {
exceptionHandler.handle(e);
return;
}
if (Macro.MACRO_CANCELED.equals(e.getMessage()))
return;
CharArrayWriter caw = new CharArrayWriter();
PrintWriter pw = new PrintWriter(caw);
e.printStackTrace(pw);
String s = caw.toString();
String lineNumber = "";
if (s != null && s.contains("ThreadDeath"))
return;
Interpreter interpreter = Thread.currentThread().getName().endsWith("Macro$") ? Interpreter.getInstance() : null;
if (interpreter != null)
lineNumber = "\nMacro line number: " + interpreter.getLineNumber();
if (getInstance() != null) {
s = IJ.getInstance().getInfo() + lineNumber + "\n \n" + s;
new TextWindow("Exception", s, 500, 340);
} else
log(s);
}
use of ij.macro.Interpreter in project imagej1 by imagej.
the class TextPanel method select.
void select(int x, int y) {
Dimension d = tc.getSize();
if (iRowHeight == 0 || x > d.width || y > d.height)
return;
int r = (y / iRowHeight) - 1 + iFirstRow;
int lineWidth = iGridWidth;
if (iColCount == 1 && tc.fMetrics != null && r >= 0 && r < iRowCount) {
char[] chars = (char[]) vData.elementAt(r);
lineWidth = Math.max(tc.fMetrics.charsWidth(chars, 0, chars.length), iGridWidth);
}
if (r >= 0 && r < iRowCount && x < lineWidth) {
selOrigin = r;
selStart = r;
selEnd = r;
} else {
resetSelection();
selOrigin = r;
if (r >= iRowCount)
selOrigin = iRowCount - 1;
}
tc.repaint();
selLine = r;
Interpreter interp = Interpreter.getInstance();
if (interp != null && title.equals("Debug"))
interp.showArrayInspector(r);
}
Aggregations