Changeset 7074


Ignore:
Timestamp:
10/14/10 11:01:07 (9 years ago)
Author:
melissa
Message:

Parse stage positions from Fluoview/Andor TIFFs.

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/4.2/components/bio-formats/src/loci/formats/in/FluoviewReader.java

    r7073 r7074  
    7070  private String date = null; 
    7171  private int timeIndex = -1; 
     72  private int fieldIndex = -1; 
     73  private int montageIndex = -1; 
    7274 
    7375  /** Timestamps for each plane, in seconds. */ 
     
    7779  private String[] gains, voltages, offsets, channelNames, lensNA; 
    7880  private String mag, detectorManufacturer, objectiveManufacturer, comment; 
     81 
     82  private double[][] montageOffsets; 
     83  private double[][] fieldOffsets; 
    7984 
    8085  // -- Constructor -- 
     
    131136      timeIndex = -1; 
    132137      stamps = null; 
     138      fieldIndex = -1; 
     139      montageIndex = -1; 
     140      fieldOffsets = null; 
     141      montageOffsets = null; 
    133142    } 
    134143  } 
     
    270279        if (dimensionOrder.indexOf("S") == -1) dimensionOrder += "S"; 
    271280        seriesCount *= size; 
     281 
     282        if (name.equals("montage")) montageIndex = i - 2; 
     283        else if (name.equals("xy")) fieldIndex = i - 2; 
    272284      } 
    273285    } 
     
    362374      store.setPixelsPhysicalSizeZ(voxelZ, i); 
    363375      store.setPixelsTimeIncrement(voxelT, i); 
     376 
     377      int montage = getMontage(i); 
     378      int field = getField(i); 
     379 
     380      double posX = 0d, posY = 0d, posZ = 0d; 
     381 
     382      if (montageOffsets != null) { 
     383        posX += montageOffsets[montage][0]; 
     384        posY += montageOffsets[montage][1]; 
     385        posZ += montageOffsets[montage][2]; 
     386      } 
     387      if (fieldOffsets != null) { 
     388        posX += fieldOffsets[field][0]; 
     389        posY += fieldOffsets[field][1]; 
     390        posZ += fieldOffsets[field][2]; 
     391      } 
     392 
     393      for (int image=0; image<getImageCount(); image++) { 
     394        store.setPlanePositionX(posX, i, image); 
     395        store.setPlanePositionY(posY, i, image); 
     396        store.setPlanePositionZ(posZ, i, image); 
     397      } 
    364398    } 
    365399 
     
    557591            date += " " + value; 
    558592          } 
     593          else if (key.equals("MontageOffsets")) { 
     594            String[] offsets = value.split("\t"); 
     595            montageOffsets = new double[offsets.length - 1][3]; 
     596            for (int i=1; i<offsets.length; i++) { 
     597              String[] v = offsets[i].trim().split(","); 
     598              for (int j=0; j<v.length; j++) { 
     599                montageOffsets[i - 1][j] = Double.parseDouble(v[j].trim()); 
     600              } 
     601            } 
     602          } 
     603          else if (key.equals("XYFields")) { 
     604            String[] offsets = value.split("\t"); 
     605            fieldOffsets = new double[offsets.length - 1][3]; 
     606            for (int i=1; i<offsets.length; i++) { 
     607              String[] v = offsets[i].trim().split(","); 
     608              for (int j=0; j<v.length; j++) { 
     609                fieldOffsets[i - 1][j] = Double.parseDouble(v[j].trim()); 
     610              } 
     611            } 
     612          } 
    559613        } 
    560614        else if (token.startsWith("Z") && token.indexOf(" um ") != -1) { 
     
    598652  } 
    599653 
     654  private int getMontage(int seriesIndex) { 
     655    if (montageOffsets == null && fieldOffsets == null) return 0; 
     656    int[] pos = getPos(seriesIndex); 
     657    return montageIndex < fieldIndex ? pos[0] : pos[1]; 
     658  } 
     659 
     660  private int getField(int seriesIndex) { 
     661    if (montageOffsets == null && fieldOffsets == null) return 0; 
     662    int[] pos = getPos(seriesIndex); 
     663    return montageIndex < fieldIndex ? pos[1] : pos[0]; 
     664  } 
     665 
     666  private int[] getPos(int seriesIndex) { 
     667    int[] lengths = new int[2]; 
     668    if (montageIndex < fieldIndex) { 
     669      lengths[0] = montageOffsets == null ? 1 : montageOffsets.length; 
     670      lengths[1] = fieldOffsets == null ? 1 : fieldOffsets.length; 
     671    } 
     672    else { 
     673      lengths[1] = montageOffsets == null ? 1 : montageOffsets.length; 
     674      lengths[0] = fieldOffsets == null ? 1 : fieldOffsets.length; 
     675    } 
     676    return FormatTools.rasterToPosition(lengths, seriesIndex); 
     677  } 
     678 
    600679} 
  • trunk/components/bio-formats/src/loci/formats/in/FluoviewReader.java

    r7073 r7074  
    7070  private String date = null; 
    7171  private int timeIndex = -1; 
     72  private int fieldIndex = -1; 
     73  private int montageIndex = -1; 
    7274 
    7375  /** Timestamps for each plane, in seconds. */ 
     
    7779  private String[] gains, voltages, offsets, channelNames, lensNA; 
    7880  private String mag, detectorManufacturer, objectiveManufacturer, comment; 
     81 
     82  private double[][] montageOffsets; 
     83  private double[][] fieldOffsets; 
    7984 
    8085  // -- Constructor -- 
     
    131136      timeIndex = -1; 
    132137      stamps = null; 
     138      fieldIndex = -1; 
     139      montageIndex = -1; 
     140      fieldOffsets = null; 
     141      montageOffsets = null; 
    133142    } 
    134143  } 
     
    270279        if (dimensionOrder.indexOf("S") == -1) dimensionOrder += "S"; 
    271280        seriesCount *= size; 
     281 
     282        if (name.equals("montage")) montageIndex = i - 2; 
     283        else if (name.equals("xy")) fieldIndex = i - 2; 
    272284      } 
    273285    } 
     
    362374      store.setPixelsPhysicalSizeZ(voxelZ, i); 
    363375      store.setPixelsTimeIncrement(voxelT, i); 
     376 
     377      int montage = getMontage(i); 
     378      int field = getField(i); 
     379 
     380      double posX = 0d, posY = 0d, posZ = 0d; 
     381 
     382      if (montageOffsets != null) { 
     383        posX += montageOffsets[montage][0]; 
     384        posY += montageOffsets[montage][1]; 
     385        posZ += montageOffsets[montage][2]; 
     386      } 
     387      if (fieldOffsets != null) { 
     388        posX += fieldOffsets[field][0]; 
     389        posY += fieldOffsets[field][1]; 
     390        posZ += fieldOffsets[field][2]; 
     391      } 
     392 
     393      for (int image=0; image<getImageCount(); image++) { 
     394        store.setPlanePositionX(posX, i, image); 
     395        store.setPlanePositionY(posY, i, image); 
     396        store.setPlanePositionZ(posZ, i, image); 
     397      } 
    364398    } 
    365399 
     
    557591            date += " " + value; 
    558592          } 
     593          else if (key.equals("MontageOffsets")) { 
     594            String[] offsets = value.split("\t"); 
     595            montageOffsets = new double[offsets.length - 1][3]; 
     596            for (int i=1; i<offsets.length; i++) { 
     597              String[] v = offsets[i].trim().split(","); 
     598              for (int j=0; j<v.length; j++) { 
     599                montageOffsets[i - 1][j] = Double.parseDouble(v[j].trim()); 
     600              } 
     601            } 
     602          } 
     603          else if (key.equals("XYFields")) { 
     604            String[] offsets = value.split("\t"); 
     605            fieldOffsets = new double[offsets.length - 1][3]; 
     606            for (int i=1; i<offsets.length; i++) { 
     607              String[] v = offsets[i].trim().split(","); 
     608              for (int j=0; j<v.length; j++) { 
     609                fieldOffsets[i - 1][j] = Double.parseDouble(v[j].trim()); 
     610              } 
     611            } 
     612          } 
    559613        } 
    560614        else if (token.startsWith("Z") && token.indexOf(" um ") != -1) { 
     
    598652  } 
    599653 
     654  private int getMontage(int seriesIndex) { 
     655    if (montageOffsets == null && fieldOffsets == null) return 0; 
     656    int[] pos = getPos(seriesIndex); 
     657    return montageIndex < fieldIndex ? pos[0] : pos[1]; 
     658  } 
     659 
     660  private int getField(int seriesIndex) { 
     661    if (montageOffsets == null && fieldOffsets == null) return 0; 
     662    int[] pos = getPos(seriesIndex); 
     663    return montageIndex < fieldIndex ? pos[1] : pos[0]; 
     664  } 
     665 
     666  private int[] getPos(int seriesIndex) { 
     667    int[] lengths = new int[2]; 
     668    if (montageIndex < fieldIndex) { 
     669      lengths[0] = montageOffsets == null ? 1 : montageOffsets.length; 
     670      lengths[1] = fieldOffsets == null ? 1 : fieldOffsets.length; 
     671    } 
     672    else { 
     673      lengths[1] = montageOffsets == null ? 1 : montageOffsets.length; 
     674      lengths[0] = fieldOffsets == null ? 1 : fieldOffsets.length; 
     675    } 
     676    return FormatTools.rasterToPosition(lengths, seriesIndex); 
     677  } 
     678 
    600679} 
Note: See TracChangeset for help on using the changeset viewer.