Source code for iocbio.kinetics.modules.sysbio.respiration.experiment_strathkelvin

from iocbio.kinetics.handler.experiment_generic import ExperimentGeneric
from iocbio.kinetics.constants import database_table_experiment
from .analyzer_primary import AnalyzerRespirationCreator, AnalyzerRespirationTMPD, AnalyzerRespirationTMPDCorrected

### Module flag
IocbioKineticsModule = ['analyzer', 'database_schema']

### Implementation

[docs]class ExperimentStrathkelvin(ExperimentGeneric): """General description of experiment performed on Strathkelvin""" database_table = "strathkelvin" @staticmethod def database_schema(db, gen_config_table=None): db.query("CREATE TABLE IF NOT EXISTS " + db.table(ExperimentStrathkelvin.database_table) + "(experiment_id text PRIMARY KEY, rawdata text, filename text, title text, channel integer, " + "FOREIGN KEY (experiment_id) REFERENCES " + db.table(database_table_experiment) + "(experiment_id) ON DELETE CASCADE" + ")") if gen_config_table is not None: db.query("CREATE TABLE IF NOT EXISTS " + db.table(gen_config_table) + "(experiment_id text not null, cells_in_mkL double precision, chamber_volume_in_ml double precision, " + "temperature double precision" ", primary key(experiment_id), " + "FOREIGN KEY (experiment_id) REFERENCES " + db.table(database_table_experiment) + "(experiment_id) ON DELETE CASCADE" + ")") @staticmethod def getvalue(data, key, protocol=True): k = key if k not in data.config: if protocol: k = data.config["protocol"] + "." + key if k not in data.config: for s in data.config: if s.startswith(data.config["protocol"]) and s.endswith(" " + key): k = s if k not in data.config: return None v = data.config[k] try: vf = float(v) return vf except: pass return v @staticmethod def getcells(data): cells = ExperimentStrathkelvin.getvalue(data, "cells") if cells is None: return cells if cells[-3:] != "mkL": print("Unexpected unit for cells: %s" % cells) this_is_an_ugly_crash cells = float(cells[:-3]) return cells @staticmethod def store(database, data): ExperimentGeneric.database_schema(database) ExperimentStrathkelvin.database_schema(database) experiment_id = data.experiment_id ExperimentGeneric.store(database, experiment_id, time=data.time, type_generic=data.type_generic, type_specific=data.type, hardware="strathkelvin") c = database if not database.has_record(ExperimentStrathkelvin.database_table, experiment_id = experiment_id): c.query("INSERT INTO " + database.table(ExperimentStrathkelvin.database_table) + "(experiment_id, rawdata, filename, title, channel) " + "VALUES(:experiment_id,:ftxt,:fname,:exptitle,:channel)", experiment_id=experiment_id, ftxt=data.fulltext, fname=data.config["this file"], exptitle=data.config["experiment title"], channel=int(data.config["channel index"])) @staticmethod def get_fulltxt(database, experiment_id): if ExperimentGeneric.hardware(database, experiment_id) != 'strathkelvin': return None print('Loading raw data for experiment:', experiment_id) for q in database.query("SELECT rawdata FROM " + database.table(ExperimentStrathkelvin.database_table) + " WHERE experiment_id=:experiment_id", experiment_id=experiment_id): return q.rawdata return None def __init__(self, database, data, gen_config_table): ExperimentGeneric.__init__(self,database) ExperimentStrathkelvin.database_schema(database, gen_config_table) experiment_id = data.experiment_id self.name = data.config["this file"] cells = ExperimentStrathkelvin.getcells(data) volume_ml = ExperimentStrathkelvin.getvalue(data, "volume_ml") temperature = ExperimentStrathkelvin.getvalue(data, "temperature") if not database.has_record(gen_config_table, experiment_id=experiment_id): database.query("INSERT INTO " + database.table(gen_config_table) + "(experiment_id, cells_in_mkL, chamber_volume_in_ml, temperature) " + "VALUES (:experiment_id,:cells,:volume,:temperature)", experiment_id=experiment_id, cells=cells, volume=volume_ml, temperature=temperature) else: database.query("UPDATE " + database.table(gen_config_table) + " SET cells_in_mkL=:cells, chamber_volume_in_ml=:volume, temperature=:temperature WHERE experiment_id=:experiment_id", experiment_id=experiment_id, cells=cells, volume=volume_ml, temperature=temperature)
############################################################################################# class ExperimentStrathkelvinADPTitration(ExperimentStrathkelvin): def __init__(self, database, data): ExperimentStrathkelvin.__init__(self, database, data, "VO2_ADP_config") class ExperimentStrathkelvinATPTitration(ExperimentStrathkelvin): def __init__(self, database, data): ExperimentStrathkelvin.__init__(self, database, data, "VO2_ATP_config") class ExperimentStrathkelvinMerviPK(ExperimentStrathkelvin): def __init__(self, database, data): ExperimentStrathkelvin.__init__(self, database, data, "VO2_MerviPK_config") class ExperimentStrathkelvinRespiratoryComplexes(ExperimentStrathkelvin): def __init__(self, database, data): ExperimentStrathkelvin.__init__(self, database, data, "VO2_RespiratoryComplexes_config") class ExperimentStrathkelvinGMPS(ExperimentStrathkelvin): def __init__(self, database, data): ExperimentStrathkelvin.__init__(self, database, data, "VO2_GMPS_config") class ExperimentStrathkelvinSGMP(ExperimentStrathkelvin): def __init__(self, database, data): ExperimentStrathkelvin.__init__(self, database, data, "VO2_SGMP_config") ############################################################################################# # allocation of experiment handler and analyzers for strathkelvin experiments def allocate_handler_analyzer(database, data): titration_types = {'Strathkelvin merviPK': 'MerviPK'} for i in ['GMPS', 'SGMP', 'ATP_glucose_PEP_PK', 'ATP_AMP_PEP_PK', 'creatine_ATP_PEP_PK', 'ATP_glucose_ADP', 'ATP_AMP_ADP', 'creatine_ATP_ADP']: titration_types['Strathkelvin ' + i] = i if data.type in titration_types: Analyzer = { 'default': AnalyzerRespirationCreator('VO2_' + titration_types[data.type] + '_raw') } experiment_handler = ExperimentStrathkelvin(database, data, 'VO2_' + titration_types[data.type] + '_config') elif data.type.find("Strathkelvin ADP titration") == 0: Analyzer = { 'default': AnalyzerRespirationCreator("VO2_ADP_titration_raw") } experiment_handler = ExperimentStrathkelvinADPTitration(database, data) elif data.type.find("Strathkelvin Respiratory complexes") == 0: Analyzer = { 'default': AnalyzerRespirationCreator('VO2_RespiratoryComplexes_raw'), 'TMPD oxydation': AnalyzerRespirationTMPD, 'TMPD corrected': AnalyzerRespirationTMPDCorrected, } experiment_handler = ExperimentStrathkelvinRespiratoryComplexes(database, data) elif data.type == "Strathkelvin ATP titration": Analyzer = { 'default': AnalyzerRespirationCreator("VO2_ATP_titration_raw") } experiment_handler = ExperimentStrathkelvinATPTitration(database, data) else: return None, None return Analyzer, experiment_handler ##################### #### ModuleAPI ###### def database_schema(db): ExperimentStrathkelvin.database_schema(db) def analyzer(database, data): A, _ = allocate_handler_analyzer(database, data) return A, None, None