import pandas as pd
data = pd.read_sql("SELECT * FROM research.assay_measurements", connection)
coverage = data.groupby("run")["concentration_um"].nunique()
assert (coverage == 6).all(), coverage

More time fordiscovery., experiments., analysis., results., insights.
A collaborative agentic workbench for scientists.
Book a demoFrom the sample
to the analysis.
Bring Benchling records and instrument measurements into your warehouse. Work with agents and Python in the same workspace to explore the results.
I’ll check the sample registry, instrument reader, and study methods before building the notebook.
The reader retains the registered sample IDs. Both runs cover the same six concentrations.
The notebook is ready. Sample IDs and batch identifiers remain attached to every reading.
Check run coverage
import pandas as pd
data = pd.read_sql("SELECT * FROM research.assay_measurements", connection)
coverage = data.groupby("run")["concentration_um"].nunique()
assert (coverage == 6).all(), coverage
Compare assay runs
import matplotlib.pyplot as plt
for run, rows in data.groupby("run"):
plt.plot(rows["concentration_um"].astype(str),
rows["signal_rfu"], marker="o", label=f"Run {run}")
plt.legend()
Benchling registry
originRegistered compounds, sample identifiers, and concentrations for study CS-018.
CS-018 / Samplessynced 4m ago1 to 3 of 3
Impact
Choose a change to see its impact.
Knowledge items
Join instrument readings to Benchling on sample_id; retain batch_id through analysis.
1 to 1 of 1
Plate exports
originplate_018.csv (Run A) and plate_019.csv (Run B), read by the lab’s Python importer.
Plate reader / Runs A and Bread 4m ago1 to 3 of 3
Impact
Choose a change to see its impact.
Knowledge items
Join instrument readings to Benchling on sample_id; retain batch_id through analysis.
Raw fluorescence is retained before any normalization or comparison.
1 to 2 of 2
prepare_assay.py
parsedTags each plate reading with its run and joins it to the Benchling sample registry. The plugin records code provenance, schema, and quality checks.
Custom plugin / Pythonverified 3m ago1 to 5 of 5
Impact
Choose a change to see its impact.
Knowledge items
Join instrument readings to Benchling on sample_id; retain batch_id through analysis.
Raw fluorescence is retained before any normalization or comparison.
1 to 2 of 2
assay_measurements
parsedPrepared measurements keep sample, run, and batch identifiers for notebook analysis.
Snowflake / RESEARCHloaded 3m ago1 to 5 of 5
Impact
Choose a change to see its impact.
Knowledge items
Join instrument readings to Benchling on sample_id; retain batch_id through analysis.
Match sample IDs and concentrations before comparing the two assay runs.
1 to 2 of 2
No entries match this view.
Keep the registered sample IDJoin instrument readings to Benchling on sample_id; retain batch_id through analysis.
Snowflake2h ago
Verified. Reviewed by a person on the team.
Schema card filed under CS-018 / Compound screening, shared with the team.
Maya Chen reviewed it 2h ago.
Each row in RESEARCH.ASSAY_MEASUREMENTS represents one sample measurement in one run. Sample IDs come from the Benchling registry; the instrument reader retains the original batch ID.
Reject missing sample IDs. Validate the registry join as many-to-one before loading the warehouse.
Attached lineage nodes
RESEARCH.ASSAY_MEASUREMENTSStudy CS-018 · sample identitySignal is recorded in RFURaw fluorescence is retained before any normalization or comparison.Agent12m ago
Agent-set. Written by the agent; awaiting human review.
Learned fact filed under CS-018 / Compound screening, shared with the team.
Alkera recorded it 12m ago.
The plate reader exports signal_rfu. Concentration is supplied by the sample registry in micromolar units.
Do not combine normalized and raw signals in the same analysis. Keep the original reading available.
Attached lineage nodes
prepare_assay.pyLearned from processing codeCompare runs within the same studyMatch sample IDs and concentrations before comparing the two assay runs.Human1h ago
Verified. Reviewed by a person on the team.
Note filed under CS-018 / Compound screening, shared with the team.
Maya Chen reviewed it 1h ago.
Run A and Run B cover the same concentration series. Inspect both curves and the source records before excluding a measurement.
Keep the study, run, sample, and batch identifiers in exported results.
Attached lineage nodes
Dose responseReviewed by the study ownerKnow where every result comes from.
Trace results back to samples, instruments, and processing code. When a lab’s Python job isn’t connected, the agent writes a plugin that adds it to lineage.
assay_measurements
parsedPrepared measurements keep sample, run, and batch identifiers for notebook analysis.
Snowflake / RESEARCHloaded 3m ago1 to 5 of 5
Impact
Choose a change to see its impact.
Knowledge items
0 to 0 of 0
assay_measurements
parsedPrepared measurements keep sample, run, and batch identifiers for notebook analysis.
Snowflake / RESEARCHloaded 3m ago1 to 5 of 5
Impact
Choose a change to see its impact.
Knowledge items
0 to 0 of 0
Plate reader
parsedTags each plate reading with its run and joins it to the Benchling sample registry. The plugin records code provenance, schema, and quality checks.
Custom plugin / Pythonverified 3m ago1 to 5 of 5
Impact
Choose a change to see its impact.
Knowledge items
0 to 0 of 0
The plate-reader measurements are ingested by Python code. I can connect that reader to your workspace.
Plugin creation approved. Creating the plugin now.
The plugin was created successfully. Your instrument reader now appears in lineage, with its processing methods and quality checks attached.
Keep bad data out
of the next experiment.
Write SQL or Python checks, choose when they run and which records they inspect, and get alerts when one fails. Agents diagnose pipeline bugs, verify fixes in an isolated copy, and open a pull request for your review.