@startuml

abstract class Project {
        mode : str = "single"
        code : str = "edac"
        scans : Scan [1..*]
        domains : dict [1..*]
        cluster_generator : ClusterGenerator
        handler_classes
        files : FileTracker
        {abstract} create_cluster() : Cluster
        {abstract} create_params() : CalculatorParams
        {abstract} create_model_space() : ModelSpace
    }

class Scan {
    filename
    raw_data
    dtype
    modulation
    mode
    emitter
    initial_state
    energies
    thetas
    phis
    alphas
    import_scan_file()
}

class ModelSpace {
    start : dict
    min : dict
    max : dict
    step : dict
    add_param(name, start, min, max, step)
    get_param(name)
}

class CalculatorParams {
    title
    comment
    cluster_file
    output_file
    scan_file
    initial_state
    polarization
    angular_resolution
    z_surface
    inner_potential
    work_function
    polar_incidence_angle
    azimuthal_incidence_angle
    experiment_temperature
}

Project "1" *-- "1..*" Scan

@enduml