# -*- coding: utf-8 -*-
"""
Created on Mon Feb 25 17:01:25 2013

@author: chris

"""

from __future__ import with_statement
from __future__ import division

import sys
argv = sys.argv

use_mpi = False
if "-nompi" not in argv:
    use_mpi = True

if use_mpi:

    try:
        from mpi4py import MPI
        comm = MPI.COMM_WORLD
        myid = comm.rank
        psize = comm.size

    except ImportError:
        use_mpi = False
        myid = 0

else:
    use_mpi = False
    myid = 0

imgf = ".png"
use_pc = False

import sys
import os

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-o', action='store', dest='opt')
parser.add_argument('--plot', action='store_true')
parser.add_argument('--norun', action='store_true')
parser.add_argument('--noconst', action='store_true')
parser.add_argument('--noqual', action='store_true')
parser.add_argument('--pickle', action='store_true')
parser.add_argument('-nompi', action='store_true')
pars = parser.parse_args()

do_run = 1
if pars.norun:  # do not run again use pickled files!
    print "- Not running, using saved files"
    do_run = 0

do_run_constr = 1
if pars.noconst:  # do not run again use pickled files!
    print "- Not construction"
    do_run_constr = 0

do_plot = 0
if pars.plot:  # do not plot to windows
    if myid == 0: print "- Plotting"
    do_plot = 1

use_h5 = True
if pars.pickle:  # do not plot to windows
    if myid == 0: print "- Use pickle"
    use_h5 = False

opt = pars.opt

import matplotlib
if myid == 0:
    if do_plot == 1:
        matplotlib.use('TkAgg', warn=True)
    else:
        matplotlib.use('Agg', warn=True)
else:
    matplotlib.use('Agg', warn=True)


use_c = False
export = False
export_m = False

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import random as rnd

from matplotlib.font_manager import FontProperties
font0 = FontProperties()

if do_run == 0:
    pass
else:
    from Randomnet import *
    
from Stimhelp import *
from Plotter import *
from units import *

from itertools import izip

try:
    import cPickle as pickle
except:
    import pickle

import gzip
import h5py
import math

import scipy
from scipy import io
    
from scipy.optimize import fmin, leastsq, anneal, brute, fmin_bfgs, fmin_l_bfgs_b, fmin_slsqp, fmin_tnc, basinhopping


def broadcast(vec, root = 0):
    if use_mpi:
        vec = comm.bcast(vec, root=0)
    return vec

dt = 0.1*ms
#dt = 0.025*ms

plot_all = 3
plot_all = 1
runs = 1

data_dir = "./data/"

if opt == "ifun":
    do_vec = np.array([
                       "randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_alpha0.0001_fitlasso_0conv0.4_ihsigma0.1_lentrain10_0wv1.4_ax1_run_",
                      ])

# FIGURE 2
if opt == "fig1":
    do_run_constr = 0
    do_vec = np.array([

                       #"randomnet_ifun_pca_grc_0N1000_0tau1v100_amod0.1_alpha10_0conv0.4_ihsigma0.1_lentrain10_0wendv2.0_pcaplot_first_colgrlight_pos2_",
                       #"randomnet_ifun_pca_grc_0N1000_0tau1v100_amod0.1_alpha10_0conv0.4_ihsigma0.1_lentrain10_0wendv0.6_pcaplot_pos3_",
                       #"randomnet_ifun_pca_grc_0N1000_0tau1v100_amod0.1_alpha10_0conv0.4_ihsigma0.1_lentrain10_0wendv0.6_noinv_pcaplot_pos4_",

                       "randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_alpha0.0001_fitlasso_0conv0.4_ihsigma0.1_lentrain10_0wendv0.01_sigplot_specy1_first_pos2_",
                       "randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_alpha0.0001_fitlasso_0conv0.4_ihsigma0.1_lentrain10_0wendv1.4_colgrlight_sigplot_first_pos3_",
                       "randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_alpha0.0001_fitlasso_0conv0.4_ihsigma0.1_lentrain10_0wendv3.0_sigplot_first_pos4_",
                       #"randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_alpha0.0001_fitlasso_0conv0.4_ihsigma0.1_lentrain10_0wendv1.4_noinv_sigplot_end_pos4_",

                       "randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_alpha0.0001_fitlasso_0conv0.4_ihsigma0.1_lentrain10_0wendv0.01_dotted_colgrlight_first_runplot_pos1_", # _l1r0.5 #
                       "randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_alpha0.0001_fitlasso_0conv0.4_ihsigma0.1_lentrain10_0wendv1.4_runplot_pos1_", # _l1r0.5
                       "randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_alpha0.0001_fitlasso_0conv0.4_ihsigma0.1_lentrain10_0wendv3.0_colgrlight_runplot_end_pos1_", #_l1r0.5

                       #"randomnet_ifun_pca_grc_0N1000_0tau1v50_amod0.1_alpha10_0conv0.4_ihsigma0.1_lentrain10_0wendv2.5_pcaplot_colgrlight_pos3_",
                       #"randomnet_ifun_pca_grc_0N1000_0tau1v50_amod0.1_alpha10_0conv0.4_ihsigma0.1_lentrain10_0wendv1.5_pcaplot_end_pos2_",
                       #"randomnet_ifun_pca_grc_0N1000_0tau1v50_amod0.1_alpha10_0conv0.4_ihsigma0.1_lentrain10_0wendv1.5_noinv_pcaplot_dotted_end_pos3_",
                       #"randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_alpha10_0conv0.4_ihsigma0.1_lentrain10_0wendv2.5_colgrlight_runplot_pos1_",
                       #"randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_alpha10_0conv0.4_ihsigma0.1_lentrain10_0wendv1.5_runplot_end_pos1_",


                      ])
    data_dir = "./publish/closedloop/data/"
    #export_m = "./export"



# FIGURE 3
if opt == "fig2":
    #do_run_constr = 0
    do_vec = np.array([
                       #"randomnet_ifun_cnoise_grc_0N1000_0tau1v10_amod0.1_alpha0.0001_0conv0.4_ihsigma0.1_lentrain10_fitlassopos_vec0w_ax1_first_lyline_colgrlight_continue_usemean_",
                       #"randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_alpha0.0001_0conv0.4_ihsigma0.1_lentrain10_fitlassopos_vec0w_ax2_lyline_colgrlight_continue_usemean_",
                       #"randomnet_ifun_cnoise_grc_0N1000_0tau1v100_amod0.1_alpha0.0001_0conv0.4_ihsigma0.1_lentrain10_fitlassopos_vec0w_ax3_lyline_colgrlight_continue_usemean_",

                       "randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_alpha0.0001_0conv0.4_ihsigma0.1_lentrain10_fitlasso_vec0w_ax2_lyline_continue_usemean_",
                       "randomnet_ifun_cnoise_grc_0N1000_0tau1v10_amod0.1_alpha0.0001_0conv0.4_ihsigma0.1_lentrain10_fitlasso_vec0w_ax1_first_lyline_continue_usemean_",
                       "randomnet_ifun_cnoise_grc_0N1000_0tau1v100_amod0.1_alpha0.0001_0conv0.4_ihsigma0.1_lentrain10_fitlasso_vec0w_ax3_lyline_continue_usemean_",
                      ])
    data_dir = "./publish/closedloop/data/"
    #export_m = "./export"
    runs = 10

# check for best alpha
if opt == "fig2alpha":
    #do_run_constr = 0
    do_vec = np.array([
                       "randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_alpha0.0000001_0conv0.4_ihsigma0.1_lentrain10_fitlasso_vec0w_ax2_relalpha_dotted_lyline_continue_usemean_",
                       "randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_alpha0.000001_0conv0.4_ihsigma0.1_lentrain10_fitlasso_vec0w_ax2_relalpha_dashed_lyline_continue_usemean_",
                       "randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_alpha0.00001_0conv0.4_ihsigma0.1_lentrain10_fitlasso_vec0w_ax2_relalpha_dashdot_lyline_continue_usemean_",
                       "randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_alpha0.0001_0conv0.4_ihsigma0.1_lentrain10_fitlasso_vec0w_ax2_relalpha_lyline_continue_usemean_",
                       "randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_alpha0.001_0conv0.4_ihsigma0.1_lentrain10_fitlasso_vec0w_ax2_relalpha_colgrlight_lyline_continue_usemean_",
                       "randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_alpha0.01_0conv0.4_ihsigma0.1_lentrain10_fitlasso_vec0w_ax2_relalpha_colgrlight_dotted_lyline_continue_usemean_",
                       "randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_alpha0.1_0conv0.4_ihsigma0.1_lentrain10_fitlasso_vec0w_ax2_relalpha_colgrlight_dashed_lyline_continue_usemean_",
                       "randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_alpha1_0conv0.4_ihsigma0.1_lentrain10_fitlasso_vec0w_ax2_relalpha_colgrlight_dashdot_lyline_continue_usemean_", # _relalpha
                      ])
    data_dir = "./publish/closedloop/data/"
    #export_m = "./export"
    runs = 10



# FIGURE 4
if opt == "fig3":
    do_vec = np.array([
                       #"randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_alpha0.0001_fitlasso_0conv0.4_ihsigma0.1_lentrain10_vec0w_ax1_lyline_specy1_colgrlight_first_continue_usemean_",
                       #"randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_alpha0.0001_fitlasso_0conv0.4_ihsigma0.1_lentrain10_noinv_vec0w_ax1_lyline_specy1_first_continue_usemean_",

                       "randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_alpha0.0001_fitlasso_0conv0.4_ihsigma0.1_lentrain10_vec0w_ax1_lyline_specy1_colgrlight_first_continue_usemean_",
                       "randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_anoise0.05_alpha0.0001_fitlasso_0conv0.4_ihsigma0.1_lentrain10_vec0w_ax1_lyline_specy1_first_continue_usemean_",

                       "randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_alpha0.0001_fitlasso_0conv0.4_ihsigma0.1_lentrain10_vec0w_ax2_lyline_colgrlight_specy1_continue_usemean_",
                       "randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_alpha0.0001_fitlasso_0conv0.4_ihsigma2_lentrain10_vec0w_ax2_lyline_specy1_continue_usemean_",
                       "randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_alpha0.0001_fitlasso_0conv0.4_0varw2_ihsigma0.1_lentrain10_vec0w_ax2_lyline_dotted_specy1_relyap_continue_usemean_",

                       "randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_alpha0.0001_fitlasso_0conv0.4_ihsigma0.1_lentrain10_normp_vec0w_specx1_ax3_lyline_specy1_colgrlight_continue_usemean_",
                       "randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_alpha0.0001_fitlasso_0conv0.04_ihsigma0.1_lentrain10_normp_vec0w_specx1_ax3_lyline_specy1_dotted_continue_usemean_",
                       "randomnet_ifun_cnoise_grc_0N10000_0tau1v50_amod0.1_alpha0.0001_fitlasso_0conv0.04_ihsigma0.1_lentrain10_normp_vec0w_specx1_ax3_lyline_specy1_continue_usemean_",

                       ])
    data_dir = "./publish/closedloop/data/"
    #export_m = "./export"
    runs = 10


# FIGURE 5
if opt == "fig3b":

    do_run_constr = 0
    do_vec = np.array([

                       "randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_alpha0.0001_fitlasso_0conv0.4_ihsigma0.1_lentrain10_0wendv1.4_noinv_sigplot_first_end_pos1_",

                       "randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_alpha0.0001_fitlasso_0conv0.4_ihsigma0.1_lentrain10_vec0w_ax2_lyline_specy1_colgrlight_first_noly_continue_usemean_",
                       "randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_alpha0.0001_fitlasso_0conv0.4_ihsigma0.1_lentrain10_noinv_vec0w_ax2_lyline_specy1_first_noly_continue_usemean_",

                       "randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_alpha0.0001_fitlassopos_0conv0.4_ihsigma0.1_lentrain10_vec0w_ax3_lyline_specy1_first_colgrlight_continue_usemean_",
                       "randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_alpha0.0001_fitlassopos_0conv0.4_ihsigma0.1_lentrain10_noinv_vec0w_ax3_lyline_specy1_first_continue_usemean_",

                       ])
    data_dir = "./publish/closedloop/data/"
    #export_m = "./export"
    runs = 10


# FIGURE 6
if opt == "fig4lruntest":
    do_vec = np.array([
                       "randomnet_ifun2_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_amod0.1_alpha0.0001_fitlasso_1wv0.1_ihsigma0.1_lentrain10_vec0w_ax1_first_lyline_title1_continue_usemean_",
                      ])

    #data_dir = "./publish/closedloop/data/"
    #export_m = "./export"
    runs = 3
    

if opt == "fig4l":
    do_vec = np.array([

                       #"randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_alpha0.0001_fitlasso_0conv0.4_ihsigma0_lentrain10_vec0w_ax1_first_lyline_colgrlight_dotted_continue_usemean_",
                       #"randomnet_ifun2_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_amod0.1_alpha0.0001_fitlasso_1wv0.1_ihsigma0_lentrain10_vec0w_ax1_first_lyline_title1_dotted_continue_usemean_",

                       "randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_alpha0.0001_fitlasso_0conv0.4_ihsigma0.1_lentrain10_vec0w_ax1_first_lyline_colgrlight_continue_usemean_",
                       "randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_alpha0.0001_fitlasso_0conv0.4_ihsigma0.1_lentrain10_vec0w_ax2_lyline_colgrlight_continue_usemean_",
                       "randomnet_ifun_cnoise_grc_0N1000_0tau1v50_amod0.1_alpha0.0001_fitlasso_0conv0.4_ihsigma0.1_lentrain10_vec0w_ax3_lyline_colgrlight_continue_usemean_",

                       "randomnet_ifun2_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_amod0.1_alpha0.0001_fitlasso_1wv0.1_ihsigma0.1_lentrain10_vec0w_ax1_first_lyline_title1_continue_usemean_",
                       "randomnet_ifun2_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v50_amod0.1_alpha0.0001_fitlasso_1wv0.002_ihsigma0.1_lentrain10_vec0w_ax2_lyline_title1_continue_usemean_",
                       "randomnet_ifun2_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v100_amod0.1_alpha0.0001_fitlasso_1wv0.001_ihsigma0.1_lentrain10_vec0w_ax3_lyline_title1_continue_usemean_",


                       "randomnet_ifun2_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_amod0.1_alpha0.0001_fitlasso_1wv0.1_ihsigma0.1_lentrain10_vec0w_specx2_ax4_noly_first_lyline_continue_usemean_",
                       "randomnet_ifun2_cnoise_grc_0N10000_1N100_0tau1v50_1tau1v1_amod0.1_alpha0.0001_fitlasso_1wv0.1_ihsigma0.1_lentrain10_vec0w_specx2_ax4_noly_first_lyline_dotted_continue_usemean_",

                       "randomnet_ifun2_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_amod0.1_alpha0.0001_fitlasso_1wv0.1_1conv10_ihsigma0.1_lentrain10_vec0w_specx2_ax4_noly_first_lyline_colgrlight_title2_continue_usemean_",

                       "randomnet_ifun2_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_amod0.1_alpha0.0001_fitlasso_1wv0.1_ihsigma0.1_lentrain10_vec0w_ax5_lyline_specx5_noly_continue_usemean_",
                       "randomnet_ifun2_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_amod0.1_alpha0.0001_fitlasso_1wv0.1_0varw4_ihsigma0.1_lentrain10_vec0w_ax5_noly_specx6_dotted_continue_usemean_",
                       "randomnet_ifun2_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_amod0.1_alpha0.0001_fitlasso_1wv0.1_1varw4_ihsigma0.1_lentrain10_vec0w_ax5_lyline_specx5_noly_colgrlight_title3_continue_usemean_",

                      ])

    data_dir = "./publish/closedloop/data/"
    #export_m = "./export"
    runs = 10


#FIGURE 7
if opt == "fig51l":
    do_vec = np.array([
                       "randomnet_ifun2_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_amod0.1_alpha0.0001_fitlasso_1wv0.1_ihsigma0.1_lentrain10_vec0w_first_end_specx3_ax1_colgrlight_continue_usemean_",
                       "randomnet_ifun2_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_amod0.1_alpha0.0001_fitlasso_1wv50_ihsigma0.1_lentrain10_vec0w_end_specx3_ax2_colgrlight_lyline_continue_usemean_",

                       "randomnet_ifun2_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_amod0.1_alpha0.0001_fitlasso_1wv0.1_ihsigma0.1_2ndih1_lentrain10_vec0w_first_end_specx3_ax1_continue_usemean_",
                       "randomnet_ifun2_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_amod0.1_alpha0.0001_fitlasso_1wv50_ihsigma0.1_2ndih1_lentrain10_vec0w_end_specx3_ax2_title5_continue_usemean_",

                      ])
    data_dir = "./publish/closedloop/data/"
    #export_m = "./export"
    runs = 10


#FIGURE 8
if opt == "fig52l":
    do_vec = np.array([
                       "randomnet_ifun2_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_amod0.1_alpha0.0001_fitlasso_1wv0.1_ihsigma0.1_lentrain10_vec0w_first_end_ax3_colgrlight_lyline_onlyslow_continue_usemean_",
                       #"randomnet_ifun2_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_2tau1v50_amod0.1_alpha0.0001_fitlasso_1wv0.1_2wv0.002_2varw2_ihsigma0.1_lentrain10_vec0w_first_end_ax3_continue_usemean_",
                       #"randomnet_ifun2_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_2tau1v50_amod0.1_alpha0.0001_fitlasso_1wv0.1_2wv0.002_2varw0.1_ihsigma0.1_lentrain10_vec0w_first_end_ax3_dotted_continue_usemean_",
                       #"randomnet_ifun2b_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_2tau1v50_amod0.1_alpha0.0001_fitlasso_1wv0.1_2wv0.004_2probw0.5_ihsigma0.1_lentrain10_vec0w_first_end_ax3_lyline_continue_usemean_",
                       #"randomnet_ifun2b_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_2tau1v50_amod0.1_alpha0.0001_fitlasso_1wv0.1_2wv0.002_ihsigma0.1_lentrain10_vec0w_first_end_ax3_dotted_lyline_continue_usemean_",

                       "randomnet_ifun2b_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_2tau1v50_amod0.1_alpha0.0001_fitlasso_1wv0.1_2wv0.003_ihsigma0.1_lentrain10_vec0w_first_end_ax3_dotted_lyline_onlyslow_continue_usemean_",
                       "randomnet_ifun2b_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_2tau1v50_amod0.1_alpha0.0001_fitlasso_1wv0.1_2wv0.003_2varw0.1_ihsigma0.1_lentrain10_vec0w_first_end_ax3_dashed_lyline_onlyslow_continue_usemean_",
                       "randomnet_ifun2b_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_2tau1v50_amod0.1_alpha0.0001_fitlasso_1wv0.1_2wv0.003_2varw0.1_2probw0.5_ihsigma0.1_lentrain10_vec0w_first_end_ax3_lyline_onlyslow_continue_usemean_",


                       #"randomnet_ifun2_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_amod0.1_alpha0.0001_fitlasso_1wv0.1_ihsigma0.1_lentrain10_vec0w_noinv_title6_end_ax4_colgrlight_continue_usemean_",
                       #"randomnet_ifun2_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_2tau1v50_amod0.1_alpha0.0001_fitlasso_1wv0.1_2wv0.002_2varw2_ihsigma0.1_lentrain10_vec0w_noinv_title6_end_ax4_continue_usemean_",
                       "randomnet_ifun2b_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_amod0.1_alpha0.0001_fitlasso_1wv0.1_ihsigma0.1_lentrain10_vec0w_noinv_title6_end_ax4_colgrlight_lyline_onlyslow_continue_usemean_",
                       #"randomnet_ifun2b_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_2tau1v50_amod0.1_alpha0.0001_fitlasso_1wv0.1_2wv0.004_2probw0.5_ihsigma0.1_noinv_lentrain10_vec0w_end_ax4_lyline_continue_usemean_",
                       "randomnet_ifun2b_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_2tau1v50_amod0.1_alpha0.0001_fitlasso_1wv0.1_2wv0.003_2varw0.1_ihsigma0.1_noinv_lentrain10_vec0w_end_ax4_dashed_lyline_onlyslow_continue_usemean_",
                       "randomnet_ifun2b_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_2tau1v50_amod0.1_alpha0.0001_fitlasso_1wv0.1_2wv0.003_2probw0.5_2varw0.1_ihsigma0.1_noinv_lentrain10_vec0w_end_ax4_lyline_onlyslow_continue_usemean_",

                      ])
    data_dir = "./publish/closedloop/data/"
    #export_m = "./export"
    runs = 10


# FIGURE 9
# NOTE: The first line with "_runre1_" runs the model with teacher forcing only!
#       This is needed to get the proper weights for the Lyapunov estimation!
#       When running the model form scratch uncomment these lines in "figRe6"
 
if opt == "figRe6runtest":
    do_vec = np.array([
                       "randomnet_ifun2re_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_amod0.1_alpha0.0001_fitlasso_1wv0.1_ihsigma0.1_lentrain10_refilt2_runre1_exprecx_norunly_vec0w_ax1_specx21_continue_usemean_",
                       "randomnet_ifun2re_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_amod0.1_alpha0.0001_fitlasso_1wv0.1_ihsigma0.1_lentrain10_refilt2_runre2_lyline_vec0w_first_end_ax1_specx21_continue_usemean_",
                      ])
    #data_dir = "./publish/closedloop/data/"
    #export_m = "./export"
    runs = 10
    

if opt == "figRe6":
    do_vec = np.array([
                       "randomnet_ifun2_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_amod0.1_alpha0.0001_fitlasso_1wv0.1_ihsigma0.1_lentrain10_vec0w_first_end_ax1_specx21_colgrlight_lyline_continue_usemean_",
                       #"randomnet_ifun2_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_amod0.1_alpha0.0001_l1r0.5_fitelastic_1wv0.1_ihsigma0.1_lentrain10_vec0w_first_end_ax1_specx21_colgrlight_dotted_lyline_continue_usemean_",

                       #"randomnet_ifun2re_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_amod0.1_alpha0.0001_fitlasso_1wv0.1_ihsigma0.1_lentrain10_refilt2_runre1_exprecx_norunly_vec0w_ax1_specx21_continue_usemean_",
                       "randomnet_ifun2re_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_amod0.1_alpha0.0001_fitlasso_1wv0.1_ihsigma0.1_lentrain10_refilt2_runre2_lyline_vec0w_first_end_ax1_specx21_continue_usemean_",

                       #"randomnet_ifun2re_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_amod0.1_alpha0.0001_noinv_fitlasso_1wv0.1_ihsigma0.1_lentrain10_refilt2_runre1_exprecx_norunly_vec0w_ax1_specx21_continue_usemean_",
                       #"randomnet_ifun2re_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_amod0.1_alpha0.0001_noinv_fitlasso_1wv0.1_ihsigma0.1_lentrain10_refilt2_runre2_vec0w_first_end_ax1_specx21_dotted_continue_usemean_",


                       "randomnet_ifun2_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_amod0.1_alpha0.0001_noinv_fitlasso_1wv0.1_ihsigma0.1_lentrain10_vec0w_first_ax2_specx22_colgrlight_continue_usemean_",

                       #"randomnet_ifun2re_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_amod0.1_alpha0.0001_fitlasso_1wv0.1_ihsigma0.1_lentrain10_refilt2_runre1_exprecx_norunly_vec0w_ax2_specx22_continue_usemean_",
                       ##"randomnet_ifun2re_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_amod0.1_alpha0.0001_fitlasso_1wv0.1_ihsigma0.1_lentrain10_refilt2_runre2_vec0w_first_end_ax2_specx22_colgrlight_continue_usemean_", # _relyap, _prec1.0, _readdlyap_

                       #"randomnet_ifun2re_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_amod0.1_alpha0.0001_noinv_fitlasso_1wv0.1_ihsigma0.1_lentrain10_refilt2_runre1_exprecx_norunly_vec0w_ax2_specx22_continue_usemean_",
                       "randomnet_ifun2re_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_amod0.1_alpha0.0001_noinv_fitlasso_1wv0.1_ihsigma0.1_lentrain10_refilt2_runre2_vec0w_first_end_ax2_specx22_dots_continue_usemean_",

                       #"randomnet_ifun2re_cnoise_grc_0N1000_1N100_0tau1v50_1tau1v1_amod0.1_alpha0.0001_noinv_fitlassopos_1wv0.1_ihsigma0.1_lentrain10_refilt2_runre2_vec0w_first_end_ax3_specx21_lyline_continue_usemean_",

                      ])
    data_dir = "./publish/closedloop/data/"
    #export_m = "./export"
    runs = 10



# SET DEFAULT VALUES FOR THIS PLOT
fig_size =  [11.7, 8.3]
params = {  'backend': 'ps',
            'axes.labelsize': 9,
            'axes.linewidth' : 0.5,
            'title.fontsize': 8,
            'text.fontsize': 9,
            'legend.borderpad': 0.2,
            'legend.fontsize': 8,
            'legend.linewidth': 0.1,
            'legend.loc': 'best', # 'lower right'
            'legend.ncol': 4,
            'xtick.labelsize': 8,
            'ytick.labelsize': 8,
            'text.usetex': False,
            'font.family': 'sans-serif',
            'font.serif': 'Arial',
            'pdf.fonttype' : 42,
            'ps.fonttype' : 42,
            'ps.useafm': True,
            'pdf.use14corefonts': True,
            'text.usetex': False,
            'figure.figsize': fig_size}
rcParams.update(params)


b1 = '#1F78B4' #377EB8
b2 = '#A6CEE3'
g1 = '#33A02C' #4DAF4A
g2 = '#B2DF8A'
r1 = '#E31A1C' #E41A1C
r2 = '#FB9A99'
o1 = '#FF7F00' #FF7F00
o2 = '#FDBF6F'
p1 = '#6A3D9A' #984EA3
p2 = '#CAB2D6'

ye1 = '#FFFF33'
br1 = '#A65628'
pi1 = '#F781BF'
gr1 = '#999999'
k1 = '#000000'

color_v = []

if myid == 0:

    if "fig1" in opt:

        fig_size =  [4.86,6.00] # 1.5-Column 6.83

        params = {'backend': 'ps',
          'axes.labelsize': 8,
          'axes.linewidth' : 0.5,
          'title.fontsize': 8,
          'text.fontsize': 10,
          'font.size':10,
          'axes.titlesize':8,
          'legend.fontsize': 8,
          'xtick.labelsize': 8,
          'ytick.labelsize': 8,
          'legend.borderpad': 0.2,
          'legend.linewidth': 0.1,
          'legend.loc': 'best',
          'legend.ncol': 4,
          'figure.figsize': fig_size}
        rcParams.update(params)

        fig1 = plt.figure('vec')

        gs1 = matplotlib.gridspec.GridSpec(2, 3,
           width_ratios=[1,1,1],
           height_ratios=[1,1]
           )

        gs1.update(bottom=0.07, top=0.45, left=0.09, right=0.97, wspace=0.2, hspace=0.3)

        ax1 = plt.subplot(gs1[0,0])
        ax2 = plt.subplot(gs1[0,1])
        ax3 = plt.subplot(gs1[0,2])

        ax4 = plt.subplot(gs1[1,0])
        ax5 = plt.subplot(gs1[1,1])
        ax6 = plt.subplot(gs1[1,2])

        gs2 = matplotlib.gridspec.GridSpec(1, 3,
           width_ratios=[1,1,1],
           height_ratios=[1]
           )

        gs2.update(bottom=0.55, top=0.76, left=0.11, right=0.97, wspace=0.35, hspace=0.3)

        ax7 = plt.subplot(gs2[0,0])
        ax8 = plt.subplot(gs2[0,1])
        ax9 = plt.subplot(gs2[0,2])

        font = font0.copy()
        font.set_family('sans-serif')
        font.set_weight('bold')


        x1 = -0.12
        y1 = 1.2
        ax1.text(x1, y1, 'D1', transform=ax1.transAxes, fontsize=12, va='top', fontproperties=font)
        ax2.text(x1, y1, 'D2', transform=ax2.transAxes, fontsize=12, va='top', fontproperties=font)
        ax3.text(x1, y1, 'D3', transform=ax3.transAxes, fontsize=12, va='top', fontproperties=font)

        ax4.text(x1, y1, 'E1', transform=ax4.transAxes, fontsize=12, va='top', fontproperties=font)
        ax5.text(x1, y1, 'E2', transform=ax5.transAxes, fontsize=12, va='top', fontproperties=font)
        ax6.text(x1, y1, 'E3', transform=ax6.transAxes, fontsize=12, va='top', fontproperties=font)

        x1 = -0.12
        y1 = 1.15
        ax7.text(x1, y1, 'A', transform=ax7.transAxes, fontsize=12, va='top', fontproperties=font)
        ax8.text(x1, y1, 'B', transform=ax8.transAxes, fontsize=12, va='top', fontproperties=font)
        ax9.text(x1, y1, 'C', transform=ax9.transAxes, fontsize=12, va='top', fontproperties=font)

        d_out = 10
        d_down = 5
        linewidth = 1.5



    elif "fig2" in opt:

        fig_size =  [4.86,4] # 1.5-Column 6.83

        params = {'backend': 'ps',
          'axes.labelsize': 8,
          'axes.linewidth' : 0.5,
          'title.fontsize': 8,
          'text.fontsize': 10,
          'font.size':10,
          'axes.titlesize':8,
          'legend.fontsize': 8,
          'xtick.labelsize': 8,
          'ytick.labelsize': 8,
          'legend.borderpad': 0.2,
          'legend.linewidth': 0.1,
          'legend.loc': 'best',
          'legend.ncol': 4,
          'figure.figsize': fig_size}
        rcParams.update(params)

        fig1 = plt.figure('vec')

        gs1 = matplotlib.gridspec.GridSpec(2, 3,
           width_ratios=[1,1,1],
           height_ratios=[0.75,1]
           )

        gs1.update(bottom=0.09, top=0.93, left=0.12, right=0.97, wspace=0.2, hspace=0.2)

        ax1 = plt.subplot(gs1[1,0])
        ax2 = plt.subplot(gs1[1,1])
        ax3 = plt.subplot(gs1[1,2])

        ax1b = plt.subplot(gs1[0,0])
        ax2b = plt.subplot(gs1[0,1])
        ax3b = plt.subplot(gs1[0,2])

        font = font0.copy()
        font.set_family('sans-serif')
        font.set_weight('bold')


        x1 = -0.15
        y1 = 1.14
        ax1.text(x1, y1-0.02, 'A2', transform=ax1.transAxes, fontsize=12, va='top', fontproperties=font)
        ax2.text(x1, y1-0.02, 'B2', transform=ax2.transAxes, fontsize=12, va='top', fontproperties=font)
        ax3.text(x1, y1-0.02, 'C2', transform=ax3.transAxes, fontsize=12, va='top', fontproperties=font)

        ax1b.text(x1, y1, 'A1', transform=ax1b.transAxes, fontsize=12, va='top', fontproperties=font)
        ax2b.text(x1, y1, 'B1', transform=ax2b.transAxes, fontsize=12, va='top', fontproperties=font)
        ax3b.text(x1, y1, 'C1', transform=ax3b.transAxes, fontsize=12, va='top', fontproperties=font)

        #ax4.text(x1, y1, 'D1', transform=ax4.transAxes, fontsize=12, va='top', fontproperties=font)
        #ax5.text(x1, y1, 'D2', transform=ax5.transAxes, fontsize=12, va='top', fontproperties=font)
        #ax6.text(x1, y1, 'D3', transform=ax6.transAxes, fontsize=12, va='top', fontproperties=font)

        #ax7.text(x1, y1, 'E1', transform=ax7.transAxes, fontsize=12, va='top', fontproperties=font)
        #ax8.text(x1, y1, 'E2', transform=ax8.transAxes, fontsize=12, va='top', fontproperties=font)
        #ax9.text(x1, y1, 'E3', transform=ax9.transAxes, fontsize=12, va='top', fontproperties=font)

        d_out = 10
        d_down = 5
        linewidth = 1.5

    elif "fig3b" in opt:

        fig_size =  [8.3*0.3937,6] # 1.5-Column 6.83

        params = {'backend': 'ps',
          'axes.labelsize': 8,
          'axes.linewidth' : 0.5,
          'title.fontsize': 8,
          'text.fontsize': 10,
          'font.size':10,
          'axes.titlesize':8,
          'legend.fontsize': 8,
          'xtick.labelsize': 8,
          'ytick.labelsize': 8,
          'legend.borderpad': 0.2,
          'legend.linewidth': 0.1,
          'legend.loc': 'best',
          'legend.ncol': 4,
          'figure.figsize': fig_size}
        rcParams.update(params)

        fig1 = plt.figure('vec')

        gs0 = matplotlib.gridspec.GridSpec(1, 1,
           width_ratios=[1],
           height_ratios=[1]
           )

        gs0.update(bottom=0.75, top=0.94, left=0.17, right=0.95, wspace=0.2, hspace=0.4)

        ax1 = plt.subplot(gs0[0,0])

        gs1 = matplotlib.gridspec.GridSpec(3, 1,
           width_ratios=[1],
           height_ratios=[1,1,0.75]
           )

        gs1.update(bottom=0.07, top=0.65, left=0.17, right=0.95, wspace=0.2, hspace=0.4)

        ax2 = plt.subplot(gs1[0,0])
        ax3 = plt.subplot(gs1[1,0])
        ax3b = plt.subplot(gs1[2,0])

        font = font0.copy()
        font.set_family('sans-serif')
        font.set_weight('bold')

        x1 = -0.03
        y1 = 1.25
        ax1.text(x1, y1, 'A', transform=ax1.transAxes, fontsize=12, va='top', fontproperties=font)
        ax2.text(x1, y1, 'B1', transform=ax2.transAxes, fontsize=12, va='top', fontproperties=font)
        ax3.text(x1, y1, 'B2', transform=ax3.transAxes, fontsize=12, va='top', fontproperties=font)
        ax3b.text(x1, y1, 'B3', transform=ax3b.transAxes, fontsize=12, va='top', fontproperties=font)

        d_out = 10
        d_down = 5
        linewidth = 1.5


    elif "fig3" in opt:

        fig_size =  [17.35*0.3937,3.5] # 1.5-Column 6.83

        params = {'backend': 'ps',
          'axes.labelsize': 8,
          'axes.linewidth' : 0.5,
          'title.fontsize': 8,
          'text.fontsize': 10,
          'font.size':10,
          'axes.titlesize':8,
          'legend.fontsize': 8,
          'xtick.labelsize': 8,
          'ytick.labelsize': 8,
          'legend.borderpad': 0.2,
          'legend.linewidth': 0.1,
          'legend.loc': 'best',
          'legend.ncol': 4,
          'figure.figsize': fig_size}
        rcParams.update(params)

        fig1 = plt.figure('vec')

        gs1 = matplotlib.gridspec.GridSpec(2, 3,
           width_ratios=[1,1,1],
           height_ratios=[1,0.75]
           )

        gs1.update(bottom=0.11, top=0.90, left=0.08, right=0.97, wspace=0.2, hspace=0.2)

        ax1 = plt.subplot(gs1[0,0])
        ax2 = plt.subplot(gs1[0,1])
        ax1b = plt.subplot(gs1[1,0])
        ax2b = plt.subplot(gs1[1,1])
        ax3 = plt.subplot(gs1[0,2])
        ax3b = plt.subplot(gs1[1,2])

        font = font0.copy()
        font.set_family('sans-serif')
        font.set_weight('bold')

        x1 = -0.13
        y1 = 1.18
        ax1.text(x1, y1, 'A1', transform=ax1.transAxes, fontsize=12, va='top', fontproperties=font)
        ax2.text(x1, y1, 'B1', transform=ax2.transAxes, fontsize=12, va='top', fontproperties=font)
        ax1b.text(x1, y1, 'A2', transform=ax1b.transAxes, fontsize=12, va='top', fontproperties=font)
        ax2b.text(x1, y1, 'B2', transform=ax2b.transAxes, fontsize=12, va='top', fontproperties=font)
        ax3.text(x1, y1, 'C1', transform=ax3.transAxes, fontsize=12, va='top', fontproperties=font)
        ax3b.text(x1, y1, 'C2', transform=ax3b.transAxes, fontsize=12, va='top', fontproperties=font)

        d_out = 10
        d_down = 5
        linewidth = 1.5

    elif "fig3x" in opt:

        fig_size =  [4.86,6] # 1.5-Column 6.83

        params = {'backend': 'ps',
          'axes.labelsize': 8,
          'axes.linewidth' : 0.5,
          'title.fontsize': 8,
          'text.fontsize': 10,
          'font.size':10,
          'axes.titlesize':8,
          'legend.fontsize': 8,
          'xtick.labelsize': 8,
          'ytick.labelsize': 8,
          'legend.borderpad': 0.2,
          'legend.linewidth': 0.1,
          'legend.loc': 'best',
          'legend.ncol': 4,
          'figure.figsize': fig_size}
        rcParams.update(params)

        fig1 = plt.figure('vec')

        gs1 = matplotlib.gridspec.GridSpec(2, 2,
           width_ratios=[1,1],
           height_ratios=[1,0.75]
           )

        gs1.update(bottom=0.55, top=0.95, left=0.12, right=0.97, wspace=0.2, hspace=0.3)

        ax1 = plt.subplot(gs1[0,0])
        ax2 = plt.subplot(gs1[0,1])
        ax1b = plt.subplot(gs1[1,0])
        ax2b = plt.subplot(gs1[1,1])


        gs2 = matplotlib.gridspec.GridSpec(2, 2,
           width_ratios=[1,1],
           height_ratios=[1,0.75]
           )

        gs2.update(bottom=0.06, top=0.45, left=0.12, right=0.97, wspace=0.2, hspace=0.3)

        ax3 = plt.subplot(gs2[0,0])
        ax4 = plt.subplot(gs2[0,1])
        ax3b = plt.subplot(gs2[1,0])
        ax4b = plt.subplot(gs2[1,1])


        font = font0.copy()
        font.set_family('sans-serif')
        font.set_weight('bold')

        x1 = -0.12
        y1 = 1.18
        ax1.text(x1, y1, 'A1', transform=ax1.transAxes, fontsize=12, va='top', fontproperties=font)
        ax2.text(x1, y1, 'B1', transform=ax2.transAxes, fontsize=12, va='top', fontproperties=font)
        ax1b.text(x1, y1, 'A2', transform=ax1b.transAxes, fontsize=12, va='top', fontproperties=font)
        ax2b.text(x1, y1, 'B2', transform=ax2b.transAxes, fontsize=12, va='top', fontproperties=font)

        ax3.text(x1, y1, 'C1', transform=ax3.transAxes, fontsize=12, va='top', fontproperties=font)
        ax4.text(x1, y1, 'D1', transform=ax4.transAxes, fontsize=12, va='top', fontproperties=font)
        ax3b.text(x1, y1, 'C2', transform=ax3b.transAxes, fontsize=12, va='top', fontproperties=font)
        ax4b.text(x1, y1, 'D2', transform=ax4b.transAxes, fontsize=12, va='top', fontproperties=font)

        d_out = 10
        d_down = 5
        linewidth = 1.5


    elif "fig51" in opt:

        fig_size =  [4.86,3.75] # 1.5-Column 6.83

        params = {'backend': 'ps',
          'axes.labelsize': 8,
          'axes.linewidth' : 0.5,
          'title.fontsize': 8,
          'text.fontsize': 10,
          'font.size':10,
          'axes.titlesize':8,
          'legend.fontsize': 8,
          'xtick.labelsize': 8,
          'ytick.labelsize': 8,
          'legend.borderpad': 0.2,
          'legend.linewidth': 0.1,
          'legend.loc': 'best',
          'legend.ncol': 4,
          'figure.figsize': fig_size}
        rcParams.update(params)

        fig1 = plt.figure('vec')

        gs1 = matplotlib.gridspec.GridSpec(2, 2,
           width_ratios=[1,1],
           height_ratios=[1,0.75]
           )

        gs1.update(bottom=0.10, top=0.63, left=0.12, right=0.97, wspace=0.15, hspace=0.25)

        ax1 = plt.subplot(gs1[0,0])
        ax2 = plt.subplot(gs1[0,1])

        ax1b = plt.subplot(gs1[1,0])
        ax2b = plt.subplot(gs1[1,1])


        font = font0.copy()
        font.set_family('sans-serif')
        font.set_weight('bold')

        x1 = -0.09
        y1 = 1.17
        ax1.text(x1, y1, 'A1', transform=ax1.transAxes, fontsize=12, va='top', fontproperties=font)
        ax2.text(x1, y1, 'B1', transform=ax2.transAxes, fontsize=12, va='top', fontproperties=font)

        ax1b.text(x1, y1+0.04, 'A2', transform=ax1b.transAxes, fontsize=12, va='top', fontproperties=font)
        ax2b.text(x1, y1+0.04, 'B2', transform=ax2b.transAxes, fontsize=12, va='top', fontproperties=font)


        d_out = 10
        d_down = 5
        linewidth = 1.5


    elif "fig52" in opt:

        fig_size =  [4.86,3.75] # 1.5-Column 6.83

        params = {'backend': 'ps',
          'axes.labelsize': 8,
          'axes.linewidth' : 0.5,
          'title.fontsize': 8,
          'text.fontsize': 10,
          'font.size':10,
          'axes.titlesize':8,
          'legend.fontsize': 8,
          'xtick.labelsize': 8,
          'ytick.labelsize': 8,
          'legend.borderpad': 0.2,
          'legend.linewidth': 0.1,
          'legend.loc': 'best',
          'legend.ncol': 4,
          'figure.figsize': fig_size}
        rcParams.update(params)

        fig1 = plt.figure('vec')

        gs2 = matplotlib.gridspec.GridSpec(2,2 ,
           width_ratios=[1,1],
           height_ratios=[1,0.75]
           )

        gs2.update(bottom=0.10, top=0.63, left=0.12, right=0.97, wspace=0.15, hspace=0.25)

        ax3 = plt.subplot(gs2[0,0])
        ax4 = plt.subplot(gs2[0,1])

        ax3b = plt.subplot(gs2[1,0])
        ax4b = plt.subplot(gs2[1,1])

        font = font0.copy()
        font.set_family('sans-serif')
        font.set_weight('bold')

        x1 = -0.09
        y1 = 1.16

        ax3.text(x1, y1, 'A1', transform=ax3.transAxes, fontsize=12, va='top', fontproperties=font)
        ax3b.text(x1, y1+0.04, 'A2', transform=ax3b.transAxes, fontsize=12, va='top', fontproperties=font)

        ax4.text(x1, y1, 'B1', transform=ax4.transAxes, fontsize=12, va='top', fontproperties=font)
        ax4b.text(x1, y1+0.04, 'B2', transform=ax4b.transAxes, fontsize=12, va='top', fontproperties=font)


        d_out = 10
        d_down = 5
        linewidth = 1.5


    elif "figRe6" in opt:

        fig_size =  [4.86,3.75] # 1.5-Column 6.83

        params = {'backend': 'ps',
          'axes.labelsize': 8,
          'axes.linewidth' : 0.5,
          'title.fontsize': 8,
          'text.fontsize': 10,
          'font.size':10,
          'axes.titlesize':8,
          'legend.fontsize': 8,
          'xtick.labelsize': 8,
          'ytick.labelsize': 8,
          'legend.borderpad': 0.2,
          'legend.linewidth': 0.1,
          'legend.loc': 'best',
          'legend.ncol': 4,
          'figure.figsize': fig_size}
        rcParams.update(params)

        fig1 = plt.figure('vec')

        gs1 = matplotlib.gridspec.GridSpec(2, 2,
           width_ratios=[1,1],
           height_ratios=[1,0.75]
           )

        gs1.update(bottom=0.10, top=0.63, left=0.12, right=0.97, wspace=0.25, hspace=0.25)

        ax1 = plt.subplot(gs1[0,0])
        ax2 = plt.subplot(gs1[0,1])

        ax1b = plt.subplot(gs1[1,0])
        ax2b = plt.subplot(gs1[1,1])


        font = font0.copy()
        font.set_family('sans-serif')
        font.set_weight('bold')

        x1 = -0.09
        y1 = 1.17
        ax1.text(x1, y1, 'A1', transform=ax1.transAxes, fontsize=12, va='top', fontproperties=font)
        ax2.text(x1, y1, 'B1', transform=ax2.transAxes, fontsize=12, va='top', fontproperties=font)

        ax1b.text(x1, y1+0.04, 'A2', transform=ax1b.transAxes, fontsize=12, va='top', fontproperties=font)
        ax2b.text(x1, y1+0.04, 'B2', transform=ax2b.transAxes, fontsize=12, va='top', fontproperties=font)


        d_out = 10
        d_down = 5
        linewidth = 1.5


    elif "fig5" in opt:

        fig_size =  [4.86,7.5] # 1.5-Column 6.83

        params = {'backend': 'ps',
          'axes.labelsize': 8,
          'axes.linewidth' : 0.5,
          'title.fontsize': 8,
          'text.fontsize': 10,
          'font.size':10,
          'axes.titlesize':8,
          'legend.fontsize': 8,
          'xtick.labelsize': 8,
          'ytick.labelsize': 8,
          'legend.borderpad': 0.2,
          'legend.linewidth': 0.1,
          'legend.loc': 'best',
          'legend.ncol': 4,
          'figure.figsize': fig_size}
        rcParams.update(params)

        fig1 = plt.figure('vec')

        gs1 = matplotlib.gridspec.GridSpec(2, 2,
           width_ratios=[1,1],
           height_ratios=[1,0.75]
           )

        gs1.update(bottom=0.55, top=0.82, left=0.12, right=0.97, wspace=0.15, hspace=0.25)

        ax1 = plt.subplot(gs1[0,0])
        ax2 = plt.subplot(gs1[0,1])

        ax1b = plt.subplot(gs1[1,0])
        ax2b = plt.subplot(gs1[1,1])

        gs2 = matplotlib.gridspec.GridSpec(2,2 ,
           width_ratios=[1,1],
           height_ratios=[1,0.75]
           )

        gs2.update(bottom=0.05, top=0.32, left=0.12, right=0.97, wspace=0.15, hspace=0.25)

        ax3 = plt.subplot(gs2[0,0])
        ax4 = plt.subplot(gs2[0,1])

        ax3b = plt.subplot(gs2[1,0])
        ax4b = plt.subplot(gs2[1,1])

        font = font0.copy()
        font.set_family('sans-serif')
        font.set_weight('bold')

        x1 = -0.09
        y1 = 1.16
        ax1.text(x1, y1, 'A1', transform=ax1.transAxes, fontsize=12, va='top', fontproperties=font)
        ax2.text(x1, y1, 'B1', transform=ax2.transAxes, fontsize=12, va='top', fontproperties=font)
        ax3.text(x1, y1, 'C1', transform=ax3.transAxes, fontsize=12, va='top', fontproperties=font)

        ax1b.text(x1, y1+0.04, 'A2', transform=ax1b.transAxes, fontsize=12, va='top', fontproperties=font)
        ax2b.text(x1, y1+0.04, 'B2', transform=ax2b.transAxes, fontsize=12, va='top', fontproperties=font)
        ax3b.text(x1, y1+0.04, 'C2', transform=ax3b.transAxes, fontsize=12, va='top', fontproperties=font)

        ax4.text(x1, y1, 'D1', transform=ax4.transAxes, fontsize=12, va='top', fontproperties=font)
        ax4b.text(x1, y1+0.04, 'D2', transform=ax4b.transAxes, fontsize=12, va='top', fontproperties=font)


        d_out = 10
        d_down = 5
        linewidth = 1.5


    elif "fig4" in opt:

        fig_size =  [4.86,6] # 1.5-Column 6.83

        params = {'backend': 'ps',
          'axes.labelsize': 8,
          'axes.linewidth' : 0.5,
          'title.fontsize': 8,
          'text.fontsize': 10,
          'font.size':10,
          'axes.titlesize':8,
          'legend.fontsize': 8,
          'xtick.labelsize': 8,
          'ytick.labelsize': 8,
          'legend.borderpad': 0.2,
          'legend.linewidth': 0.1,
          'legend.loc': 'best',
          'legend.ncol': 4,
          'figure.figsize': fig_size}
        rcParams.update(params)

        fig1 = plt.figure('vec')

        gs1 = matplotlib.gridspec.GridSpec(2, 3,
           width_ratios=[1,1,1],
           height_ratios=[1,1]
           )

        gs1.update(bottom=0.32, top=0.75, left=0.12, right=0.97, wspace=0.2, hspace=0.2)

        ax1 = plt.subplot(gs1[0,0])
        ax2 = plt.subplot(gs1[0,1])
        ax3 = plt.subplot(gs1[0,2])

        ax1b = plt.subplot(gs1[1,0])
        ax2b = plt.subplot(gs1[1,1])
        ax3b = plt.subplot(gs1[1,2])

        gs2 = matplotlib.gridspec.GridSpec(1, 2,
           width_ratios=[1,1],
           height_ratios=[1]
           )

        gs2.update(bottom=0.06, top=0.23, left=0.12, right=0.97, wspace=0.15, hspace=0.6)

        ax4 = plt.subplot(gs2[0,0])
        ax5 = plt.subplot(gs2[0,1])
        #ax5b = plt.subplot(gs2[0,2])

        font = font0.copy()
        font.set_family('sans-serif')
        font.set_weight('bold')

        x1 = -0.12
        y1 = 1.15
        ax1.text(x1, y1, 'A1', transform=ax1.transAxes, fontsize=12, va='top', fontproperties=font)
        ax2.text(x1, y1, 'B1', transform=ax2.transAxes, fontsize=12, va='top', fontproperties=font)
        ax3.text(x1, y1, 'C1', transform=ax3.transAxes, fontsize=12, va='top', fontproperties=font)

        ax1b.text(x1, y1, 'A2', transform=ax1b.transAxes, fontsize=12, va='top', fontproperties=font)
        ax2b.text(x1, y1, 'B2', transform=ax2b.transAxes, fontsize=12, va='top', fontproperties=font)
        ax3b.text(x1, y1, 'C2', transform=ax3b.transAxes, fontsize=12, va='top', fontproperties=font)

        x1 = -0.10
        y1 = 1.18
        ax4.text(x1, y1, 'D', transform=ax4.transAxes, fontsize=12, va='top', fontproperties=font)
        ax5.text(x1, y1, 'E', transform=ax5.transAxes, fontsize=12, va='top', fontproperties=font)
        #ax5b.text(x1, y1, 'E2', transform=ax5b.transAxes, fontsize=12, va='top', fontproperties=font)

        d_out = 10
        d_down = 5
        linewidth = 1.5

    else:

        fig1 = plt.figure('vec')

        gs = matplotlib.gridspec.GridSpec(2, 4,
           width_ratios=[1,1,1,1],
           height_ratios=[1,1]
           )

        #gs.update(bottom=0.08, top=0.90, left=0.08, right=0.97, wspace=0.4, hspace=0.6)

        ax1 = plt.subplot(gs[0,0])
        ax2 = plt.subplot(gs[0,1])
        ax3 = plt.subplot(gs[0,2])
        ax4 = plt.subplot(gs[0,3])

        ax1b = plt.subplot(gs[1,0])
        ax2b = plt.subplot(gs[1,1])
        ax3b = plt.subplot(gs[1,2])
        ax4b = plt.subplot(gs[1,3])

        font = font0.copy()
        font.set_family('sans-serif')
        font.set_weight('bold')

        d_out = 10
        d_down = 5
        linewidth = 1.5



for d, do in enumerate(do_vec):

    # Isope and Barbour 2002: (also: 1 ms and 11 ms at 32°C)
    Q10_channel = 2.4
    Q10 = Q10_channel**((37-32)/10.)
    tau1_pj = 1.2*ms/Q10
    tau2_pj = 13.9*ms/Q10

    bin_width = 0.1*ms

    temperature = 37

    np.random.seed(444)

    delta = 2

    #set to True for artefact test:
    nulltest = False

    fluct_s = [0,0]
    fluct_tau = 10*ms
    factor_celltype = [1,1]
    factor_recurrent = [[0,0],[0,0]]
    stdp = []

    tdur = 0.05
    istart = 0; istop = 0.2; di = 0.01

    dumpsave = 1

    give_freq = True
    amod = [1,1]

    tau1_ex=[]
    tau2_ex=[]
    n_syn_ex = []
    syn_max_mf = []
    g_syn_ex_s = []
    g_syn_ex = []
    mglufac_ex = []
    anoise = []
    noise_a = []
    noise_out = 0
    noise_syn = []
    noise_syn_tau = []
    syn_ex_dist = []
    tau1_basis = np.array([0,0,0])
    tau2_basis = np.array([0.01,0.1,0.5])
    max_weight = 1e9

    len_train = 3
    len_test = 3

    seed0 = 1

    fit_restart = True
    fit_restart_mean = True
    restart_lyap = False

    t_analysis_delay = 0
    t_analysis_stop = 0


    istep = []
    istep_sigma = []
    itest = []
    itest_sigma = []

    tstep = []
    ttest = []
    tstop = []

    t_plot_delay = []
    t_plot_stop = []

    N = [0]

    lymax = False
    lymin = False
    downsample = 1
    max_freq = 1e10
    ridge_alpha = 1

    prefix = "randomnet"

    if "_continue_" in do:
        fit_restart = False

    if "_usemean_" in do:
        fit_restart_mean = False

    readd_lyap = False
    if "_readdlyap_" in do:
        readd_lyap = True

    if "_ifun_" in do:

        dt = 1*ms
        cellimport = ["import cells.ifun._ifun as ifun"]
        celltype = ["ifun"]
        cell_exe = [""]

        conntype=[{'type':'e2inh', 'src':0, 'tgt':0, 'w':0.1, 'var':0, 'tau1':100*ms, 'tau2':0*ms, 'conv':0.5}
                 ]

        N = [500]

        amod = [0.01]
        ihold = [1]
        ihold_sigma = [0]

        factor_celltype = [[1,0,0.5]] #[:][0] mean height of modulation, [:][1] variance of modulation, [:][2] probability that modulation is inverse (NOW if >0, 50% inverse input!)

        anoise = [0]

        len_train = 100
        len_test = 10

        lymax=17

        if "_0tau1v10_" in do:
            xmin = 0; xmax=40; vec0w = np.arange(0,40.2,0.2)
        if "_0tau1v50_" in do:
            xmin = 0; xmax=4; vec0w = np.arange(0,4.02,0.02)
        if "_0tau1v100_" in do:

            if "_dt" in do:
                xmin = 0; xmax=1; vec0w = np.arange(0,1.02,0.02)
            else:
                xmin = 0; xmax=4; vec0w = np.arange(0,4.02,0.02)

        if "_0conv0.04_" in do:
            if "_0tau1v10_" in do:
                xmin = 0; xmax=40; vec0w = np.arange(0,40.2,0.2)
            if "_0tau1v50_" in do:
                xmin = 0; xmax=4; vec0w = np.arange(0,4.02,0.02)
            if "_0tau1v100_" in do:
                xmin = 0; xmax=4; vec0w = np.arange(0,4.02,0.02)

        if "_specx1_" in do:
            if "_0tau1v10_" in do:
                xmin = 0; xmax=80; vec0w = np.arange(0,80,1)
            if "_0tau1v50_" in do:
                xmin = 0; xmax=14; vec0w = np.arange(0,14.1,0.1)
            if "_0tau1v100_" in do:
                xmin = 0; xmax=14; vec0w = np.arange(0,14.1,0.1)

            if ("_0N10000_" in do):
                if "_0tau1v10_" in do:
                    xmin = 0; xmax=80; vec0w = np.arange(0,80,2)
                if "_0tau1v50_" in do:
                    xmin = 0; xmax=14; vec0w = np.arange(0,14.5,0.5)
                if "_0tau1v100_" in do:
                    xmin = 0; xmax=14; vec0w = np.arange(0,14.5,0.5)

        if ("_normp_" in do):
            xmin = 0; xmax = 1
            if "_0conv0.04_" in do:
                vec0w = np.arange(0,25.2,0.2)
                if ("_0N10000_" in do):
                    vec0w = np.arange(0,25.2,0.2)
            elif "_0conv0.4_" in do:
                vec0w = np.arange(0,2.62,0.02)



        if "_specy1_" in do:
            lymax = 4.2

        noise_out = 0

        prefix = prefix + "_ifun"

        use_c = True
        use_mpi = False



    if "_ifun2_" in do:

        dt = 1*ms
        cellimport = ["import cells.ifun._ifun2 as ifun2"]
        celltype = ["ifun2"]
        cell_exe = [""]

        conntype=[{'type':'e2inh', 'src':1, 'tgt':0, 'w':0.1, 'var':0, 'tau1':100*ms, 'tau2':0*ms, 'conv':4}, #0.0005
                  {'type':'e2ex', 'src':0, 'tgt':1, 'w':1, 'var':0, 'tau1':1*ms, 'tau2':0*ms, 'conv':100},
                  {'type':'e2m', 'src':0, 'tgt':1, 'w':0, 'var':0, 'tau1':50*ms, 'tau2':0*ms, 'conv':0}
                 ]

        N = [500,50]

        amod = [0.01,0]
        ihold = [1,0]
        ihold_sigma = [0,0]

        factor_celltype = [[1,0,0.5],[1,0,0.5]] #[:][0] mean height of modulation, [:][1] variance of modulation, [:][2] probability that modulation is inverse (NOW if >0, 50% inverse input!)

        anoise = [0,0]

        len_train = 100
        len_test = 10

        lymax = 7

        xmin = 0; xmax=4 ; vec0w = np.arange(0,4.02,0.02)

        if "_0tau1v100_1tau1v1_" in do:
            xmin = 0; xmax=4; vec0w = np.arange(0,4.02,0.02)
        if "_0tau1v50_1tau1v50_" in do:
            xmin = 0; xmax=4; vec0w = np.arange(0,4.02,0.02)
        if "_0tau1v100_1tau1v100_" in do:
            xmin = 0; xmax=4; vec0w = np.arange(0,4.02,0.02)
        if "_0tau1v100_1tau1v50_" in do:
            xmin = 0; xmax=4; vec0w = np.arange(0,4.02,0.02)
        if "_0tau1v100_1tau1v10_" in do:
            xmin = 0; xmax=4; vec0w = np.arange(0,4.02,0.02)

        if "_specx7_" in do:
            xmin = 0; xmax=4 ; vec0w = np.arange(0,4.02,0.02)

        if "_specx2_" in do:
            xmin = 0; xmax=2; vec0w = np.arange(0,2.02,0.02)

        if "_specx21_" in do:
            xmin = 0; xmax=2; vec0w = np.arange(0,2.01,0.01)

        if "_specx22_" in do:
            xmin = 0; xmax=0.01; vec0w = np.arange(0,0.01002,0.00002)

        if "_specx3_" in do:
            xmin = 0; xmax=0.02; vec0w = np.arange(0,0.0202,0.0002)

        if "_specx5_" in do:
            xmin = 0; xmax=6 ; vec0w = np.arange(0,6.02,0.02)

        if "_specx6_" in do:
            xmin = 0; xmax=6 ; vec0w = np.arange(0,6.1,0.1)

        if ("_specx4_" in do):
            xmin = 0.014; xmax=0.016; vec0w = np.arange(0.014,0.016,0.00001)

            lymax = None
            lymin = None

        if "_specx8_" in do:
            xmin = 0; xmax=0.1 ; vec0w = np.arange(0,0.101,0.001)
            lymax = 7


        noise_out = 0

        prefix = prefix + "_ifun2"

        use_c = True
        use_mpi = False


    delay_recurrent = False
    teacher_forcing = False
    if "_ifun2re_" in do:

        dt = 1*ms
        cellimport = ["import cells.ifun._ifun2re as ifun2re"]
        celltype = ["ifun2re"]
        cell_exe = [""]

        conntype=[{'type':'e2inh', 'src':1, 'tgt':0, 'w':0.1, 'var':0, 'tau1':100*ms, 'tau2':0*ms, 'conv':4}, #0.0005
                  {'type':'e2ex', 'src':0, 'tgt':1, 'w':1, 'var':0, 'tau1':1*ms, 'tau2':0*ms, 'conv':100},
                  {'type':'e2m', 'src':0, 'tgt':1, 'w':0, 'var':0, 'tau1':50*ms, 'tau2':0*ms, 'conv':0}
                 ]

        N = [500,50]

        amod = [0.01,0]
        ihold = [1,0]
        ihold_sigma = [0,0]

        factor_celltype = [[1,0,0.5],[1,0,0.5]] #[:][0] mean height of modulation, [:][1] variance of modulation, [:][2] probability that modulation is inverse (NOW if >0, 50% inverse input!)
        factor_recurrent = [[0.2,0.5,1e-4,0.1],[0.2,0.5,1e-4,0.1]]
        delay_recurrent = 1e-3
        teacher_forcing = True

        anoise = [0,0]

        len_train = 100
        len_test = 10

        lymax = 7

        xmin = 0; xmax=4 ; vec0w = np.arange(0,4.02,0.02)

        if "_0tau1v100_1tau1v1_" in do:
            xmin = 0; xmax=4; vec0w = np.arange(0,4.02,0.02)
        if "_0tau1v50_1tau1v50_" in do:
            xmin = 0; xmax=4; vec0w = np.arange(0,4.02,0.02)
        if "_0tau1v100_1tau1v100_" in do:
            xmin = 0; xmax=4; vec0w = np.arange(0,4.02,0.02)
        if "_0tau1v100_1tau1v50_" in do:
            xmin = 0; xmax=4; vec0w = np.arange(0,4.02,0.02)
        if "_0tau1v100_1tau1v10_" in do:
            xmin = 0; xmax=4; vec0w = np.arange(0,4.02,0.02)

        if "_specx7_" in do:
            xmin = 0; xmax=4 ; vec0w = np.arange(0,4.02,0.02)

        if "_specx2_" in do:
            xmin = 0; xmax=2; vec0w = np.arange(0,2.02,0.02)

        if "_specx21_" in do:
            xmin = 0; xmax=2; vec0w = np.arange(0,2.01,0.01)
            lymax = 3

        if "_specx22_" in do:
            xmin = 0; xmax=0.01; vec0w = np.arange(0,0.01002,0.00002)
            lymax = 0.5
            lymin = -3

        if "_specx3_" in do:
            xmin = 0; xmax=0.02; vec0w = np.arange(0,0.0202,0.0002)

        if "_specx5_" in do:
            xmin = 0; xmax=6 ; vec0w = np.arange(0,6.02,0.02)

        if "_specx6_" in do:
            xmin = 0; xmax=6 ; vec0w = np.arange(0,6.1,0.1)

        if ("_specx4_" in do):
            xmin = 0.014; xmax=0.016; vec0w = np.arange(0.014,0.016,0.00001)

            lymax = None
            lymin = None

        if "_specx8_" in do:
            xmin = 0; xmax=0.1 ; vec0w = np.arange(0,0.101,0.001)
            lymax = 7


        noise_out = 0

        prefix = prefix + "_ifun2re"

        use_c = True
        use_mpi = False


    if "_ifun2b_" in do:

        dt = 1*ms
        cellimport = ["import cells.ifun._ifun2b as ifun2b"]
        celltype = ["ifun2b"]
        cell_exe = [""]

        conntype=[{'type':'e2inh', 'src':1, 'tgt':0, 'w':0.1, 'var':0, 'tau1':100*ms, 'tau2':0*ms, 'conv':4}, #0.0005
                  {'type':'e2ex', 'src':0, 'tgt':1, 'w':1, 'var':0, 'tau1':1*ms, 'tau2':0*ms, 'conv':100},
                  {'type':'e2m', 'src':0, 'tgt':1, 'w':0, 'var':0, 'tau1':50*ms, 'tau2':0*ms, 'conv':0, 'prob':1}
                 ]

        N = [500,50]

        amod = [0.01,0]
        ihold = [1,0]
        ihold_sigma = [0,0]

        factor_celltype = [[1,0,0.5,0],[1,0,0.5,0]] #[:][0] mean height of modulation, [:][1] variance of modulation, [:][2] probability that modulation is inverse (NOW if >0, 50% inverse input!)

        anoise = [0,0]

        len_train = 100
        len_test = 10

        lymax = 7

        xmin = 0; xmax=4 ; vec0w = np.arange(0,4.02,0.02)

        if "_0tau1v100_1tau1v1_" in do:
            xmin = 0; xmax=4; vec0w = np.arange(0,4.02,0.02)
        if "_0tau1v50_1tau1v50_" in do:
            xmin = 0; xmax=4; vec0w = np.arange(0,4.02,0.02)
        if "_0tau1v100_1tau1v100_" in do:
            xmin = 0; xmax=4; vec0w = np.arange(0,4.02,0.02)
        if "_0tau1v100_1tau1v50_" in do:
            xmin = 0; xmax=4; vec0w = np.arange(0,4.02,0.02)
        if "_0tau1v100_1tau1v10_" in do:
            xmin = 0; xmax=4; vec0w = np.arange(0,4.02,0.02)

        if "_specx7_" in do:
            xmin = 0; xmax=4 ; vec0w = np.arange(0,4.02,0.02)

        if "_specx2_" in do:
            xmin = 0; xmax=2; vec0w = np.arange(0,2.02,0.02)

        if "_specx3_" in do:
            xmin = 0; xmax=0.02; vec0w = np.arange(0,0.0202,0.0002)

        if "_specx5_" in do:
            xmin = 0; xmax=6 ; vec0w = np.arange(0,6.02,0.02)

        if "_specx6_" in do:
            xmin = 0; xmax=6 ; vec0w = np.arange(0,6.1,0.1)

        if ("_specx4_" in do):
            xmin = 0.014; xmax=0.016; vec0w = np.arange(0.014,0.016,0.00001)

            lymax = None
            lymin = None


        noise_out = 0

        prefix = prefix + "_ifun2b"

        use_c = True
        use_mpi = False


    mfratio = 0.5


    if "tau" in do:
        split = str(do).split("tau")
        for i in range(len(split)-1):
            iline = split[i][-1]
            split2 = split[i+1].split("v")
            inum = split2[0]
            val = split2[1].split("_")[0]
            prefix = prefix + "_" + iline + "tau" + inum + "v" + val
            conntype[int(iline)]['tau'+inum] = float(val)*ms

    if "wv" in do:
        split = str(do).split("wv")
        for i in range(len(split)-1):
            iline = split[i][-1]
            val = split[i+1].split("_")[0]
            prefix = prefix + "_" + iline + "wv" + val
            conntype[int(iline)]['w'] = float(val)

    if "varw" in do:
        split = str(do).split("varw")
        for i in range(len(split)-1):
            iline = split[i][-1]
            val = split[i+1].split("_")[0]
            prefix = prefix + "_" + iline + "varw" + val
            conntype[int(iline)]['var'] = float(val)

    if "probw" in do:
        split = str(do).split("probw")
        for i in range(len(split)-1):
            iline = split[i][-1]
            val = split[i+1].split("_")[0]
            prefix = prefix + "_" + iline + "probw" + val
            conntype[int(iline)]['prob'] = float(val)

    if "conv" in do:
        split = str(do).split("conv")
        for i in range(len(split)-1):
            iline = split[i][-1]
            val = split[i+1].split("_")[0]
            prefix = prefix + "_" + iline + "conv" + val
            if float(val) < 1:
                conntype[int(iline)]['conv'] = float(val)
            else:
                conntype[int(iline)]['conv'] = int(val)


    if "N" in do:
        split = str(do).split("N")
        for i in range(len(split)-1):
            iline = split[i][-1]
            val = split[i+1].split("_")[0]
            prefix = prefix + "_" + iline + "N" + val
            N[int(iline)] = int(val)


    if "_ihsigma" in do:
        ihsigma = str(do).split("_ihsigma")[1].split("_")[0]
        prefix = prefix + "_ihsigma" + ihsigma
        ihold_sigma = [float(ihsigma)]*len(N)

    if "_runs" in do:
        runs = str(do).split("_runs")[1].split("_")[0]
        runs = int(runs)

    if "_anoise" in do:
        split = str(do).split("anoise")
        val = split[1].split("_")[0]
        prefix = prefix + "_" + "anoise" + val
        anoise = [val]*len(N)

    scaleih = 1
    if "_1stih" in do:
        ndih = str(do).split("_1stih")[1].split("_")[0]
        prefix = prefix + "_1stih" + ndih
        scaleih = float(ndih)

    if "_2ndih" in do:
        ndih = str(do).split("_2ndih")[1].split("_")[0]
        prefix = prefix + "_2ndih" + ndih
        ihold[1] = float(ndih)*ihold[0]

    if "_0ih" in do:
        ndih = str(do).split("_0ih")[1].split("_")[0]
        prefix = prefix + "_0ih" + ndih
        ihold[0] = float(ndih)

    if "_dt" in do:
        sdt = str(do).split("_dt")[1].split("_")[0]
        prefix = prefix + "_dt" + sdt
        dt = float(sdt) * ms

    if "_noinv_" in do:
        for ii in range(len(factor_celltype)):
            factor_celltype[ii][2] = 0
        #factor_celltype = [[1,0,0]]*len(N)
        #amod = [0.01]
        prefix = prefix + "_noinv"

    if "_noinp" in do:
        noinp = str(do).split("_noinp")[1].split("_")[0]
        prefix = prefix + "_noinp" + noinp
        factor_celltype[0][3] = float(noinp)


    if "_mfrat" in do:
        mfrat = str(do).split("_mfrat")[1].split("_")[0]
        prefix = prefix + "_mfrat" + mfrat
        mfratio = float(mfrat)

    if "_ubc_" in do:
        prefix = prefix + "_ubc"

    if "_goc_" in do:
        prefix = prefix + "_goc"

    if "_2vec" in do:
        prefix = prefix + "_2vec"

    # rest here does not matter for lyapunov!
    prefix_ly = prefix[:]

    if "_ds" in do:
        ds = str(do).split("_ds")[1].split("_")[0]
        downsample = float(ds)
        prefix = prefix + "_ds" + str(int(ds))

    if "_lentrain" in do:
        lentrain = str(do).split("_lentrain")[1].split("_")[0]
        prefix = prefix + "_lentrain" + lentrain
        len_train = int(lentrain)

    if "_alpha" in do:
        al = str(do).split("_alpha")[1].split("_")[0]
        prefix = prefix + "_alpha" + al
        ridge_alpha = float(al)

    fitter = "ridge"
    if "_fit" in do:
        al = str(do).split("_fit")[1].split("_")[0]
        prefix = prefix + "_fit" + al
        fitter = al

    if "_noiseav" in do:
        split = str(do).split("noiseav")
        val = split[1].split("_")[0]
        prefix = prefix + "_" + "noiseav" + val
        noise_out = float(val)

    if "_amod" in do:
        a = str(do).split("_amod")[1].split("_")[0]
        prefix = prefix + "_amod" + a
        amod = [float(a)]*len(N)

    if "_2nda0" in do:
        prefix = prefix + "_2nda0"
        amod[1] = 0

    if "_prec" in do:
        a = str(do).split("_prec")[1].split("_")[0]
        prefix = prefix + "_prec" + a
        factor_recurrent[:][1] = float(a)
        print factor_recurrent

    normp = 1
    if ("_normp_" in do):
        normp = conntype[0]['conv']

    l1r = 1
    if "_l1r" in do:
        l1r0 = str(do).split("_l1r")[1].split("_")[0]
        l1r = float(l1r0)
        prefix = prefix + "_l1r" + l1r0

    ax = 0
    if "_ax" in do:
        ax = str(do).split("_ax")[1].split("_")[0]
        if myid == 0:
            exec("ax01=ax"+ax)
            if "_noly" not in do:
                exec("ax02=ax"+ax+'b')
            if "_fstd" in do:
                exec("ax02=ax"+ax+'b')

    pos = 1
    if "_pos" in do:
        pos = int(str(do).split("_pos")[1].split("_")[0][0])

    color = b1
    if "_color" in do:
        nc = str(do).split("_color")[1].split("_")[0]
        #exec 'color_vec = (np.array(['+ str(nc) +']), np.array(['+ str(nc) +']))'
        exec 'color = ' + str(nc)

    colgr = [b1,g1,r1]
    color_ly = "black"
    color_ly2 = o1
    if "_colgr" in do:
        nc = str(do).split("_colgr")[1].split("_")[0]
        if nc == "light":
            colgr = [b2,g2,r2]
            color_ly = "gray"
            color_ly2 = o2


    if "_4thb" in do:
        tau1_basis = np.array([0,0,0,0])
        tau2_basis = np.array([0.01,0.1,0.5,0.005])
        colgr = [b1,g1,r1,o1]
        prefix = prefix + "_4thb"
        if "_colgr" in do:
            nc = str(do).split("_colgr")[1].split("_")[0]
            if nc == "light":
                colgr = [b2,g2,r2,o2]

    if "_1b" in do:
        tau1_basis = np.array([0])
        tau2_basis = np.array([0.5])
        colgr = [r1]
        prefix = prefix + "_1b"

    if "_slowb" in do:
        tau2_basis = np.array([0.01,0.5,1.0])
        prefix = prefix + "_slowb"

    recurrent_filter = 2
    if "_refilt" in do:
        recurrent_filter = [int(str(do).split("_refilt")[1].split("_")[0])]
        prefix = prefix + "_refilt" + str(recurrent_filter)

    if "_reall" in do:
        recurrent_filter = range(len(tau2_basis))
        prefix = prefix + "_reall"

    if "_neghb" in do:
        tau1_basis = np.array([0,0,0])
        tau2_basis = np.array([-0.01,-0.1,-0.5])
        prefix = prefix + "_neghb"

    if "_4bthb" in do:
        tau1_basis = np.array([0,0,0,0])
        tau2_basis = np.array([0.01,0.1,0.5,-0.05])
        colgr = [b1,g1,r1,o1]
        prefix = prefix + "_4bthb"
        if "_colgr" in do:
            nc = str(do).split("_colgr")[1].split("_")[0]
            if nc == "light":
                colgr = [b2,g2,r2,o2]

    run_recurrent_filter = 1
    if "_runre" in do:
        run_recurrent_filter = int(str(do).split("_runre")[1].split("_")[0])
        prefix_ly = prefix
        prefix = prefix + "_runre" + str(run_recurrent_filter)

    exprecx = False
    if "_exprecx" in do:
        exprecx = True

    # DEFINE ANALYSIS METHOD


    if "_pca_" in do:

        delta = 3
        tdur = 0.1

        tstep = np.array([delta])

        istep0 = np.array([1])
        #istep1 = np.array([1])
        istep1 = np.zeros(len(istep0))
        istep = [istep0,istep1]
        istep_sigma = [0, 0]

        itest0 = np.array([])
        itest1 = np.array([])
        itest = [itest0,itest1]
        itest_sigma = [0, 0]
        ttest = np.array([])
        tstop = tstep[-1]+delta

        t_analysis_delay = 0.5
        t_analysis_stop = 1

        prefix = prefix + "_pca"

        t_plot_delay = 0.1
        t_plot_stop = tstop


    elif "_silentpca_" in do:

        delta = 3

        tstep = np.array([delta])

        istep0 = np.array([0])
        istep1 = np.zeros(len(istep0))
        istep = [istep0,istep1]
        istep_sigma = [0, 0]

        itest0 = np.array([])
        itest1 = np.array([])
        itest = [itest0,itest1]
        itest_sigma = [0, 0]

        ttest = np.array([])
        tstop = tstep[-1]+delta

        t_analysis_delay = 1
        delta = 4

        # pulse height
        istep0 = np.array([1, 0.6, 0.4, 0.8, 0.5, 0.3, 1, 0.7, 0.5, 0.9, 0.4, 1, 0.7, 0.6, 0.9, 0.6, 1, 0.8, 0.4, 0.5, 1, 0.5, 0.7, 1, 0.4, 0.6, 0.9])
        istep1 = np.zeros(len(istep0))
        istep = [istep0,istep1]
        istep_sigma = [0, 0]

        itest0 = np.array([1, 0.7, 1, 0.5])
        t_analysis_stop = 2

        prefix = prefix + "_silentpca"

        t_plot_delay = 0.1
        t_plot_stop = tstop


    elif "_basis_" in do:

        delta = 2  # delay from the start

        istep0 = np.array([1])
        istep1 = np.zeros(len(istep0))
        istep = [istep0,istep1]
        istep_sigma = [0, 0]

        itest0 = np.array([1])
        itest1 = np.zeros(len(itest0))
        itest = [itest0,itest1]
        itest_sigma = [0, 0]

        # pulse time
        tstep = np.arange(0,len(istep0)*3,3) + delta
        tstep = tstep + np.random.rand(len(tstep))*2

        ttest = tstep[-1] + np.arange(0,len(itest0)*3,3) + delta
        ttest = ttest + np.random.rand(len(ttest))*2

        tstop = ttest[-1] + delta

        t_analysis_delay = 0.5
        t_analysis_stop = 2

        prefix = prefix + "_basis"

        t_plot_delay = 0.1
        t_plot_stop = tstop


    elif "_noibas_" in do:

        delta = 2  # delay from the start

        istep0 = np.array([1])
        istep1 = np.zeros(len(istep0))
        istep = [istep0,istep1]
        istep_sigma = [0, 0]

        itest0 = np.array([1])
        itest1 = np.zeros(len(itest0))
        itest = [itest0,itest1]
        itest_sigma = [0, 0]

        # pulse time
        tstep = np.array([0,3]) + delta

        ttest = tstep[-1] + np.arange(0,len(itest0)*3,3) + 1
        ttest = ttest + np.random.rand(len(ttest))*2

        tstop = ttest[-1] + delta

        t_analysis_delay = 0.5
        t_analysis_stop = 2

        prefix = prefix + "_noibas"

        t_plot_delay = 0.1
        t_plot_stop = tstop


    elif "_basnoi_" in do:

        delta = 2  # delay from the start

        istep0 = np.array([1])
        istep1 = np.zeros(len(istep0))
        istep = [istep0,istep1]
        istep_sigma = [0, 0]

        itest0 = np.array([1])
        itest1 = np.zeros(len(itest0))
        itest = [itest0,itest1]
        itest_sigma = [0, 0]

        # pulse time
        tstep = np.arange(0,len(istep0)*3,3) + delta
        tstep = tstep + np.random.rand(len(tstep))*2

        ttest = tstep[-1] + np.array([0,3]) + delta

        tstop = ttest[-1] + delta

        t_analysis_delay = 0.5
        t_analysis_stop = 2

        prefix = prefix + "_basnoi"

        t_plot_delay = 0.1
        t_plot_stop = tstop


    elif "_cnoise_" in do:

        delta = 4
        t_analysis_delay = -5
        t_analysis_stop = 9

        # cnoise height
        istep0 = np.array([1])
        istep1 = np.zeros(len(istep0))
        istep = [istep0,istep1]
        istep_sigma = [0, 0]

        itest0 = np.array([1])
        itest1 = np.zeros(len(itest0))
        itest = [itest0,itest1]
        itest_sigma = [0, 0]

        # cnoise time, start stop vectors!
        tstep = np.array([0,len_train]) + delta
        ttest = tstep[-1] + np.array([0,len_test])

        tstop = ttest[-1]

        prefix = prefix + "_cnoise"

        t_plot_delay = 0.1
        t_plot_stop = tstop

    elif "_updown_" in do:

        delta = 4
        t_analysis_delay = -5
        t_analysis_stop = 9

        # cnoise height
        istep0 = np.array([1])
        istep1 = np.zeros(len(istep0))
        istep = [istep0,istep1]
        istep_sigma = [0, 0]

        itest0 = np.array([1])
        itest1 = np.zeros(len(itest0))
        itest = [itest0,itest1]
        itest_sigma = [0, 0]

        # cnoise time, start stop vectors!
        tstep = np.array([0,len_train]) + delta
        ttest = tstep[-1] + np.array([0,len_test])

        tstop = ttest[-1]

        prefix = prefix + "_updown"

        t_plot_delay = 0.1
        t_plot_stop = tstop

    elif "_step_" in do:

        t_analysis_delay = 1
        t_analysis_stop = 5

        # cnoise height
        istep0 = np.array([1])
        istep1 = np.zeros(len(istep0))
        istep = [istep0,istep1]
        istep_sigma = [0, 0]

        itest0 = np.array([1])
        itest1 = np.zeros(len(itest0))
        itest = [itest0,itest1]
        itest_sigma = [0, 0]

        # cnoise time, start stop vectors!
        tstep = np.array([len_train, len_test])
        ttest = np.array([0,0])

        tstop = len_train

        prefix = prefix + "_step"

        t_plot_delay = 0.1
        t_plot_stop = tstop


    if "wendv" in do:
        split = str(do).split("wendv")
        for i in range(len(split)-1):
            iline = split[i][-1]
            val = split[i+1].split("_")[0]
            prefix = prefix + "_" + iline + "wv" + val
            conntype[int(iline)]['w'] = float(val)


    # PLOT OPTIONS

    linestyle = "-"
    if "_dotted_" in do: linestyle = ":"
    if "_dashed_" in do: linestyle = "--"
    if "_dashdot_" in do: linestyle = "-."

    output_dim = 5

    #bin_width = dt

    # syn_out time constant
    tau1_pj = 1*ms
    tau2_pj = 10*ms


    pickle_prefix = prefix
    #if "_runre" in do:
    #    prefix_ly = prefix

    params = {'cellimport':cellimport, 'celltype':celltype, 'cell_exe':cell_exe, 'N':N, 'temperature':temperature,
            'ihold':ihold, 'ihold_sigma':ihold_sigma, 'give_freq':give_freq, 'do_run_constr':do_run_constr, 'do_run':do_run,
            'pickle_prefix':pickle_prefix, 'istart':istart, 'istop':istop, 'di':di, 'dt':dt, 'istep':istep, 'istep_sigma':istep_sigma,
            'itest':itest, 'itest_sigma':itest_sigma, 'tstep':tstep, 'ttest':ttest, 'tdur':tdur, 'do':do, 'fluct_s':fluct_s,
            'fluct_tau':fluct_tau, 't_analysis_delay':t_analysis_delay, 'scaleih':scaleih, 'fitter':fitter,
            't_analysis_stop':t_analysis_stop, 'conntype':conntype, 'tstop':tstop, 'tau1_pj':tau1_pj, 'tau2_pj':tau2_pj,
            'output_dim':output_dim, 't_plot_delay':t_plot_delay, 't_plot_stop':t_plot_stop, 'factor_celltype':factor_celltype,
            'tau1_ex':tau1_ex, 'anoise':anoise, 'mfratio':mfratio, 'l1r':l1r,
            'tau2_ex':tau2_ex,'n_syn_ex':n_syn_ex,'syn_max_mf':syn_max_mf,'g_syn_ex_s':g_syn_ex_s,'g_syn_ex':g_syn_ex,
            'mglufac_ex':mglufac_ex, 'noise_out':noise_out, 'noise_a':noise_a,'noise_syn':noise_syn,'noise_syn_tau':noise_syn_tau,
            'syn_ex_dist':syn_ex_dist, 'tau1_basis':tau1_basis,'tau2_basis':tau2_basis,
            'max_weight':max_weight, 'stdp':stdp, 'plot_all':plot_all, 'use_mpi':use_mpi, 'use_h5':use_h5, 'use_pc':use_pc,
            'myid':myid, 'dumpsave':dumpsave, 'nulltest':nulltest, 'amod':amod, 'seed0':seed0, 'bin_width':bin_width, 'downsample':downsample,
            'factor_recurrent':factor_recurrent, 'recurrent_filter':recurrent_filter, 'run_recurrent_filter':run_recurrent_filter,
            'delay_recurrent':delay_recurrent, 'teacher_forcing':teacher_forcing, 'exprecx':exprecx,
            'max_freq':max_freq, 'export':export, 'ridge_alpha':ridge_alpha, 'data_dir':data_dir}


    if "_run_" in do: # only run once!
        print "Running:", pickle_prefix
        pca_var, pca_start, pca_max, mean_spike_freq, basis_error, basis_vaf, signals, times2, x = randomnet(params)

        mstdx = []
        for j, t2 in enumerate(tau2_basis):
            xabs = abs(x[:,j])
            xabs = xabs[np.where(xabs>0)] # remove zero entries
            mstdx.append([ mean(xabs), std(xabs), max(x[:,j]), min(x[:,j]), float(len(np.where(x[:,j]==0)[0]))/len(x[:,j])*100 ])

        print "_run_ finsihed!"
        #print mstdx
        #print x

    if "_pcaplot_" in do:

        simprop = pickle_prefix
        filename = slugify(simprop)
        filepath = data_dir + str(filename) + "_pca"

        if use_h5:
            filepath = filepath + '.hdf5'
        else:
            filepath = filepath + '.p'

        if do_run_constr or (os.path.isfile(filepath) is False):

            params['plot_all'] = 0
            params['dumpsave']  = 0
            pca_var, pca_start, pca_max, mean_spike_freq, basis_error, basis_vaf, signals, times2, _ = randomnet(params)

        if myid == 0:

            if use_h5:
                results = rw_hdf5(filepath, export = export_m)
            else:
                results = pickle.load( gzip.GzipFile( filepath, "rb" ) )

            t, pca, pca_var  = results.get('t'), results.get('pca'), results.get('pca_var')

            exec("ax_pca = ax" + str(5+pos))

            #ax.text(-(t_analysis_delay+0.07), 0, str(round(pca_var[i],3)*100)+'%', ha="center", va="center", size=params['text.fontsize'])#, bbox=bbox_props)

            import matplotlib.patches as patches
            rect = patches.Rectangle((0,-4), 0.1, 10000, color="#C0C0C0")
            #rect.set_clip_on(False)
            ax_pca.add_patch(rect)

            linewidth0 = 1
            ax_pca.plot(t,pca[:,4]/max(abs(pca[:,4])),p1, linewidth=linewidth0, label=str(round(pca_var[4],3)*100)+'%')
            ax_pca.plot(t,pca[:,3]/max(abs(pca[:,3])),b1, linewidth=linewidth0, label=str(round(pca_var[3],3)*100)+'%')
            ax_pca.plot(t,pca[:,2]/max(abs(pca[:,2])),g1, linewidth=linewidth0, label=str(round(pca_var[2],3)*100)+'%')
            ax_pca.plot(t,pca[:,1]/max(abs(pca[:,1])),o1, linewidth=linewidth0, label=str(round(pca_var[1],3)*100)+'%')
            ax_pca.plot(t,pca[:,0]/max(abs(pca[:,0])),r1, linewidth=linewidth0, label=str(round(pca_var[0],3)*100)+'%')

            #ax.set_ylabel(str(round(pca_var[i],4)))
            ax_pca.axis(xmin=-0.5, xmax=1)
            ax_pca.axis(ymin=-1.05, ymax=1.05)



            lg = ax_pca.legend(labelspacing=0.05, loc=1, bbox_to_anchor=(1.05, 1.065), handlelength=0, handletextpad=0.1, numpoints=1) #
            #lg.draw_frame(False)
            fr = lg.get_frame()
            fr.set_lw(0.2)

            color_v2 = [p1,b1,g1,o1,r1] # [r1,o1,g1,b1,p1]
            txt = lg.get_texts()
            for i, t in enumerate(txt):
                t.set_color(color_v2[i])

            if "_first_" in do:
                adjust_spines(ax_pca, ['left','bottom'], d_out = d_out, d_down = d_down)
                ax_pca.set_ylabel("a.u.", labelpad=1)
                ax_pca.yaxis.set_ticks(array([-1,0,1]))
                ax_pca.set_yticklabels(('-1', '0', '1'))

            else:
                adjust_spines(ax_pca, ['bottom'], d_out = d_out, d_down = d_down)

            ax_pca.xaxis.set_ticks(array([-0.5,0,0.5,1]))
            ax_pca.set_xticklabels(('-0.5','0','0.5','1'))
            ax_pca.set_xlabel("s", labelpad=0)

            if "_noinv_" in do:
                ax_pca.set_title("PCA \n (w="+ str(conntype[0]['w']) +", no push-pull)")
            else:
                ax_pca.set_title("PCA \n (w="+ str(conntype[0]['w']) +")")

            filename="./figs/Pub/" + opt + "_" + str(pickle_prefix)
            if use_pc is False: plt.savefig(filename + ".pdf", dpi = 300) # save it
            plt.savefig(filename + imgf, dpi = 300) # save it

    if "_updown_" in do:
        pca_var, pca_start, pca_max, mean_spike_freq, basis_error, basis_vaf, signals, times2, _ = randomnet(params)

    if "_sigplot_" in do:

        params['seed0'] = 3
        simprop = pickle_prefix
        filename = slugify(simprop)
        filepath = data_dir + str(filename) + "_basis"

        if use_h5:
            filepath = filepath + '.hdf5'
        else:
            filepath = filepath + '.p'

        print filepath
        if do_run_constr or (os.path.isfile(filepath) is False):

            params['plot_all'] = 0
            params['dumpsave']  = 0

            if use_c:
                if myid == 0:
                    pca_var, pca_start, pca_max, mean_spike_freq, basis_error, basis_vaf, signals, times2, _ = randomnet(params)
            else:
                pca_var, pca_start, pca_max, mean_spike_freq, basis_error, basis_vaf, signals, times2, _ = randomnet(params)


        if myid == 0:

            if use_h5:
                results = rw_hdf5(filepath, export = export_m)
            else:
                results = pickle.load( gzip.GzipFile( filepath, "rb" ) )

            t_basis, basis_in  = results.get('t_basis'), results.get('basis_in')
            #print np.shape(basis_in)
            if "fig1" in opt:
                exec("ax_sig = ax" + str(5+pos))
            else:
                exec("ax_sig = ax" + str(pos))

            #ax.text(-(t_analysis_delay+0.07), 0, str(round(pca_var[i],3)*100)+'%', ha="center", va="center", size=params['text.fontsize'])#, bbox=bbox_props)

            import matplotlib.patches as patches
            import matplotlib.colors as mcolors

            c = mcolors.ColorConverter().to_rgb
            rvb = make_colormap([c(k1), c(ye1), 0.1, c(ye1), c(o1), 0.3,  c(o1), c(r1), 0.5, c(r1), c(g1), 0.7, c(g1), c(b1), 0.8, c(b1), c(p1)])
            
            linewidth0 = 1
            i = 0
            ii = 0

            if ("fig1" in opt) or ("fig3b" in opt):

                l = 20
                if "_specy1_" in do: l=100

                if "fig1test" in opt:
                    basis_in = mean(basis_in,1)
                    ax_sig.plot(t_basis-21,basis_in, linewidth=linewidth0)

                else:

                    if "fig1fens" in opt:
                        basis_in = basis_in[:,5:100]
                    elif "_specy1_" in do:
                        basis_in = basis_in
                    else:
                        basis_in = basis_in[:,36:100]

                    li = np.shape(basis_in)[1]
                    for i in range(li):
                        if ii < l:
                            mx = max(basis_in[:,i])
                            if mx > 0:
                                if "goc" in do:
                                    ax_sig.plot(t_basis-21,basis_in[:,i]*1, linewidth=linewidth0, color=rvb(1.*ii/l))
                                else:
                                    ax_sig.plot(t_basis-21,basis_in[:,i], linewidth=linewidth0, color=rvb(1.*ii/l))

                                ii += 1

                ax_sig.axis(xmin=-0.1, xmax=0.55)


                if "_test_" in do:
                    adjust_spines(ax_sig, ['left','bottom'], d_out = d_out, d_down = d_down)

                else:

                    if "_specy1_" in do:
                        #ax_sig.axis(ymin=0.4, ymax=1.1)
                        ax_sig.axis(ymin=0.718, ymax=0.746)
                    elif "_goc_" in do:
                        ax_sig.axis(ymin=0.00, ymax=0.015)
                    else:
                        ax_sig.axis(ymin=-0.005, ymax=0.5)

                    if "_first_" in do:
                        if "_specy1_" in do:
                            adjust_spines(ax_sig, ['left','bottom'], d_out = d_out, d_down = d_down)
                            ax_sig.set_ylabel(r"$\mathsf{z_i(t)}$", labelpad=-4)
                            ax_sig.yaxis.set_ticks(array([0.72, 0.73, 0.74]))
                            ax_sig.set_yticklabels(('0.72', '', '0.74'))
                        else:
                            if "_goc_" in do:
                                adjust_spines(ax_sig, ['left','bottom'], d_out = d_out, d_down = d_down)
                                #if "_end_" in do: ax_sig.set_ylabel(r"$\mathsf{z_i(t)}$", labelpad=0)
                                ax_sig.yaxis.set_ticks(array([0, 0.005,0.01,0.015]))
                                ax_sig.set_yticklabels(('0', '0.005', '0.01', '0.015'))
                            else:
                                adjust_spines(ax_sig, ['left','bottom'], d_out = d_out, d_down = d_down)
                                if "_end_" in do: ax_sig.set_ylabel(r"$\mathsf{z_i(t)}$", labelpad=0)
                                ax_sig.yaxis.set_ticks(array([0,0.1,0.2,0.3,0.4,0.5]))
                                ax_sig.set_yticklabels(('0', '0.1', '0.2', '0.3', '0.4', '0.5'))

                    else:
                        adjust_spines(ax_sig, ['bottom'], d_out = d_out, d_down = d_down)

                ax_sig.xaxis.set_ticks(array([0,0.2,0.4]))
                ax_sig.set_xticklabels(('0','0.2','0.4'))
                if ("fig1" in opt):
                    ax_sig.set_xlabel("s", labelpad=2)
                else:
                    ax_sig.set_xlabel("s", labelpad=2)


                if "_grc_" in do:
                    if "_noinv_" in do:
                        ax_sig.set_title("GC rates \n (w="+ str(conntype[0]['w']) +", no push-pull)")
                    else:
                        ax_sig.set_title("GC rates \n (w="+ str(conntype[0]['w']) +")")

                if "_ubc_" in do:
                    if "_noinv_" in do:
                        ax_sig.set_title("UBC rates \n (w="+ str(conntype[0]['w']) +", no push-pull)")
                    else:
                        ax_sig.set_title("UBC rates \n (w="+ str(conntype[0]['w']) +")")


                if ("fig3b" in opt):
                    rect = patches.Rectangle((0,0.48), 0.05, 0.01, color="#000000", zorder=1000)
                elif "_specy1_" in do:
                    rect = patches.Rectangle((0,0.747), 0.05, 0.0005, color="#000000", zorder=1000)
                else:
                    rect = patches.Rectangle((0,0.51), 0.05, 0.01, color="#000000", zorder=1000)
                rect.set_clip_on(False)
                ax_sig.add_patch(rect)

            else:

                l = 20
                basis_in = basis_in[:,50:100]
                li = np.shape(basis_in)[1]
                for i in range(li):
                    if ii < l:
                        mx = max(basis_in[:,i])
                        if mx > 0:
                            ax_sig.plot(t_basis-21,((basis_in[:,i]-basis_in[0,i])), linewidth=linewidth0, color=rvb(1.*ii/l))
                            ii += 1

                ax_sig.axis(xmin=-0.25, xmax=1)

                if "_first_" in do:
                    adjust_spines(ax_sig, ['left','bottom'], d_out = d_out, d_down = d_down)
                    ax_sig.set_ylabel(r"$\mathsf{z_i(t)}$", labelpad=-7)

                else:
                    adjust_spines(ax_sig, ['bottom'], d_out = d_out, d_down = d_down)

                ax_sig.xaxis.set_ticks(array([0,0.5,1]))
                ax_sig.set_xticklabels(('0','','1'))
                ax_sig.set_xlabel("s", labelpad=0)


            filename="./figs/Pub/" + opt + "_" + str(pickle_prefix)
            if use_pc is False: plt.savefig(filename + ".pdf", dpi = 300) # save it
            plt.savefig(filename + imgf, dpi = 300) # save it


    if "_runplot_" in do:

        params['seed0'] = 3
        simprop = pickle_prefix
        filename = slugify(simprop)
        filepath = data_dir + str(filename) + "_basis"

        if use_h5:
            filepath = filepath + '.hdf5'
        else:
            filepath = filepath + '.p'

        #print filepath
        if do_run_constr or (os.path.isfile(filepath) is False):

            params['plot_all'] = 0
            params['dumpsave']  = 0
            pca_var, pca_start, pca_max, mean_spike_freq, basis_error, basis_vaf, signals, times2, _ = randomnet(params)

        if myid == 0:

            if use_h5:
                results = rw_hdf5(filepath, export = export)
            else:
                results = pickle.load( gzip.GzipFile( filepath, "rb" ) )

            t_in, t_test, t_basis, x  = results.get('t_in'), results.get('t_test'), results.get('t_basis'), results.get('x')
            est, test, basis = results.get('est'), results.get('test'), results.get('basis')
            filtered_est_v, filtered_test_v, filtered_basis_v, uest, utest, ubasis = results.get('filtered_est_v'), results.get('filtered_test_v'), results.get('filtered_basis_v'), results.get('uest'), results.get('utest'), results.get('ubasis')


            n = shape(filtered_test_v)[1]

            basis_error = []
            basis_vaf = []
            for i in range(n):
                vaf = 1 - ( var(filtered_test_v[:,i]-utest[:,i]) / var(filtered_test_v[:,i] ) )
                if vaf < 0: vaf = 0

                error = (scipy.stats.pearsonr(utest[:,i], filtered_test_v[:,i])[0])**2

                basis_error.append(error)
                basis_vaf.append(vaf)
                print "Basis error:", basis_error[-1], "vaf:", basis_vaf[-1], "weight range:", max(x[:,i]), min(x[:,i]), "mean:", mean(abs(np.array([a for a in x[:,i] if a != 0]))), "zero weight percentage:", float(len(np.where(x[:,i]==0)[0]))/len(x[:,i])*100
            print "Basis error all:", mean(basis_error), "vaf all:", mean(basis_vaf)


            color_v.append([])

            for i in range(3):

                exec("ax_noise = ax" + str(i+1))
                exec("ax_basis = ax" + str(i+1+3))

                #filtered_est = filtered_est_v[:,i]
                filtered_test = filtered_test_v[:,i]
                filtered_basis = filtered_basis_v[:,i]

                #uest1 = uest[:,i]
                utest1 = utest[:,i]
                ubasis1 = ubasis[:,i]

                #ax_basis.plot(t_in, filtered_est/max(filtered_basis), 'k--')
                #ax_basis.plot(t_in, est, 'k:')
                #ax_basis.plot(t_in, uest1/max(filtered_basis), color = colgr[i])

                zo = 1
                if conntype[0]['w'] == 1.4:
                    zo = 2
                ax_noise.plot(t_test-27.9, utest1/max(filtered_basis), color = colgr[i], linewidth=2, linestyle=linestyle, zorder=zo)
                ax_basis.plot(t_basis-21, ubasis1/max(filtered_basis), color = colgr[i], label="w = "+ str(conntype[0]['w']), linewidth=2, linestyle=linestyle, zorder=zo)

                lg = ax_basis.legend(labelspacing=0.05, bbox_to_anchor=(0.42,0.85), loc=3, handlelength=2, handletextpad=0.1, numpoints=2)
                fr = lg.get_frame()
                fr.set_lw(0.2)

                color_v[-1].append(colgr[i])
                txt = lg.get_texts()
                for j, t in enumerate(txt):
                    t.set_color(color_v[j][i])

                if "_first_" in do:
                    #ax_noise.plot(t_test-27.9, test, color="gray", linewidth=1)
                    #ax_basis.plot(t_basis-21, basis, color="gray", linewidth=1)
                    pass
                if "_end_" in do:
                    ax_noise.plot(t_test-27.9, filtered_test/max(filtered_basis), 'k-', linewidth=1)
                    ax_basis.plot(t_basis-21, filtered_basis/max(filtered_basis), 'k-', linewidth=1)

                if "fig2b" in opt:
                    ax_basis.axis(ymin=-0.2, ymax=1.45)
                else:
                    ax_basis.axis(ymin=-1.0, ymax=1.3)
                ax_noise.axis(ymin=-1.4, ymax=1.6)

                if i == 0:
                    adjust_spines(ax_basis, ['left','bottom'], d_out = d_out, d_down = d_down)

                    #ax_basis.axis(xmin=-0.05, xmax=0.2)
                    #ax_noise.axis(xmin=0, xmax=0.25)
                    #ax_basis.xaxis.set_ticks(array([0,0.1,0.2]))
                    #ax_basis.set_xticklabels(('0', '0.1', '0.2'))

                    ax_basis.axis(xmin=-0.1, xmax=0.6)
                    ax_noise.axis(xmin=1.4, xmax=2.2)
                    ax_basis.xaxis.set_ticks(array([0,0.2,0.4,0.6]))
                    ax_basis.set_xticklabels(('0', '0.2', '0.4', '0.6'))

                    if "fig2b" in opt:
                        ax_basis.yaxis.set_ticks(array([0,1]))
                        ax_basis.set_yticklabels(('0','1'))
                    else:
                        ax_basis.yaxis.set_ticks(array([-1,0,1]))
                        ax_basis.set_yticklabels(('-1','0','1'))

                    if ("fig1" in opt):
                        ax_basis.set_xlabel("s", labelpad=2)
                    else:
                        ax_basis.set_xlabel("s", labelpad=0)

                    ax_basis.set_ylabel("a.u.", labelpad=2)
                    adjust_spines(ax_noise, ['left'], d_out = d_out, d_down = d_down)
                    ax_noise.yaxis.set_ticks(array([-1,0,1]))
                    ax_noise.set_yticklabels(('-1', '0', '1'))
                    ax_noise.set_ylabel("a.u.", labelpad=1)
                    ax_noise.set_title(r"Filter $\mathsf{\tau}$ = 10 ms")

                if i == 1:
                    adjust_spines(ax_basis, ['bottom'], d_out = d_out, d_down = d_down)

                    ax_basis.axis(xmin=-0.1, xmax=0.6)
                    ax_noise.axis(xmin=1.4, xmax=2.2)
                    ax_basis.xaxis.set_ticks(array([0,0.2,0.4,0.6]))
                    ax_basis.set_xticklabels(('0', '0.2', '0.4', '0.6'))

                    if ("fig1" in opt):
                        ax_basis.set_xlabel("s", labelpad=2)
                    else:
                        ax_basis.set_xlabel("s", labelpad=0)

                    adjust_spines(ax_noise, [], d_out = d_out, d_down = d_down)
                    ax_noise.set_title(r"Filter $\mathsf{\tau}$ = 100 ms")

                if i == 2:
                    adjust_spines(ax_basis, ['bottom'], d_out = d_out, d_down = d_down)

                    #ax_basis.axis(xmin=-0.4, xmax=2)
                    #ax_noise.axis(xmin=0, xmax=2.4)
                    #ax_basis.xaxis.set_ticks(array([0,1,2]))
                    #ax_basis.set_xticklabels(('0', '1', '2'))

                    ax_basis.axis(xmin=-0.1, xmax=0.6)
                    ax_noise.axis(xmin=1.4, xmax=2.2)
                    ax_basis.xaxis.set_ticks(array([0,0.2,0.4,0.6]))
                    ax_basis.set_xticklabels(('0', '0.2', '0.4', '0.6'))

                    if ("fig1" in opt):
                        ax_basis.set_xlabel("s", labelpad=2)
                    else:
                        ax_basis.set_xlabel("s", labelpad=0)

                    adjust_spines(ax_noise, [], d_out = d_out, d_down = d_down)
                    ax_noise.set_title(r"Filter $\mathsf{\tau}$ = 500 ms")

            #filename="./figs/Pub/" + str(pickle_prefix)
            filename="./figs/Pub/" + opt + "_" + str(pickle_prefix)
            if use_pc is False: plt.savefig(filename + ".pdf", dpi = 300) # save it
            plt.savefig(filename + imgf, dpi = 300) # save it


    if "_relalpha_" in do:

        prefix_plot = prefix[:]

        vec_string = str(do).split("_vec")[1].split("_")[0]
        iline = vec_string[0]
        stype = vec_string[1:]

        prefix_plot = prefix_plot + "_vec" + iline + stype
        filepath = data_dir + prefix_plot + ".hdf5"

        pl = rw_hdf5(filepath, export = export_m)

        p_v = pl['p_v']

        f_v_m = nanmean(pl['f_v'][0])
        stdf_v_m = nanmean(pl['stdf_v'][0])

        vaf1_v_m = nanmean(pl['vaf1_v'])
        vaf2_v_m = nanmean(pl['vaf2_v'])
        vaf3_v_m = nanmean(pl['vaf3_v'])
        err1_v_m = nanmean(pl['err1_v'])
        err2_v_m = nanmean(pl['err2_v'])
        err3_v_m = nanmean(pl['err3_v'])
        if "_4thb" in do:
            vaf4_v_m = nanmean(pl['vaf4_v'])
            err4_v_m = nanmean(pl['err4_v'])
        ly_v = pl['ly_v']

        mx1_v_m = nanmean(pl['mx1_v'][:,:,0])
        mx2_v_m = nanmean(pl['mx2_v'][:,:,0])
        mx3_v_m = nanmean(pl['mx3_v'][:,:,0])

        stdx1_v_m = nanmean(pl['mx1_v'][:,:,1])
        stdx2_v_m = nanmean(pl['mx2_v'][:,:,1])
        stdx3_v_m = nanmean(pl['mx3_v'][:,:,1])

        nullp1_v_m = nanmean(pl['nullp1_v'])
        nullp2_v_m = nanmean(pl['nullp2_v'])
        nullp3_v_m = nanmean(pl['nullp3_v'])

        exec("ax_a = ax" + str(pos))

        m = np.array([err1_v_m, err2_v_m, err3_v_m])
        m = mean(m,0)
        m_r = max(m)
        print ridge_alpha, m_r
        ax_a.semilogx(ridge_alpha, m_r, '*')

        filename="./figs/Pub/" + opt + "_" + str(pickle_prefix)
        if use_pc is False: plt.savefig(filename + ".pdf", dpi = 300) # save it
        plt.savefig(filename + imgf, dpi = 300) # save it


    if "_lyap_" in do:
        pickle_prefix_ly = prefix_ly + "_" + iline + "w" + "v" + str(val)
        params['pickle_prefix'] = pickle_prefix_ly
        params['pickle_prefix_ly'] = pickle_prefix_ly
        ly = lyap(params, runs = 1)

    else:

        params['plot_all'] = 1
        params['dumpsave']  = 0

        if "_vec" in do:

            if myid == 0: print "- Vector run: " + pickle_prefix

            params['plot_all'] = 2
            params['dumpsave']  = 1

            vec_string = str(do).split("_vec")[1].split("_")[0]
            iline = vec_string[0]
            stype = vec_string[1:]

            if "_2vec" in do:
                vec_string2 = str(do).split("_2vec")[1].split("_")[0]
                iline2 = vec_string2[0]
                stype2 = vec_string2[1:]

            exec("vec = vec"+iline+stype)

            p_v = nans(len(vec))
            ly_v = nans(len(vec))

            f_v = nans((len(N), runs, len(vec)))
            stdf_v = nans((len(N), runs, len(vec)))

            err1_v = nans((runs, len(vec)))
            vaf1_v = nans((runs, len(vec)))
            mx1_v = nans((runs, len(vec), 2))
            minmaxx1_v = nans((runs, len(vec), 2))
            nullp1_v = nans((runs, len(vec)))

            err2_v = nans((runs, len(vec)))
            vaf2_v = nans((runs, len(vec)))
            mx2_v = nans((runs, len(vec), 2))
            minmaxx2_v = nans((runs, len(vec), 2))
            nullp2_v = nans((runs, len(vec)))

            err3_v = nans((runs, len(vec)))
            vaf3_v = nans((runs, len(vec)))
            mx3_v = nans((runs, len(vec), 2))
            minmaxx3_v = nans((runs, len(vec), 2))
            nullp3_v = nans((runs, len(vec)))

            if "_4thb" in do:
                err4_v = nans((runs, len(vec)))
                vaf4_v = nans((runs, len(vec)))
                mx4_v = nans((runs, len(vec), 2))
                minmaxx4_v = nans((runs, len(vec), 2))
                nullp4_v = nans((runs, len(vec)))


            prefix_plot = prefix[:]
            if "_specx" in do:
                spec = str(do).split("_specx")[1].split("_")[0]
                prefix_plot = prefix_plot + "_specx" + str(int(spec))

            prefix_plot = prefix_plot + "_vec" + iline + stype

            filepath = data_dir + prefix_plot + ".hdf5"

            if (os.path.isfile(filepath) is False) or (fit_restart_mean is True):

                for r in range(runs):

                    if "_relyap_" in do:
                        if r > 0:
                            restart_lyap = False
                        else:
                            restart_lyap = True

                    params['seed0'] = r+1

                    if use_c == False:

                        for i, val in enumerate(vec):

                            p = val

                            pickle_prefix = prefix + "_" + iline + stype + "v" + str(val)
                            filepath = data_dir + pickle_prefix + "_fit_results"
                            pickle_prefix_ly = prefix_ly + "_" + iline + stype + "v" + str(val)

                            if r > 0: filepath = filepath + "_run" + str(r)

                            if use_h5:
                                filepath = filepath + '.hdf5'
                            else:
                                filepath = filepath + '.p'

                            filepath2 = data_dir + pickle_prefix + "_results_pop_randomnet.hdf5"
                            if ((os.path.isfile(filepath) is True) or (os.path.isfile(filepath2) is True)) and (fit_restart is False):

                            #if (os.path.isfile(filepath) is True) and (fit_restart is False):

                               if myid == 0: print "- Already computed constr. for", p

                            else:

                                params['conntype'][int(iline)][stype] = val

                                if "_2vec" in do:
                                    params['conntype'][int(iline2)][stype2] = val

                                if myid == 0: print "- This run: " + pickle_prefix

                                if "_norunly" not in do:
                                    filepath = data_dir + pickle_prefix_ly + "_lyap.hdf5"
                                    if (os.path.isfile(filepath) is False) or restart_lyap:
                                        params['plot_all'] = 0
                                        params['dumpsave']  = 0
                                        params['pickle_prefix'] = pickle_prefix_ly
                                        params['pickle_prefix_ly'] = pickle_prefix_ly
                                        ly = lyap(params, runs = 10)
                                        params['plot_all'] = 2
                                        params['dumpsave']  = 1

                                params['pickle_prefix'] = pickle_prefix
                                params['pickle_prefix_ly'] = pickle_prefix_ly

                                params['do_run'] = 1
                                params['do_run_constr'] = 2 # do not try to run construction
                                #params['seed0'] = r+1
                                pca_var, pca_start, pca_max, mean_spike_freq, err, vaf, signals, times2, x = randomnet(params)

                        barrier(use_mpi, use_pc)

                        for i in range(int(myid), len(vec), int(psize)):

                            val = vec[i]

                            pickle_prefix = prefix + "_" + iline + stype + "v" + str(val)
                            filepath = data_dir + pickle_prefix + "_fit_results"
                            pickle_prefix_ly = prefix_ly + "_" + iline + stype + "v" + str(val)
                            if r > 0: filepath = filepath + "_run" + str(r)

                            p = val

                            if use_h5:
                                filepath = filepath + '.hdf5'
                            else:
                                filepath = filepath + '.p'

                            if (os.path.isfile(filepath) is True) and (fit_restart is False):

                                #p, err, vaf, ly, mstdx = save_results(pickle_prefix, use_pc = use_pc, use_h5 = use_h5)
                                print "- Already computed for", p, "\n" #, ", err:", err, ", vaf:", vaf, ", ly:", ly, ", run:", r ,"\n"

                            else:

                                params['conntype'][int(iline)][stype] = val
                                params['pickle_prefix'] = pickle_prefix

                                print "- id:", myid, ", this constr. run: " + pickle_prefix, ", run:", r ,"\n"

                                params['plot_all'] = 1
                                params['do_run'] = 0
                                params['do_run_constr'] = 3 # run construction on one node
                                pca_var, pca_start, pca_max, mean_spike_freq, err, vaf, signals, times2, x = randomnet(params)

                                mstdx = []
                                for j, t2 in enumerate(tau2_basis):
                                    xabs = abs(x[:,j])
                                    xabs = xabs[np.where(xabs>0)] # remove zero entries
                                    mstdx.append([ mean(xabs), std(xabs), max(x[:,j]), min(x[:,j]), float(len(np.where(x[:,j]==0)[0]))/len(x[:,j])*100 ])

                                fstd = nans((len(N),2))
                                if mean_spike_freq is not None:

                                    for n in range(len(N)):
                                        fstd[n,0] = mean(mean_spike_freq[n])
                                        fstd[n,1] = std(mean_spike_freq[n])

                                print p, fstd


                                filepath = data_dir + pickle_prefix_ly + "_lyap.hdf5"
                                ly = rw_hdf5(filepath, export = export)['ly']

                                save_results(pickle_prefix, p, err = err, vaf = vaf, ly = ly, mstdx = mstdx, fstd = fstd, params = params, use_h5 = use_h5, run = r, data_dir=data_dir)

                                filepath = data_dir + pickle_prefix + "_results_pop_randomnet.hdf5"
                                os.remove(filepath)

                        barrier(use_mpi = True, use_pc = use_pc)

                    else:

                        params['plot_all'] = 2
                        params['dumpsave']  = 0

                        for j in range(int(myid), len(vec), int(psize)):

                            val = vec[j]

                            pickle_prefix = prefix + "_" + iline + stype + "v" + str(val)
                            filepath = data_dir + pickle_prefix + "_fit_results"
                            pickle_prefix_ly = prefix_ly + "_" + iline + stype + "v" + str(val)
                            if r > 0: filepath = filepath + "_run" + str(r)

                            p = val

                            if use_h5:
                                filepath = filepath + '.hdf5'
                            else:
                                filepath = filepath + '.p'

                            params['conntype'][int(iline)][stype] = val

                            if (os.path.isfile(filepath) is True) and (fit_restart is False):

                                print "- Already computed for", p, "\n"

                                if restart_lyap:
                                    print "- Redoing Lyap\n"
                                    params['pickle_prefix'] = pickle_prefix_ly
                                    params['pickle_prefix_ly'] = pickle_prefix_ly
                                    ly = lyap(params, runs = 10)

                                    params['pickle_prefix'] = pickle_prefix
                                    params['pickle_prefix_ly'] = pickle_prefix_ly
                                    p, err, vaf, _, mstdx, fstd = save_results(pickle_prefix, use_pc = use_pc, use_h5 = use_h5, run = r, export = export, data_dir=data_dir)
                                    save_results(pickle_prefix, p, err = err, vaf = vaf, ly = ly, mstdx = mstdx, fstd = fstd, params = params, use_h5 = use_h5, run = r, data_dir=data_dir)

                                if readd_lyap:
                                    filepath_ly = data_dir + pickle_prefix_ly + "_lyap.hdf5"
                                    ly = rw_hdf5(filepath_ly, export = export)['ly']
                                    p, err, vaf, _, mstdx, fstd = save_results(pickle_prefix, use_pc = use_pc, use_h5 = use_h5, run = r, export = export, data_dir=data_dir)
                                    save_results(pickle_prefix, p, err = err, vaf = vaf, ly = ly, mstdx = mstdx, fstd = fstd, params = params, use_h5 = use_h5, run = r, data_dir=data_dir)


                            else:

                                print "- This run (mpi used for loop): " + pickle_prefix

                                if "_norunly" not in do:
                                    filepath = data_dir + pickle_prefix_ly + "_lyap.hdf5"
                                    if (os.path.isfile(filepath) is False) or restart_lyap:
                                        params['pickle_prefix'] = pickle_prefix_ly
                                        params['pickle_prefix_ly'] = pickle_prefix_ly
                                        ly = lyap(params, runs = 10)
                                    else:
                                        ly = rw_hdf5(filepath, export = export)['ly']
                                else:
                                    ly = -1

                                params['pickle_prefix'] = pickle_prefix
                                params['pickle_prefix_ly'] = pickle_prefix_ly

                                pca_var, pca_start, pca_max, mean_spike_freq, err, vaf, signals, times2, x = randomnet(params)

                                mstdx = []
                                for j, t2 in enumerate(tau2_basis):
                                    xabs = abs(x[:,j])
                                    xabs = xabs[np.where(xabs>0)] # remove zero entries
                                    mstdx.append([ mean(xabs), std(xabs), max(x[:,j]), min(x[:,j]), float(len(np.where(x[:,j]==0)[0]))/len(x[:,j])*100 ])

                                fstd = nans((len(N),2))
                                if mean_spike_freq is not None:

                                    for n in range(len(N)):
                                        fstd[n,0] = mean(mean_spike_freq[n])
                                        fstd[n,1] = std(mean_spike_freq[n])

                                print p, fstd

                                save_results(pickle_prefix, p, err = err, vaf = vaf, ly = ly, mstdx = mstdx, fstd = fstd, params = params, use_h5 = use_h5, run = r, data_dir=data_dir)

                        barrier(use_mpi = True, use_pc = use_pc)

                    if myid == 0:

                        for i, val in enumerate(vec):

                            pickle_prefix = prefix + "_" + iline + stype + "v" + str(val)
                            pickle_prefix_ly = prefix_ly + "_" + iline + stype + "v" + str(val)
                            p = val

                            p, err, vaf, ly, mstdx, fstd = save_results(pickle_prefix, use_pc = use_pc, use_h5 = use_h5, run = r, export = export, data_dir=data_dir)

                            filepath = data_dir + pickle_prefix_ly + "_lyap.hdf5"
                            if (os.path.isfile(filepath) is True):
                                ly = rw_hdf5(filepath, export = export)['ly']

                            p_v[i] = p
                            ly_v[i] = ly

                            if fstd is not None:
                                for n in range(len(N)):
                                    f_v[n,r,i] = fstd[n,0]
                                    stdf_v[n,r,i] = fstd[n,1]

                            err1_v[r,i] = err[0]
                            vaf1_v[r,i] = vaf[0]
                            mx1_v[r,i,0] = mstdx[0][0]
                            mx1_v[r,i,1] = mstdx[0][1]
                            minmaxx1_v[r,i,0] = mstdx[0][2]
                            minmaxx1_v[r,i,1] = mstdx[0][3]
                            nullp1_v[r,i] = mstdx[0][4]

                            err2_v[r,i] = err[1]
                            vaf2_v[r,i] = vaf[1]
                            mx2_v[r,i,0] = mstdx[1][0]
                            mx2_v[r,i,1] = mstdx[1][1]
                            minmaxx2_v[r,i,0] = mstdx[1][2]
                            minmaxx2_v[r,i,1] = mstdx[1][3]
                            nullp2_v[r,i] = mstdx[1][4]

                            err3_v[r,i] = err[2]
                            vaf3_v[r,i] = vaf[2]
                            mx3_v[r,i,0] = mstdx[2][0]
                            mx3_v[r,i,1] = mstdx[2][1]
                            minmaxx3_v[r,i,0] = mstdx[2][2]
                            minmaxx3_v[r,i,1] = mstdx[2][3]
                            nullp3_v[r,i] = mstdx[2][4]

                            if "_4thb" in do:
                                err4_v[r,i] = err[3]
                                vaf4_v[r,i] = vaf[3]
                                mx4_v[r,i,0] = mstdx[3][0]
                                mx4_v[r,i,1] = mstdx[3][1]
                                minmaxx4_v[r,i,0] = mstdx[3][2]
                                minmaxx4_v[r,i,1] = mstdx[3][3]
                                nullp4_v[r,i] = mstdx[3][4]


                        vaf1_v_m = nanmean(vaf1_v)
                        vaf2_v_m = nanmean(vaf2_v)
                        vaf3_v_m = nanmean(vaf3_v)

                        err1_v_m = nanmean(err1_v)
                        err2_v_m = nanmean(err2_v)
                        err3_v_m = nanmean(err3_v)

                        if "_4thb" in do:
                            vaf4_v_m = nanmean(vaf4_v)
                            err4_v_m = nanmean(err4_v)

                        f_v_m = nanmean(f_v[0])
                        stdf_v_m = nanmean(stdf_v[0])

                        #print err1_v[:,10]

                        if (r == runs-1):

                            pl = {}
                            pl['p_v'] = p_v

                            pl['f_v'] = f_v
                            pl['stdf_v'] = stdf_v

                            pl['vaf1_v'] = vaf1_v
                            pl['vaf2_v'] = vaf2_v
                            pl['vaf3_v'] = vaf3_v

                            pl['err1_v'] = err1_v
                            pl['err2_v'] = err2_v
                            pl['err3_v'] = err3_v

                            pl['mx1_v'] = mx1_v
                            pl['mx2_v'] = mx2_v
                            pl['mx3_v'] = mx3_v

                            pl['minmaxx1_v'] = minmaxx1_v
                            pl['minmaxx2_v'] = minmaxx2_v
                            pl['minmaxx3_v'] = minmaxx3_v

                            pl['nullp1_v'] = nullp1_v
                            pl['nullp2_v'] = nullp2_v
                            pl['nullp3_v'] = nullp3_v

                            if "_4thb" in do:
                                pl['vaf4_v'] = vaf4_v
                                pl['err4_v'] = err4_v
                                pl['mx4_v'] = mx4_v
                                pl['minmaxx4_v'] = minmaxx4_v
                                pl['nullp4_v'] = nullp4_v

                            pl['ly_v'] = ly_v
                            filepath = data_dir + prefix_plot + ".hdf5"
                            rw_hdf5(filepath, pl)


                        fig2 = plt.figure('vectemp')
                        plt.clf()

                        gsX = matplotlib.gridspec.GridSpec(5, 1,
                           width_ratios=[1],
                           height_ratios=[1,1,1,1,1]
                           )

                        ax01b = plt.subplot(gsX[0,0])
                        ax02b = plt.subplot(gsX[1,0])
                        ax03b = plt.subplot(gsX[2,0])
                        ax04b = plt.subplot(gsX[3,0])
                        ax05b = plt.subplot(gsX[4,0])

                        ax01b.plot(p_v, err1_v[r,:], color=colgr[0], linestyle = linestyle, linewidth=linewidth, clip_on = False)
                        if "_4thb" in do: ax01b.plot(p_v, err4_v[r,:], color=colgr[3], linestyle = linestyle, linewidth=linewidth, clip_on = False)
                        ax01b.plot(p_v, err2_v[r,:], color=colgr[1], linestyle = linestyle, linewidth=linewidth, clip_on = False)
                        ax01b.plot(p_v, err3_v[r,:], color=colgr[2], linestyle = linestyle, linewidth=linewidth, clip_on = False)

                        ax02b.plot(p_v, ly_v, color=color_ly2, linestyle = linestyle, linewidth=linewidth)
                        ax02b.axhline(y=0, color="k", linestyle = "dashed", linewidth=0.5)
                        ax02b.axis(xmin=xmin, xmax=xmax)

                        ax03b.plot(p_v, mx1_v[r,:,0], color=colgr[0], linestyle = linestyle, linewidth=linewidth, clip_on = False)
                        if "_4thb" in do: ax03b.plot(p_v, mx4_v[r,:], color=colgr[3], linestyle = linestyle, linewidth=linewidth, clip_on = False)
                        ax03b.plot(p_v, mx2_v[r,:,0], color=colgr[1], linestyle = linestyle, linewidth=linewidth, clip_on = False)
                        ax03b.plot(p_v, mx3_v[r,:,0], color=colgr[2], linestyle = linestyle, linewidth=linewidth, clip_on = False)

                        ax04b.plot(p_v, nullp1_v[r,:], color=colgr[0], linestyle = linestyle, linewidth=linewidth, clip_on = False)
                        if "_4thb" in do: ax04b.plot(p_v, nullp4_v[r,:], color=colgr[3], linestyle = linestyle, linewidth=linewidth, clip_on = False)
                        ax04b.plot(p_v, nullp2_v[r,:], color=colgr[1], linestyle = linestyle, linewidth=linewidth, clip_on = False)
                        ax04b.plot(p_v, nullp3_v[r,:], color=colgr[2], linestyle = linestyle, linewidth=linewidth, clip_on = False)

                        ax05b.errorbar(p_v, f_v[0,r,:], yerr = stdf_v[0,r,:], color=color_ly2, linestyle = linestyle, linewidth=linewidth, clip_on = False)

                        filename="./figs/Pub/" + str(prefix_plot) + "_run" + str(r)
                        if use_pc is False: plt.savefig(filename  + ".pdf", dpi = 300) # save it
                        plt.savefig(filename + imgf, dpi = 300) # save it

                    barrier(use_mpi = True, use_pc = use_pc)

            else:

                if myid == 0:

                    import csv

                    pl = rw_hdf5(filepath, export = export_m)

                    p_v = pl['p_v']

                    f_v_m = nanmean(pl['f_v'][0])
                    stdf_v_m = nanmean(pl['stdf_v'][0])

                    vaf1_v_m = nanmean(pl['vaf1_v'])
                    vaf2_v_m = nanmean(pl['vaf2_v'])
                    vaf3_v_m = nanmean(pl['vaf3_v'])
                    err1_v_m = nanmean(pl['err1_v'])
                    err2_v_m = nanmean(pl['err2_v'])
                    err3_v_m = nanmean(pl['err3_v'])
                    if "_4thb" in do:
                        vaf4_v_m = nanmean(pl['vaf4_v'])
                        err4_v_m = nanmean(pl['err4_v'])
                    ly_v = pl['ly_v']

                    mx1_v_m = nanmean(pl['mx1_v'][:,:,0])
                    mx2_v_m = nanmean(pl['mx2_v'][:,:,0])
                    mx3_v_m = nanmean(pl['mx3_v'][:,:,0])

                    stdx1_v_m = nanmean(pl['mx1_v'][:,:,1])
                    stdx2_v_m = nanmean(pl['mx2_v'][:,:,1])
                    stdx3_v_m = nanmean(pl['mx3_v'][:,:,1])

                    nullp1_v_m = nanmean(pl['nullp1_v'])
                    nullp2_v_m = nanmean(pl['nullp2_v'])
                    nullp3_v_m = nanmean(pl['nullp3_v'])

                    #if export_m:
                    #    filepathtxt = export_m + "/" +prefix_plot + ".txt"
                    #    filepathtxt2 = export_m + "/" +prefix_plot + "2.txt"
                    #else:
                    #    filepathtxt = data_dir + prefix_plot + ".txt"
                    #    filepathtxt2 = data_dir + prefix_plot + "2.txt"

                    filepathtxt = "./figs/txt/" + prefix_plot + ".txt"
                    filepathtxt2 = "./figs/txt/" + prefix_plot + "2.txt"


                    fd = open(filepathtxt2, 'wb')
                    writer = csv.writer(fd, delimiter='\t')
                    writer.writerow( ('f', 'stdf') )
                    for ir in range(10):
                        for i, w in enumerate(p_v):
                            writer.writerow( (pl['f_v'][0][ir][i], pl['stdf_v'][0][ir][i]) )
                    fd.close()

                    fd = open(filepathtxt, 'wb')
                    writer = csv.writer(fd, delimiter='\t')
                    writer.writerow( ('weight','lyapunov','err1','err2','err3','m1','m2','m3','std1','std2','std3','null1','null2','null3', 'f', 'stdf') )
                    for i, w in enumerate(p_v):
                        writer.writerow( (w, ly_v[i], err1_v_m[i], err2_v_m[i], err3_v_m[i], mx1_v_m[i], mx2_v_m[i], mx3_v_m[i], stdx1_v_m[i], stdx2_v_m[i], stdx3_v_m[i], nullp1_v_m[i], nullp2_v_m[i], nullp3_v_m[i], f_v_m[i], stdf_v_m[i]) )
                    fd.close()


            if myid == 0:

                fig1 = plt.figure('vec')

                ax01b = ax01
                if "_noly" not in do: ax02b = ax02
                if "_fstd" in do: ax02b = ax02

                if "_lyline_" in do:
                    if np.nanmax(ly_v) > 0:
                        ly_cross = len(ly_v)-np.where(ly_v[::-1]<=0)[0][0]
                        ly_border = (p_v[ly_cross-1]+p_v[ly_cross])/2
                        ax01.axvline(x=ly_border*normp,color=color_ly, linestyle = linestyle)
                        if "_noly" not in do: ax02.axvline(x=ly_border*normp,color=color_ly , linestyle = linestyle)


                if (("fig1" in opt) and ("_ax3_" in do) and ("_noinv_" not in do)) or (("fig3" in opt) and ("_ax1_" in do) and ("_ifun2_" not in do)):
                    if "_onlyslow_" not in do: ax01b.plot(p_v, err1_v_m, color=colgr[0], linestyle = linestyle, linewidth=linewidth, clip_on = False)
                    if "_4thb" in do: ax01b.plot(p_v, err4_v_m, color=colgr[3], linestyle = linestyle, linewidth=linewidth, clip_on = False)
                    if "_onlyslow_" not in do: ax01b.plot(p_v, err2_v_m, color=colgr[1], linestyle = linestyle, linewidth=linewidth, clip_on = False)
                    ax01b.plot(p_v, err3_v_m, color=colgr[2], linestyle = linestyle, linewidth=linewidth, clip_on = False)

                else:
                    if "_onlyslow_" not in do: ax01b.plot(p_v*normp, err1_v_m, color=colgr[0], linestyle = linestyle, label=r"$\tau$ = 10 ms", linewidth=linewidth, clip_on = False)
                    if "_4thb" in do: ax01b.plot(p_v*normp, err4_v_m, color=colgr[3], linestyle = linestyle, label=r"$\tau$ = 50 ms", linewidth=linewidth, clip_on = False)
                    if "_onlyslow_" not in do: ax01b.plot(p_v*normp, err2_v_m, color=colgr[1], linestyle = linestyle, label=r"$\tau$ = 100 ms", linewidth=linewidth, clip_on = False)
                    ax01b.plot(p_v*normp, err3_v_m, color=colgr[2], linestyle = linestyle, label=r"$\tau$ = 500 ms", linewidth=linewidth, clip_on = False)


                ax01b.axis(xmin=xmin, xmax=xmax)


                if "_noly" not in do:

                    if "_dots" in do:
                        ax02b.plot(p_v*normp, ly_v, 'o',color=color_ly2, markersize=3, markeredgecolor = 'none')
                    else:
                        ax02b.plot(p_v*normp, ly_v, color=color_ly2, linestyle = linestyle, linewidth=linewidth)
                    ax02b.axhline(y=0, color="k", linestyle = "dashed", linewidth=0.5)
                    ax02b.axis(xmin=xmin, xmax=xmax)

                    if lymax:
                        if lymin:
                            ax02b.axis(ymin=lymin, ymax=lymax)
                        else:
                            ax02b.axis(ymin=-1, ymax=lymax)

                elif "_fstd" in do:
                    ax02b.semilogy(p_v, f_v_m, color=color_ly2, linestyle = linestyle, linewidth=linewidth)
                    ax02b.semilogy(p_v, stdf_v_m, color=p1, linestyle = linestyle, linewidth=linewidth)
                    ax02b.axis(xmin=xmin, xmax=xmax)
                    ax02b.axis(ymin=0.01, ymax=2000)

                if "_first_" in do:

                    if "_noly" not in do:

                        if ("fig2" in opt):
                            adjust_spines(ax02b, ['left'], d_out = d_out, d_down = d_down)
                        else:
                            adjust_spines(ax02b, ['left','bottom'], d_out = d_out, d_down = d_down)

                        if ("figRe6" in opt):
                            if ("_ax2" in do):
                                ax01b.set_title(r"No push-pull input")
                            else:
                                ax02b.set_ylabel("Lyapunov exp.", labelpad=6)

                        elif "fig5" in opt:
                            ax02b.set_ylabel("Lyapunov exp.", labelpad=6)
                        else:
                            ax02b.set_ylabel("Lyapunov exponent", labelpad=2)

                        if lymax == 17:
                            ax02b.yaxis.set_ticks(array([0,5,10,15]))
                            ax02b.set_yticklabels(('0','5','10','15'))
                        elif lymax == 4.2:
                            ax02b.yaxis.set_ticks(array([0,2,4]))
                            ax02b.set_yticklabels(('0','2','4'))
                        elif lymax == 7:
                            ax02b.yaxis.set_ticks(array([0,2,4,6]))
                            ax02b.set_yticklabels(('0','2','4','6'))
                        elif lymin == -3:
                            ax02b.yaxis.set_ticks(array([-2, -1, 0]))
                            ax02b.set_yticklabels(('-2','-1','0'))
                        elif lymax == 0.5:
                            ax02b.yaxis.set_ticks(array([-0.5,0,0.5]))
                            ax02b.set_yticklabels(('-0.5','0','0.5'))
                        elif lymax == 2:
                            ax02b.yaxis.set_ticks(array([0,1,2]))
                            ax02b.set_yticklabels(('0','1','2'))
                        elif lymax == 3:
                            ax02b.yaxis.set_ticks(array([0,1,2,3]))
                            ax02b.set_yticklabels(('0','1','2','3'))


                        if ("_horly" in do) or ("fig2" in opt):
                            adjust_spines(ax01b, ['left','bottom'], d_out = d_out, d_down = d_down)
                        else:
                            adjust_spines(ax01b, ['left'], d_out = d_out, d_down = d_down)

                    elif "_fstd" in do:
                        adjust_spines(ax01b, ['left'], d_out = d_out, d_down = d_down)
                        adjust_spines(ax02b, ['left','bottom'], d_out = d_out, d_down = d_down)

                        ax02b.set_ylabel(r"mean($\mathsf{z_i}$), std($\mathsf{z_i}$)", labelpad=0)

                        ax02b.yaxis.set_ticks(array([0.01,0.1,1,10,100,1000]))
                        ax02b.set_yticklabels(('0.01','0.1','1','10','100','1000'))

                    else:

                        if ("fig3b" in opt):
                            adjust_spines(ax01b, ['left'], d_out = d_out, d_down = d_down)
                        else:
                            adjust_spines(ax01b, ['left','bottom'], d_out = d_out, d_down = d_down)

                    if ("figRe6" in opt) and ("_ax2" in do):
                        pass
                    else:
                        ax01b.set_ylabel(r"goodness of fit $\mathsf{(R^{2})}$", labelpad=2)

                    ax01b.yaxis.set_ticks(array([0,0.2,0.4,0.6,0.8,1]))
                    ax01b.set_yticklabels(('0','0.2','0.4','0.6','0.8','1'))

                else:

                    if ("fig2" in opt):
                        adjust_spines(ax02b, [], d_out = d_out, d_down = d_down)
                        adjust_spines(ax01b, ['bottom'], d_out = d_out, d_down = d_down)

                    elif ("_noly" not in do) or ("_fstd" in do):
                        adjust_spines(ax01b, [], d_out = d_out, d_down = d_down)
                        adjust_spines(ax02b, ['bottom'], d_out = d_out, d_down = d_down)

                    else:
                        adjust_spines(ax01b, ['bottom'], d_out = d_out, d_down = d_down)


                if ("_noly" not in do) or ("_fstd" in do):

                    if ("fig2" in opt):
                        ax_ticks = ax01b
                    else:
                        ax_ticks = ax02b

                    if "_vec3w_" in do:
                        ax_ticks.set_xlabel("b", labelpad=2)
                    else:
                        if "_normp_" in do:
                            ax_ticks.set_xlabel("w*a", labelpad=0)
                        else:
                            ax_ticks.set_xlabel("w", labelpad=0)

                    if "_normp_" in do:
                        ax_ticks.xaxis.set_ticks(array([0,0.2,0.4,0.6,0.8,1]))
                        ax_ticks.set_xticklabels(('0','0.2','0.4','0.6','0.8','1'))
                    elif xmax==4:
                        ax_ticks.xaxis.set_ticks(array([0,1,2,3,4]))
                        ax_ticks.set_xticklabels(('0','1','2','3','4'))
                    elif xmax==3:
                        ax_ticks.xaxis.set_ticks(array([0,1,2]))
                        ax_ticks.set_xticklabels(('0','1','2'))
                    elif xmax==40:
                        ax_ticks.xaxis.set_ticks(array([0,10,20,30,40]))
                        ax_ticks.set_xticklabels(('0','10','20','30','40'))
                    elif xmax==0.02:
                        ax_ticks.xaxis.set_ticks(array([0,0.005,0.01,0.015,0.02]))
                        ax_ticks.set_xticklabels(('0','','0.01','','0.02'))
                    elif xmax==0.01:
                        ax_ticks.xaxis.set_ticks(array([0,0.005,0.01]))
                        ax_ticks.set_xticklabels(('0','0.005','0.01'))
                    elif xmax==0.03:
                        ax_ticks.xaxis.set_ticks(array([0,0.01,0.02,0.03]))
                        ax_ticks.set_xticklabels(('0','0.01','0.02','0.03'))

                elif "fig3b" not in opt:

                    if ("fig2" in opt):
                        ax_ticks = ax01b
                    else:
                        ax_ticks = ax01b

                    ax_ticks.set_xlabel("w", labelpad=0)

                    if "_normp_" in do:
                        pass
                    elif xmax==4:
                        ax_ticks.xaxis.set_ticks(array([0,1,2,3,4]))
                        ax_ticks.set_xticklabels(('0','1','2','3','4'))
                    elif xmax==3:
                        ax_ticks.xaxis.set_ticks(array([0,1,2]))
                        ax_ticks.set_xticklabels(('0','1','2'))
                    elif xmax==2:
                        ax_ticks.xaxis.set_ticks(array([0,1,2]))
                        ax_ticks.set_xticklabels(('0','1','2'))
                    elif xmax==40:
                        ax_ticks.xaxis.set_ticks(array([0,10,20,30,40]))
                        ax_ticks.set_xticklabels(('0','10','20','30','40'))
                    elif xmax==14:
                        ax_ticks.xaxis.set_ticks(array([0,2,4,6,8,10,12,14]))
                        ax_ticks.set_xticklabels(('0','2','4','6','8','10','12','14'))
                    elif xmax==80:
                        ax_ticks.xaxis.set_ticks(array([0,20,40,60,80]))
                        ax_ticks.set_xticklabels(('0','20','40','60','80'))
                    elif xmax==0.05:
                        ax_ticks.xaxis.set_ticks(array([0,0.01,0.02,0.03,0.04,0.05]))
                        ax_ticks.set_xticklabels(('0','','0.02','','0.04',''))
                    elif xmax==0.5:
                        ax_ticks.xaxis.set_ticks(array([0,0.1,0.2,0.3,0.4,0.5]))
                        ax_ticks.set_xticklabels(('0','','0.2','','0.4',''))
                    elif xmax==0.005:
                        ax_ticks.xaxis.set_ticks(array([0,0.001,0.002,0.003,0.004,0.005]))
                        ax_ticks.set_xticklabels(('0','','0.002','','0.004',''))
                    elif xmax==0.02:
                        ax_ticks.xaxis.set_ticks(array([0,0.005,0.01,0.015,0.02]))
                        ax_ticks.set_xticklabels(('0','','0.01','','0.02'))
                    elif xmax==0.03:
                        ax_ticks.xaxis.set_ticks(array([0,0.01,0.02,0.03]))
                        ax_ticks.set_xticklabels(('0','0.01','0.02','0.03'))

                ax01b.axis(ymin=-0.02, ymax=1.02)

                if "fig2" in opt:

                    ax02b.set_title(r"$\mathsf{\tau_{w}}$ = " + str(int(conntype[0]['tau1']*1e3)) + " ms")

                    if "_ax3_" in do:

                        idx = np.where(p_v==0.5)[0][0]
                        c1 = ax01b.plot((0.5),(err1_v_m[idx]*100),'o',color=b1, markersize=5, clip_on = False)
                        c2 = ax01b.plot((0.5),(err2_v_m[idx]*100),'o',color=g1, markersize=5, clip_on = False)
                        c3 = ax01b.plot((0.5),(err3_v_m[idx]*100),'o',color=r1, markersize=5, clip_on = False)

                        idx = np.where(p_v==2)[0][0]
                        c4 = ax01b.plot((2),(err1_v_m[idx]*100),'o',color=b2, markersize=5, clip_on = False)
                        c5 = ax01b.plot((2),(err2_v_m[idx]*100),'o',color=g2, markersize=5, clip_on = False)
                        c6 = ax01b.plot((2),(err3_v_m[idx]*100),'o',color=r2, markersize=5, clip_on = False)


                if "fig3" in opt:
                    #ax01b.set_title(r"$\mathsf{\tau_{w}}$ = " + str(int(conntype[0]['tau1']*1e3)) + " ms")

                    #if ("_ax3_" in do) and ("_noinv_" in do):
                    #
                    #    color_v.append(colgr)
                    #
                    #    lg = ax01b.legend(labelspacing=0.05, bbox_to_anchor=(0.45,0.5), loc=3, handlelength=0, handletextpad=0.1, numpoints=1)
                    #    #lg.draw_frame(False)
                    #    fr = lg.get_frame()
                    #    fr.set_lw(0.2)
                    #
                    #    txt = lg.get_texts()
                    #    color_v0 = [val for subl in color_v for val in subl]
                    #    for k, t in enumerate(txt):
                    #        t.set_color(color_v0[k])

                    if ("_colgrlight_" in do):

                        if "fig3b" in opt:
                            if ("_ax2_" in do): ax01b.set_title(r"No push-pull input")
                            if ("_ax3_" in do): ax01b.set_title("No push-pull input, positive lasso")
                        else:
                            #if ("_ax1_" in do): ax01b.set_title(r"No push-pull input")
                            if ("_ax1_" in do): ax01b.set_title(r"Additive white noise (n=0.01)")
                            if ("_ax2_" in do): ax01b.set_title(r"Increased variability")
                            if ("_ax3_" in do): ax01b.set_title(r"Increased sparseness (a=0.04)")
                            #if ("_ax2_" in do): ax01b.text(0.4, 1.3, 'Effect of modulation amplitude (a= 0.1 to 0.01) and push-pull input', transform=ax01b.transAxes, fontsize = 10, va='center', ha='center')
                            #if ("_ax5_" in do): ax01b.text(0.5, 1.3, 'Effect of increased input variability (v= 0.1 to 0.5)', transform=ax01b.transAxes, fontsize = 10, va='center', ha='center')
                            #if ("_ax8_" in do): ax01b.text(0.5, 1.3, 'Effect of sparseness (decreased connectivity p= 0.4 to 0.04)', transform=ax01b.transAxes, fontsize = 10, va='center', ha='center')


                if "fig4" in opt:
                    if ("_title1_" in do): ax01b.set_title(r"$\mathsf{\tau_{w}}$=" + str(int(conntype[0]['tau1']*1e3)) + "ms\n" + r"$\mathsf{\tau_{u}}$=" + str(int(conntype[1]['tau1']*1e3)) + "ms")
                    if ("_title2_" in do): ax01b.set_title(r"Increased sparseness and size")
                    if ("_title3_" in do): ax01b.set_title(r"Increased weight variability")

                if "fig5" in opt:
                    #if ("_title4_" in do): ax01b.set_title(r"u=0.1")
                    if ("_title5_" in do): ax01b.set_title(r"Increased excitation u=50")
                    if ("_title6_" in do): ax01b.set_title(r"No push-pull input")

                    if ("_ax1_" in do) and ("_ifun2_" in do):

                        pass
                        #color_v.append(colgr)

                        #lg = ax01b.legend(labelspacing=0.05, bbox_to_anchor=(0.5,0.7), loc=3, handlelength=0, handletextpad=0.1, numpoints=1)
                        ##lg.draw_frame(False)
                        #fr = lg.get_frame()
                        #fr.set_lw(0.2)

                        #txt = lg.get_texts()
                        #color_v0 = [val for subl in color_v for val in subl]
                        #for k, t in enumerate(txt):
                        #    t.set_color(color_v0[k])


                filename="./figs/Pub/" + opt + "_" + str(prefix_plot)
                if use_pc is False: plt.savefig(filename  + ".pdf", dpi = 300) # save it
                plt.savefig(filename + imgf, dpi = 300) # save it

            if do_run == 1:
                barrier(use_mpi = use_mpi, use_pc = use_pc)


        if "_fmin_" in do:

            p = fmin(residuals, p0, args=(params))
            print p
            err = 0
            save_results(pickle_prefix,p,err,params, use_h5 = use_h5, data_dir=data_dir)

        if "_brute_" in do:

            p = brute(residuals, ranges, args=(params), Ns=10)
            print p
            err = 0

        if "_mybrute_" in do:

            if fit_restart is False:
                if myid == 0:
                    params = pickle.load( gzip.GzipFile( filepath, "rb" ) )

            params = broadcast(params)

            for i in myranges[0]:
                for j in myranges[1]:
                    if [i,j] in params['fit_para']:
                        err = params['fit_err'][params['fit_para'].index([i,j])]
                        if myid == 0: print "Already computed for", [i,j], ", err:", err
                    else:
                        p0 = [i,j]
                        err = residuals(p0, params)
                        if myid == 0: print "Newly computed for", [i,j], ", err:", err



        if "_anneal_" in do:

            p = anneal(residuals, p0, args=(params), upper=upper_bounds, lower=lower_bounds)
            print p
            err = 0
            save_results(pickle_prefix,p,err, use_h5 = use_h5, data_dir=data_dir)


        if "_basinhopping_" in do:

            p = basinhopping(residuals, p0, minimizer_kwargs={"args":params})
            print p
            err = 0
            save_results(pickle_prefix,p,err, use_h5 = use_h5, data_dir=data_dir)


if ((opt == "fig1") or ("fig4" in opt) or ("fig5" in opt) or ("figRe6" in opt)):

    from pyPdf import PdfFileReader, PdfFileWriter

    output = PdfFileWriter()
    pdfOne = PdfFileReader(file(filename + ".pdf", "rb"))
    input1 = pdfOne.getPage(0)

    if "fig1" in opt:
        pdfTwo = PdfFileReader(file("./figs/Inserts/cl01.pdf", "rb"))
        input1.mergeTransformedPage(pdfTwo.getPage(0),[1, 0, 0, 1, 0, 357])

    elif "fig51" in opt:
        pdfTwo = PdfFileReader(file("./figs/Inserts/cl03.pdf", "rb"))
        input1.mergeTransformedPage(pdfTwo.getPage(0),[1, 0, 0, 1, 0, 185])

    elif "fig52" in opt:
        pdfTwo = PdfFileReader(file("./figs/Inserts/cl04.pdf", "rb"))
        input1.mergeTransformedPage(pdfTwo.getPage(0),[1, 0, 0, 1, 0, 182])

    elif "fig5" in opt:
        pdfTwo = PdfFileReader(file("./figs/Inserts/cl03.pdf", "rb"))
        input1.mergeTransformedPage(pdfTwo.getPage(0),[1, 0, 0, 1, 0, 455])
        pdfTwo = PdfFileReader(file("./figs/Inserts/cl04.pdf", "rb"))
        input1.mergeTransformedPage(pdfTwo.getPage(0),[1, 0, 0, 1, 0, 180])

    elif "fig4" in opt:
        pdfTwo = PdfFileReader(file("./figs/Inserts/cl02.pdf", "rb"))
        input1.mergeTransformedPage(pdfTwo.getPage(0),[1, 0, 0, 1, 0, 348])

    elif "figRe6" in opt:
        pdfTwo = PdfFileReader(file("./figs/Inserts/cl05.pdf", "rb"))
        input1.mergeTransformedPage(pdfTwo.getPage(0),[1, 0, 0, 1, 0, 179])



    output.addPage(input1)
    outputStream = file(filename + "_m.pdf", "wb")
    output.write(outputStream)
    outputStream.close()


plt.show()