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
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
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
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