Align a set of homologues and build a tree from it
The route: get the sequences in → align them → read the alignment before you trust it → build the tree → put support on it → read what the tree does and does not say.
Every number below came from running the engines on
data/samples/FASTA/COI-crickets.fasta — eight real bush-cricket COI barcodes, seven of 601 bp
and one of 589, which the Phylogenetics starter opens.
Step 1 — Get the sequences in
Tool: the lobby, or File → Import.
Open the Phylogenetics starter. It carries the cricket COI set, an HIV-1 env set of 19 sequences, three globin proteins, and a Newick tree — so you can also start from a tree someone else built rather than from sequences.
If your sequences are already aligned, say so: an alignment in CLUSTAL, Stockholm, PHYLIP (interleaved or sequential), MSF or aligned FASTA opens directly, and the Alignment sample starter has one of each. Re-aligning an alignment is a real mistake — it lets the aligner move columns that a curated alignment deliberately fixed.
Step 2 — Align
Tool: Multiple Sequence Alignment.
Running the eight cricket sequences:
8 rows × 624 columns
fully conserved columns 382 of 624 (61.2%)
non-gap 96.07%
entropy −162.08The alignment is 624 columns long from inputs of 601 — the extra 23 are gaps the aligner opened,
including the ones absorbing the short 589 bp sequence. Per column you get the consensus base, the
identity fraction, the coverage, and the CLUSTAL-style * for a fully conserved column:
consensus TTTCTTTCTCTTTAAGATTTACTAATTCGAGCTGAATTAGGTCAACCAGGATATCTAATT
conservation ** **** ** ** *** * ** ** ** ** ** *****The engine is a partial-order aligner, and its knobs are real: global versus local, and the match / mismatch / gap scores. Local is the default, as upstream has it.
One score is deliberately empty until you choose something:
sumOfPairs null
star null
matrix null
matrixError "No substitution matrix selected (choose PAM250/BLOSUM62 for
protein, EDNAFULL for DNA)."A sum-of-pairs score is meaningless without saying which substitution matrix it is a sum over, so rather than quietly picking one, the field stays null and names the choice you have to make. Pick EDNAFULL for this DNA set and the score appears.
Check before moving on: the conserved fraction is plausible for what you aligned. 61% fully conserved across a barcoding locus in one family is reasonable; 99% means your sequences are nearly identical and a tree will mostly be noise, and 20% means they may not be homologous at the ends — look at where the gaps are before you build anything on it.
Step 3 — Choose a method, knowing that they answer different questions
Tool: Phylogenetics.
Getting there is one click. With the alignment open, press Build tree in its toolbar (it is also in the alignment's right-click menu). The aligned rows go straight across, so the panel opens already scoped to them, and the two stay linked afterwards: clicking a clade in the tree selects those rows in the alignment, and the tree's tip order can be pushed back as the alignment's sort order.
Eight methods ship — Neighbor-Joining, BIONJ, FastME (balanced), FastME (OLS), UPGMA, WPGMA, Maximum Parsimony and Maximum Likelihood — and fourteen DNA distance models: uncorrected p-distance, raw counts, transitions only, transversions only, JC69, K80, F81, K81, F84, T92, TN93, Log-Det, indel and indel-block.
The same alignment, the same K80 distances, four methods:
| Method | Total branch length | Height | Rooted? | Assumes a clock? | Colless |
|---|---|---|---|---|---|
| Neighbour-joining | 0.7050 | 0.1343 | no | no | 11 |
| BIONJ | 0.7040 | 0.1398 | no | no | 15 |
| UPGMA | 0.6899 | 0.1060 | yes | yes | 14 |
| FastME (balanced) | 0.7050 | 0.1493 | no | no | 21 |
The rooted column is the one that matters. UPGMA returns a rooted tree because it assumes a molecular clock — equal rates on every lineage. That is a strong assumption and usually a wrong one, and it is why UPGMA's root is not evidence about which lineage diverged first. The other three return unrooted trees, and the app says so per method rather than drawing a root and hoping you notice. Root them yourself, at the midpoint or on an outgroup, as a stated act.
Maximum likelihood is the odd one out and worth the wait. It is the only method that reports a likelihood, and therefore the only one whose models can be compared by AIC/BIC rather than by preference. Six rate models (JC69, F81, K80, HKY, TN93, GTR), discrete-Gamma rate heterogeneity, a proportion of invariant sites, and separate switches for which parameters the optimiser may move — topology, rates, base frequencies, shape, invariant fraction. Everything it reports (log-likelihood, df, AIC, BIC, fitted shape, base frequencies, exchangeabilities, accepted NNI moves) is a fitted number, not a default echoed back.
Step 4 — Put support on it
Set bootstrap replicates and a seed. 100 replicates on the NJ tree above:
(Metrioptera_japonica_EF540831:0.0846,
(Montana_montana:0.0793,
(Roeseliana_roeseli:0.0432,Bicolorana_bicolor_EF540830:0.0525)89:0.0162)20:0.0035,
(Gampsocleis_sedakovii_EF540828:0.1183,
(Deracantha_deracantoides_EF540:0.0894,
(Phaneroptera_falcata:0.0838,Isophya_altaica_EF540820:0.0965)91:0.0243)46:0.0078)19:0.0056)100;The support summary over the six internal branches: mean 60.8, median 67.5, min 19, max 100 — three branches at ≥70, one at ≥95.
Read that as three resolved branches and three unresolved ones, not as a tree with a few weak
spots. Support of 19 and 20 means the data do not distinguish that grouping from its alternatives;
the branch is drawn because a bifurcating tree has to draw something, not because it was found.
(Roeseliana, Bicolorana) at 89 and (Phaneroptera, Isophya) at 91 are the two groupings this
alignment actually supports.
The seed makes it reproducible. Quote the replicate count and the seed alongside any support value you publish.
Step 5 — Read the tree, and the statistics under it
Beyond the picture, the tree carries measurements — for the NJ tree above: height 0.1343, total length 0.7050, diameter 0.2469, 2 cherries, Colless 11, Sackin 22, treeness 0.0814, γ −2.239, mean branch length 0.0504, mean internal branch length 0.0096, and 1 zero-length branch.
Two of those deserve a sentence each. Treeness at 0.08 means only 8% of the tree's length sits on internal branches — most of the signal is on the tips, which is the quantitative version of "the groupings are weakly supported" you already saw in step 4. And a zero-length branch is a polytomy in disguise: the method had to bifurcate, found no evidence for either order, and gave the branch no length.
From here you can reroot at the midpoint or an outgroup, ladderize, prune tips, collapse weakly supported branches into polytomies, compare two trees, get the patristic distance matrix, or export to Newick, Nexus, NeXML or PhyloXML.
Check: the tree you export has its method, its model, its bootstrap count and its rooting stated alongside. A Newick string alone loses every one of those, and they are what makes the tree interpretable.
What you did, and where each piece lives
| Step | Tool | Hand-off |
|---|---|---|
| 1 | Lobby / import | Sequences, or an alignment opened as one |
| 2 | Multiple Sequence Alignment | Aligned rows + per-column consensus and conservation |
| 3 | Phylogenetics | A tree, with its rooting and clock assumption stated |
| 4 | Same panel, bootstrap | Support on every internal branch |
| 5 | Same panel, statistics + export | Shape measures, rerooting, pruning, four export formats |
If it does not work
| Symptom | Where to look |
|---|---|
| The sum-of-pairs score is null | No substitution matrix chosen. Pick EDNAFULL (DNA) or BLOSUM62/PAM250 (protein) — it is a choice, not a default |
| The alignment is mostly gaps | Your sequences may not all be homologous, or one is a fragment. Look at the conservation row before building a tree |
| A distance model is rejected | Model ids are case-sensitive and listed by the picker — K80, not k80 |
| UPGMA gives a different root from everything else | It assumes a molecular clock; the others do not root at all. Not a disagreement about topology |
| Support values below 50 everywhere | The alignment does not resolve those branches. Treeness and internal branch length will say the same thing in numbers |
| A branch has length zero | An unresolved polytomy the method had to bifurcate. Collapse it rather than reading an order into it |
Related
The tools, in depth: Multiple Sequence Alignment · Phylogenetics · Dot Plot for a pairwise look before you commit to an alignment
What feeds this: BLAST Search and Search Databases to collect the homologues in the first place.
A different question about the same data: Compare Traces to Reference aligns reads against one reference rather than everything against everything — the same viewer, a different claim.
The canvases this draws on: the alignment · the tree.
Read a variant call set at a locus
The route: open the call set → jump to the region → read the records → check the census against what you expected → apply a change to the sequence, or hand the region to the alignment.
Protein → peptides: will mass spectrometry see the region I care about?
The route: read the protein your construct actually encodes → digest it → apply the window your instrument can detect → look at what fell out → change the digest until the region you care about is covered.