import shutil
import csv
import argparse
from template import fill_template
from handle_simulation_parameters import ParameterSetList

parser = argparse.ArgumentParser(description='Builds the directory structure and the cosy run directory according to the provided parameter file. Assumes the the initial conditions have already been generated.')
parser.add_argument('filepath', type=str, help='The csv file with the specifications for the simulations desired to be run.')
parser.add_argument('-w','--working-directory', dest="working_dir", type=str, help='The path where the output directories should originate from.',default="/mnt/home/zerbe/working_dir")
parser.add_argument('-r','--run_template', dest="run_template", type=str, help='The template with the qsub script.',default="/mnt/home/zerbe/src/tem_simulations/2-Cosy/run_120ps.template")
parser.add_argument('-s','--setup_template', dest="setup_template", type=str, help='The template of the setup parameters.',default="/mnt/home/zerbe/src/tem_simulations/2-Cosy/PE-setup_120ps.template")
parser.add_argument('-f','--positive_hole_files_dir', dest="pos_dir", type=str, help='The directory where the files are stored describing the positive hole geometry.',default="/mnt/home/zerbe/src/tem_simulations/2-Cosy/Files")
parser.add_argument('-b','--bin_file', dest="bin_file", type=str, help='The path to the cosy binary.',default="/mnt/home/zerbe/src/tem_simulations/2-Cosy/cosy.bin")
args = parser.parse_args()

parameter_set_list = ParameterSetList()
parameter_set_list.injectParametersFromCsv(args.filepath)
for parameter_set in parameter_set_list.list:
  parameter_set.createMainOutputPath(args.working_dir)
  parameter_set.createStepnamePath("Cosy")
  initial_conditions_file = os.path.join(parameter_set.returnStepnamePath("Generate_initial_conditions"),parameter_set.returnInitialConditionsFilename())
  pulse_file = os.path.join(args.pos_dir,parameter_set.returnPEMainFilename())
  hole_file = os.path.join(args.pos_dir,parameter_set.returnHoleFilename())
  parameter_set.extractTotalParticlesFromIniConditionFile(initial_conditions_file)
  os.symlink(initial_conditions_file, os.path.join(parameter_set.returnStepnamePath("Cosy"),parameter_set.initial_conditions_file))
  os.symlink(pulse_file, os.path.join(parameter_set.returnStepnamePath("Cosy"),parameter_set.pulse_file))
  os.symlink(hole_file, os.path.join(parameter_set.returnStepnamePath("Cosy"),parameter_set.hole_file))
  os.symlink(args.bin_file, os.path.join(parameter_set.returnStepnamePath("Cosy"),"cosy.bin"))
  with open(os.path.join(parameter_set.returnStepnamePath("Cosy"),"PE-setup.txt"),'w') as output:
    template_string = fill_template(args.setup_template,parameter_set)
    output.write(template_string)
import argparse
import subprocess
import select
from template import fill_template
from handle_simulation_parameters import ParameterSetList

parser = argparse.ArgumentParser(description='Builds the directory structure and the initial input directory according to the provided parameter file.')
parser.add_argument('filepath', type=str, help='The csv file with the specifications for the simulations desired to be run.')
parser.add_argument('-w','--working-directory', dest="working_dir", type=str, help='The path where the output directories should originate from.',default="/mnt/home/zerbe/working_dir")
parser.add_argument('-t','--template_file', dest="template_file", type=str, help='The input template for the generating initial conditions script.',default="/mnt/home/zerbe/src/tem_simulations/1-Generate_init_file/input.template")
parser.add_argument('-g','--generate_script', dest="generate_script", type=str, help='The path for generating initial conditions script.',default="/mnt/home/zerbe/src/tem_simulations/1-Generate_init_file/a.out")
parser.add_argument('-p','--probability_script', dest="probability_script", type=str, help='The path for generating the electrons script.',default="/mnt/home/zerbe/src/tem_simulations/1-Generate_init_file/generate_probability.R")
parser.add_argument('-d','--delta_t', dest="delta_t", type=str, help='The duration of the laser pule in fs.  Default is 50 fs.',default=50)
args = parser.parse_args()

parameter_set_list = ParameterSetList()
parameter_set_list.injectParametersFromCsv(args.filepath,lazer_duration=args.delta_t)
for parameter_set in parameter_set_list.list:
  parameter_set.createMainOutputPath(args.working_dir)
  parameter_set.createStepnamePath("Generate_initial_conditions")
  command =[]
  command.append(args.probability_script)
  command.append(str(parameter_set.timesteps))
  command.append(os.path.join(parameter_set.returnStepnamePath("Generate_initial_conditions"),"probability.txt"))
  subprocess.call(command)
  with open(os.path.join(parameter_set.returnStepnamePath("Generate_initial_conditions"),"input.txt"),'w') as output:
    template_string = fill_template(args.template_file,parameter_set)
    output.write(template_string)
  os.chdir(parameter_set.returnStepnamePath("Generate_initial_conditions"))
  command2 = []
  command2.append(args.generate_script)