cp-build-single-cell-table

cp-build-single-cell-table turns CellProfiler measurement tables into one single-cell table.

It is the step that takes separate CellProfiler outputs and rewrites them into one table where each row represents one cell.

Purpose

Use this skill when you want:

  • one row per cell instead of separate CellProfiler tables

  • a single table that downstream classical profiling steps can use directly

  • the bridge between CellProfiler outputs and pycytominer-style profiling

Main Outcome

After this skill finishes, the measurement outputs are no longer split across separate tables.

Instead, you have one merged single-cell table that downstream classical profiling steps can read directly.

Inputs

This skill reads:

  • a project config such as configs/project_config.demo.json

  • the standard CellProfiler measurement tables

  • an optional output directory

In the recorded demo run below, the merge used the Cells object table.

Outputs

  • single_cell.csv.gz One compressed table where each row is one cell and each column is a measurement or identifier.

  • pipeline_skill_manifest.json The run record for this skill invocation.

Agent Demo

This page is based on a real local OpenClaw turn against the repository demo config:

  • record id: cpsinglecell-local-v5

  • recorded on 2026-05-06 13:41 UTC

  • model: vibe/gpt-5-mini

Request

I want to organize these Cell Painting measurements into a single-cell table and understand what one row in that table actually represents.

Structured Trace

user_input:
I want to organize these Cell Painting measurements into a single-cell table and understand what one row in that table actually represents.

recorded_turn:
- the saved OpenClaw turn answered this request directly
- the reply identified `cp-build-single-cell-table` as the step used
- the reply reported `single_cell.csv.gz` with 4 rows and 16 columns
- the reply explained that each row represents one segmented cell

final_answer_snapshot:
The resulting table is one row per segmented cell and is the analysis-friendly handoff table for downstream classical profiling steps.

Observed Result

A real recorded run for this skill wrote:

  • single_cell.csv.gz

  • pipeline_skill_manifest.json

The recorded output summary showed:

  • 4 single-cell rows

  • 16 columns

  • object table used for the merge: Cells

The table contained:

  • metadata columns such as plate, well, and site

  • object-link columns that preserve CellProfiler identity

  • cell morphology features

  • channel-intensity features

Recorded Reply

I organized the demo Cell Painting measurements into a single-cell table using the stable step:

- `cp-build-single-cell-table`

Output table
- `/root/pipeline/CellPainting-Claw/demo/workspace/outputs/agent_demo_single_cell/single_cell.csv.gz`
- 4 rows
- 16 columns

What one row actually represents
- one cell object from `Cells.csv`
- joined with image-level metadata from `Image.csv`
- identified by plate / well / site / image
- carrying that cell’s morphology and intensity measurements

So the table is:
- not one row per well
- not one row per image
- yes one row per single cell

What kinds of information are in each row
- provenance columns such as `ImageNumber`, `Metadata_Plate`, `Metadata_Well`, `Metadata_Site`
- cell identity columns such as `Metadata_ObjectNumber`, `Cells_Parent_Nuclei`
- morphology columns such as `Cells_AreaShape_Center_X`, `Cells_AreaShape_Center_Y`, `Cells_AreaShape_Area`
- intensity columns such as `Cells_Intensity_MeanIntensity_OrigDNA`, `Cells_Intensity_MeanIntensity_OrigAGP`, `Cells_Intensity_MeanIntensity_OrigRNA`

Biologically, one row is a single-cell phenotype record.

In this demo:
- 2 cells from well `A01`, site `1`
- 2 cells from well `A02`, site `1`

Bottom line
- one row = one cell
- columns = that cell’s metadata + measurements

Next Skills