@startuml

package pmsco {
    abstract class Project {
        mode
        code
        scans
        domains
        cluster_generator
        handler_classes
        __
        {abstract} create_cluster()
        {abstract} create_params()
        {abstract} create_model_space()
        ..
        combine_scans()
        combine_domains()
        combine_emitters()
        calc_modulation()
        calc_rfactor()
    }

    abstract class ClusterGenerator {
        {abstract} count_emitters()
        {abstract} create_cluster()
    }

}

package projects {
    class UserProject {
        scan_dict
        __
        setup()
        ..
        create_params()
        create_model_space()
        ..
        combine_domains()
    }

    class UserClusterGenerator {
        count_emitters()
        create_cluster()
    }

}

Project <|-- UserProject
Project *-- ClusterGenerator
ClusterGenerator <|-- UserClusterGenerator

hide empty members

@enduml