##################################
#                                #
# Last modified 2025/07/07       # 
#                                #
# Georgi Marinov                 #
#                                # 
##################################

import sys
import os
import string

def run():

    if len(sys.argv) < 5:
        print 'usage: python %s input labelfields valuefields multiplyBy outputfilename [-divide]' % sys.argv[0]
        print '       valuefields format: either comma separated, or start:end (including start and end, 0-based)'
        sys.exit(1)
    
    doDivide = False
    if '-divide' in sys.argv:
        doDivide = True

    input = sys.argv[1]
    MFactor = float(sys.argv[4])
    outfilename = sys.argv[5]
    outfile = open(outfilename, 'w')

    fields = sys.argv[2].split(',')
    labelFields=[]
    for f in fields:
        labelFields.append(int(f))
    labelFields.sort()

    print labelFields

    valueFields=[]
    if ':' in sys.argv[3]:
        fields = sys.argv[3].split(':')
        start = int(fields[0])
        end = int(fields[1])
        for f in range(start,end+1):
            valueFields.append(f)
    else:
        fields = sys.argv[3].split(',')
        for f in fields:
            valueFields.append(int(f))
    valueFields.sort()

    print valueFields

    if input.endswith('.bz2'):
        cmd = 'bzip2 -cd ' + input
    elif input.endswith('.gz'):
        cmd = 'zcat ' + input
    else:
        cmd = 'cat ' + input
    p = os.popen(cmd, "r")
    line = 'line'
    while line != '':
        line = p.readline()
        if line.startswith('#'):
            outfile.write(line)
            continue
        fields = line.replace('\x00','').strip().split('\t')
#        if line.startswith('#Total'):
#            continue
        if line.startswith('#') or line.startswith('tracking_id'):
            outline = '#'
            for ID in labelFields:
                outline = outline + fields[ID] + '\t'
            for ID in valueFields:
                outline = outline + fields[ID] + '\t'
            outfile.write(outline.strip()+'\n')
            continue
        label = []
        outline = ''
        try:
            for ID in labelFields:
                 outline = outline + fields[ID] + '\t'
        except:
            print 'skipping', fields
            continue
        for ID in valueFields:
            if doDivide:
                outline = outline + str(float(fields[ID])/MFactor) + '\t'
            else:
                outline = outline + str(float(fields[ID])*MFactor) + '\t'
        outfile.write(outline.strip()+'\n') 
            
    outfile.close()
   
run()
