def featureset_net_enr(meth, feature_set_id=None, p_value=None, ref_wsid="KBasePublicNetwork", ref_network=None, out_id=None): """This method annotate GO terms and execute GO enrichment test :param feature_set_id: FeatureSet workspace object id :type feature_set_id: kbtypes.KBaseSearch.FeatureSet :param p_value: p-value cutoff :type p_value: kbtypes.Unicode :param ref_wsid: Reference Network workspace id (optional, default to current workspace) :type ref_wsid: kbtypes.Unicode :param ref_network: Reference Network object name :type ref_network:kbtypes.KBaseNetworks.Network :param out_id: Output FeatureSet object identifier :type out_id: kbtypes.KBaseSearch.FeatureSet :return: New workspace object :rtype: kbtypes.Unicode :output_widget: GeneTableWidget """ meth.stages = 3 meth.advance("Prepare Enrichment Test") oc = Ontology(url=URLS.ontology) ws = Workspace2(token=meth.token, wsid=meth.workspace_id) fs = ws.get(feature_set_id) if not ref_wsid: ref_wsid = meth.workspace_id ws2 = Workspace2(token=meth.token, wsid=ref_wsid) net = ws2.get(ref_network) # checking user input if 'edges' not in net or 'nodes' not in net or 'elements' not in fs: return "{}" qid2cds = ids2cds(fs['elements'].keys()) # parse networks object nc = Node(net['nodes'], net['edges']) meth.advance("Execute Enrichment Test") qcdss = set(qid2cds.values()) enr_dict = oc.association_test(list(qcdss), ref_wsid, ref_network, '', 'hypergeometric', 'none', p_value) enr_list = sorted([(value, key) for (key, value) in enr_dict.items()]) nid2name = {} for ne in net['nodes']: nid2name[ne['entity_id']] = ne['name'] pwy_enr_smry = "" header = ["Pathway ID", "Name", "p-value", "FeatureSet ID (# genes)"] fields = [] objects = [] for i in range(len(enr_list)): pwy_en = enr_list[i] if float(pwy_en[0]) > float(p_value): continue cgenes = set(nc.get_gene_list(pwy_en[1])) cgenes = list(cgenes.intersection(qcdss)) cfs = genelist2fs(cgenes) fields.append([ pwy_en[1], nid2name[pwy_en[1]], "{:12.10f}".format(float(pwy_en[0])), out_id + "_to_" + pwy_en[1] + "({})".format(len(cgenes)) ]) objects.append({ 'type': 'KBaseSearch.FeatureSet', 'data': cfs, 'name': out_id + "_to_" + pwy_en[1], 'meta': { 'original': feature_set_id, 'ref_wsid': ref_wsid, 'ref_net': ref_network, 'pwy_id': pwy_en[1] } }) if i < 3: pwy_enr_smry += pwy_en[1] + "(" + "{:6.4f}".format(float( pwy_en[0])) + ")" + nid2name[pwy_en[1]] + "\n" data = {'table': [header] + fields} meth.advance("Saving output to Workspace") objects.append({ 'type': 'KBaseSearch.FeatureSet', 'data': fs, 'name': out_id, 'meta': { 'original': feature_set_id, 'ref_wsid': ref_wsid, 'ref_net': ref_network, 'pwy_enr_summary': pwy_enr_smry } }) ws.save_objects({'workspace': meth.workspace_id, 'objects': objects}) meth.advance("Returning object") return json.dumps(data)
def featureset_net_enr(meth, feature_set_id=None, p_value=None, ref_wsid="KBasePublicNetwork", ref_network=None, out_id=None): """This method annotate GO terms and execute GO enrichment test :param feature_set_id: FeatureSet workspace object id :type feature_set_id: kbtypes.KBaseSearch.FeatureSet :param p_value: p-value cutoff :type p_value: kbtypes.Unicode :param ref_wsid: Reference Network workspace id (optional, default to current workspace) :type ref_wsid: kbtypes.Unicode :param ref_network: Reference Network object name :type ref_network:kbtypes.KBaseNetworks.Network :param out_id: Output FeatureSet object identifier :type out_id: kbtypes.KBaseSearch.FeatureSet :return: New workspace object :rtype: kbtypes.Unicode :output_widget: GeneTableWidget """ meth.stages = 3 meth.advance("Prepare Enrichment Test") oc = Ontology(url=URLS.ontology) ws = Workspace2(token=meth.token, wsid=meth.workspace_id) fs = ws.get(feature_set_id) if not ref_wsid : ref_wsid = meth.workspace_id ws2 = Workspace2(token=meth.token, wsid=ref_wsid) net = ws2.get(ref_network) # checking user input if 'edges' not in net or 'nodes' not in net or 'elements' not in fs: return "{}" qid2cds = ids2cds(fs['elements'].keys()) # parse networks object nc = Node(net['nodes'],net['edges']); meth.advance("Execute Enrichment Test") qcdss = set(qid2cds.values()) enr_dict = oc.association_test(list(qcdss), ref_wsid, ref_network, '', 'hypergeometric', 'none', p_value) enr_list = sorted([(value,key) for (key,value) in enr_dict.items()]) nid2name = {} for ne in net['nodes']: nid2name[ne['entity_id']] = ne['name'] pwy_enr_smry = "" header = ["Pathway ID", "Name", "p-value", "FeatureSet ID (# genes)"] fields = [] objects = [] for i in range(len(enr_list)): pwy_en = enr_list[i] if float(pwy_en[0]) > float(p_value) : continue cgenes = set(nc.get_gene_list(pwy_en[1])) cgenes = list(cgenes.intersection(qcdss)) cfs = genelist2fs(cgenes) fields.append([pwy_en[1], nid2name[pwy_en[1]], "{:12.10f}".format(float(pwy_en[0])), out_id + "_to_" + pwy_en[1] + "({})".format(len(cgenes))]) objects.append({'type' : 'KBaseSearch.FeatureSet', 'data' : cfs, 'name' : out_id + "_to_" + pwy_en[1], 'meta' : {'original' : feature_set_id, 'ref_wsid' : ref_wsid, 'ref_net' : ref_network, 'pwy_id' :pwy_en[1]}}) if i < 3 : pwy_enr_smry += pwy_en[1]+"(" + "{:6.4f}".format(float(pwy_en[0])) + ")" + nid2name[pwy_en[1]] + "\n" data = {'table': [header] + fields} meth.advance("Saving output to Workspace") objects.append({'type' : 'KBaseSearch.FeatureSet', 'data' : fs, 'name' : out_id, 'meta' : {'original' : feature_set_id, 'ref_wsid' : ref_wsid, 'ref_net' : ref_network, 'pwy_enr_summary' :pwy_enr_smry}}) ws.save_objects({'workspace' : meth.workspace_id, 'objects' :objects}) meth.advance("Returning object") return json.dumps(data)