[SCIFIO] [ImageJ-devel] [ImgLib2] The img-metadata branch

Mark Hiner hiner at wisc.edu
Wed Jan 8 15:52:16 CST 2014


Ahh.. looks like this was just a general bug in opening TIFF data. Sorry
that wasn't clear to me.

Anyway, it's fixed now locally. I'll release SCIFIO 0.8.2 tonight or
tomorrow which will include the fix (you'll just have to update your
pom-scijava to the latest version at that point).

Side note: you may want to define your CreatePhantomCommand (and other
commands?) as discoverable IJ2 commands..

For example:

@Plugin(type=Command.class, menu = {
    @Menu(label = MenuConstants.PLUGINS_LABEL,
            weight = MenuConstants.PLUGINS_WEIGHT,
            mnemonic = MenuConstants.PLUGINS_MNEMONIC),
        @Menu(label = "Truenorth", mnemonic = 't'), @Menu(label = "Create
Phantom", weight = 1) })
public class CreatePhantomCommand  implements Command
{
...
}

Would make the CreatePhantomCommand discoverable by searching commands, or
via the Plugin menu. Made testing in IJ2 a little easier for me..

Anyway, thanks again!
- Mark


On Wed, Jan 8, 2014 at 3:01 PM, Brian Northan <bnorthan at gmail.com> wrote:

> Hi Mark
>
> To clarify I was only changing the spacings to 0 as a hack to get around
> the error I was seeing.  The code I was wondering about (around line 975 of
> TIFFFormat.java) is only called for spacing > 0.0.
>
> You can repeat the error by running the CreatePhantomCommand we discussed
> a couple weeks ago.  (I believe you retrieved the code and got it running
> but let me know if you need the instructions again).
>
> The error can be repeated by running the CreatePhantomCommand to create a
> blank image and then trying to load the output into ImageJ2.  The stack
> trace that I get from ImageJ2 is then as follows...
>
> java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
>     at java.util.ArrayList.rangeCheck(ArrayList.java:604)
>     at java.util.ArrayList.get(ArrayList.java:382)
>     at io.scif.AbstractMetadata.get(AbstractMetadata.java:138)
>     at
> io.scif.formats.TIFFFormat$BaseTIFFParser.initMetadata(TIFFFormat.java:975)
>     at io.scif.formats.TIFFFormat$Parser.initMetadata(TIFFFormat.java:375)
>     at
> io.scif.formats.TIFFFormat$BaseTIFFParser.typedParse(TIFFFormat.java:645)
>     at
> io.scif.formats.TIFFFormat$BaseTIFFParser.typedParse(TIFFFormat.java:627)
>     at io.scif.AbstractParser.parse(AbstractParser.java:326)
>     at io.scif.AbstractParser.parse(AbstractParser.java:105)
>     at io.scif.AbstractParser.parse(AbstractParser.java:59)
>     at io.scif.AbstractReader.setSource(AbstractReader.java:217)
>     at
> io.scif.services.DefaultInitializeService.initializeReader(DefaultInitializeService.java:96)
>     at io.scif.img.ImgOpener.createReader(ImgOpener.java:365)
>     at io.scif.img.ImgOpener.openImg(ImgOpener.java:147)
>     at
> imagej.data.DefaultDatasetService.open(DefaultDatasetService.java:254)
>     at imagej.data.io.DatasetIOPlugin.open(DatasetIOPlugin.java:82)
>     at imagej.data.io.DatasetIOPlugin.open(DatasetIOPlugin.java:54)
>     at imagej.io.DefaultIOService.open(DefaultIOService.java:87)
>     at imagej.plugins.commands.io.OpenFile.run(OpenFile.java:85)
>     at imagej.command.CommandModule.run(CommandModule.java:196)
>     at imagej.module.ModuleRunner.run(ModuleRunner.java:170)
>     at imagej.module.ModuleRunner.call(ModuleRunner.java:131)
>     at imagej.module.ModuleRunner.call(ModuleRunner.java:70)
>     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
>     at java.util.concurrent.FutureTask.run(FutureTask.java:166)
>     at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>     at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>     at java.lang.Thread.run(Thread.java:724)
>
>
> On Wed, Jan 8, 2014 at 3:40 PM, Mark Hiner <hiner at wisc.edu> wrote:
>
>> Hi Brian,
>>
>>  Sorry to hear that some tests are failing for you now.
>>
>>  It does sound like there could be a bug here, but I will need more
>> information to track it down.
>>
>>  Which tests are you running exactly, and what's the stack trace you get?
>> If you could provide a minimal set of steps to reproduce the error, that
>> would be great. Also, where are you setting the pixel size to be 0? (as a
>> side note, a value of 1.0 might be safer.. which is what these axes are
>> supposed to default to)
>>
>> Thanks!
>> Mark
>>
>>
>> On Wed, Jan 8, 2014 at 9:57 AM, Brian Northan <bnorthan at gmail.com> wrote:
>>
>>> Hi Mark
>>>
>>> Hope you had a good holiday.   I noticed some tests of mine failing just
>>> after Christmas. I think the failure possibly has something to do with a
>>> change in setting pixel size when loading.  Right around line 1000 in this
>>> commit.
>>>
>>>
>>> https://github.com/scifio/scifio/commit/232261b978cbaeb42eb28c67cdddb7aca1acb1b6
>>>
>>> If you remember I have a script SimpleCreatePhantoms.sh which creates a
>>> blank image then places a sphere in it.  It now fails in the second step
>>> because it cannot reload the blank image.  I also cannot reload the newly
>>> created blank image into the latest build of ImageJ.
>>>
>>> I have a workaround (set pixel size to zero since I am not actually
>>> using it right now) so it isn't critical but thought I'd let you know about
>>> a potential bug.
>>>
>>> Brian
>>>
>>>
>>> On Mon, Dec 16, 2013 at 3:32 PM, Mark Hiner <hiner at wisc.edu> wrote:
>>>
>>>> No problem. That "error" message when failing to create services is
>>>> confusing.
>>>>
>>>> Glad it's working, let us know if you have any more problems!
>>>>
>>>> - Mark
>>>>
>>>>
>>>> On Mon, Dec 16, 2013 at 2:19 PM, Brian Northan <bnorthan at gmail.com>wrote:
>>>>
>>>>> Hi Mark
>>>>>
>>>>> I just checked and It did work after all...  I actually never checked
>>>>> to see if the final output was created.  I just saw the exception and
>>>>> assumed it had stopped.
>>>>>
>>>>> So everything appears great now,.  Looks like the floating point
>>>>> numbers are being saved correctly.
>>>>>
>>>>> Thanks for the fix
>>>>>
>>>>> Brian
>>>>>
>>>>>
>>>>> On Mon, Dec 16, 2013 at 2:46 PM, Mark Hiner <hiner at wisc.edu> wrote:
>>>>>
>>>>>> Hi Brian,
>>>>>>
>>>>>>  So, running your CreatePhantomCommand via the DeconvolutionTest
>>>>>> class actually creates a blank image for me... I ran it from Eclipse
>>>>>> directly though.
>>>>>>
>>>>>>  Also, I did observe the same error message that you saw, but the
>>>>>> message was just logged and execution continued (because the services that
>>>>>> failed to instantiate weren't necessary for execution.. so the "error"
>>>>>> nature of the message is a bit of an overstatement in this case).
>>>>>>
>>>>>>  It is possible that some classes in SCIFIO erroneously have required
>>>>>> services that aren't available in headless mode, but nothing stood out to
>>>>>> me as suspicious.
>>>>>>
>>>>>> Could you do two more things for me:
>>>>>>
>>>>>> 1) Try running your scripts without using a headless IJ2 to verify
>>>>>> this works on your end.
>>>>>>
>>>>>> 2) Set the Java system property: "scijava.log.level=4" and re-paste
>>>>>> the error output. This will turn full debugging on.
>>>>>>
>>>>>> Thanks,
>>>>>> Mark
>>>>>>
>>>>>>
>>>>>> On Mon, Dec 16, 2013 at 11:23 AM, Brian Northan <bnorthan at gmail.com>wrote:
>>>>>>
>>>>>>> Hi Mark
>>>>>>>
>>>>>>> My code is here: https://github.com/bnorthan/projects -- be warned
>>>>>>> it is in need of some refactoring which I plan to do as ImageJ2 scripting
>>>>>>> becomes available.
>>>>>>>
>>>>>>> A simple example of running my custom commands is in
>>>>>>> "SimpleCreatePhantoms.sh"  (the other scripts will not work because of
>>>>>>> references to things on my own machine).
>>>>>>>
>>>>>>> The code is for a project I did earlier in the year (
>>>>>>> http://spie.org/x648.xml?product_id=2002974).
>>>>>>>
>>>>>>> The main program is called DeconvolutionTest.java... which has ended
>>>>>>> up evolving into a command parser.  I never really polished it though
>>>>>>> because I am going to throw it away and use ImageJ2 scripting as that
>>>>>>> develops.     A lot of things in the code base fall into that category,
>>>>>>> things I put together quickly but are meant to be replaced with the
>>>>>>> "proper" imagej2 component.
>>>>>>>
>>>>>>> SimpleCreatePhantoms.sh just calls a command to create a blank
>>>>>>> phantom, then a second command to place a sphere in it.
>>>>>>>
>>>>>>>
>>>>>>> On Mon, Dec 16, 2013 at 9:09 AM, Mark Hiner <hinerm at gmail.com>wrote:
>>>>>>>
>>>>>>>> P.S. please feel free to send your commands via private e-mail, if
>>>>>>>> you don't want them to be public.
>>>>>>>>
>>>>>>>> Similarly, if you can share the dataset you're using that would be
>>>>>>>> ideal... but no worries if it's proprietary or anything.
>>>>>>>>
>>>>>>>>
>>>>>>>> On Mon, Dec 16, 2013 at 8:07 AM, Mark Hiner <hiner at wisc.edu> wrote:
>>>>>>>>
>>>>>>>>> Hi Brian,
>>>>>>>>>
>>>>>>>>>  Ahhh.. I'm sorry! I misunderstood. If that's the actual stack
>>>>>>>>> trace then no, I don't think you are having any problems with the
>>>>>>>>> dependency tree, and all your pom settings should be fine given that stack
>>>>>>>>> trace.
>>>>>>>>>
>>>>>>>>>  Sidetrack: the pom-scijava doesn't actually have snapshot
>>>>>>>>> versions. It's basically just versioning glue - it defines a version
>>>>>>>>> properties to help ensure consistent versions of the various SciJava
>>>>>>>>> libraries (like SCIFIO) are consumed. Using 1.111 is fine, as we want to
>>>>>>>>> use the latest version of everything since SCIFIO-0.7.4/0.7.5 are quite
>>>>>>>>> new. Let me know if that's not clear...
>>>>>>>>>
>>>>>>>>>   Anyway, since we know it worked in 0.7.3, I would like to bisect<https://www.kernel.org/pub/software/scm/git/docs/git-bisect.html>and figure out what happened. However, I currently can't reproduce the
>>>>>>>>> issue. When I open a float dataset with SCIFIO 0.7.5 in IJ2 I'm able to
>>>>>>>>> write it as a .tif. So you're probably exposing a bug with other commands
>>>>>>>>> interacting with SCIFIO.
>>>>>>>>>
>>>>>>>>>  Can you share your custom commands? If not, could you let me know
>>>>>>>>> which commands you're calling?
>>>>>>>>>
>>>>>>>>> Thanks,
>>>>>>>>> - Mark
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Fri, Dec 13, 2013 at 1:49 PM, Brian Northan <bnorthan at gmail.com
>>>>>>>>> > wrote:
>>>>>>>>>
>>>>>>>>>> Hi Mark
>>>>>>>>>>
>>>>>>>>>> I am using IJ2 in headless mode with some custom commands I
>>>>>>>>>> wrote.  So it is always possible that I still have old references
>>>>>>>>>> somewhere.  However that stack trace was actually generated with 0.7.4.
>>>>>>>>>> When I had noted that 0.7.5-SNAPSHOT threw an exception, I went back to
>>>>>>>>>> 0.7.4 to make sure that worked but it also had the same exception.  Then I
>>>>>>>>>> went back to 0.7.3 which worked (other than the floating point problem).
>>>>>>>>>>
>>>>>>>>>> Below is the stack trace using 0.7.5-SNAPSHOT.   (btw since I am
>>>>>>>>>> using IJ2 maybe there is something else wrong in the dependency tree??  One
>>>>>>>>>> of the IJ2 components??  Should I set the sci-java version to a SNAPSHOT
>>>>>>>>>> version too??  It is 1.111 right now.
>>>>>>>>>>
>>>>>>>>>>      at org.scijava.Context.inject(Context.java:273)
>>>>>>>>>>     at
>>>>>>>>>> org.scijava.plugin.DefaultPluginService.createInstance(DefaultPluginService.java:241)
>>>>>>>>>>     at
>>>>>>>>>> org.scijava.plugin.DefaultPluginService.createInstances(DefaultPluginService.java:229)
>>>>>>>>>>     at
>>>>>>>>>> org.scijava.plugin.DefaultPluginService.createInstancesOfType(DefaultPluginService.java:220)
>>>>>>>>>>     at
>>>>>>>>>> org.scijava.plugin.AbstractSingletonService.createInstances(AbstractSingletonService.java:95)
>>>>>>>>>>     at
>>>>>>>>>> org.scijava.plugin.AbstractSingletonService.getInstances(AbstractSingletonService.java:73)
>>>>>>>>>>     at
>>>>>>>>>> org.scijava.plugin.AbstractSingletonService$1.get(AbstractSingletonService.java:87)
>>>>>>>>>>     at
>>>>>>>>>> org.scijava.plugin.AbstractSingletonService$1.get(AbstractSingletonService.java:83)
>>>>>>>>>>     at
>>>>>>>>>> org.scijava.object.ObjectIndex.resolvePending(ObjectIndex.java:391)
>>>>>>>>>>     at org.scijava.object.ObjectIndex.get(ObjectIndex.java:136)
>>>>>>>>>>     at
>>>>>>>>>> org.scijava.object.DefaultObjectService.getObjects(DefaultObjectService.java:89)
>>>>>>>>>>     at
>>>>>>>>>> io.scif.codec.DefaultCodecService.getCodec(DefaultCodecService.java:65)
>>>>>>>>>>     at
>>>>>>>>>> io.scif.formats.tiff.TiffCompression.compress(TiffCompression.java:330)
>>>>>>>>>>     at
>>>>>>>>>> io.scif.formats.tiff.TiffSaver.writeImage(TiffSaver.java:391)
>>>>>>>>>>     at
>>>>>>>>>> io.scif.formats.tiff.TiffSaver.writeImage(TiffSaver.java:279)
>>>>>>>>>>      at
>>>>>>>>>> io.scif.formats.TIFFFormat$Writer.savePlane(TIFFFormat.java:1250)
>>>>>>>>>>     at
>>>>>>>>>> io.scif.formats.TIFFFormat$Writer.savePlane(TIFFFormat.java:1290)
>>>>>>>>>>
>>>>>>>>>>     at io.scif.AbstractWriter.savePlane(AbstractWriter.java:107)
>>>>>>>>>>     at io.scif.img.ImgSaver.writePlanes(ImgSaver.java:532)
>>>>>>>>>>     at io.scif.img.ImgSaver.saveImg(ImgSaver.java:380)
>>>>>>>>>>     at io.scif.img.ImgSaver.saveImg(ImgSaver.java:133)
>>>>>>>>>>     at io.scif.img.ImgSaver.saveImg(ImgSaver.java:114)
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Fri, Dec 13, 2013 at 1:40 PM, Mark Hiner <hinerm at gmail.com>wrote:
>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Hi Brian,
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>>  I referenced the scifio 0.7.5-SNAPSHOT (would that be correct
>>>>>>>>>>>> to get the absolute latest??)
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Yep this should be the latest snapshot.
>>>>>>>>>>>
>>>>>>>>>>>  in my POM and ran into an exception when executing my code.
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> ...
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>>      at
>>>>>>>>>>>> io.scif.formats.TIFFFormat$Writer.savePlane(TIFFFormat.java:1255)
>>>>>>>>>>>>     at
>>>>>>>>>>>> io.scif.formats.TIFFFormat$Writer.savePlane(TIFFFormat.java:1295)
>>>>>>>>>>>>     at io.scif.AbstractWriter.savePlane(AbstractWriter.java:107)
>>>>>>>>>>>>     at io.scif.img.ImgSaver.writePlanes(ImgSaver.java:532)
>>>>>>>>>>>>     at io.scif.img.ImgSaver.saveImg(ImgSaver.java:380)
>>>>>>>>>>>>     at io.scif.img.ImgSaver.saveImg(ImgSaver.java:133)
>>>>>>>>>>>>     at io.scif.img.ImgSaver.saveImg(ImgSaver.java:114)
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> That stack trace suggests that an older version of the
>>>>>>>>>>> TIFFFormat is being used. It must be from prior commit 37953<https://github.com/scifio/scifio/commit/379530aab9a9848e59363d87dcbdb79c4842bfc3>(because the TiffSaver.writeImage call is now on line 1250, not 1255). I'm
>>>>>>>>>>> assuming it's from the 0.7.4 release.
>>>>>>>>>>>
>>>>>>>>>>>  Are you just running the code snippet that Curtis posted a
>>>>>>>>>>> while back (or your own similar snippet)? Or are you using SCIFIO in IJ2,
>>>>>>>>>>> or another application?
>>>>>>>>>>>
>>>>>>>>>>>  Could you run "mvn dependency:tree", or check the "Maven
>>>>>>>>>>> Dependencies" tab if you're using Eclipse? I'm assuming something must
>>>>>>>>>>> still have a 0.7.4 SCIFIO reference, which is being pulled in instead of
>>>>>>>>>>> 0.7.5...
>>>>>>>>>>>
>>>>>>>>>>> Sorry for the inconvenience.. let me know what you find!
>>>>>>>>>>>
>>>>>>>>>>> Thanks,
>>>>>>>>>>> Mark
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://scif.io/pipermail/scifio/attachments/20140108/facd20cc/attachment-0002.html>


More information about the SCIFIO mailing list