##################################
#                                #
# Last modified 2024/05/24       # 
#                                #
# Georgi Marinov                 #
#                                # 
##################################

import sys
import string
import math
import numpy as np
import matplotlib, copy
matplotlib.use('Agg')
import matplotlib.pyplot as plt
from pylab import *
from matplotlib.patches import Circle, RegularPolygon
from matplotlib.collections import PatchCollection

def run():

    if len(sys.argv) < 8:
        print 'usage: python %s datafile1,datafile2,...,datafileN] label1,label2,...,labelN color1,color2,...,colorN labelX fieldX labelY fiedlY outfile [-titlesize size] [-xlimits left right] [-resize factor] [-aspectRatio R]' % sys.argv[0]
        print '       enter lables from the command line with "_" instead of sapces, the code will replace them with spaces'
        print '       the script will ignore header lines in the input file starting with #'
        print '       default color is red'
        print '       default size is 10x10, you can resize by using the -factor option'
        sys.exit(1)
    
    inputs = sys.argv[1].split(',')
    titles1 = sys.argv[2].split(',')
    titles = []
    for title in titles1:
        titles.append(title.replace('_',' '))
    colors = sys.argv[3].split(',')
    label1 = sys.argv[4].replace('_',' ')
    fiedlX = int(sys.argv[5])
    label2 = sys.argv[6].replace('_',' ')
    fiedlY = int(sys.argv[7])
    outfilename = sys.argv[8]

    doXLimits=False
    if '-xlimits' in sys.argv:
        doXLimits=True
        XlimitLeft=float(sys.argv[sys.argv.index('-xlimits')+1])
        XlimitRight=float(sys.argv[sys.argv.index('-xlimits')+2])

#    color='r'
#    if '-color' in sys.argv:
#        color=sys.argv[sys.argv.index('-color')+1]

    AR=1
    if '-aspectRatio' in sys.argv:
        AR = float(sys.argv[sys.argv.index('-aspectRatio')+1])

    resize=1
    if '-resize' in sys.argv:
        resize=float(sys.argv[sys.argv.index('-resize')+1])

    titlesize=50
    if '-titlesize' in sys.argv:
        titlesize=float(sys.argv[sys.argv.index('-titlesize')+1])

#    fig = plt.figure()
#    ax = fig.add_subplot(1, 1, 1)
 
    fig, ax = plt.subplots()

    if doXLimits:
        lowerlimitX = XlimitLeft
        upperlimitX = XlimitRight
#    else:
#        lowerlimitX=min(X)
#        upperlimitX=max(X)
#    lowerlimitY=min(Y)
#    upperlimitY=max(Y)

    L = 0
    for input in inputs:
        X=[]
        Y=[]
        lineslist=open(input)
        for line in lineslist:
            if line.startswith('#'):
                continue
            fields=line.strip().split('\t')
            try:
                if doXLimits and (float(fields[fiedlX]) < XlimitLeft or float(fields[fiedlX]) > XlimitRight):
                    continue
                X.append(float(fields[fiedlX]))
                Y.append(float(fields[fiedlY]))
            except:
                print 'skipping line', fields
        print L, titles[L], colors[L]
        ax.plot(X, Y, label=titles[L], color=colors[L])
        L+=1

    ax.legend()
    ax.set_xlabel(label1)
    ax.set_ylabel(label2)

#    ax.plot(X,Y,color+'-', linewidth=2*resize)
#    ax.set_title(title,size=titlesize*resize,weight='bold')
#    ax.set_xlabel(label1,size=30*resize,weight='bold')
#    ax.set_ylabel(label2,size=30*resize,weight='bold')
#    ax.set_xlim(lowerlimitX,upperlimitX)
#    ax.set_ylim(lowerlimitY,upperlimitY)
#    xticks=ax.get_xticks()
#    yticks=ax.get_yticks()
#    xticklabels=[]
#    yticklabels=[]
#    for i in xticks:
#        xticklabels.append(str(int(i)))
#    for i in yticks:
#        yticklabels.append(str(int(i)))
#    ax.set_xticklabels(xticklabels,size=20*resize,weight='bold')
#    ax.set_yticklabels(yticklabels,size=20*resize,weight='bold')

    savefig(outfilename)
   
run()
