Login  Register

Re: Trouble Calling Variables in Macro for the Image Calculator

Posted by Zwick, Ari A. on Jul 16, 2010; 10:59pm
URL: http://imagej.273.s1.nabble.com/Trouble-Calling-Variables-in-Macro-for-the-Image-Calculator-tp3687586p3687592.html

Hi Michael,

You are indeed correct that there was an error in the code that I showed
you.  Fortunately or unfortunately this was merely a copy-paste error in
my email.  I was making the change in the macro, and the errors I was
getting occurred in the Image Calculator before it had a chance to close
the windows.  But thanks for taking a close look at it.  

Ari

-----Original Message-----
From: ImageJ Interest Group [mailto:[hidden email]] On Behalf Of
Michael Schmid
Sent: Friday, July 16, 2010 5:12 AM
To: [hidden email]
Subject: Re: Trouble Calling Variables in Macro for the Image Calculator

Hi Ari,

from your code:

> saveAs("Tiff", "/ecor/azwick/Macro/Mask3.tif");
>
> rename(i);
...
> selectWindow("Mask3.tif");
>
> close();

It seems that you image "Mask3.tif" should be renamed to the number  
contained in variable 'i', so why should it ever work? Did I miss  
something?

Michael
________________________________________________________________

On 14 Jul 2010, at 17:49, Zwick, Ari A. wrote:

> Hi,
>
> Okay so here's my second amendment.  I spoke too soon about the
> redundancy.  By some happenstance my macro made it through 50  
> iterations
> and then crashed again after about 5 after that.  So I looked into  
> macro
> timing and inserted wait(10) between each command and wait(100)  
> between
> the problematic areas.  I'm now employing multiple levels of  
> redundancy
> in conjunction with wait and my macro has now made it through 400
> iterations seamlessly.  I am certain that the macro was getting  
> ahead of
> itself with assigning titles, but the Image ID's are actually getting
> miss-assigned too, however they are being convoluted by calling by
> hybrid title/imageID macro.  The obvious solution would be to use all
> Image ID's, except that the macro still gets ahead of itself and can't
> find image ID's.  So even if I run selectWindow or getImageID 5 times,
> it will still result in errors.  I don't even have to run the print  
> log
> because I can see my windows getting mislabeled and ImageID's "not
> existing", so that tells me that my commands are getting assigned  
> to the
> wrong windows even when I build in the redundancy.  So the ultimate  
> fix
> is actually the wait command, and perhaps it would be getImageID if I
> used it exclusively, but I think I'd still have the problem.  Right  
> now
> my paranoia level is set to about 9/10, so I'm going to leave my  
> sloppy
> macro with all the redundancies in place and keep the American ideals
> up: "If it aint broke, don't fix it."  Ironically (to me at least)  
> with
> the wait command, the macro has never run faster.  There's almost no
> visible lag.
>
> I am running in "batch mode": z = m*random() *451; // 451 = Number of
> slices.
>
> Although my bugs are not occurring in batch mode.  I extract a random
> sample (1 window) from my stack and then analyze that sample, and  
> that's
> where my errors are coming in.  The batch sampling process has worked
> seamlessly from the beginning, so I think it's just a macro calling
> problem.  Maybe a future bug fix for ImageJ would be to have a default
> wait(10) command built into ImageJ to avoid these call errors,  
> although
> something tells me that ImageJ programmers would have some beef with
> that.  That's my two cents anyway.  Thanks again for your help and
> advice.  It's people like you that have fueled my transition to
> dedicated Linux for my next computer purchase in 2 weeks.
>
> Ari Zwick
>
> -----Original Message-----
> From: ImageJ Interest Group [mailto:[hidden email]] On Behalf Of
> Ben Tupper
> Sent: Tuesday, July 13, 2010 6:35 PM
> To: [hidden email]
> Subject: Re: Trouble Calling Variables in Macro for the Image  
> Calculator
>
> Hi,
>
> On Jul 13, 2010, at 5:52 PM, Zwick, Ari A. wrote:
>
>> Hi Ben,
>>
>> Stunning.
>
> I haven't been called that before!  This one is getting taped to the
> ol' refrigerator.
>
>> Unfortunately that did not exclusively solve my problem, but
>> it did certainly help.  The ultimate cure was actually redundancy.
>> Now
>> before I close that problematic window I run:
>>
>> selectImage(id);
>> selectwindow(Mask3.tif);
>> close();
>>
>> It made it through 50 iterations without crashing.
>
> That stumps me.  I know that others have had luck by inserting a small
> wait(100), but I thought use of image IDs obviated the need for that.
> I am curious if you can demonstrate that the title of the image
> selected by id really is "mask3.tif". I might be that you are creating
> an image (somewhere) that is not being properly disposed of.  Perhaps
> you could try the following for debugging purposes.
>
> selectImage(id);
> print("id has a title of " + getTitle());
> selectwindow("Mask3.tif");
> print("Mask3.tif has id of " + getImageID());
> close();
>
> Also, are you running in batch mode?
>
>
>>
>> Ari Zwick
>>
>> -----Original Message-----
>> From: ImageJ Interest Group [mailto:[hidden email]] On Behalf Of
>> Ben Tupper
>> Sent: Tuesday, July 13, 2010 1:52 PM
>> To: [hidden email]
>> Subject: Re: Trouble Calling Variables in Macro for the Image
>> Calculator
>>
>> Hi,
>>
>> I think your best bet is to keep track of images by ID rather than by
>> name.  Right after you instantiate/open/create/whatever an image use
>> the getImageID() function to get that image's unique identifier.  For
>> most subsequent commands that operate on that image be sure to use  
>> the
>> command selectImage(id).  Note that the Image Calculator command (and
>> perhaps others) will accept an image ID instead of image name, which
>> is very handy.
>>
>> I will be surprised if that doesn't resolve the issue for you.
>>
>> Cheers,
>> Ben
>>
>>
>> On Jul 13, 2010, at 2:33 PM, Zwick, Ari A. wrote:
>>
>>> Dear ImageJ Community,
>>>
>>>
>>>
>>> I'm writing a macro that will loop ~800 times, and I'm getting a few
>>> glitches with my macro calling functions out of the order that I've
>>> written them in.  My solution to this problem is to give individual
>>> titles to 1 set of problematic images (the rest use the same title
>>> for
>>> each iteration).  So I was thinking of something simple such as
>>> naming
>>> my problematic image equal to the value of i (number of
>>> iterations).  So
>>> I can rename the image rename(i) and the title works, however I  
>>> can't
>>> get the Image Calculator to call the value of i, which will change
>>> for
>>> each iteration.
>>>
>>>
>>>
>>> Can I define a variable such as: p = getTitle(CurrentImage) to call
>>> in
>>> the Image Calculator?  I was also thinking about the print command,
>>> but
>>> it doesn't seem clear to me that the value is easily accessible in
>>> the
>>> macro.  I've been having problems with syntax, so I'd really
>>> appreciate
>>> any suggestions about how to call the variable properly, or any  
>>> other
>>> work around.  Below is a bit of the script that I'm trying to work
>>> with:
>>>
>>>
>>>
>>> width = getWidth();
>>>
>>> height = getHeight();
>>>
>>> work = 10;
>>>
>>> for (i=1; i<=work ; i++) {
>>>
>>>
>>>
>>> m = i/i;
>>>
>>> x = m*random() *(width-356);
>>>
>>> y = m*random() *(height-356);
>>>
>>> z = m*random() *451;
>>>
>>> (let p [ getTitle(getCurrentImage)])
>>>
>>>
>>>
>>> //I know that syntax for p is wrong, found it off a Fiji Wiki
>>>
>>> //Later...
>>>
>>>
>>>
>>> selectWindow("Sample");
>>>
>>> makePolygon(356,0,236,0,236,236,0,236,0,356,356,356);
>>>
>>> run("Analyze Particles...", "size=0-Infinity circularity=0.00-1.00
>>> show=Masks exclude");
>>>
>>> saveAs("Tiff", "/ecor/azwick/Macro/Mask3.tif");
>>>
>>> rename(i);
>>>
>>>
>>>
>>> imageCalculator("Add", "Mask2",p);
>>>
>>> rename("Edge Count");
>>>
>>>
>>>
>>> //Error
>>>
>>> //Later
>>>
>>>
>>>
>>> selectWindow("Mask3.tif");
>>>
>>> close();
>>>
>>>
>>>
>>> //Error Mask3.tif does not exit.  (This is before I tried the i/p
>>> titles; the error that I'm trying to work around currently)
>>>
>>>
>>>
>>> I know this is kind of sloppy macro writing, but this is my first
>>> time
>>> actually modifying macro script rather than just recording.  The
>>> saveAs
>>> Tiff is another attempt to prevent Mask3 from escaping my commands.
>>> My
>>> logic is that this problem probably won't go away, but if I can
>>> rename
>>> each file per iteration, then there won't be any overlap of files
>>> that
>>> don't get closed and mistakenly called in later iterations.  I'm  
>>> also
>>> aware that the CurrentImage command will cause some serious  
>>> problems,
>>> because I have about 4 other windows open.  I'd appreciate any help
>>> with
>>> this and thanks in advance.
>>>
>>>
>>>
>>> Ari Zwick
>>>
>>>
>>>
>>>