Mercurial > hg > orthanc-dicomweb
changeset 374:47ddc4943b64
replacing std::list by std::set in QIDO-RS
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 07 Jan 2020 17:53:06 +0100 |
parents | e944c31eda6c |
children | 2a2f4b9b31d8 |
files | Plugin/QidoRs.cpp |
diffstat | 1 files changed, 49 insertions(+), 43 deletions(-) [+] |
line wrap: on
line diff
--- a/Plugin/QidoRs.cpp Wed Oct 30 17:19:05 2019 +0100 +++ b/Plugin/QidoRs.cpp Tue Jan 07 17:53:06 2020 +0100 @@ -51,60 +51,60 @@ Filters filters_; - static void AddResultAttributesForLevel(std::list<Orthanc::DicomTag>& result, + static void AddResultAttributesForLevel(std::set<Orthanc::DicomTag>& result, Orthanc::ResourceType level) { switch (level) { case Orthanc::ResourceType_Study: // http://medical.nema.org/medical/dicom/current/output/html/part18.html#table_6.7.1-2 - //result.push_back(Orthanc::DicomTag(0x0008, 0x0005)); // Specific Character Set => SPECIAL CASE - result.push_back(Orthanc::DicomTag(0x0008, 0x0020)); // Study Date - result.push_back(Orthanc::DicomTag(0x0008, 0x0030)); // Study Time - result.push_back(Orthanc::DicomTag(0x0008, 0x0050)); // Accession Number - result.push_back(Orthanc::DicomTag(0x0008, 0x0056)); // Instance Availability - //result.push_back(Orthanc::DicomTag(0x0008, 0x0061)); // Modalities in Study => SPECIAL CASE - result.push_back(Orthanc::DicomTag(0x0008, 0x0090)); // Referring Physician's Name - result.push_back(Orthanc::DicomTag(0x0008, 0x0201)); // Timezone Offset From UTC - //result.push_back(Orthanc::DicomTag(0x0008, 0x1190)); // Retrieve URL => SPECIAL CASE - result.push_back(Orthanc::DicomTag(0x0010, 0x0010)); // Patient's Name - result.push_back(Orthanc::DicomTag(0x0010, 0x0020)); // Patient ID - result.push_back(Orthanc::DicomTag(0x0010, 0x0030)); // Patient's Birth Date - result.push_back(Orthanc::DicomTag(0x0010, 0x0040)); // Patient's Sex - result.push_back(Orthanc::DicomTag(0x0020, 0x000D)); // Study Instance UID - result.push_back(Orthanc::DicomTag(0x0020, 0x0010)); // Study ID - //result.push_back(Orthanc::DicomTag(0x0020, 0x1206)); // Number of Study Related Series => SPECIAL CASE - //result.push_back(Orthanc::DicomTag(0x0020, 0x1208)); // Number of Study Related Instances => SPECIAL CASE + //result.insert(Orthanc::DicomTag(0x0008, 0x0005)); // Specific Character Set => SPECIAL CASE + result.insert(Orthanc::DicomTag(0x0008, 0x0020)); // Study Date + result.insert(Orthanc::DicomTag(0x0008, 0x0030)); // Study Time + result.insert(Orthanc::DicomTag(0x0008, 0x0050)); // Accession Number + result.insert(Orthanc::DicomTag(0x0008, 0x0056)); // Instance Availability + //result.insert(Orthanc::DicomTag(0x0008, 0x0061)); // Modalities in Study => SPECIAL CASE + result.insert(Orthanc::DicomTag(0x0008, 0x0090)); // Referring Physician's Name + result.insert(Orthanc::DicomTag(0x0008, 0x0201)); // Timezone Offset From UTC + //result.insert(Orthanc::DicomTag(0x0008, 0x1190)); // Retrieve URL => SPECIAL CASE + result.insert(Orthanc::DicomTag(0x0010, 0x0010)); // Patient's Name + result.insert(Orthanc::DicomTag(0x0010, 0x0020)); // Patient ID + result.insert(Orthanc::DicomTag(0x0010, 0x0030)); // Patient's Birth Date + result.insert(Orthanc::DicomTag(0x0010, 0x0040)); // Patient's Sex + result.insert(Orthanc::DicomTag(0x0020, 0x000D)); // Study Instance UID + result.insert(Orthanc::DicomTag(0x0020, 0x0010)); // Study ID + //result.insert(Orthanc::DicomTag(0x0020, 0x1206)); // Number of Study Related Series => SPECIAL CASE + //result.insert(Orthanc::DicomTag(0x0020, 0x1208)); // Number of Study Related Instances => SPECIAL CASE break; case Orthanc::ResourceType_Series: // http://medical.nema.org/medical/dicom/current/output/html/part18.html#table_6.7.1-2a - //result.push_back(Orthanc::DicomTag(0x0008, 0x0005)); // Specific Character Set => SPECIAL CASE - result.push_back(Orthanc::DicomTag(0x0008, 0x0060)); // Modality - result.push_back(Orthanc::DicomTag(0x0008, 0x0201)); // Timezone Offset From UTC - result.push_back(Orthanc::DicomTag(0x0008, 0x103E)); // Series Description - //result.push_back(Orthanc::DicomTag(0x0008, 0x1190)); // Retrieve URL => SPECIAL CASE - result.push_back(Orthanc::DicomTag(0x0020, 0x000E)); // Series Instance UID - result.push_back(Orthanc::DicomTag(0x0020, 0x0011)); // Series Number - //result.push_back(Orthanc::DicomTag(0x0020, 0x1209)); // Number of Series Related Instances => SPECIAL CASE - result.push_back(Orthanc::DicomTag(0x0040, 0x0244)); // Performed Procedure Step Start Date - result.push_back(Orthanc::DicomTag(0x0040, 0x0245)); // Performed Procedure Step Start Time - result.push_back(Orthanc::DicomTag(0x0040, 0x0275)); // Request Attribute Sequence + //result.insert(Orthanc::DicomTag(0x0008, 0x0005)); // Specific Character Set => SPECIAL CASE + result.insert(Orthanc::DicomTag(0x0008, 0x0060)); // Modality + result.insert(Orthanc::DicomTag(0x0008, 0x0201)); // Timezone Offset From UTC + result.insert(Orthanc::DicomTag(0x0008, 0x103E)); // Series Description + //result.insert(Orthanc::DicomTag(0x0008, 0x1190)); // Retrieve URL => SPECIAL CASE + result.insert(Orthanc::DicomTag(0x0020, 0x000E)); // Series Instance UID + result.insert(Orthanc::DicomTag(0x0020, 0x0011)); // Series Number + //result.insert(Orthanc::DicomTag(0x0020, 0x1209)); // Number of Series Related Instances => SPECIAL CASE + result.insert(Orthanc::DicomTag(0x0040, 0x0244)); // Performed Procedure Step Start Date + result.insert(Orthanc::DicomTag(0x0040, 0x0245)); // Performed Procedure Step Start Time + result.insert(Orthanc::DicomTag(0x0040, 0x0275)); // Request Attribute Sequence break; case Orthanc::ResourceType_Instance: // http://medical.nema.org/medical/dicom/current/output/html/part18.html#table_6.7.1-2b - //result.push_back(Orthanc::DicomTag(0x0008, 0x0005)); // Specific Character Set => SPECIAL CASE - result.push_back(Orthanc::DicomTag(0x0008, 0x0016)); // SOP Class UID - result.push_back(Orthanc::DicomTag(0x0008, 0x0018)); // SOP Instance UID - result.push_back(Orthanc::DicomTag(0x0008, 0x0056)); // Instance Availability - result.push_back(Orthanc::DicomTag(0x0008, 0x0201)); // Timezone Offset From UTC - result.push_back(Orthanc::DicomTag(0x0008, 0x1190)); // Retrieve URL - result.push_back(Orthanc::DicomTag(0x0020, 0x0013)); // Instance Number - result.push_back(Orthanc::DicomTag(0x0028, 0x0010)); // Rows - result.push_back(Orthanc::DicomTag(0x0028, 0x0011)); // Columns - result.push_back(Orthanc::DicomTag(0x0028, 0x0100)); // Bits Allocated - result.push_back(Orthanc::DicomTag(0x0028, 0x0008)); // Number of Frames + //result.insert(Orthanc::DicomTag(0x0008, 0x0005)); // Specific Character Set => SPECIAL CASE + result.insert(Orthanc::DicomTag(0x0008, 0x0016)); // SOP Class UID + result.insert(Orthanc::DicomTag(0x0008, 0x0018)); // SOP Instance UID + result.insert(Orthanc::DicomTag(0x0008, 0x0056)); // Instance Availability + result.insert(Orthanc::DicomTag(0x0008, 0x0201)); // Timezone Offset From UTC + result.insert(Orthanc::DicomTag(0x0008, 0x1190)); // Retrieve URL + result.insert(Orthanc::DicomTag(0x0020, 0x0013)); // Instance Number + result.insert(Orthanc::DicomTag(0x0028, 0x0010)); // Rows + result.insert(Orthanc::DicomTag(0x0028, 0x0011)); // Columns + result.insert(Orthanc::DicomTag(0x0028, 0x0100)); // Bits Allocated + result.insert(Orthanc::DicomTag(0x0028, 0x0008)); // Number of Frames break; default: @@ -387,7 +387,13 @@ const std::string& wadoBase, Orthanc::ResourceType level) const { - std::list<Orthanc::DicomTag> fields = includeFields_; + std::set<Orthanc::DicomTag> fields; + + for (std::list<Orthanc::DicomTag>::const_iterator + it = includeFields_.begin(); it != includeFields_.end(); ++it) + { + fields.insert(*it); + } // The list of attributes for this query level AddResultAttributesForLevel(fields, level); @@ -396,7 +402,7 @@ for (Filters::const_iterator it = filters_.begin(); it != filters_.end(); ++it) { - fields.push_back(it->first); + fields.insert(it->first); } // For instances and series, add all Study-level attributes if @@ -418,7 +424,7 @@ } // Copy all the required fields to the target - for (std::list<Orthanc::DicomTag>::const_iterator + for (std::set<Orthanc::DicomTag>::const_iterator it = fields.begin(); it != fields.end(); ++it) { std::string value;