private StudyData GetAnonymizedStudyData(StudyData original)
 {
     if (_anonymizeStudyDataDelegate != null)
     {
         return(_anonymizeStudyDataDelegate(original.Clone()));
     }
     else
     {
         return(StudyDataPrototype.Clone());
     }
 }
        private StudyData GetAnonymizedStudyData()
        {
            StudyData originalData = new StudyData();

            originalData.LoadFrom(_currentFile);

            _oldStudyDate = originalData.StudyDate;

            if (string.IsNullOrEmpty(originalData.StudyInstanceUid))
            {
                throw new DicomAnonymizerException("The StudyInstanceUid in the source file cannot be empty.");
            }

            StudyData anonymizedData;

            if (_anonymizedStudyDataMap.ContainsKey(originalData.StudyInstanceUid))
            {
                anonymizedData = _anonymizedStudyDataMap[originalData.StudyInstanceUid];
            }
            else
            {
                anonymizedData = GetAnonymizedStudyData(originalData);

                // generate the new study uid if it hasn't already been remapped
                if (_uidMap.ContainsKey(originalData.StudyInstanceUid))
                {
                    anonymizedData.StudyInstanceUid = _uidMap[originalData.StudyInstanceUid];
                }
                else
                {
                    anonymizedData.StudyInstanceUid = _uidMap[originalData.StudyInstanceUid] = DicomUid.GenerateUid().UID;
                }

                if (String.IsNullOrEmpty(anonymizedData.StudyInstanceUid) || anonymizedData.StudyInstanceUid == originalData.StudyInstanceUid)
                {
                    throw new DicomAnonymizerException("An error occurred while generating a new Uid.");
                }

                ReadOnlyCollection <ValidationFailureDescription> failures = _validationStrategy.GetValidationFailures(originalData, anonymizedData);
                if (failures.Count > 0)
                {
                    throw new DicomAnonymizerValidationException("At least one validation failure has occurred.", failures);
                }

                _uidMap[originalData.StudyInstanceUid] = anonymizedData.StudyInstanceUid;

                //store the anonymized data.
                _anonymizedStudyDataMap[originalData.StudyInstanceUid] = anonymizedData;
            }

            _newStudyDate = anonymizedData.StudyDate;

            return(anonymizedData);
        }
			public ReadOnlyCollection<ValidationFailureDescription> GetValidationFailures(StudyData originalData, StudyData anonymizedData)
			{
				_failures = new List<ValidationFailureDescription>();

				ValidatePatientNamesNotEqual(originalData.PatientsName, anonymizedData.PatientsName);
				ValidateNotEqual(originalData.PatientId, anonymizedData.PatientId, "PatientId");
				ValidateNotEqual(originalData.AccessionNumber, anonymizedData.AccessionNumber, "AccessionNumber");
				ValidateNotEqual(originalData.StudyId, anonymizedData.StudyId, "StudyId");

				if (!IsOptionSet(_options, ValidationOptions.AllowEqualBirthDate))
					ValidateNotEqual(originalData.PatientsBirthDateRaw, anonymizedData.PatientsBirthDateRaw, "PatientsBirthDate");
				if (!IsOptionSet(_options, ValidationOptions.AllowEmptyPatientId))
					ValidateNotEmpty(anonymizedData.PatientId, "PatientId");
				if (!IsOptionSet(_options, ValidationOptions.AllowEmptyPatientName))
					ValidateNotEmpty(anonymizedData.PatientsNameRaw, "PatientsName");

				ReadOnlyCollection<ValidationFailureDescription> failures = _failures.AsReadOnly();
				_failures = null;
				return failures;
			}
        public virtual void Anonymize(DicomFile dicomFile)
        {
            if (dicomFile == null)
            {
                throw new ArgumentNullException("dicomFile", "The input DicomFile cannot be null.");
            }

            if (dicomFile.DataSet.IsEmpty())
            {
                dicomFile.Load();
            }

            _currentFile = dicomFile;

            try
            {
                StudyData  anonymizedStudyData  = GetAnonymizedStudyData();
                SeriesData anonymizedSeriesData = GetAnonymizedSeriesData();

                //massage attributes.
                Anonymize();

                anonymizedSeriesData.SaveTo(_currentFile);
                anonymizedStudyData.SaveTo(_currentFile);
            }
            catch (DicomAnonymizerException)
            {
                throw;
            }
            catch (Exception e)
            {
                throw new DicomAnonymizerException("An unexpected error has occurred.", e);
            }
            finally
            {
                _currentFile         = null;
                _newStudyDate        = null;
                _oldStudyDate        = null;
                _studyDateDifference = null;
            }
        }
Exemple #5
0
		private bool Initialize()
		{
			_synchronizationContext = SynchronizationContext.Current;

			_exportedInstances = new AuditedInstances();
			_canceled = false;
			_overwrite = false;

			if (Anonymize)
			{
				ExportComponent component = new ExportComponent();
				component.OutputPath = OutputPath;

				if (DialogBoxAction.Ok != DesktopWindow.ShowDialogBox(component, SR.Export))
					return false;

				OutputPath = component.OutputPath;

				StudyData studyData = new StudyData
				{
					PatientId = component.PatientId,
					PatientsNameRaw = component.PatientsName,
					PatientsBirthDate = component.PatientsDateOfBirth,
					StudyId = component.StudyId,
					StudyDescription = component.StudyDescription,
					AccessionNumber = component.AccessionNumber,
					StudyDate = component.StudyDate
				};

				_anonymizer = new DicomAnonymizer();
				_anonymizer.ValidationOptions = ValidationOptions.RelaxAllChecks;
				_anonymizer.StudyDataPrototype = studyData;
			}
			else
			{
				SelectFolderDialogCreationArgs args = new SelectFolderDialogCreationArgs();
				args.Prompt = SR.MessageSelectOutputLocation;
				args.Path = OutputPath;

				FileDialogResult result = DesktopWindow.ShowSelectFolderDialogBox(args);
				if (result.Action != DialogBoxAction.Ok)
					return false;

				OutputPath = result.FileName;
			}

			return true;
		}
Exemple #6
0
		private StudyData GetAnonymizedStudyData(StudyData original)
		{
			if (_anonymizeStudyDataDelegate != null)
				return _anonymizeStudyDataDelegate(original.Clone());
			else
				return StudyDataPrototype.Clone();
		}
Exemple #7
0
		private StudyData GetAnonymizedStudyData()
		{
			StudyData originalData = new StudyData();
			originalData.LoadFrom(_currentFile);

			_oldStudyDate = originalData.StudyDate;

			if (string.IsNullOrEmpty(originalData.StudyInstanceUid))
				throw new DicomAnonymizerException("The StudyInstanceUid in the source file cannot be empty.");

			StudyData anonymizedData;
			if (_anonymizedStudyDataMap.ContainsKey(originalData.StudyInstanceUid))
			{
				anonymizedData = _anonymizedStudyDataMap[originalData.StudyInstanceUid];
			}
			else
			{
				anonymizedData = GetAnonymizedStudyData(originalData);

				// generate the new study uid if it hasn't already been remapped
				if (_uidMap.ContainsKey(originalData.StudyInstanceUid))
					anonymizedData.StudyInstanceUid = _uidMap[originalData.StudyInstanceUid];
				else
					anonymizedData.StudyInstanceUid = _uidMap[originalData.StudyInstanceUid] = DicomUid.GenerateUid().UID;

				if (String.IsNullOrEmpty(anonymizedData.StudyInstanceUid) || anonymizedData.StudyInstanceUid == originalData.StudyInstanceUid)
					throw new DicomAnonymizerException("An error occurred while generating a new Uid.");

				ReadOnlyCollection<ValidationFailureDescription> failures = _validationStrategy.GetValidationFailures(originalData, anonymizedData);
				if (failures.Count > 0)
					throw new DicomAnonymizerValidationException("At least one validation failure has occurred.", failures);

				_uidMap[originalData.StudyInstanceUid] = anonymizedData.StudyInstanceUid;

				//store the anonymized data.
				_anonymizedStudyDataMap[originalData.StudyInstanceUid] = anonymizedData;
			}

			_newStudyDate = anonymizedData.StudyDate;

			return anonymizedData;
		}
		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);
		}