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); }
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); }
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); }
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); } } }
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); }
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(); }