Macro problem/bug?
Posted by Mike Myerburg on Apr 21, 2008; 8:36pm
URL: http://imagej.273.s1.nabble.com/Macro-problem-bug-tp3696476.html
I made a macro to scale/calibrate, threshold, apply gaussian blur,
change the LUT, and rename images(to blind myself). This macro
(“ASLCalibration”) is within a macro (“BatchProcessFolders”) that
processes all of the images in a folder. It also provides the option to
batch process/measure all the files, otherwise I measure the height of
an object on each image, and then the macro continues to the next image.
Unless I add multiple wait() commands throughout the above steps, the
image becomes locked, the command is called prior to the image opening,
or I get unexpected errors. The necessary wait times vary from computer
to computer, which makes it difficult to use and has required a lot of
debugging to get it to work. These wait times add up and slow the
routine down, so it is not a good solution.
I have added setOption("QueueMacros",true) as I thought that this might
help. This has made no difference. Is this a known bug or am I missing
something? Any help or suggestions would be appreciated.
Below are the portions of the macro that are giving me difficulty (if
you need the whole thing I can post it, but it gets a bit long). I have
this macro as a toolset if that makes any difference.
Thanks, Mike
________________________________________________
//Global Variables
var measurecount=0; //Number of ASL measurements
var linecount=0; //Number of ASL line measurements
var ASLLine=newArray(3); //Array containing line measurements
var ShowThreshold=0; //Toggle for showing threshold automaticaly
enabled by ASLCalibration
var ImageName; //Image Name prior to renaming the window
var ImagesProcessed=0; //Count of imgaes proccessed helopful for
resume
var dir;
//Options
var AutoMode=0; //Toggle for Full Automatic mode - User is
asked when starting BatchMode
var Blinded=1; //Toggle to enable blinded mode - User is
asked when starting BatchMode
var expertmode=1; //Change to set the expertmode
var PicX=30; //Set Snapshot Dimentions X in um
var PicY=30; //Set Snapshot Dimentions Y in um
var scaleFactor=2; //Scale Factor
macro "ASLCalibration" { //Calibrates and filters image, sets
threshold and LUT
measurecount=0; //sets all the counts to zero as well
linecount=0;
ASLLine=newArray(3);
getVoxelSize(pWidth, pHeight, pDepth, unit);
pHeight=pDepth; //Corrects for LSM file format
setVoxelSize(pWidth, pHeight, pDepth, unit);
run("Gaussian Blur...", "sigma=2");
if (AutoMode==0) { //Scales Image and sets LUT
width=getWidth();
height=getHeight();
scaleCorrection=((1/pWidth)*scaleFactor);
xCorrection=(scaleCorrection*pWidth);
yCorrection=(scaleCorrection*pHeight);
delFile=getImageID();
run("Scale...", "x="+xCorrection+" y="+yCorrection+"
width="+(width*xCorrection)+" height="+(height*yCorrection)+"
interpolate create title=calibrated_"+ImageName);
selectImage(delFile);
close();
selectWindow("calibrated_"+ImageName);
run("Flip Vertically");
run("Fire");
}
setAutoThreshold();
ShowThreshold=1;
}
macro "BatchProcessFolders" { //This is the
Batch process routine
requires("1.33s");
dir = getDirectory("Choose a Directory ");
count = 0;
countFiles(dir);
n = 0;
first=0;
run("Set Measurements...", "area bounding area_fraction");
if (expertmode==1) { //Expermode options
Dialog.create("Batch Mode Options");
Dialog.addCheckbox("Automatic Batch Mode",AutoMode); //Set AutoMode
Dialog.addCheckbox("Blinded Mode",Blinded); //Set BlindMode
Dialog.addNumber("Start at file#",0);
Dialog.show();
AutoMode = Dialog.getCheckbox;
Blinded = Dialog.getCheckbox;
StartFile = Dialog.getNumber();
ImagesProcessed=StartFile;
}
setOption("QueueMacros",true); //option to put in QueueMacro mode
if (AutoMode==1) { //Put in batch mode if desired
setBatchMode(true);
}else setBatchMode(false);
processFiles(dir);
//print(count+" files processed");
function countFiles(dir) {
list = getFileList(dir);
for (i=0; i<list.length; i++) {
if (endsWith(list[i], "/"))
countFiles(""+dir+list[i]);
else
count++;
}
}
function processFiles(dir) { //Also sets ImageName
list = getFileList(dir);
for (i=0; i<list.length; i++) {
if (i>=StartFile) {
if (endsWith(list[i], "/")) {
ImageName=list[i]; //Set ImageName for the image
processFiles(""+dir+list[i]);
}
else {
showProgress(n++, count);
path = dir+list[i];
ImageName=list[i]; //Set ImageName for the image
processFile(path);
}
}
}
}
function processFile(path) { //This is the batch function
if (endsWith(path, ".lsm")) {
if (AutoMode==0) setBatchMode(true); //Batchmode is used to
manipulate the image and change the name
open(path); // prior to showing it on
the screen
if (first==0) { //Make it wait for 2 sec to
load first image
first++;
wait(2000);
}
wait(300);
run("ASLCalibration");
wait(300);
if ((Blinded==1) && (AutoMode==0)) { //Has a long wait that
should be removed - it is necessary to keep blinded when ImageJ auto zooms
wait(500);
rename("blank");
}
if (AutoMode==0) setBatchMode(false); //BatchMode is disabled if
not in AutoMode
if (AutoMode==1) {
ASLheight = ASLAutoMeasure();
ASLHeightLogger(ASLheight,"AutoMode");
}
else{
while (measurecount<3) wait(10); //Wait for the user to take
three measurements
}
close();
ImagesProcessed++;
}
}
AutoMode=0;
}