hanging protocols first commit

This commit is contained in:
Weiwei 2015-11-16 12:47:45 -06:00
parent edc9ecf69c
commit f7d03c5c11
5 changed files with 161 additions and 0 deletions

View File

@ -0,0 +1,17 @@
Package.describe({
name: "weiwei:hangingprotocols",
summary: "DICOM Haning Protocols",
version: '0.0.1'
});
Package.onUse(function (api) {
api.use("weiwei:dicomservices");
api.addFiles('server/namespace.js', 'server');
api.export("DICOMHP", 'server');
});
Package.onTest(function (api){
api.use(["weiwei:hangingprotocols"]);
});

View File

@ -0,0 +1,20 @@
DICOMHP.imageSet = function(setNumber, category) {
this.setNumber = setNumber;
this.category = category;
};
DICOMHP.imageSet.prototype.setRelativeTime = function(time) {
this.relativeTime = time;
};
DICOMHP.imageSet.prototype.setTimeUnits = function(units) {
this.timeUnits = units;
};
DICOMHP.imageSet.prototype.setPriorValue = function(priorValue) {
this.priorValue = priorValue;
};
DICOMHP.imageSet.prototype.retrieve = function(studyInstanceId) {
};

View File

@ -0,0 +1,46 @@
DICOMHP.match = function(studyInstanceUID) {
var metadata = DICOMService.retrieveMetadata(studyInstanceUID);
if (!metadata) {
return [];
}
var params = {"00080016" : "1.2.840.10008.5.1.4.38.1"}, modalities = metadata["00080061"].Value[0],
modalityMatch = null;
if (modalities) {
modalityMatch = [];
modalities.split('\\').forEach(function(modality){
if (modality && modality != 'SC') {
modalityMatch.push(modality);
}
});
}
var firstInstance = DICOMService.retrieveMetadata(studyInstanceUID, null, null, {limit : 1}),
lateralityMatch = null;
if (firstInstance.length > 0) {
lateralityMatch = firstInstance[0]["00200060"].Value[0];
}
// since orthanc doesn't support sequence matching
var allProtocols = DICOMService.searchForInstances(null, null, params);
if (allProtocols.length < 1) {
return [];
}
var matchedPrtocols = [];
allProtocols.forEach(function(protocol) {
var definitionSequence = protocol["0072000C"].Value;
definitionSequence.forEach(function(definition){
var defModality = definition["00080060"].Value[0];
if (defModality && modalityMatch && modalityMatch.indexOf(defModality) != -1) {
matchedPrtocols.push(protocol);
return;
}
var defLaterality = definition["00200060"].Value[0];
if (defLaterality && (defLaterality == lateralityMatch)) {
matchedPrtocols.push(protocol);
return;
}
});
});
return matchedPrtocols;
};

View File

@ -0,0 +1 @@
DICOMHP = {};

View File

@ -0,0 +1,77 @@
DICOMHP.select = function(hpInstance) {
var imageSetsSequence = hpInstance["00720020"].Value;
if (!imageSetsSequence) {
return [];
}
var matchedImageSets = [];
imageSetsSequence.forEach(function(imageSet) {
var selectorSequence = imageSet["00720022"].Value;
selectorSequence.forEach(function(selector){
var usageFlag = selector["00720024"].Value[0],
selectorAttribute = selector["00720026"].Value[0],
selectorAttributeVR = selector["00720050"].Value[0],
selectorAttributeValue = null;
if (selectorAttributeVR == 'SQ') {
return;
} else if (selectorAttributeVR == 'AT') {
selectorAttributeValue = selector["00720060"].Value[0];
} else if (selectorAttributeVR == 'CS') {
selectorAttributeValue = selector["00720062"].Value[0];
} else if (selectorAttributeVR == 'IS') {
selectorAttributeValue = selector["00720064"].Value[0];
} else if (selectorAttributeVR == 'LO') {
selectorAttributeValue = selector["00720066"].Value[0];
} else if (selectorAttributeVR == 'LT') {
selectorAttributeValue = selector["00720068"].Value[0];
} else if (selectorAttributeVR == 'PN') {
selectorAttributeValue = selector["0072006A"].Value[0];
} else if (selectorAttributeVR == 'SH') {
selectorAttributeValue = selector["0072006C"].Value[0];
} else if (selectorAttributeVR == 'ST') {
selectorAttributeValue = selector["0072006E"].Value[0];
} else if (selectorAttributeVR == 'UT') {
selectorAttributeValue = selector["00720070"].Value[0];
} else if (selectorAttributeVR == 'DS') {
selectorAttributeValue = selector["00720072"].Value[0];
} else if (selectorAttributeVR == 'FD') {
selectorAttributeValue = selector["00720074"].Value[0];
} else if (selectorAttributeVR == 'FL') {
selectorAttributeValue = selector["00720076"].Value[0];
} else if (selectorAttributeVR == 'UL') {
selectorAttributeValue = selector["00720078"].Value[0];
} else if (selectorAttributeVR == 'US') {
selectorAttributeValue = selector["0072007A"].Value[0];
} else if (selectorAttributeVR == 'SL') {
selectorAttributeValue = selector["0072007C"].Value[0];
} else if (selectorAttributeVR == 'SS') {
selectorAttributeValue = selector["0072007E"].Value[0];
}
if (selectorAttributeValue !== null) {
}
});
var timeBasedImageSetsSequence = imageSet["00720030"].Value;
timeBasedImageSetsSequence.forEach(function(timeImageSet){
var setNumber = timeImageSet["00720032"].Value[0], selectorCategory = timeImageSet["00720034"].Value[0];
var mImageSet = new DICOMHP.imageSet(setNumber, selectorCategory);
if (selectorCategory == 'RELATIVE_TIME') {
var relativeTime = timeImageSet["00720038"].Value[0], timeUnits = timeImageSet["0072003A"].Value[0];
mImageSet.setRelativeTime(relativeTime);
mImageSet.setTimeUnits(timeUnits);
} else if (selectorCategory == 'ABSTRACT_PRIOR') {
var priorValue = timeImageSet["0072003C"].Value[0];
mImageSet.setPriorValue(priorValue);
}
matchedImageSets.push(mImageSet);
});
});
return matchedImageSets;
};