RSNA / anonymizer

RSNA DICOM Anonymizer
Other
10 stars 3 forks source link

no attribute 'SOPClassUID' error #11

Open gkowalski opened 1 month ago

gkowalski commented 1 month ago

Trying to download various Accessions and the query works , but the "Import and Anonymize" always errors out with a no attribute 'SOPClassUID' error. Any ideas where to look :


2024-09-23 13:40:49,825 DEBUG GetStudyUIDHierarchies pydicom.data_element_generator.215 000000c2: 31 20                                  b'1 '
2024-09-23 13:40:49,826 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2069
2024-09-23 13:40:49,826 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2070 # Response Identifier
2024-09-23 13:40:49,826 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2072 (0008,0052) CS [SERIES]                                 # 1 QueryRetrieveLevel
2024-09-23 13:40:49,826 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2072 (0008,0054) AE [ALI_QUERY_SCP]                          # 1 RetrieveAETitle
2024-09-23 13:40:49,826 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2072 (0008,0060) CS [DX]                                     # 1 Modality
2024-09-23 13:40:49,826 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2072 (0008,103E) LO [LAT]                                    # 1 SeriesDescription
2024-09-23 13:40:49,826 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2072 (0020,000D) UI [1.2.840.114350.2.35.2.798268.2.474531864.1] # 1 StudyInstanceUID
2024-09-23 13:40:49,826 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2072 (0020,000E) UI [1.2.392.200046.100.14.46852710304164419972798132664950223240] # 1 SeriesInstanceUID
2024-09-23 13:40:49,827 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2072 (0020,0011) IS [3]                                      # 1 SeriesNumber
2024-09-23 13:40:49,827 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2072 (0020,1209) IS [1]                                      # 1 NumberOfSeriesRelatedInstances
2024-09-23 13:40:49,827 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2073
2024-09-23 13:40:49,827 ERROR GetStudyUIDHierarchies controller.project.get_study_uid_hierarchy.1550 'Dataset' object has no attribute 'SOPClassUID'
2024-09-23 13:40:49,827 DEBUG Thread-9 (run_reactor) pynetdicom.dsutils.decode.114 pydicom.read_dataset() TransferSyntax="Little Endian Implicit"```
gkowalski commented 1 month ago

Interesting . I've verified by pulling down this same accession that all the images and SR have SOPClassUID in them ( Im using HOROS tool to download them ) . But in PACS it shows that there are 278 things in this accession. But when I pull them down I only get 276 actual DICOM objects of various SOPClassUID's . I'm wondering if HOROS is just dropping those other objects on the request to download.

gkowalski commented 1 month ago

ok , as a test I set the Storage classes permitted to only have one :

CT Image Storage   | 1.2.840.10008.5.1.4.1.1.1.2

Now it gets past the initial error and get :

2024-09-23 14:06:16,581 ERROR GetStudyUIDHierarchies controller.project.get_study_uid_hierarchy.1550 Unable to retrieve UID Hierarchy for reliable import operation via DICOM C-MOVE. QUERY Server did not return the number of instances in a series. Standard DICOM field (0020,1209) NumberOfSeriesRelatedInstances is missing in the query response.

Any way of playing with the tags it's expecting to see , or have it at least ignore them ?

mdevans commented 1 month ago

Please check the dataset metadata in the DICOM file header, it must have a SOPClassUID element with a valid value for it to be a valid DICOM file.

You can use dcmdump (or DICOM viewer with metadata function) to see the header

On Mon, 23 Sept 2024 at 20:48, George Kowalski @.***> wrote:

Trying to download various Accessions and the query works , but the "Import and Anonymize" always errors out with a no attribute 'SOPClassUID' error. Any ideas where to look :

2024-09-23 13:40:49,825 DEBUG GetStudyUIDHierarchies pydicom.data_element_generator.215 000000c2: 31 20 b'1 ' 2024-09-23 13:40:49,826 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2069 2024-09-23 13:40:49,826 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2070 # Response Identifier 2024-09-23 13:40:49,826 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2072 (0008,0052) CS [SERIES] # 1 QueryRetrieveLevel 2024-09-23 13:40:49,826 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2072 (0008,0054) AE [ALI_QUERY_SCP] # 1 RetrieveAETitle 2024-09-23 13:40:49,826 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2072 (0008,0060) CS [DX] # 1 Modality 2024-09-23 13:40:49,826 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2072 (0008,103E) LO [LAT] # 1 SeriesDescription 2024-09-23 13:40:49,826 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2072 (0020,000D) UI [1.2.840.114350.2.35.2.798268.2.474531864.1] # 1 StudyInstanceUID 2024-09-23 13:40:49,826 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2072 (0020,000E) UI [1.2.392.200046.100.14.46852710304164419972798132664950223240] # 1 SeriesInstanceUID 2024-09-23 13:40:49,827 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2072 (0020,0011) IS [3] # 1 SeriesNumber 2024-09-23 13:40:49,827 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2072 (0020,1209) IS [1] # 1 NumberOfSeriesRelatedInstances 2024-09-23 13:40:49,827 INFO GetStudyUIDHierarchies pynetdicom.association._wrap_find_responses.2073 2024-09-23 13:40:49,827 ERROR GetStudyUIDHierarchies controller.project.get_study_uid_hierarchy.1550 'Dataset' object has no attribute 'SOPClassUID' 2024-09-23 13:40:49,827 DEBUG Thread-9 (run_reactor) pynetdicom.dsutils.decode.114 pydicom.read_dataset() TransferSyntax="Little Endian Implicit"```

— Reply to this email directly, view it on GitHub https://github.com/RSNA/anonymizer/issues/11, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABIXFID45HLQMJOD3F3DRGTZYBO6FAVCNFSM6AAAAABOWV3REKVHI2DSMVQWIX3LMV43ASLTON2WKOZSGU2DGMZZGQZDGMI . You are receiving this because you are subscribed to this thread.Message ID: @.***>

-- Michael Evans DX.LIFE (Pty) Ltd. +27 72 584 6989

mdevans commented 1 month ago

Try using a different Move level using the drop down box next to the Import & Anonymizer button

For explanation of C-MOVE issues please refer to documentation

On Mon, 23 Sept 2024 at 21:10, George Kowalski @.***> wrote:

ok , as a test I set the SStorage class to only have :

CT Image Storage | 1.2.840.10008.5.1.4.1.1.1.2

Now it gets past the initial error and get :

2024-09-23 14:06:16,581 ERROR GetStudyUIDHierarchies controller.project.get_study_uid_hierarchy.1550 Unable to retrieve UID Hierarchy for reliable import operation via DICOM C-MOVE. QUERY Server did not return the number of instances in a series. Standard DICOM field (0020,1209) NumberOfSeriesRelatedInstances is missing in the query response.

Any way of playing with the tags it's expecting to see , or have it at least ignore them ?

— Reply to this email directly, view it on GitHub https://github.com/RSNA/anonymizer/issues/11#issuecomment-2369144812, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABIXFIFZQU4QA7OYTNYLVCTZYBRTXAVCNFSM6AAAAABOWV3REKVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDGNRZGE2DIOBRGI . You are receiving this because you are subscribed to this thread.Message ID: @.***>

-- Michael Evans DX.LIFE (Pty) Ltd. +27 72 584 6989

mdevans commented 1 month ago

Which server are you querying?

On Mon, 23 Sept 2024 at 21:13, Michael Evans @.***> wrote:

Try using a different Move level using the drop down box next to the Import & Anonymizer button

For explanation of C-MOVE issues please refer to documentation

On Mon, 23 Sept 2024 at 21:10, George Kowalski @.***> wrote:

ok , as a test I set the SStorage class to only have :

CT Image Storage | 1.2.840.10008.5.1.4.1.1.1.2

Now it gets past the initial error and get :

2024-09-23 14:06:16,581 ERROR GetStudyUIDHierarchies controller.project.get_study_uid_hierarchy.1550 Unable to retrieve UID Hierarchy for reliable import operation via DICOM C-MOVE. QUERY Server did not return the number of instances in a series. Standard DICOM field (0020,1209) NumberOfSeriesRelatedInstances is missing in the query response.

Any way of playing with the tags it's expecting to see , or have it at least ignore them ?

— Reply to this email directly, view it on GitHub https://github.com/RSNA/anonymizer/issues/11#issuecomment-2369144812, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABIXFIFZQU4QA7OYTNYLVCTZYBRTXAVCNFSM6AAAAABOWV3REKVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDGNRZGE2DIOBRGI . You are receiving this because you are subscribed to this thread.Message ID: @.***>

-- Michael Evans DX.LIFE (Pty) Ltd. +27 72 584 6989

-- Michael Evans DX.LIFE (Pty) Ltd. +27 72 584 6989

mdevans commented 1 month ago

They could possibly be presentation objects or similar, when you do the Query, what do you see next to this study in the column: "Modalities" next to "Accession No." column?

On Mon, 23 Sept 2024 at 21:03, George Kowalski @.***> wrote:

Interesting . I've verified by pulling down this same accession that all the images and SR have SOPClassUID in them ( Im using HOROS tool to download them ) . But in PACS it shows that there are 278 things in this accession. But when I pull them down I only get 276 actual DICOM objects of various SOPClassUID's . I'm wondering if HOROS is just dropping those other objects on the request to download.

— Reply to this email directly, view it on GitHub https://github.com/RSNA/anonymizer/issues/11#issuecomment-2369129607, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABIXFIFE6NYRMTKGA44EAVLZYBQZVAVCNFSM6AAAAABOWV3REKVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDGNRZGEZDSNRQG4 . You are receiving this because you are subscribed to this thread.Message ID: @.***>

-- Michael Evans DX.LIFE (Pty) Ltd. +27 72 584 6989

gkowalski commented 1 month ago

So I tried :

gkowalski commented 1 month ago

at least importing from the filesystem works . I will try downloading the same accession with horos, then importing the same data set with anonymizer

gkowalski commented 1 month ago

Well Import of those same images shows that some were QUARANTINE'ed . Dumped one

dcmdump IM-0003-0001.dcm

# Dicom-File-Format

# Dicom-Meta-Information-Header
# Used TransferSyntax: Little Endian Explicit
(0002,0000) UL 212                                      #   4, 1 FileMetaInformationGroupLength
(0002,0001) OB 00\01                                    #   2, 1 FileMetaInformationVersion
(0002,0002) UI =KeyObjectSelectionDocumentStorage       #  30, 1 MediaStorageSOPClassUID
(0002,0003) UI [1.2.840.113711.97687293.4.37484.747694861.365657005.125803] #  58, 1 MediaStorageSOPInstanceUID
(0002,0010) UI =LittleEndianExplicit                    #  20, 1 TransferSyntaxUID
(0002,0012) UI [1.2.276.0.7238010.5.0.3.5.4]            #  28, 1 ImplementationClassUID
(0002,0013) SH [OSIRIX]                                 #   6, 1 ImplementationVersionName
(0002,0016) AE [MCW_SCU]                                #   8, 1 SourceApplicationEntityTitle

# Dicom-Data-Set
# Used TransferSyntax: Little Endian Explicit
(0008,0005) CS [ISO_IR 100]                             #  10, 1 SpecificCharacterSet
(0008,0016) UI =KeyObjectSelectionDocumentStorage       #  30, 1 SOPClassUID

ok m that's a wierd SOPClassUID .

mdevans commented 1 month ago

Please can you send me a few sample files to analyze

On Mon, 23 Sept 2024 at 22:17, George Kowalski @.***> wrote:

Well Import of those same images shows that some were QUARANTINE'ed . Dumped one

dcmdump IM-0003-0001.dcm

Dicom-File-Format

Dicom-Meta-Information-Header

Used TransferSyntax: Little Endian Explicit

(0002,0000) UL 212 # 4, 1 FileMetaInformationGroupLength (0002,0001) OB 00\01 # 2, 1 FileMetaInformationVersion (0002,0002) UI =KeyObjectSelectionDocumentStorage # 30, 1 MediaStorageSOPClassUID (0002,0003) UI [1.2.840.113711.97687293.4.37484.747694861.365657005.125803] # 58, 1 MediaStorageSOPInstanceUID (0002,0010) UI =LittleEndianExplicit # 20, 1 TransferSyntaxUID (0002,0012) UI [1.2.276.0.7238010.5.0.3.5.4] # 28, 1 ImplementationClassUID (0002,0013) SH [OSIRIX] # 6, 1 ImplementationVersionName (0002,0016) AE [MCW_SCU] # 8, 1 SourceApplicationEntityTitle

Dicom-Data-Set

Used TransferSyntax: Little Endian Explicit

(0008,0005) CS [ISO_IR 100] # 10, 1 SpecificCharacterSet (0008,0016) UI =KeyObjectSelectionDocumentStorage # 30, 1 SOPClassUID

ok m that's a wierd SOPClassUID .

— Reply to this email directly, view it on GitHub https://github.com/RSNA/anonymizer/issues/11#issuecomment-2369291663, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABIXFIATVIH7XUCNZGIMMYLZYBZPNAVCNFSM6AAAAABOWV3REKVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDGNRZGI4TCNRWGM . You are receiving this because you commented.Message ID: @.***>

-- Michael Evans DX.LIFE (Pty) Ltd. +27 72 584 6989

mdevans commented 1 month ago

The file in the Unknown_user.zip: 1.2.840.113711.5.1.2519599859.1282256193.5688852202731011975.dcm

Has modality of "PR" (presentation state)

I configured an Anonymizer project to allow Modality PR and then retrieved this file from a Horos instance without error.

The other file: 1.2.840.113711.97687293.4.37484.747694861.365657005.125803.dcm is imported into Horos ok but the metadata is not viewable within Horos and this instance is not returned to Anonymizer for any Query.

As you picked up, this file has SOPClassUID=1.2.840.10008.5.1.4.1.1.88.59, Modality = KO => Key Object Selection Document Storage

As I previously stated, this modality is not available in the Project Settings/Modalities however, it can be set using Project Settings/Storage Classes

Scroll down and click: 1.2.840.10008.5.1.4.1.1.88.59

I was then able to import this file using File/Import Files.

gkowalski commented 1 month ago

I'll give it a try.