private void PopulatePatient(DicomMessageBase response, IEnumerable <DicomTag> tagList, IPatientData row) { DicomDataset dataSet = response.DataSet; dataSet[DicomTags.RetrieveAeTitle].SetStringValue(Partition.AeTitle); var characterSet = GetPreferredCharacterSet(); if (!string.IsNullOrEmpty(characterSet)) { dataSet[DicomTags.SpecificCharacterSet].SetStringValue(characterSet); dataSet.SpecificCharacterSet = characterSet; } IList <IStudyData> relatedStudies = row.LoadRelatedStudies(); IStudyData studyData = null; if (relatedStudies.Count > 0) { studyData = relatedStudies.First(); } foreach (DicomTag tag in tagList) { try { switch (tag.TagValue) { case DicomTags.PatientsName: dataSet[DicomTags.PatientsName].SetStringValue(row.PatientName); break; case DicomTags.PatientId: dataSet[DicomTags.PatientId].SetStringValue(row.PatientId); break; case DicomTags.IssuerOfPatientId: dataSet[DicomTags.IssuerOfPatientId].SetStringValue(row.IssuerOfPatientId); break; case DicomTags.NumberOfPatientRelatedStudies: dataSet[DicomTags.NumberOfPatientRelatedStudies].AppendInt32(row.NumberOfRelatedStudies); break; case DicomTags.NumberOfPatientRelatedSeries: dataSet[DicomTags.NumberOfPatientRelatedSeries].AppendInt32(row.NumberOfRelatedSeries); break; case DicomTags.NumberOfPatientRelatedInstances: dataSet[DicomTags.NumberOfPatientRelatedInstances].AppendInt32( row.NumberOfRelatedInstances); break; case DicomTags.QueryRetrieveLevel: dataSet[DicomTags.QueryRetrieveLevel].SetStringValue("PATIENT"); break; case DicomTags.PatientsSex: if (studyData == null) { dataSet[DicomTags.PatientsSex].SetNullValue(); } else { dataSet[DicomTags.PatientsSex].SetStringValue(studyData.PatientSex); } break; case DicomTags.PatientsBirthDate: if (studyData == null) { dataSet[DicomTags.PatientsBirthDate].SetNullValue(); } else { dataSet[DicomTags.PatientsBirthDate].SetDateTime(0, studyData.PatientBirthday); } break; // Meta tags that should have not been in the RQ, but we've already set case DicomTags.RetrieveAeTitle: case DicomTags.InstanceAvailability: case DicomTags.SpecificCharacterSet: break; default: if (!tag.IsPrivate) { dataSet[tag].SetNullValue(); } break; } } catch (Exception e) { Log.Logger.Error(e, "Unexpected error setting tag {0} in C-FIND-RSP", dataSet[tag].Tag.ToString()); if (!tag.IsPrivate) { dataSet[tag].SetNullValue(); } } } }