Esempio n. 1
0
    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'
Esempio n. 2
0
    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
Esempio n. 3
0
    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'
Esempio n. 4
0
    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
Esempio n. 5
0
 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
Esempio n. 6
0
    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
Esempio n. 7
0
				  '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()