Changeset 5653 for branches/4.1


Ignore:
Timestamp:
10/29/09 12:02:21 (11 years ago)
Author:
melissa
Message:

Merged r5635 and r5652 into 4.1 branch.

Location:
branches/4.1/components/bio-formats/src/loci/formats/in
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/4.1/components/bio-formats/src/loci/formats/in/FlexReader.java

    r5625 r5653  
    303303      } 
    304304    } 
     305    else { 
     306      String[] files = findFiles(file, new String[] {RES_SUFFIX}); 
     307      if (files != null) { 
     308        for (String f : files) { 
     309          measurementFiles.add(f); 
     310        } 
     311      } 
     312    } 
    305313 
    306314    MetadataStore store = 
     
    668676   */ 
    669677  private String[] findFiles(Location baseFile) throws IOException { 
     678    String[] suffixes = new String[0]; 
     679    if (checkSuffix(baseFile.getName(), FLEX_SUFFIX)) { 
     680      suffixes = new String[] {MEA_SUFFIX, RES_SUFFIX}; 
     681      debug("Looking for files with the suffix '" + MEA_SUFFIX + "' or '" + 
     682        RES_SUFFIX + "'."); 
     683    } 
     684    else if (checkSuffix(baseFile.getName(), MEA_SUFFIX)) { 
     685      suffixes = new String[] {FLEX_SUFFIX, RES_SUFFIX}; 
     686      debug("Looking for files with the suffix '" + FLEX_SUFFIX + "' or '" + 
     687        RES_SUFFIX + "'."); 
     688    } 
     689 
     690    return findFiles(baseFile, suffixes); 
     691  } 
     692 
     693  private String[] findFiles(Location baseFile, String[] suffixes) 
     694    throws IOException 
     695  { 
    670696    // we're assuming that the directory structure looks something like this: 
    671697    // 
     
    690716    Vector<String> fileList = new Vector<String>(); 
    691717 
    692     String[] suffixes = new String[0]; 
    693     if (checkSuffix(baseFile.getName(), FLEX_SUFFIX)) { 
    694       suffixes = new String[] {MEA_SUFFIX, RES_SUFFIX}; 
    695       debug("Looking for files with the suffix '" + MEA_SUFFIX + "' or '" + 
    696         RES_SUFFIX + "'."); 
    697     } 
    698     else if (checkSuffix(baseFile.getName(), MEA_SUFFIX)) { 
    699       suffixes = new String[] {FLEX_SUFFIX, RES_SUFFIX}; 
    700       debug("Looking for files with the suffix '" + FLEX_SUFFIX + "' or '" + 
    701         RES_SUFFIX + "'."); 
    702     } 
    703  
    704718    Location plateDir = baseFile.getParentFile(); 
    705719    String[] files = plateDir.list(true); 
     
    10191033        } 
    10201034        else if (qName.equals("ImageResolutionX")) { 
    1021           float v = Float.parseFloat(value) * 1000000; 
     1035          double v = Float.parseFloat(value) * 1000000; 
    10221036          xSizes.add(new Float(v)); 
    10231037        } 
    10241038        else if (qName.equals("ImageResolutionY")) { 
    1025           float v = Float.parseFloat(value) * 1000000; 
     1039          double v = Float.parseFloat(value) * 1000000; 
    10261040          ySizes.add(new Float(v)); 
    10271041        } 
  • branches/4.1/components/bio-formats/src/loci/formats/in/ScanrReader.java

    r5614 r5653  
    6767  private int fieldRows, fieldColumns; 
    6868  private Vector<String> channelNames = new Vector<String>(); 
     69  private Vector<String> wellLabels = new Vector<String>(); 
    6970  private String plateName; 
    7071 
     
    104105    if (s == null) return false; 
    105106    String software = s instanceof String[] ? ((String[]) s)[0] : s.toString(); 
    106     return software.equals("National Instruments IMAQ"); 
     107    return software.trim().equals("National Instruments IMAQ"); 
    107108  } 
    108109 
     
    142143      wellRows = wellColumns = 0; 
    143144      metadataFiles.clear(); 
     145      wellLabels.clear(); 
    144146    } 
    145147  } 
     
    205207    XMLTools.parseXML(xml, new ScanrHandler()); 
    206208 
    207     int nChannels = getSizeC() == 0 ? 1 : getSizeC(); 
     209    Vector<String> uniqueRows = new Vector<String>(); 
     210    Vector<String> uniqueColumns = new Vector<String>(); 
     211 
     212    for (String well : wellLabels) { 
     213      if (!Character.isLetter(well.charAt(0))) continue; 
     214      String row = well.substring(0, 1).trim(); 
     215      String column = well.substring(1).trim(); 
     216      if (!uniqueRows.contains(row) && row.length() > 0) uniqueRows.add(row); 
     217      if (!uniqueColumns.contains(column) && column.length() > 0) { 
     218        uniqueColumns.add(column); 
     219      } 
     220    } 
     221 
     222    wellRows = uniqueRows.size(); 
     223    wellColumns = uniqueColumns.size(); 
     224 
     225    if (wellRows * wellColumns == 0) { 
     226      if (wellLabels.size() <= 96) { 
     227        wellColumns = 12; 
     228      } 
     229      else if (wellLabels.size() <= 384) { 
     230        wellColumns = 24; 
     231      } 
     232      wellRows = wellLabels.size() / wellColumns; 
     233      if (wellRows * wellColumns < wellLabels.size()) wellRows++; 
     234    } 
     235 
     236    int nChannels = getSizeC() == 0 ? channelNames.size() : getSizeC(); 
     237    if (nChannels == 0) nChannels = 1; 
    208238    int nSlices = getSizeZ() == 0 ? 1 : getSizeZ(); 
    209     int nTimepoints = getSizeT() == 0 ? 1 : getSizeT(); 
    210     int nSeries = wellRows * wellColumns * fieldRows * fieldColumns; 
    211  
    212     tiffs = new String[nChannels * nSlices * nTimepoints * nSeries]; 
     239    int nTimepoints = getSizeT(); 
     240    int nWells = wellRows * wellColumns; 
     241    int nPos = fieldRows * fieldColumns; 
     242    if (nPos == 0) nPos = 1; 
    213243 
    214244    // get list of TIFF files 
     
    216246    dir = new Location(dir, "data"); 
    217247    list = dir.list(true); 
     248    if (nTimepoints == 0) { 
     249      nTimepoints = list.length / (nChannels * nWells * nPos * nSlices); 
     250      if (nTimepoints == 0) nTimepoints = 1; 
     251    } 
     252 
     253    tiffs = new String[nChannels * nWells * nPos * nTimepoints * nSlices]; 
    218254 
    219255    int next = 0; 
    220     for (int i=0; i<nSeries; i++) { 
    221       int well = i / (fieldRows * fieldColumns); 
    222       String wellPos = String.valueOf(well + 1); 
    223       while (wellPos.length() < 5) wellPos = "0" + wellPos; 
    224       wellPos = "W" + wellPos; 
    225  
    226       for (int z=0; z<nSlices; z++) { 
    227         String zPos = String.valueOf(z); 
    228         while (zPos.length() < 5) zPos = "0" + zPos; 
    229         zPos = "Z" + zPos; 
    230  
    231         for (int t=0; t<nTimepoints; t++) { 
    232           String tPos = String.valueOf(t); 
    233           while (tPos.length() < 5) tPos = "0" + tPos; 
    234           tPos = "T" + tPos; 
    235  
    236           for (int c=0; c<nChannels; c++) { 
    237             for (String file : list) { 
    238               if (file.indexOf(wellPos) != -1 && file.indexOf(zPos) != -1 && 
    239                 file.indexOf(tPos) != -1 && 
    240                 file.indexOf(channelNames.get(c)) != -1) 
    241               { 
    242                 tiffs[next++] = new Location(dir, file).getAbsolutePath(); 
     256    for (int well=0; well<nWells; well++) { 
     257      String wellPos = getBlock(well + 1, "W"); 
     258 
     259      for (int pos=0; pos<nPos; pos++) { 
     260        String posPos = getBlock(pos + 1, "P"); 
     261 
     262        for (int z=0; z<nSlices; z++) { 
     263          String zPos = getBlock(z, "Z"); 
     264 
     265          for (int t=0; t<nTimepoints; t++) { 
     266            String tPos = getBlock(t, "T"); 
     267 
     268            for (int c=0; c<nChannels; c++) { 
     269              for (String file : list) { 
     270                if (file.indexOf(wellPos) != -1 && file.indexOf(zPos) != -1 && 
     271                  file.indexOf(posPos) != -1 && file.indexOf(tPos) != -1 && 
     272                  file.indexOf(channelNames.get(c)) != -1) 
     273                { 
     274                  tiffs[next++] = new Location(dir, file).getAbsolutePath(); 
     275                  break; 
     276                } 
    243277              } 
    244278            } 
     
    260294    reader.close(); 
    261295 
    262     core = new CoreMetadata[nSeries]; 
    263     for (int i=0; i<nSeries; i++) { 
     296    core = new CoreMetadata[nWells * nPos]; 
     297    for (int i=0; i<getSeriesCount(); i++) { 
    264298      core[i] = new CoreMetadata(); 
    265299      core[i].sizeC = nChannels; 
     
    331365      } 
    332366      else if (qName.equals("Val")) { 
    333         value = v; 
     367        value = v.trim(); 
    334368        addGlobalMeta(key, value); 
    335369 
    336         if (key.equals("custom column")) { 
    337           wellColumns = Integer.parseInt(value) / fieldColumns; 
    338         } 
    339         else if (key.equals("custom row")) { 
    340           wellRows = Integer.parseInt(value) / fieldRows; 
    341         } 
    342         else if (key.equals("columns/well")) { 
     370        if (key.equals("columns/well")) { 
    343371          fieldColumns = Integer.parseInt(value); 
    344372        } 
     
    358386          plateName = value; 
    359387        } 
    360       } 
    361       else if (qName.equals("Dimsize")) { 
    362         if (key.equals("multiple_channel_typedef")) { 
    363           core[0].sizeC = Integer.parseInt(v); 
     388        else if (key.equals("idle")) { 
     389          int lastIndex = channelNames.size() - 1; 
     390          if (value.equals("0") && 
     391            !channelNames.get(lastIndex).equals("Autofocus")) 
     392          { 
     393            core[0].sizeC++; 
     394          } 
     395          else channelNames.remove(lastIndex); 
     396        } 
     397        else if (key.equals("well selection table + cDNA")) { 
     398          wellLabels.add(value); 
    364399        } 
    365400      } 
     
    374409  } 
    375410 
     411  // -- Helper methods -- 
     412 
     413  private String getBlock(int index, String axis) { 
     414    String b = String.valueOf(index); 
     415    while (b.length() < 5) b = "0" + b; 
     416    return axis + b; 
     417  } 
     418 
    376419} 
Note: See TracChangeset for help on using the changeset viewer.