comparison Tests/Tests.py @ 255:02c3d91b155c

added anonymization test for RTH data (currently failing)
author amazy
date Tue, 03 Sep 2019 14:28:44 +0200
parents 05b77ade5e1d
children 397bcd1d16b2
comparison
equal deleted inserted replaced
254:05b77ade5e1d 255:02c3d91b155c
4667 # This fails on Orthanc <= 1.5.6 4667 # This fails on Orthanc <= 1.5.6
4668 self.assertEqual(tags['0008,1115'][0]['0020,000e'], 4668 self.assertEqual(tags['0008,1115'][0]['0020,000e'],
4669 cr[0]['MainDicomTags']['SeriesInstanceUID']) 4669 cr[0]['MainDicomTags']['SeriesInstanceUID'])
4670 4670
4671 4671
4672 def test_anonymize_relationships_5(self):
4673 ct1 = UploadInstance(_REMOTE, 'HierarchicalAnonymization/RTH/CT01.dcm')
4674 rt1 = UploadInstance(_REMOTE, 'HierarchicalAnonymization/RTH/RT.dcm')
4675 oStudyId = ct1['ParentStudy']
4676 oCtInstanceId = ct1['ID']
4677 oRtInstanceId = rt1['ID']
4678
4679 oCtTags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % oCtInstanceId)
4680 oRtTags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % oRtInstanceId)
4681
4682 # first validate the relationships in the source data
4683 oStudyUID = oCtTags['StudyInstanceUID']
4684 oRtSeriesUID = oRtTags['SeriesInstanceUID']
4685 oRtInstanceUID = oRtTags['SOPInstanceUID']
4686 oRtFrameOfReferenceUID = oRtTags['ReferencedFrameOfReferenceSequence'][0]['FrameOfReferenceUID']
4687 oCtSeriesUID = oCtTags['SeriesInstanceUID']
4688 oCtInstanceUID = oCtTags['SOPInstanceUID']
4689 oCtFrameOfReferenceUID = oCtTags['FrameOfReferenceUID']
4690
4691 oContourSequenceCount = len(oRtTags['ROIContourSequence'][0]['ContourSequence'])
4692 self.assertEqual(oCtFrameOfReferenceUID, oRtFrameOfReferenceUID)
4693 self.assertEqual(oStudyUID, oRtTags['ReferencedFrameOfReferenceSequence'][0]['RTReferencedStudySequence'][0]['ReferencedSOPInstanceUID'])
4694 self.assertEqual(oCtSeriesUID, oRtTags['ReferencedFrameOfReferenceSequence'][0]['RTReferencedStudySequence'][0]['RTReferencedSeriesSequence'][0]['SeriesInstanceUID'])
4695 self.assertEqual(oCtInstanceUID, oRtTags['ReferencedFrameOfReferenceSequence'][0]['RTReferencedStudySequence'][0]['RTReferencedSeriesSequence'][0]['ContourImageSequence'][0]['ReferencedSOPInstanceUID'])
4696 self.assertEqual(oCtInstanceUID, oRtTags['ROIContourSequence'][0]['ContourSequence'][oContourSequenceCount-1]['ContourImageSequence'][0]['ReferencedSOPInstanceUID'])
4697
4698 ### anonymize
4699
4700 aStudyId = DoPost(_REMOTE, '/studies/%s/anonymize' % oStudyId, '{}',
4701 'application/json')['ID']
4702
4703 ### validate
4704
4705 aSeries = DoGet(_REMOTE, '/studies/%s/series' % aStudyId)
4706 self.assertEqual(2, len(aSeries))
4707
4708 aCt = list(filter(lambda x: x['MainDicomTags']['Modality'] == 'CT', aSeries))
4709 aRt = list(filter(lambda x: x['MainDicomTags']['Modality'] == 'RTSTRUCT', aSeries))
4710
4711 aCtInstanceId = aCt[0]['Instances'][0]
4712 aRtInstanceId = aRt[0]['Instances'][0]
4713
4714 aCtTags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % aCtInstanceId)
4715 aRtTags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % aRtInstanceId)
4716
4717 # now validate the relationships in the anonymized data
4718 aStudyUID = aCtTags['StudyInstanceUID']
4719 aRtSeriesUID = aRtTags['SeriesInstanceUID']
4720 aRtInstanceUID = aRtTags['SOPInstanceUID']
4721 aRtFrameOfReferenceUID = aRtTags['ReferencedFrameOfReferenceSequence'][0]['FrameOfReferenceUID']
4722 aCtSeriesUID = aCtTags['SeriesInstanceUID']
4723 aCtInstanceUID = aCtTags['SOPInstanceUID']
4724 aCtFrameOfReferenceUID = aCtTags['FrameOfReferenceUID']
4725
4726 aContourSequenceCount = len(aRtTags['ROIContourSequence'][0]['ContourSequence'])
4727 # make sure all UIDs have been updated
4728 self.assertNotEqual(oStudyUID, aStudyUID)
4729 self.assertNotEqual(oRtSeriesUID, aRtSeriesUID)
4730 self.assertNotEqual(oRtInstanceUID, aRtInstanceUID)
4731 self.assertNotEqual(oRtFrameOfReferenceUID, aRtFrameOfReferenceUID)
4732 self.assertNotEqual(oCtSeriesUID, aCtSeriesUID)
4733 self.assertNotEqual(oCtInstanceUID, aCtInstanceUID)
4734 self.assertNotEqual(oCtFrameOfReferenceUID, aCtFrameOfReferenceUID)
4735
4736 # validate the relationships
4737 self.assertEqual(oContourSequenceCount, aContourSequenceCount)
4738 self.assertEqual(aCtFrameOfReferenceUID, aRtFrameOfReferenceUID)
4739 # fails !!! self.assertEqual(aStudyUID, aRtTags['ReferencedFrameOfReferenceSequence'][0]['RTReferencedStudySequence'][0]['ReferencedSOPInstanceUID'])
4740 # fails !!! self.assertEqual(aCtSeriesUID, aRtTags['ReferencedFrameOfReferenceSequence'][0]['RTReferencedStudySequence'][0]['RTReferencedSeriesSequence'][0]['SeriesInstanceUID'])
4741 self.assertEqual(aCtInstanceUID, aRtTags['ReferencedFrameOfReferenceSequence'][0]['RTReferencedStudySequence'][0]['RTReferencedSeriesSequence'][0]['ContourImageSequence'][0]['ReferencedSOPInstanceUID'])
4742 self.assertEqual(aCtInstanceUID, aRtTags['ROIContourSequence'][0]['ContourSequence'][aContourSequenceCount-1]['ContourImageSequence'][0]['ReferencedSOPInstanceUID'])
4743
4744
4745
4746
4672 @unittest.skip('Not fixed yet in Orthanc') 4747 @unittest.skip('Not fixed yet in Orthanc')
4673 def test_bitbucket_issue_140(self): 4748 def test_bitbucket_issue_140(self):
4674 source = UploadInstance(_REMOTE, 'Issue140.dcm') ['ID'] 4749 source = UploadInstance(_REMOTE, 'Issue140.dcm') ['ID']
4675 series = DoGet(_REMOTE, '/instances/%s' % source) ['ParentSeries'] 4750 series = DoGet(_REMOTE, '/instances/%s' % source) ['ParentSeries']
4676 4751