This page is for projects built from assemblies you already have,
whether those are finished mitogenomes or whole draft genomes. Create
them with new_project_userAsmb(). MitoPilot will not
assemble anything, but you still work through all three modules: the
Assemble module prepares and checks your sequences, then you annotate,
curate, and export.
Read Starting Your Own Project first. It covers what you need, how the mapping file is laid out, and how a project is set up. This page covers only what differs.
Tip. new_test_project_userAsmb() builds
a ready-to-run project from nine example assemblies, covering linear,
circular, and multi-contig cases, with the reference database the
mitogenome search needs. Try it before running your own data.
Setting up the project
A user-assembly project needs one extra column in the mapping file, plus an optional second:
| Column | Contents |
|---|---|
Assembly |
File name of the assembly FASTA for the sample (one file per sample) |
Topology |
Optional. circular or linear, for a
single-contig assembly only. Leave the cell blank and MitoPilot treats
the contig as linear |
Topology is your statement about a finished mitogenome
you are handing over. Say circular and MitoPilot will not
try to circularize it; say linear, leave the cell blank, or
leave the column out, and it may. It applies only to an assembly holding
a single contig. If the FASTA holds more than one contig, MitoPilot
records the sample as multi and ignores anything you
declared. Each contig’s own topology is then worked out only if you
switch on attempt_circularization (below); otherwise the
contigs are left unknown in the Topology column and handled
as linear.
The value reaches the submission too. It appears in the FASTA header
as [topology=circular] or [topology=linear],
and by default a circular record is submitted as a complete genome and a
linear one as partial.
Note. assembly_path is the folder
holding your assembly FASTA files; the Assembly column
gives file names only. MitoPilot counts the contigs when the project is
created, so it has to read those files at that moment. If it cannot, for
example when assembly_path is a remote bucket or the files
are copied to the cluster later, your declaration stands and a
circular declaration is applied to every contig in the
file. Leave Topology blank for any file that might hold
more than one contig.
new_project_userAsmb(
path = "~/my_assemblies/run_01",
mapping_fn = "~/my_assemblies/mapping.csv",
data_path = "~/my_assemblies/raw_data",
assembly_path = "~/my_assemblies/assemblies",
executor = "local"
)By default the Assemble module only maps reads to your assemblies to compute coverage and error rates. The optional steps below add to it.
If you have no reads at all, set no_raw_data = TRUE and
omit data_path. You can also leave the R1 and
R2 columns out of the mapping file. MitoPilot will skip
read mapping entirely and hide the coverage columns that depend on
it.
Warning. A project holds either MitoPilot assemblies or externally supplied ones, never both. Use separate projects if you have a mix.
Running the pipeline
The Assemble module is not optional. Nothing you supply is used until it has run, even if your FASTA files are finished, circular mitogenomes. Assemble is where MitoPilot reads your sequences into the project, records their length, topology, and contig count, maps your reads for coverage, and runs any of the optional steps below. Samples are only released to Annotate once you lock them here.
A run looks the same as any other MitoPilot project:
- Open the app for the project,
MitoPilot()from the project directory. It opens on the Assemble module. - If needed, change any run options.
- Click UPDATE, then Run from App or Submit as Job.
- When the run finishes, check the results. You should see Length, Topology, and other columns filled in.
- Select the samples that came through cleanly and click LOCK. That releases them to Annotate. Switch modules with the dropdown at the top left.
Finding the mitogenome in a whole assembly
If your FASTA files hold whole assemblies rather than mitogenomes,
thousands or even millions of contigs each, set
find_mitogenome = TRUE. MitoPilot will locate the
mitochondrial contigs before anything else runs:
# add to the new_project_userAsmb() call above:
find_mitogenome = TRUE,
mitofinder_db = "~/MitoPilot_reference_dbs/Percidae_all_2026-06-11/mitofinder_Percidae_all_2026-06-11.gb",MitoPilot skips contigs shorter than 500 bp, then BLASTs the rest against a bundled metazoan mitogenome database. The best candidates are annotated with MitoFinder, and a contig is confirmed when at least three mitochondrial genes turn up on it. Only confirmed contigs continue through the pipeline, as scaffolds of the sample’s assembly.
A contig is only kept if its match covers at least half the contig’s own length. That is the NUMT filter: a real mitochondrial contig is almost entirely mitochondrial, while a nuclear scaffold carrying a mitochondrial insertion matches only a sliver of itself. A short nuclear contig whose insertion covers most of it can still get through, so check the evidence before trusting a surprising result. A sample carrying two mitogenomes, its own and a contaminant’s, yields both. A sample where nothing is confirmed is marked failed with a note, and the rest of your samples carry on.
Required. The confirmation step needs a MitoFinder
GenBank database for your clade. Build one with
custom_assembly_db(clade = "<your clade>", db_path = "~/MitoPilot_reference_dbs", db_type = "mitofinder").
It writes a dated, clade-named folder; pass the .gb file
inside it as mitofinder_db, using the full path the builder
prints when it finishes. Project creation refuses the search without it.
See building custom databases.
The Mito Search column of the Assemble table
summarizes each sample. Click the summary to open the full evidence:
every contig the search scored, its length, the reference it matched,
its percent identity, the share of the contig that aligned, the number
of mitochondrial genes it carried, and the reason it was kept or
dropped. Thresholds live in the Find Mito Opts. modal,
including Min. contig length, the size below which a
contig is never searched. The count in the summary is the number of
contigs searched, not the number in your file. A per-sample log is
written to out/<ID>/assemble/user/find_mito.log.
On a real fish genome skim assembled into 1.4 million contigs, the search returned the single 16,891 bp mitochondrial contig in under four minutes.
Circularizing linear assemblies
Assemblers sometimes report a circular mitogenome as a linear contig
whose end repeats its start. Set
attempt_circularization = TRUE and MitoPilot will try to
close linear contigs for you during the Assemble module:
Each eligible contig is compared against itself with BLAST. This
self-comparison follows the approach used by MitoHiFi. Every
sample is tried except a single-contig assembly you declared
circular. A multi-contig assembly is eligible whatever you
declared, since the declaration is ignored there, and each of its
contigs is attempted on its own. Click a sample’s Circularize
Opts. cell to adjust the thresholds.
If a contig’s ends overlap, the duplicate end is trimmed and that
contig is relabeled circular. When you have raw reads,
MitoPilot also maps them across the new junction and leaves that contig
linear unless enough reads span it. That keeps a long terminal repeat
from being mistaken for a real circle.
The outcome for every sample appears in the Circularization column of the Assemble table. A sample with more than one contig gets one entry per contig, each starting with the contig name and separated by semicolons:
| Note | Meaning |
|---|---|
circular: trimmed 231 bp overlap, 42 junction reads |
Closed, with read support |
circular: trimmed 231 bp overlap (no reads to confirm) |
Closed in a no_raw_data project |
linear: no self-overlap found |
The contig ends do not overlap |
linear: overlap 150 bp below the 220 bp minimum |
An overlap was found but was too short |
linear: overlap 97.3% identical, below 99% |
An overlap was found but the two copies did not match closely enough |
linear: 231 bp overlap found but only 2 junction reads (5 required) |
Overlap present, reads did not back it up |
not attempted: 4812 contigs exceeds max_contigs (100) |
Too big to work through contig by contig |
That last case only comes up on a whole draft assembly that reached
this step without a mitogenome search to narrow it down first. The
100-contig ceiling is fixed and is not one of the Circularize
Opts. settings. Turn on find_mitogenome and
circularization will see only the confirmed mitochondrial contigs.
Click the summary to see where the overlap sits and the two copies aligned base by base. When reads were mapped across the new junction, you also get the read depth across the seam. A contig whose overlap was found but rejected shows the threshold it missed.
Assemblies containing ambiguous bases
Sequences called against a reference often carry IUPAC ambiguity
codes (N, R, Y, and the rest)
where the evidence was mixed or coverage dropped out. MitoPilot accepts
them.
A codon holding an ambiguous base is translated to the one amino acid
it can be, or to X when more than one is possible, and the
gene is flagged with an <n> ambiguous bases in CDS
warning for review. The Ambig. Bases column of the
Assemble table counts them per sample, and a sample’s assembly details
window counts them per contig. When you open a gene in the annotation
editor, the alignment says how many of its bases are ambiguous.
Runs of Ns that arrive with your own sequence are left
as they are: MitoPilot does not treat them as gaps, since they may be
ambiguous base calls rather than missing sequence.
Joining fragmented assemblies
Some assemblers leave the mitogenome split into more than one contig.
Set join_scaffolds = TRUE and MitoPilot will order a
sample’s contigs against its BLAST reference and join them into a single
sequence during the Assemble module:
A sample is eligible when its assembly holds more than one contig.
Where two contigs do not overlap, MitoPilot inserts a run of
Ns the length of the gap the reference predicts between
them.
If those contigs match different reference mitogenomes, MitoPilot
leaves them separate for review rather than joining them, so a
contaminated sample is never spliced into a chimera. It also leaves a
sample fragmented when the reference cannot estimate the size of a
junction: NCBI expects the number of Ns to be the estimated
gap length, so MitoPilot will not invent a spacer. Those contigs can
still be submitted as several sequences under one BioSample. See Sequences
containing unknown bases.
The outcome for every sample appears in the Scaffold Join Notes column of the Assemble table, including how many junctions could not be sized.
Any multi-contig assembly is eligible, not just mitochondrial
contigs. On whole-genome assemblies, use join_scaffolds
alongside find_mitogenome = TRUE so the join sees only
confirmed mitochondrial contigs.
You can review and adjust the joined result by hand in the sample’s assembly details window. The same window has a Redo join in pipeline button, which hands the join back to the pipeline: the sample is queued, and the join re-runs on the next Assemble update using the reference and options on record rather than the layout you edited. The button then reads Cancel queued pipeline join, so a mis-click is easy to undo. If the sample cannot be queued, the button is greyed out and the reason is shown below it.
