Ejemplo n.º 1
0
        static List <MedicalViewerPageInfo> GetPagesInfoFromMaster(DicomDataSet ds, MedicalViewerPageInfo ppiMaster)
        {
            try
            {
                List <MedicalViewerPageInfo> ppiLst = new List <MedicalViewerPageInfo>();

                DicomElement        elemPerFrameFunctionalGroupsSequence = ds.FindFirstElement(null, DicomTag.PerFrameFunctionalGroupsSequence, true);
                List <DicomElement> elemImagePositionPatient             = new List <DicomElement>();
                FindChildElements(ds, elemPerFrameFunctionalGroupsSequence, DicomTag.ImagePositionPatient, elemImagePositionPatient);
                foreach (DicomElement de in elemImagePositionPatient)
                {
                    MedicalViewerPageInfo ppi = new MedicalViewerPageInfo
                    {
                        ImageOrientationPatientArray = ppiMaster.ImageOrientationPatientArray,
                        ImagePositionPatientArray    = ds.GetDoubleValue(de, 0, 3),
                        PixelSpacingPatientArray     = ppiMaster.PixelSpacingPatientArray
                    };
                    Normalize(ppi);
                    ppiLst.Add(ppi);
                }

                return(ppiLst);
            }
            catch
            {
                return(new List <MedicalViewerPageInfo>());
            }
        }
Ejemplo n.º 2
0
        static void fillOutputWithDicomDataSet(MedicalViewerPageInfo output, DicomDataSet ds)
        {
            DicomElement elemImagePatientOrientation   = ds.FindFirstElement(null, DicomTag.PatientOrientation, true);
            DicomElement elemImagePositionPatient      = ds.FindFirstElement(null, DicomTag.ImagePositionPatient, true);
            DicomElement elemImageOrientationPatient   = ds.FindFirstElement(null, DicomTag.ImageOrientationPatient, true);
            DicomElement elemImagerPixelSpacing        = ds.FindFirstElement(null, DicomTag.ImagerPixelSpacing, true);
            DicomElement elemPixelSpacing              = ds.FindFirstElement(null, DicomTag.PixelSpacing, true);
            DicomElement elemPhotometricInterpretation = ds.FindFirstElement(null, DicomTag.PhotometricInterpretation, true);


            if (null != elemPhotometricInterpretation)
            {
                string photometricInterpretation = ds.GetStringValue(elemPhotometricInterpretation, 0);
                output.SupportWindowLevel = photometricInterpretation == "MONOCHROME2" || photometricInterpretation == "MONOCHROME1";
            }

            if (null != elemImagePatientOrientation)
            {
                int count = ds.GetElementValueCount(elemImagePatientOrientation);
                if (count > 0)
                {
                    output.PatientOrientation = new string[count];
                    for (int index = 0; index < count; index++)
                    {
                        output.PatientOrientation[index] = ds.GetStringValue(elemImagePatientOrientation, index);
                    }
                }
            }
            if (null != elemImagePositionPatient)
            {
                output.ImagePositionPatientArray = ds.GetDoubleValue(elemImagePositionPatient, 0, 3);
                if (output.ImagePositionPatientArray.Length == 0)
                {
                    output.ImagePositionPatientArray = null;
                }
            }
            if (null != elemImageOrientationPatient)
            {
                output.ImageOrientationPatientArray = ds.GetDoubleValue(elemImageOrientationPatient, 0, 6);
                if (output.ImageOrientationPatientArray.Length == 0)
                {
                    output.ImageOrientationPatientArray = null;
                }
            }
            if (null != elemPixelSpacing)
            {
                output.PixelSpacingPatientArray = ds.GetDoubleValue(elemPixelSpacing, 0, 2);
                if (output.PixelSpacingPatientArray.Length == 0)
                {
                    output.PixelSpacingPatientArray = null;
                }
            }
            else if (null != elemImagerPixelSpacing)
            {
                output.PixelSpacingPatientArray = ds.GetDoubleValue(elemImagerPixelSpacing, 0, 2);
                if (output.PixelSpacingPatientArray.Length == 0)
                {
                    output.PixelSpacingPatientArray = null;
                }
            }
        }
Ejemplo n.º 3
0
        /*
         * Generates an SQL query based on the client's search parameters
         */
        private string GenerateMatchingQuery()
        {
            string       strSqlQuery       = "";
            string       strAttributeValue = "";
            DicomElement element;

            try
            {
                strSqlQuery = "SELECT * FROM MwlSCPTbl WHERE 1=1";

                // TAG_ACCESSION_NUMBER
                element = ds.FindFirstElement(null, DemoDicomTags.AccessionNumber, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Wild Card Matching or Single Value Matching
                        if ((strAttributeValue.IndexOf('*') >= 0) || (strAttributeValue.IndexOf('?') >= 0))
                        {
                            // Wild card matching -- case insensitive
                            strSqlQuery += " And TAG_ACCESSION_NUMBER LIKE '" + PrepareForWCM(strAttributeValue) + "'";
                        }
                        else
                        {
                            // Single value matching -- case sensitive
                            strSqlQuery += " And TAG_ACCESSION_NUMBER = '" + strAttributeValue + "'";
                        }
                    }
                }

                // TAG_MODALITY
                element = ds.FindFirstElement(null, DemoDicomTags.Modality, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Single value matching -- case sensitive
                        strSqlQuery += " And TAG_MODALITY = '" + FilterForSingleValueMatch(strAttributeValue) + "'";
                    }
                }

                // TAG_INSTITUTION_NAME
                element = ds.FindFirstElement(null, DemoDicomTags.InstitutionName, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Wild Card Matching or Single Value Matching
                        if ((strAttributeValue.IndexOf('*') >= 0) || (strAttributeValue.IndexOf('?') >= 0))
                        {
                            // Wild card matching -- case insensitive
                            strSqlQuery += " And TAG_INSTITUTION_NAME LIKE '" + PrepareForWCM(strAttributeValue) + "'";
                        }
                        else
                        {
                            // Single value matching -- case sensitive
                            strSqlQuery += " And TAG_INSTITUTION_NAME = '" + strAttributeValue + "'";
                        }
                    }
                }

                // TAG_REFERRING_PHYSICIAN_NAME
                element = ds.FindFirstElement(null, DemoDicomTags.ReferringPhysicianName, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Wild card matching -- case insensitive
                        strSqlQuery += " And TAG_REFERRING_PHYSICIAN_NAME LIKE '" + PrepareForWCM(strAttributeValue) + "'";
                    }
                }

                // TAG_PATIENT_NAME
                element = ds.FindFirstElement(null, DemoDicomTags.PatientName, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Wild card matching -- case insensitive
                        strSqlQuery += " And TAG_PATIENT_NAME LIKE '" + PrepareForWCM(strAttributeValue) + "'";
                    }
                }

                // TAG_PATIENT_ID
                element = ds.FindFirstElement(null, DemoDicomTags.PatientID, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Single value matching -- case sensitive
                        strSqlQuery += " And TAG_PATIENT_ID = '" + FilterForSingleValueMatch(strAttributeValue) + "'";
                    }
                }

                // TAG_PATIENT_BIRTH_DATE
                element = ds.FindFirstElement(null, DemoDicomTags.PatientBirthDate, false);
                if (element != null)
                {
                    DicomDateValue[] dateValue = ds.GetDateValue(element, 0, 1);

                    if (dateValue.Length > 0)
                    {
                        strSqlQuery += " And (julianday(substr(TAG_PATIENT_BIRTH_DATE,1,10)) = julianday('" + ConvertDicomDateToQueryDate(dateValue[0]) + "'))";
                    }
                }

                // TAG_PATIENT_SEX
                element = ds.FindFirstElement(null, DemoDicomTags.PatientSex, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Single value matching -- case sensitive
                        strSqlQuery += " And TAG_PATIENT_SEX = '" + FilterForSingleValueMatch(strAttributeValue) + "'";
                    }
                }

                // TAG_PATIENT_WEIGHT
                element = ds.FindFirstElement(null, DemoDicomTags.PatientWeight, false);
                if (element != null)
                {
                    double[] dAttributeValue = ds.GetDoubleValue(element, 0, 1);

                    //strAttributeValue =
                    if (dAttributeValue.Length > 0)
                    {
                        strAttributeValue = dAttributeValue[0].ToString();
                        // Single value matching -- case sensitive
                        strSqlQuery += " And TAG_PATIENT_WEIGHT = '" + FilterForSingleValueMatch(strAttributeValue) + "'";
                    }
                }

                // TAG_STUDY_INSTANCE_UID
                strSqlQuery += GetUIDCondition((long)DemoDicomTags.StudyInstanceUID, "TAG_STUDY_INSTANCE_UID"); // List of Matching UIDs

                // TAG_REQUESTING_PHYSICIAN
                element = ds.FindFirstElement(null, DemoDicomTags.RequestingPhysician, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Wild card matching -- case insensitive
                        strSqlQuery += " And TAG_REQUESTING_PHYSICIAN LIKE '" + PrepareForWCM(strAttributeValue) + "'";
                    }
                }

                // TAG_REQUESTED_PROCEDURE_DESCRIPTION
                element = ds.FindFirstElement(null, DemoDicomTags.RequestedProcedureDescription, false);
                if ((strAttributeValue != null) && (strAttributeValue != ""))
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Wild card matching -- case insensitive
                        strSqlQuery += " And TAG_REQUESTED_PROCEDURE_DESCRIPTION LIKE '" + PrepareForWCM(strAttributeValue) + "'";
                    }
                }

                // TAG_ADMISSION_ID
                element = ds.FindFirstElement(null, DemoDicomTags.AdmissionID, false);
                if ((strAttributeValue != null) && (strAttributeValue != ""))
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Single value matching -- case sensitive
                        strSqlQuery += " And TAG_ADMISSION_ID = '" + FilterForSingleValueMatch(strAttributeValue) + "'";
                    }
                }

                // TAG_SCHEDULED_STATION_AE_TITLE
                element = ds.FindFirstElement(null, DemoDicomTags.ScheduledStationAETitle, false);
                if ((strAttributeValue != null) && (strAttributeValue != ""))
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Single value matching -- case sensitive
                        strSqlQuery += " And TAG_SCHEDULED_STATION_AE_TITLE = '" + FilterForSingleValueMatch(strAttributeValue) + "'";
                    }
                }

                // TAG_SCHEDULED_PROCEDURE_STEP_START_DATE
                element = ds.FindFirstElement(null, DemoDicomTags.ScheduledProcedureStepStartDate, false);
                if (element != null)
                {
                    DicomDateValue[] dateValue = ds.GetDateValue(element, 0, 1);

                    if (dateValue.Length > 0)
                    {
                        strSqlQuery += " And (julianday(substr(TAG_SCHEDULED_PROCEDURE_STEP_START_DATE,1,10)) = julianday('" + ConvertDicomDateToQueryDate(dateValue[0]) + "'))";
                    }
                }

                // TAG_SCHEDULED_PROCEDURE_STEP_START_TIME
                element = ds.FindFirstElement(null, DemoDicomTags.ScheduledProcedureStepStartTime, false);
                if (element != null)
                {
                    DicomTimeValue[] timeValue = ds.GetTimeValue(element, 0, 1);

                    if (timeValue.Length > 0)
                    {
                        strSqlQuery += " And (julianday(substr(TAG_SCHEDULED_PROCEDURE_STEP_START_TIME,-8,8)) = julianday('" + ConvertDicomTimeToQueryTime(timeValue[0]) + "'))";
                    }
                }

                // TAG_SCHEDULED_PERFORMING_PHYSICIAN_NAME
                element = ds.FindFirstElement(null, DemoDicomTags.ScheduledPerformingPhysicianName, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Wild card matching -- case insensitive
                        strSqlQuery += " And TAG_SCHEDULED_PERFORMING_PHYSICIAN_NAME LIKE '" + PrepareForWCM(strAttributeValue) + "'";
                    }
                }

                // TAG_SCHEDULED_PROCEDURE_STEP_DESCRIPTION
                element = ds.FindFirstElement(null, DemoDicomTags.ScheduledProcedureStepDescription, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Wild card matching -- case insensitive
                        strSqlQuery += " And TAG_SCHEDULED_PROCEDURE_STEP_DESCRIPTION LIKE '" + PrepareForWCM(strAttributeValue) + "'";
                    }
                }

                // TAG_SCHEDULED_PROCEDURE_STEP_ID
                element = ds.FindFirstElement(null, DemoDicomTags.ScheduledProcedureStepID, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Single value matching -- case sensitive
                        strSqlQuery += " And TAG_SCHEDULED_PROCEDURE_STEP_ID = '" + FilterForSingleValueMatch(strAttributeValue) + "'";
                    }
                }

                // TAG_SCHEDULED_PROCEDURE_STEP_LOCATION
                element = ds.FindFirstElement(null, DemoDicomTags.ScheduledProcedureStepLocation, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Wild card matching -- case insensitive
                        strSqlQuery += " And TAG_SCHEDULED_PROCEDURE_STEP_LOCATION LIKE '" + PrepareForWCM(strAttributeValue) + "'";
                    }
                }

                // TAG_REQUESTED_PROCEDURE_ID
                element = ds.FindFirstElement(null, DemoDicomTags.RequestedProcedureID, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Single value matching -- case sensitive
                        strSqlQuery += " And TAG_REQUESTED_PROCEDURE_ID = '" + FilterForSingleValueMatch(strAttributeValue) + "'";
                    }
                }

                // TAG_REASON_FOR_THE_REQUESTED_PROCEDURE
                element = ds.FindFirstElement(null, DemoDicomTags.ReasonForTheRequestedProcedure, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Single value matching -- case sensitive
                        strSqlQuery += " And TAG_REASON_FOR_THE_REQUESTED_PROCEDURE = '" + FilterForSingleValueMatch(strAttributeValue) + "'";
                    }
                }

                // TAG_REQUESTED_PROCEDURE_PRIORITY
                element = ds.FindFirstElement(null, DemoDicomTags.RequestedProcedurePriority, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Single value matching -- case sensitive
                        strSqlQuery += " And TAG_REQUESTED_PROCEDURE_PRIORITY = '" + FilterForSingleValueMatch(strAttributeValue) + "'";
                    }
                }
            }
            catch (Exception ex)
            {
                server.mf.Log("Error generating SQL query:\r\n\r\n" + ex.ToString());
                return("");
            }

            return(strSqlQuery);
        }