Skip to content
Snippets Groups Projects
Commit 54bc67c8 authored by cramakri's avatar cramakri
Browse files

LMS-1502 Completed implementation of image metadata extraction.

SVN: 16296
parent aa2e57ad
No related branches found
No related tags found
No related merge requests found
......@@ -18,13 +18,17 @@ package ch.systemsx.cisd.cina.shared.metadata;
import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import ch.systemsx.cisd.cina.shared.labview.Cluster;
import ch.systemsx.cisd.cina.shared.labview.DBL;
import ch.systemsx.cisd.cina.shared.labview.EW;
import ch.systemsx.cisd.cina.shared.labview.LVData;
import ch.systemsx.cisd.cina.shared.labview.LVDataBoolean;
import ch.systemsx.cisd.cina.shared.labview.LVDataParser;
import ch.systemsx.cisd.cina.shared.labview.LVDataString;
import ch.systemsx.cisd.cina.shared.labview.U32;
import ch.systemsx.cisd.cina.shared.labview.U8;
/**
* Class for extracting the metadata from a folder containing an image + metadata.
......@@ -33,12 +37,22 @@ import ch.systemsx.cisd.cina.shared.labview.LVDataString;
*/
public class ImageMetadataExtractor
{
private final Map<String, String> metadata;
private final Map<String, String> metadataMap;
private final File folder;
private LVData lvdata;
private static final String METADATA_FILE_NAME = "metadata.xml";
private static final HashMap<String, String> prefixMap;
static
{
prefixMap = new HashMap<String, String>();
prefixMap.put("Pixelsize (nm)", "Size");
prefixMap.put("Image dimension (px)", "Dimension");
}
/**
* Create an image metadata with a parent metadata.
*
......@@ -47,19 +61,27 @@ public class ImageMetadataExtractor
*/
public ImageMetadataExtractor(Map<String, String> parentMetadata, File folder)
{
this.metadata = new HashMap<String, String>(parentMetadata);
this.metadataMap = new HashMap<String, String>(parentMetadata);
this.folder = folder;
}
public Map<String, String> getMetadata()
/**
* Get the metadata extracted from the file in the form of a hash map. Parse must be called
* before getting the metadata.
*/
public Map<String, String> getMetadataMap()
{
return metadata;
assert lvdata != null;
return metadataMap;
}
/**
* Parse the metadata file.
*/
public void parse()
{
File metadataFile = new File(folder, METADATA_FILE_NAME);
LVData lvdata = LVDataParser.parse(metadataFile);
lvdata = LVDataParser.parse(metadataFile);
if (null == lvdata)
{
throw new IllegalArgumentException("Could not parse metadata in file "
......@@ -73,10 +95,49 @@ public class ImageMetadataExtractor
}
Cluster cluster = lvdata.getClusters().get(0);
List<LVDataString> lvdataStrings = cluster.getStrings();
for (LVDataString lvdataString : lvdataStrings)
parseCluster(cluster, "");
}
private void parseCluster(Cluster cluster, String prefix)
{
for (LVDataString lvdataString : cluster.getStrings())
{
metadataMap.put(prefix + lvdataString.getName(), lvdataString.getValue());
}
for (U8 u8 : cluster.getU8s())
{
metadataMap.put(prefix + u8.getName(), u8.getValue().toString());
}
for (U32 u32 : cluster.getU32s())
{
metadataMap.put(prefix + u32.getName(), u32.getValue().toString());
}
for (DBL dbl : cluster.getDbls())
{
metadataMap.put(prefix + dbl.getName(), dbl.getValue().toString());
}
for (LVDataBoolean bool : cluster.getBooleans())
{
metadataMap.put(prefix + bool.getName(), bool.getValue().toString());
}
for (EW ew : cluster.getEws())
{
metadataMap.put(prefix + ew.getName(), ew.getChosenValue());
}
for (Cluster subcluster : cluster.getClusters())
{
metadata.put(lvdataString.getName(), lvdataString.getValue());
String clusterPrefix = prefixMap.get(subcluster.getName());
if (null == clusterPrefix)
{
clusterPrefix = "";
}
parseCluster(subcluster, clusterPrefix);
}
}
}
......@@ -37,10 +37,28 @@ public class ImageMetadataExtractorTest extends AssertJUnit
"sourceTest/java/ch/systemsx/cisd/cina/shared/metadata/Annotations/Replica for MRC files/MRC for Thomas/test20090422_BacklashRef.mrc");
ImageMetadataExtractor metadata = new ImageMetadataExtractor(parentMetadata, folder);
metadata.parse();
Map<String, String> metadataMap = metadata.getMetadata();
Map<String, String> metadataMap = metadata.getMetadataMap();
System.out.println(metadataMap);
assertEquals(16, metadataMap.size());
assertEquals("", metadataMap.get("Annotation"));
assertEquals("CM10", metadataMap.get("Microscope"));
assertEquals("thomas.braun@unibas.ch", metadataMap.get("Operator"));
assertEquals("test20090422_BacklashRef.mrc", metadataMap.get("Filename"));
assertEquals("1.7691349E-5", metadataMap.get("SizeX"));
assertEquals("1.7691349E-5", metadataMap.get("SizeY"));
assertEquals("0.0", metadataMap.get("SizeZ"));
assertEquals("2048", metadataMap.get("DimensionX"));
assertEquals("2048", metadataMap.get("DimensionY"));
assertEquals("1", metadataMap.get("DimensionZ"));
assertEquals("false", metadataMap.get("StackFlag"));
assertEquals("false", metadataMap.get("ColorFlag"));
assertEquals("16 bit SI", metadataMap.get("Data-type"));
assertEquals("-32417.0", metadataMap.get("Min"));
assertEquals("-29705.0", metadataMap.get("Max"));
assertEquals("2", metadataMap.get("Rating"));
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment