<div dir="ltr"><div><div><div>Hi Steffi,<br><br><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote"> I cannot import the ZeissCZIReader, do I need some new jar or version maybe?<br>

</blockquote><br></div>ZeissCZI is a proprietary format, so it lives in the formats-gpl component which I believe is not imported by default by pom-fiji. You just need to add the dependency:<br><br>        &lt;dependency&gt;<br>

            &lt;groupId&gt;ome&lt;/groupId&gt;<br>            &lt;artifactId&gt;formats-gpl&lt;/artifactId&gt;<br>            &lt;version&gt;${bio-formats.version}&lt;/version&gt;<br>        &lt;/dependency&gt;<br><br></div>

to your pom. This will also allow you to import the ZeissCZIReader directly if it becomes necessary.<br><br></div><div>Looking more closely at the ZeissCZIReader, I was wrong about how those fields are stored - I thought they were coming from OME-XML, but it&#39;s actually stored in a nested class that is not exposed via the API.<br>

<br></div><div> So, off-hand, it looks like if you want to get the Zeiss-specific metadata, you should look through r.getGlobalMetadata() for keys containing Rotations, Phases, Illuminations, etc... as it seems the <a href="https://github.com/openmicroscopy/bioformats/blob/v5.0.0/components/formats-gpl/src/loci/formats/in/ZeissCZIReader.java#L2115">values are stored there</a>.<br>

<br></div><div> I am also forwarding this to the OME-devel list, as there is probably a better way to get this metadata.<br><br></div><div>Good luck!<br>Mark<br></div><br><br><br><div><div><div><div><div><br></div></div>
</div>
</div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, May 13, 2014 at 12:11 PM, Stephan Preibisch <span dir="ltr">&lt;<a href="mailto:preibischs@janelia.hhmi.org" target="_blank">preibischs@janelia.hhmi.org</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">Hi Mark,<div><br></div><div>that sounds great, I will give it a shot. I was just not really sure where to start. It seems everything is already in place, that is fantastic. </div>

<div><br></div><div>I have some problems actually being able to implement it. I cannot import the ZeissCZIReader, do I need some new jar or version maybe? (I work on this branch directly <a href="https://github.com/fiji/spimreconstruction/tree/newspimreconstruction" target="_blank">https://github.com/fiji/spimreconstruction/tree/newspimreconstruction</a>, using this pom.xml <a href="https://github.com/fiji/spimreconstruction/blob/newspimreconstruction/pom.xml" target="_blank">https://github.com/fiji/spimreconstruction/blob/newspimreconstruction/pom.xml</a>). </div>

<div><br></div><div>Here is how I started, it is based on what Curtis implemented for me quite some time back and which is still the code I for example use to open standard LSMs using Bioformats:</div><div><br></div><div>

<div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;;color:rgb(78,144,114)">// should I use the ZeissCZIReader here directly?</div>
<div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;">
<span style="color:#931a68"><b>final</b></span> IFormatReader r = <span style="color:#931a68"><b>new</b></span> ChannelSeparator();</div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;;min-height:14px">

<span style="color:rgb(78,144,114)"><br></span></div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;;min-height:14px"><span style="color:rgb(78,144,114)">// is that still necessary (code is below)?</span></div>

<div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;"><span style="color:#931a68"><b>if</b></span> ( !createOMEXMLMetadata( r ) )</div>

<div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;">{</div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;">

<span style="white-space:pre-wrap">        </span><span style="color:#931a68"><b>try</b></span> { r.close(); } <span style="color:#931a68"><b>catch</b></span> (IOException e) { e.printStackTrace(); }</div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;;color:rgb(147,26,104)">

<span style="color:#000000"><span style="white-space:pre-wrap">        </span></span><b>return</b><span style="color:#000000"> </span><b>null</b><span style="color:#000000">;</span></div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;">

}</div><p style="margin:0.0px 0.0px 0.0px 0.0px;font:11.0px &#39;Source Code Pro&#39;;min-height:14.0px"><br></p><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;;color:rgb(147,26,104)">

<b>try</b></div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;">{</div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;">

<span style="white-space:pre-wrap">        </span>r.setId( firstFile.getAbsolutePath() );</div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;">

<br></div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;;min-height:14px"><span style="color:rgb(78,144,114)"><span style="color:#000000"><span style="white-space:pre-wrap">        </span></span>// now I should be able to query all the details, right? But how do I get illuminations and angles?</span></div>

<div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;;min-height:14px"><span style="color:rgb(78,144,114)"><span style="white-space:pre-wrap">        </span></span><span style="color:#931a68"><b>final</b></span> <span style="color:#931a68"><b>boolean</b></span> isLittleEndian = r.isLittleEndian();<span style="white-space:pre-wrap">                        </span></div>

<div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;"><span style="color:#931a68"><b><span style="white-space:pre-wrap">        </span>final</b></span> <span style="color:#931a68"><b>int</b></span> width = r.getSizeX();</div>

<div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;"><span style="white-space:pre-wrap">        </span><span style="color:#931a68"><b>final</b></span> <span style="color:#931a68"><b>int</b></span> height = r.getSizeY();</div>

<div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;"><span style="white-space:pre-wrap">        </span><span style="color:#931a68"><b>final</b></span> <span style="color:#931a68"><b>int</b></span> depth = r.getSizeZ();<span style="white-space:pre-wrap">                                </span></div>

<div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;"><span style="white-space:pre-wrap">        </span><span style="color:#931a68"><b>int</b></span> timepoints = r.getSizeT();</div>

<div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;"><span style="white-space:pre-wrap">        </span><span style="color:#931a68"><b>int</b></span> channels = r.getSizeC();</div>

<div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;"><span style="white-space:pre-wrap">        </span><span style="color:#931a68"><b>final</b></span> <span style="color:#931a68"><b>int</b></span> pixelType = r.getPixelType();</div>

<div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;"><span style="white-space:pre-wrap">        </span><span style="color:#931a68"><b>final</b></span> <span style="color:#931a68"><b>int</b></span> bytesPerPixel = FormatTools.getBytesPerPixel( pixelType ); </div>

<div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;"><span style="white-space:pre-wrap">        </span><span style="color:#931a68"><b>final</b></span> String pixelTypeString = FormatTools.getPixelTypeString( pixelType );</div>

<p style="margin:0.0px 0.0px 0.0px 0.0px;font:11.0px &#39;Source Code Pro&#39;;min-height:14.0px"><span style="white-space:pre-wrap">        </span><br></p><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;">

<span style="white-space:pre-wrap">        </span><span style="color:#931a68"><b>final</b></span> MetadataRetrieve retrieve = (MetadataRetrieve)r.getMetadataStore();</div><p style="margin:0.0px 0.0px 0.0px 0.0px;font:11.0px &#39;Source Code Pro&#39;;min-height:14.0px">

<span style="white-space:pre-wrap">        </span><br></p><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;"><span style="white-space:pre-wrap">        </span><span style="color:#931a68"><b>float</b></span> cal = retrieve.getPixelsPhysicalSizeX( 0 ).getValue().floatValue();</div>

<div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;"><span style="white-space:pre-wrap">        </span><span style="color:#931a68"><b>if</b></span> ( cal == 0 )</div>

<div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;"><span style="white-space:pre-wrap">        </span>{</div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;">

<span style="white-space:pre-wrap">                </span>cal = 1;</div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;;color:rgb(56,52,255)">

<span style="color:#000000"><span style="white-space:pre-wrap">                </span>IOFunctions.println( </span>&quot;StackListLOCI: Warning, calibration for dimension X seems corrupted, setting to 1.&quot;<span style="color:#000000"> );</span></div>

<div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;"><span style="white-space:pre-wrap">        </span>}</div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;">

<span style="white-space:pre-wrap">        </span><span style="color:#931a68"><b>final</b></span> <span style="color:#931a68"><b>double</b></span> calX = cal;</div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;">

<br></div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;"><span style="white-space:pre-wrap">        </span>...</div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;">

<br></div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;;min-height:14px"><span style="color:rgb(78,144,114)"><span style="color:#000000"><span style="white-space:pre-wrap">        </span></span></span><span style="color:rgb(78,144,114)">// and later on open the requested data</span></div>

<div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;;min-height:14px"><span style="color:rgb(78,144,114)"><br></span></div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;;min-height:14px">

} <span style="color:#931a68"><b>catch</b></span> ( Exception e ) { e.printStackTrace(); }</div></div><div><br></div><div>...</div><div><br></div><div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;">

<span style="color:#931a68"><b>public</b></span> <span style="color:#931a68"><b>static</b></span> <span style="color:#931a68"><b>boolean</b></span> createOMEXMLMetadata( <span style="color:#931a68"><b>final</b></span> IFormatReader r )</div>

<div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;">{</div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;">

<span style="white-space:pre-wrap">        </span><span style="color:#931a68"><b>try</b></span> </div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;">

<span style="white-space:pre-wrap">        </span>{</div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;"><span style="white-space:pre-wrap">                </span><span style="color:#931a68"><b>final</b></span> ServiceFactory serviceFactory = <span style="color:#931a68"><b>new</b></span> ServiceFactory();</div>

<div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;"><span style="white-space:pre-wrap">                </span><span style="color:#931a68"><b>final</b></span> OMEXMLService service = serviceFactory.getInstance( OMEXMLService.<span style="color:#931a68"><b>class</b></span> );</div>

<div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;"><span style="white-space:pre-wrap">                </span><span style="color:#931a68"><b>final</b></span> IMetadata omexmlMeta = service.createOMEXMLMetadata();</div>

<div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;"><span style="white-space:pre-wrap">                </span>r.setMetadataStore(omexmlMeta);</div>

<div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;"><span style="white-space:pre-wrap">        </span>}</div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;">

<span style="white-space:pre-wrap">        </span><span style="color:#931a68"><b>catch</b></span> (<span style="color:#931a68"><b>final</b></span> ServiceException e)</div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;">

<span style="white-space:pre-wrap">        </span>{</div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;"><span style="white-space:pre-wrap">                </span>e.printStackTrace();</div>

<div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;;color:rgb(147,26,104)"><span style="color:#000000"><span style="white-space:pre-wrap">                </span></span><b>return</b><span style="color:#000000"> </span><b>false</b><span style="color:#000000">;</span></div>

<div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;"><span style="white-space:pre-wrap">        </span>}</div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;">

<span style="white-space:pre-wrap">        </span><span style="color:#931a68"><b>catch</b></span> (<span style="color:#931a68"><b>final</b></span> DependencyException e)</div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;">

<span style="white-space:pre-wrap">        </span>{</div><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;"><span style="white-space:pre-wrap">                </span>e.printStackTrace();</div>

<div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;;color:rgb(147,26,104)"><span style="color:#000000"><span style="white-space:pre-wrap">                </span></span><b>return</b><span style="color:#000000"> </span><b>false</b><span style="color:#000000">;</span></div>

<div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;"><span style="white-space:pre-wrap">        </span>}</div><p style="margin:0.0px 0.0px 0.0px 0.0px;font:11.0px &#39;Source Code Pro&#39;;min-height:14.0px">

<span style="white-space:pre-wrap">        </span><br></p><div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;;color:rgb(147,26,104)"><span style="color:#000000"><span style="white-space:pre-wrap">        </span></span><b>return</b><span style="color:#000000"> </span><b>true</b><span style="color:#000000">;</span></div>

<div style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font:normal normal normal 11px/normal &#39;Source Code Pro&#39;">}</div></div><div><br></div><div>Thank you so much for your fast reply!!!</div>

<div>Steffi</div><div><div class="h5"><div><br><div><div>On May 13, 2014, at 12:25 , Mark Hiner wrote:</div><br><blockquote type="cite"><div dir="ltr"><div><div>Hi Steffi,<br><br><br><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote">

a) Read all the metadata<br>
        - how many timepoints<br>
        - how many channels<br>
        - how many angles<br>
        - how many illumination directions<br>
        - calibration x,y,z (um/px)<br></blockquote><br></div> Looking at the latest <a href="https://github.com/openmicroscopy/bioformats/blob/develop/components/formats-gpl/src/loci/formats/in/ZeissCZIReader.java" target="_blank">Bio-Formats CZI reader</a>, it looks like there is support for this metadata already. Looking at the <a href="https://github.com/openmicroscopy/bioformats/blob/develop/components/formats-gpl/src/loci/formats/in/ZeissCZIReader.java#L834" target="_blank">calculateDimensions</a> method you can see that the illuminations, phases, rotations, etc... are all recorded, and if I understand correctly (Melissa can clarify if needed here) they are <a href="https://github.com/openmicroscopy/bioformats/blob/develop/components/formats-gpl/src/loci/formats/in/ZeissCZIReader.java#L516" target="_blank">compressed to ZCT dimensions here</a>.<br>



<br></div> Given that Bio-Formats already supports these fields, can you clarify a bit what functionality is missing that you&#39;d like to see? It seems to me like you don&#39;t need to implement a completely new reader, but could just use the existing API.<br>



<div><br><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote">
b) Be able to read individual 3d-stacks: Image = get( Timepoint t, Angle a, Illumination i, Channel c )<br></blockquote><br></div><div>If I am understanding correctly, what you really want to do is understand how these parameters are being converted to ZCT dimensions and thus plane ranges, and then use <a href="https://github.com/openmicroscopy/bioformats/blob/develop/components/formats-gpl/src/loci/formats/in/ZeissCZIReader.java#L276" target="_blank">openBytes</a> on the correct plane numbers using the Bio-Formats ImageReader API. <br>



</div><div><br></div><div>Looking at calculateDimensions again, it looks like the metadata is stored under the plane elements in the XML, I believe. So to do what you&#39;d want, you could write a little plugin that:<br>


<br>
</div><div>1) Calls setId using Bio-Formats<br></div><div>2) Checks the XML planes for the angle, illumination, etc.. parameters you&#39;re interested in. If they&#39;re not there, return as unsupported data.<br></div><div>



3) Prompts for an input based on the ranges of these parameters<br></div><div>4) Converts the received input to image/plane numbers for Bio-Formats<br></div><div>5) Calls openBytes as necessary to build the requested 3D image.<br>



<br></div><div>I&#39;m envisioning it as an ImageJ plugin but you could adapt as needed.<br><br></div><div>Does that make sense..? I don&#39;t think anything needs to change in the CZI Reader, or additional reader layers on top..<br>



<br>Again, Melissa please correct me if I got anything wrong.<br><br></div><div>Steffi, let me know if you&#39;d like clarification on anything, or if I misunderstood what you&#39;re trying to do.<br><br></div><div>Thanks!<br>



Mark<br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, May 13, 2014 at 10:25 AM, Stephan Preibisch <span dir="ltr">&lt;<a href="mailto:preibischs@janelia.hhmi.org" target="_blank">preibischs@janelia.hhmi.org</a>&gt;</span> wrote:<br>



<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Melissa, Mark, Curtis,<br>
<br>
if you have a second, I would have a question about Bioformats, Scifio and LOCI. The guys at Zeiss told me that you recently added support for the multi-view, multi-channel, multi-timepoint CZI files as they are saved by their Lightsheet Z.1 microscope. Is that correct?<br>




<br>
If so, I want to implement a specialized reader for those files. What I want to achieve is the following:<br>
<br>
a) Read all the metadata<br>
        - how many timepoints<br>
        - how many channels<br>
        - how many angles<br>
        - how many illumination directions<br>
        - calibration x,y,z (um/px)<br>
<br>
b) Be able to read individual 3d-stacks: Image = get( Timepoint t, Angle a, Illumination i, Channel c )<br>
<br>
This data can be in one gigantic file or distributed over many different files. So I am not sure how to start. Do you abstract that already, or should I do that?<br>
<br>
Should I use Scifio? And if so, where should I start reading, and which version do I need? Is that compatible with the current version that is in Fiji?<br>
<br>
Thank you so much for your help!<br>
<br>
Cheers,<br>
Steffi</blockquote></div><br></div>
</blockquote></div><br></div></div></div></div></blockquote></div><br></div>