class ClusterC:
    ''' 
    This class represents connected clusters between layers where weights are the number of shared nodes. 
    Connections are stored with one 'source' cluster which is connected to n 'destination' clusters, with n >= 0.
    
    :param cluster_label: The cluster label of the 'source' cluster
    :param cluster_layer: The layer name of the 'source' cluster
    :param cluster_runId: The run which calculated the connections
    :param cluster_containedNodesDict: Ids of nodes contained in the 'source' cluster
    :param cluster_connNodesDict: Node Objects contained in 'dest' clusters, where the 'dest' cluster is uniquely identifiable by layer name and cluster label
    :param cluster_connClustDict: Layer name, cluster label and weight for each 'dest' cluster
    '''

    def __init__(self,cluster_label,cluster_layer,cluster_runId,cluster_containedNodesDict,cluster_connNodesDict,cluster_connClustDict):
        
        self.cluster_label = cluster_label
        self.cluster_layer = cluster_layer
        self.cluster_runId = cluster_runId
        self.cluster_containedNodesDict = cluster_containedNodesDict #Keys are frozensets(touples) == frozenset(uniqueID, cluster and layer) Value is the Node UniqueId
        self.cluster_connNodesDict = cluster_connNodesDict #Keys are frozensets(touples)  (uniqueID:str,node_cluster:str,node_layer:str) Values are NodeC Objects
        self.cluster_connClustDict = cluster_connClustDict #dictionary: (dict[(cluster_label,clusterlayer)] -> nrOfConnections/weightOfTheConnection )
