Macro problem/bug?

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

Macro problem/bug?

Mike Myerburg
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;
}
Reply | Threaded
Open this post in threaded view
|

Re: Macro problem/bug?

Wayne Rasband
I suspect you are using the LSM_Toolbox to open the files. It opens  
an LSM file in a separate thread, returning before it has finished.  
Switching to the LSM_Reader at

     http://rsb.info.nih.gov/ij/plugins/lsm-reader.html

should fix the problem. You will need to remove LSM_Toolbox.jar from  
the plugins folder since the open() macro function will use it if it  
is present. Or upgrade to the latest Handle_Extra_File_Types plugin at

     http://rsb.info.nih.gov/ij/plugins/file-handler.html

which gives priority to the LSM_Reader.

-wayne

On Apr 21, 2008, at 4:36 PM, Mike Myerburg wrote:

> 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;
> }
>
Reply | Threaded
Open this post in threaded view
|

Re: Macro problem/bug?

Mike Myerburg
Thank you for the reply!

You are correct that I am using the LSM Toolbox.  Unfortunately, when I
try either of the methods you suggested, I receive the following exception:

        java.lang.IllegalArgumentException: Argument out of range: 3
        at ij.ImageStack.setSliceLabel(ImageStack.java:222)
        at LSM_Reader.readStack(LSM_Reader.java:753)
        at LSM_Reader.open(LSM_Reader.java:554)
        at LSM_Reader.open(LSM_Reader.java:139)
        at LSM_Reader.open(LSM_Reader.java:111)
        at LSM_Reader.run(LSM_Reader.java:95)
        at ij.IJ.runUserPlugIn(IJ.java:158)
        at ij.IJ.runPlugIn(IJ.java:124)
        at ij.IJ.runPlugIn(IJ.java:113)
        at HandleExtraFileTypes.tryPlugIn(HandleExtraFileTypes.java:282)
        at HandleExtraFileTypes.tryOpen(HandleExtraFileTypes.java:151)
        at HandleExtraFileTypes.openImage(HandleExtraFileTypes.java:246)
        at HandleExtraFileTypes.run(HandleExtraFileTypes.java:37)
        at ij.IJ.runUserPlugIn(IJ.java:158)
        at ij.IJ.runPlugIn(IJ.java:124)
        at ij.IJ.runPlugIn(IJ.java:113)
        at ij.io.Opener.openWithHandleExtraFileTypes(Opener.java:304)
        at ij.io.Opener.openImage(Opener.java:233)
        at ij.io.Opener.openImage(Opener.java:249)
        at ij.io.Opener.open(Opener.java:116)
        at ij.io.Opener.open(Opener.java:55)
        at ij.plugin.Commands.run(Commands.java:23)
        at ij.IJ.runPlugIn(IJ.java:131)
        at ij.Executer.runCommand(Executer.java:104)
        at ij.Executer.run(Executer.java:58)
        at java.lang.Thread.run(Thread.java:619)

I am working with linescan .lsm files.  I would be happy to post one if
that would be of assistance.

Thanks for your help!

Mike



Rasband Wayne wrote:

> I suspect you are using the LSM_Toolbox to open the files. It opens an
> LSM file in a separate thread, returning before it has finished.
> Switching to the LSM_Reader at
>
>     http://rsb.info.nih.gov/ij/plugins/lsm-reader.html
>
> should fix the problem. You will need to remove LSM_Toolbox.jar from the
> plugins folder since the open() macro function will use it if it is
> present. Or upgrade to the latest Handle_Extra_File_Types plugin at
>
>     http://rsb.info.nih.gov/ij/plugins/file-handler.html
>
> which gives priority to the LSM_Reader.
>
> -wayne
>
> On Apr 21, 2008, at 4:36 PM, Mike Myerburg wrote:
>
>> 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;
>> }
>>
>
Reply | Threaded
Open this post in threaded view
|

Hyperstack Problem? was Re: Macro problem/bug?

karo03
In reply to this post by Wayne Rasband
Hi, I just tried to adjust my ImageJ as recommended in the attached  
thread.

Reading a 4 channel 11 slices 16bit lsm dataset, it delivers now a  
hyperstack with well selected lut's, here green, blue, red, grey.  
However, if I apply on this hyperstack "Z Project..." the result is,  
as expected a stack with 4 slices 16bit, but recolored in red, green,  
blue, grey, not in the original sequence.

Hyperstacks are fairly new for me so I am not sure if this is  
intended. Is there any documentation for hyperstacks? Especially for  
moving to and fro between images, stacks and h'stacks?

Thanks in advance
Karsten

Am 22.04.2008 um 03:29 schrieb Rasband Wayne:

> I suspect you are using the LSM_Toolbox to open the files. It opens  
> an LSM file in a separate thread, returning before it has finished.  
> Switching to the LSM_Reader at
>
>    http://rsb.info.nih.gov/ij/plugins/lsm-reader.html
>
> should fix the problem. You will need to remove LSM_Toolbox.jar from  
> the plugins folder since the open() macro function will use it if it  
> is present. Or upgrade to the latest Handle_Extra_File_Types plugin at
>
>    http://rsb.info.nih.gov/ij/plugins/file-handler.html
>
> which gives priority to the LSM_Reader.
>
> -wayne
>
> On Apr 21, 2008, at 4:36 PM, Mike Myerburg wrote:
>
>> 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;
>> }
>>
Reply | Threaded
Open this post in threaded view
|

Re: Macro problem/bug?

Wayne Rasband
In reply to this post by Mike Myerburg
This bug is fixed in the latest LSM_Reader.jar at
<http://rsb.info.nih.gov/ij/plugins/lsm-reader.html>.

-wayne


On Apr 21, 2008, at 9:55 PM, Mike Myerburg wrote:

> Thank you for the reply!
>
> You are correct that I am using the LSM Toolbox.  Unfortunately, when
> I try either of the methods you suggested, I receive the following
> exception:
>
> java.lang.IllegalArgumentException: Argument out of range: 3
> at ij.ImageStack.setSliceLabel(ImageStack.java:222)
> at LSM_Reader.readStack(LSM_Reader.java:753)
> at LSM_Reader.open(LSM_Reader.java:554)
> at LSM_Reader.open(LSM_Reader.java:139)
> at LSM_Reader.open(LSM_Reader.java:111)
> at LSM_Reader.run(LSM_Reader.java:95)
> at ij.IJ.runUserPlugIn(IJ.java:158)
> at ij.IJ.runPlugIn(IJ.java:124)
> at ij.IJ.runPlugIn(IJ.java:113)
> at HandleExtraFileTypes.tryPlugIn(HandleExtraFileTypes.java:282)
> at HandleExtraFileTypes.tryOpen(HandleExtraFileTypes.java:151)
> at HandleExtraFileTypes.openImage(HandleExtraFileTypes.java:246)
> at HandleExtraFileTypes.run(HandleExtraFileTypes.java:37)
> at ij.IJ.runUserPlugIn(IJ.java:158)
> at ij.IJ.runPlugIn(IJ.java:124)
> at ij.IJ.runPlugIn(IJ.java:113)
> at ij.io.Opener.openWithHandleExtraFileTypes(Opener.java:304)
> at ij.io.Opener.openImage(Opener.java:233)
> at ij.io.Opener.openImage(Opener.java:249)
> at ij.io.Opener.open(Opener.java:116)
> at ij.io.Opener.open(Opener.java:55)
> at ij.plugin.Commands.run(Commands.java:23)
> at ij.IJ.runPlugIn(IJ.java:131)
> at ij.Executer.runCommand(Executer.java:104)
> at ij.Executer.run(Executer.java:58)
> at java.lang.Thread.run(Thread.java:619)
>
> I am working with linescan .lsm files.  I would be happy to post one
> if that would be of assistance.
>
> Thanks for your help!
>
> Mike
>
>
>
> Rasband Wayne wrote:
>> I suspect you are using the LSM_Toolbox to open the files. It opens
>> an LSM file in a separate thread, returning before it has finished.
>> Switching to the LSM_Reader at
>>     http://rsb.info.nih.gov/ij/plugins/lsm-reader.html
>> should fix the problem. You will need to remove LSM_Toolbox.jar from
>> the plugins folder since the open() macro function will use it if it
>> is present. Or upgrade to the latest Handle_Extra_File_Types plugin
>> at
>>     http://rsb.info.nih.gov/ij/plugins/file-handler.html
>> which gives priority to the LSM_Reader.
>> -wayne
>> On Apr 21, 2008, at 4:36 PM, Mike Myerburg wrote:
>>> 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;
>>> }
>>>
>
Reply | Threaded
Open this post in threaded view
|

Re: Hyperstack Problem? was Re: Macro problem/bug?

Wayne Rasband
In reply to this post by karo03
> Hi, I just tried to adjust my ImageJ as recommended in the attached
> thread.
>
> Reading a 4 channel 11 slices 16bit lsm dataset, it delivers now a
> hyperstack with well selected lut's, here green, blue, red, grey.
> However, if I apply on this hyperstack "Z Project..." the result is,
> as expected a stack with 4 slices 16bit, but recolored in red, green,
> blue, grey, not in the original sequence.

This bug is fixed in ImageJ 1.41a. You can upgrade by using the
Plugins>Utilities>Update ImageJ command and selecting "daily build"
from the drop down menu.

> Hyperstacks are fairly new for me so I am not sure if this is
> intended. Is there any documentation for hyperstacks? Especially for
> moving to and fro between images, stacks and h'stacks?

There is some documentation at

     http://rsbweb.nih.gov/ij/docs/menus/image.html#hyperstacks

and at

     http://rsbweb.nih.gov/ij/docs/menus/image.html#make-composite

-wayne

>
> Thanks in advance
> Karsten
>
> Am 22.04.2008 um 03:29 schrieb Rasband Wayne:
>
>> I suspect you are using the LSM_Toolbox to open the files. It opens
>> an LSM file in a separate thread, returning before it has finished.
>> Switching to the LSM_Reader at
>>
>>    http://rsb.info.nih.gov/ij/plugins/lsm-reader.html
>>
>> should fix the problem. You will need to remove LSM_Toolbox.jar from
>> the plugins folder since the open() macro function will use it if it
>> is present. Or upgrade to the latest Handle_Extra_File_Types plugin
>> at
>>
>>    http://rsb.info.nih.gov/ij/plugins/file-handler.html
>>
>> which gives priority to the LSM_Reader.
>>
>> -wayne
>>
>> On Apr 21, 2008, at 4:36 PM, Mike Myerburg wrote:
>>
>>> 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;
>>> }
>>>
>