예제 #1
0
 private void MoveSeries(string studyInstanceUniqueId, IEnumerable<string> seriesInstanceUniqueIds, string applicationEntityDestination)
 {
     DataSet seriesCMoveDataset = new DataSet();
     seriesCMoveDataset.FileMetaInfo = GenerateFileMetaInfo(UIDs.StudyRootQueryRetrieveInformationModelMOVE);
     seriesCMoveDataset.PutCS(Tags.QueryRetrieveLevel, "SERIES");
     seriesCMoveDataset.PutUI(Tags.StudyInstanceUniqueId, studyInstanceUniqueId);
     seriesCMoveDataset.PutUI(Tags.SeriesInstanceUniqueId, seriesInstanceUniqueIds.Distinct().ToArray());
     LogDataSetValues(seriesCMoveDataset);
     CMoveDataSet(seriesCMoveDataset, applicationEntityDestination);
 }
예제 #2
0
 /// <summary>
 /// Send C-GET
 /// <param name="studyInstanceUniqueId">A study instance UniqueId</param>
 /// <param name="seriesInstanceUniqueId">A series instance UniqueId</param>
 /// <param name="sopInstanceUniqueId">A sop instance instance UniqueId</param>
 /// </summary>
 public IList<DataSet> CGet(string studyInstanceUniqueId, string seriesInstanceUniqueId, string sopInstanceUniqueId)
 {
     if ((studyInstanceUniqueId == null) && (seriesInstanceUniqueId == null) && (sopInstanceUniqueId == null))
     {
         return null;
     }
     int pcid = _presentationContextIdStart;
     _presentationContextIdStart += 2;
     var datasets = new List<DataSet>();
     IActiveAssociation active = null;
     try
     {
         string sopClassUniqueId = UIDs.StudyRootQueryRetrieveInformationModelGET;
         _aAssociateRequest.AddPresContext(_associationFactory.NewPresContext(pcid, sopClassUniqueId, DefinedTransferSyntaxes));
         active = OpenAssociation();
         if (active != null)
         {
             var dataset = new DataSet();
             dataset.FileMetaInfo = GenerateFileMetaInfo(sopClassUniqueId);
             dataset.PutUI(Tags.StudyInstanceUniqueId, studyInstanceUniqueId);
             dataset.PutUI(Tags.SeriesInstanceUniqueId, seriesInstanceUniqueId);
             dataset.PutUI(Tags.SOPInstanceUniqueId, sopInstanceUniqueId);
             IAssociation association = active.Association;
             if ((association.GetAcceptedPresContext(sopClassUniqueId, TransferSyntaxUniqueId)) == null)
             {
                 Logger.Error(SOP_CLASS_UNIQUEID_NOT_SUPPORTED);
                 return null;
             }
             DicomCommand cGetDicomCommand = _dcmObjectFactory.NewCommand().InitCGetRQ(association.NextMsgID(), sopClassUniqueId, Priority.HIGH);
             IDimse dimseRequest = _associationFactory.NewDimse(pcid, cGetDicomCommand, dataset);
             FutureDimseResponse dimseResponse = active.Invoke(dimseRequest);
             while (!dimseResponse.IsReady())
             {
                 Thread.Sleep(0);
             }
             datasets.AddRange(dimseResponse.ListPending().Select(dimse => dimse.DataSet));
             _aAssociateRequest.RemovePresentationContext(pcid);
         }
     }
     finally
     {
         if (active != null)
         {
             active.Release(true);
         }
         _aAssociateRequest.RemovePresentationContext(pcid);
     }
     return datasets;
 }
예제 #3
0
 /// <summary>
 /// Find all the studies for a specific patient
 /// <param name="patientId">The id of the patient</param>
 /// <param name="patientName">The name of the patient</param>
 /// </summary>
 public IList<DataSet> CFindStudy(string patientId, string patientName)
 {
     string queryKey = _aAssociateRequest.ApplicationEntityTitle + _port + _hostName + patientId + patientName;
     if (_cacheManager.ContainsKey(queryKey))
     {
         return _cacheManager[queryKey];
     }
     const string sopClassUniqueId = UIDs.StudyRootQueryRetrieveInformationModelFIND;
     var dataset = new DataSet();
     dataset.FileMetaInfo = GenerateFileMetaInfo(sopClassUniqueId);
     dataset.PutDA(Tags.StudyDate);
     dataset.PutTM(Tags.StudyTime);
     dataset.PutSH(Tags.AccessionNumber);
     dataset.PutCS(Tags.QueryRetrieveLevel, "STUDY");
     dataset.PutCS(Tags.ModalitiesInStudy);
     dataset.PutLO(Tags.InstitutionName);
     dataset.PutPN(Tags.PerformingPhysicianName);
     dataset.PutPN(Tags.ReferringPhysicianName);
     dataset.PutLO(Tags.StudyDescription);
     dataset.PutPN(Tags.PatientName, patientName);
     dataset.PutLO(Tags.PatientID, patientId);
     dataset.PutDA(Tags.PatientBirthDate);
     dataset.PutCS(Tags.PatientSex);
     dataset.PutAS(Tags.PatientAge);
     dataset.PutUI(Tags.StudyInstanceUniqueId);
     dataset.PutSH(Tags.StudyID);
     List<DataSet> datasets = RetrieveDatasetsFromServiceClassProvider(dataset, sopClassUniqueId);
     if (datasets.Any())
     {
         _cacheManager.Add(queryKey, datasets);
     }
     return datasets;
 }
예제 #4
0
 /// <summary>
 /// Find all the studies for the studies Instance UniqueIds
 /// <param name="studyInstanceUniqueIds">The studies' instance UniqueIds</param>
 /// </summary>
 public IList<DataSet> CFindStudies(IEnumerable<string> studyInstanceUniqueIds)
 {
     const string sopClassUniqueId = UIDs.StudyRootQueryRetrieveInformationModelFIND;
     var dataset = new DataSet();
     dataset.FileMetaInfo = GenerateFileMetaInfo(sopClassUniqueId);
     dataset.PutDA(Tags.StudyDate);
     dataset.PutTM(Tags.StudyTime);
     dataset.PutSH(Tags.AccessionNumber);
     dataset.PutCS(Tags.QueryRetrieveLevel, "STUDY");
     dataset.PutCS(Tags.ModalitiesInStudy);
     dataset.PutLO(Tags.InstitutionName);
     dataset.PutPN(Tags.ReferringPhysicianName);
     dataset.PutLO(Tags.StudyDescription);
     dataset.PutPN(Tags.PatientName);
     dataset.PutLO(Tags.PatientID);
     dataset.PutDA(Tags.PatientBirthDate);
     dataset.PutCS(Tags.PatientSex);
     dataset.PutAS(Tags.PatientAge);
     dataset.PutUI(Tags.StudyInstanceUniqueId, studyInstanceUniqueIds.ToArray());
     dataset.PutSH(Tags.StudyID);
     return studyInstanceUniqueIds.Any() ? RetrieveDatasetsFromServiceClassProvider(dataset, sopClassUniqueId) : new List<DataSet>();
 }
예제 #5
0
 /// <summary>
 /// Send C-FIND to find the series for the studies 
 /// <param name="studiesInstanceUniqueIds">The studies' instance UniqueIds</param>
 /// </summary>
 public IList<DataSet> CFindSeriesForStudies(IEnumerable<string> studiesInstanceUniqueIds)
 {
     var dataset = new DataSet();
     const string sopClassUniqueId = UIDs.StudyRootQueryRetrieveInformationModelFIND;
     dataset.FileMetaInfo = GenerateFileMetaInfo(sopClassUniqueId);
     dataset.PutCS(Tags.QueryRetrieveLevel, "SERIES");
     dataset.PutCS(Tags.Modality);
     dataset.PutUI(Tags.StudyInstanceUniqueId, studiesInstanceUniqueIds.ToArray());
     dataset.PutUI(Tags.SeriesInstanceUniqueId);
     dataset.PutIS(Tags.SeriesNumber);
     dataset.PutDA(Tags.SeriesDate);
     dataset.PutTM(Tags.SeriesTime);
     dataset.PutLO(Tags.SeriesDescription);
     return studiesInstanceUniqueIds != null && studiesInstanceUniqueIds.Any() ? RetrieveDatasetsFromServiceClassProvider(dataset, sopClassUniqueId) : new List<DataSet>();
 }
예제 #6
0
 /// <summary>
 /// Send C-FIND for instance
 /// <param name="studyInstanceUniqueIds">The studies' instance UniqueIds</param>
 /// <param name="seriesInstanceUniqueIds">The series' instance UniqueIds</param>
 /// </summary>
 public IList<DataSet> CFindInstance(IEnumerable<string> studyInstanceUniqueIds, IEnumerable<string> seriesInstanceUniqueIds)
 {
     const string sopClassUniqueId = UIDs.StudyRootQueryRetrieveInformationModelFIND;
     var datasets = new List<DataSet>();
     List<string> seriesNotCached = RetrieveItemsFromTheCache(seriesInstanceUniqueIds, datasets);
     List<string> studiesNotCached = RetrieveItemsFromTheCache(studyInstanceUniqueIds, datasets);
     var dataset = new DataSet();
     dataset.FileMetaInfo = GenerateFileMetaInfo(sopClassUniqueId);
     dataset.PutUI(Tags.SOPInstanceUniqueId);
     dataset.PutCS(Tags.QueryRetrieveLevel, "IMAGE");
     dataset.PutUI(Tags.SeriesInstanceUniqueId, seriesNotCached.ToArray());
     dataset.PutUI(Tags.StudyInstanceUniqueId, studiesNotCached.ToArray());
     datasets.AddRange(RetrieveDatasetsFromServiceClassProvider(dataset, sopClassUniqueId));
     return datasets;
 }