[ome-devel] ScanR dataset failed to load

Melissa Linkert melissa at glencoesoftware.com
Thu Aug 23 09:16:53 BST 2012


Hi Rubén,

> I have obtained an ScanR dataset from a collaborator that failed to open with LOCI tools.
> The error reads as follows:
> 
> Caused by: java.lang.ArrayIndexOutOfBoundsException: 4
> 	at loci.formats.in.ScanrReader.initFile(ScanrReader.java:591)
> 	at loci.formats.FormatReader.setId(FormatReader.java:1091)
> 	at loci.plugins.in.ImportProcess.initializeFile(ImportProcess.java:480)
> 	at loci.plugins.in.ImportProcess.execute(ImportProcess.java:144)
> 	at loci.plugins.in.Importer.showDialogs(Importer.java:139)
> 	at loci.plugins.in.Importer.run(Importer.java:77)
> 	at loci.plugins.LociImporter.run(LociImporter.java:79)
> 	at ij.IJ.runUserPlugIn(IJ.java:183)
> 	at ij.IJ.runPlugIn(IJ.java:150)
> 
> The example has been uploaded as 'TestPlate_Mock_01_001.zip' to your FTP if you would like to have a look.
> The cause is that in this particular experiment some (inner) fields were software-disabled. That was not tested with the importer before.
> 
> One can identify these cases and correct the number of fields during conversion.
> 
> A patch suggestion based on the current ScanrReader trunk version follows. 
> 
> In my opinion, the ScanR format defines in 'subposition list'  the 'set of fields that are *really* acquired, whereas 'rows/well' and 'columns/well' are the the number of fields that are available. 

As always, thanks for this.

I have turned your patch into a GitHub pull request:

https://github.com/openmicroscopy/bioformats/pull/125

We're in the middle of a new release (and I am in the middle of
travelling), so it will likely be a few days until this can be properly
reviewed.  But it's now at least set up to be included in all of our
tests and development builds.

Regards,
-Melissa

On Wed, Aug 22, 2012 at 01:17:51PM +0200, Rubén Muñoz wrote:
> Hi Melissa,
> 
> I have obtained an ScanR dataset from a collaborator that failed to open with LOCI tools.
> The error reads as follows:
> 
> Caused by: java.lang.ArrayIndexOutOfBoundsException: 4
> 	at loci.formats.in.ScanrReader.initFile(ScanrReader.java:591)
> 	at loci.formats.FormatReader.setId(FormatReader.java:1091)
> 	at loci.plugins.in.ImportProcess.initializeFile(ImportProcess.java:480)
> 	at loci.plugins.in.ImportProcess.execute(ImportProcess.java:144)
> 	at loci.plugins.in.Importer.showDialogs(Importer.java:139)
> 	at loci.plugins.in.Importer.run(Importer.java:77)
> 	at loci.plugins.LociImporter.run(LociImporter.java:79)
> 	at ij.IJ.runUserPlugIn(IJ.java:183)
> 	at ij.IJ.runPlugIn(IJ.java:150)
> 
> The example has been uploaded as 'TestPlate_Mock_01_001.zip' to your FTP if you would like to have a look.
> The cause is that in this particular experiment some (inner) fields were software-disabled. That was not tested with the importer before.
> 
> One can identify these cases and correct the number of fields during conversion.
> 
> A patch suggestion based on the current ScanrReader trunk version follows. 
> 
> In my opinion, the ScanR format defines in 'subposition list'  the 'set of fields that are *really* acquired, whereas 'rows/well' and 'columns/well' are the the number of fields that are available. 
> 
> Please let me know if I can help with some information, 
> 
> Best regards,
> 
> Rubén
>  
> 
> ---------------------------------------
> 
> diff --git a/components/bio-formats/src/loci/formats/in/ScanrReader.java b/components/bio-formats/src/loci/formats/in/Scanr
> index ff7e627..46bc53e 100644
> --- a/components/bio-formats/src/loci/formats/in/ScanrReader.java
> +++ b/components/bio-formats/src/loci/formats/in/ScanrReader.java
> @@ -92,6 +92,7 @@ public class ScanrReader extends FormatReader {
>    private String[] tiffs;
>    private MinimalTiffReader reader;
>  
> +  private boolean foundPositions = false;
>    private double[] fieldPositionX;
>    private double[] fieldPositionY;
>    private Vector<Double> exposures = new Vector<Double>();
> @@ -358,7 +359,11 @@ public class ScanrReader extends FormatReader {
>      int nSlices = getSizeZ() == 0 ? 1 : getSizeZ();
>      int nTimepoints = getSizeT();
>      int nWells = wellCount;
> -    int nPos = fieldRows * fieldColumns;
> +    int nPos = 0;
> +    if (foundPositions)
> +        nPos = fieldPositionX.length;
> +    else
> +        nPos = fieldRows * fieldColumns;
>      if (nPos == 0) nPos = 1;
>  
>      // get list of TIFF files
> @@ -555,7 +560,11 @@ public class ScanrReader extends FormatReader {
>      String plateAcqID = MetadataTools.createLSID("PlateAcquisition", 0, 0);
>      store.setPlateAcquisitionID(plateAcqID, 0, 0);
>  
> -    int nFields = fieldRows * fieldColumns;
> +    int nFields = 0;
> +    if (foundPositions)
> +        nFields = fieldPositionX.length;
> +    else
> +        nFields = fieldRows * fieldColumns;
>  
>      if (nFields > 0) {
>        store.setPlateAcquisitionMaximumFieldCount(
> @@ -653,7 +662,6 @@ public class ScanrReader extends FormatReader {
>      private String wellIndex;
>  
>      private boolean validChannel = false;
> -    private boolean foundPositions = false;
>      private boolean foundPlateLayout = false;
>      private int nextXPos = 0;
>      private int nextYPos = 0;


More information about the ome-devel mailing list