##################################
#                                #
# Last modified 02/23/2010       # 
#                                #
# Georgi Marinov                 #
#                                # 
##################################

import sys
import string
import math
from sets import Set

def run():

    if len(sys.argv) < 4:
        print 'usage: python %s  datafilename LabelIDs IDs outfilename [-min]' % sys.argv[0]
        print 'format of IDs: either comma separated or start-end (including end)'
        sys.exit(1)

    doMin=False
    if '-min' in sys.argv:
        doMin=True
        print 'will output the lowest number'

    datafilename = sys.argv[1]
    IDfields=[]
    if '-' in sys.argv[3]:
        fields1=int(sys.argv[3].split('-')[0])
        fields2=int(sys.argv[3].split('-')[1])
        for ID in range(fields1,fields2+1):
            IDfields.append(ID)
    else:
        fields = sys.argv[3].split(',')
        for ID in fields:
            IDfields.append(int(ID))
    LabelIDfields=[]
    if '-' in sys.argv[2]:
        fields1=int(sys.argv[2].split('-')[0])
        fields2=int(sys.argv[2].split('-')[1])
        for ID in range(fields1,fields2+1):
            LabelIDfields.append(ID)
    else:
        fields = sys.argv[2].split(',')
        for ID in fields:
            LabelIDfields.append(int(ID))
    outfilename = sys.argv[4]

    outfile = open(outfilename, 'w')

    print LabelIDfields
    print IDfields

    lineslist  = open(datafilename)
    i=0
    for line in lineslist:
        i+=1
        if i % 100000 == 0:
            print i
        if line[0]=='#':
            continue
        fields = line.strip().split('\t')
        outline=''
        for ID in LabelIDfields:
            outline=outline + fields[ID]+ '\t'
        Scores=[]
        for ID in IDfields:
            Scores.append(float(fields[ID]))
        if doMin:
            outline = outline + str(min(Scores)) 
        else:
            outline = outline + str(max(Scores)) 
        outfile.write(outline +'\n')

    outfile.close()
        
run()

