Package com.pixelmed.apps

## Class DeidentifyAndRedact

- java.lang.Object
- - com.pixelmed.apps.DeidentifyAndRedact

- Direct Known Subclasses:
    `DeidentifyAndRedactWithOriginalFileName`

      public class DeidentifyAndRedact
      extends java.lang.Object

  A class to implement bulk de-identification and redaction of DICOM files.

  Development of this class was supported by funding from MDDX Research and Informatics.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class | Description
    --- | --- | ---
    `protected class` | `DeidentifyAndRedact.OurMediaImporter` | A protected class that actually does all the work of finding and processing the files.
    `protected class` | `DeidentifyAndRedact.RedactionRegions` | A protected class to store sets of rectangular redaction regions indexed by a String classname.

  - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `protected java.util.Set<java.lang.String>` | `failedSet` |
    `protected static java.lang.String` | `ourCalledAETitle` |

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `DeidentifyAndRedact​(java.lang.String inputPathName, java.lang.String outputFolderName, java.lang.String redactionControlFileName, boolean decompress, boolean keepAllPrivate)` | Read DICOM format image files, de-identify them and apply any specified redactions to the Pixel Data.
    `DeidentifyAndRedact​(java.lang.String inputPathName, java.lang.String outputFolderName, java.lang.String redactionControlFileName, boolean decompress, boolean keepAllPrivate, boolean addContributingEquipmentSequence)` | Read DICOM format image files, de-identify them and apply any specified redactions to the Pixel Data.
    `DeidentifyAndRedact​(java.lang.String inputPathName, java.lang.String outputFolderName, java.lang.String redactionControlFileName, boolean decompress, boolean keepAllPrivate, boolean addContributingEquipmentSequence, AttributeList replacementAttributes)` | Read DICOM format image files, de-identify them and apply any specified redactions to the Pixel Data.
    `DeidentifyAndRedact​(java.lang.String inputPathName, java.lang.String outputFolderName, java.lang.String redactionControlFileName, boolean decompress, boolean keepAllPrivate, AttributeList replacementAttributes)` | Read DICOM format image files, de-identify them and apply any specified redactions to the Pixel Data.

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `java.util.Set<java.lang.String>` | `getFilePathNamesThatFailedToProcess()` | Get file names that failed to import.
    `static void` | `main​(java.lang.String[] arg)` | Read DICOM format image files, de-identify them and apply any specified redactions to the Pixel Data.
    `protected java.lang.String` | `makeOutputFileName​(java.lang.String outputFolderName, java.lang.String inputFileName, java.lang.String sopInstanceUID)` | Make a suitable file name to use for a deidentified and redacted input file.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### ourCalledAETitle

          protected static java.lang.String ourCalledAETitle

    - #### failedSet

          protected java.util.Set<java.lang.String> failedSet

  - ### Constructor Detail

    - #### DeidentifyAndRedact

          public DeidentifyAndRedact​(java.lang.String inputPathName,
                                     java.lang.String outputFolderName,
                                     java.lang.String redactionControlFileName,
                                     boolean decompress,
                                     boolean keepAllPrivate,
                                     boolean addContributingEquipmentSequence,
                                     AttributeList replacementAttributes)
                              throws DicomException,
                                     java.lang.Exception,
                                     java.io.IOException

      Read DICOM format image files, de-identify them and apply any specified redactions to the Pixel Data.

      Searches the specified input path recursively for suitable files.

      If Baseline (sequential 8 bit) JPEG, can either redact without affecting other JPEG blocks or decompress JPEG entirely, redact and recompress (lossy)

      For details of the processing, see `DeidentifyAndRedact.OurMediaImporter.doSomethingWithDicomFileOnMedia(String,String,String)`.

      For specification of the contents of the redaction control file, see `DeidentifyAndRedact.RedactionRegions`.

      Parameters:
        `inputPathName` - the path to search for DICOM files
        `outputFolderName` - where to store all the processed output files
        `redactionControlFileName` - which regions to redact in all the processed files
        `decompress` - decompress JPEG rather than try to avoid loss in unredacted blocks
        `keepAllPrivate` - retain all private attributes, not just known safe ones
        `addContributingEquipmentSequence` - whether or not to add ContributingEquipmentSequence
        `replacementAttributes` - additional attributes with values to add or replace during de-identification
      Throws:
        `DicomException`
        `java.io.IOException`
        `java.lang.Exception`

    - #### DeidentifyAndRedact

          public DeidentifyAndRedact​(java.lang.String inputPathName,
                                     java.lang.String outputFolderName,
                                     java.lang.String redactionControlFileName,
                                     boolean decompress,
                                     boolean keepAllPrivate,
                                     AttributeList replacementAttributes)
                              throws DicomException,
                                     java.lang.Exception,
                                     java.io.IOException

      Read DICOM format image files, de-identify them and apply any specified redactions to the Pixel Data.

      Searches the specified input path recursively for suitable files.

      If Baseline (sequential 8 bit) JPEG, can either redact without affecting other JPEG blocks or decompress JPEG entirely, redact and recompress (lossy)

      For details of the processing, see `DeidentifyAndRedact.OurMediaImporter.doSomethingWithDicomFileOnMedia(String,String,String)`.

      For specification of the contents of the redaction control file, see `DeidentifyAndRedact.RedactionRegions`.

      Adds ContributingEquipmentSequence by default.

      Parameters:
        `inputPathName` - the path to search for DICOM files
        `outputFolderName` - where to store all the processed output files
        `redactionControlFileName` - which regions to redact in all the processed files
        `decompress` - decompress JPEG rather than try to avoid loss in unredacted blocks
        `keepAllPrivate` - retain all private attributes, not just known safe ones
        `replacementAttributes` - additional attributes with values to add or replace during de-identification
      Throws:
        `DicomException`
        `java.io.IOException`
        `java.lang.Exception`

    - #### DeidentifyAndRedact

          public DeidentifyAndRedact​(java.lang.String inputPathName,
                                     java.lang.String outputFolderName,
                                     java.lang.String redactionControlFileName,
                                     boolean decompress,
                                     boolean keepAllPrivate,
                                     boolean addContributingEquipmentSequence)
                              throws DicomException,
                                     java.lang.Exception,
                                     java.io.IOException

      Read DICOM format image files, de-identify them and apply any specified redactions to the Pixel Data.

      Searches the specified input path recursively for suitable files.

      If Baseline (sequential 8 bit) JPEG, can either redact without affecting other JPEG blocks or decompress JPEG entirely, redact and recompress (lossy)

      For details of the processing, see `DeidentifyAndRedact.OurMediaImporter.doSomethingWithDicomFileOnMedia(String,String,String)`.

      For specification of the contents of the redaction control file, see `DeidentifyAndRedact.RedactionRegions`.

      Parameters:
        `inputPathName` - the path to search for DICOM files
        `outputFolderName` - where to store all the processed output files
        `redactionControlFileName` - which regions to redact in all the processed files
        `decompress` - decompress JPEG rather than try to avoid loss in unredacted blocks
        `keepAllPrivate` - retain all private attributes, not just known safe ones
        `addContributingEquipmentSequence` - whether or not to add ContributingEquipmentSequence
      Throws:
        `DicomException`
        `java.io.IOException`
        `java.lang.Exception`

    - #### DeidentifyAndRedact

          public DeidentifyAndRedact​(java.lang.String inputPathName,
                                     java.lang.String outputFolderName,
                                     java.lang.String redactionControlFileName,
                                     boolean decompress,
                                     boolean keepAllPrivate)
                              throws DicomException,
                                     java.lang.Exception,
                                     java.io.IOException

      Read DICOM format image files, de-identify them and apply any specified redactions to the Pixel Data.

      Searches the specified input path recursively for suitable files.

      If Baseline (sequential 8 bit) JPEG, can either redact without affecting other JPEG blocks or decompress JPEG entirely, redact and recompress (lossy)

      For details of the processing, see `DeidentifyAndRedact.OurMediaImporter.doSomethingWithDicomFileOnMedia(String,String,String)`.

      For specification of the contents of the redaction control file, see `DeidentifyAndRedact.RedactionRegions`.

      Adds ContributingEquipmentSequence by default.

      Parameters:
        `inputPathName` - the path to search for DICOM files
        `outputFolderName` - where to store all the processed output files
        `redactionControlFileName` - which regions to redact in all the processed files
        `decompress` - decompress JPEG rather than try to avoid loss in unredacted blocks
        `keepAllPrivate` - retain all private attributes, not just known safe ones
      Throws:
        `DicomException`
        `java.io.IOException`
        `java.lang.Exception`

  - ### Method Detail

    - #### makeOutputFileName

          protected java.lang.String makeOutputFileName​(java.lang.String outputFolderName,
                                                        java.lang.String inputFileName,
                                                        java.lang.String sopInstanceUID)
                                                 throws java.io.IOException

      Make a suitable file name to use for a deidentified and redacted input file.

      The default is the UID plus "_Anon.dcm" in the outputFolderName (ignoring the inputFileName).

      Override this method in a subclass if a different file name is required.

      Parameters:
        `outputFolderName` - where to store all the processed output files
        `inputFileName` - the path to search for DICOM files
        `sopInstanceUID` - the SOP Instance UID of the output file
      Throws:
        `java.io.IOException` - if a filename cannot be constructed

    - #### getFilePathNamesThatFailedToProcess

          public java.util.Set<java.lang.String> getFilePathNamesThatFailedToProcess()

      Get file names that failed to import.

      Returns:
        file names that failed to import (empty if did not fail)

    - #### main

          public static void main​(java.lang.String[] arg)

      Read DICOM format image files, de-identify them and apply any specified redactions to the Pixel Data.

      Searches the specified input path recursively for suitable files If Baseline (sequential 8 bit) JPEG, can either redact without affecting other JPEG blocks or decompress JPEG entirely, redact and recompress (lossy)
      Parameters:
        `arg` - three, four or more parameters, the inputPath (file or folder), outputFolder, redactionControlFile, optionally the redaction method BLOCK|DECOMPRESS (default is BLOCK), optionally whether or not to keep all or just known safe private data elements KEEPALLPRIVATE|KEEPSAFEPRIVATE (default is KEEPSAFEPRIVATE), optionally whether or not to add ContributingEquipmentSequence ADDCONTRIBUTINGEQUIPMENT|DONOTADDCONTRIBUTINGEQUIPMENT (default is ADDCONTRIBUTINGEQUIPMENT), followed by optional pairs of keyword and value attribute replacements (e.g., PatientName "Doe^Jane")