Skip to content

Commit

Permalink
code linting
Browse files Browse the repository at this point in the history
  • Loading branch information
katjaq committed Apr 27, 2020
1 parent a2d4e50 commit 86b28af
Showing 1 changed file with 88 additions and 62 deletions.
150 changes: 88 additions & 62 deletions mri.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,28 +16,32 @@ function MRI() {
if (testScriptPresent && testScriptPresent()) {
console.log('Script', path, 'already present, not loading it again');
resolve();

return;
}
var s = document.createElement('script');
s.src = path;
s.onload = function() {
console.log('Loaded', path);
resolve();

return;
};
s.onerror = function() {
console.error('ERROR');
reject();

return;
};
document.body.appendChild(s);
});

return pr;
},
init: function init() {
var pr = new Promise(function(resolve, reject) {
me.loadScript(me.struct_url, function() {return window.Struct != undefined;})
.then(function() {return me.loadScript(me.pako_url, function() {return window.pako != undefined;});})
me.loadScript(me.struct_url, function() { return window.Struct !== undefined; })
.then(function() { return me.loadScript(me.pako_url, function() { return window.pako !== undefined; }); })
/*
var pr = me.loadScript('https://cdn.rawgit.com/r03ert0/mrijs/v0.0.2/mri.js',function(){return window.MRI!=undefined});
*/
Expand Down Expand Up @@ -137,8 +141,10 @@ function MRI() {
resolve();
});
});

return pr;
},

/**
* @function createNifti
* @desc create a nifti1 file
Expand All @@ -148,7 +154,7 @@ function MRI() {
* @param data array An array of size dim[0]*dim[1]*dim[2] containing the data to be encoded
* @returnValue Gzip compressed nifti format data
*/

createNifti: function createNifti(dim, pixdim, v2w, data) {
let sizeof_hdr = 348;
let dimensions = 4; // number of dimension values provided
Expand Down Expand Up @@ -197,17 +203,19 @@ function MRI() {
img[i] = data[i];
}
let nii = new Uint8Array(img.buffer.byteLength + vox_offset);
nii.set(hdr,0);
nii.set(hdr, 0);
nii.set(new Uint8Array(img.buffer), hdr.length);

var niigz = new pako.Deflate({gzip:true});
niigz.push(nii,true);
niigz.push(nii, true);

return niigz.result;
},

/**
* @function saveNifti
*/
* @function saveNifti
* @desc save a nifti1 file
*/
saveNifti: function saveNifti(niigz, name) {
var a = document.createElement('a');
var niigzBlob = new Blob([niigz]);
Expand Down Expand Up @@ -264,6 +272,7 @@ function MRI() {
};
reader.readAsArrayBuffer(file);
});

return pr;
},
NiiHdrLE: null,
Expand All @@ -273,29 +282,34 @@ function MRI() {
for (i = 0; i < arr.length; i++) {
arr[i] = dv.getInt16(2 * i, false);
}

return arr;
},
swapUint16: function swapUint16(arr) {
var i,dv = new DataView(arr.buffer);
for (i = 0; i < arr.length; i++) {
arr[i] = dv.getUint16(2 * i, false);
}

return arr;
},
swapInt32: function swapInt32(arr) {
var i,dv = new DataView(arr.buffer);
for (i = 0; i < arr.length; i++) {
arr[i] = dv.getInt32(4 * i, false);
}

return arr;
},
swapFloat32: function swapFloat32(arr) {
var i,dv = new DataView(arr.buffer);
for (i = 0; i < arr.length; i++) {
arr[i] = dv.getFloat32(4 * i, false);
}

return arr;
},

/**
* @function parseNifti
*/
Expand All @@ -304,7 +318,7 @@ function MRI() {

me.NiiHdrLE._setBuff(toBuffer(nii));
var h = JSON.parse(JSON.stringify(me.NiiHdrLE.fields));
if (h.sizeof_hdr != 348) {
if (h.sizeof_hdr !== 348) {
me.NiiHdrBE._setBuff(toBuffer(nii));
h = JSON.parse(JSON.stringify(me.NiiHdrBE.fields));
endianness = 'be';
Expand All @@ -315,62 +329,66 @@ function MRI() {

me.hdr = nii.slice(0, vox_offset);
me.datatype = h.datatype;
me.dim = [h.dim[1],h.dim[2],h.dim[3]];
me.dim = [h.dim[1], h.dim[2], h.dim[3]];
me.datadim = h.dim[4];
console.log(me.datadim);
me.pixdim = [h.pixdim[1],h.pixdim[2],h.pixdim[3]];
me.pixdim = [h.pixdim[1], h.pixdim[2], h.pixdim[3]];

switch (me.datatype) {
case 2: // UCHAR
me.data = new Uint8Array(nii,vox_offset);
break;
case 2: // UCHAR
me.data = new Uint8Array(nii, vox_offset);
break;
// case 256: // INT8
// me.data = new Uint8Array(nii,vox_offset);
// break;
case 4: // SHORT
if (endianness == 'le')
me.data = new Int16Array(nii,vox_offset);
else
me.data = me.swapInt16(new Int16Array(nii,vox_offset));
break;
case 8: // INT
if (endianness == 'le')
me.data = new Int32Array(nii,vox_offset);
else
me.data = me.swapInt32(new Int32Array(nii,vox_offset));
break;
case 16: // FLOAT
if (endianness == 'le')
me.data = new Float32Array(nii,vox_offset);
else
me.data = me.swapFloat32(new Float32Array(nii,vox_offset));
break;
case 256: // INT8
me.data = new Int8Array(nii,vox_offset);
break;
case 512: // UINT16
if (endianness == 'le')
me.data = new Uint16Array(nii,vox_offset);
else
me.data = me.swapUint16(new Uint16Array(nii,vox_offset));
break;
default:
console.error('Unknown dataType: ' + me.datatype);
case 4: // SHORT
if (endianness === 'le') {
me.data = new Int16Array(nii, vox_offset);
} else {
me.data = me.swapInt16(new Int16Array(nii, vox_offset));
}
break;
case 8: // INT
if (endianness === 'le') {
me.data = new Int32Array(nii, vox_offset);
} else {
me.data = me.swapInt32(new Int32Array(nii, vox_offset));
}
break;
case 16: // FLOAT
if (endianness === 'le') {
me.data = new Float32Array(nii, vox_offset);
} else {
me.data = me.swapFloat32(new Float32Array(nii, vox_offset));
}
break;
case 256: // INT8
me.data = new Int8Array(nii, vox_offset);
break;
case 512: // UINT16
if (endianness === 'le') {
me.data = new Uint16Array(nii, vox_offset);
} else {
me.data = me.swapUint16(new Uint16Array(nii, vox_offset));
}
break;
default:
console.error('Unknown dataType: ' + me.datatype);
}
},
multMatVec: function multMatVec(m, v) {
return [
m[0][0] * v[0] + m[0][1] * v[1] + m[0][2] * v[2] + m[0][3],
m[1][0] * v[0] + m[1][1] * v[1] + m[1][2] * v[2] + m[1][3],
m[2][0] * v[0] + m[2][1] * v[1] + m[2][2] * v[2] + m[2][3],
m[2][0] * v[0] + m[2][1] * v[1] + m[2][2] * v[2] + m[2][3]
];
},
multMatMat: function multMatMat(m, n) {
return [
[m[0][0]*n[0][0]+m[0][1]*n[1][0]+m[0][2]*n[2][0]+m[0][3]*n[3][0], m[0][0]*n[0][1]+m[0][1]*n[1][1]+m[0][2]*n[2][1]+m[0][3]*n[3][1], m[0][0]*n[0][2]+m[0][1]*n[1][2]+m[0][2]*n[2][2]+m[0][3]*n[3][2], m[0][0]*n[0][3]+m[0][1]*n[1][3]+m[0][2]*n[2][3]+m[0][3]*n[3][3]],
[m[1][0]*n[0][0]+m[1][1]*n[1][0]+m[1][2]*n[2][0]+m[1][3]*n[3][0], m[1][0]*n[0][1]+m[1][1]*n[1][1]+m[1][2]*n[2][1]+m[1][3]*n[3][1], m[1][0]*n[0][2]+m[1][1]*n[1][2]+m[1][2]*n[2][2]+m[1][3]*n[3][2], m[1][0]*n[0][3]+m[1][1]*n[1][3]+m[1][2]*n[2][3]+m[1][3]*n[3][3]],
[m[2][0]*n[0][0]+m[2][1]*n[1][0]+m[2][2]*n[2][0]+m[2][3]*n[3][0], m[2][0]*n[0][1]+m[2][1]*n[1][1]+m[2][2]*n[2][1]+m[2][3]*n[3][1], m[2][0]*n[0][2]+m[2][1]*n[1][2]+m[2][2]*n[2][2]+m[2][3]*n[3][2], m[2][0]*n[0][3]+m[2][1]*n[1][3]+m[2][2]*n[2][3]+m[2][3]*n[3][3]],
[m[3][0]*n[0][0]+m[3][1]*n[1][0]+m[3][2]*n[2][0]+m[3][3]*n[3][0], m[3][0]*n[0][1]+m[3][1]*n[1][1]+m[3][2]*n[2][1]+m[3][3]*n[3][1], m[3][0]*n[0][2]+m[3][1]*n[1][2]+m[3][2]*n[2][2]+m[3][3]*n[3][2], m[3][0]*n[0][3]+m[3][1]*n[1][3]+m[3][2]*n[2][3]+m[3][3]*n[3][3]]
[m[0][0]*n[0][0]+m[0][1]*n[1][0]+m[0][2]*n[2][0]+m[0][3]*n[3][0], m[0][0]*n[0][1]+m[0][1]*n[1][1]+m[0][2]*n[2][1]+m[0][3]*n[3][1], m[0][0]*n[0][2]+m[0][1]*n[1][2]+m[0][2]*n[2][2]+m[0][3]*n[3][2], m[0][0]*n[0][3]+m[0][1]*n[1][3]+m[0][2]*n[2][3]+m[0][3]*n[3][3]],
[m[1][0]*n[0][0]+m[1][1]*n[1][0]+m[1][2]*n[2][0]+m[1][3]*n[3][0], m[1][0]*n[0][1]+m[1][1]*n[1][1]+m[1][2]*n[2][1]+m[1][3]*n[3][1], m[1][0]*n[0][2]+m[1][1]*n[1][2]+m[1][2]*n[2][2]+m[1][3]*n[3][2], m[1][0]*n[0][3]+m[1][1]*n[1][3]+m[1][2]*n[2][3]+m[1][3]*n[3][3]],
[m[2][0]*n[0][0]+m[2][1]*n[1][0]+m[2][2]*n[2][0]+m[2][3]*n[3][0], m[2][0]*n[0][1]+m[2][1]*n[1][1]+m[2][2]*n[2][1]+m[2][3]*n[3][1], m[2][0]*n[0][2]+m[2][1]*n[1][2]+m[2][2]*n[2][2]+m[2][3]*n[3][2], m[2][0]*n[0][3]+m[2][1]*n[1][3]+m[2][2]*n[2][3]+m[2][3]*n[3][3]],
[m[3][0]*n[0][0]+m[3][1]*n[1][0]+m[3][2]*n[2][0]+m[3][3]*n[3][0], m[3][0]*n[0][1]+m[3][1]*n[1][1]+m[3][2]*n[2][1]+m[3][3]*n[3][1], m[3][0]*n[0][2]+m[3][1]*n[1][2]+m[3][2]*n[2][2]+m[3][3]*n[3][2], m[3][0]*n[0][3]+m[3][1]*n[1][3]+m[3][2]*n[2][3]+m[3][3]*n[3][3]]
];
},
inv4x4Mat: function inv4x4Mat(m) {
Expand All @@ -395,37 +413,44 @@ function MRI() {
inv[15] = m[0] * m[5] * m[10] - m[0] * m[6] * m[9] - m[4] * m[1] * m[10] + m[4] * m[2] * m[9] + m[8] * m[1] * m[6] - m[8] * m[2] * m[5];
det = m[0] * inv[0] + m[1] * inv[4] + m[2] * inv[8] + m[3] * inv[12];

if (det == 0)
if (det === 0) {
return;
}
det = 1.0 / det;
for (i = 0; i < 16; i++)
for (i = 0; i < 16; i++) {
inv[i] = inv[i] * det;
}

return inv;
},

/**
* @desc Obtain the affine matrix to pass from voxel indices to world
* coordinates (millimetres) from the nifti header
*/
* @function vox2mm
* @desc Obtain the affine matrix to pass from voxel indices to world
* coordinates (millimetres) from the nifti header
*/
vox2mm: function vox2mm() {
var h = JSON.parse(JSON.stringify(me.NiiHdrLE.fields));

return [
[h.srow_x[0], h.srow_x[1], h.srow_x[2], h.srow_x[3]],
[h.srow_y[0], h.srow_y[1], h.srow_y[2], h.srow_y[3]],
[h.srow_z[0], h.srow_z[1], h.srow_z[2], h.srow_z[3]],
[0,0,0,1]
[0, 0, 0, 1]
];
},

/**
* @desc Compute the affine matrix to pass from coordinates in world
* dimensions (millimetres) voxel indices by inverting the vox2mm
* matrix.
*/
* @function mm2vox
* @desc Compute the affine matrix to pass from coordinates in world
* dimensions (millimetres) voxel indices by inverting the vox2mm
* matrix.
*/
mm2vox: function mm2vox() {
var m = me.vox2mm();
var im = me.inv4x4Mat([...m[0], ...m[1], ...m[2], ...m[3]]);

return [im.splice(0,4), im.splice(0,4), im.splice(0,4), im];
return [im.splice(0, 4), im.splice(0, 4), im.splice(0, 4), im];
},
/**
* @todo Additional transformation functions
Expand Down Expand Up @@ -453,9 +478,9 @@ function MRI() {
[h.srow_x[2], h.srow_y[2], h.srow_z[2]]
];

var mi = {i: 0,v: 0};v2w[0].map(function(o, n) {if (Math.abs(o) > Math.abs(mi.v)) mi = {i: n,v: o};});
var mj = {i: 0,v: 0};v2w[1].map(function(o, n) {if (Math.abs(o) > Math.abs(mj.v)) mj = {i: n,v: o};});
var mk = {i: 0,v: 0};v2w[2].map(function(o, n) {if (Math.abs(o) > Math.abs(mk.v)) mk = {i: n,v: o};});
var mi = {i: 0, v: 0}; v2w[0].map(function(o, n) { if (Math.abs(o) > Math.abs(mi.v)) { mi = {i: n, v: o}; } });
var mj = {i: 0, v: 0}; v2w[1].map(function(o, n) { if (Math.abs(o) > Math.abs(mj.v)) { mj = {i: n, v: o}; } });
var mk = {i: 0, v: 0}; v2w[2].map(function(o, n) { if (Math.abs(o) > Math.abs(mk.v)) { mk = {i: n, v: o}; } });

me.s2v = {
x: mi.i, // correspondence between screen coordinate x and voxel coordinate i
Expand All @@ -478,5 +503,6 @@ function MRI() {
me.s2v.wpixdim[mk.i] = me.pixdim[2];
}
};

return me;
}

0 comments on commit 86b28af

Please sign in to comment.