Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 37 additions & 31 deletions components/formats-gpl/src/loci/formats/in/MIASReader.java
Original file line number Diff line number Diff line change
Expand Up @@ -903,6 +903,7 @@ else if (name.endsWith("overlay.tif")) {
Color[] colors = new Color[getSizeC()];

int nextROI = 0;
int roiRefIndex = 0;
for (AnalysisFile af : analysisFiles) {
String file = af.filename;
String name = new Location(file).getName();
Expand All @@ -925,7 +926,8 @@ else if (name.endsWith("overlay.tif")) {

for (int j=start+1; j<lines.length; j++) {
populateROI(columnNames, lines[j].split("\t"), well,
nextROI++, position[1], position[2], store);
nextROI++, position[1], position[2], store, roiRefIndex);
roiRefIndex++;
}
}
else if (name.endsWith("AllModesOverlay.tif")) {
Expand All @@ -942,11 +944,15 @@ else if (name.endsWith("AllModesOverlay.tif")) {
store.setChannelColor(colors[position[3]], s, position[3]);
}
if (position[3] == 0) {
nextROI += parseMasks(store, well, nextROI, file);
int nOverlays = parseMasks(store, well, nextROI, file, roiRefIndex);
nextROI += nOverlays;
roiRefIndex += nOverlays;
}
}
else if (name.endsWith("overlay.tif")) {
nextROI += parseMasks(store, well, nextROI, file);
int nOverlays = parseMasks(store, well, nextROI, file, roiRefIndex);
nextROI += nOverlays;
roiRefIndex += nOverlays;
}
}
}
Expand Down Expand Up @@ -1029,24 +1035,24 @@ private int[] getPositionFromFile(String file) {
}

private void populateROI(List<String> columns, String[] data, int series,
int roi, int time, int z, MetadataStore store)
int roiIndex, int time, int z, MetadataStore store, int roiRefIndex)
{
String roiID = MetadataTools.createLSID("ROI", roi, 0);
store.setROIID(roiID, roi);
store.setImageROIRef(roiID, series, roi);
String roiID = MetadataTools.createLSID("ROI", roiIndex, 0);
store.setROIID(roiID, roiIndex);
store.setImageROIRef(roiID, series, roiRefIndex);

store.setEllipseID(MetadataTools.createLSID("Shape", roi, 0), roi, 0);
store.setEllipseTheT(new NonNegativeInteger(time), roi, 0);
store.setEllipseTheZ(new NonNegativeInteger(z), roi, 0);
store.setEllipseX(DataTools.parseDouble(data[columns.indexOf("Col")]), roi, 0);
store.setEllipseY(DataTools.parseDouble(data[columns.indexOf("Row")]), roi, 0);
store.setEllipseText(data[columns.indexOf("Label")], roi, 0);
store.setEllipseID(MetadataTools.createLSID("Shape", roiIndex, 0), roiIndex, 0);
store.setEllipseTheT(new NonNegativeInteger(time), roiIndex, 0);
store.setEllipseTheZ(new NonNegativeInteger(z), roiIndex, 0);
store.setEllipseX(DataTools.parseDouble(data[columns.indexOf("Col")]), roiIndex, 0);
store.setEllipseY(DataTools.parseDouble(data[columns.indexOf("Row")]), roiIndex, 0);
store.setEllipseText(data[columns.indexOf("Label")], roiIndex, 0);

double diam = Double.parseDouble(data[columns.indexOf("Cell Diam.")]);
double radius = diam / 2;

store.setEllipseRadiusX(radius, roi, 0);
store.setEllipseRadiusY(radius, roi, 0);
store.setEllipseRadiusX(radius, roiIndex, 0);
store.setEllipseRadiusY(radius, roiIndex, 0);

// NB: other attributes are "Nucleus Area", "Cell Type", and
// "Mean Nucleus Intens."
Expand Down Expand Up @@ -1164,7 +1170,7 @@ public void parseMasks(MetadataStore overlayStore)
int roi = 0;
parseMasks = true;
for (AnalysisFile roiFile : roiFiles) {
roi += parseMasks(overlayStore, roiFile.well, roi, roiFile.filename);
roi += parseMasks(overlayStore, roiFile.well, roi, roiFile.filename, 0);
}
parseMasks = originalMaskParsing;
}
Expand All @@ -1174,33 +1180,33 @@ public void parseMasks(MetadataStore overlayStore)
* MetadataStore.
* @return the number of masks parsed
*/
private int parseMasks(MetadataStore store, int series, int roi,
String overlayTiff) throws FormatException, IOException
private int parseMasks(MetadataStore store, int series, int roiIndex,
String overlayTiff, int roiRefIndex) throws FormatException, IOException
{
if (!parseMasks || series >= getSeriesCount()) return 0;
int nOverlays = 0;
for (int i=0; i<3; i++) {
String roiId = MetadataTools.createLSID("ROI", series, roi + nOverlays);
String roiId = MetadataTools.createLSID("ROI", series, roiIndex + nOverlays);
String maskId =
MetadataTools.createLSID("Mask", series, roi + nOverlays, 0);
MetadataTools.createLSID("Mask", series, roiIndex + nOverlays, 0);
overlayFiles.put(maskId, overlayTiff);
overlayPlanes.put(maskId, i);

boolean validMask = populateMaskPixels(series, roi + nOverlays, 0, store);
boolean validMask = populateMaskPixels(series, roiIndex + nOverlays, 0, store);
if (validMask) {
store.setROIID(roiId, roi + nOverlays);
store.setROIID(roiId, roiIndex + nOverlays);

String maskID = MetadataTools.createLSID("Shape", roi + nOverlays, 0);
store.setMaskID(maskID, roi + nOverlays, 0);
store.setMaskX(0d, roi + nOverlays, 0);
store.setMaskY(0d, roi + nOverlays, 0);
store.setMaskWidth((double) getSizeX(), roi + nOverlays, 0);
store.setMaskHeight((double) getSizeY(), roi + nOverlays, 0);
String maskID = MetadataTools.createLSID("Shape", roiIndex + nOverlays, 0);
store.setMaskID(maskID, roiIndex + nOverlays, 0);
store.setMaskX(0d, roiIndex + nOverlays, 0);
store.setMaskY(0d, roiIndex + nOverlays, 0);
store.setMaskWidth((double) getSizeX(), roiIndex + nOverlays, 0);
store.setMaskHeight((double) getSizeY(), roiIndex + nOverlays, 0);

int color = 0xff000000 | (0xff << (8 * (2 - i)));
store.setMaskStrokeColor(new Color(color), roi + nOverlays, 0);
store.setMaskFillColor(new Color(color), roi + nOverlays, 0);
store.setImageROIRef(roiId, series, roi + nOverlays);
store.setMaskStrokeColor(new Color(color), roiIndex + nOverlays, 0);
store.setMaskFillColor(new Color(color), roiIndex + nOverlays, 0);
store.setImageROIRef(roiId, series, roiRefIndex + nOverlays);
nOverlays++;
}
}
Expand Down
21 changes: 12 additions & 9 deletions components/formats-gpl/src/loci/formats/in/ZeissLSMReader.java
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,7 @@ public class ZeissLSMReader extends FormatReader {
private double originX, originY, originZ;

private int totalROIs = 0;
private transient int roiRefIndex;

private int prevPlane = -1;
private int prevChannel = 0;
Expand Down Expand Up @@ -973,6 +974,7 @@ else if (getSizeT() > 1) {

if (getMetadataOptions().getMetadataLevel() != MetadataLevel.NO_OVERLAYS)
{
roiRefIndex = 0;
for (int i=0; i<overlayOffsets.length; i++) {
parseOverlays(series, overlayOffsets[i], overlayKeys[i], store);
}
Expand Down Expand Up @@ -1614,6 +1616,7 @@ protected void parseOverlays(int series, long data, String suffix,

String roiID = MetadataTools.createLSID("ROI", i);
String shapeID = MetadataTools.createLSID("Shape", i, 0);
roiRefIndex++;

Length fontSize = FormatTools.getFontSize(fontHeight);
Length line = new Length(lineWidth, UNITS.PIXEL);
Expand All @@ -1632,7 +1635,7 @@ protected void parseOverlays(int series, long data, String suffix,
store.setLabelFontSize(fontSize, i, 0);
}
store.setLabelStrokeWidth(line, i, 0);
store.setImageROIRef(roiID, series, i);
store.setImageROIRef(roiID, series, roiRefIndex);

break;
case LINE:
Expand All @@ -1652,7 +1655,7 @@ protected void parseOverlays(int series, long data, String suffix,
store.setLineFontSize(fontSize, i, 0);
}
store.setLineStrokeWidth(line, i, 0);
store.setImageROIRef(roiID, series, i);
store.setImageROIRef(roiID, series, roiRefIndex);

break;
case SCALE_BAR:
Expand Down Expand Up @@ -1685,7 +1688,7 @@ protected void parseOverlays(int series, long data, String suffix,
store.setRectangleFontSize(fontSize, i, 0);
}
store.setRectangleStrokeWidth(line, i, 0);
store.setImageROIRef(roiID, series, i);
store.setImageROIRef(roiID, series, roiRefIndex);

break;
case ELLIPSE:
Expand Down Expand Up @@ -1745,7 +1748,7 @@ else if (knots == 3) {
store.setEllipseFontSize(fontSize, i, 0);
}
store.setEllipseStrokeWidth(line, i, 0);
store.setImageROIRef(roiID, series, i);
store.setImageROIRef(roiID, series, roiRefIndex);

break;
case CIRCLE:
Expand All @@ -1768,7 +1771,7 @@ else if (knots == 3) {
store.setEllipseFontSize(fontSize, i, 0);
}
store.setEllipseStrokeWidth(line, i, 0);
store.setImageROIRef(roiID, series, i);
store.setImageROIRef(roiID, series, roiRefIndex);

break;
case CIRCLE_3POINT:
Expand Down Expand Up @@ -1808,7 +1811,7 @@ else if (knots == 3) {
store.setEllipseFontSize(fontSize, i, 0);
}
store.setEllipseStrokeWidth(line, i, 0);
store.setImageROIRef(roiID, series, i);
store.setImageROIRef(roiID, series, roiRefIndex);

break;
case ANGLE:
Expand All @@ -1835,7 +1838,7 @@ else if (knots == 3) {
store.setPolylineFontSize(fontSize, i, 0);
}
store.setPolylineStrokeWidth(line, i, 0);
store.setImageROIRef(roiID, series, i);
store.setImageROIRef(roiID, series, roiRefIndex);

break;
case CLOSED_POLYLINE:
Expand Down Expand Up @@ -1875,7 +1878,7 @@ else if (knots == 3) {
store.setPolygonStrokeWidth(line, i, 0);
store.setPolygonID(shapeID, i, 0);
}
store.setImageROIRef(roiID, series, i);
store.setImageROIRef(roiID, series, roiRefIndex);

break;
case CLOSED_BEZIER:
Expand Down Expand Up @@ -1915,7 +1918,7 @@ else if (knots == 3) {
}
store.setPolygonStrokeWidth(line, i, 0);
}
store.setImageROIRef(roiID, series, i);
store.setImageROIRef(roiID, series, roiRefIndex);

break;
default:
Expand Down