[ome-devel] ScanR importer and well labels

Melissa Linkert melissa at glencoesoftware.com
Wed Feb 1 01:56:38 GMT 2012


Hi Rubén,

> Using ScanR importer I found a more recent problem. The dataset I use has labels at the beginning off the file names (A1, A2, A3, ..., A10, A11, A12, B1, ...)
> 
> I believe that your code sorts the images alphabetically at some point: (A1, A10, A11, A12, A2, ...)
> 
> Please note that the following loop didn't work for that dataset. It expects the images to be in a different order, as it remembers the lastListIndex for the next cycle, assuming always increasing well index. 

As always, thanks for this.  I can see this as well with one of the datasets
that you sent previously.  While reverting to the old looping strategy does
work, the real culprit is line 365 of ScanrReader.java, which as you say does
an alphabetic sort of the file names.  Changing how sorting is performed
(alphabetically by first character, then numerically by digits up until the
"--") should solve the problem and allow us to keep the more efficient loop
strategy.

I haven't had quite enough coffee at the moment to reliably fix the
sorting, but I've filed a ticket here so that the problem will get sorted
out in the next few days:

http://trac.openmicroscopy.org.uk/ome/ticket/7950

Regards,
-Melissa

On Mon, Jan 30, 2012 at 04:00:10PM +0100, Rubén Muñoz wrote:
> Dear Melissa, how are you?
> 
> Using ScanR importer I found a more recent problem. The dataset I use has labels at the beginning off the file names (A1, A2, A3, ..., A10, A11, A12, B1, ...)
> 
> I believe that your code sorts the images alphabetically at some point: (A1, A10, A11, A12, A2, ...)
> 
> Please note that the following loop didn't work for that dataset. It expects the images to be in a different order, as it remembers the lastListIndex for the next cycle, assuming always increasing well index. 
> 
> 386	            for (int c=0; c<nChannels; c++) {
> 387	              for (int i=lastListIndex; i<list.length; i++) {
> 388	                String file = list[i];
> 389	                if (file.indexOf(wellPos) != -1 && file.indexOf(zPos) != -1 &&
> 390	                  file.indexOf(posPos) != -1 && file.indexOf(tPos) != -1 &&
> 391	                  file.indexOf(channelNames.get(c)) != -1)
> 392	                {
> 393	                  tiffs[next++] = new Location(dir, file).getAbsolutePath();
> 394	                  if (c == nChannels - 1) {
> 395	                    lastListIndex = i;
> 396	                  }
> 397	                  break;
> 398	                }
> 399	              }
> 400	            }
> 
> 
> Back in 4.1 the code was inefficient but worked fine in terms of construction of the tiff list. 
> 
> 
> 309	            for (int c=0; c<nChannels; c++) {
> 310	              for (String file : list) {
> 311	                if (file.indexOf(wellPos) != -1 && file.indexOf(zPos) != -1 &&
> 312	                  file.indexOf(posPos) != -1 && file.indexOf(tPos) != -1 &&
> 313	                  file.indexOf(channelNames.get(c)) != -1)
> 314	                {
> 315	                  tiffs[next++] = new Location(dir, file).getAbsolutePath();
> 316	                  break;
> 317	                }
> 318	              }
> 319	            }
> 
> I have temporally fixed our copy using the upper loop, which is still inefficient for large datasets, it would be interesting to have a quicker importer though. 
> 
> Thaanks and best regards,
> 
> Rubén Muñoz


More information about the ome-devel mailing list