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