<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <p>Dear HongKee,</p>
    thank so much for your recommendation and code. When I understand
    correctly, it would require the deployment of this VirtualStack
    class to all ImageJ instances of potential users. I was hoping for a
    solution, which does not need adaptions of ImageJ.<br>
    <br>
    Alternatively, we could create a different output format in the
    acquisition (no multi-file OMETiff). I saw that there's already a
    "IndividualImagesHandler" or an HDF5 handler in "spim.io". Does
    someone have experience with alternative output formats?<br>
    <br>
    Cheers,<br>
    Chris<br>
    <br>
    <br>
    <blockquote type="cite"
      cite="mid:4E099AE3-253B-4B13-8C7F-995E35B5A6B1@mpi-cbg.de">
      <div class="">We have also faced those problems because the
        default image opener is trying to get the metadata for every
        file.</div>
      <div class="">I really recommend you to make own ImageStack class
        for reading the metadata just once for your whole series.</div>
      <div class=""><br class="">
      </div>
      <div class="">We had to create our version of VirtualStack class
        based on <a
          href="https://imagej.nih.gov/ij/plugins/virtual-opener.html"
          class="" moz-do-not-send="true">https://imagej.nih.gov/ij/plugins/virtual-opener.html</a> to
        avoid redundant metadata reading. The below code is not a
        perfect version, please, use it as a reference.</div>
      <div class=""><br class="">
      </div>
      <div class="">
        <div class="">Hopefully, it will help you.</div>
        <div class=""><br class="">
        </div>
        <div class="">Cheers,</div>
        <div class="">HongKee</div>
      </div>
      <div class=""><br class="">
      </div>
      <div class="">———————————————————</div>
      <div class=""><br class="">
      </div>
      <div class="">
        <div class="">import ij.ImageStack;</div>
        <div class="">import ij.process.ByteProcessor;</div>
        <div class="">import ij.process.ImageProcessor;</div>
        <div class="">import loci.formats.FormatException;</div>
        <div class="">import loci.formats.ImageReader;</div>
        <div class="">import loci.plugins.util.ImageProcessorReader;</div>
      </div>
      <div class=""><br class="">
      </div>
      <div class="">
        <div class="">import loci.common.services.DependencyException;</div>
        <div class="">import loci.common.services.ServiceException;</div>
        <div class="">import loci.common.services.ServiceFactory;</div>
        <div class="">import loci.formats.FormatException;</div>
        <div class="">import loci.formats.ImageReader;</div>
        <div class="">import loci.formats.meta.IMetadata;</div>
        <div class="">import loci.formats.services.OMEXMLService;</div>
      </div>
      <div class=""><br class="">
      </div>
      <div class="">
        <div class="">public class MyImageStack extends ImageStack</div>
        <div class="">{</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">   </span>private
          int bitDepth;</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">   </span>private
          int width, height;</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">   </span>ImageProcessorReader
          imageProcessorReader;</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">   </span>private
          int zSize = 1, tSize = 1, cSize = 1;</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">   </span>private
          int cEffectiveSize = 1;</div>
        <div class=""><br class="">
        </div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">   </span>public
          void addSlice( String path )</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">   </span>{</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">           </span>if(path !=
          null)</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">           </span>{</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">                   </span>if(width
          == 0)</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">                   </span>{</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">                           </span>//
          create format reader</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">                           </span>ImageReader
          reader = getImageReader( path );</div>
        <div class=""><br class="">
        </div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">                           </span>//
          output dimensional information</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">                           </span>int
          sizeX = reader.getSizeX();</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">                           </span>this.width
          = sizeX;</div>
        <div class=""><br class="">
        </div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">                           </span>int
          sizeY = reader.getSizeY();</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">                           </span>this.height
          = sizeY;</div>
        <div class=""><br class="">
        </div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">                           </span>//
          System.out.println("Effective C" +
          reader.getEffectiveSizeC());</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">                           </span>setcEffectiveSize(
          reader.getEffectiveSizeC() );</div>
        <div class=""><br class="">
        </div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">                           </span>int
          sizeC = reader.getSizeC();</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">                           </span>int
          sizeZ = reader.getSizeZ();</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">                           </span>int
          sizeT = reader.getSizeT();</div>
        <div class=""><br class="">
        </div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">                           </span>//
          System.out.println( "C=" + sizeC + " Z=" + sizeZ + " T=" +
          sizeT );</div>
        <div class=""><br class="">
        </div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">                           </span>setcSize(
          sizeC );</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">                           </span>setzSize(
          sizeZ );</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">                           </span>settSize(
          sizeT );</div>
        <div class=""><br class="">
        </div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">                           </span>this.bitDepth
          = reader.getBitsPerPixel();</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">                           </span>this.imageProcessorReader
          = new ImageProcessorReader( reader );</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">                   </span>}</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">           </span>}</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">   </span>}</div>
        <div class=""><br class="">
        </div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">   </span>public
          ImageProcessor getProcessor(int n) </div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">   </span>{</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">           </span>//
          properly implement to get ImageProcessor based on n</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">   </span>}</div>
        <div class=""><br class="">
        </div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">   </span>public
          static ImageReader getImageReader( String path )</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">   </span>{</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">           </span>ImageReader
          reader = null;</div>
        <div class=""><br class="">
        </div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">           </span>try</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">           </span>{</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">                   </span>ServiceFactory
          factory = new ServiceFactory();</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">                   </span>OMEXMLService
          service = factory.getInstance(OMEXMLService.class);</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">                   </span>IMetadata
          meta = service.createOMEXMLMetadata();</div>
        <div class=""><br class="">
        </div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">                   </span>//
          create format reader</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">                   </span>reader
          = new ImageReader();</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">                   </span>reader.setMetadataStore(meta);</div>
        <div class=""><br class="">
        </div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">                   </span>//
          initialize file</div>
        <div class="">//<span class="Apple-tab-span" style="white-space:pre">                 </span>System.out.println(path);</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">                   </span>reader.setId(
          path );</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">           </span>}</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">           </span>catch
          ( DependencyException e )</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">           </span>{</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">                   </span>e.printStackTrace();</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">           </span>}</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">           </span>catch
          ( ServiceException e )</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">           </span>{</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">                   </span>e.printStackTrace();</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">           </span>}</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">           </span>catch
          ( IOException e )</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">           </span>{</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">                   </span>e.printStackTrace();</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">           </span>}</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">           </span>catch
          ( FormatException e )</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">           </span>{</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">                   </span>e.printStackTrace();</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">           </span>}</div>
        <div class=""><br class="">
        </div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">           </span>return
          reader;</div>
        <div class=""><span class="Apple-tab-span" style="white-space:pre">   </span>}</div>
        <div class="">}</div>
      </div>
      <div class=""><br class="">
      </div>
      <div class="">———————————————</div>
      <div class=""><br class="">
      </div>
      <div class=""><br class="">
        <div>
          <blockquote type="cite" class="">
            <div class="">On Nov 6, 2017, at 10:43 AM, Christoph Sommer
              <<a href="mailto:christoph.sommer@ist.ac.at" class=""
                moz-do-not-send="true">christoph.sommer@ist.ac.at</a>>
              wrote:</div>
            <br class="Apple-interchange-newline">
            <div class="">
              <div class="">Dear OpenSpim folks,<br class="">
                <br class="">
                thanks for creating such a great resource!<br class="">
                <br class="">
                We are currently using an OpenSpim setup and the created
                output is a multi-file ome-tiff. For many applications
                (e.g. the MVR from Stephan Preibisch et al.) we need to
                convert the ome-tiff to normal tiff.<br class="">
                <br class="">
                Unfortunately, for long time-lapse the conversion takes
                forever, since for each conversion step all meta-data is
                parsed from each single time point. My script uses the
                Bioformats ImporterOptions class, but I can't see how I
                can bypass the meta-data parsing. I also tried the
                'bvconvert' command line script but also got issues
                there. Also reading from Python (e.g. with the module
                'tifffile' only return always the first angle
                image-stack...)<br class="">
                <br class="">
                Would you have any idea?<br class="">
                <br class="">
                Cheers,<br class="">
                <br class="">
                Chris<br class="">
                <br class="">
                <br class="">
                _______________________________________________<br
                  class="">
                OpenSPIM mailing list<br class="">
                <a href="mailto:OpenSPIM@openspim.org" class=""
                  moz-do-not-send="true">OpenSPIM@openspim.org</a><br
                  class="">
                <a class="moz-txt-link-freetext" href="http://openspim.org/mailman/listinfo/openspim">http://openspim.org/mailman/listinfo/openspim</a><br
                  class="">
              </div>
            </div>
          </blockquote>
        </div>
        <br class="">
        <div class="">
          <div style="color: rgb(0, 0, 0); letter-spacing: normal;
            orphans: auto; text-align: start; text-indent: 0px;
            text-transform: none; white-space: normal; widows: auto;
            word-spacing: 0px; -webkit-text-stroke-width: 0px;
            word-wrap: break-word; -webkit-nbsp-mode: space;
            -webkit-line-break: after-white-space;" class="">
            <div style="color: rgb(0, 0, 0); letter-spacing: normal;
              orphans: auto; text-align: start; text-indent: 0px;
              text-transform: none; white-space: normal; widows: auto;
              word-spacing: 0px; -webkit-text-stroke-width: 0px;
              word-wrap: break-word; -webkit-nbsp-mode: space;
              -webkit-line-break: after-white-space;" class=""><br
                class="">
              --<br class="">
              HongKee Moon<br class="">
              Scientific Software Engineer<br class="">
              Scientific Computing Facility<br class="">
              <br class="">
              Max Planck Institute of Molecular Cell Biology and
              Genetics<br class="">
              Pfotenhauerstr. 108<br class="">
              01307 Dresden<br class="">
              Germany<br class="">
              <br class="">
              fon: +49 351 210 1923<br class="">
              fax: +49 351 210 1907<br class="">
              <a href="http://www.mpi-cbg.de" class=""
                moz-do-not-send="true">www.mpi-cbg.de</a></div>
          </div>
        </div>
        <br class="">
      </div>
    </blockquote>
    <br>
  </body>
</html>