Skip to content

Commit c8b97ec

Browse files
committed
ENH: Add function to retrieve all the scan sessions. And use appropriate patient-id when importing a dicom/raw file
1 parent a546fe0 commit c8b97ec

File tree

2 files changed

+135
-3
lines changed

2 files changed

+135
-3
lines changed

index.js

Lines changed: 132 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,39 @@ xnat.getSubjectExperiments = function(projectid, subjectid){
224224
})
225225
}
226226

227+
xnat.getSubjectSession = function(projectid, subjectid, sessionid){
228+
return new Promise(function(resolve, reject){
229+
230+
var params = {
231+
format: "json"
232+
}
233+
234+
var url;
235+
if(sessionid){
236+
url = "/data/archive/projects/" + projectid + "/subjects/" + subjectid + "/experiments/" + sessionid + "?" + qs.stringify(params);
237+
}else{
238+
url = "/data/archive/projects/" + projectid + "/subjects/" + subjectid + "/experiments?" + qs.stringify(params);
239+
}
240+
241+
var options = {
242+
url: xnat.getXnatUrl() + url,
243+
jar: xnat.jar
244+
}
245+
246+
request(options, function(err, res, body){
247+
if(err){
248+
reject(err);
249+
}else{
250+
if(res.statusCode === 200){
251+
resolve(JSON.parse(body));
252+
}else{
253+
reject(body);
254+
}
255+
}
256+
});
257+
})
258+
}
259+
227260
xnat.createSubject = function(projectid, subjectid) {
228261
return new Promise(function(resolve, reject){
229262
var options = {
@@ -245,7 +278,7 @@ xnat.createSubject = function(projectid, subjectid) {
245278
});
246279
}
247280

248-
xnat.uploadImage = function(projectid, subjectid, sessionid, filename){
281+
xnat.uploadImage = function(projectid, subjectid, experimentid, filename){
249282
return new Promise(function(resolve, reject){
250283

251284
var params = {
@@ -254,7 +287,7 @@ xnat.uploadImage = function(projectid, subjectid, sessionid, filename){
254287
dest: "/archive/projects/" + projectid,
255288
"import-handler" : "gradual-DICOM",
256289
SUBJECT_ID: subjectid,
257-
EXPT_LABEL: sessionid
290+
EXPT_LABEL: experimentid
258291
}
259292

260293
var options = {
@@ -278,6 +311,99 @@ xnat.uploadImage = function(projectid, subjectid, sessionid, filename){
278311
})
279312
}
280313

314+
xnat.uploadConvertedImage = function(projectid, subjectid, experimentid, scanid, filename){
315+
return new Promise(function(resolve, reject){
316+
317+
var params = {
318+
inbody: true
319+
}
320+
321+
var options = {
322+
url: xnat.getXnatUrl() + "/data/archive/projects/" + projectid + "/subjects/" + subjectid + "/experiments/" + experimentid + "/scans/" + scanid + "/files/" + path.basename(filename) + "?" + qs.stringify(params),
323+
method: "PUT",
324+
jar: xnat.jar,
325+
body: fs.readFileSync(filename)
326+
}
327+
328+
request(options, function(err, res, body){
329+
if(err){
330+
reject(err);
331+
}else{
332+
if(res.statusCode === 200){
333+
console.log("File imported");
334+
resolve(body);
335+
}else{
336+
reject(body);
337+
}
338+
}
339+
});
340+
})
341+
}
342+
343+
xnat.getScanFiles = function(projectid, subjectid, experimentid, scanid){
344+
return new Promise(function(resolve, reject){
345+
346+
var params = {
347+
format: "json"
348+
}
349+
350+
var options = {
351+
url: xnat.getXnatUrl() + "/data/archive/projects/" + projectid + "/subjects/" + subjectid + "/experiments/" + experimentid + "/scans/" + scanid + "/files?" + qs.stringify(params),
352+
method: "GET",
353+
jar: xnat.jar
354+
}
355+
356+
request(options, function(err, res, body){
357+
if(err){
358+
reject(err);
359+
}else{
360+
try{
361+
if(res.statusCode === 200){
362+
var images = JSON.parse(body);
363+
resolve(images.ResultSet.Result);
364+
}else{
365+
reject(body);
366+
}
367+
}catch(e){
368+
console.error("xnat.getScanFiles", e);
369+
reject(e);
370+
}
371+
372+
}
373+
});
374+
});
375+
}
376+
377+
xnat.deleteFile = function(uri){
378+
return new Promise(function(resolve, reject){
379+
380+
var options = {
381+
url: xnat.getXnatUrl() + uri,
382+
method: "DELETE",
383+
jar: xnat.jar
384+
}
385+
386+
request(options, function(err, res, body){
387+
if(err){
388+
reject(err);
389+
}else{
390+
try{
391+
if(res.statusCode === 200){
392+
console.log("File deleted")
393+
resolve(body);
394+
}else{
395+
reject(body);
396+
}
397+
}catch(e){
398+
console.error("xnat.getScanFiles", e);
399+
reject(e);
400+
}
401+
402+
}
403+
});
404+
});
405+
}
406+
281407
xnat.triggerPipelines = function(projectid, subjectid, experimentid){
282408
return new Promise(function(resolve, reject){
283409

@@ -450,6 +576,10 @@ xnat.upload = function(){
450576
require(path.join(__dirname, 'upload'))(xnat);
451577
}
452578

579+
xnat.importConverted = function(){
580+
require(path.join(__dirname, 'importConverted'))(xnat);
581+
}
582+
453583
const getConfigFile = function () {
454584
return new Promise(function(resolve, reject){
455585
try {

upload.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,13 +105,15 @@ module.exports = function(xnat){
105105
pid = patientid;
106106
}else{
107107
pid = dcmData.dataset["00100020"].value;
108+
pid = pid.replace(/[ .:|&;$%@"<>()+,]/g, "_");
108109
}
109110

110111
var sessid;
111112
if(sessionid){
112113
sessid = sessionid;
113114
}else{
114-
sessid = dcmData.dataset["00080020"].value;
115+
//Create a unique session id. With the old one it might conflict with existing sessions.
116+
sessid = pid + "-" + dcmData.dataset["00080020"].value;
115117
}
116118
return xnat.uploadImage(projectid, pid, sessid, file);
117119
})

0 commit comments

Comments
 (0)