예제 #1
0
    def __init__(self, variable_keys, errfun_name, fitfun_names, fitnessweights,
                 model_dir, mechanism_dir, data_dir, simulation_params=None, args=None):

        self.variable_keys = variable_keys
        self.errfun_names = errfun_name
        self.fitfun_names = fitfun_names
        self.errfun = getattr(errfuns, errfun_name)
        self.fitfuns = [getattr(fitfuns, fitfun_name) for fitfun_name in fitfun_names]
        self.fitnessweights = fitnessweights
        self.args = args
        self.model_dir = model_dir
        self.mechanism_dir = mechanism_dir
        if mechanism_dir is not None:
            load_mechanism_dir(mechanism_dir)
        self.data_dir = data_dir
        self.data = pd.read_csv(data_dir)
        self.init_simulation_params = simulation_params
        if simulation_params is None:
            simulation_params = {}
        self.simulation_params = extract_simulation_params(self.data, **simulation_params)
        self.data_to_fit = [fitfun(self.data.v.values, self.data.t.values, self.data.i.values, self.args)
                            for fitfun in self.fitfuns]
        self.cell = self.get_cell()
예제 #2
0
from nrn_wrapper import Cell, complete_mechanismdir
from optimization.simulate import iclamp, extract_simulation_params

__author__ = 'caro'

data_real_dir = '../2015_08_11d/ramp/ramp.csv'
data_new_dir = './ramp.csv'
model_dir = '../../model/cells/dapmodel0.json'
mechanism_dir = '../../model/channels/schmidthieber'

data_real = pd.read_csv(data_real_dir)

# create cell and run simulation
cell = Cell.from_modeldir(model_dir, complete_mechanismdir(mechanism_dir))
simulation_params = extract_simulation_params(data_real)
v, t = iclamp(cell, **simulation_params)
i = data_real.i.values
sec = data_real.sec.values

data = pd.DataFrame({'v': v, 't': t, 'i': i, 'sec': sec})
data.to_csv(data_new_dir, index=None)

pl.figure()
pl.plot(t, v)
pl.show()

pl.figure()
pl.plot(t, i)
pl.show()
chunk_size = 100
variables = [
            [0, 1.0, [['soma', '0.5', 'na_hh', 'gnabar']]],
            [0, 1.0, [['soma', '0.5', 'k_hh', 'gkbar']]],
            #[0, 0.6, [['soma', '0.5', 'pas', 'g']]]
            ]
model_dir = '../../model/cells/hhCell.json'
mechanism_dir = '../../model/channels/hodgkinhuxley'
data_dir = '../../data/toymodels/hhCell/ramp.csv'

if not os.path.exists(save_dir):
    os.makedirs(save_dir)

# read data
data = pd.read_csv(data_dir)
simulation_params = extract_simulation_params(data, celsius=6.3)

# create cell
cell = Cell.from_modeldir(model_dir, mechanism_dir)

# compute error
n_chunks_p1 = len(p1_range) / chunk_size
n_chunks_p2 = len(p2_range) / chunk_size
assert n_chunks_p1.is_integer()
assert n_chunks_p2.is_integer()
n_chunks_p1 = int(n_chunks_p1)
n_chunks_p2 = int(n_chunks_p2)
for c1 in range(n_chunks_p1):
    for c2 in range(n_chunks_p2):
        p1_chunk = p1_range[c1 * chunk_size:(c1 + 1) * chunk_size]
        p2_chunk = p2_range[c2 * chunk_size:(c2 + 1) * chunk_size]
예제 #4
0
#np.savetxt(save_dir+'/seed_'+str(trial)+'.txt', np.array([seed]))
prng = Random()
prng.seed(seed)

# generate random models
for i in range(n_models):

    # create a model randomly from all channels
    weights_model = problem.generator(prng, None)

    for j, dt in enumerate(dts):
        print 'run '+'model: ' + str(i) + ' dt: ' +str(dt)
        
        # change dt
        data_newdt = change_dt(dt, problem.data)
        problem.simulation_params = extract_simulation_params(data_newdt)

        # run simulation
        problem.update_cell(weights_model)
        currents = [problem.cell.soma.record_from(channel_list[k], 'i'+ion_list[k], pos=.5) for k in range(len(channel_list))]
        v_newdt, t_newdt = run_simulation(problem.cell, **problem.simulation_params)

        #pl.figure()
        #pl.plot(t_newdt, v_newdt)
        #pl.show()

        # compute parameter
        dvdt_newdt = np.concatenate((np.array([(v_newdt[1]-v_newdt[0])/dt]), np.diff(v_newdt)/dt))
        i_newdt = data_newdt.i.values
        celsius = problem.simulation_params['celsius']