Discovering Phylogeny Worksheet

Logo of School of Biological Sciences Logo of EPSRC

Task A: An Introduction to a Phylogenetic Tree

Figure 1 is a phylogenetic tree of several species of cyanobacteria. Some cyanobacteria may cause water blooms that make people and animals sick. This tree is constructed using rRNA data.

A cyanobacteria phylogenetic tree

We have created a video to represent this tree, combining animation and music – different parts of the trees are conveyed by auditory features.

This is the end of Task A - back to the navigation bar

Task B: A Minecart Journey Through Phylogeny

We will now explore the tree and look at the relationship between species in Minecraft and another video.

Start the second section (Figure 2) in Minecraft – follow the train (minecart) and instructions in the game to discover four species.

QUESTION 1.

Which of the following two species has a closer relationship with Anabaena sp. 90 – Planktothrix agardhii or Gloeobacter kilaueensis?

Hint: Read the books on the lecterns to find the answer;
OR see Figure 1 in Task A

Please write your answer on Question Sheet.

Starting point in Minecraft

Here is a video illustrating the relationships between the other six species (the genus Microcystis).

In this video, we will start from one species (Microcystis sp. AWT139) to trace back.

This is the end of Task B - back to the navigation bar

Task C: A Dated Phylogenetic Tree - Part 1

In Task C Part 1, we see an interactive webpage above, which shows a dated phylogenetic tree containing six animal species.

Move the mouse to each node and see what is happening. Click on the nodes to hear some sounds and see the timeline, then click on the diagrams for some facts about these animals.


Species who have a closer relationship sound more similar, and the common ancestor sounds like a combination of the species. In addition, the tempo (speed) is slightly different for the species.

This tree is modified from Figure 1, Farré et al., 2019. https://doi.org/10.1101/gr.239863.118.

QUESTION 2.

When does the last common ancestor of Rhesus, Human, and Chimp appear?

Please write your answer on Question Sheet.

QUESTION 3.

Based on this dated phylogenetic tree, are mice are more closely related to humans or to horses?

Hint: Take a look at the common ancestor of humans and mice, and the common ancestor of horses and mice – who is more recent; OR in this case, whose sounds (mice and humans or mice and horses) are more similar?

Please write your answer on Question Sheet.

This is the end of Task C Part 1 - back to the navigation bar

Task C: A Dated Phylogenetic Tree - Part 2

Here we would like to encourage you to make some sounds and melodies based on another part of this tree in the software Sonic Pi (Figure 3), using some example code we provide.

The interface of Sonic Pi

The phylogenetic tree is shown above. Move the mouse to each node to have a look.


Click on the horse diagram to see the codes we wrote for generating the sound in Part 1 and click on other animal diagrams to see some facts.


Open the Sonic Pi program on the desktop.


Here are code examples for alpaca, camel, and pig. You can copy the code for an animal and paste into Sonic Pi to hear the sounds.


N.B. Only run the code for one species at a time in Sonic Pi. To try a different species, make sure to delete the previous code first.

Copied
define :alpaca do
  use_synth :dull_bell
  play :a3
  sleep 1
  play :c4
  sleep 0.5
  play :d4
  sleep 1
end
alpaca
Copied
define :camel do
  use_synth :pretty_bell
  play :a5
  sleep 1
  play :c3
  sleep 0.5
  play :d3
  sleep 1
end
camel
Copied
define :pig do
  use_synth :chipbass
  play :e3
  sleep 0.5
  play :g3
  sleep 0.5
  play :f4
  sleep 0.5
end
pig

Based on the above, if the notes for alpaca are a3, c4, and d4, while the notes for camel are a5, c3, and d3 – we might represent their common ancestor with this code:

Copied
define :alpaca_camel_ancestor do
  use_synth :piano
  species_notes = [:a3, :c4, :d4, :a5, :c3, :d3]
  random_note = choose([:a3, :b6, :d3, :c3, :e2])
  ancestor_notes = species_notes.insert(rand_i(0..5), random_note)
  durations = [0.25, 0.5, 0.5]
  random_durations = ancestor_notes.map {choose (durations)}
  play_pattern_timed ancestor_notes, random_durations
end
alpaca_camel_ancestor

We also provide you with the code for the common ancestor of alpaca, camel, and pig and the common ancestor of alpaca, camel, pig, and horse. You can copy the code for each species and paste it.

Copied
define :alpaca_camel_pig_ancestor do
  use_synth :prophet
  species_notes = [:a3, :c4, :d4, :a5, :c3, :d3, :e3, :g3, :f4]
  random_note = choose([:g3, :a4, :d3, :c3, :e2])
  ancestor_notes = species_notes.insert(rand_i(0..8), random_note)
  durations = [0.25, 0.5, 0.5, 0.3]
  random_durations = ancestor_notes.map {choose (durations)}
  play_pattern_timed ancestor_notes, random_durations
end
alpaca_camel_pig_ancestor
Copied
define :alpaca_camel_pig_horse_ancestor do
  use_synth :square
  species_notes = [:a3, :c4, :d4, :a5, :c3, :d3, :e3, :g3, :f4, :a4, :c5, :e5]
  random_note = choose([:g3, :a4, :d3, :c3, :e2, :f4, :g5, :b4])
  ancestor_notes = species_notes.insert(rand_i(0..11), random_note)
  durations = [0.25, 0.45, 0.5, 0.3, 0.6]
  random_durations = ancestor_notes.map {choose (durations)}
  play_pattern_timed ancestor_notes, random_durations
end
alpaca_camel_pig_horse_ancestor

N.B. Both “random_durations” and “random_note” include some random elements since we cannot predict a common ancestor’s features with perfect accuracy – that is why random elements are introduced.

This is the end of Task C Part 2 - back to navigation bar

Task C - Extension Part

We now show you another part of that phylogenetic tree. Can you create your own audio representation of this tree based on the code examples provided?


Copy the following code to Sonic Pi and change 'xx' in the code. For explanations, see the table below.


For your convenience, you may write the calculated notes on Question Sheet.

Copied
SPECIES = {
  cattle: {
    synth: :beep,
    notes: [xx, xx, xx, xx, xx, xx]
  },
  sheep: {
    synth: :xxx,
    notes: [xx, xx, xx, xx, xx, xx]
  },
  giraffe: {
    synth: :xxx,
    notes: [xx, xx, xx, xx, xx, xx]
  },
  whale: {
    synth: :xxx,
    notes: [xx, xx, xx, xx, xx, xx]
  },
  human: {
    synth: :xxx,
    notes: [xx, xx, xx, xx, xx, xx]
  }
}
Code Change xx to... Explanations
synth: :xxx any synth you like - see screenshot below sound effect
notes: [xx, xx, xx, xx, xx, xx] six notes in the squared brackets - see table below 'How to map' notes for playing the sound

Synth list

N.B. You will use several biological features to map them to notes. However, these features for notes do NOT necessarily show how closely animals are related. Here, we just would like to introduce you a simple mapping from a value to a musical note.

It's fine to round your answer to the nearest whole number.

Note Biological feature What this feature represents Example values How to map
1 Body mass Mass

cattle: 550kg

sheep: 140kg

giraffe: 1200kg

whale: 6000kg

human: 65kg

$$note1 = 35 + \frac{3600}{mass}$$
2 Body length Height

cattle: 220cm

sheep: 140cm

giraffe: 450cm

whale: 700cm

human: 165cm

$$note2 = 14 + \frac {12250}{height}$$
3 Resting heart rate Metabolic rate

cattle: 50bpm

sheep: 75bpm

giraffe: 45bpm

whale: 5bpm

human: 65bpm

$$note3 = {rate} + 25$$
4 Life span Longevity

cattle: 18years

sheep: 11years

giraffe: 25years

whale: 40years

human: 73years

$$note4 = {longevity} + 40$$

N.B. Well done! Now you will use another two features to create note 5 and note 6. Compared to the ones above, these features better shows the relationship of species.

Note Biological feature and what it represents Examples How to map
5 Presence or absence of a rumen

Ruminant: cattle, sheep, and giraffe

Non-ruminant: whale, human

Choose a number between 0-127 for ruminant and another different one between 0-127 for non-ruminant
6 Limb types

Hooved: cattle, sheep, and giraffe

Flipper: whale

Hand/Foot: human

Choose a number between 0-127 for hoover, another different one between 0-127 for flipper, and another different one between 0-127 for hand/foot

Now please paste the code below after the one you were working on.


The code below sets up musical patterns for different animals, storing the notes and sounds you've written for each.


After pasting, hit "Run" in Sonic Pi to have a listen to your current work!

Copied
all_notes = SPECIES.values.map { |s| s[:notes] }.flatten.uniq
define :play_species_melody do |name|
  parameter = SPECIES[name]
  use_synth parameter[:synth]
  notes = parameter[:notes].ring
  6.times do
    n = notes.tick
    play n
    sleep 0.3
  end
  sleep 1
end

define :play_cattle do
  play_species_melody :cattle
end

define :play_sheep do
  play_species_melody :sheep
end

define :play_giraffe do
  play_species_melody :giraffe
end

define :play_whale do
  play_species_melody :whale
end

define :play_human do
  play_species_melody :human
end

play_cattle

play_sheep

play_giraffe

play_whale

play_human

You have done all the essential parts for each species and had a listen to that, now please paste the code below at the end of your current code to add notes for common ancestors.

Copied
define :play_ancestor do |source_notes, synth_type= :fm|
  notes = source_notes.shuffle + [choose([30, 40, 50])]
  durations = [0.1, 0.2, 0.3]
  with_synth synth_type do
    play_pattern_timed notes, notes.map {choose(durations)}
  end
  sleep 1.5
end

QUESTION 4.

In Task C Extension Part, which species are the descendants of common ancestor 1?


Which species are the descendants of common ancestor 2?


Which species are the descendants of common ancestor 3?


Which species are the descendants of common ancestor 4?


Please write your answer on Question Sheet.

According to your answers to Question 4, paste the code below after your current code, and use species' names to fill in the blanks.


We have provided you with an example of the one for common ancestor 1.

Copied
define :play_common_ancestor1 do
  notes = (SPECIES[:cattle][:notes] + SPECIES[:sheep][:notes]).uniq
  play_ancestor notes
end

define :play_common_ancestor2 do
  notes = (SPECIES[:xxx][:notes] + SPECIES[:xxx][:notes] + SPECIES[:xxx][:notes]).uniq
  play_ancestor notes
end

define :play_common_ancestor3 do
  notes = (SPECIES[:xxx][:notes] + SPECIES[:xxx][:notes] + SPECIES[:xxx][:notes] + SPECIES[:xxx][:notes]).uniq
  play_ancestor notes
end

define :play_common_ancestor4 do
  notes = (SPECIES[:xxx][:notes] + SPECIES[:xxx][:notes] + SPECIES[:xxx][:notes] + SPECIES[:xxx][:notes] + SPECIES[:xxx][:notes]).uniq
  play_ancestor notes
end
Code Change xx to... Explanations
SPECIES[:xxx] According to your answer to Question 4, put the descendants' names here To play the sound for common ancestors

Now you have finished all the necessary parts for your own sound representation of this tree.


Paste the code below at the end of your codes and hit "Run" in Sonic Pi to have a listen to your work!

Copied
play_common_ancestor1

play_common_ancestor2

play_common_ancestor3

play_common_ancestor4
This is the end of the whole workshop - back to navigation bar