diff --git a/Packages/lesiontracker/client/compatibility/crTool.js b/Packages/lesiontracker/client/compatibility/crTool.js
index 773200e2c..24d3bb28b 100644
--- a/Packages/lesiontracker/client/compatibility/crTool.js
+++ b/Packages/lesiontracker/client/compatibility/crTool.js
@@ -1,10 +1,10 @@
(function($, cornerstone, cornerstoneMath, cornerstoneTools) {
'use strict';
+
var crToolInterface = cornerstoneTools.crunexTool('crTool');
cornerstoneTools.crTool = crToolInterface.crunex;
cornerstoneTools.crTool.setConfiguration(crToolInterface.defaultConfiguration);
cornerstoneTools.crToolTouch = crToolInterface.crunexTouch;
-
})($, cornerstone, cornerstoneMath, cornerstoneTools);
diff --git a/Packages/lesiontracker/client/components/lesionTableTimepointCell/lesionTableTimepointCell.js b/Packages/lesiontracker/client/components/lesionTableTimepointCell/lesionTableTimepointCell.js
index 4f449c958..19ccf25d2 100644
--- a/Packages/lesiontracker/client/components/lesionTableTimepointCell/lesionTableTimepointCell.js
+++ b/Packages/lesiontracker/client/components/lesionTableTimepointCell/lesionTableTimepointCell.js
@@ -83,6 +83,11 @@ Template.lesionTableTimepointCell.events({
var currentTimepointID = this.timepointId;
var timepointData = currentMeasurement.timepoints[currentTimepointID];
+
+ if (!timepointData) {
+ return;
+ }
+
var measurementData = {
id: currentMeasurement._id,
timepointId: currentTimepointID,
diff --git a/Packages/lesiontracker/client/components/nonTargetLesionDialog/nonTargetLesionDialog.html b/Packages/lesiontracker/client/components/nonTargetLesionDialog/nonTargetLesionDialog.html
index 559564493..6c837f79c 100644
--- a/Packages/lesiontracker/client/components/nonTargetLesionDialog/nonTargetLesionDialog.html
+++ b/Packages/lesiontracker/client/components/nonTargetLesionDialog/nonTargetLesionDialog.html
@@ -61,6 +61,17 @@
+
+
+
+
diff --git a/Packages/lesiontracker/client/components/nonTargetLesionDialog/nonTargetLesionDialog.js b/Packages/lesiontracker/client/components/nonTargetLesionDialog/nonTargetLesionDialog.js
index de1514271..00c9368c2 100644
--- a/Packages/lesiontracker/client/components/nonTargetLesionDialog/nonTargetLesionDialog.js
+++ b/Packages/lesiontracker/client/components/nonTargetLesionDialog/nonTargetLesionDialog.js
@@ -173,11 +173,6 @@ changeNonTargetLocationCallback = function(measurementData, eventData, doneCallb
// Make sure the context menu is closed when the user clicks away
$('.removableBackdrop').one('mousedown touchstart', function() {
closeHandler(dialog);
-
- if (doneCallback && typeof doneCallback === 'function') {
- var deleteTool = true;
- doneCallback(measurementData, deleteTool);
- }
});
// Find the select option box
@@ -320,6 +315,17 @@ Template.nonTargetLesionDialog.events({
var dialog = Template.nonTargetLesionDialog.dialog;
closeHandler(dialog);
},
+ 'click a.convertNonTarget': function(evt) {
+ var measurementData = Template.nonTargetLesionDialog.measurementData;
+ var dialog = Template.nonTargetLesionDialog.dialog;
+
+ var button = $(evt.currentTarget);
+ var toolType = button.data('type');
+
+ convertNonTarget(measurementData, toolType);
+
+ closeHandler(dialog);
+ },
'keydown #lesionLocationDialog, keydown #lesionLocationRelabelDialog': function(e) {
var dialog = Template.nonTargetLesionDialog.dialog;
@@ -331,11 +337,28 @@ Template.nonTargetLesionDialog.events({
}
});
+var conversionOptions = [{
+ id: 'bidirectional',
+ name: 'Measurable Target'
+}, {
+ id: 'crTool',
+ name: 'Complete Response (CR)'
+}, {
+ id: 'unTool',
+ name: 'Not Evaluable (NE)'
+}, {
+ id: 'exTool',
+ name: 'Excluded (EX)'
+}];
+
Template.nonTargetLesionDialog.helpers({
lesionLocations: function() {
return LesionLocations.find();
},
locationResponses: function() {
return LocationResponses.find();
+ },
+ conversionOptions: function() {
+ return conversionOptions;
}
});
diff --git a/Packages/lesiontracker/lib/convertNonTarget.js b/Packages/lesiontracker/lib/convertNonTarget.js
new file mode 100644
index 000000000..87c5e5046
--- /dev/null
+++ b/Packages/lesiontracker/lib/convertNonTarget.js
@@ -0,0 +1,70 @@
+var responseTypes = {
+ crTool: 'CR',
+ exTool: 'EX',
+ unTool: 'UN'
+};
+
+convertNonTarget = function(measurementData, newTooltype) {
+ if (measurementData.toolType !== 'nonTarget') {
+ return;
+ }
+
+ var measurement = Measurements.findOne(measurementData.id);
+
+ var timepoint = Timepoints.findOne({
+ timepointId: measurementData.timepointId
+ });
+
+ if (timepoint && timepoint.timepointType !== 'followup') {
+ log.warn('Not a followup');
+ return;
+ }
+
+ // Next, update the measurementData and add it to the new tool type
+ var newMeasurement = {
+ id: 'notready',
+ lesionNumber: LesionManager.getNewLesionNumber(measurementData.timepointId, false),
+ visible: true,
+ active: true,
+ imageId: measurementData.imageId,
+ seriesInstanceUid: measurementData.seriesInstanceUid,
+ studyInstanceUid: measurementData.studyInstanceUid,
+ patientId: measurementData.patientId,
+ isTarget: false,
+ toolType: newTooltype
+ };
+
+ newMeasurement.handles = measurementData.handles;
+
+ if (responseTypes[newTooltype]) {
+ newMeasurement.response = responseTypes[newTooltype];
+ }
+
+ // Adds lesion data to timepoints array
+ LesionManager.updateLesionData(newMeasurement);
+
+ // Set the new Measurement to have the same location as the old one
+ if (measurement.location && measurement.locationId) {
+ var existingMeasurement = Measurements.findOne({
+ lesionNumber: newMeasurement.lesionNumber,
+ isTarget: newMeasurement.isTarget
+ });
+
+ if (!existingMeasurement) {
+ return;
+ }
+
+ Measurements.update(existingMeasurement._id, {
+ $set: {
+ location: measurement.location,
+ locationId: measurement.locationId
+ }
+ });
+ }
+
+ if (measurement) {
+ // Remove the timepointData from this Measurement and update it
+ // in the database, if it is already in the database
+ clearMeasurementTimepointData(measurement._id, measurementData.timepointId);
+ }
+};
diff --git a/Packages/lesiontracker/lib/timepointAutoCheck.js b/Packages/lesiontracker/lib/timepointAutoCheck.js
index c712377c3..959aee768 100644
--- a/Packages/lesiontracker/lib/timepointAutoCheck.js
+++ b/Packages/lesiontracker/lib/timepointAutoCheck.js
@@ -1,11 +1,14 @@
// If timepoint is baseline, sets lesion tool as active tool
setTimepointTools = function(timepoint) {
+ if (!timepoint) {
+ return;
+ }
var disabledBaselineTools = ["crunexTools"];
var states = toolManager.getToolDefaultStates();
var disabledToolButtons = states.disabledToolButtons;
- if ((timepoint.timepointType).toLowerCase() === "baseline") {
+ if (timepoint.timepointType === "baseline") {
// Set active tool as lesion tool
toolManager.setActiveTool('bidirectional');
disabledBaselineTools.forEach(function(tool) {
@@ -14,7 +17,6 @@ setTimepointTools = function(timepoint) {
disabledToolButtons.push(tool);
}
});
-
} else {
toolManager.setActiveTool(toolManager.getDefaultTool());
// Remove disabled baseline tools
diff --git a/Packages/lesiontracker/log.js b/Packages/lesiontracker/log.js
index 7635f29ef..e0c4a0310 100644
--- a/Packages/lesiontracker/log.js
+++ b/Packages/lesiontracker/log.js
@@ -1,3 +1,3 @@
// Create package logger using loglevel
// https://atmospherejs.com/spacejamio/loglevel
-log = loglevel.createPackageLogger('lesiontracker', defaultLevel = 'info');
+log = loglevel.createPackageLogger('lesiontracker', defaultLevel = 'warn');
diff --git a/Packages/lesiontracker/package.js b/Packages/lesiontracker/package.js
index c087e8408..de6b0ec65 100644
--- a/Packages/lesiontracker/package.js
+++ b/Packages/lesiontracker/package.js
@@ -56,7 +56,6 @@ Package.onUse(function(api) {
bare: true
});
-
// Trial Criteria data validation (the Meteor package is currently out-of-date)
api.addFiles('client/compatibility/validate.js', 'client', {
bare: true
@@ -71,7 +70,6 @@ Package.onUse(function(api) {
api.addFiles('client/components/associationModal/associationModal.styl', 'client');
api.addFiles('client/components/associationModal/associationModal.js', 'client');
-
api.addFiles('client/components/activeEntry/activeEntry.styl', 'client');
api.addFiles('client/components/activeEntry/activeEntry.js', 'client');
@@ -180,6 +178,7 @@ Package.onUse(function(api) {
api.addFiles('lib/clearTools.js', 'client');
api.addFiles('lib/calculateTotalLesionBurden.js', 'client');
api.addFiles('lib/convertToNonTarget.js', 'client');
+ api.addFiles('lib/convertNonTarget.js', 'client');
api.addFiles('lib/timepointAutoCheck.js', 'client');
api.addFiles('lib/syncMeasurementAndToolData.js', 'client');
@@ -190,7 +189,6 @@ Package.onUse(function(api) {
api.addFiles('lib/handleMeasurementModified.js', 'client');
api.addFiles('lib/handleMeasurementRemoved.js', 'client');
-
// Export global functions
api.export('pixelSpacingAutorunCheck', 'client');
api.export('handleMeasurementAdded', 'client');
@@ -212,9 +210,9 @@ Package.onUse(function(api) {
api.export('getTrialCriteriaConstraints', 'client');
api.export('calculateTotalLesionBurden', 'client');
api.export('convertToNonTarget', 'client');
+ api.export('convertNonTarget', 'client');
api.export('timepointAutoCheck', 'client');
-
// Export global objects
api.export('TrialResponseCriteria', 'client');
api.export('TrialCriteriaConstraints', 'client');