many improvements
This commit is contained in:
@@ -66,6 +66,7 @@
|
||||
|
||||
|
||||
function addFile(f, feedback) {
|
||||
console.log("add file", f)
|
||||
let dT = new DataTransfer();
|
||||
dT.clearData();
|
||||
dT.items.add(f);
|
||||
@@ -162,9 +163,6 @@
|
||||
// Probably no need to await here anymore
|
||||
//await readFile(el.files[0], el);
|
||||
|
||||
|
||||
|
||||
|
||||
$(el).parent().parent().find(".temp-thumb").remove();
|
||||
|
||||
let url = URL.createObjectURL(el.files[0])
|
||||
@@ -196,9 +194,9 @@
|
||||
checkHash(hash, el);
|
||||
|
||||
if ($("#drop-filenames").length > 0) {
|
||||
$("#drop-filenames").append(
|
||||
`<span data-input-id='${el.id}'><span>${n}: ${el.files[0].name}</span><img class='uploading${extra_class}' data-input-id='${el.id}' src=${url}></span>`
|
||||
)
|
||||
$("#drop-filenames").append(
|
||||
`<span data-input-id='${el.id}'><span>${n}: ${el.files[0].name}</span><img class='uploading${extra_class}' data-input-id='${el.id}' src=${url}></span>`
|
||||
)
|
||||
}
|
||||
} else {
|
||||
imageId = `wadouri:${url}`;
|
||||
@@ -223,7 +221,7 @@
|
||||
console.log("image", image)
|
||||
|
||||
let bytesView = image.getPixelData()
|
||||
let str = new TextDecoder("utf-8").decode(bytesView, );
|
||||
let str = new TextDecoder("utf-8").decode(bytesView, );
|
||||
|
||||
console.log("bytes", bytesView)
|
||||
console.log("str", str)
|
||||
@@ -363,7 +361,7 @@
|
||||
//}
|
||||
|
||||
image_set = $("#image_form_set .temp-thumb").get() //.map(function() { return $(this).attr("src")}).get();
|
||||
console.log(image_set);
|
||||
console.log("image set", image_set);
|
||||
//console.log()
|
||||
//if (n == image_set.length) {
|
||||
const event = new CustomEvent('loadDicomViewer', {
|
||||
@@ -376,4 +374,169 @@
|
||||
updateImagePositions();
|
||||
//}
|
||||
|
||||
}
|
||||
|
||||
function extractDicomDetails(byteArray) {
|
||||
// We need to setup a try/catch block because parseDicom will throw an exception
|
||||
// if you attempt to parse a non dicom part 10 file (or one that is corrupted)
|
||||
try {
|
||||
console.log("bytearray", byteArray)
|
||||
// parse byteArray into a DataSet object using the parseDicom library
|
||||
var dataSet = dicomParser.parseDicom(byteArray);
|
||||
console.log("ds", dataSet)
|
||||
|
||||
// dataSet contains the parsed elements. Each element is available via a property
|
||||
// in the dataSet.elements object. The property name is based on the elements group
|
||||
// and element in the following format: xggggeeee where gggg is the group number
|
||||
// and eeee is the element number with lowercase hex characters.
|
||||
|
||||
// To access the data for an element, we need to know its type and its tag.
|
||||
// We will get the sopInstanceUid from the file which is a string and
|
||||
// has the tag (0020,000D)
|
||||
var study_description = dataSet.string('x00081030');
|
||||
var accession_number = dataSet.string('x00080050').toLowerCase();
|
||||
var patient_id = dataSet.string('x00100020').toLowerCase();
|
||||
var modality = dataSet.string('x00080060');
|
||||
var projection = dataSet.string('x00185101');
|
||||
|
||||
try {
|
||||
var plane = dataSet.string('x00180022').toLowerCase();
|
||||
} catch (err) {
|
||||
var plane = "";
|
||||
}
|
||||
console.log("STUDY", study_description);
|
||||
console.log("acc", accession_number);
|
||||
console.log("pid", patient_id);
|
||||
console.log("projection", projection);
|
||||
console.log("plane", plane);
|
||||
|
||||
function select_plane(option) {
|
||||
let plane_select_object = document.getElementsByName("plane")[0]
|
||||
const $options = Array.from(plane_select_object.options);
|
||||
const optionToSelect = $options.find(item => item.text === option);
|
||||
optionToSelect.selected = true;
|
||||
|
||||
}
|
||||
|
||||
if (plane.includes("axial")) {
|
||||
select_plane("axial");
|
||||
} else if (plane.includes("sagittal")) {
|
||||
select_plane("sagittal");
|
||||
} else if (plane.includes("coronal")) {
|
||||
select_plane("coronal");
|
||||
} else if (plane.includes("ap")) {
|
||||
select_plane("AP");
|
||||
} else if (plane.includes("lat") | plane.includes("lateral")) {
|
||||
select_plane("lateral");
|
||||
} else if (plane.includes("pa")) {
|
||||
select_plane("PA");
|
||||
|
||||
}
|
||||
|
||||
|
||||
modality_map = {
|
||||
"DX": "Radiograph",
|
||||
"CR": "Radiograph",
|
||||
"CT": "CT",
|
||||
"MR": "MR",
|
||||
"RF": "Fluroscopy",
|
||||
"US": "Ultrasound",
|
||||
}
|
||||
|
||||
if (modality in modality_map) {
|
||||
let modality_select_object = document.getElementsByName("modality")[0]
|
||||
const $options = Array.from(modality_select_object.options);
|
||||
const optionToSelect = $options.find(item => item.text === modality_map[modality]);
|
||||
optionToSelect.selected = true;
|
||||
|
||||
|
||||
|
||||
} else {
|
||||
toastr.info(`Unable to automatically set modality: ${modality}`);
|
||||
}
|
||||
|
||||
// If the dicom study_description contains multiple values select the first
|
||||
study_description = study_description.split(",")[0].trim();
|
||||
|
||||
to_replace = ["lt", "rt", "contrast", "LT", "RT", "Contrast"];
|
||||
|
||||
for (let i = 0; i < to_replace.length; i++) {
|
||||
|
||||
study_description = study_description.replace(to_replace[i], "");
|
||||
}
|
||||
|
||||
let select_object = document.getElementsByName("examination")[0]
|
||||
|
||||
if (select_object.value == "") {
|
||||
$.get(`${select_object.dataset.autocompleteLightUrl}?q=${study_description}`, (data) => {
|
||||
console.log(data)
|
||||
if (data.results.length == 1) {
|
||||
|
||||
$(select_object).select2("trigger", "select", {
|
||||
data: data.results[0]
|
||||
})
|
||||
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
not_anon = false;
|
||||
|
||||
site_codes = ["ref", "rk9", "ra9", "rh8", "rbz", "rba"]
|
||||
|
||||
for (let i = 0; i < site_codes.length; i++) {
|
||||
if (
|
||||
accession_number.startsWith(site_codes[i]) ||
|
||||
patient_id.startsWith(site_codes[i])) {
|
||||
not_anon = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (not_anon) {
|
||||
toastr.warning(`File does not appear to be annonymised<br/>Accession: ${accession_number} <br/>Patient ID: ${patient_id}<br/>`, 'Anonymisation warning', {
|
||||
"closeButton": false,
|
||||
"debug": false,
|
||||
"newestOnTop": false,
|
||||
"progressBar": false,
|
||||
"positionClass": "toast-top-full-width",
|
||||
"preventDuplicates": false,
|
||||
"onclick": null,
|
||||
"showDuration": "0",
|
||||
"hideDuration": "0",
|
||||
"timeOut": 0,
|
||||
"extendedTimeOut": 0,
|
||||
"showEasing": "swing",
|
||||
"hideEasing": "linear",
|
||||
"showMethod": "fadeIn",
|
||||
"hideMethod": "fadeOut",
|
||||
});
|
||||
}
|
||||
|
||||
// TODO: fix
|
||||
//$.ajax({
|
||||
// url: `{% url 'generic:examination-autocomplete' %}/${encodeURI(study_description)}`,
|
||||
// //context: document.body,
|
||||
// success: function(data){
|
||||
// console.log(data)
|
||||
// }
|
||||
//});
|
||||
|
||||
//// try to match with a study description (if not already selected)
|
||||
//if ($(`#id_examination_to option`).length < 1) {
|
||||
// option = $(`#id_examination_from option[title*='${study_description}' i]`);
|
||||
|
||||
// if (option.length) {
|
||||
// option.appendTo($("#id_examination_to"));
|
||||
// toastr.success(`Examination set to ${option.attr('title')} from dicom data`);
|
||||
// } else {
|
||||
// toastr.warning(
|
||||
// `Unable to set examination ${study_description} from dicom data (it needs creating)`);
|
||||
|
||||
// }
|
||||
//}
|
||||
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user