diff --git a/.gitignore b/.gitignore
index e613347..397db57 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,8 +1,8 @@
-/src/paml_check.egg-info/
+/src/labop_check.egg-info/
/env/
/.idea/misc.xml
/.idea/modules.xml
-/.idea/paml-check.iml
+/.idea/labop-check.iml
/.idea/inspectionProfiles/profiles_settings.xml
/.idea/inspectionProfiles/Project_Default.xml
/.idea/vcs.xml
diff --git a/.idea/paml-check.iml b/.idea/paml-check.iml
new file mode 100644
index 0000000..49b5ec5
--- /dev/null
+++ b/.idea/paml-check.iml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Pipfile b/Pipfile
index 79ed465..27c2a26 100644
--- a/Pipfile
+++ b/Pipfile
@@ -4,8 +4,8 @@ verify_ssl = true
name = "pypi"
[packages]
-paml-check = {editable = true, path = "."}
-paml = {ref = "f0102179c2494d6f2b785aa9b32b1c6a80604c2f", git = "https://github.com/SD2E/paml.git"}
+labop-check = {editable = true, path = "."}
+labop = {ref = "f0102179c2494d6f2b785aa9b32b1c6a80604c2f", git = "https://github.com/SD2E/labop.git"}
pyparsing = "==2.4.7"
pyshacl = "==0.14.0"
rdflib = "==5.0.0"
diff --git a/README.md b/README.md
index f873c21..c923769 100644
--- a/README.md
+++ b/README.md
@@ -1 +1 @@
-# paml-check
\ No newline at end of file
+# labop-check
\ No newline at end of file
diff --git a/setup.py b/setup.py
index df17a12..c7c42ef 100644
--- a/setup.py
+++ b/setup.py
@@ -7,34 +7,37 @@
with open("README.md", "r", encoding="utf-8") as fh:
long_description = fh.read()
+
def _post_install():
print("Installing z3...")
os.system("pysmt-install --z3 --confirm-agreement")
os.system("export PYSMT_CYTHON=0")
-setup(name='labop_check',
- version='0.1.3',
- description='LabOP Checker',
- long_description=long_description,
- long_description_content_type='text/markdown',
- url='https://github.com/SD2E/labop-check',
- author='Dan Bryce',
- author_email='dbryce@sift.net',
- license='MIT',
- packages=find_packages('src'),
- package_dir={'': 'src'},
- install_requires=[
- # "paml" This requires that paml have a valid package name
- "pint",
- "pysmt",
- "sbol3",
- "z3-solver",
- # "plotly>=5.3.1",
- "pandas",
- "graphviz"
- ],
- tests_require=["pytest"],
- zip_safe=False
- )
+
+setup(
+ name="labop_check",
+ version="0.1.3",
+ description="LabOP Checker",
+ long_description=long_description,
+ long_description_content_type="text/markdown",
+ url="https://github.com/SD2E/labop-check",
+ author="Dan Bryce",
+ author_email="dbryce@sift.net",
+ license="MIT",
+ packages=find_packages("src"),
+ package_dir={"": "src"},
+ install_requires=[
+ # "labop" This requires that labop have a valid package name
+ "pint",
+ "pysmt",
+ "sbol3",
+ "z3-solver",
+ # "plotly>=5.3.1",
+ "pandas",
+ "graphviz",
+ ],
+ tests_require=["pytest"],
+ zip_safe=False,
+)
_post_install()
diff --git a/src/paml_check.egg-info/PKG-INFO b/src/paml_check.egg-info/PKG-INFO
new file mode 100644
index 0000000..f7d24ae
--- /dev/null
+++ b/src/paml_check.egg-info/PKG-INFO
@@ -0,0 +1,14 @@
+Metadata-Version: 2.1
+Name: paml-check
+Version: 0.1.3
+Summary: LabOP Checker
+Home-page: https://github.com/SD2E/paml-check
+Author: Dan Bryce
+Author-email: dbryce@sift.net
+License: MIT
+Platform: UNKNOWN
+Description-Content-Type: text/markdown
+License-File: LICENSE
+
+# paml-check
+
diff --git a/src/paml_check.egg-info/SOURCES.txt b/src/paml_check.egg-info/SOURCES.txt
new file mode 100644
index 0000000..da95cf6
--- /dev/null
+++ b/src/paml_check.egg-info/SOURCES.txt
@@ -0,0 +1,30 @@
+LICENSE
+README.md
+pyproject.toml
+setup.py
+src/paml_check/__init__.py
+src/paml_check/activity_graph.py
+src/paml_check/constraints.py
+src/paml_check/minimize_duration.py
+src/paml_check/paml_check.py
+src/paml_check/plot.py
+src/paml_check/protocol.py
+src/paml_check/schedule.py
+src/paml_check/units.py
+src/paml_check/utils.py
+src/paml_check.egg-info/PKG-INFO
+src/paml_check.egg-info/SOURCES.txt
+src/paml_check.egg-info/dependency_links.txt
+src/paml_check.egg-info/not-zip-safe
+src/paml_check.egg-info/requires.txt
+src/paml_check.egg-info/top_level.txt
+src/paml_check/convert_constraints/__init__.py
+src/paml_check/convert_constraints/comparison.py
+src/paml_check/convert_constraints/duration.py
+src/paml_check/convert_constraints/expression.py
+src/paml_check/convert_constraints/logic.py
+src/paml_check/convert_constraints/time.py
+test/test_generate_constraints.py
+test/test_hand_coded.py
+test/test_read_paml.py
+test/test_subprotocol.py
\ No newline at end of file
diff --git a/src/paml_check.egg-info/dependency_links.txt b/src/paml_check.egg-info/dependency_links.txt
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/src/paml_check.egg-info/dependency_links.txt
@@ -0,0 +1 @@
+
diff --git a/src/paml_check.egg-info/not-zip-safe b/src/paml_check.egg-info/not-zip-safe
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/src/paml_check.egg-info/not-zip-safe
@@ -0,0 +1 @@
+
diff --git a/src/paml_check.egg-info/requires.txt b/src/paml_check.egg-info/requires.txt
new file mode 100644
index 0000000..384ee58
--- /dev/null
+++ b/src/paml_check.egg-info/requires.txt
@@ -0,0 +1,6 @@
+pint
+pysmt
+sbol3
+z3-solver
+pandas
+graphviz
diff --git a/src/paml_check.egg-info/top_level.txt b/src/paml_check.egg-info/top_level.txt
new file mode 100644
index 0000000..4b8dbd5
--- /dev/null
+++ b/src/paml_check.egg-info/top_level.txt
@@ -0,0 +1 @@
+paml_check
diff --git a/test/generation/test_LUDOX_dual_protocol.py b/test/generation/test_LUDOX_dual_protocol.py
index 2565726..a99f426 100644
--- a/test/generation/test_LUDOX_dual_protocol.py
+++ b/test/generation/test_LUDOX_dual_protocol.py
@@ -3,63 +3,71 @@
import unittest
import filecmp
import sbol3
-import paml
+import labop
import tyto
+
class TestLUDOXDual(unittest.TestCase):
- paml_file = os.path.join(os.getcwd(), 'test/resources/paml', 'igem_ludox_dual_draft.ttl')
- paml_format = sbol3.TURTLE
+ labop_file = os.path.join(
+ os.getcwd(), "test/resources/labop", "igem_ludox_dual_draft.ttl"
+ )
+ labop_format = sbol3.TURTLE
- # @unittest.skipIf(os.path.isfile(paml_file),
+ # @unittest.skipIf(os.path.isfile(labop_file),
# "skipped due to local cache")
def test_create_dual_protocol(self):
#############################################
# set up the document
- print('Setting up document')
+ print("Setting up document")
doc = sbol3.Document()
- sbol3.set_namespace('https://bbn.com/scratch/')
+ sbol3.set_namespace("https://bbn.com/scratch/")
#############################################
# Import the primitive libraries
- print('Importing libraries')
- paml.import_library('liquid_handling')
- print('... Imported liquid handling')
- paml.import_library('plate_handling')
- print('... Imported plate handling')
- paml.import_library('spectrophotometry')
- print('... Imported spectrophotometry')
- paml.import_library('sample_arrays')
- print('... Imported sample arrays')
+ print("Importing libraries")
+ labop.import_library("liquid_handling")
+ print("... Imported liquid handling")
+ labop.import_library("plate_handling")
+ print("... Imported plate handling")
+ labop.import_library("spectrophotometry")
+ print("... Imported spectrophotometry")
+ labop.import_library("sample_arrays")
+ print("... Imported sample arrays")
# create the materials to be provisioned
- ddh2o = sbol3.Component('ddH2O', 'https://identifiers.org/pubchem.substance:24901740')
- ddh2o.name = 'Water, sterile-filtered, BioReagent, suitable for cell culture' # TODO get via tyto
+ ddh2o = sbol3.Component(
+ "ddH2O", "https://identifiers.org/pubchem.substance:24901740"
+ )
+ ddh2o.name = "Water, sterile-filtered, BioReagent, suitable for cell culture" # TODO get via tyto
doc.add(ddh2o)
- ludox = sbol3.Component('LUDOX', 'https://identifiers.org/pubchem.substance:24866361')
- ludox.name = 'LUDOX(R) CL-X colloidal silica, 45 wt. % suspension in H2O'
+ ludox = sbol3.Component(
+ "LUDOX", "https://identifiers.org/pubchem.substance:24866361"
+ )
+ ludox.name = (
+ "LUDOX(R) CL-X colloidal silica, 45 wt. % suspension in H2O"
+ )
doc.add(ludox)
-
self.create_protocol_a(doc, ddh2o, ludox)
self.create_protocol_b(doc, ddh2o, ludox)
########################################
# Validate and write the document
- print('Validating and writing protocol')
+ print("Validating and writing protocol")
v = doc.validate()
- assert len(v) == 0, "".join(f'\n {e}' for e in v)
+ assert len(v) == 0, "".join(f"\n {e}" for e in v)
- doc.write(self.paml_file, self.paml_format)
- print(f'Wrote file as {self.paml_file}')
+ doc.write(self.labop_file, self.labop_format)
+ print(f"Wrote file as {self.labop_file}")
def create_protocol_a(self, doc, ddh2o, ludox):
#############################################
# Create the protocol
- print('Creating protocol')
- protocol = paml.Protocol('iGEM_LUDOX_OD_calibration_2018_A')
+ print("Creating protocol")
+ protocol = labop.Protocol("iGEM_LUDOX_OD_calibration_2018_A")
protocol.name = "iGEM 2018 LUDOX OD calibration protocol A"
- protocol.description = '''
+ protocol.description = """
With this protocol you will use LUDOX CL-X (a 45% colloidal silica suspension) as a single point reference to
obtain a conversion factor to transform absorbance (OD600) data from your plate reader into a comparable
OD600 measurement as would be obtained in a spectrophotometer. This conversion is necessary because plate
@@ -69,35 +77,61 @@ def create_protocol_a(self, doc, ddh2o, ludox):
Therefore this conversion calculation can transform OD600 measurements from a plate reader (i.e. absorbance
at 600 nm, the basic output of most instruments) into comparable OD600 measurements. The LUDOX solution
is only weakly scattering and so will give a low absorbance value.
- '''
+ """
doc.add(protocol)
# actual steps of the protocol
# get a plate
- plate = protocol.primitive_step('EmptyContainer', specification=tyto.NCIT.get_uri_by_term('Microplate')) # replace with container ontology
+ plate = protocol.primitive_step(
+ "EmptyContainer",
+ specification=tyto.NCIT.get_uri_by_term("Microplate"),
+ ) # replace with container ontology
# put ludox and water in selected wells
- c_ddh2o = protocol.primitive_step('PlateCoordinates', source=plate.output_pin('samples'), coordinates='A1:D1')
- protocol.primitive_step('Provision', resource=ludox, destination=c_ddh2o.output_pin('samples'),
- amount=sbol3.Measure(100, tyto.OM.microliter))
-
- c_ludox = protocol.primitive_step('PlateCoordinates', source=plate.output_pin('samples'), coordinates='A2:D2')
- protocol.primitive_step('Provision', resource=ddh2o, destination=c_ludox.output_pin('samples'),
- amount=sbol3.Measure(100, tyto.OM.microliter))
+ c_ddh2o = protocol.primitive_step(
+ "PlateCoordinates",
+ source=plate.output_pin("samples"),
+ coordinates="A1:D1",
+ )
+ protocol.primitive_step(
+ "Provision",
+ resource=ludox,
+ destination=c_ddh2o.output_pin("samples"),
+ amount=sbol3.Measure(100, tyto.OM.microliter),
+ )
+
+ c_ludox = protocol.primitive_step(
+ "PlateCoordinates",
+ source=plate.output_pin("samples"),
+ coordinates="A2:D2",
+ )
+ protocol.primitive_step(
+ "Provision",
+ resource=ddh2o,
+ destination=c_ludox.output_pin("samples"),
+ amount=sbol3.Measure(100, tyto.OM.microliter),
+ )
# measure the absorbance
- c_measure = protocol.primitive_step('PlateCoordinates', source=plate.output_pin('samples'), coordinates='A1:D2')
- measure = protocol.primitive_step('MeasureAbsorbance', samples=c_measure.output_pin('samples'),
- wavelength=sbol3.Measure(600, tyto.OM.nanometer))
-
- protocol.add_output('absorbance', measure.output_pin('measurements'))
+ c_measure = protocol.primitive_step(
+ "PlateCoordinates",
+ source=plate.output_pin("samples"),
+ coordinates="A1:D2",
+ )
+ measure = protocol.primitive_step(
+ "MeasureAbsorbance",
+ samples=c_measure.output_pin("samples"),
+ wavelength=sbol3.Measure(600, tyto.OM.nanometer),
+ )
+
+ protocol.add_output("absorbance", measure.output_pin("measurements"))
def create_protocol_b(self, doc, ddh2o, ludox):
#############################################
# Create the protocol
- print('Creating protocol')
- protocol = paml.Protocol('iGEM_LUDOX_OD_calibration_2018_B')
+ print("Creating protocol")
+ protocol = labop.Protocol("iGEM_LUDOX_OD_calibration_2018_B")
protocol.name = "iGEM 2018 LUDOX OD calibration protocol B"
- protocol.description = '''
+ protocol.description = """
With this protocol you will use LUDOX CL-X (a 45% colloidal silica suspension) as a single point reference to
obtain a conversion factor to transform absorbance (OD600) data from your plate reader into a comparable
OD600 measurement as would be obtained in a spectrophotometer. This conversion is necessary because plate
@@ -107,29 +141,55 @@ def create_protocol_b(self, doc, ddh2o, ludox):
Therefore this conversion calculation can transform OD600 measurements from a plate reader (i.e. absorbance
at 600 nm, the basic output of most instruments) into comparable OD600 measurements. The LUDOX solution
is only weakly scattering and so will give a low absorbance value.
- '''
+ """
doc.add(protocol)
# actual steps of the protocol
# get a plate
- plate = protocol.primitive_step('EmptyContainer', specification=tyto.NCIT.get_uri_by_term('Microplate')) # replace with container ontology
+ plate = protocol.primitive_step(
+ "EmptyContainer",
+ specification=tyto.NCIT.get_uri_by_term("Microplate"),
+ ) # replace with container ontology
# put ludox and water in selected wells
- c_ddh2o = protocol.primitive_step('PlateCoordinates', source=plate.output_pin('samples'), coordinates='A1:D1')
- protocol.primitive_step('Provision', resource=ludox, destination=c_ddh2o.output_pin('samples'),
- amount=sbol3.Measure(100, tyto.OM.microliter))
-
- c_ludox = protocol.primitive_step('PlateCoordinates', source=plate.output_pin('samples'), coordinates='A2:D2')
- protocol.primitive_step('Provision', resource=ddh2o, destination=c_ludox.output_pin('samples'),
- amount=sbol3.Measure(100, tyto.OM.microliter))
+ c_ddh2o = protocol.primitive_step(
+ "PlateCoordinates",
+ source=plate.output_pin("samples"),
+ coordinates="A1:D1",
+ )
+ protocol.primitive_step(
+ "Provision",
+ resource=ludox,
+ destination=c_ddh2o.output_pin("samples"),
+ amount=sbol3.Measure(100, tyto.OM.microliter),
+ )
+
+ c_ludox = protocol.primitive_step(
+ "PlateCoordinates",
+ source=plate.output_pin("samples"),
+ coordinates="A2:D2",
+ )
+ protocol.primitive_step(
+ "Provision",
+ resource=ddh2o,
+ destination=c_ludox.output_pin("samples"),
+ amount=sbol3.Measure(100, tyto.OM.microliter),
+ )
# measure the absorbance
- c_measure = protocol.primitive_step('PlateCoordinates', source=plate.output_pin('samples'), coordinates='A1:D2')
- measure = protocol.primitive_step('MeasureAbsorbance', samples=c_measure.output_pin('samples'),
- wavelength=sbol3.Measure(600, tyto.OM.nanometer))
+ c_measure = protocol.primitive_step(
+ "PlateCoordinates",
+ source=plate.output_pin("samples"),
+ coordinates="A1:D2",
+ )
+ measure = protocol.primitive_step(
+ "MeasureAbsorbance",
+ samples=c_measure.output_pin("samples"),
+ wavelength=sbol3.Measure(600, tyto.OM.nanometer),
+ )
+
+ protocol.add_output("absorbance", measure.output_pin("measurements"))
- protocol.add_output('absorbance', measure.output_pin('measurements'))
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
-
diff --git a/test/generation/test_LUDOX_dual_time_protocol.py b/test/generation/test_LUDOX_dual_time_protocol.py
index 7fc4c3d..d5b8047 100644
--- a/test/generation/test_LUDOX_dual_time_protocol.py
+++ b/test/generation/test_LUDOX_dual_time_protocol.py
@@ -3,94 +3,127 @@
import unittest
import filecmp
import sbol3
-import paml
-import paml_time as pamlt
+import labop
+import labop_time as labopt
import tyto
+
class TestLUDOXDual(unittest.TestCase):
- paml_file = os.path.join(os.getcwd(), 'test/resources/paml', 'igem_ludox_dual_time_draft.ttl')
- paml_format = sbol3.TURTLE
+ labop_file = os.path.join(
+ os.getcwd(), "test/resources/labop", "igem_ludox_dual_time_draft.ttl"
+ )
+ labop_format = sbol3.TURTLE
- # @unittest.skipIf(os.path.isfile(paml_file),
+ # @unittest.skipIf(os.path.isfile(labop_file),
# "skipped due to local cache")
def test_create_dual_protocol(self):
#############################################
# set up the document
- print('Setting up document')
+ print("Setting up document")
doc = sbol3.Document()
- sbol3.set_namespace('https://bbn.com/scratch/')
+ sbol3.set_namespace("https://bbn.com/scratch/")
#############################################
# Import the primitive libraries
- print('Importing libraries')
- paml.import_library('liquid_handling')
- print('... Imported liquid handling')
- paml.import_library('plate_handling')
- print('... Imported plate handling')
- paml.import_library('spectrophotometry')
- print('... Imported spectrophotometry')
- paml.import_library('sample_arrays')
- print('... Imported sample arrays')
+ print("Importing libraries")
+ labop.import_library("liquid_handling")
+ print("... Imported liquid handling")
+ labop.import_library("plate_handling")
+ print("... Imported plate handling")
+ labop.import_library("spectrophotometry")
+ print("... Imported spectrophotometry")
+ labop.import_library("sample_arrays")
+ print("... Imported sample arrays")
# create the materials to be provisioned
- ddh2o = sbol3.Component('ddH2O', 'https://identifiers.org/pubchem.substance:24901740')
- ddh2o.name = 'Water, sterile-filtered, BioReagent, suitable for cell culture' # TODO get via tyto
+ ddh2o = sbol3.Component(
+ "ddH2O", "https://identifiers.org/pubchem.substance:24901740"
+ )
+ ddh2o.name = "Water, sterile-filtered, BioReagent, suitable for cell culture" # TODO get via tyto
doc.add(ddh2o)
- ludox = sbol3.Component('LUDOX', 'https://identifiers.org/pubchem.substance:24866361')
- ludox.name = 'LUDOX(R) CL-X colloidal silica, 45 wt. % suspension in H2O'
+ ludox = sbol3.Component(
+ "LUDOX", "https://identifiers.org/pubchem.substance:24866361"
+ )
+ ludox.name = (
+ "LUDOX(R) CL-X colloidal silica, 45 wt. % suspension in H2O"
+ )
doc.add(ludox)
-
a = self.create_protocol_a(doc, ddh2o, ludox)
b = self.create_protocol_b(doc, ddh2o, ludox)
-
+
# FIXME this is a quick and dirty test to see if things are working at all.
# Testing of multiple protocols needs to be thought through in greater detail.
constraints = []
# protocol a starts at time 0
- constraints.append(pamlt.startTime(a['protocol'], 0, units=tyto.OM.hour))
+ constraints.append(
+ labopt.startTime(a["protocol"], 0, units=tyto.OM.hour)
+ )
# protocol b starts at time hour 1
- constraints.append(pamlt.startTime(b['protocol'], 1, units=tyto.OM.hour))
+ constraints.append(
+ labopt.startTime(b["protocol"], 1, units=tyto.OM.hour)
+ )
# ludox durations are 60 seconds
- constraints.append(pamlt.duration(a['ludox'], 60, units=tyto.OM.second))
- constraints.append(pamlt.duration(b['ludox'], 60, units=tyto.OM.second))
+ constraints.append(
+ labopt.duration(a["ludox"], 60, units=tyto.OM.second)
+ )
+ constraints.append(
+ labopt.duration(b["ludox"], 60, units=tyto.OM.second)
+ )
# ddh2o durations are 60 seconds
- constraints.append(pamlt.duration(a['ddh2o'], 60, units=tyto.OM.second))
- constraints.append(pamlt.duration(b['ddh2o'], 60, units=tyto.OM.second))
+ constraints.append(
+ labopt.duration(a["ddh2o"], 60, units=tyto.OM.second)
+ )
+ constraints.append(
+ labopt.duration(b["ddh2o"], 60, units=tyto.OM.second)
+ )
- constraints.append(pamlt.duration(a['measure'], 60, units=tyto.OM.minute))
- constraints.append(pamlt.duration(b['measure'], 60, units=tyto.OM.minute))
+ constraints.append(
+ labopt.duration(a["measure"], 60, units=tyto.OM.minute)
+ )
+ constraints.append(
+ labopt.duration(b["measure"], 60, units=tyto.OM.minute)
+ )
- constraints.append(pamlt.precedes(a['ludox'], [10, 15], a['ddh2o'], units=tyto.OM.hour))
- constraints.append(pamlt.precedes(b['ludox'], [10, 15], b['ddh2o'], units=tyto.OM.hour))
+ constraints.append(
+ labopt.precedes(
+ a["ludox"], [10, 15], a["ddh2o"], units=tyto.OM.hour
+ )
+ )
+ constraints.append(
+ labopt.precedes(
+ b["ludox"], [10, 15], b["ddh2o"], units=tyto.OM.hour
+ )
+ )
- time_constraints = pamlt.TimeConstraints("ludox_protocol_constraints",
- constraints=[pamlt.And(constraints)],
- protocols = [a['protocol'], b['protocol']]
+ time_constraints = labopt.TimeConstraints(
+ "ludox_protocol_constraints",
+ constraints=[labopt.And(constraints)],
+ protocols=[a["protocol"], b["protocol"]],
)
doc.add(time_constraints)
########################################
# Validate and write the document
- print('Validating and writing protocol')
+ print("Validating and writing protocol")
v = doc.validate()
- assert len(v) == 0, "".join(f'\n {e}' for e in v)
+ assert len(v) == 0, "".join(f"\n {e}" for e in v)
- doc.write(self.paml_file, self.paml_format)
- print(f'Wrote file as {self.paml_file}')
+ doc.write(self.labop_file, self.labop_format)
+ print(f"Wrote file as {self.labop_file}")
def create_protocol_a(self, doc, ddh2o, ludox):
#############################################
# Create the protocol
- print('Creating protocol')
- protocol = paml.Protocol('iGEM_LUDOX_OD_calibration_2018_A')
+ print("Creating protocol")
+ protocol = labop.Protocol("iGEM_LUDOX_OD_calibration_2018_A")
protocol.name = "iGEM 2018 LUDOX OD calibration protocol A"
- protocol.description = '''
+ protocol.description = """
With this protocol you will use LUDOX CL-X (a 45% colloidal silica suspension) as a single point reference to
obtain a conversion factor to transform absorbance (OD600) data from your plate reader into a comparable
OD600 measurement as would be obtained in a spectrophotometer. This conversion is necessary because plate
@@ -100,42 +133,68 @@ def create_protocol_a(self, doc, ddh2o, ludox):
Therefore this conversion calculation can transform OD600 measurements from a plate reader (i.e. absorbance
at 600 nm, the basic output of most instruments) into comparable OD600 measurements. The LUDOX solution
is only weakly scattering and so will give a low absorbance value.
- '''
+ """
doc.add(protocol)
# actual steps of the protocol
# get a plate
- plate = protocol.primitive_step('EmptyContainer', specification=tyto.NCIT.get_uri_by_term('Microplate')) # replace with container ontology
+ plate = protocol.primitive_step(
+ "EmptyContainer",
+ specification=tyto.NCIT.get_uri_by_term("Microplate"),
+ ) # replace with container ontology
# put ludox and water in selected wells
- c_ddh2o = protocol.primitive_step('PlateCoordinates', source=plate.output_pin('samples'), coordinates='A1:D1')
- provision_ludox = protocol.primitive_step('Provision', resource=ludox, destination=c_ddh2o.output_pin('samples'),
- amount=sbol3.Measure(100, tyto.OM.microliter))
+ c_ddh2o = protocol.primitive_step(
+ "PlateCoordinates",
+ source=plate.output_pin("samples"),
+ coordinates="A1:D1",
+ )
+ provision_ludox = protocol.primitive_step(
+ "Provision",
+ resource=ludox,
+ destination=c_ddh2o.output_pin("samples"),
+ amount=sbol3.Measure(100, tyto.OM.microliter),
+ )
- c_ludox = protocol.primitive_step('PlateCoordinates', source=plate.output_pin('samples'), coordinates='A2:D2')
- provision_ddh2o = protocol.primitive_step('Provision', resource=ddh2o, destination=c_ludox.output_pin('samples'),
- amount=sbol3.Measure(100, tyto.OM.microliter))
+ c_ludox = protocol.primitive_step(
+ "PlateCoordinates",
+ source=plate.output_pin("samples"),
+ coordinates="A2:D2",
+ )
+ provision_ddh2o = protocol.primitive_step(
+ "Provision",
+ resource=ddh2o,
+ destination=c_ludox.output_pin("samples"),
+ amount=sbol3.Measure(100, tyto.OM.microliter),
+ )
# measure the absorbance
- c_measure = protocol.primitive_step('PlateCoordinates', source=plate.output_pin('samples'), coordinates='A1:D2')
- measure = protocol.primitive_step('MeasureAbsorbance', samples=c_measure.output_pin('samples'),
- wavelength=sbol3.Measure(600, tyto.OM.nanometer))
+ c_measure = protocol.primitive_step(
+ "PlateCoordinates",
+ source=plate.output_pin("samples"),
+ coordinates="A1:D2",
+ )
+ measure = protocol.primitive_step(
+ "MeasureAbsorbance",
+ samples=c_measure.output_pin("samples"),
+ wavelength=sbol3.Measure(600, tyto.OM.nanometer),
+ )
- protocol.add_output('absorbance', measure.output_pin('measurements'))
+ protocol.add_output("absorbance", measure.output_pin("measurements"))
return {
- 'protocol': protocol,
- 'ludox': provision_ludox,
- 'ddh2o': provision_ddh2o,
- 'measure': measure
+ "protocol": protocol,
+ "ludox": provision_ludox,
+ "ddh2o": provision_ddh2o,
+ "measure": measure,
}
def create_protocol_b(self, doc, ddh2o, ludox):
#############################################
# Create the protocol
- print('Creating protocol')
- protocol = paml.Protocol('iGEM_LUDOX_OD_calibration_2018_B')
+ print("Creating protocol")
+ protocol = labop.Protocol("iGEM_LUDOX_OD_calibration_2018_B")
protocol.name = "iGEM 2018 LUDOX OD calibration protocol B"
- protocol.description = '''
+ protocol.description = """
With this protocol you will use LUDOX CL-X (a 45% colloidal silica suspension) as a single point reference to
obtain a conversion factor to transform absorbance (OD600) data from your plate reader into a comparable
OD600 measurement as would be obtained in a spectrophotometer. This conversion is necessary because plate
@@ -145,36 +204,62 @@ def create_protocol_b(self, doc, ddh2o, ludox):
Therefore this conversion calculation can transform OD600 measurements from a plate reader (i.e. absorbance
at 600 nm, the basic output of most instruments) into comparable OD600 measurements. The LUDOX solution
is only weakly scattering and so will give a low absorbance value.
- '''
+ """
doc.add(protocol)
# actual steps of the protocol
# get a plate
- plate = protocol.primitive_step('EmptyContainer', specification=tyto.NCIT.get_uri_by_term('Microplate')) # replace with container ontology
+ plate = protocol.primitive_step(
+ "EmptyContainer",
+ specification=tyto.NCIT.get_uri_by_term("Microplate"),
+ ) # replace with container ontology
# put ludox and water in selected wells
- c_ddh2o = protocol.primitive_step('PlateCoordinates', source=plate.output_pin('samples'), coordinates='A1:D1')
- provision_ludox = protocol.primitive_step('Provision', resource=ludox, destination=c_ddh2o.output_pin('samples'),
- amount=sbol3.Measure(100, tyto.OM.microliter))
+ c_ddh2o = protocol.primitive_step(
+ "PlateCoordinates",
+ source=plate.output_pin("samples"),
+ coordinates="A1:D1",
+ )
+ provision_ludox = protocol.primitive_step(
+ "Provision",
+ resource=ludox,
+ destination=c_ddh2o.output_pin("samples"),
+ amount=sbol3.Measure(100, tyto.OM.microliter),
+ )
- c_ludox = protocol.primitive_step('PlateCoordinates', source=plate.output_pin('samples'), coordinates='A2:D2')
- provision_ddh2o = protocol.primitive_step('Provision', resource=ddh2o, destination=c_ludox.output_pin('samples'),
- amount=sbol3.Measure(100, tyto.OM.microliter))
+ c_ludox = protocol.primitive_step(
+ "PlateCoordinates",
+ source=plate.output_pin("samples"),
+ coordinates="A2:D2",
+ )
+ provision_ddh2o = protocol.primitive_step(
+ "Provision",
+ resource=ddh2o,
+ destination=c_ludox.output_pin("samples"),
+ amount=sbol3.Measure(100, tyto.OM.microliter),
+ )
# measure the absorbance
- c_measure = protocol.primitive_step('PlateCoordinates', source=plate.output_pin('samples'), coordinates='A1:D2')
- measure = protocol.primitive_step('MeasureAbsorbance', samples=c_measure.output_pin('samples'),
- wavelength=sbol3.Measure(600, tyto.OM.nanometer))
+ c_measure = protocol.primitive_step(
+ "PlateCoordinates",
+ source=plate.output_pin("samples"),
+ coordinates="A1:D2",
+ )
+ measure = protocol.primitive_step(
+ "MeasureAbsorbance",
+ samples=c_measure.output_pin("samples"),
+ wavelength=sbol3.Measure(600, tyto.OM.nanometer),
+ )
- protocol.add_output('absorbance', measure.output_pin('measurements'))
+ protocol.add_output("absorbance", measure.output_pin("measurements"))
return {
- 'protocol': protocol,
- 'ludox': provision_ludox,
- 'ddh2o': provision_ddh2o,
- 'measure': measure
+ "protocol": protocol,
+ "ludox": provision_ludox,
+ "ddh2o": provision_ddh2o,
+ "measure": measure,
}
-if __name__ == '__main__':
+
+if __name__ == "__main__":
unittest.main()
-
diff --git a/test/generation/test_LUDOX_protocol.py b/test/generation/test_LUDOX_protocol.py
index e1f4081..07c75ef 100644
--- a/test/generation/test_LUDOX_protocol.py
+++ b/test/generation/test_LUDOX_protocol.py
@@ -3,40 +3,43 @@
import unittest
import filecmp
import sbol3
-import paml
+import labop
import tyto
+
class TestLUDOX(unittest.TestCase):
- paml_file = os.path.join(os.getcwd(), 'test/resources/paml', 'igem_ludox_draft.ttl')
- paml_format = sbol3.TURTLE
+ labop_file = os.path.join(
+ os.getcwd(), "test/resources/labop", "igem_ludox_draft.ttl"
+ )
+ labop_format = sbol3.TURTLE
- # @unittest.skipIf(os.path.isfile(paml_file),
+ # @unittest.skipIf(os.path.isfile(labop_file),
# "skipped due to local cache")
def test_create_protocol(self):
#############################################
# set up the document
- print('Setting up document')
+ print("Setting up document")
doc = sbol3.Document()
- sbol3.set_namespace('https://bbn.com/scratch/')
+ sbol3.set_namespace("https://bbn.com/scratch/")
#############################################
# Import the primitive libraries
- print('Importing libraries')
- paml.import_library('liquid_handling')
- print('... Imported liquid handling')
- paml.import_library('plate_handling')
- print('... Imported plate handling')
- paml.import_library('spectrophotometry')
- print('... Imported spectrophotometry')
- paml.import_library('sample_arrays')
- print('... Imported sample arrays')
+ print("Importing libraries")
+ labop.import_library("liquid_handling")
+ print("... Imported liquid handling")
+ labop.import_library("plate_handling")
+ print("... Imported plate handling")
+ labop.import_library("spectrophotometry")
+ print("... Imported spectrophotometry")
+ labop.import_library("sample_arrays")
+ print("... Imported sample arrays")
#############################################
# Create the protocol
- print('Creating protocol')
- protocol = paml.Protocol('iGEM_LUDOX_OD_calibration_2018')
+ print("Creating protocol")
+ protocol = labop.Protocol("iGEM_LUDOX_OD_calibration_2018")
protocol.name = "iGEM 2018 LUDOX OD calibration protocol"
- protocol.description = '''
+ protocol.description = """
With this protocol you will use LUDOX CL-X (a 45% colloidal silica suspension) as a single point reference to
obtain a conversion factor to transform absorbance (OD600) data from your plate reader into a comparable
OD600 measurement as would be obtained in a spectrophotometer. This conversion is necessary because plate
@@ -46,48 +49,79 @@ def test_create_protocol(self):
Therefore this conversion calculation can transform OD600 measurements from a plate reader (i.e. absorbance
at 600 nm, the basic output of most instruments) into comparable OD600 measurements. The LUDOX solution
is only weakly scattering and so will give a low absorbance value.
- '''
+ """
doc.add(protocol)
# create the materials to be provisioned
- ddh2o = sbol3.Component('ddH2O', 'https://identifiers.org/pubchem.substance:24901740')
- ddh2o.name = 'Water, sterile-filtered, BioReagent, suitable for cell culture' # TODO get via tyto
+ ddh2o = sbol3.Component(
+ "ddH2O", "https://identifiers.org/pubchem.substance:24901740"
+ )
+ ddh2o.name = "Water, sterile-filtered, BioReagent, suitable for cell culture" # TODO get via tyto
doc.add(ddh2o)
- ludox = sbol3.Component('LUDOX', 'https://identifiers.org/pubchem.substance:24866361')
- ludox.name = 'LUDOX(R) CL-X colloidal silica, 45 wt. % suspension in H2O'
+ ludox = sbol3.Component(
+ "LUDOX", "https://identifiers.org/pubchem.substance:24866361"
+ )
+ ludox.name = (
+ "LUDOX(R) CL-X colloidal silica, 45 wt. % suspension in H2O"
+ )
doc.add(ludox)
# actual steps of the protocol
# get a plate
- plate = protocol.primitive_step('EmptyContainer', specification=tyto.NCIT.get_uri_by_term('Microplate')) # replace with container ontology
+ plate = protocol.primitive_step(
+ "EmptyContainer",
+ specification=tyto.NCIT.get_uri_by_term("Microplate"),
+ ) # replace with container ontology
# put ludox and water in selected wells
- c_ddh2o = protocol.primitive_step('PlateCoordinates', source=plate.output_pin('samples'), coordinates='A1:D1')
- protocol.primitive_step('Provision', resource=ludox, destination=c_ddh2o.output_pin('samples'),
- amount=sbol3.Measure(100, tyto.OM.microliter))
+ c_ddh2o = protocol.primitive_step(
+ "PlateCoordinates",
+ source=plate.output_pin("samples"),
+ coordinates="A1:D1",
+ )
+ protocol.primitive_step(
+ "Provision",
+ resource=ludox,
+ destination=c_ddh2o.output_pin("samples"),
+ amount=sbol3.Measure(100, tyto.OM.microliter),
+ )
- c_ludox = protocol.primitive_step('PlateCoordinates', source=plate.output_pin('samples'), coordinates='A2:D2')
- protocol.primitive_step('Provision', resource=ddh2o, destination=c_ludox.output_pin('samples'),
- amount=sbol3.Measure(100, tyto.OM.microliter))
+ c_ludox = protocol.primitive_step(
+ "PlateCoordinates",
+ source=plate.output_pin("samples"),
+ coordinates="A2:D2",
+ )
+ protocol.primitive_step(
+ "Provision",
+ resource=ddh2o,
+ destination=c_ludox.output_pin("samples"),
+ amount=sbol3.Measure(100, tyto.OM.microliter),
+ )
# measure the absorbance
- c_measure = protocol.primitive_step('PlateCoordinates', source=plate.output_pin('samples'), coordinates='A1:D2')
- measure = protocol.primitive_step('MeasureAbsorbance', samples=c_measure.output_pin('samples'),
- wavelength=sbol3.Measure(600, tyto.OM.nanometer))
+ c_measure = protocol.primitive_step(
+ "PlateCoordinates",
+ source=plate.output_pin("samples"),
+ coordinates="A1:D2",
+ )
+ measure = protocol.primitive_step(
+ "MeasureAbsorbance",
+ samples=c_measure.output_pin("samples"),
+ wavelength=sbol3.Measure(600, tyto.OM.nanometer),
+ )
- protocol.add_output('absorbance', measure.output_pin('measurements'))
+ protocol.add_output("absorbance", measure.output_pin("measurements"))
########################################
# Validate and write the document
- print('Validating and writing protocol')
+ print("Validating and writing protocol")
v = doc.validate()
- assert len(v) == 0, "".join(f'\n {e}' for e in v)
+ assert len(v) == 0, "".join(f"\n {e}" for e in v)
- doc.write(self.paml_file, self.paml_format)
- print(f'Wrote file as {self.paml_file}')
+ doc.write(self.labop_file, self.labop_format)
+ print(f"Wrote file as {self.labop_file}")
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
-
diff --git a/test/generation/test_LUDOX_time_protocol.py b/test/generation/test_LUDOX_time_protocol.py
index 5341803..67ba682 100644
--- a/test/generation/test_LUDOX_time_protocol.py
+++ b/test/generation/test_LUDOX_time_protocol.py
@@ -3,41 +3,44 @@
import unittest
import filecmp
import sbol3
-import paml
-import paml_time as pamlt
+import labop
+import labop_time as labopt
import tyto
+
class TestLUDOXTime(unittest.TestCase):
- paml_file = os.path.join(os.getcwd(), 'test/resources/paml', 'igem_ludox_time_draft.ttl')
- paml_format = sbol3.TURTLE
+ labop_file = os.path.join(
+ os.getcwd(), "test/resources/labop", "igem_ludox_time_draft.ttl"
+ )
+ labop_format = sbol3.TURTLE
- # @unittest.skipIf(os.path.isfile(paml_file),
+ # @unittest.skipIf(os.path.isfile(labop_file),
# "skipped due to local cache")
def test_create_protocol(self):
#############################################
# set up the document
- print('Setting up document')
+ print("Setting up document")
doc = sbol3.Document()
- sbol3.set_namespace('https://bbn.com/scratch/')
+ sbol3.set_namespace("https://bbn.com/scratch/")
#############################################
# Import the primitive libraries
- print('Importing libraries')
- paml.import_library('liquid_handling')
- print('... Imported liquid handling')
- paml.import_library('plate_handling')
- print('... Imported plate handling')
- paml.import_library('spectrophotometry')
- print('... Imported spectrophotometry')
- paml.import_library('sample_arrays')
- print('... Imported sample arrays')
+ print("Importing libraries")
+ labop.import_library("liquid_handling")
+ print("... Imported liquid handling")
+ labop.import_library("plate_handling")
+ print("... Imported plate handling")
+ labop.import_library("spectrophotometry")
+ print("... Imported spectrophotometry")
+ labop.import_library("sample_arrays")
+ print("... Imported sample arrays")
#############################################
# Create the protocol
- print('Creating protocol')
- protocol = paml.Protocol('iGEM_LUDOX_OD_calibration_2018')
+ print("Creating protocol")
+ protocol = labop.Protocol("iGEM_LUDOX_OD_calibration_2018")
protocol.name = "iGEM 2018 LUDOX OD calibration protocol"
- protocol.description = '''
+ protocol.description = """
With this protocol you will use LUDOX CL-X (a 45% colloidal silica suspension) as a single point reference to
obtain a conversion factor to transform absorbance (OD600) data from your plate reader into a comparable
OD600 measurement as would be obtained in a spectrophotometer. This conversion is necessary because plate
@@ -47,69 +50,113 @@ def test_create_protocol(self):
Therefore this conversion calculation can transform OD600 measurements from a plate reader (i.e. absorbance
at 600 nm, the basic output of most instruments) into comparable OD600 measurements. The LUDOX solution
is only weakly scattering and so will give a low absorbance value.
- '''
+ """
doc.add(protocol)
# create the materials to be provisioned
- ddh2o = sbol3.Component('ddH2O', 'https://identifiers.org/pubchem.substance:24901740')
- ddh2o.name = 'Water, sterile-filtered, BioReagent, suitable for cell culture' # TODO get via tyto
+ ddh2o = sbol3.Component(
+ "ddH2O", "https://identifiers.org/pubchem.substance:24901740"
+ )
+ ddh2o.name = "Water, sterile-filtered, BioReagent, suitable for cell culture" # TODO get via tyto
doc.add(ddh2o)
- ludox = sbol3.Component('LUDOX', 'https://identifiers.org/pubchem.substance:24866361')
- ludox.name = 'LUDOX(R) CL-X colloidal silica, 45 wt. % suspension in H2O'
+ ludox = sbol3.Component(
+ "LUDOX", "https://identifiers.org/pubchem.substance:24866361"
+ )
+ ludox.name = (
+ "LUDOX(R) CL-X colloidal silica, 45 wt. % suspension in H2O"
+ )
doc.add(ludox)
# actual steps of the protocol
# get a plate
- plate = protocol.primitive_step('EmptyContainer', specification=tyto.NCIT.get_uri_by_term('Microplate')) # replace with container ontology
+ plate = protocol.primitive_step(
+ "EmptyContainer",
+ specification=tyto.NCIT.get_uri_by_term("Microplate"),
+ ) # replace with container ontology
# put ludox and water in selected wells
- c_ddh2o = protocol.primitive_step('PlateCoordinates', source=plate.output_pin('samples'), coordinates='A1:D1')
- provision_ludox = protocol.primitive_step('Provision', resource=ludox, destination=c_ddh2o.output_pin('samples'),
- amount=sbol3.Measure(100, tyto.OM.microliter))
+ c_ddh2o = protocol.primitive_step(
+ "PlateCoordinates",
+ source=plate.output_pin("samples"),
+ coordinates="A1:D1",
+ )
+ provision_ludox = protocol.primitive_step(
+ "Provision",
+ resource=ludox,
+ destination=c_ddh2o.output_pin("samples"),
+ amount=sbol3.Measure(100, tyto.OM.microliter),
+ )
- c_ludox = protocol.primitive_step('PlateCoordinates', source=plate.output_pin('samples'), coordinates='A2:D2')
- provision_ddh2o = protocol.primitive_step('Provision', resource=ddh2o, destination=c_ludox.output_pin('samples'),
- amount=sbol3.Measure(100, tyto.OM.microliter))
+ c_ludox = protocol.primitive_step(
+ "PlateCoordinates",
+ source=plate.output_pin("samples"),
+ coordinates="A2:D2",
+ )
+ provision_ddh2o = protocol.primitive_step(
+ "Provision",
+ resource=ddh2o,
+ destination=c_ludox.output_pin("samples"),
+ amount=sbol3.Measure(100, tyto.OM.microliter),
+ )
# measure the absorbance
- c_measure = protocol.primitive_step('PlateCoordinates', source=plate.output_pin('samples'), coordinates='A1:D2')
- measure = protocol.primitive_step('MeasureAbsorbance', samples=c_measure.output_pin('samples'),
- wavelength=sbol3.Measure(600, tyto.OM.nanometer))
+ c_measure = protocol.primitive_step(
+ "PlateCoordinates",
+ source=plate.output_pin("samples"),
+ coordinates="A1:D2",
+ )
+ measure = protocol.primitive_step(
+ "MeasureAbsorbance",
+ samples=c_measure.output_pin("samples"),
+ wavelength=sbol3.Measure(600, tyto.OM.nanometer),
+ )
- protocol.add_output('absorbance', measure.output_pin('measurements'))
+ protocol.add_output("absorbance", measure.output_pin("measurements"))
# Set protocol timepoints
# protocol starts at time 0
- protocol_start_time = pamlt.startTime(protocol, 0, units=tyto.OM.hour)
- provision_ludox_duration = pamlt.duration(provision_ludox, 60, units=tyto.OM.second)
- provision_ddh2o_duration = pamlt.duration(provision_ddh2o, 60, units=tyto.OM.second)
- execute_measurement_duration = pamlt.duration(measure, 60, units=tyto.OM.minute)
- ludox_before_ddh2o_constraint = pamlt.precedes(provision_ludox, [10, 15], provision_ddh2o, units=tyto.OM.hour)
-
- time_constraints = pamlt.TimeConstraints("ludox_protocol_constraints",
- constraints=[pamlt.And([
- protocol_start_time,
- provision_ludox_duration,
- provision_ddh2o_duration,
- execute_measurement_duration,
- ludox_before_ddh2o_constraint
- ])],
- protocols = [protocol]
+ protocol_start_time = labopt.startTime(protocol, 0, units=tyto.OM.hour)
+ provision_ludox_duration = labopt.duration(
+ provision_ludox, 60, units=tyto.OM.second
+ )
+ provision_ddh2o_duration = labopt.duration(
+ provision_ddh2o, 60, units=tyto.OM.second
+ )
+ execute_measurement_duration = labopt.duration(
+ measure, 60, units=tyto.OM.minute
+ )
+ ludox_before_ddh2o_constraint = labopt.precedes(
+ provision_ludox, [10, 15], provision_ddh2o, units=tyto.OM.hour
+ )
+
+ time_constraints = labopt.TimeConstraints(
+ "ludox_protocol_constraints",
+ constraints=[
+ labopt.And(
+ [
+ protocol_start_time,
+ provision_ludox_duration,
+ provision_ddh2o_duration,
+ execute_measurement_duration,
+ ludox_before_ddh2o_constraint,
+ ]
+ )
+ ],
+ protocols=[protocol],
)
doc.add(time_constraints)
########################################
# Validate and write the document
- print('Validating and writing protocol')
+ print("Validating and writing protocol")
v = doc.validate()
- assert len(v) == 0, "".join(f'\n {e}' for e in v)
+ assert len(v) == 0, "".join(f"\n {e}" for e in v)
- doc.write(self.paml_file, self.paml_format)
- print(f'Wrote file as {self.paml_file}')
+ doc.write(self.labop_file, self.labop_format)
+ print(f"Wrote file as {self.labop_file}")
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
-
diff --git a/test/resources/paml/igem_ludox_draft.ttl b/test/resources/paml/igem_ludox_draft.ttl
index 874c53e..c375325 100644
--- a/test/resources/paml/igem_ludox_draft.ttl
+++ b/test/resources/paml/igem_ludox_draft.ttl
@@ -3,7 +3,7 @@
@prefix sbol: .
@prefix xsd: .
- a ,
+ a ,
sbol:TopLevel ;
ns1:edge ,
,
@@ -339,371 +339,371 @@ is only weakly scattering and so will give a low absorbance value.
ns1:integerValue 1 ;
sbol:displayId "LiteralInteger2" .
- a ns1:OrderedPropertyValue,
+ a ns1:OrderedPropertyValue,
sbol:Identified ;
ns1:indexValue 0 ;
- ns1:propertyValue ;
+ ns1:propertyValue ;
sbol:displayId "OrderedPropertyValue1" .
- a ns1:Parameter,
+ a ns1:Parameter,
sbol:Identified ;
ns1:direction ns1:in ;
ns1:isOrdered true ;
ns1:isUnique true ;
- ns1:lowerValue ;
+ ns1:lowerValue ;
ns1:type sbol:Component ;
- ns1:upperValue ;
+ ns1:upperValue ;
sbol:displayId "Parameter1" ;
sbol:name "resource" .
- a ns1:LiteralInteger,
+ a ns1:LiteralInteger,
sbol:Identified ;
ns1:integerValue 1 ;
sbol:displayId "LiteralInteger1" .
- a ns1:LiteralInteger,
+ a ns1:LiteralInteger,
sbol:Identified ;
ns1:integerValue 1 ;
sbol:displayId "LiteralInteger2" .
- a ns1:OrderedPropertyValue,
+ a ns1:OrderedPropertyValue,
sbol:Identified ;
ns1:indexValue 1 ;
- ns1:propertyValue ;
+ ns1:propertyValue ;
sbol:displayId "OrderedPropertyValue2" .
- a ns1:Parameter,
+ a ns1:Parameter,
sbol:Identified ;
ns1:direction ns1:in ;
ns1:isOrdered true ;
ns1:isUnique true ;
- ns1:lowerValue ;
- ns1:type ;
- ns1:upperValue ;
+ ns1:lowerValue ;
+ ns1:type ;
+ ns1:upperValue ;
sbol:displayId "Parameter1" ;
sbol:name "destination" .
- a ns1:LiteralInteger,
+ a ns1:LiteralInteger,
sbol:Identified ;
ns1:integerValue 1 ;
sbol:displayId "LiteralInteger1" .
- a ns1:LiteralInteger,
+ a ns1:LiteralInteger,
sbol:Identified ;
ns1:integerValue 1 ;
sbol:displayId "LiteralInteger2" .
- a ns1:OrderedPropertyValue,
+ a ns1:OrderedPropertyValue,
sbol:Identified ;
ns1:indexValue 2 ;
- ns1:propertyValue ;
+ ns1:propertyValue ;
sbol:displayId "OrderedPropertyValue3" .
- a ns1:Parameter,
+ a ns1:Parameter,
sbol:Identified ;
ns1:direction ns1:in ;
ns1:isOrdered true ;
ns1:isUnique true ;
- ns1:lowerValue ;
+ ns1:lowerValue ;
ns1:type om:Measure ;
- ns1:upperValue ;
+ ns1:upperValue ;
sbol:displayId "Parameter1" ;
sbol:name "amount" .
- a ns1:LiteralInteger,
+ a ns1:LiteralInteger,
sbol:Identified ;
ns1:integerValue 1 ;
sbol:displayId "LiteralInteger1" .
- a ns1:LiteralInteger,
+ a ns1:LiteralInteger,
sbol:Identified ;
ns1:integerValue 1 ;
sbol:displayId "LiteralInteger2" .
- a ns1:OrderedPropertyValue,
+ a ns1:OrderedPropertyValue,
sbol:Identified ;
ns1:indexValue 3 ;
- ns1:propertyValue ;
+ ns1:propertyValue ;
sbol:displayId "OrderedPropertyValue4" .
- a ns1:Parameter,
+ a ns1:Parameter,
sbol:Identified ;
ns1:direction ns1:in ;
ns1:isOrdered true ;
ns1:isUnique true ;
- ns1:lowerValue ;
+ ns1:lowerValue ;
ns1:type om:Measure ;
- ns1:upperValue ;
+ ns1:upperValue ;
sbol:displayId "Parameter1" ;
sbol:name "dispenseVelocity" .
- a ns1:LiteralInteger,
+ a ns1:LiteralInteger,
sbol:Identified ;
ns1:integerValue 1 ;
sbol:displayId "LiteralInteger1" .
- a ns1:LiteralInteger,
+ a ns1:LiteralInteger,
sbol:Identified ;
ns1:integerValue 0 ;
sbol:displayId "LiteralInteger2" .
- a ,
+ a ,
sbol:TopLevel ;
- ns1:ownedParameter ,
- ;
+ ns1:ownedParameter ,
+ ;
sbol:description "Allocate a sample array with size and type based on an empty container" ;
sbol:displayId "EmptyContainer" ;
- sbol:hasNamespace .
+ sbol:hasNamespace .
- a ns1:OrderedPropertyValue,
+ a ns1:OrderedPropertyValue,
sbol:Identified ;
ns1:indexValue 0 ;
- ns1:propertyValue ;
+ ns1:propertyValue ;
sbol:displayId "OrderedPropertyValue1" .
- a ns1:Parameter,
+ a ns1:Parameter,
sbol:Identified ;
ns1:direction ns1:in ;
ns1:isOrdered true ;
ns1:isUnique true ;
- ns1:lowerValue ;
+ ns1:lowerValue ;
ns1:type sbol:Identified ;
- ns1:upperValue ;
+ ns1:upperValue ;
sbol:displayId "Parameter1" ;
sbol:name "specification" .
- a ns1:LiteralInteger,
+ a ns1:LiteralInteger,
sbol:Identified ;
ns1:integerValue 1 ;
sbol:displayId "LiteralInteger1" .
- a ns1:LiteralInteger,
+ a ns1:LiteralInteger,
sbol:Identified ;
ns1:integerValue 1 ;
sbol:displayId "LiteralInteger2" .
- a ns1:OrderedPropertyValue,
+ a ns1:OrderedPropertyValue,
sbol:Identified ;
ns1:indexValue 1 ;
- ns1:propertyValue ;
+ ns1:propertyValue ;
sbol:displayId "OrderedPropertyValue2" .
- a ns1:Parameter,
+ a ns1:Parameter,
sbol:Identified ;
ns1:direction ns1:out ;
ns1:isOrdered true ;
ns1:isUnique true ;
- ns1:lowerValue ;
- ns1:type ;
- ns1:upperValue ;
+ ns1:lowerValue ;
+ ns1:type ;
+ ns1:upperValue ;
sbol:displayId "Parameter1" ;
sbol:name "samples" .
- a ns1:LiteralInteger,
+ a ns1:LiteralInteger,
sbol:Identified ;
ns1:integerValue 1 ;
sbol:displayId "LiteralInteger1" .
- a ns1:LiteralInteger,
+ a ns1:LiteralInteger,
sbol:Identified ;
ns1:integerValue 1 ;
sbol:displayId "LiteralInteger2" .
- a ns1:OrderedPropertyValue,
+ a ns1:OrderedPropertyValue,
sbol:Identified ;
ns1:indexValue 0 ;
- ns1:propertyValue ;
+ ns1:propertyValue ;
sbol:displayId "OrderedPropertyValue1" .
- a ns1:Parameter,
+ a ns1:Parameter,
sbol:Identified ;
ns1:direction ns1:in ;
ns1:isOrdered true ;
ns1:isUnique true ;
- ns1:lowerValue ;
- ns1:type ;
- ns1:upperValue ;
+ ns1:lowerValue ;
+ ns1:type ;
+ ns1:upperValue ;
sbol:displayId "Parameter1" ;
sbol:name "source" .
- a ns1:LiteralInteger,
+ a ns1:LiteralInteger,
sbol:Identified ;
ns1:integerValue 1 ;
sbol:displayId "LiteralInteger1" .
- a ns1:LiteralInteger,
+ a ns1:LiteralInteger,
sbol:Identified ;
ns1:integerValue 1 ;
sbol:displayId "LiteralInteger2" .
- a ns1:OrderedPropertyValue,
+ a ns1:OrderedPropertyValue,
sbol:Identified ;
ns1:indexValue 1 ;
- ns1:propertyValue ;
+ ns1:propertyValue ;
sbol:displayId "OrderedPropertyValue2" .
- a ns1:Parameter,
+ a ns1:Parameter,
sbol:Identified ;
ns1:direction ns1:in ;
ns1:isOrdered true ;
ns1:isUnique true ;
- ns1:lowerValue ;
+ ns1:lowerValue ;
ns1:type ns1:ValueSpecification ;
- ns1:upperValue ;
+ ns1:upperValue ;
sbol:displayId "Parameter1" ;
sbol:name "coordinates" .
- a ns1:LiteralInteger,
+ a ns1:LiteralInteger,
sbol:Identified ;
ns1:integerValue 1 ;
sbol:displayId "LiteralInteger1" .
- a ns1:LiteralInteger,
+ a ns1:LiteralInteger,
sbol:Identified ;
ns1:integerValue 1 ;
sbol:displayId "LiteralInteger2" .
- a ns1:OrderedPropertyValue,
+ a ns1:OrderedPropertyValue,
sbol:Identified ;
ns1:indexValue 2 ;
- ns1:propertyValue ;
+ ns1:propertyValue ;
sbol:displayId "OrderedPropertyValue3" .
- a ns1:Parameter,
+ a ns1:Parameter,
sbol:Identified ;
ns1:direction ns1:out ;
ns1:isOrdered true ;
ns1:isUnique true ;
- ns1:lowerValue ;
- ns1:type ;
- ns1:upperValue ;
+ ns1:lowerValue ;
+ ns1:type ;
+ ns1:upperValue ;
sbol:displayId "Parameter1" ;
sbol:name "samples" .
- a ns1:LiteralInteger,
+ a ns1:LiteralInteger,
sbol:Identified ;
ns1:integerValue 1 ;
sbol:displayId "LiteralInteger1" .
- a ns1:LiteralInteger,
+ a ns1:LiteralInteger,
sbol:Identified ;
ns1:integerValue 1 ;
sbol:displayId "LiteralInteger2" .
- a ,
+ a ,
sbol:TopLevel ;
- ns1:ownedParameter ,
- ,
- ,
- ;
+ ns1:ownedParameter ,
+ ,
+ ,
+ ;
sbol:description "Measure absorbance at a given wavelength from a set of samples" ;
sbol:displayId "MeasureAbsorbance" ;
- sbol:hasNamespace .
+ sbol:hasNamespace .
- a ns1:OrderedPropertyValue,
+ a ns1:OrderedPropertyValue,
sbol:Identified ;
ns1:indexValue 0 ;
- ns1:propertyValue ;
+ ns1:propertyValue ;
sbol:displayId "OrderedPropertyValue1" .
- a ns1:Parameter,
+ a ns1:Parameter,
sbol:Identified ;
ns1:direction ns1:in ;
ns1:isOrdered true ;
ns1:isUnique true ;
- ns1:lowerValue ;
- ns1:type ;
- ns1:upperValue ;
+ ns1:lowerValue ;
+ ns1:type ;
+ ns1:upperValue ;
sbol:displayId "Parameter1" ;
sbol:name "samples" .
- a ns1:LiteralInteger,
+ a ns1:LiteralInteger,
sbol:Identified ;
ns1:integerValue 1 ;
sbol:displayId "LiteralInteger1" .
- a ns1:LiteralInteger,
+ a ns1:LiteralInteger,
sbol:Identified ;
ns1:integerValue 1 ;
sbol:displayId "LiteralInteger2" .
- a ns1:OrderedPropertyValue,
+ a ns1:OrderedPropertyValue,
sbol:Identified ;
ns1:indexValue 1 ;
- ns1:propertyValue ;
+ ns1:propertyValue ;
sbol:displayId "OrderedPropertyValue2" .
- a ns1:Parameter,
+ a ns1:Parameter,
sbol:Identified ;
ns1:direction ns1:in ;
ns1:isOrdered true ;
ns1:isUnique true ;
- ns1:lowerValue ;
+ ns1:lowerValue ;
ns1:type om:Measure ;
- ns1:upperValue ;
+ ns1:upperValue ;
sbol:displayId "Parameter1" ;
sbol:name "wavelength" .
- a ns1:LiteralInteger,
+ a ns1:LiteralInteger,
sbol:Identified ;
ns1:integerValue 1 ;
sbol:displayId "LiteralInteger1" .
- a ns1:LiteralInteger,
+ a ns1:LiteralInteger,
sbol:Identified ;
ns1:integerValue 1 ;
sbol:displayId "LiteralInteger2" .
- a ns1:OrderedPropertyValue,
+ a ns1:OrderedPropertyValue,
sbol:Identified ;
ns1:indexValue 2 ;
- ns1:propertyValue ;
+ ns1:propertyValue ;
sbol:displayId "OrderedPropertyValue3" .
- a ns1:Parameter,
+ a ns1:Parameter,
sbol:Identified ;
ns1:direction ns1:in ;
ns1:isOrdered true ;
ns1:isUnique true ;
- ns1:lowerValue ;
+ ns1:lowerValue ;
ns1:type xsd:integer ;
- ns1:upperValue ;
+ ns1:upperValue ;
sbol:displayId "Parameter1" ;
sbol:name "numFlashes" .
- a ns1:LiteralInteger,
+ a ns1:LiteralInteger,
sbol:Identified ;
ns1:integerValue 1 ;
sbol:displayId "LiteralInteger1" .
- a ns1:LiteralInteger,
+ a ns1:LiteralInteger,
sbol:Identified ;
ns1:integerValue 0 ;
sbol:displayId "LiteralInteger2" .
- a ns1:OrderedPropertyValue,
+ a ns1:OrderedPropertyValue,
sbol:Identified ;
ns1:indexValue 3 ;
- ns1:propertyValue ;
+ ns1:propertyValue ;
sbol:displayId "OrderedPropertyValue4" .
- a ns1:Parameter,
+ a ns1:Parameter,
sbol:Identified ;
ns1:direction ns1:out ;
ns1:isOrdered true ;
ns1:isUnique true ;
- ns1:lowerValue ;
- ns1:type ;
- ns1:upperValue ;
+ ns1:lowerValue ;
+ ns1:type ;
+ ns1:upperValue ;
sbol:displayId "Parameter1" ;
sbol:name "measurements" .
- a ns1:LiteralInteger,
+ a ns1:LiteralInteger,
sbol:Identified ;
ns1:integerValue 1 ;
sbol:displayId "LiteralInteger1" .
- a ns1:LiteralInteger,
+ a ns1:LiteralInteger,
sbol:Identified ;
ns1:integerValue 1 ;
sbol:displayId "LiteralInteger2" .
@@ -824,15 +824,15 @@ is only weakly scattering and so will give a low absorbance value.
sbol:displayId "Parameter1" ;
sbol:name "absorbance" .
- a ,
+ a ,
sbol:TopLevel ;
- ns1:ownedParameter ,
- ,
- ,
- ;
+ ns1:ownedParameter ,
+ ,
+ ,
+ ;
sbol:description "Place a measured amount (mass or volume) of a specified component into a location, where it may then be used in executing the protocol." ;
sbol:displayId "Provision" ;
- sbol:hasNamespace .
+ sbol:hasNamespace .
a ns1:ActivityParameterNode,
sbol:Identified ;
@@ -841,14 +841,14 @@ is only weakly scattering and so will give a low absorbance value.
a ns1:CallBehaviorAction,
sbol:Identified ;
- ns1:behavior ;
+ ns1:behavior ;
ns1:input ;
ns1:output ;
sbol:displayId "CallBehaviorAction1" .
a ns1:CallBehaviorAction,
sbol:Identified ;
- ns1:behavior ;
+ ns1:behavior ;
ns1:input ,
;
ns1:output ;
@@ -856,7 +856,7 @@ is only weakly scattering and so will give a low absorbance value.
a ns1:CallBehaviorAction,
sbol:Identified ;
- ns1:behavior ;
+ ns1:behavior