Hi Kevin,
Nearly done. This is the script I've got so far:
subject := match[(0010,4000),"Project: (.*); Subject: (.*); Session: (.*)",2]
session := match[(0010,4000),"Project: (.*); Subject: (.*); Session: (.*)",3]
//(0038,4000) [VisitCommets] is our project variable since we cannot use a variable in the pattern matching below
(0038,4000) := match[(0010,4000),"Project: (.*); Subject: (.*); Session: (.*)",1]
(0010,0010) ~ "KIDS.*" : (0038,4000) := "KIDS"
(0010,0010) ~ "kids.*" : (0038,4000) := "KIDS"
(0010,0010) ~ "AADHS.*" : (0038,4000) := "AADHS"
(0010,0010) ~ "aadhs.*" : (0038,4000) := "AADHS"
(0010,4000) := format["Project: {0}; Subject: {1}; Session: {2}",(0038,4000),subject,session]
2 things...
First. I tried to use the pattern matching and assign the KIDS/AADHS strings. I received the following error, so used the empty (0038,4000) field. Not ideal, so if there is a better way, I'd like to know.
line 5:25 no viable alternative at input 'project'
org/nrg/dcm/edit/EditDCMTreeParser.g: node from line 0:0 no viable alternative at input '(0010,0010) ~ "kids.*" : (0038,4000) := "KIDS"'
Second. The above script works in DicomRemap, but when placed in the Annonymization tab in XNAT 1.6.1 it doesn't work. The problem appears to be the last line. The error in application logs is below. Any ideas?
Thanks,
Ben
2013-03-26 11:07:39,784 [pool-1-thread-8] ERROR org.nrg.dcm.CStoreService - C-STORE operation failed
org.nrg.action.ServerException: java.io.IOException: java.lang.NullPointerException
at org.nrg.xnat.archive.GradualDicomImporter.call(GradualDicomImporter.java:431)
at org.nrg.dcm.CStoreService.doCStore(CStoreService.java:231)
at org.nrg.dcm.CStoreService.cstore(CStoreService.java:194)
at org.dcm4che2.net.DicomServiceRegistry.process(DicomServiceRegistry.java:238)
at org.dcm4che2.net.NetworkApplicationEntity.perform(NetworkApplicationEntity.java:1158)
at org.dcm4che2.net.Association.onDimseRQ(Association.java:979)
at org.dcm4che2.net.PDUDecoder.decodeDIMSE(PDUDecoder.java:530)
at org.dcm4che2.net.Association.onPDataTF(Association.java:956)
at org.dcm4che2.net.State$Sta6.receivedPDataTF(State.java:239)
at org.dcm4che2.net.Association.receivedPDataTF(Association.java:952)
at org.dcm4che2.net.PDUDecoder.nextPDU(PDUDecoder.java:231)
at org.dcm4che2.net.Association.run(Association.java:851)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
Caused by: java.io.IOException: java.lang.NullPointerException
at org.nrg.dcm.Anonymize.anonymize(Anonymize.java:474)
at org.nrg.dcm.Anonymize.anonymize(Anonymize.java:207)
at org.nrg.xnat.archive.GradualDicomImporter.call(GradualDicomImporter.java:400)
... 14 more
Caused by: java.lang.NullPointerException
at java.util.regex.Matcher.getTextLength(Matcher.java:1234)
at java.util.regex.Matcher.reset(Matcher.java:308)
at java.util.regex.Matcher.<init>(Matcher.java:228)
at java.util.regex.Pattern.matcher(Pattern.java:1088)
at org.nrg.dcm.edit.fn.Match.evaluate(Match.java:76)
at org.nrg.dcm.edit.fn.Match.access$000(Match.java:26)
at org.nrg.dcm.edit.fn.Match$1.on(Match.java:70)
at org.nrg.dcm.edit.Assignment.toString(Assignment.java:112)
at java.lang.String.valueOf(String.java:2854)
at java.lang.StringBuilder.append(StringBuilder.java:128)
at org.nrg.dcm.edit.Statement.toString(Statement.java:55)
at java.lang.String.valueOf(String.java:2854)
at java.lang.StringBuilder.append(StringBuilder.java:128)
at java.util.AbstractCollection.toString(AbstractCollection.java:450)
at java.lang.String.valueOf(String.java:2854)
at java.lang.StringBuffer.append(StringBuffer.java:232)
at org.slf4j.helpers.MessageFormatter.deeplyAppendParameter(MessageFormatter.java:237)
at org.slf4j.helpers.MessageFormatter.arrayFormat(MessageFormatter.java:196)
at org.slf4j.helpers.MessageFormatter.format(MessageFormatter.java:111)
at org.slf4j.impl.JCLLoggerAdapter.trace(JCLLoggerAdapter.java:88)
at org.nrg.dcm.edit.ScriptApplicator.<init>(ScriptApplicator.java:104)
at org.nrg.dcm.edit.ScriptApplicator.<init>(ScriptApplicator.java:119)
at org.nrg.dcm.Anonymize$AnonymizeHelper.call(Anonymize.java:356)
at org.nrg.dcm.Anonymize$AnonymizeHelper.call(Anonymize.java:324)
at org.nrg.dcm.WorkOnCopyOp.run(WorkOnCopyOp.java:51)
at org.nrg.transaction.Run.runTransaction(Run.java:8)
at org.nrg.dcm.Anonymize.anonymize(Anonymize.java:470)
... 16 more
2013-03-26 11:07:39,785 [pool-1-thread-8] INFO org.dcm4che2.net.PDUEncoder - XNAT(1534) << 1:C-STORE-RSP[pcid=105, status=a700H
error=java.io.IOException: java.lang.NullPointerException
cuid=1.2.840.10008.5.1.4.1.1.4/MR Image Storage
iuid=1.3.12.2.1107.5.99.2.3938.30000012110518243557800001231]
2013-03-26 11:07:39,785 [pool-1-thread-8] DEBUG org.dcm4che2.net.PDUEncoder - Command:
(0000,0002) UI #26 [1.2.840.10008.5.1.4.1.1.4] Affected SOP Class UID
(0000,0100) US #2 [32769] Command Field
(0000,0120) US #2 [1] Message ID Being Responded To
(0000,0800) US #2 [257] Data Set Type
(0000,0900) US #2 [42752] Status
(0000,0902) LO #52 [java.io.IOException: java.lang.NullPointerException] Error Comment
(0000,1000) UI #56 [1.3.12.2.1107.5.99.2.3938.30000012110518243557800001231] Affected SOP Instance U