internal QRRequestData(DICOMData cmd, DICOMData data) { //parse query-retrieve level QueryLevel = AbstractSyntaxes.Lookup((string)cmd[DICOMTags.AffectedSOPClass].Data).ParseQRLevel(); if (QueryLevel == QueryRetrieveLevel.ModalityWorklist) { FindLevel = QRLevelType.Study; } else { //parse find level string type = ((string)data[DICOMTags.QueryRetrieveLevel].Data).Trim().ToUpper(); if (type == "PATIENT") { FindLevel = QRLevelType.Patient; } else if (type == "STUDY") { FindLevel = QRLevelType.Study; } else if (type == "SERIES") { FindLevel = QRLevelType.Series; } else if (type == "IMAGE") { FindLevel = QRLevelType.Image; } else { FindLevel = QRLevelType.Study; //fallback } } Console.Write(data.Dump()); //pull all search terms SearchTerms = new Dictionary <uint, object>(); foreach (DICOMElement elem in data.Elements.Values) { //Don't add group length elements if (elem.Elem == 0) { continue; } if (elem.Tag == DICOMTags.QueryRetrieveLevel) { continue; } if (elem.Tag == DICOMTags.ScheduledProcedureStepSequence) { if (elem.VRShort == DICOMElementSQ.vrshort) { foreach (SQItem sqItem in ((DICOMElementSQ)elem).Items) { foreach (DICOMElement elemi in sqItem.Elements) { if (elemi.Elem == 0) { continue; } if (elemi.Tag == DICOMTags.QueryRetrieveLevel) { continue; } SearchTerms.Add(elemi.Tag, elemi.Data); } } } } else if (elem.Data.ToString() != "") { SearchTerms.Add(elem.Tag, elem.Data); } } FillTagsList(data); }