comparison Tests/Tests.py @ 407:ad98466353c6

test_modify_subsequences
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 09 Jun 2021 16:53:02 +0200
parents 62ee5e57ee05
children 4e0b9fddbc71
comparison
equal deleted inserted replaced
406:62ee5e57ee05 407:ad98466353c6
7099 # In Orthanc <= 1.9.3, the two tests below failed 7099 # In Orthanc <= 1.9.3, the two tests below failed
7100 self.assertNotEqual('1.2.840.113619.6.95.31.0.3.4.1.3175.13.6054282', 7100 self.assertNotEqual('1.2.840.113619.6.95.31.0.3.4.1.3175.13.6054282',
7101 tags['0008,1250'][0]['0020,000d']) 7101 tags['0008,1250'][0]['0020,000d'])
7102 self.assertNotEqual('1.3.12.2.1107.5.1.4.11047.30000019111306043635400005028', 7102 self.assertNotEqual('1.3.12.2.1107.5.1.4.11047.30000019111306043635400005028',
7103 tags['0008,1250'][0]['0020,000e']) 7103 tags['0008,1250'][0]['0020,000e'])
7104
7105
7106 def test_modify_subsequences(self):
7107 # New in Orthanc 1.9.4 (cf. LSD-629)
7108 UploadInstance(_REMOTE, 'Issue22-NoPixelData.dcm')
7109 studies = DoGet(_REMOTE, '/studies')
7110 self.assertEqual(1, len(studies))
7111
7112 def GetTags(study):
7113 instances = DoGet(_REMOTE, '/studies/%s/instances' % study)
7114 self.assertEqual(1, len(instances))
7115 return DoGet(_REMOTE, '/instances/%s/tags?short' % instances[0]['ID'])
7116
7117 tags1 = GetTags(studies[0])
7118
7119 a = DoPost(_REMOTE, '/studies/%s/modify' % studies[0], {
7120 'Replace' : {
7121 'PatientName' : 'Hello1',
7122 'DimensionIndexSequence[1].DimensionDescriptionLabel' : 'Hello2',
7123 'DimensionIndexSequence[*].PatientName' : 'Hello3',
7124 'ReferencedImageEvidenceSequence[2].ReferencedSeriesSequence[0].ReferencedSOPSequence[0].ReferencedSOPInstanceUID' : 'Hello4',
7125 },
7126 'Remove' : [
7127 'ReferencedPerformedProcedureStepSequence',
7128 'PerformedProtocolCodeSequence[0].CodeValue',
7129 'SharedFunctionalGroupsSequence[*].ReferencedImageSequence[*].ReferencedSOPInstanceUID',
7130 'SharedFunctionalGroupsSequence[*].ReferencedImageSequence[1].ReferencedSOPClassUID',
7131 'SharedFunctionalGroupsSequence[2].ReferencedImageSequence', # Inexistent tag
7132 ]
7133 })
7134 tags2 = GetTags(a['ID'])
7135
7136 self.assertEqual('Anonymized1', tags1['0010,0010'])
7137 self.assertEqual('Hello1', tags2['0010,0010'])
7138
7139 self.assertEqual('Stack ID', tags1['0020,9222'][0]['0020,9421'])
7140 self.assertEqual('In-Stack Position Number', tags1['0020,9222'][1]['0020,9421'])
7141 self.assertEqual('Stack ID', tags2['0020,9222'][0]['0020,9421'])
7142 self.assertEqual('Hello2', tags2['0020,9222'][1]['0020,9421'])
7143
7144 for i in range(3):
7145 self.assertFalse('0010,0010' in tags1['0020,9222'][i])
7146 self.assertEqual('Hello3', tags2['0020,9222'][i]['0010,0010'])
7147
7148 self.assertEqual('1.3.46.670589.11.22237.5.20.1.1.7512.2014100814064168452',
7149 tags1['0008,9092'][2]['0008,1115'][0]['0008,1199'][0]['0008,1155'])
7150 self.assertEqual('Hello4',
7151 tags2['0008,9092'][2]['0008,1115'][0]['0008,1199'][0]['0008,1155'])
7152 self.assertEqual(tags1['0008,9092'][1]['0008,1115'][0]['0008,1199'][0]['0008,1155'],
7153 tags2['0008,9092'][1]['0008,1115'][0]['0008,1199'][0]['0008,1155'])
7154
7155 self.assertTrue('0008,1111' in tags1)
7156 self.assertFalse('0008,1111' in tags2)
7157 self.assertTrue('0008,0100' in tags1['0040,0260'][0])
7158 self.assertFalse('0008,0100' in tags2['0040,0260'][0])
7159
7160 for i in range(3):
7161 self.assertTrue('0008,1155' in tags1['5200,9229'][0]['0008,1140'][i])
7162 self.assertFalse('0008,1155' in tags2['5200,9229'][0]['0008,1140'][i])
7163 self.assertTrue('0008,1150' in tags1['5200,9229'][0]['0008,1140'][i])
7164
7165 self.assertTrue('0008,1150' in tags2['5200,9229'][0]['0008,1140'][0])
7166 self.assertFalse('0008,1150' in tags2['5200,9229'][0]['0008,1140'][1])
7167 self.assertTrue('0008,1150' in tags2['5200,9229'][0]['0008,1140'][2])
7168
7169 a = DoPost(_REMOTE, '/studies/%s/anonymize' % studies[0], {
7170 'Replace' : {
7171 'DimensionIndexSequence[1].DimensionDescriptionLabel' : 'Hello1',
7172 },
7173 'Remove' : [
7174 'SharedFunctionalGroupsSequence[*].ReferencedImageSequence[*].ReferencedSOPInstanceUID', # 5200,9229
7175 ],
7176 'Keep' : [
7177 'ReferencedImageEvidenceSequence', # 0008,9092
7178 'DimensionIndexSequence', # 0020,9222
7179 'PerFrameFunctionalGroupsSequence[*].2005,140f[*].SOPInstanceUID', # 5200,9230
7180 ]
7181 })
7182 tags3 = GetTags(a['ID'])
7183
7184 # UIDs
7185 for i in [ '0008,0018',
7186 '0010,0020',
7187 '0008,0018',
7188 '0010,0020' ]:
7189 self.assertNotEqual(tags1[i], tags3[i])
7190
7191 self.assertNotEqual(tags1['0020,9221'][0]['0020,9164'],
7192 tags3['0020,9221'][0]['0020,9164'])
7193
7194 self.assertNotEqual(tags1['5200,9229'][0]['2005,140e'][0]['0008,0014'],
7195 tags3['5200,9229'][0]['2005,140e'][0]['0008,0014'])
7196
7197 # http://dicom.nema.org/medical/dicom/current/output/chtml/part15/chapter_E.html#table_E.1-1
7198 # Removals (X)
7199 for i in [ '0008,0021',
7200 '0008,002a',
7201 '0008,0031',
7202 '0008,1030',
7203 '0008,103e',
7204 '0008,1111',
7205 '0010,21c0',
7206 '0040,0006',
7207 '0040,0241',
7208 '0040,0244',
7209 '0040,0245',
7210 '0040,0250',
7211 '0040,0251',
7212 '0040,0253',
7213 '0040,0254',
7214 '0040,0555',
7215 ]:
7216 self.assertTrue(i in tags1)
7217 self.assertFalse(i in tags3)
7218
7219 # Clearings (Z)
7220 for i in [ '0008,0020',
7221 '0008,0023',
7222 '0008,0030',
7223 '0008,0033' ]:
7224 self.assertNotEqual('', tags1[i])
7225 self.assertEqual('', tags3[i])
7226
7227 # Replace
7228 self.assertEqual('In-Stack Position Number', tags1['0020,9222'][1]['0020,9421'])
7229 self.assertEqual('Hello1', tags3['0020,9222'][1]['0020,9421'])
7230
7231 # "Keep" on DimensionIndexSequence
7232 for i in range(3):
7233 self.assertEqual(tags1['0020,9222'][i]['0020,9164'],
7234 tags3['0020,9222'][i]['0020,9164'])
7235
7236 # "Keep" on ReferencedImageEvidenceSequence
7237 self.assertEqual(json.dumps(tags1['0008,9092']),
7238 json.dumps(tags3['0008,9092']))
7239
7240 # "Keep" on PerFrameFunctionalGroupsSequence
7241 self.assertEqual(json.dumps(tags1['5200,9230']),
7242 json.dumps(tags3['5200,9230']))
7243
7244 # "Remove" on SharedFunctionalGroupsSequence
7245 for i in range(3):
7246 self.assertTrue('0008,1155' in tags1['5200,9229'][0]['0008,1140'][i])
7247 self.assertFalse('0008,1155' in tags3['5200,9229'][0]['0008,1140'][i])
7248
7249 with open('/tmp/a', 'w') as f:
7250 f.write(json.dumps(tags1, indent=4, sort_keys=True))
7251 with open('/tmp/b', 'w') as f:
7252 f.write(json.dumps(tags3, indent=4, sort_keys=True))