#!/usr/bin/env python
import sys, urllib

def help():
    print '\n****************** search_s2ndb *******************\n\n'+\
          'Searches over predicted interactions from Struct2Net\n' +\
          'that have been pre-computed in human, fly, and yeast.\n' +\
          'Output is a list of binary interactions and a confidence\n' +\
          'score evaluating each interaction. Details on the\n' +\
          'Struct2Net algorithm can be found at:\n\tstruct2net.csail.mit.edu\n\n' +\
          '*****************************************************\n\n' +\
          'usage: $ python search_s2ndb id species\n\n' +\
          '\tspecies options:\n' +\
          '\t    1 - human\n' +\
          '\t    2 - fly\n' +\
          '\t    3 - yeast\n\n' +\
          'example: $ python search_s2ndb Q0050 3\n' +\
          'output:\n\tFound 3 interactions:\n' +\
          '\tQ0050	Q0250	0.279830765853218\n' +\
          '\tQ0050	Q0275	0.305670930195862\n' +\
          '\tQ0050	YOR194C	0.529289854133615\n'

def choose_db( sp ):
    if sp=='1': db='http://struct2net.csail.mit.edu/downloads/ppis/s2n-hs-1.0.tab'
    elif sp=='2': db='http://struct2net.csail.mit.edu/downloads/ppis/s2n-dmela-1.0.tab'
    elif sp=='3': db='http://struct2net.csail.mit.edu/downloads/ppis/s2n-scere-1.0.tab'
    else:
        sys.exit('Please provide a valid species option.')
    return db

def find_interactions( id, url_db ):
    try:
        lines=urllib.urlopen( url_db ).readlines()
    except:
        sys.exit('Please check connection. If connection is ok, server may be down or busy.')
    interactions=[]
    for interaction in lines[1:]:
        i1, i2, score = interaction.split()
        if id.lower() == i1.lower() or id.upper() == i1 .upper():
            interactions.append( '%s\t%s\t%s' % (i1,i2,score) )
        elif id.lower() == i2.lower() or id.upper() == i2.upper():
            interactions.append( '%s\t%s\t%s' % (i2,i1,score) )
    if len(interactions)==0: print 'Found 0 interactions:\n'
    else: print 'Found %i interactions:\n%s' % (len(interactions),'\n'.join(interactions) )

if len(sys.argv) < 3: sys.exit( help() )

id, sp = sys.argv[1:]
url_db = choose_db( sp )
find_interactions( id, url_db )
