示例#1
0
        private Study CreateNewStudyInfo(DvtkHighLevelInterface.Dicom.Other.DataSet dataSet)
        {
            string studyId = "";

            if (dataSet.Exists("0x00200010"))
            {
                HLI.Attribute studyIdAtt = dataSet["0x00200010"];
                studyId = studyIdAtt.Values[0];
            }

            string accNr = "";

            if (dataSet.Exists("0x00080050"))
            {
                HLI.Attribute accNrAtt = dataSet["0x00080050"];
                accNr = accNrAtt.Values[0];
            }

            string studyInstUid = "";

            if (dataSet.Exists("0x0020000D"))
            {
                HLI.Attribute studyInstUidAtt = dataSet["0x0020000D"];
                studyInstUid = studyInstUidAtt.Values[0];
            }

            Study study = new Study();

            study.StudyID          = studyId;
            study.AccessionNumber  = accNr;
            study.StudyInstanceUID = studyInstUid;

            return(study);
        }
示例#2
0
        private Patient CreateNewPatientInfo(DvtkHighLevelInterface.Dicom.Other.DataSet dataSet)
        {
            string patientName = "";

            if (dataSet.Exists("0x00100010"))
            {
                HLI.Attribute patientNameAtt = dataSet["0x00100010"];
                patientName = patientNameAtt.Values[0];
            }

            string patientId = "";

            if (dataSet.Exists("0x00100020"))
            {
                HLI.Attribute patientIdAtt = dataSet["0x00100020"];
                patientId = patientIdAtt.Values[0];
            }

            string patientBd = "";

            if (dataSet.Exists("0x00100030"))
            {
                HLI.Attribute patientBdAtt = dataSet["0x00100030"];
                patientBd = patientBdAtt.Values[0];
            }

            Patient patient = new Patient();

            patient.PatientName      = patientName;
            patient.PatientId        = patientId;
            patient.PatientBirthDate = patientBd;

            return(patient);
        }
示例#3
0
        private Image CreateNewImageInfo(DvtkHighLevelInterface.Dicom.Other.DataSet dataSet)
        {
            string sopInstUid = "";

            if (dataSet.Exists("0x00080018"))
            {
                HLI.Attribute sopInstUidAtt = dataSet["0x00080018"];
                sopInstUid = sopInstUidAtt.Values[0];
            }
            Image image = new Image();

            image.SOPInstanceUID = sopInstUid;

            return(image);
        }
示例#4
0
        private Series CreateNewSeriesInfo(DvtkHighLevelInterface.Dicom.Other.DataSet dataSet)
        {
            string seriesInstUid = "";

            if (dataSet.Exists("0x0020000E"))
            {
                HLI.Attribute seriesInstUidAtt = dataSet["0x0020000E"];
                seriesInstUid = seriesInstUidAtt.Values[0];
            }

            Series series = new Series();

            series.SeriesUID = seriesInstUid;

            return(series);
        }
        public void TestFixtureSetUp()
        {
            Dvtk.Setup.Initialize();

            modalityWorklistInformationModel = new ModalityWorklistInformationModel();
            modalityWorklistInformationModel.DataDirectory = Paths.ResultsDirectoryFullPath;

            String        dataDirectoryFullName = Path.Combine(Paths.DataDirectoryFullPath, "Ticket1152");
            DirectoryInfo directoryInfo         = new DirectoryInfo(dataDirectoryFullName);

            FileInfo[] fileInfos = directoryInfo.GetFiles();

            if (fileInfos.Length != 0)
            {
                foreach (FileInfo fileInfo in fileInfos)
                {
                    DataSet dataSet = new DataSet();

                    dataSet.Read(fileInfo.FullName);

                    modalityWorklistInformationModel.AddToInformationModel(dataSet);
                }
            }
        }
        public void TestFixtureSetUp()
        {
            Dvtk.Setup.Initialize();

            modalityWorklistInformationModel = new ModalityWorklistInformationModel();
            modalityWorklistInformationModel.DataDirectory = Paths.ResultsDirectoryFullPath;

            String dataDirectoryFullName = Path.Combine(Paths.DataDirectoryFullPath, "Ticket1152");
            DirectoryInfo directoryInfo = new DirectoryInfo(dataDirectoryFullName);

            FileInfo[] fileInfos = directoryInfo.GetFiles();

            if (fileInfos.Length != 0)
            {
                foreach (FileInfo fileInfo in fileInfos)
                {
                    DataSet dataSet = new DataSet();

                    dataSet.Read(fileInfo.FullName);

                    modalityWorklistInformationModel.AddToInformationModel(dataSet);
                }
            }
        }
示例#7
0
        private string[] convertDicomFiles(string[] mediaFiles)
        {
            ArrayList listOfConvertedFiles = new ArrayList(mediaFiles.Length);
            string finalPath = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)+@"\DVTk\Storage SCU Emulator\Temp\";
            if(Directory.Exists(finalPath))
            {
               Directory.Delete(finalPath,true);
            }
            Directory.CreateDirectory(finalPath);

            DicomThread conversionThread = new ConversionThread();
            conversionThread.Initialize(this.overviewThread);
            conversionThread.Options.CopyFrom(this.storageOptions);

            String resultsFileBaseName = "StorageOperation_" + System.DateTime.Now.ToString("yyyyMMddHHmmss", System.Globalization.CultureInfo.InvariantCulture);
            conversionThread.Options.ResultsFileNameOnlyWithoutExtension = resultsFileBaseName;
            conversionThread.Options.Identifier = resultsFileBaseName;

            conversionThread.Options.LogThreadStartingAndStoppingInParent = false;
            conversionThread.Options.LogWaitingForCompletionChildThreads = false;
            conversionThread.Options.AutoValidate = false;
            //string[] listOfConvertedFiles = new string[mediaFiles.Length];

                foreach (string dcmFileName in mediaFiles)
                {
                    string argumentString = "";
                    System.String transferSyntax = "";
                    System.String sopClassUid = "";

                    try
                    {

                        DicomFile dcmFile = new DicomFile();
                        dcmFile.Read(dcmFileName, conversionThread);
                        FileMetaInformation fMI = dcmFile.FileMetaInformation;
                        if ((fMI != null))
                        {
                            // Get the Transfer syntax
                            HLI.Attribute tranferSyntaxAttr = fMI["0x00020010"];
                            transferSyntax = tranferSyntaxAttr.Values[0];

                            // Get the SOP Class UID
                            Values values = fMI["0x00020002"].Values;
                            sopClassUid = values[0];

                        }
                        if (sopClassUid == "")
                        {
                            conversionThread.WriteError("Error while performing conversion.Can't determine SOP Class UID for DCM file. \nSkipping the DCM File.");
                            continue;
                        }
                        //Retrieve the files from the DICOMDIR
                        else if (sopClassUid == "1.2.840.10008.1.3.10")
                        {
                            System.String refTransferSyntax = "";

                            HLI.DataSet tempDataSet = new HLI.DataSet();

                            // Read the DICOMDIR dataset
                            dcmFile.DataSet.DvtkDataDataSet = Dvtk.DvtkDataHelper.ReadDataSetFromFile(dcmFileName);
                            Dvtk.Sessions.ScriptSession session = this.storageOptions.DvtkScriptSession;
                            ArrayList refFiles = ImportRefFilesFromDicomdir(dcmFileName, dcmFile.DataSet);

                            foreach (string refFilename in refFiles)
                            {
                                // Read the Reference File
                                DicomFile refFile = new DicomFile();
                                refFile.Read(refFilename, conversionThread);

                                FileMetaInformation refFMI = refFile.FileMetaInformation;

                                // Get the transfer syntax and SOP class UID

                                if ((refFMI != null) && refFMI.Exists("0x00020010"))
                                {
                                    // Get the Transfer syntax
                                    HLI.Attribute refTranferSyntaxAttr = refFMI["0x00020010"];
                                    refTransferSyntax = refTranferSyntaxAttr.Values[0];
                                }
                                if (transferSyntax == "1.2.840.10008.1.2" || transferSyntax == "1.2.840.10008.1.2.1" || transferSyntax == "1.2.840.10008.1.2.2")
                                {
                                    try
                                    {
                                        if (radioButtonILE.Checked)
                                        {
                                            if (refTransferSyntax != "1.2.840.10008.1.2")
                                            {
                                                //Perform conversion
                                                string msg = string.Format("Converting the DICOM object - {0} from Transfer Syntax:{1} to Transfer Syntax:{2}", dcmFileName, transferSyntax, "1.2.840.10008.1.2");
                                                conversionThread.WriteInformation(msg);
                                                string outputFileName = finalPath + refFilename.Substring(refFilename.LastIndexOf(@"\") + 1);
                                                argumentString = "+ti" + " \"" + String.Format("{0}", refFilename) + "\" \"" + String.Format("{0}", outputFileName) + "\"";
                                                convertFile(argumentString);
                                                listOfConvertedFiles.Add(outputFileName);
                                            }
                                            else
                                            {   //If the File is encoded in the same TS as the selected TS, no need to convert.
                                                listOfConvertedFiles.Add(refFilename);
                                            }
                                        }
                                        else if (radioButtonELE.Checked)
                                        {
                                            if (refTransferSyntax != "1.2.840.10008.1.2.1")
                                            {
                                                //Perform conversion
                                                string msg = string.Format("Converting the DICOM object - {0} from Transfer Syntax:{1} to Transfer Syntax:{2}", dcmFileName, transferSyntax, "1.2.840.10008.1.2.1");
                                                conversionThread.WriteInformation(msg);
                                                string outputFileName = finalPath + refFilename.Substring(refFilename.LastIndexOf(@"\") + 1);
                                                argumentString = "+te" + " \"" + String.Format("{0}", refFilename) + "\" \"" + String.Format("{0}", outputFileName) + "\"";
                                                convertFile(argumentString);
                                                listOfConvertedFiles.Add(outputFileName);
                                            }
                                            else
                                            {   //If the File is encoded in the same TS as the selected TS, no need to convert.
                                                listOfConvertedFiles.Add(refFilename);
                                            }
                                        }
                                        else
                                        {
                                            if (refTransferSyntax != "1.2.840.10008.1.2.2")
                                            {
                                                //Perform conversion
                                                string msg = string.Format("Converting the DICOM object - {0} from Transfer Syntax:{1} to Transfer Syntax:{2}", dcmFileName, transferSyntax, "1.2.840.10008.1.2.2");
                                                conversionThread.WriteInformation(msg);
                                                string outputFileName = finalPath + refFilename.Substring(refFilename.LastIndexOf(@"\") + 1);
                                                argumentString = "+tb" + " \"" + String.Format("{0}", refFilename) + "\" \"" + String.Format("{0}", outputFileName) + "\"";
                                                convertFile(argumentString);
                                                listOfConvertedFiles.Add(outputFileName);
                                            }
                                            else
                                            {   //If the File is encoded in the same TS as the selected TS, no need to convert.
                                                listOfConvertedFiles.Add(refFilename);
                                            }
                                        }
                                    }
                                    catch(Exception e)
                                    {
                                        conversionThread.WriteWarning("Error! The file was not converted due to the following reason:" + e.Message);
                                        listOfConvertedFiles.Add(dcmFileName);
                                    }
                                }
                                else
                                {
                                    listOfConvertedFiles.Add(refFilename);
                                }
                            }
                        }
                        else
                        {
                            if (transferSyntax == "1.2.840.10008.1.2" || transferSyntax == "1.2.840.10008.1.2.1" || transferSyntax == "1.2.840.10008.1.2.2")
                            {
                                try
                                {
                                    if (radioButtonILE.Checked)
                                    {
                                        if (transferSyntax != "1.2.840.10008.1.2")
                                        {
                                            //Perform conversion
                                            string msg = string.Format("Converting the DICOM object - {0} from Transfer Syntax:{1} to Transfer Syntax:{2}", dcmFileName, transferSyntax, "1.2.840.10008.1.2");
                                            conversionThread.WriteInformation(msg);
                                            string outputFileName = finalPath + dcmFileName.Substring(dcmFileName.LastIndexOf(@"\") + 1);
                                            argumentString = "+ti" + " \"" + String.Format("{0}", dcmFileName) + "\" \"" + String.Format("{0}", outputFileName) + "\"";
                                            convertFile(argumentString);
                                            listOfConvertedFiles.Add(outputFileName);
                                        }
                                        else
                                        {   //If the File is encoded in the same TS as the selected TS, no need to convert.
                                            listOfConvertedFiles.Add(dcmFileName);
                                        }
                                    }
                                    else if (radioButtonELE.Checked)
                                    {
                                        if (transferSyntax != "1.2.840.10008.1.2.1")
                                        {
                                            //Perform conversion
                                            string msg = string.Format("Converting the DICOM object - {0} from Transfer Syntax:{1} to Transfer Syntax:{2}", dcmFileName, transferSyntax, "1.2.840.10008.1.2.1");
                                            conversionThread.WriteInformation(msg);
                                            string outputFileName = finalPath + @"\" + dcmFileName.Substring(dcmFileName.LastIndexOf(@"\") + 1);
                                            argumentString = "+te" + " \"" + String.Format("{0}", dcmFileName) + "\" \"" + String.Format("{0}", outputFileName) + "\"";
                                            convertFile(argumentString);
                                            listOfConvertedFiles.Add(outputFileName);
                                        }
                                        else
                                        {   //If the File is encoded in the same TS as the selected TS, no need to convert.
                                            listOfConvertedFiles.Add(dcmFileName);
                                        }
                                    }
                                    else if (radioButtonEBE.Checked)
                                    {
                                        if (transferSyntax != "1.2.840.10008.1.2.2")
                                        {
                                            //Perform conversion
                                            string msg = string.Format("Converting the DICOM object - {0} from Transfer Syntax:{1} to Transfer Syntax:{2}", dcmFileName, transferSyntax, "1.2.840.10008.1.2.2");
                                            conversionThread.WriteInformation(msg);
                                            string outputFileName = finalPath + dcmFileName.Substring(dcmFileName.LastIndexOf(@"\") + 1);
                                            argumentString = "+tb" + " \"" + String.Format("{0}", dcmFileName) + "\" \"" + String.Format("{0}", outputFileName) + "\"";
                                            convertFile(argumentString);
                                            listOfConvertedFiles.Add(outputFileName);
                                        }
                                        else
                                        {   //If the File is encoded in the same TS as the selected TS, no need to convert.
                                            listOfConvertedFiles.Add(dcmFileName);
                                        }
                                    }
                                }
                                catch(Exception e)
                                {
                                    conversionThread.WriteWarning("Error! The file was not converted due to the following reason:" + e.Message);
                                    listOfConvertedFiles.Add(dcmFileName);
                                }
                            }
                            else
                            {
                                listOfConvertedFiles.Add(dcmFileName);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        //MessageBox.Show("Error! The file was not converted due to the following reason:" + ex.Message);
                    }
                }

                string[] convertedMediaFiles = (System.String[])listOfConvertedFiles.ToArray(typeof(System.String));
            return (convertedMediaFiles);
        }
示例#8
0
        private void SendDICOMDataInSingleAssociation(string[] mediaFiles)
        {
            // Set the dicom messages to send
            List<DicomFile> dicomMessageCollection = new List<DicomFile>();
            PresentationContextCollection pcCollection = new PresentationContextCollection();

            StoreScu storageScuThread = new StoreScu();

            storageScuThread.Initialize(this.overviewThread);
            storageScuThread.Options.CopyFrom(this.storageOptions);

            String resultsFileBaseName = "StorageOperation_" + System.DateTime.Now.ToString("yyyyMMddHHmmss", System.Globalization.CultureInfo.InvariantCulture);
            storageScuThread.Options.ResultsFileNameOnlyWithoutExtension = resultsFileBaseName;
            storageScuThread.Options.Identifier = resultsFileBaseName;

            storageScuThread.Options.LogThreadStartingAndStoppingInParent = false;
            storageScuThread.Options.LogWaitingForCompletionChildThreads = false;
            storageScuThread.Options.AutoValidate = false;

            //The Current Directory is being set to the Results Directory because
            // when DICOMDIRs(or DICOM Files)Media are exported, the Environment.CurrentDirectory
            //is set to the Directory in which the DCM objects are present and the export will fail
            // if the DICOMDIR is present on a Physical Media.
            Environment.CurrentDirectory = this.storageOptions.ResultsDirectory;

            foreach (string dcmFilename in mediaFiles)
            {
                string msg = string.Format("Reading the DICOM object - {0}", dcmFilename);
                storageScuThread.WriteInformation(msg);

                try
                {
                    // Read the DCM File
                    DicomFile dcmFile = new DicomFile();

                    dcmFile.Read(dcmFilename, storageScuThread);

                    FileMetaInformation fMI =  dcmFile.FileMetaInformation;

                    // Get the transfer syntax and SOP class UID
                    System.String transferSyntax = "1.2.840.10008.1.2.1";
                    System.String sopClassUid = "";
                    if ((fMI != null))
                    {
                        // Get the Transfer syntax
                        HLI.Attribute tranferSyntaxAttr = fMI["0x00020010"];
                        transferSyntax = tranferSyntaxAttr.Values[0];

                        // Get the SOP Class UID
                        Values values = fMI["0x00020002"].Values;
                        sopClassUid = values[0];
                    }
                    else
                    {
                        // Get the SOP Class UID
                        Values values =  dcmFile.DataSet["0x00080016"].Values;
                        sopClassUid = values[0];
                    }

                    //Check for DICOMDIR
                    if(sopClassUid == "")
                    {
                        storageScuThread.WriteError("Can't determine SOP Class UID for DCM file. \nSkipping the DCM File.");
                        continue;
                    }
                    else if (sopClassUid == "1.2.840.10008.1.3.10")
                    {

                            HLI.DataSet tempDataSet = new HLI.DataSet();

                            // Read the DICOMDIR dataset
                            dcmFile.DataSet.DvtkDataDataSet = Dvtk.DvtkDataHelper.ReadDataSetFromFile(dcmFilename);
                            Dvtk.Sessions.ScriptSession session = this.storageOptions.DvtkScriptSession;
                            ArrayList refFiles = ImportRefFilesFromDicomdir(dcmFilename, dcmFile.DataSet);

                            foreach (string refFilename in refFiles)
                            {
                                // Read the Reference File
                                DicomFile refFile = new DicomFile();
                                refFile.Read(refFilename, storageScuThread);

                                FileMetaInformation refFMI = refFile.FileMetaInformation;

                                // Get the transfer syntax and SOP class UID
                                System.String refTransferSyntax = "1.2.840.10008.1.2.1";
                                if ((refFMI != null) && refFMI.Exists("0x00020010"))
                                {
                                    // Get the Transfer syntax
                                    HLI.Attribute refTranferSyntaxAttr = refFMI["0x00020010"];
                                    refTransferSyntax = refTranferSyntaxAttr.Values[0];
                                }

                                Values sopValues = refFile.DataSet["0x00080016"].Values;
                                System.String refSopClassUid = sopValues[0];

                                PresentationContext refPresentationContext = new PresentationContext(refSopClassUid, // Abstract Syntax Name
                                                                                                     refTransferSyntax); // Transfer Syntax Name(s)
                                pcCollection.Add(refPresentationContext);

                                //DicomMessage refStorageMessage = new DicomMessage(DvtkData.Dimse.DimseCommand.CSTORERQ);
                                //refStorageMessage.DataSet.CloneFrom(refFile.DataSet);
                                dicomMessageCollection.Add(refFile);
                            }
                    }
                    else
                    {
                        PresentationContext presentationContext = new PresentationContext(sopClassUid, // Abstract Syntax Name
                                                                                          transferSyntax); // Transfer Syntax Name(s)
                        pcCollection.Add(presentationContext);

                        //DicomMessage storageMessage = new DicomMessage(DvtkData.Dimse.DimseCommand.CSTORERQ);
                        //storageMessage.DataSet.CloneFrom(dcmFile.DataSet);
                        dicomMessageCollection.Add(dcmFile);
                    }
                }
                catch (Exception e)
                {
                    storageScuThread.WriteError(e.Message + "\nSkipping the DCM File.");
                }
            }

            // set the presentation contexts for the association
            PresentationContext[] presentationContexts = SetPresentationContexts(pcCollection);

            storageScuThread.DICOMFileCollection = dicomMessageCollection;
            storageScuThread.PresentationContexts = presentationContexts;

            storageScuThread.Start();

            storageScuThread.WaitForCompletion();

            DicomMessageCollection cStoreResponses = storageScuThread.Messages.DicomMessages.CStoreResponses;

            //storageScuThread.Stop();

            HandleCStoreResponses(storageCommitItems, cStoreResponses);

            storageScuThread.Messages.DicomMessages.CStoreResponses.Clear();
        }