def get(self,param): """ Get a value from sqlite database. There can be only one experiment id per loader. Returns an array containing time-dependent data or a single value. User does not need to worry which table the data is stored in, i.e whether it is of the sim_var, output_data etc.. types. """ try: self.data=sqldbutils.sim_data(self.db_path,self.experiment_id,param) #try and get the time-correlated samples for that param var=self.data.samples #first try and load time-varying data if it exists if len(var)>0: variable=var except: pass connection=sqldbutils.db_connect(self.db_path) #try and get it from output_params table using SQL query: try: query='SELECT numerical_value FROM output_params WHERE parameter=\''+param+'\' AND experiment_id ='+str(self.experiment_id) numerical_value=sqldbutils.execute_query(connection,query).fetchall()[0][0] if type(numerical_value)!=None: variable=numerical_value except: pass try: query='SELECT string_value FROM output_params WHERE parameter=\''+param+'\' AND experiment_id ='+str(self.experiment_id) string_value=sqldbutils.execute_query(connection,query).fetchall()[0][0] if type(string_value)!=None: variable=string_value except: pass #try and get it from sim_var table using SQL query: try: query='SELECT numerical_value FROM sim_var WHERE parameter=\''+param+'\' AND experiment_id ='+str(self.experiment_id) numerical_value=sqldbutils.execute_query(connection,query).fetchall()[0][0] if type(numerical_value)!=None: variable=numerical_value except: pass try: query='SELECT string_value FROM sim_var WHERE parameter=\''+param+'\' AND experiment_id ='+str(self.experiment_id) string_value=sqldbutils.execute_query(connection,query).fetchall()[0][0] if type(string_value)!=None: variable=string_value except: pass try: return variable #will either return a single value or time-varying (array) except: print 'Parameter not found in database'
def __local_evaluate(self, candidates, args): import time analysis self.CandidateData_list = [] analysis_var = self.analysis_var #Build submitfile.submit and runx.sh files: self.__buil_condor_files( candidates ) #exp_id now corresponds to position in chromosome/fitness array fitness = [] #submit the jobs to the grid os.chdir(self.tmpdir) os.system('condor_submit submitfile.submit') #wait till you know file exists: dbs_created = False while (dbs_created == False): print('checking if dbs created:') for job_num in range(self.num_jobs): jobdbname = 'outputdb' + str(job_num) + '.sqlite' jobdbpath = os.path.join(self.datadir, jobdbname) print(jobdbpath) db_exists = os.path.exists(jobdbpath) if (db_exists == False): time.sleep(60) dbs_created = False break dbs_created = True for CandidateData in self.CandidateData_list: job_num = CandidateData.job_num dbname = '/outputdb' + str(job_num) + '.sqlite' dbpath = self.datadir + dbname exp_id = CandidateData.exp_id exp_data = sqldbutils.sim_data(dbpath, exp_id) analysis = analysis.IClampAnalysis(exp_data.samples, exp_data.t, analysis_var, 5000, 10000) exp_fitness = analysis.evaluate_fitness( self.targets, self.weights, cost_function=analysis.normalised_cost_function) fitness.append(exp_fitness) for job_num in range(self.num_jobs): jobdbname = 'outputdb' + str(job_num) + '.sqlite' jobdbpath = os.path.join(self.datadir, jobdbname) print(jobdbpath) os.remove(jobdbpath) return fitness
def get_timeseries(self,param): """ Get a time vector corresponding to a value Returns an array containing time-vector of a related value, typically this will be a voltage recording. """ try: #first try and get data=sqldbutils.sim_data(self.db_path,experiment_id=self.experiment_id,param=param) return data.t except: print 'no such data'
def __local_evaluate(self,candidates,args): import time analysis self.CandidateData_list=[] analysis_var=self.analysis_var #Build submitfile.submit and runx.sh files: self.__buil_condor_files(candidates) #exp_id now corresponds to position in chromosome/fitness array fitness=[] #submit the jobs to the grid os.chdir(self.tmpdir) os.system('condor_submit submitfile.submit') #wait till you know file exists: dbs_created=False while (dbs_created==False): print('checking if dbs created:') for job_num in range(self.num_jobs): jobdbname='outputdb'+str(job_num)+'.sqlite' jobdbpath=os.path.join(self.datadir,jobdbname) print(jobdbpath) db_exists=os.path.exists(jobdbpath) if (db_exists==False): time.sleep(60) dbs_created=False break dbs_created=True for CandidateData in self.CandidateData_list: job_num = CandidateData.job_num dbname='/outputdb'+str(job_num)+'.sqlite' dbpath=self.datadir+dbname exp_id=CandidateData.exp_id exp_data=sqldbutils.sim_data(dbpath,exp_id) analysis=analysis.IClampAnalysis(exp_data.samples,exp_data.t,analysis_var,5000,10000) exp_fitness=analysis.evaluate_fitness(self.targets,self.weights,cost_function=analysis.normalised_cost_function) fitness.append(exp_fitness) for job_num in range(self.num_jobs): jobdbname='outputdb'+str(job_num)+'.sqlite' jobdbpath=os.path.join(self.datadir,jobdbname) print(jobdbpath) os.remove(jobdbpath) return fitness
def run(self,candidates,parameters): import sqldbutils exp_data_array=[] for chromosome in candidates: self.chromosome=chromosome self.parameters=parameters exp_id = sqldbutils.generate_exp_ids(self.db_path) cla=self.__generate_cla() os.chdir(self.nrnproject_path+'/src/') #there should be a smarter way os.system(cla) print self.db_path print exp_id exp_data=sqldbutils.sim_data(self.db_path,exp_id) exp_data_array.append(exp_data) return exp_data_array
def run(self, candidates, parameters): #"""Run simulations""" import sqldbutils exp_data_array = [] for chromosome in candidates: self.chromosome = chromosome self.parameters = parameters exp_id = sqldbutils.generate_exp_ids(self.db_path) cla = self.__generate_cla() os.chdir(self.nrnproject_path + '/src/') #there should be a smarter way os.system(cla) print(self.db_path) print(exp_id) exp_data = sqldbutils.sim_data(self.db_path, exp_id) exp_data_array.append(exp_data) return exp_data_array
'sqlite',experiment_id=1) print loader.get('simulation_name') #example of getting an item which was result of a calculation, #saved using writer.write method of writer object at runtime print loader.get('example value') #loading the voltage-vector of a recording: soma_voltage_2=loader.get('soma_voltage_2_mV') #get the corresponding time-vector t=loader.get_timeseries('soma_voltage_2_mV') ###PART 2 - using sqldbutils.py### import sqldbutils #note:REPLACE FILEPATH db_path='/home/mike/dev/nrnproject/sims/outputdb.sqlite' #create an exp_data object for that experiment exp_data=sqldbutils.sim_data('/home/mike/dev/nrnproject/sims/output.sqlite',1) #collect raw data, currently only loads voltage_mV timeseries t= exp_data.t samples=exp_data.samples #examples of how to extract other qyery-dependent data (sqlite database) connection=sqldbutils.db_connect('/home/mike/dev/nrnproject/sims/output.sqlite') query_output=sqldbutils.execute_query(connection,'SELECT experiment_id FROM output_params WHERE parameter=\'example_param_2\' AND numerical_value>1') exp_ids=query_output.fetchall()