Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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)