Workflow
flowchart TB
    %% Styles
    classDef input fill:#b3d9ff,stroke:#333,stroke-width:2px
    classDef core fill:#90EE90,stroke:#333,stroke-width:2px
    classDef output fill:#FFB366,stroke:#333,stroke-width:2px
    classDef test fill:#E6E6FA,stroke:#333,stroke-width:2px
    classDef tools fill:#FFE4B5,stroke:#333,stroke-width:2px
    %% Input Layer
    subgraph InputFormats
        ASD[".asd Files"]:::input
        IBW[".ibw Files"]:::input
        SPM[".spm Files"]:::input
        JPK[".jpk Files"]:::input
        TOPO[".topostats Files"]:::input
        GWY[".gwy Files"]:::input
    end
    %% Core Processing Layer
    subgraph CoreProcessing
        IO["IO Module\n(Base Reader)"]:::core
        LOG["Logging Module"]:::core
        subgraph FormatHandlers
            ASDHandler["ASD Handler"]:::core
            IBWHandler["IBW Handler"]:::core
            SPMHandler["SPM Handler"]:::core
            JPKHandler["JPK Handler"]:::core
            TOPOHandler["TopoStats Handler"]:::core
            GWYHandler["GWY Handler"]:::core
        end
    end
    %% Testing Layer
    subgraph Testing
        IOTest["IO Tests"]:::test
        ASDTest["ASD Tests"]:::test
        IBWTest["IBW Tests"]:::test
        SPMTest["SPM Tests"]:::test
        JPKTest["JPK Tests"]:::test
        TOPOTest["TopoStats Tests"]:::test
        GWYTest["GWY Tests"]:::test
    end
    %% Development Tools
    subgraph DevTools
        PreCommit["Pre-commit Config"]:::tools
        Pylint["Pylint Config"]:::tools
    end
    %% Output Layer
    Output["Standardized Data Format\n- Image Data\n- Scaling Factor\n- Metadata"]:::output
    %% Relationships
    ASD --> ASDHandler
    IBW --> IBWHandler
    SPM --> SPMHandler
    JPK --> JPKHandler
    TOPO --> TOPOHandler
    GWY --> GWYHandler
    ASDHandler --> IO
    IBWHandler --> IO
    SPMHandler --> IO
    JPKHandler --> IO
    TOPOHandler --> IO
    GWYHandler --> IO
    IO <--> LOG
    IO --> Output
    ASDHandler --- ASDTest
    IBWHandler --- IBWTest
    SPMHandler --- SPMTest
    JPKHandler --- JPKTest
    TOPOHandler --- TOPOTest
    GWYHandler --- GWYTest
    IO --- IOTest
    %% Click Events
    click IO "https://github.com/AFM-SPM/AFMReader/blob/main/AFMReader/io.py"
    click LOG "https://github.com/AFM-SPM/AFMReader/blob/main/AFMReader/logging.py"
    click ASDHandler "https://github.com/AFM-SPM/AFMReader/blob/main/AFMReader/asd.py"
    click IBWHandler "https://github.com/AFM-SPM/AFMReader/blob/main/AFMReader/ibw.py"
    click SPMHandler "https://github.com/AFM-SPM/AFMReader/blob/main/AFMReader/spm.py"
    click JPKHandler "https://github.com/AFM-SPM/AFMReader/blob/main/AFMReader/jpk.py"
    click TOPOHandler "https://github.com/AFM-SPM/AFMReader/blob/main/AFMReader/topostats.py"
    click GWYHandler "https://github.com/AFM-SPM/AFMReader/blob/main/AFMReader/gwy.py"
    click ASDTest "https://github.com/AFM-SPM/AFMReader/blob/main/tests/test_asd.py"
    click IBWTest "https://github.com/AFM-SPM/AFMReader/blob/main/tests/test_ibw.py"
    click SPMTest "https://github.com/AFM-SPM/AFMReader/blob/main/tests/test_spm.py"
    click JPKTest "https://github.com/AFM-SPM/AFMReader/blob/main/tests/test_jpk.py"
    click TOPOTest "https://github.com/AFM-SPM/AFMReader/blob/main/tests/test_topostats.py"
    click GWYTest "https://github.com/AFM-SPM/AFMReader/blob/main/tests/test_gwy.py"
    click IOTest "https://github.com/AFM-SPM/AFMReader/blob/main/tests/test_io.py"
    click PreCommit "https://github.com/AFM-SPM/AFMReader/blob/main/.pre-commit-config.yaml"
    click Pylint "https://github.com/AFM-SPM/AFMReader/blob/main/.pylintrc"
Generated using GitDiagram