##################################
#                                #
# Last modified 2017/11/13       # 
#                                #
# 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) < 7:
        print 'usage: python %s datafile title labelX fieldX labelY fiedlY outfile [-titlesize size] [-xlimits left right] [-color c] [-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)
    
    input = sys.argv[1]
    title = sys.argv[2].replace('_',' ')
    label1 = sys.argv[3].replace('_',' ')
    fiedlX = int(sys.argv[4])
    label2 = sys.argv[5].replace('_',' ')
    fiedlY = int(sys.argv[6])
    outfilename = sys.argv[7]

    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])

    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

    rect = 0.10,0.10,0.8,0.8
    fig = figure(figsize=(AR*20*resize, 20*resize))
    ax = fig.add_subplot(1,1,1,aspect='equal')
    ax = fig.add_axes(rect)

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

    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()
