package ij.util;
import ij.*;
import ij.process.*;
import ij.plugin.DICOM;
/** DICOM utilities */
public class DicomTools {
private static final int MAX_DIGITS = 5;
private static String[] sliceLabels;
/** Sorts a DICOM stack by image number. */
public static ImageStack sort(ImageStack stack) {
if (IJ.debugMode) IJ.log("Sorting by DICOM image number");
if (stack.getSize()==1) return stack;
String[] strings = getSortStrings(stack, "0020,0013");
if (strings==null) return stack;
StringSorter.sort(strings);
ImageStack stack2 = null;
if (stack.isVirtual())
stack2 = ((VirtualStack)stack).sortDicom(strings, sliceLabels, MAX_DIGITS);
else
stack2 = sortStack(stack, strings);
return stack2!=null?stack2:stack;
}
private static ImageStack sortStack(ImageStack stack, String[] strings) {
ImageProcessor ip = stack.getProcessor(1);
ImageStack stack2 = new ImageStack(ip.getWidth(), ip.getHeight(), ip.getColorModel());
for (int i=0; i1) {
ImageStack stack = imp.getStack();
String label = stack.getSliceLabel(imp.getCurrentSlice());
if (label!=null && label.indexOf('\n')>0) metadata = label;
}
if (metadata==null)
metadata = (String)imp.getProperty("Info");
return getTag(metadata, id);
}
private static double getSeriesNumber(String tags) {
double series = getNumericTag(tags, "0020,0011");
if (Double.isNaN(series)) series = 0;
return series;
}
private static double getNumericTag(String hdr, String tag) {
String value = getTag(hdr, tag);
if (value==null) return Double.NaN;
int index3 = value.indexOf("\\");
if (index3>0)
value = value.substring(0, index3);
return Tools.parseDouble(value);
}
private static String getTag(String hdr, String tag) {
if (hdr==null) return null;
int index1 = hdr.indexOf(tag);
if (index1==-1) return null;
//IJ.log(hdr.charAt(index1+11)+" "+hdr.substring(index1,index1+20));
if (hdr.charAt(index1+11)=='>') {
// ignore tags in sequences
index1 = hdr.indexOf(tag, index1+10);
if (index1==-1) return null;
}
index1 = hdr.indexOf(":", index1);
if (index1==-1) return null;
int index2 = hdr.indexOf("\n", index1);
String value = hdr.substring(index1+1, index2);
return value;
}
}
Ads help maintain this website.