Submit sequencing data to Isabl by creating individuals, samples, and experiments. Use when registering new data files or importing from external sources.
التثبيت
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
Submit sequencing data to Isabl by creating individuals, samples, and experiments. Use when registering new data files or importing from external sources.
tools
Read, Bash
model
inherit
Submitting Data to Isabl
You are helping the user submit new sequencing data to the Isabl platform.
Checklist
Work through these steps systematically:
Understand data hierarchy (Individual → Sample → Experiment)
Check required reference data (Center, Technique, Platform, Disease)
Prepare individual records
Prepare sample records
Prepare experiment records with raw_data
Validate before submission
Submit to API
Verify submission
Data Hierarchy
Individual (patient/subject)
├── identifier: unique ID from source system
├── species: HUMAN, MOUSE, etc.
├── gender: MALE, FEMALE, UNKNOWN
├── center: where samples originated
│
└── Sample (tissue specimen)
├── identifier: sample ID
├── category: TUMOR, NORMAL, GERMLINE, etc.
├── disease: disease classification
│
└── Experiment (sequencing run)
├── identifier: library/run ID
├── technique: WGS, WES, RNA, etc.
├── platform: ILLUMINA, ONT, etc.
├── center: where sequenced
├── projects: [project memberships]
└── raw_data: [file paths with metadata]
Step 1: Check Reference Data
import isabl_cli as ii
# Check available centers
centers = list(ii.get_instances("centers"))
print("Centers:", [c.slug for c in centers])
# Check available techniques
techniques = list(ii.get_instances("techniques"))
print("Techniques:", [(t.slug, t.method) for t in techniques])
# Check available platforms
platforms = list(ii.get_instances("platforms"))
print("Platforms:", [p.slug for p in platforms])
# Check available diseases
diseases = list(ii.get_instances("diseases"))
print("Diseases:", [d.acronym for d in diseases[:10]])
# Check target project
project = ii.get_instance("projects", PROJECT_PK)
print(f"Target project: {project.title}")
Step 2: Create Reference Data (if needed)
# Create a new center
center = ii.create_instance("centers", {
"name": "Memorial Sloan Kettering",
"acronym": "MSK",
})
print(f"Created center: {center.slug}")
# Create a new technique
technique = ii.create_instance("techniques", {
"name": "WGS 30X",
"method": "WGS",
"category": "DNA",
})
print(f"Created technique: {technique.slug}")
# Create a new disease
disease = ii.create_instance("diseases", {
"name": "Acute Myeloid Leukemia",
"acronym": "AML",
})
print(f"Created disease: {disease.slug}")
import os
# Check all raw_data files exist
errors = []
for exp in submission_data["experiments"]:
for rd in exp.get("raw_data", []):
path = rd["file_url"]
ifnot os.path.exists(path):
errors.append(f"Missing: {path}")
if errors:
print("Validation errors:")
for e in errors:
print(f" {e}")
else:
print("All files validated!")
# Check identifiers don't already exist
existing = list(ii.get_experiments(
identifier__in=[e["identifier"] for e in submission_data["experiments"]]
))
if existing:
print(f"Warning: {len(existing)} experiments already exist")
# Create submission form for bulk import
submission = ii.create_instance("submissions", {
"title": "Batch import 2024-01",
"data": {
"experiments": [...], # List of experiment dicts
},
})
# Process the submission
ii.process_submission(submission.pk, commit=True)
Step 6: Verify Submission
# Check experiments were created
experiments = list(ii.get_experiments(
projects=PROJECT_PK,
identifier__startswith="LIB_001"
))
print(f"Created {len(experiments)} experiments:")
for exp in experiments:
print(f" {exp.system_id}")
print(f" Sample: {exp.sample.identifier} ({exp.sample.category})")
print(f" Individual: {exp.sample.individual.identifier}")
print(f" Raw data files: {len(exp.raw_data or [])}")
# Add existing experiment to a new project
exp = ii.get_instance("experiments", system_id="ISB_H000001_T01_WGS01")
current_projects = [{"pk": p.pk} for p in exp.projects]
current_projects.append({"pk": NEW_PROJECT_PK})
ii.patch_instance("experiments", exp.pk, {
"projects": current_projects,
})