Changeset 5687


Ignore:
Timestamp:
11/15/09 15:46:27 (10 years ago)
Author:
melissa
Message:

Fixed linkages for simultaneous scan files.

Files:
2 edited

Legend:

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

    r5575 r5687  
    5959  private Vector<String> lutNames; 
    6060  private Vector<Float> xPos, yPos, zPos; 
    61   private float physicalSizeX, physicalSizeY; 
     61  private double physicalSizeX, physicalSizeY; 
    6262 
    6363  private int numDatasets = -1; 
     
    6666  private MetadataStore store; 
    6767 
    68   private int channel = 0; 
    69   private int nextLaser, nextChannel, nextDetector = -1; 
     68  private int nextChannel = 0; 
    7069  private Float zoom, pinhole; 
    7170  private Vector<Integer> detectorIndices; 
     
    7574  private ROI roi; 
    7675  private boolean alternateCenter = false; 
     76 
     77  private boolean linkedInstruments = false; 
     78  private int detectorChannel = 0; 
    7779 
    7880  private Vector<CoreMetadata> core; 
     
    179181        int index = c < detectorIndices.size() ? 
    180182          detectorIndices.get(c).intValue() : detectorIndices.size() - 1; 
    181         if (index < 0 || index >= nChannels || index > nextDetector) break; 
     183        if (index < 0 || index >= nChannels || index >= 0) break; 
    182184        String id = MetadataTools.createLSID("Detector", numDatasets, index); 
    183185        store.setDetectorSettingsDetector(id, numDatasets, c); 
     
    191193    else if (qName.equals("Element")) { 
    192194      multiBands.clear(); 
    193       nextLaser = 0; 
    194       nextDetector = -1; 
    195195      nextROI = 0; 
    196196 
     
    199199      for (int c=0; c<detectorIndices.size(); c++) { 
    200200        int index = detectorIndices.get(c).intValue(); 
    201         if (c >= nChannels || index >= nChannels || index > nextDetector) break; 
     201        if (c >= nChannels || index >= nChannels || index >= 0) break; 
    202202        String id = MetadataTools.createLSID("Detector", numDatasets, index); 
    203203        store.setDetectorSettingsDetector(id, numDatasets, index); 
     
    212212    else if (qName.equals("FilterSetting")) { 
    213213      nextChannel = 0; 
    214       nextFilter = 0; 
    215214    } 
    216215    else if (qName.equals("LDM_Block_Sequential_Master")) { 
     
    235234      canParse = false; 
    236235    } 
     236    else if (qName.startsWith("LDM")) { 
     237      linkedInstruments = true; 
     238    } 
    237239 
    238240    if (!canParse) return; 
     
    271273    } 
    272274    else if (qName.equals("Image")) { 
     275      if (!linkedInstruments) { 
     276        int c = 0; 
     277        for (Detector d : detectors) { 
     278          String id = MetadataTools.createLSID( 
     279            "Detector", numDatasets, detectorChannel); 
     280          store.setDetectorID(id, numDatasets, detectorChannel); 
     281          store.setDetectorType(d.type, numDatasets, detectorChannel); 
     282          store.setDetectorModel(d.model, numDatasets, detectorChannel); 
     283          store.setDetectorZoom(d.zoom, numDatasets, detectorChannel); 
     284          store.setDetectorOffset(d.offset, numDatasets, detectorChannel); 
     285          store.setDetectorVoltage(d.voltage, numDatasets, detectorChannel); 
     286 
     287          if (c < numChannels) { 
     288            if (d.active) { 
     289              store.setDetectorSettingsOffset(d.offset, numDatasets, c); 
     290              store.setDetectorSettingsDetector(id, numDatasets, c); 
     291              c++; 
     292            } 
     293          } 
     294          detectorChannel++; 
     295        } 
     296 
     297        int filter = 0; 
     298        for (int i=0; i<nextFilter; i++) { 
     299          while (filter < detectors.size() && !detectors.get(filter).active) { 
     300            filter++; 
     301          } 
     302          if (filter >= detectors.size() || filter >= numChannels) break; 
     303          String id = MetadataTools.createLSID("Filter", numDatasets, filter); 
     304          if (i < numChannels && detectors.get(filter).active) { 
     305            store.setLogicalChannelSecondaryEmissionFilter( 
     306              id, numDatasets, i); 
     307          } 
     308          filter++; 
     309        } 
     310      } 
     311 
    273312      core.add(new CoreMetadata()); 
    274313      numDatasets++; 
     314      linkedInstruments = false; 
     315      detectorChannel = 0; 
    275316      detectors.clear(); 
    276317      lasers.clear(); 
     
    282323      store.setInstrumentID(instrumentID, numDatasets); 
    283324      store.setImageInstrumentRef(instrumentID, numDatasets); 
    284       channel = 0; 
    285325      numChannels = 0; 
    286326      extras = 1; 
     
    303343      int len = Integer.parseInt(attributes.getValue("NumberOfElements")); 
    304344      int id = Integer.parseInt(attributes.getValue("DimID")); 
    305       float physicalLen = Float.parseFloat(attributes.getValue("Length")); 
     345      double physicalLen = Double.parseDouble(attributes.getValue("Length")); 
    306346      String unit = attributes.getValue("Unit"); 
    307347      int nBytes = Integer.parseInt(attributes.getValue("BytesInc")); 
     
    335375              break; 
    336376          } 
    337           physicalSizeX = physicalSize.floatValue(); 
     377          physicalSizeX = physicalSize.doubleValue(); 
    338378          store.setDimensionsPhysicalSizeX(physicalSize, numDatasets, 0); 
    339379          break; 
     
    349389          else { 
    350390            coreMeta.sizeY = len; 
    351             physicalSizeY = physicalSize.floatValue(); 
     391            physicalSizeY = physicalSize.doubleValue(); 
    352392            store.setDimensionsPhysicalSizeY(physicalSize, numDatasets, 0); 
    353393          } 
     
    358398            coreMeta.sizeY = len; 
    359399            coreMeta.sizeZ = 1; 
    360             physicalSizeY = physicalSize.floatValue(); 
     400            physicalSizeY = physicalSize.doubleValue(); 
    361401            store.setDimensionsPhysicalSizeY(physicalSize, numDatasets, 0); 
    362402          } 
     
    371411            coreMeta.sizeY = len; 
    372412            coreMeta.sizeT = 1; 
    373             physicalSizeY = physicalSize.floatValue(); 
     413            physicalSizeY = physicalSize.doubleValue(); 
    374414            store.setDimensionsPhysicalSizeY(physicalSize, numDatasets, 0); 
    375415          } 
     
    398438      } 
    399439      else if (id.equals("dblStepSize")) { 
    400         float zStep = (float) (Double.parseDouble(value) * 1000000); 
     440        float zStep = Float.parseFloat(value) * 1000000; 
    401441        store.setDimensionsPhysicalSizeZ(new Float(zStep), numDatasets, 0); 
    402442      } 
     
    414454        catch (NumberFormatException e) { } 
    415455        if (id.endsWith("ExposureTime")) { 
    416           store.setPlaneTimingExposureTime(new Float(value), numDatasets, 0, c); 
     456          store.setPlaneTimingExposureTime(new Float(value), 
     457            numDatasets, 0, c); 
    417458        } 
    418459        else if (id.endsWith("Gain")) { 
     
    429470          store.setLogicalChannelExWave(new Integer(value), numDatasets, c); 
    430471        } 
    431         // this is not a typo 
     472        // NB: "UesrDefName" is not a typo. 
    432473        else if (id.endsWith("UesrDefName") && !value.equals("None")) { 
    433474          store.setLogicalChannelName(value, numDatasets, c); 
     
    477518            foundMag = true; 
    478519 
    479             int mag = (int) Float.parseFloat(token.substring(0, x)); 
     520            int mag = (int) Double.parseDouble(token.substring(0, x)); 
    480521            String na = token.substring(x + 1); 
    481522 
     
    519560        Float posX = new Float(variant); 
    520561        for (int image=0; image<nPlanes; image++) { 
    521           int index = image * (coreMeta.rgb ? 1 : coreMeta.sizeC) + channel; 
     562          int index = image * (coreMeta.rgb ? 1 : coreMeta.sizeC); 
    522563          if (index >= nPlanes) continue; 
    523564          store.setStagePositionPositionX(posX, numDatasets, 0, index); 
     
    530571        Float posY = new Float(variant); 
    531572        for (int image=0; image<nPlanes; image++) { 
    532           int index = image * (coreMeta.rgb ? 1 : coreMeta.sizeC) + channel; 
     573          int index = image * (coreMeta.rgb ? 1 : coreMeta.sizeC); 
    533574          if (index >= nPlanes) continue; 
    534575          store.setStagePositionPositionY(posY, numDatasets, 0, index); 
     
    541582        Float posZ = new Float(variant); 
    542583        for (int image=0; image<nPlanes; image++) { 
    543           int index = image * (coreMeta.rgb ? 1 : coreMeta.sizeC) + channel; 
     584          int index = image * (coreMeta.rgb ? 1 : coreMeta.sizeC); 
    544585          if (index >= nPlanes) continue; 
    545586          store.setStagePositionPositionZ(posZ, numDatasets, 0, index); 
     
    550591        Integer v = null; 
    551592        try { 
    552           v = new Integer((int) Float.parseFloat(variant)); 
     593          v = new Integer((int) Double.parseDouble(variant)); 
    553594        } 
    554595        catch (NumberFormatException e) { } 
     
    609650          store.setTransmittanceRangeCutOut(new Integer(m.cutOut), numDatasets, 
    610651            nextFilter); 
     652          /* debug */ System.out.println("(648) linking " + filter + " to " + 
     653            nextChannel); 
    611654          store.setLogicalChannelSecondaryEmissionFilter(filter, numDatasets, 
    612655            nextChannel); 
     
    633676        } 
    634677 
    635         if (laser != null && laser.intensity > 0f) { 
     678        if (laser != null && laser.intensity > 0) { 
    636679          store.setLightSourceSettingsLightSource(laser.id, numDatasets, 
    637680            nextChannel); 
    638681          store.setLightSourceSettingsAttenuation( 
    639             new Float(laser.intensity / 100f), numDatasets, nextChannel); 
     682            new Float(laser.intensity / 100.0), numDatasets, nextChannel); 
    640683          store.setLogicalChannelExWave(laser.wavelength, numDatasets, 
    641684            nextChannel); 
     
    683726          ms -= firstStamp; 
    684727          store.setPlaneTimingDeltaT( 
    685             new Float(ms / 1000f), numDatasets, 0, count); 
     728            new Float(ms / 1000.0), numDatasets, 0, count); 
    686729        } 
    687730      } 
     
    706749      roi.fontName = attributes.getValue("fontName"); 
    707750      roi.fontSize = attributes.getValue("fontSize"); 
    708       roi.transX = parseFloat(attributes.getValue("transTransX")); 
    709       roi.transY = parseFloat(attributes.getValue("transTransY")); 
    710       roi.scaleX = parseFloat(attributes.getValue("transScalingX")); 
    711       roi.scaleY = parseFloat(attributes.getValue("transScalingY")); 
    712       roi.rotation = parseFloat(attributes.getValue("transRotation")); 
     751      roi.transX = parseDouble(attributes.getValue("transTransX")); 
     752      roi.transY = parseDouble(attributes.getValue("transTransY")); 
     753      roi.scaleX = parseDouble(attributes.getValue("transScalingX")); 
     754      roi.scaleY = parseDouble(attributes.getValue("transScalingY")); 
     755      roi.rotation = parseDouble(attributes.getValue("transRotation")); 
    713756      String linewidth = attributes.getValue("linewidth"); 
    714757      if (linewidth != null) roi.linewidth = Integer.parseInt(linewidth); 
     
    718761      String x = attributes.getValue("x").replaceAll(",", "."); 
    719762      String y = attributes.getValue("y").replaceAll(",", "."); 
    720       roi.x.add(new Float(x)); 
    721       roi.y.add(new Float(y)); 
     763      roi.x.add(new Double(x)); 
     764      roi.y.add(new Double(y)); 
    722765    } 
    723766    else if (qName.equals("ROI")) { 
     
    728771      m.dyeName = attributes.getValue("DyeName"); 
    729772      m.channel = Integer.parseInt(attributes.getValue("Channel")); 
    730       m.cutIn = Math.round(Float.parseFloat(attributes.getValue("LeftWorld"))); 
    731       m.cutOut = 
    732         Math.round(Float.parseFloat(attributes.getValue("RightWorld"))); 
     773      m.cutIn = (int) 
     774        Math.round(Double.parseDouble(attributes.getValue("LeftWorld"))); 
     775      m.cutOut = (int) 
     776        Math.round(Double.parseDouble(attributes.getValue("RightWorld"))); 
    733777 
    734778      multiBands.add(m); 
     
    767811    public int type; 
    768812 
    769     public Vector<Float> x = new Vector<Float>(); 
    770     public Vector<Float> y = new Vector<Float>(); 
     813    public Vector<Double> x = new Vector<Double>(); 
     814    public Vector<Double> y = new Vector<Double>(); 
    771815 
    772816    // center point of the ROI 
    773     public float transX, transY; 
     817    public double transX, transY; 
    774818 
    775819    // transformation parameters 
    776     public float scaleX, scaleY; 
    777     public float rotation; 
     820    public double scaleX, scaleY; 
     821    public double rotation; 
    778822 
    779823    public int color; 
     
    798842      if (fontSize != null) { 
    799843        store.setShapeFontSize( 
    800           new Integer((int) Float.parseFloat(fontSize)), series, roi, 0); 
     844          new Integer((int) Double.parseDouble(fontSize)), series, roi, 0); 
    801845      } 
    802846      store.setShapeStrokeColor(String.valueOf(color), series, roi, 0); 
     
    805849      if (!normalized) normalize(); 
    806850 
    807       float cornerX = x.get(0).floatValue(); 
    808       float cornerY = y.get(0).floatValue(); 
     851      double cornerX = x.get(0).doubleValue(); 
     852      double cornerY = y.get(0).doubleValue(); 
    809853 
    810854      int centerX = (core.get(series).sizeX / 2) - 1; 
    811855      int centerY = (core.get(series).sizeY / 2) - 1; 
    812856 
    813       float roiX = centerX + transX; 
    814       float roiY = centerY + transY; 
     857      double roiX = centerX + transX; 
     858      double roiY = centerY + transY; 
    815859 
    816860      if (alternateCenter) { 
     
    825869          StringBuffer points = new StringBuffer(); 
    826870          for (int i=0; i<x.size(); i++) { 
    827             points.append(x.get(i).floatValue() + roiX); 
     871            points.append(x.get(i).doubleValue() + roiX); 
    828872            points.append(","); 
    829             points.append(y.get(i).floatValue() + roiY); 
     873            points.append(y.get(i).doubleValue() + roiY); 
    830874            if (i < x.size() - 1) points.append(" "); 
    831875          } 
     
    839883          store.setRectY( 
    840884            String.valueOf(roiY - Math.abs(cornerY)), series, roi, 0); 
    841           float width = (float) (2 * Math.abs(cornerX)); 
    842           float height = (float) (2 * Math.abs(cornerY)); 
     885          double width = 2 * Math.abs(cornerX); 
     886          double height = 2 * Math.abs(cornerY); 
    843887          store.setRectWidth(String.valueOf(width), series, roi, 0); 
    844888          store.setRectHeight(String.valueOf(height), series, roi, 0); 
     
    874918 
    875919      for (int i=0; i<x.size(); i++) { 
    876         float coordinate = x.get(i).floatValue() * 1000000; 
     920        double coordinate = x.get(i).doubleValue() * 1000000; 
    877921        coordinate *= (1 / physicalSizeX); 
    878         x.setElementAt(new Float(coordinate), i); 
     922        x.setElementAt(new Double(coordinate), i); 
    879923      } 
    880924 
    881925      for (int i=0; i<y.size(); i++) { 
    882         float coordinate = y.get(i).floatValue() * 1000000; 
     926        double coordinate = y.get(i).doubleValue() * 1000000; 
    883927        coordinate *= (1 / physicalSizeY); 
    884         y.setElementAt(new Float(coordinate), i); 
     928        y.setElementAt(new Double(coordinate), i); 
    885929      } 
    886930 
     
    889933  } 
    890934 
    891   private float parseFloat(String number) { 
     935  private double parseDouble(String number) { 
    892936    if (number != null) { 
    893937      number = number.replaceAll(",", "."); 
    894       return Float.parseFloat(number); 
    895     } 
    896     return 0f; 
     938      return Double.parseDouble(number); 
     939    } 
     940    return 0; 
    897941  } 
    898942 
     
    918962  class Laser { 
    919963    public Integer wavelength; 
    920     public float intensity; 
     964    public double intensity; 
    921965    public String id; 
    922966    public int index; 
  • trunk/components/bio-formats/src/loci/formats/in/LeicaHandler.java

    r5658 r5687  
    274274    else if (qName.equals("Image")) { 
    275275      if (!linkedInstruments) { 
     276        int c = 0; 
    276277        for (Detector d : detectors) { 
    277           if (detectorChannel < numChannels) { 
    278             String id = MetadataTools.createLSID( 
    279               "Detector", numDatasets, detectorChannel); 
    280             store.setDetectorID(id, numDatasets, detectorChannel); 
    281             store.setDetectorType(d.type, numDatasets, detectorChannel); 
    282             store.setDetectorModel(d.model, numDatasets, detectorChannel); 
    283             store.setDetectorZoom(d.zoom, numDatasets, detectorChannel); 
    284             store.setDetectorOffset(d.offset, numDatasets, detectorChannel); 
    285             store.setDetectorVoltage(d.voltage, numDatasets, detectorChannel); 
    286  
     278          String id = MetadataTools.createLSID( 
     279            "Detector", numDatasets, detectorChannel); 
     280          store.setDetectorID(id, numDatasets, detectorChannel); 
     281          store.setDetectorType(d.type, numDatasets, detectorChannel); 
     282          store.setDetectorModel(d.model, numDatasets, detectorChannel); 
     283          store.setDetectorZoom(d.zoom, numDatasets, detectorChannel); 
     284          store.setDetectorOffset(d.offset, numDatasets, detectorChannel); 
     285          store.setDetectorVoltage(d.voltage, numDatasets, detectorChannel); 
     286 
     287          if (c < numChannels) { 
    287288            if (d.active) { 
    288               store.setDetectorSettingsOffset(d.offset, numDatasets, 
    289                 detectorChannel); 
    290               store.setDetectorSettingsDetector( 
    291                 id, numDatasets, detectorChannel); 
     289              store.setDetectorSettingsOffset(d.offset, numDatasets, c); 
     290              store.setDetectorSettingsDetector(id, numDatasets, c); 
     291              c++; 
    292292            } 
    293  
    294             detectorChannel++; 
    295           } 
    296         } 
    297  
     293          } 
     294          detectorChannel++; 
     295        } 
     296 
     297        int filter = 0; 
    298298        for (int i=0; i<nextFilter; i++) { 
    299           String id = MetadataTools.createLSID("Filter", numDatasets, i); 
    300           if (i < numChannels) { 
     299          while (filter < detectors.size() && !detectors.get(filter).active) { 
     300            filter++; 
     301          } 
     302          if (filter >= detectors.size() || filter >= numChannels) break; 
     303          String id = MetadataTools.createLSID("Filter", numDatasets, filter); 
     304          if (i < numChannels && detectors.get(filter).active) { 
    301305            store.setLogicalChannelSecondaryEmissionFilter( 
    302306              id, numDatasets, i); 
    303307          } 
     308          filter++; 
    304309        } 
    305310      } 
     
    645650          store.setTransmittanceRangeCutOut(new Integer(m.cutOut), numDatasets, 
    646651            nextFilter); 
     652          /* debug */ System.out.println("(648) linking " + filter + " to " + 
     653            nextChannel); 
    647654          store.setLogicalChannelSecondaryEmissionFilter(filter, numDatasets, 
    648655            nextChannel); 
Note: See TracChangeset for help on using the changeset viewer.