ami.js
Version:
<p align="center"> <img src="https://cloud.githubusercontent.com/assets/214063/23213764/78ade038-f90c-11e6-8208-4fcade5f3832.png" width="60%"> </p>
125 lines (104 loc) • 3.92 kB
JavaScript
/* globals describe, it, expect, beforeEach*/
import ParsersDicom from '../../src/parsers/parsers.dicom';
import ParsersNifti from '../../src/parsers/parsers.nifti';
let dicomDataset = {
format: 'dicom',
url: '/base/data/dicom/adi_slice.dcm',
parser: ParsersDicom,
};
let niftiDataset = {
format: 'nifti',
url: '/base/data/nifti/adi_slice.nii',
parser: ParsersNifti,
};
// let nrrdDataset = {
// format: 'nrrd',
// url: '/base/data/nrrd/adi_slice.nrrd',
// parser: ParsersNrrd
// };
function crop(value, decimals) {
return (Math.floor(Math.pow(10, decimals) * value) / Math.pow(10, decimals));
}
function test(dataset, datasetDicom) {
let parserDicom = null;
beforeEach((done) => {
// fetch dicom data
let oReqDicom = new XMLHttpRequest();
oReqDicom.open('GET', datasetDicom.url, true);
oReqDicom.responseType = 'arraybuffer';
oReqDicom.onload = () => {
let buffer = oReqDicom.response;
if (buffer) {
parserDicom = new datasetDicom.parser({
url: datasetDicom.url,
buffer}
, 0);
done();
}
};
oReqDicom.send();
});
// test extraction of tags of interest
describe(dataset.format, function() {
let parser = null;
beforeEach((done) => {
// fetch other data
let oReqData = new XMLHttpRequest();
oReqData.open('GET', dataset.url, true);
oReqData.responseType = 'arraybuffer';
oReqData.onload = () => {
let buffer = oReqData.response;
if (buffer) {
parser = new dataset.parser({
url: dataset.url,
buffer}
, 0);
done();
}
};
oReqData.send();
});
it('image position', function() {
let frameIndex = 0;
let dicomImagePosition = parserDicom.imagePosition(frameIndex);
let imagePosition = parser.imagePosition(frameIndex);
expect(crop(imagePosition[0], 5)).toBe(crop(dicomImagePosition[0], 5));
expect(crop(imagePosition[1], 5)).toBe(crop(dicomImagePosition[1], 5));
expect(crop(imagePosition[2], 5)).toBe(crop(dicomImagePosition[2], 5));
});
it('pixel spacing', function() {
let frameIndex = 0;
let dicomPixelSpacing = parserDicom.pixelSpacing(frameIndex);
let pixelSpacing = parser.pixelSpacing(frameIndex);
// check typeof and length...
expect(crop(pixelSpacing[0], 5)).toBe(crop(dicomPixelSpacing[0], 5));
expect(crop(pixelSpacing[1], 5)).toBe(crop(dicomPixelSpacing[1], 5));
});
it('image orientation', function() {
let frameIndex = 0;
let dicomOrientation = parserDicom.imageOrientation(frameIndex);
let dataOrientation = parser.imageOrientation(frameIndex);
expect(crop(dataOrientation[0], 5)).toBe(crop(dicomOrientation[0], 5));
expect(crop(dataOrientation[1], 5)).toBe(crop(dicomOrientation[1], 5));
expect(crop(dataOrientation[2], 5)).toBe(crop(dicomOrientation[2], 5));
expect(crop(dataOrientation[3], 5)).toBe(crop(dicomOrientation[3], 5));
expect(crop(dataOrientation[4], 5)).toBe(crop(dicomOrientation[4], 5));
expect(crop(dataOrientation[5], 5)).toBe(crop(dicomOrientation[5], 5));
});
it('pixel data', function() {
let frameIndex = 0;
let rows = parser.rows(frameIndex);
let columns = parser.columns(frameIndex);
let dicomPixelData = parserDicom.extractPixelData(frameIndex);
let pixelData = parser.extractPixelData(frameIndex);
expect(pixelData.join()).toEqual(dicomPixelData.join());
});
});
}
describe('Orientation', function() {
test(niftiDataset, dicomDataset);
// test( nrrdDataset );
});
// test dataset that does not work anymore..
// does current visualization make sense?
// test first and last from siena