Пример #1
0
        protected override int OnStart(StudyLoaderArgs studyLoaderArgs)
        {
            _sops = null;

            EventResult result          = EventResult.Success;
            var         loadedInstances = new AuditedInstances();

            try
            {
                using (var context = new DataAccessContext())
                {
                    IStudy study = context.GetStudyBroker().GetStudy(studyLoaderArgs.StudyInstanceUid);
                    if (study == null)
                    {
                        result = EventResult.MajorFailure;
                        loadedInstances.AddInstance(studyLoaderArgs.StudyInstanceUid);
                        throw new NotFoundLoadStudyException(studyLoaderArgs.StudyInstanceUid);
                    }
                    loadedInstances.AddInstance(study.PatientId, study.PatientsName, study.StudyInstanceUid);

                    _sops = study.GetSopInstances().GetEnumerator();
                    return(study.NumberOfStudyRelatedInstances);
                }
            }
            finally
            {
                AuditHelper.LogOpenStudies(new[] { AuditHelper.LocalAETitle }, loadedInstances, EventSource.CurrentUser, result);
            }
        }
        protected override int OnStart(StudyLoaderArgs studyLoaderArgs)
        {
            _sops = null;

            EventResult result          = EventResult.Success;
            var         loadedInstances = new AuditedInstances();

            try
            {
                using (var context = new DataAccessContext())
                {
                    if (!studyLoaderArgs.Options.IgnoreInUse)
                    {
                        var workItemStatusFilter = WorkItemStatusFilter.StatusIn(
                            WorkItemStatusEnum.Pending,
                            WorkItemStatusEnum.InProgress,
                            WorkItemStatusEnum.Idle,
                            WorkItemStatusEnum.Failed);

                        var updateItems = context.GetWorkItemBroker().GetWorkItems(
                            WorkItemConcurrency.StudyUpdate,
                            workItemStatusFilter,
                            studyLoaderArgs.StudyInstanceUid);

                        var deleteItems = context.GetWorkItemBroker().GetWorkItems(
                            WorkItemConcurrency.StudyDelete,
                            workItemStatusFilter,
                            studyLoaderArgs.StudyInstanceUid);

                        var updateTriggerItems = context.GetWorkItemBroker().GetWorkItems(
                            WorkItemConcurrency.StudyUpdateTrigger,
                            workItemStatusFilter,
                            studyLoaderArgs.StudyInstanceUid);

                        if (updateItems.Any() || deleteItems.Any() || updateTriggerItems.Any())
                        {
                            var message = string.Format("There are work items actively modifying the study with UID '{0}'.", studyLoaderArgs.StudyInstanceUid);
                            throw new InUseLoadStudyException(studyLoaderArgs.StudyInstanceUid, message);
                        }
                    }

                    IStudy study = context.GetStudyBroker().GetStudy(studyLoaderArgs.StudyInstanceUid);
                    if (study == null)
                    {
                        result = EventResult.MajorFailure;
                        loadedInstances.AddInstance(studyLoaderArgs.StudyInstanceUid);
                        throw new NotFoundLoadStudyException(studyLoaderArgs.StudyInstanceUid);
                    }
                    loadedInstances.AddInstance(study.PatientId, study.PatientsName, study.StudyInstanceUid);

                    _sops = study.GetSopInstances().GetEnumerator();
                    return(study.NumberOfStudyRelatedInstances);
                }
            }
            finally
            {
                AuditHelper.LogOpenStudies(new[] { AuditHelper.LocalAETitle }, loadedInstances, EventSource.CurrentUser, result);
            }
        }
Пример #3
0
        public AnonymizeStudyOutput AnonymizeStudy(AnonymizeStudyInput input)
        {
            // load study to anonymize
            IDataStoreReader    reader = DataAccessLayer.GetIDataStoreReader();
            IStudy              study  = reader.GetStudy(input.StudyInstanceUID);
            List <ISopInstance> sops   = new List <ISopInstance>(study.GetSopInstances());

            // ensure there is a valid output location
            if (string.IsNullOrEmpty(input.OutputDirectory))
            {
                // create temp dir
            }

            string fullPath = Path.GetFullPath(input.OutputDirectory);

            if (!Directory.Exists(fullPath))
            {
                Directory.CreateDirectory(fullPath);
            }

            // set up anonymization data
            StudyData studyData = new StudyData();

            studyData.PatientId         = input.PatientId;
            studyData.PatientsNameRaw   = input.PatientsName;
            studyData.PatientsBirthDate = input.PatientsBirthDate;
            studyData.PatientsSex       = input.PatientsSex;
            studyData.AccessionNumber   = input.AccessionNumber;
            studyData.StudyDescription  = input.StudyDescription;
            studyData.StudyDate         = input.StudyDate;

            DicomAnonymizer anonymizer = new DicomAnonymizer();

            anonymizer.StudyDataPrototype = studyData;

            //The default anonymizer removes the series data, so we just clone the original.
            anonymizer.AnonymizeSeriesDataDelegate =
                delegate(SeriesData original) { return(original.Clone()); };

            // anonymize each image in the study
            for (int i = 0; i < sops.Count; ++i)
            {
                ISopInstance sop  = sops[i];
                DicomFile    file = new DicomFile(sop.GetLocationUri().LocalDiskPath);

                anonymizer.Anonymize(file);

                file.Save(string.Format("{0}\\{1}.dcm", fullPath, i));
            }

            return(new AnonymizeStudyOutput(sops.Count));
        }