Changeset 1856


Ignore:
Timestamp:
11/28/06 14:50:24 (14 years ago)
Author:
curtis
Message:

Allow specification of separate Z, T and C ranges
when dimension order is certain.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/plugins/Importer.java

    r1851 r1856  
    182182      boolean[] series = new boolean[seriesCount]; 
    183183      series[0] = true; 
    184 //      store = (OMEXMLMetadataStore) r.getMetadataStore(id); 
    185184 
    186185      // build descriptive string and range for each series 
    187186      String[] seriesStrings = new String[seriesCount]; 
    188187      int[] num = new int[seriesCount]; 
    189       int[] begin = new int[seriesCount]; 
    190       int[] end = new int[seriesCount]; 
    191       int[] step = new int[seriesCount]; 
     188      int[] sizeC = new int[seriesCount]; 
     189      int[] sizeZ = new int[seriesCount]; 
     190      int[] sizeT = new int[seriesCount]; 
     191      boolean[] certain = new boolean[seriesCount]; 
     192      int[] cBegin = new int[seriesCount]; 
     193      int[] cEnd = new int[seriesCount]; 
     194      int[] cStep = new int[seriesCount]; 
     195      int[] zBegin = new int[seriesCount]; 
     196      int[] zEnd = new int[seriesCount]; 
     197      int[] zStep = new int[seriesCount]; 
     198      int[] tBegin = new int[seriesCount]; 
     199      int[] tEnd = new int[seriesCount]; 
     200      int[] tStep = new int[seriesCount]; 
    192201      for (int i=0; i<seriesCount; i++) { 
    193202        r.setSeries(id, i); 
    194203        num[i] = r.getImageCount(id); 
     204        sizeC[i] = r.getSizeC(id); 
     205        sizeZ[i] = r.getSizeZ(id); 
     206        sizeT[i] = r.getSizeT(id); 
     207        certain[i] = r.isOrderCertain(id); 
     208        cBegin[i] = zBegin[i] = tBegin[i] = 0; 
     209        if (certain[i]) { 
     210          cEnd[i] = sizeC[i] - 1; 
     211          zEnd[i] = sizeZ[i] - 1; 
     212          tEnd[i] = sizeT[i] - 1; 
     213        } 
     214        else cEnd[i] = num[i] - 1; 
     215        cStep[i] = zStep[i] = tStep[i] = 1; 
    195216        StringBuffer sb = new StringBuffer(); 
    196217        sb.append("Series_"); 
     
    208229        sb.append(num[i]); 
    209230        sb.append(" planes"); 
    210         if (r.isOrderCertain(id)) { 
     231        if (certain[i]) { 
    211232          sb.append(" ("); 
    212233          boolean first = true; 
    213           int sizeC = r.getSizeC(id); 
    214           int sizeZ = r.getSizeZ(id); 
    215           int sizeT = r.getSizeT(id); 
    216           if (sizeC > 1) { 
    217             sb.append(sizeC); 
     234          if (sizeC[i] > 1) { 
     235            sb.append(sizeC[i]); 
    218236            sb.append("C"); 
    219237            first = false; 
    220238          } 
    221           if (sizeZ > 1) { 
     239          if (sizeZ[i] > 1) { 
    222240            if (!first) sb.append(" x "); 
    223             sb.append(sizeZ); 
     241            sb.append(sizeZ[i]); 
    224242            sb.append("Z"); 
    225243            first = false; 
    226244          } 
    227           if (sizeT > 1) { 
     245          if (sizeT[i] > 1) { 
    228246            if (!first) sb.append(" x "); 
    229             sb.append(sizeT); 
     247            sb.append(sizeT[i]); 
    230248            sb.append("T"); 
    231249            first = false; 
     
    234252        } 
    235253        seriesStrings[i] = sb.toString(); 
    236         begin[i] = 0; 
    237         end[i] = num[i] - 1; 
    238         step[i] = 1; 
    239254      } 
    240255 
     
    272287            rd.addMessage(seriesStrings[i].replaceAll("_", " ")); 
    273288            String s = "_" + (i + 1); 
    274             rd.addNumericField("Begin" + s, begin[i] + 1, 0); 
    275             rd.addNumericField("End" + s, end[i] + 1, 0); 
    276             rd.addNumericField("Step" + s, step[i], 0); 
     289            if (certain[i]) { 
     290              if (sizeC[i] > 1) { 
     291                rd.addNumericField("C_Begin" + s, cBegin[i] + 1, 0); 
     292                rd.addNumericField("C_End" + s, cEnd[i] + 1, 0); 
     293                rd.addNumericField("C_Step" + s, cStep[i], 0); 
     294              } 
     295              if (sizeZ[i] > 1) { 
     296                rd.addNumericField("Z_Begin" + s, zBegin[i] + 1, 0); 
     297                rd.addNumericField("Z_End" + s, zEnd[i] + 1, 0); 
     298                rd.addNumericField("Z_Step" + s, zStep[i], 0); 
     299              } 
     300              if (sizeT[i] > 1) { 
     301                rd.addNumericField("T_Begin" + s, tBegin[i] + 1, 0); 
     302                rd.addNumericField("T_End" + s, tEnd[i] + 1, 0); 
     303                rd.addNumericField("T_Step" + s, tStep[i], 0); 
     304              } 
     305            } 
     306            else { 
     307              rd.addNumericField("Begin" + s, cBegin[i] + 1, 0); 
     308              rd.addNumericField("End" + s, cEnd[i] + 1, 0); 
     309              rd.addNumericField("Step" + s, cStep[i], 0); 
     310            } 
    277311          } 
    278312          addScrollBars(rd); 
     
    284318          for (int i=0; i<seriesCount; i++) { 
    285319            if (!series[i]) continue; 
    286             begin[i] = (int) rd.getNextNumber() - 1; 
    287             end[i] = (int) rd.getNextNumber() - 1; 
    288             step[i] = (int) rd.getNextNumber(); 
    289             if (begin[i] < 0) begin[i] = 0; 
    290             if (begin[i] >= num[i]) begin[i] = num[i] - 1; 
    291             if (end[i] < begin[i]) end[i] = begin[i]; 
    292             if (end[i] >= num[i]) end[i] = num[i] - 1; 
    293             if (step[i] < 1) step[i] = 1; 
     320            if (certain[i]) { 
     321              if (sizeC[i] > 1) { 
     322                cBegin[i] = (int) rd.getNextNumber() - 1; 
     323                cEnd[i] = (int) rd.getNextNumber() - 1; 
     324                cStep[i] = (int) rd.getNextNumber(); 
     325              } 
     326              if (sizeZ[i] > 1) { 
     327                zBegin[i] = (int) rd.getNextNumber() - 1; 
     328                zEnd[i] = (int) rd.getNextNumber() - 1; 
     329                zStep[i] = (int) rd.getNextNumber(); 
     330              } 
     331              if (sizeT[i] > 1) { 
     332                tBegin[i] = (int) rd.getNextNumber() - 1; 
     333                tEnd[i] = (int) rd.getNextNumber() - 1; 
     334                tStep[i] = (int) rd.getNextNumber(); 
     335              } 
     336            } 
     337            else { 
     338              cBegin[i] = (int) rd.getNextNumber() - 1; 
     339              cEnd[i] = (int) rd.getNextNumber() - 1; 
     340              cStep[i] = (int) rd.getNextNumber(); 
     341            } 
     342            int maxC = certain[i] ? sizeC[i] : num[i]; 
     343            if (cBegin[i] < 0) cBegin[i] = 0; 
     344            if (cBegin[i] >= maxC) cBegin[i] = maxC - 1; 
     345            if (cEnd[i] < cBegin[i]) cEnd[i] = cBegin[i]; 
     346            if (cEnd[i] >= maxC) cEnd[i] = maxC - 1; 
     347            if (cStep[i] < 1) cStep[i] = 1; 
     348            if (zBegin[i] < 0) zBegin[i] = 0; 
     349            if (zBegin[i] >= sizeZ[i]) zBegin[i] = sizeZ[i] - 1; 
     350            if (zEnd[i] < zBegin[i]) zEnd[i] = zBegin[i]; 
     351            if (zEnd[i] >= sizeZ[i]) zEnd[i] = sizeZ[i] - 1; 
     352            if (zStep[i] < 1) zStep[i] = 1; 
     353            if (tBegin[i] < 0) tBegin[i] = 0; 
     354            if (tBegin[i] >= sizeT[i]) tBegin[i] = sizeT[i] - 1; 
     355            if (tEnd[i] < tBegin[i]) tEnd[i] = tBegin[i]; 
     356            if (tEnd[i] >= sizeT[i]) tEnd[i] = sizeT[i] - 1; 
     357            if (tStep[i] < 1) tStep[i] = 1; 
    294358          } 
    295359        } 
     
    335399        if (name != null && name.length() > 0) imageName += " - " + name; 
    336400 
    337         int total = (end[i] - begin[i]) / step[i] + 1; 
     401        boolean[] load = new boolean[num[i]]; 
     402        if (certain[i]) { 
     403          for (int c=cBegin[i]; c<=cEnd[i]; c+=cStep[i]) { 
     404            for (int z=zBegin[i]; z<=zEnd[i]; z+=zStep[i]) { 
     405              for (int t=tBegin[i]; t<=tEnd[i]; t+=tStep[i]) { 
     406                int index = r.getIndex(id, z, c, t); 
     407                load[index] = true; 
     408              } 
     409            } 
     410          } 
     411        } 
     412        else { 
     413          for (int j=cBegin[i]; j<=cEnd[i]; j+=cStep[i]) load[j] = true; 
     414        } 
     415        int total = 0; 
     416        for (int j=0; j<num[i]; j++) if (load[j]) total++; 
    338417 
    339418        // dump OME-XML to ImageJ's description field, if available 
     
    344423        long time = startTime; 
    345424        ImageStack stackB = null, stackS = null, stackF = null, stackO = null; 
    346         int channels = r.getSizeC(id); 
    347         int sizeZ = r.getSizeZ(id); 
    348         int sizeT = r.getSizeT(id); 
    349  
    350         if (specifyRanges && num[i] > 1) { 
    351           // reset sizeZ and sizeT if we aren't opening the entire series 
    352           sizeZ = begin[i]; 
    353           sizeT = end[i]; 
    354           // CTR: huh? this makes no sense 
    355           /* 
    356           if (channels > 1) { 
    357             channels = r.getIndex(id, 0, 1, 0) - r.getIndex(id, 0, 0, 0); 
    358           } 
    359           */ 
    360         } 
    361425 
    362426        int q = 0; 
    363         for (int j=begin[i]; j<=end[i]; j+=step[i]) { 
     427        for (int j=0; j<num[i]; j++) { 
     428          if (!load[j]) continue; 
     429 
    364430          // limit message update rate 
    365431          long clock = System.currentTimeMillis(); 
    366432          if (clock - time >= 100) { 
    367             IJ.showStatus("Reading " + (seriesCount > 1 ? "series " + 
    368               (i + 1) + ", " : "") + "plane " + (j + 1) + "/" + (end[i] + 1)); 
     433            IJ.showStatus("Reading " + 
     434              (seriesCount > 1 ? ("series " + (i + 1) + ", ") : "") + 
     435              "plane " + (j + 1) + "/" + num[i]); 
    369436            time = clock; 
    370437          } 
     
    580647        if (stackB != null) { 
    581648          if (!mergeChannels && splitWindows) { 
    582             slice(stackB, id, sizeZ, channels, sizeT, 
     649            slice(stackB, id, sizeZ[i], sizeC[i], sizeT[i], 
    583650              fi, r, specifyRanges, colorize); 
    584651          } 
     
    587654        if (stackS != null) { 
    588655          if (!mergeChannels && splitWindows) { 
    589             slice(stackS, id, sizeZ, channels, sizeT, 
     656            slice(stackS, id, sizeZ[i], sizeC[i], sizeT[i], 
    590657              fi, r, specifyRanges, colorize); 
    591658          } 
     
    594661        if (stackF != null) { 
    595662          if (!mergeChannels && splitWindows) { 
    596             slice(stackF, id, sizeZ, channels, sizeT, 
     663            slice(stackF, id, sizeZ[i], sizeC[i], sizeT[i], 
    597664              fi, r, specifyRanges, colorize); 
    598665          } 
     
    601668        if (stackO != null) { 
    602669          if (!mergeChannels && splitWindows) { 
    603             slice(stackO, id, sizeZ, channels, sizeT, 
     670            slice(stackO, id, sizeZ[i], sizeC[i], sizeT[i], 
    604671              fi, r, specifyRanges, colorize); 
    605672          } 
Note: See TracChangeset for help on using the changeset viewer.