Samplesheet Format
The ProMaya Nextflow pipeline is driven by a simple CSV samplesheet that defines the protein pairs to be screened for interactions.
Format Specification
The samplesheet must be a comma-separated values (CSV) file containing exactly three required headers: pair_id, protein_a, and protein_b.
pair_id,protein_a,protein_b
hhb_vs_6GE3,assets/pdb/idp_4hhb.pdb,assets/pdb/idp_6GE3.pdb
3M9D_vs_6XRY,assets/pdb/idp_3M9D.pdb,assets/pdb/idp_6XRY.pdb
8K2R_vs_4hhb,assets/pdb/idp_8K2R.pdb,assets/pdb/idp_4hhb.pdb
Column Definitions
| Column | Description | Requirements |
|---|---|---|
pair_id |
A unique identifier for the interaction pair. | Must be unique across all rows. Used as the output directory name and primary key in the final results table. |
protein_a |
Path to the first protein's PDB structure file. | Absolute paths are recommended. Relative paths are resolved relative to the directory where the Nextflow command is launched. |
protein_b |
Path to the second protein's PDB structure file. | Same path resolution rules as protein_a. |
Important Rules
- Uniqueness: The pipeline uses
pair_idto generate deterministic output paths for caching and aggregation. Duplicate IDs will cause filename collisions and pipeline failures. - Re-use Optimization: You can use the same PDB file across multiple rows (e.g., screening one bait protein against 100 candidate interactors). The pipeline intelligently extracts the unique set of PDB files and runs computationally expensive per-protein analyses (like the Intrinsic Disorder scan) only once per unique structure.
- Paths: Ensure all PDB files exist and are readable by the executing environment (especially if running inside Docker or Singularity containers where paths must be correctly mounted).
Generating Samplesheets
You can easily generate large samplesheets using simple bash or Python scripts. For example, to screen one bait protein against all PDBs in a directory:
import os
import csv
bait_pdb = "/path/to/bait.pdb"
candidate_dir = "/path/to/candidates"
with open("screening_samplesheet.csv", "w", newline="") as f:
writer = csv.writer(f)
writer.writerow(["pair_id", "protein_a", "protein_b"])
for filename in os.listdir(candidate_dir):
if filename.endswith(".pdb"):
candidate_path = os.path.join(candidate_dir, filename)
pair_id = f"bait_vs_{filename.replace('.pdb', '')}"
writer.writerow([pair_id, bait_pdb, candidate_path])