Пример #1
0
    def add_codingblocks(self,
                         cbglist,
                         log_debug=False,
                         max_cbg_gtg_topo_dif=None,
                         max_cbg_gtg_abs_dif=None,
                         min_cbg_gtg_id_ratio=None,
                         omit_conditional_addition=False,
                         min_tcode_omsr=None):
        """
        (Try to) add multiple CodingBlockGraphs to the genestructure

        @type  cbglist: list
        @param cbglist: list of CodingBlockGraph objects to be added to the genestructure

        @type  max_cbg_gtg_topo_dif: float (or None)
        @param max_cbg_gtg_topo_dif:

        @type  max_cbg_gtg_abs_dif: float (or None)
        @param max_cbg_gtg_abs_dif:

        @type  max_cbg_gtg_id_ratio: float (or None)
        @param max_cbg_gtg_id_ratio:

        @type  min_tcode_omsr: float (or None)
        @param min_tcode_omsr:

        @type  omit_conditional_addition: Boolean
        @param omit_conditional_addition: omit all CBG quality checks; just
                verify if the CBG is placeable based on the OMSR coordinates

        @rtype:  Boolean
        @return: True or False, weather or not at least 1 CodingBlockGraph was added
        """
        # add cbg's after ordering on total weight
        statusses = []
        # update edge weights to minimal spanning range
        for sg in cbglist:
            sg.update_edge_weights_by_minimal_spanning_range()

        for cbg in ordering.order_cbgraphlist(cbglist):
            status = self.add_codingblock(
                cbg,
                log_debug=log_debug,
                max_cbg_gtg_topo_dif=max_cbg_gtg_topo_dif,
                max_cbg_gtg_abs_dif=max_cbg_gtg_abs_dif,
                min_cbg_gtg_id_ratio=min_cbg_gtg_id_ratio,
                min_tcode_omsr=min_tcode_omsr,
                omit_conditional_addition=omit_conditional_addition,
            )
            statusses.append(status)
        if True in statusses:
            return True
        else:
            return False
Пример #2
0
    def add_codingblocks(self,cbglist,log_debug=False,
        max_cbg_gtg_topo_dif=None,
        max_cbg_gtg_abs_dif=None,
        min_cbg_gtg_id_ratio=None,
        omit_conditional_addition=False,
        min_tcode_omsr=None ):
        """
        (Try to) add multiple CodingBlockGraphs to the genestructure

        @type  cbglist: list
        @param cbglist: list of CodingBlockGraph objects to be added to the genestructure

        @type  max_cbg_gtg_topo_dif: float (or None)
        @param max_cbg_gtg_topo_dif:

        @type  max_cbg_gtg_abs_dif: float (or None)
        @param max_cbg_gtg_abs_dif:

        @type  max_cbg_gtg_id_ratio: float (or None)
        @param max_cbg_gtg_id_ratio:

        @type  min_tcode_omsr: float (or None)
        @param min_tcode_omsr:

        @type  omit_conditional_addition: Boolean
        @param omit_conditional_addition: omit all CBG quality checks; just
                verify if the CBG is placeable based on the OMSR coordinates

        @rtype:  Boolean
        @return: True or False, weather or not at least 1 CodingBlockGraph was added
        """
        # add cbg's after ordering on total weight
        statusses = []
        # update edge weights to minimal spanning range
        for sg in cbglist:
            sg.update_edge_weights_by_minimal_spanning_range()
        
        for cbg in ordering.order_cbgraphlist(cbglist):
            status = self.add_codingblock(cbg,log_debug=log_debug,
                    max_cbg_gtg_topo_dif=max_cbg_gtg_topo_dif,
                    max_cbg_gtg_abs_dif=max_cbg_gtg_abs_dif,
                    min_cbg_gtg_id_ratio=min_cbg_gtg_id_ratio,
                    min_tcode_omsr=min_tcode_omsr,
                    omit_conditional_addition=omit_conditional_addition,
                    )
            statusses.append( status ) 
        if True in statusses:
            return True
        else:
            return False
Пример #3
0
def findmostlikelyCBG2GSGinsert(partialGSG,
                                cbglist,
                                order_cbgs_by_total_weight=True,
                                reorder_cbgs_on_node_occurrence=True,
                                optimizetinyexoninterface=True,
                                verbose=False):
    """
    """
    # if no CBG in list -> done!
    if not cbglist: return partialGSG

    # make interfaces in the partialGSG
    created = partialGSG.create_cbginterfaces()
    gsgsize = len(partialGSG)

    if order_cbgs_by_total_weight:
        # order graphs by total weight
        cbglist = ordering.order_cbgraphlist(cbglist)

    if reorder_cbgs_on_node_occurrence:
        # get prev and next cbg from partialGSG
        if len(partialGSG) >= 2:
            prev = partialGSG.codingblockgraphs[0]
            next = partialGSG.codingblockgraphs[-1]
        elif len(partialGSG) == 1:
            prev, next = None, partialGSG.codingblockgraphs[0]
        else:
            prev, next = None, None
        # re-order on node occurrence.
        cbglist = ordering.reorder_cbgs_on_node_occurrence(cbglist,
                                                           prev=prev,
                                                           next=next)

    ####################################################################
    if verbose and partialGSG and cbglist:
        print "elegiable CBGs for addition in partialGSG"
        for cbg in cbglist:
            print cbg
    ####################################################################

    # now try to insert CBGs in the partialGSG
    # we try several insertions, starting with the most stringest one

    ############################################################
    # (1)   only do both options for the top listed CBG     ####
    #       perfect cbgIF(s), topologically sound CBGs      ####
    #       perfect cbgIF(s), CBG2GTG topology not tested   ####
    ############################################################
    is_added = _place_cbg_in_partialgsg(
        [cbglist[0]],
        partialGSG,
        omit_conditional_addition=False,
        optimizetinyexoninterface=optimizetinyexoninterface,
        verbose=verbose)
    is_added = _place_cbg_in_partialgsg(
        [cbglist[0]],
        partialGSG,
        omit_conditional_addition=True,
        optimizetinyexoninterface=optimizetinyexoninterface,
        verbose=verbose)

    ############################################################
    # (2)   perfect cbgIF(s), topologically sound CBGs      ####
    ############################################################
    is_added = _place_cbg_in_partialgsg(
        cbglist,
        partialGSG,
        omit_conditional_addition=False,
        optimizetinyexoninterface=optimizetinyexoninterface,
        verbose=verbose)

    ############################################################
    # (3)   perfect cbgIF(s), CBG2GTG topology not tested   ####
    ############################################################
    is_added = _place_cbg_in_partialgsg(
        cbglist,
        partialGSG,
        omit_conditional_addition=True,
        optimizetinyexoninterface=optimizetinyexoninterface,
        verbose=verbose)

    # when partialGSG is not enlarged, its cbgIFs are likely
    # distorted in the proces of trying novel CBG inserts.
    # Recreate the cbgIFs here
    if len(partialGSG) == gsgsize:
        if gsgsize >= 2:
            partialGSG.clear_central_cbginterfaces()
            partialGSG.create_cbginterfaces()
            if gsgsize == 2:
                # most obvious case of 2 CBGs in the GSG
                partialGSG.codingblockgraphs[0].IS_3P_SPLITTED = False
                partialGSG.codingblockgraphs[1].IS_5P_SPLITTED = False
                if not partialGSG.codingblockgraphs[0].IS_5P_SPLITTED:
                    partialGSG.codingblockgraphs[0].IS_SPLITTED = False
                if not partialGSG.codingblockgraphs[1].IS_3P_SPLITTED:
                    partialGSG.codingblockgraphs[1].IS_SPLITTED = False
        else:
            # a partialGSG of only a single CBG (first or last CBG)
            partialGSG.codingblockgraphs[0]._CBGinterface5p = None
            partialGSG.codingblockgraphs[0]._CBGinterface3p = None

    # Done with this function. Return the (incremented) partialGSG
    return partialGSG
Пример #4
0
def findmostlikelyCBG2GSGinsert(partialGSG,cbglist,
    order_cbgs_by_total_weight=True,
    reorder_cbgs_on_node_occurrence=True,
    optimizetinyexoninterface=True,
    verbose=False):
    """
    """
    # if no CBG in list -> done!
    if not cbglist: return partialGSG

    # make interfaces in the partialGSG
    created = partialGSG.create_cbginterfaces()
    gsgsize = len(partialGSG)

    if order_cbgs_by_total_weight:
        # order graphs by total weight
        cbglist = ordering.order_cbgraphlist(cbglist)

    if reorder_cbgs_on_node_occurrence:
        # get prev and next cbg from partialGSG
        if len(partialGSG) >= 2:
            prev = partialGSG.codingblockgraphs[0]
            next = partialGSG.codingblockgraphs[-1]
        elif len(partialGSG) == 1:
            prev, next = None, partialGSG.codingblockgraphs[0]
        else:
            prev, next = None, None
        # re-order on node occurrence.
        cbglist  = ordering.reorder_cbgs_on_node_occurrence(cbglist,prev=prev,next=next)

    ####################################################################
    if verbose and partialGSG and cbglist:
        print "elegiable CBGs for addition in partialGSG"
        for cbg in cbglist: print cbg
    ####################################################################

    # now try to insert CBGs in the partialGSG
    # we try several insertions, starting with the most stringest one

    ############################################################
    # (1)   only do both options for the top listed CBG     ####
    #       perfect cbgIF(s), topologically sound CBGs      ####
    #       perfect cbgIF(s), CBG2GTG topology not tested   ####
    ############################################################
    is_added = _place_cbg_in_partialgsg([ cbglist[0] ],partialGSG,
            omit_conditional_addition=False,
            optimizetinyexoninterface=optimizetinyexoninterface,
            verbose=verbose )
    is_added = _place_cbg_in_partialgsg([ cbglist[0] ],partialGSG,
            omit_conditional_addition=True,
            optimizetinyexoninterface=optimizetinyexoninterface,
            verbose=verbose )

    ############################################################
    # (2)   perfect cbgIF(s), topologically sound CBGs      ####
    ############################################################
    is_added = _place_cbg_in_partialgsg(cbglist,partialGSG,
            omit_conditional_addition=False,
            optimizetinyexoninterface=optimizetinyexoninterface,
            verbose=verbose )

    ############################################################
    # (3)   perfect cbgIF(s), CBG2GTG topology not tested   ####
    ############################################################
    is_added = _place_cbg_in_partialgsg(cbglist,partialGSG,
            omit_conditional_addition=True,
            optimizetinyexoninterface=optimizetinyexoninterface,
            verbose=verbose )

    # when partialGSG is not enlarged, its cbgIFs are likely
    # distorted in the proces of trying novel CBG inserts.
    # Recreate the cbgIFs here
    if len(partialGSG) == gsgsize:
        if gsgsize >=2:
            partialGSG.clear_central_cbginterfaces()
            partialGSG.create_cbginterfaces()
            if gsgsize == 2:
                # most obvious case of 2 CBGs in the GSG
                partialGSG.codingblockgraphs[0].IS_3P_SPLITTED = False
                partialGSG.codingblockgraphs[1].IS_5P_SPLITTED = False
                if not partialGSG.codingblockgraphs[0].IS_5P_SPLITTED:
                    partialGSG.codingblockgraphs[0].IS_SPLITTED = False
                if not partialGSG.codingblockgraphs[1].IS_3P_SPLITTED:
                    partialGSG.codingblockgraphs[1].IS_SPLITTED = False
        else:
            # a partialGSG of only a single CBG (first or last CBG)
            partialGSG.codingblockgraphs[0]._CBGinterface5p = None
            partialGSG.codingblockgraphs[0]._CBGinterface3p = None

    # Done with this function. Return the (incremented) partialGSG
    return partialGSG