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.
We have created a video to represent this tree, combining animation and music – different parts of the trees are conveyed by auditory features.
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.
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.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.
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 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.
define :alpaca do use_synth :dull_bell play :a3 sleep 1 play :c4 sleep 0.5 play :d4 sleep 1 end alpaca
define :camel do use_synth :pretty_bell play :a5 sleep 1 play :c3 sleep 0.5 play :d3 sleep 1 end camel
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:
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.
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
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.
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.
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 |

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!
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.
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.
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!
play_common_ancestor1 play_common_ancestor2 play_common_ancestor3 play_common_ancestor4