Posted by
Christine Labno-2 on
Sep 23, 2013; 5:35pm
URL: http://imagej.273.s1.nabble.com/Summarize-table-not-writing-in-macro-tp5004888p5004909.html
Hi Scott,
Since you asked for guidance, here are a couple of suggestions, followed by a whole batch process macro based on your code that runs and creates a summary table for me on some test images. Full disclosure, I am being a bit lazy and just using a folder full of tif files, so I can't comment on any problems with the .zvi file opener.
>On Friday, September 20, 2013 9:04 PM Scott Chamberlain wrote:
>Subject: Summarize table not writing in macro
>Hello all,
>I have this macro below that works fine on a single image, but doesn't work
>in batch mode. I want to use the macro to process a single folder at a time
>of images with .zvi extension. I'd appreciate any guidance on where to
>look for the problem!
>Thanks!
>Scott Chamberlain
>Simon Fraser University
>macro "countem [q]" {
> title = getTitle;
If you are in batch mode, there won't be a file open at this point, so there isn't a way to get a title from it. Best to move this downstream a little.
> input = "/path1/";
> output = "/path2/";
The way this is written I'm assuming you want to "hard code" in your filepaths. This is a totally valid. You could also choose to go with
input = getDirectory("Choose a Directory to PROCESS");
list = getFileList(input);
output = getDirectory("Choose a Directory for SAVING");
to make the macro a little more flexible. This will direct the user (you) to click a folder to process and another to save to each time the macro is run. This way you won't have to modify the code for each run. It's up to you.
> function doit(input, output, title) {
> run("ZVI Reader", "open="+intput+title)
Watch out for typos, they will wreck your code :)
> run("Subtract Background...", "rolling=100");
> run("Invert");
> setAutoThreshold("Yen");
> run("Convert to Mask");
> run("Watershed");
> run("Set Measurements...", "slice area count mean circularity redirect=None");
> run("Analyze Particles...", "size=40-120 circularity=0.50-1.00 show=summarize");
This all looks lovely until this line, and this may be why you get no summary table in batch mode. My Fiji keeps telling me summarize is not a valid choice for show. I think you want run("Analyze Particles...", "size=40-120 circularity=0.50-1.00 show=Nothing summarize");
> saveAs("text", output+title+".txt");
> close();
> }
> setBatchMode(true);
> list = getFileList(input);
> for (i = 0; i < list.length; i++)
> doit(input, output, list[i]);
> setBatchMode(false);
>}
The batch mode bit needs to move up in your code. Also, not sure why you have the line for setting batch mode back to false.
Here is my code:
-----------begin----------------
input = "/path1/";
list = getFileList(input);
output = "/path2/";
setBatchMode(true);
for (i=0; i<list.length; i++) {
path = input+list[i];
showProgress(i, list.length);
if (!endsWith(path,"/")) open(path);
if (nImages>=1) {
title=getTitle();
run("Subtract Background...", "rolling=100");
run("Invert");
setAutoThreshold("Yen");
run("Convert to Mask");
run("Watershed");
run("Set Measurements...", "slice area count mean circularity redirect=None");
run("Analyze Particles...", "size=40-120 circularity=0.50-1.00 show=Nothing summarize");
saveAs("text", output+title+".txt");
close();
}
}
-----------end------------------
I hope this helps you with your troubleshooting. Good luck!
Best,
Christine
--------------------------------------------
Christine Labno, Ph.D.
Asst. Technical Director
Light Microscopy Core
University of Chicago
Office of Shared Research Facilities
KCBD 1250 900 E. 57th St.
(773) 834-9040 (phone)
--
ImageJ mailing list:
http://imagej.nih.gov/ij/list.html