def create_pacbpcollectiongraph_from_crossdata(
    crossdata,
    increment_to_graph=None):
    """
    Create (incremental) PacbpCollectionGraph from crossdata dict structure

    @type  crossdata: dict
    @param crossdata: crossdata <dict data structure>

    @type  increment_to_graph: None or PacbpCollectionGraph
    @param increment_to_graph: when applied, increment crossdata to applied PCG

    @rtype  g: PacbpCollectionGraph
    @return g: PacbpCollectionGraph
    """
    if increment_to_graph:
        # add new nodes to existing graph
        g = increment_to_graph
    else:
        # create a new blank graph
        from graphAbgp import PacbpCollectionGraph
        g = PacbpCollectionGraph()

    for (orgA,orgB) in crossdata.keys():
        keys = crossdata[(orgA,orgB)]['accepted_pacbs'].keys()
        # sort keys in order to start with highest bitscore
        keys.sort()
        keys.reverse()
        for key in keys:
            (bitscore,lenght,pointerA,pointerB) = key
            nodeA = (orgA,pointerA)
            nodeB = (orgB,pointerB)
            # check if (org,ORF) node exist already
            if nodeA not in g.get_nodes(): g.add_node(nodeA)
            if nodeB not in g.get_nodes(): g.add_node(nodeB)
            if g.has_edge(nodeA,nodeB):
                wt = g.get_edge_weight(nodeA,nodeB)
                if bitscore > wt:
                    g.set_edge_weight(nodeA,nodeB,bitscore)
                else:
                    pass
            else:
                # and create a new edge
                g.add_edge(nodeA,nodeB,wt=bitscore)
    # ready!
    return g