# run_param_sweep_staggered_input.py --- 
# Author: Subhasis Ray
# Created: Mon Sep 10 11:50:27 2018 (-0400)
# Last-Updated: Mon Sep 10 16:28:32 2018 (-0400)
#           By: Subhasis Ray
# Version: $Id$

# Code:
"""Run a parameter sweep for RM and RA values on GGN. RA - specific axial resistance (ohm-cm), RM - specific membrane resistance (kohm-cm2)"""
import os
import argparse
import numpy as np
import subprocess
from datetime import datetime


def make_parser():
    parser = argparse.ArgumentParser()
    parser.add_argument('-f', dest='filename', help='celltemplate filename')
    parser.add_argument('-v', '--vclamp', default=-40.0, help='clamp voltage')
    parser.add_argument('--RAmin', dest='RAmin', type=float, help='minimum value of RA')
    parser.add_argument('--RAmax', dest='RAmax', type=float, help='maximum value of RA')
    parser.add_argument('--RAdivs', dest='RAdivs', type=float, help='divisions in RA')
    parser.add_argument('--RMmin', dest='RMmin', type=float, help='minimum value of RM')
    parser.add_argument('--RMmax', dest='RMmax', type=float, help='maximum value of RM')
    parser.add_argument('--RMdivs', dest='RMdivs', type=float, help='divisions in RM')
    parser.add_argument('--simtime', type=float, default=300.0)
    # parser.add_argument('--rec', type=int, default=0)
    parser.add_argument('--maxrate', type=float)
    parser.add_argument('-n', dest='syncount', type=int, default=10)
    # parser.add_argument('-s', type=float, default=50)
    parser.add_argument('-i', dest='input')
    parser.add_argument('--outdir', default='data')
    return parser

if __name__ == '__main__':
    args = make_parser().parse_args()
    cellname = None
    ts = datetime.now()
    datadir = os.path.join(args.outdir, ts.strftime('%Y_%m_%d__%H_%M_%S'))
    with open(args.filename, 'r') as cellfile:
        for line in cellfile.readlines():
            if 'begintemplate' in line:
                cellname = line.partition('begintemplate')[-1].split()[0]
                break
    if cellname is None:
        raise Exception('Could not find cellname in template file')
    RA = np.linspace(args.RAmin, args.RAmax, args.RAdivs)
    RM = np.linspace(args.RMmin, args.RMmax, args.RMdivs)
    for jj, _rm in enumerate(RM):
        for ii, _ra in enumerate(RA):
            outfilename = 'vm_vclamp_RA{}_RM{}.h5'.format(ii, jj)
            subprocess.Popen(['python', 'ggn_voltage_attenuation_vclamp.py',
                              '-f', args.filename,
                              '-c', cellname,
                              '-v', args.vclamp,
                              '-s', 'dend_8[1]',
                              '--RA', str(_ra),
                              '--RM', str(_rm*1e3),
                              '--datadir', datadir,
                              '--deflection',
                              '--simtime', str(args.simtime),
                              '--outfile', outfilename])
                             
    


# 
# run_param_sweep_staggered_input.py ends here