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()
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]
#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']