Source code for owmeta.channelworm
import six
from .experiment import Experiment
from owmeta_core.dataobject import DataObject, DatatypeProperty, ObjectProperty, CPThunk
from . import CONTEXT
from .channel_common import CHANNEL_RDF_TYPE
from .neuroml import NeuroMLProperty
[docs]class PatchClampExperiment(Experiment):
"""
Store experimental conditions for a patch clamp experiment.
"""
class_context = CONTEXT
Ca_concentration = DatatypeProperty()
'''Calcium concentration'''
Cl_concentration = DatatypeProperty()
'''Chlorine concentration'''
blockers = DatatypeProperty()
'''Channel blockers used for this experiment'''
cell = DatatypeProperty()
'''The cell this experiment was performed on'''
cell_age = DatatypeProperty()
'''Age of the cell'''
delta_t = DatatypeProperty()
duration = DatatypeProperty()
end_time = DatatypeProperty()
extra_solution = DatatypeProperty()
initial_voltage = DatatypeProperty()
'''Starting voltage of the patch clamp'''
ion_channel = DatatypeProperty()
'''The ion channel being clamped'''
membrane_capacitance = DatatypeProperty()
'''Initial membrane capacitance'''
mutants = DatatypeProperty()
'''Type(s) of mutants being used in this experiment'''
patch_type = DatatypeProperty()
'''Type of patch clamp being used ('voltage' or 'current')'''
pipette_solution = DatatypeProperty()
'''Type of solution in the pipette'''
protocol_end = DatatypeProperty()
protocol_start = DatatypeProperty()
protocol_step = DatatypeProperty()
start_time = DatatypeProperty()
temperature = DatatypeProperty()
type = DatatypeProperty()
class ChannelModelType:
patchClamp = "Patch clamp experiment"
homologyEstimate = "Estimation based on homology"
[docs]class ChannelModel(DataObject):
"""
A model for an ion channel.
There may be multiple models for a single channel.
Example usage::
>>> from owmeta_core.quantity import Quantity
# Create a ChannelModel
>>> cm = PatchClampChannelModel(key='ca_boyle',
... gating='voltage',
... ion='Ca',
... conductance=Quantity.parse('10pS'))
"""
class_context = CONTEXT
modelType = DatatypeProperty()
''' The type of model employed to describe a channel '''
ion = DatatypeProperty(multiple=True)
''' The type of ion this channel selects for '''
gating = DatatypeProperty(multiple=True)
''' The gating mechanism for this channel ("voltage" or name of ligand(s) ) '''
conductance = DatatypeProperty()
''' The conductance of this ion channel. This is the initial value, and should be entered as a Quantity object. '''
neuroML = CPThunk(NeuroMLProperty)
def __init__(self, modelType=None, *args, **kwargs):
super(ChannelModel, self).__init__(*args, **kwargs)
#Change modelType value to something from ChannelModelType class on init
if isinstance(modelType, six.string_types):
modelType = modelType.lower()
if modelType in ('homology', ChannelModelType.homologyEstimate):
self.modelType(ChannelModelType.homologyEstimate)
elif modelType in ('patch-clamp', ChannelModelType.patchClamp):
self.modelType(ChannelModelType.patchClamp)
[docs]class PatchClampChannelModel(ChannelModel):
class_context = CONTEXT
modeled_from = ObjectProperty(value_type=PatchClampExperiment)
def __init__(self, **kwargs):
super(PatchClampChannelModel, self).__init__(modelType='patch-clamp',
**kwargs)
[docs]class HomologyChannelModel(ChannelModel):
class_context = CONTEXT
homolog = ObjectProperty(value_rdf_type=CHANNEL_RDF_TYPE)
def __init__(self, **kwargs):
super(HomologyChannelModel, self).__init__(modelType='homology',
**kwargs)