Re: Macro problem/bug?

Posted by Mike Myerburg on
URL: http://imagej.273.s1.nabble.com/Macro-problem-bug-tp3696476p3696480.html

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;
>> }
>>
>