MPPS: How to send multiple SOPID's in a single N-set command

Questions regarding other OFFIS DICOM tools

Moderator: Moderator Team

Post Reply
Message
Author
Arunodaya S
Posts: 19
Joined: Mon, 2016-09-26, 14:08

MPPS: How to send multiple SOPID's in a single N-set command

#1 Post by Arunodaya S » Sat, 2018-08-25, 10:25

HI,

We are implementing MPPS DICOM workflow for C-Arm. Is it possible to send Multiple Affected SOP ID's in a single N set command. In C-Arm usually a single surgery might contain multiple images to be captured to complete a surgery. So we wish to send all the acquired images as affected SOP in a single N-Set command.

Is it possible to point us to a general workflow of MPPS in case of C-Arm.

Regards.
Arun

Michael Onken
DCMTK Developer
Posts: 1716
Joined: Fri, 2004-11-05, 13:47
Location: Oldenburg, Germany
Contact:

Re: MPPS: How to send multiple SOPID's in a single N-set com

#2 Post by Michael Onken » Mon, 2018-08-27, 08:26

Hi,

I have the feeling that you are interpreting the standard in a wrong way. So just to be sure, this is what happens according to the standard: Via MPPS you create a status object (Modality Performed Procedure Step - PPS) about the current examination. It does not reflect the status of a single image, but instead the whole examination (or a clearly identifiable part of it). During this PPS, multiple images can be created, and besides other examination parameters, those images must be documented within that PPS object. The PPS object itself is identified by a SOP Instance UID (that is created during N-CREATE) and referred to as Affected SOP Instance UID. The PPS object links to the images within the Performed Series Sequence.

So the answer to your question is:

In a single N-SET-RQ you can only send data related to a single (PPS), identified by it's (Affected) SOP Instance UID.

If you want to update multiple PPS, you must send one PPS message for each of them. You can do this on one or many DICOM network associations.

You can document the created images for one of the PPS with a single N-SET, or with multiple.

I hope this helps. Best regards,
Michael

Arunodaya S
Posts: 19
Joined: Mon, 2016-09-26, 14:08

Re: MPPS: How to send multiple SOPID's in a single N-set com

#3 Post by Arunodaya S » Thu, 2018-10-25, 17:16

Hi,

Thanks for guiding us. Which tag has to be used to document the created images in the pps object? In our case we are creating a sop instance uid for each new image created. So We were under the assumption that affected sop instance id tag will hold all the sop instances.

Thank you for the support.

J. Riesmeier
DCMTK Developer
Posts: 2038
Joined: Tue, 2011-05-03, 14:38
Location: Oldenburg, Germany
Contact:

Re: MPPS: How to send multiple SOPID's in a single N-set com

#4 Post by J. Riesmeier » Fri, 2018-10-26, 09:05

No, Affected SOP Instance UID holds the value of the SOP Instance UID of the respective MPPS status object. The SOP Instance UID values of the created DICOM images/objects are stored in the Image Acquisition Results Module of the MPPS IOD, or to be more precise: in the Referenced Image Sequence within the Performed Series Sequence.

By the way, all technical details are described in the relevant sections of the DICOM standard (especially, part 3 and 4).

Arunodaya S
Posts: 19
Joined: Mon, 2016-09-26, 14:08

Re: MPPS: How to send multiple SOPID's in a single N-set com

#5 Post by Arunodaya S » Sat, 2018-11-10, 16:16

Hi,

Thanks. We have one more query.

If we add the sequence "Performed Series Sequence", then we will have to add the tag "Referenced Non-Image Composite SOP Instance Sequence" because it is of type 2, which can be of zero length.

However the sequence "Referenced Non-Image Composite SOP Instance Sequence" has two more tags which are of type 1 (Referenced SOP Class UID & Referenced SOP Instance UID) also has to be added with some values.

In our case we do not have anything other than images created. So what do we add in Referenced SOP Class UID & Referenced SOP Instance UID under "Referenced Non-Image Composite SOP Instance Sequence"??? Can we use the same value used under Performed Series Sequence ?

J. Riesmeier
DCMTK Developer
Posts: 2038
Joined: Tue, 2011-05-03, 14:38
Location: Oldenburg, Germany
Contact:

Re: MPPS: How to send multiple SOPID's in a single N-set com

#6 Post by J. Riesmeier » Sun, 2018-11-11, 13:17

If a sequence is of Type 2 and you have no information to provide, leave the sequence empty (i.e. no item at all).

Arunodaya S
Posts: 19
Joined: Mon, 2016-09-26, 14:08

Re: MPPS: How to send multiple SOPID's in a single N-set com

#7 Post by Arunodaya S » Mon, 2018-11-12, 09:49

Hi,

We tried doing that, but the following error throws up.

We are using MPPS SCU from DCMTK version 3.6.3 on MINGW platform.

C:\Program Files>mppsscu_e.exe -v -d 172.16.10.142 5678 -aet DVTK -nc D://Vault//SCRATCH//Wlm_Response.dcm
I: --MPPSSCU: $dcmtk: mppsscu_e v3.6.3 2018-02-05 $
I: --Copyright (C)2008-2011, OFFIS e.V.
I: --Licensed to: "" (Removed for not reveling identity)
I:
D: $dcmtk: mppsscu_e v3.6.3 2018-02-05 $
D:
I: Initializing network ...
D: DcmMetaInfo::checkAndReadPreamble() TransferSyntax="Little Endian Explicit"
D: DcmDataset::read() TransferSyntax="Little Endian Implicit"
W: PpsDatasetChecker::checkAttributePresenceAndLength : attribute (0018,1030) is missing in sequence (0040,0340).
F: Invalid request dataset for assembling MPPS message

C:\Program Files>

Where the sequence (0040,0340) is Performed Series Sequence which is of type 2.

& the missing attribute is (0018,1030) is Protocol Name which is of type 1.

Here is how our Response file for N create looks.

C:\Program Files>dcmdump D://Vault//SCRATCH//Wlm_Response.dcm

# Dicom-File-Format

# Dicom-Meta-Information-Header
# Used TransferSyntax: Little Endian Explicit
(0002,0000) UL 204 # 4, 1 FileMetaInformationGroupLength
(0002,0001) OB 00\01 # 2, 1 FileMetaInformationVersion
(0002,0002) UI [1.2.276.0.7230010.3.1.0.1] # 26, 1 MediaStorageSOPClassUID
(0002,0003) UI [1.2.826.0.1.3680043.9.3558.1.4.1260066605.2804.1542007608.146] # 62, 1 MediaStorageSOPInstanceUID
(0002,0010) UI =LittleEndianImplicit # 18, 1 TransferSyntaxUID
(0002,0012) UI [1.2.276.0.7230010.3.0.3.6.1] # 28, 1 ImplementationClassUID
(0002,0013) SH [OFFIS_DCMTK_361] # 16, 1 ImplementationVersionName

# Dicom-Data-Set
# Used TransferSyntax: Little Endian Implicit
(0008,0018) UI [1.2.826.0.1.3680043.9.3558.1.4.1260066605.2804.1542007608.146] # 62, 1 SOPInstanceUID
(0008,0060) CS [RF] # 2, 1 Modality
(0008,1032) SQ (Sequence with undefined length #=1) # u/l, 1 ProcedureCodeSequence
(fffe,e000) na (Item with undefined length #=2) # u/l, 1 Item
(0008,0100) SH [0] # 2, 1 CodeValue
(0008,0102) SH [0] # 2, 1 CodingSchemeDesignator
(fffe,e00d) na (ItemDelimitationItem) # 0, 0 ItemDelimitationItem
(fffe,e0dd) na (SequenceDelimitationItem) # 0, 0 SequenceDelimitationItem
(0008,1120) SQ (Sequence with undefined length #=1) # u/l, 1 ReferencedPatientSequence
(fffe,e000) na (Item with undefined length #=2) # u/l, 1 Item
(0008,1150) UI =ModalityPerformedProcedureStepSOPClass # 24, 1 ReferencedSOPClassUID
(0008,1155) UI [1.2.826.0.1.3680043.9.3558.1.4.1260066605.2804.1542007608.107.7] # 64, 1 ReferencedSOPInstanceUID
(fffe,e00d) na (ItemDelimitationItem) # 0, 0 ItemDelimitationItem
(fffe,e0dd) na (SequenceDelimitationItem) # 0, 0 SequenceDelimitationItem
(0010,0010) PN [1] # 2, 1 PatientName
(0010,0020) LO [pidP645] # 8, 1 PatientID
(0010,0030) DA [19800716] # 8, 1 PatientBirthDate
(0010,0040) CS [M] # 2, 1 PatientSex
(0020,0010) SH [1] # 2, 1 StudyID
(0040,0241) AE [asdf] # 6, 1 PerformedStationAETitle
(0040,0242) SH [asdf] # 6, 1 PerformedStationName
(0040,0243) SH (no value available) # 0, 0 PerformedLocation
(0040,0244) DA [20181112] # 8, 1 PerformedProcedureStepStartDate
(0040,0245) TM [125648] # 6, 1 PerformedProcedureStepStartTime
(0040,0250) DA (no value available) # 0, 0 PerformedProcedureStepEndDate
(0040,0251) TM (no value available) # 0, 0 PerformedProcedureStepEndTime
(0040,0252) CS [IN PROGRESS] # 12, 1 PerformedProcedureStepStatus
(0040,0253) SH [0000018706] # 10, 1 PerformedProcedureStepID
(0040,0254) LO [Urology] # 8, 1 PerformedProcedureStepDescription
(0040,0255) LO [Retrograde Pyelogram] # 20, 1 PerformedProcedureTypeDescription
(0040,0260) SQ (Sequence with undefined length #=1) # u/l, 1 PerformedProtocolCodeSequence
(fffe,e000) na (Item with undefined length #=2) # u/l, 1 Item
(0008,0100) SH [0] # 2, 1 CodeValue
(0008,0102) SH [0] # 2, 1 CodingSchemeDesignator
(fffe,e00d) na (ItemDelimitationItem) # 0, 0 ItemDelimitationItem
(fffe,e0dd) na (SequenceDelimitationItem) # 0, 0 SequenceDelimitationItem
(0040,0270) SQ (Sequence with undefined length #=1) # u/l, 1 ScheduledStepAttributesSequence
(fffe,e000) na (Item with undefined length #=8) # u/l, 1 Item
(0008,0050) SH [unknown] # 8, 1 AccessionNumber
(0008,1110) SQ (Sequence with undefined length #=1) # u/l, 1 ReferencedStudySequence
(fffe,e000) na (Item with undefined length #=2) # u/l, 1 Item
(0008,1150) UI =ModalityPerformedProcedureStepSOPClass # 24, 1 ReferencedSOPClassUID
(0008,1155) UI [1.2.826.0.1.3680043.9.3558.1.4.1260066605.2804.1542007608.107.7] # 64, 1 ReferencedSOPInstanceUID
(fffe,e00d) na (ItemDelimitationItem) # 0, 0 ItemDelimitationItem
(fffe,e0dd) na (SequenceDelimitationItem) # 0, 0 SequenceDelimitationItem
(0020,000d) UI [1.2.826.0.1.3680043.9.3558.1.2.1260066605.2084.1542006118.627] # 62, 1 StudyInstanceUID
(0032,1060) LO (no value available) # 0, 0 RequestedProcedureDescription
(0040,0007) LO (no value available) # 0, 0 ScheduledProcedureStepDescription
(0040,0008) SQ (Sequence with undefined length #=1) # u/l, 1 ScheduledProtocolCodeSequence
(fffe,e000) na (Item with undefined length #=2) # u/l, 1 Item
(0008,0100) SH [0] # 2, 1 CodeValue
(0008,0102) SH [0] # 2, 1 CodingSchemeDesignator
(fffe,e00d) na (ItemDelimitationItem) # 0, 0 ItemDelimitationItem
(fffe,e0dd) na (SequenceDelimitationItem) # 0, 0 SequenceDelimitationItem
(0040,0009) SH (no value available) # 0, 0 ScheduledProcedureStepID
(0040,1001) SH (no value available) # 0, 0 RequestedProcedureID
(fffe,e00d) na (ItemDelimitationItem) # 0, 0 ItemDelimitationItem
(fffe,e0dd) na (SequenceDelimitationItem) # 0, 0 SequenceDelimitationItem
(0040,0340) SQ (Sequence with undefined length #=1) # u/l, 1 PerformedSeriesSequence
(fffe,e000) na (Item with undefined length #=0) # u/l, 1 Item
(fffe,e00d) na (ItemDelimitationItem) # 0, 0 ItemDelimitationItem
(fffe,e0dd) na (SequenceDelimitationItem) # 0, 0 SequenceDelimitationItem

C:\Program Files>

J. Riesmeier
DCMTK Developer
Posts: 2038
Joined: Tue, 2011-05-03, 14:38
Location: Oldenburg, Germany
Contact:

Re: MPPS: How to send multiple SOPID's in a single N-set com

#8 Post by J. Riesmeier » Mon, 2018-11-12, 10:00

Code: Select all

(0040,0340) SQ (Sequence with undefined length #=1) # u/l, 1 PerformedSeriesSequence
(fffe,e000) na (Item with undefined length #=0) # u/l, 1 Item
(fffe,e00d) na (ItemDelimitationItem) # 0, 0 ItemDelimitationItem
(fffe,e0dd) na (SequenceDelimitationItem) # 0, 0 SequenceDelimitationItem
Your sequence is not empty but contains an empty item.

Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest