# Getting started This is the walkthrough: the whole `mkprobes` workflow, start to finish, on a mouse panel. Every other workflow page assumes you arrived from here. Design is six steps, each one command, after a one-command setup: ```text 0. project mkprobes init scaffold genes.txt + manifest.json 1. dataset mkprobes prepare (mouse/human) or mkprobes ingest (any species) 2. targets mkprobes chkgenes -> mkprobes convert-to-transcripts 3. codebook mkprobes make-codebook 4. probes mkprobes run-panel candidates -> screen -> construct, all targets 5. panel QC mkprobes filter-genes 6. assembly mkprobes assemble -> orderable oligos ``` This is the same six-step order `mkprobes --help` prints, and the same order `mkprobes init` writes into your project's `README.md`. Before you begin: installation is complete ({doc}`installation`), `mkprobes --help` works, and `bowtie2`, `jellyfish` and `gffread` are on your `PATH`. If any of that is unfamiliar, read {doc}`before_you_start` first — it covers what to download, how much disk and time each step needs, and what the external programs are for. New to the assay itself? {doc}`what_is_solar` explains what these probes physically are before you design any. If a term here is unfamiliar, it is almost certainly in the {doc}`glossary`. ## 0. Create the project ```bash mkprobes init panel_a --species mouse --dataset ../data/mouse ``` This writes a directory that is already valid: | File | What it is | | --- | --- | | `genes.txt` | Your targets, one per line. Edit this first. | | `manifest.json` | Describes the panel for the assembly step, with every field commented. | | `README.md` | The same commands as below, filled in with your paths. | Start here rather than hand-writing `manifest.json`. The manifest has two fields that are easy to get wrong — `bcidx` indexes rows of an internal table, and `n_probes` accepts two magic strings — and `init` fills both with working values. Pass `--force` to overwrite an existing project. Now edit `panel_a/genes.txt`. One target per line; blank lines are ignored, and everything after a `#` is a comment, so you can record why each target is in the panel: ```text Sox2 Pax6 # dorsal telencephalon marker # Gad1 - dropped, too low in this region ``` Naming a target twice is an error, not a warning: a duplicate would claim a second set of readout bits and quietly corrupt the codebook. ## 1. Build the dataset (once per species) A dataset is the sequence universe probes are searched in and screened against. Build it once and treat it as shared, immutable input. Mouse or human — downloaded and indexed for you: ```bash mkprobes prepare data --species mouse --threads 16 ``` This writes `data/mouse/`. Note the species subdirectory: later commands take `data/mouse`, not `data`. Any other species, from a genome FASTA plus an annotation: ```bash mkprobes ingest data/myspecies --genome genome.fa.gz --gtf annotation.gtf --species myspecies ``` Run `ingest` with `--validate-only` first and read the report — it catches the mismatches that otherwise produce a silently empty dataset. Details: {doc}`workflows/build_a_dataset`. Non-model species from end to end: {doc}`workflows/solar_new_species`. ## 2. Resolve your targets Two commands: check that the names exist, then pick one transcript per gene. :::{tip} Have expression data and room left in the panel? `mkprobes suggest-targets` can propose genes that add information your current list does not already carry, and score how much of the biology the panel captures. Optional, and it reads your expression data rather than the dataset — see {doc}`workflows/choose_your_targets`. ::: ```bash mkprobes chkgenes data/mouse panel_a/genes.txt mkprobes convert-to-transcripts data/mouse panel_a/genes.converted.txt ``` Each command names its output after its input, so the files chain: ```text genes.txt --chkgenes--> genes.converted.txt --convert-to-transcripts--> genes.converted.tss.txt ``` `genes.converted.tss.txt` is the target list every later step uses. On a custom dataset add `-m longest` to `convert-to-transcripts`; the default `canonical` mode needs Ensembl and falls back to `longest` anyway. Details: {doc}`workflows/choose_your_targets`. ## 3. Generate the codebook ```bash mkprobes make-codebook data/mouse panel_a/genes.converted.tss.txt -o panel_a/codebook.json ``` This sizes the code from your target count, assigns three readout bits per target, fills spare capacity with `Blank-N` decoys, and logs a hash of the result for provenance. Pass `-o` explicitly, as above. Without it the output name is derived from the input list — `genes.converted.tss.txt` becomes `genes.converted.tss.codebook.json`, which is not what most people expect. Have per-target expression data? `--expression