#!/usr/bin/env python

# plotVm ver 0.5 - a command line utility to plot a wildcarded argument
# list of files containing membrane potential data, and plots them in
# different colors on the same axes

import sys, os
import matplotlib.pyplot as plt
import numpy as np

def plot_file(file,format):
    print 'Plotting %s' % file
    x = []; y = []
    fp = open(file, 'r')
    for line in fp.readlines():
        data = line.split(" ")
        x.append(data[0]); y.append(data[1])
    # print "Data length is ", len(x), "Format is ", format
    axes.plot(x, y, format)
    # use this instead, to let pyplot plot pick new colors
    # axes.plot(x, y)

def do_plot_files(filenames):
    if len(filenames) > 0:
        formats = ['k', 'r', 'b', 'g', 'm', 'c']
        plotnum = 0
        for file in filenames:
            # print file
            format = formats[plotnum % len(formats)]
            # print format, plotnum
            try:
                if os.path.exists(file):
                    plot_file(file,format)
                    plotnum = plotnum + 1
                else:
                    print '*** Error: Incorrect file name or path specified ***'
            # I need to do better error handling!
            except:
                print 'An error ocurred'
                sys.exit()
    else:
        print "No files were specified for plotting!"
        print "Please give one or more filenames as arguments, e.g.\n"
        print "    plotVm Vm.out pyr4*.out\n"
        sys.exit()   
if __name__ == "__main__":
    # Get the arguments (possibly wildcarded) into a list of filenames
    filenames = sys.argv[1:]
    print filenames
    # create the plot
    fig = plt.figure()
    axes = fig.add_subplot(111)
    do_plot_files(filenames)
    axes.set_title('Membrane Potential')
    axes.set_xlabel('seconds')
    axes.set_ylabel('Volts')
    axes.axis(ymin=-0.1, ymax=0.05)
    # to use autoscaling
    # axes.axis('auto')
    # to add a legend
    # axes.legend(filenames)
    plt.draw()
    plt.show()