text:
# Identification of the micro-organisms in a beer using Nanopore sequencing

 Author(s) Polina PoluninaSiyu ChenBérénice BatutTeresa Müller
Overview
Questions:
• How can yeast strains in a beer sample be identified?

• How can we process metagenomic data sequenced using Nanopore?

Objectives:
• Inspect metagenomics data

• Run metagenomics tools

• Identify yeast species contained in a sequenced beer sample using DNA

• Visualize the microbiome community of a beer sample

Requirements:
Time estimation: 1 hour
Level: Introductory Introductory
Supporting Materials:
Last modification: Oct 19, 2022

# Introduction

What is a microbiome? It is a collection of small living creatures. These small creatures are called micro-organisms and they are everywhere. In our gut, in the soil, on vending machines, and even inside the beer. Most of these micro-organisms are actually very good for us, but some can make us very ill.

Micro-organisms come in different shapes and sizes, but they have the same components. One crucial component is the DNA, the blueprint of life. The DNA encodes the shape and size and many other characteristics unique to a species. Because DNA is so species-specific, reading the DNA can be used to identify what kind of micro-organism the it is from. Therefore, within a metagenomic specimen, e.g. a sample form soil, gut, or beer, one can identify what kind of species are inside the sample.

In this tutorial, we will use data of beer microbiome generated via the BeerDEcoded project.

The BeerDEcoded Project is a series of workshops organized with and for schools as well as the general audience, aiming to introduce biology and genomic science. People learn in an interactive way about DNA, sequencing technologies, bioinformatics, open science, how these technologies and concepts are applied and how they are impacting their daily life.

Beer is alive and contains many microorganisms. It can be found in many places and there are many of them. It is a fun media to bring the people to the contact of molecular biology, data-analysis, and open science.

A BeerDEcoded workshop includes the following steps:

1. Extract yeasts and their DNA from beer bottle,
2. Sequence the extracted DNA using a MinION sequencer to obtain the sequence of bases/nucleotides (A, T, C and G) for each DNA fragment in the sample,
3. Analyze the sequenced data in order to know which organisms this DNA is from

Comment: Beer microbiome

Beer is alive! It contains microorganisms, in particular yeasts.

Indeed, grain and water create a sugary liquid (called wort). The beer brewer adds yeasts to it. By eating the sugar, yeasts creates alcohol, and other compounds (esters, phenols, etc.) that give beer its particular flavor.

Yeasts are microorganisms, more precisely unicellular fungi. The majority of beers use a yeast genus called Saccharomyces, which in Greek means “sugar fungus”. Within that genus, two specific species of Saccharomyces are the most commonly used:

• Saccharomyces cerevisiae: a top-fermenting (i.e. yeast which rise up to the top of the beer as it metabolizes sugars, delivering alcohol as a by-product), ale yeast responsible for a huge range of beer styles like witbiers, stouts, ambers, tripels, saisons, IPAs, and many more. It is most likely the yeast that the early brewers were inadvertently brewing with over 3,000 years ago.
• Saccharomyces pastorianus: a bottom-fermenting (i.e. it sits on the bottom of the tank as it ferments) lager yeast, responsible for beer styles like Pilsners, lagers, märzens, bocks, and more. This yeast was originally found, and cultivated, by Bavarian brewers a little over 200 years ago. It is the most commonly used yeast in terms of the raw amount of beer produced around the world.

But yeast is actually all around us. And we can actually brew spontaneously fermented beer with wild yeast and souring microbiota floating through the air.

During one BeerDEcoded workshop, we extracted yeasts out of a bottle of Chimay. We then extracted the DNA of these yeasts and sequenced it using a MinION to obtain the DNA sequences. Now, we would like to identify the yeast species sequenced there, and thereby outline the diversity of microorganisms (the microbiome community) in the beer sample.

To get this information, we need to process the sequenced data in a few steps:

1. Check the quality of the data
2. Assign a taxonomic label, i.e. assign ‘species’ to each sequence
3. Visualize the distribution of the different species

This type of data analysis requires running several bioinformatics tools and usually requires a computer science background. Galaxy is an open-source platform for data analysis that enables anyone to use bioinformatics tools through its graphical web interface, accessible via any Web browser.

So, in this tutorial, we will use Galaxy to extract and visualize the community of yeasts from a bottle of beer.

Agenda

In this tutorial, we will cover:

# Prepare Galaxy and data

First of all, this tutorial will get you hands on with some basic Galaxy tasks, including creating a history and importing data.

## Get familiar with Galaxy

Hands-on: Open Galaxy
1. Open your favorite browser (Works on Chrome, Firefox, Safari but not Internet Explorer!)
2. Create a Galaxy account if you do not have one

1. To create an account at any public Galaxy instance, choose your server from the available list of Galaxy Platforms.

There are 3 main public Galaxy servers: UseGalaxy.org, UseGalaxy.eu, and UseGalaxy.org.au.

2. Click on “Login or Register” in the masthead on the server.

3. On the login page, find the Register here link and click on it.
4. Fill in the the registration form, then click on Create.

Your account should now get created, but will remain inactive until you verify the email address you provided in the registration form.

5. Check for a Confirmation Email in the email you used for account creation.
6. Click on the Email confirmation link to fully activate your account.

galaxy-info Delivery of the confimation email is blocked by your email provider or you mistyped the email address in the registration form?

The Galaxy homepage is divided into three panels:

• Tools on the left
• Viewing panel in the middle
• History of analysis and files on the right

The first time you use Galaxy, there will be no files in your history panel.

Any analysis should get its own Galaxy history. So let’s start by creating a new one:

Hands-on: Prepare the Galaxy history
1. Create a new history for this analysis

Click the new-history icon at the top of the history panel.

If the new-history is missing:

1. Click on the galaxy-gear icon (History options) on the top of the history panel
2. Select the option Create New from the menu
2. Rename the history

1. Click on Unnamed history (or the current name of the history) (Click to rename history) at the top of your history panel
2. Type the new name
3. Press Enter

## Get data

Before we can begin any Galaxy analysis, we need to upload the input data: FASTQ files

1. Import the sequenced data including fastq in the name

• Option 1 video: Your own local data using Upload Data (recommended for 1-10 datasets).

1. Click on Upload Data on the top of the left panel
2. Click on Choose local file and select the files or drop the files in the Drop files here part
3. Click on Start
4. Click on Close
• Option 2: From Zenodo, an external server, via URL

https://zenodo.org/record/7093173/files/ABJ044_c38189e89895cdde6770a18635db438c8a00641b.fastq

• Open the Galaxy Upload Manager (galaxy-upload on the top-right of the tool panel)

• Select Paste/Fetch Data
• Paste the link into the text field

• Press Start

• Close the window

Your uploaded file is now in your current history. When the file is fully uploaded to Galaxy, it will turn green. But, what is this file?

2. Click on the galaxy-eye (eye) icon next to the dataset name to look at the file contents.

The contents of the file will be displayed in the central Galaxy panel.

This file contains the sequences, also called reads, of DNA, i.e. succession of nucleotides, for all fragments from the yeasts in the beer, in FASTQ format.

Although it looks complicated (and maybe it is), the FASTQ format is easy to understand with a little decoding. Each read, representing a fragment of DNA, is encoded by 4 lines:

Line Description
1 Always begins with @ followed by the information about the read
2 The actual nucleic sequence
3 Always begins with a + and contains sometimes the same info in line 1
4 Has a string of characters which represent the quality scores associated with each base of the nucleic sequence; must have the same number of characters as line 2

So for example, the first sequence in our file is:

@03dd2268-71ef-4635-8bce-a42a0439ba9a runid=8711537cc800b6622b9d76d9483ecb373c6544e5 read=252 ch=179 start_time=2019-12-08T11:54:28Z flow_cell_id=FAL10820 protocol_group_id=la_trappe sample_id=08_12_2019AGTAAGTAGCGAACCGGTTTCGTTTGGGTGTTTAACCGTTTTCGCATTTATCGTGAAACGCTTTCGCGTTTTCGTGCGGAAGGCGCTTCACCCAGGGCCTCTCATGCTTTGTCTTCCTGTTTATTCAGGATCGCCCAAAGCGAGAATCATACCACTAGACCACACGCCCGAATTATTGTTGCGTTAATAAGAAAAGCAAATATTTAAGATAGGAAGTGATTAAAGGGAATCTTCTACCAACAATATCCATTCAAATTCAGGCA+$'())#$$%#%%'-&%'%#%('+;<>>>18.?ACLJM7E:CFIMK<=@0/.4<9<&007:,3<IIN<3%+&(+#%'#.2@401/5=49IEE=CH.20355>-@AC@:B?7;=C4419)*$$46211075.$%..#,529,''=CFF@:<?9B522.(&%%(9:3E99<BIL?:>RB--**5,3(/.-8B>F@@=?,9'36;:87+/19BAD@=8*''&''7752'$%&,5)AM<99$%;EE;BD:=9<@=9+%$ It means that the fragment named @03dd2268-71ef-4635-8bce-a42a0439ba9a (ID given in line1) corresponds to: • the DNA sequence AGTAAGTAGCGAACCGGTTTCGTTTGGGTGTTTAACCGTTTTCGCATTTATCGTGAAACGCTTTCGCGTTTTCGTGCGGAAGGCGCTTCACCCAGGGCCTCTCATGCTTTGTCTTCCTGTTTATTCAGGATCGCCCAAAGCGAGAATCATACCACTAGACCACACGCCCGAATTATTGTTGCGTTAATAAGAAAAGCAAATATTTAAGATAGGAAGTGATTAAAGGGAATCTTCTACCAACAATATCCATTCAAATTCAGGCA (line2) • this sequence has been sequenced with a quality $'())#$$%#%%'-&%'%#%('+;<>>>18.?ACLJM7E:CFIMK<=@0/.4<9<&007:,3<IIN<3%+&(+#%'#.2@401/5=49IEE=CH.20355>-@AC@:B?7;=C4419)*$$46211075.$%..#,529,''=CFF@:<?9B522.(&%%(9:3E99<BIL?:>RB--**5,3(/.-8B>F@@=?,9'36;:87+/19BAD@=8*''&''7752'$%&,5)AM<99$%;EE;BD:=9<@=9+%$ (line 4).

But what does this quality score mean?

The quality score for each sequence is a string of characters, one for each base of the nucleotide sequence, used to characterize the probability of misidentification of each base. The score is encoded using the ASCII character table (with some historical differences):

So there is an ASCII character associated with each nucleotide, representing its Phred quality score, the probability of an incorrect base call:

Phred Quality Score Probability of incorrect base call Base call accuracy
10 1 in 10 90%
20 1 in 100 99%
30 1 in 1000 99.9%
40 1 in 10,000 99.99%
50 1 in 100,000 99.999%
60 1 in 1,000,000 99.9999%

# Data quality

## Assess data quality

Before starting to work on our data, it is necessary to assess its quality. This is an essential step if we aim to obtain a meaningful downstream analysis.

FastQC is one of the most widely used tools to check the quality of data generated by High Throughput Sequencing (HTS) technologies.

Hands-on: Quality check
1. FASTQC Tool: toolshed.g2.bx.psu.edu/repos/devteam/fastqc/fastqc/0.73+galaxy0 with the following parameters
• param-file “Raw read data from your current history”: Reads
2. Inspect the generated HTML file
Question

Given the Basic Statistics table on the top of the page:

1. How many sequences are in the FASTQ file?
2. How long are the sequences?
1. There are 1876 sequences.
2. The sequences range from 130 nucleotides to 2327 nucleotides. Not all sequences have then the same length.

FastQC provides information on various parameters, such as the range of quality values across all bases at each position:

We can see that the quality of our sequencing data grows after the first few bases, stays around a score of 18 and then decreases again at the end of the sequences. MinION and Oxford Nanopore Technologies (ONT) are known to have a higher error rate compared to other sequencing techniques and platforms (Delahaye and Nicolas 2021).

For more detailed information about the other plots in the FASTQC report, check out our dedicated tutorial.

## Improve the dataset quality

In order to improve the quality of our data, we will use two tools:

• porechop (Wick 2017) to remove adapters that were added for sequencing and chimera (contaminant)
• fastp (Chen et al. 2018) to filter sequences with low quality scores (below 10)
Hands-on: Improve the dataset quality
1. Porechop Tool: toolshed.g2.bx.psu.edu/repos/iuc/porechop/porechop/0.2.3 with the following parameters:
• param-file “Input FASTA/FASTQ”: Reads
• “Output format for the reads: fastq
2. fastp Tool: toolshed.g2.bx.psu.edu/repos/iuc/fastp/fastp/0.23.2+galaxy0 with the following parameters:
• “Single-end or paired reads: Single-end
• param-file “Dataset collection”: output of Porechop
• “Disable adapter trimming”: Yes
• In “Filter Options”:
• In “Quality filtering options”:
• “Qualified quality phred”: 10
• “PolyG tail trimming”: Disable polyG tail trimming
3. Inspect the HTML report of fastp to see how the quality has been improved
Question
1. How many sequences are there before filtering? Is it the same number as in FASTQC report?
2. How many sequences are there after filtering? How many sequences have then been removed by filtering?
3. What is the mean length before filtering? And after filtering?
1. There are 1,869 reads before filtering. The number is lower than in the FASTQC report. Some reads may have been discarded via Porechop
2. There are 1,350 reads after filtering. So the filtering step has removed $$1869-1350 = 519$$ sequences.
3. The mean length is 314 nucleotide before filtering and 316bp after filtering.

# Assign taxonomic classification

One of the main aims in microbiome data analysis is to identify the organisms sequenced. For that we try to identify the taxon to which each individual reads belong.

Taxonomy is the method used to naming, defining (circumscribing) and classifying groups of biological organisms based on shared characteristics such as morphological characteristics, phylogenetic characteristics, DNA data, etc. It is founded on the concept that the similarities descend from a common evolutionary ancestor.

Defined groups of organisms are known as taxa. Taxa are given a taxonomic rank and are aggregated into super groups of higher rank to create a taxonomic hierarchy. The taxonomic hierarchy includes eight levels: Domain, Kingdom, Phylum, Class, Order, Family, Genus and Species.

The classification system begins with 3 domains that encompass all living and extinct forms of life

• The Bacteria and Archae are mostly microscopic, but quite widespread.
• Domain Eukarya contains more complex organisms

When new species are found, they are assigned into taxa in the taxonomic hierarchy. For example for the cat:

Level Classification
Domain Eukaryota
Kingdom Animalia
Phylum Chordata
Class Mammalia
Order Carnivora
Family Felidae
Genus Felis
Species F. catus

Let’s explore taxonomy in the Tree of Life, using Lifemap

Question
1. Which microorganisms do we expect to identify in our data?
2. What is the taxonomy of main expected microorganism?
1. The sequences are supposed to be yeasts extracted from a bottle of beer. The majority of beers contain a yeast genus called Saccharomyces and 2 species in that genus: Saccharomyces cerevisiae (ale yeast) and Saccharomyces pastorianus (lager yeast). The used beer is an ale beer, so we expect to find Saccharomyces cerevisiae. But other yeasts can also have been used and then found. We could also have some DNA left from other beer components, but also contaminations by other microorganisms and even human DNA from people who manipulated the beer or did the extraction.

2. The main expected microorganism is Saccharomyces cerevisiae with its taxonomy:

Level Classification
Domain Eukaryota
Kingdom Fungi
Phylum Ascomycota
Class Saccharomycetes
Order Saccharomycetales
Family Saccharomycetaceae
Genus Saccharomyces
Species S. cerevisiae

Taxonomic assignment or classification is the process of assigning an Operational Taxonomic Unit (OTUs, that is, groups of related individuals / taxon) to sequences. To assign an OTU to a sequence it is compared against a database, but this comparison can be done in different ways, with different bioinformatics tools. Here we will use Kraken2 (Wood et al. 2019).

In the $$k$$-mer approach for taxonomy classification, we use a database containing DNA sequences of genomes whose taxonomy we already know. On a computer, the genome sequences are broken into short pieces of length $$k$$ (called $$k$$-mers), usually 30bp.

Kraken examines the $$k$$-mers within the query sequence, searches for them in the database, looks for where these are placed within the taxonomy tree inside the database, makes the classification with the most probable position, then maps $$k$$-mers to the lowest common ancestor (LCA) of all genomes known to contain the given $$k$$-mer.

Hands-on: Kraken2
1. Kraken2 Tool: toolshed.g2.bx.psu.edu/repos/iuc/kraken2/kraken2/2.0.8_beta+galaxy0 with the following parameters:
• “Single or paired reads: Single
• param-file “Input sequences”: Output of fastp
• “Print scientific names instead of just taxids”: Yes
• In “Create Report”:
• “Print a report with aggregrate counts/clade to file”: Yes
• “Format report output like Kraken 1’s kraken-mpa-report”: Yes
• “Select a Kraken2 database”: Prebuilt Refseq indexes: PlusPF

The database here contains reference sequences and taxonomies. We need to be sure it contains yeasts, i.e. fungi.

2. Inspect the report file

The Kraken report in MPA format is a tabular file with 2 columns:

d__Eukaryota	756
d__Eukaryota|k__Metazoa	402
d__Eukaryota|k__Metazoa|p__Chordata	402
d__Eukaryota|k__Metazoa|p__Chordata|c__Mammalia	402
d__Eukaryota|k__Metazoa|p__Chordata|c__Mammalia|o__Primates	402
d__Eukaryota|k__Metazoa|p__Chordata|c__Mammalia|o__Primates|f__Hominidae	402
d__Eukaryota|k__Metazoa|p__Chordata|c__Mammalia|o__Primates|f__Hominidae|g__Homo	402
d__Eukaryota|k__Metazoa|p__Chordata|c__Mammalia|o__Primates|f__Hominidae|g__Homo|s__Homo sapiens	402
d__Eukaryota|k__Fungi	342
d__Eukaryota|k__Fungi|p__Ascomycota	341
d__Eukaryota|k__Fungi|p__Ascomycota|c__Saccharomycetes	336
...

1. The first column lists clades, ranging from taxonomic domains (Bacteria, Archaea, etc.) through species.

The taxonomic level of each clade is prefixed to indicate its level:

• Domain: d__
• Kingdom: k__
• Phylum: p__
• Class: c__
• Order: o__
• Family: f__
• Genus: g__
• Species: s__
2. The second column gives the number of reads assigned to the clade rooted at that taxon

Question
1. How many taxons have been identified?
2. How many reads have been classified?
3. Which domains were found and with how many reads?
4. Which yeasts have been identified? Are they the expected ones?
1. The file contains 215 lines (information visible when expanding the report dataset in the history panel). So 215 taxons have been identified.

2. On the 1350 sequences in the input, 837 (62%) were classified (or identified as a taxon) and 513 unclassified (38%). Information visible when expanding the report dataset in the history panel, and scrolling in the small box starting with “Loading database information” below the format information.

3. The 3 domains were found:
• Eukaryota with 756 reads assigned to it
4. Yeasts do not form a single taxonomic group (Kurtzman 1994). They are parts on fungi kingdom but belong two separate phyla: the Ascomycota and the Basidiomycota. But the “true yeasts” are classified in the order Saccharomycetales.

In the data, 6 species from the Saccharomycetales order have been identified:

• Saccharomycetaceae family
• Saccharomyces genus
• Saccharomyces cerevisiae species, the most abundant identified yeast species with 293 reads and the one expected given the type of beers
• Saccharomyces paradoxus species, a wild yeast and the closest known species to Saccharomyces cerevisiae

These reads might have been misidentified to Saccharomyces paradoxus instead of Saccharomyces cerevisiae because of some errors in the sequences, as Saccharomyces cerevisiae and Saccharomyces paradoxus are close species and should share then a lot of similarity in their sequences.

• Saccharomyces eubayanus species, most likely the parent of the lager brewing yeast, Saccharomyces pastorianus (Sampaio 2018)

• Kluyveromyces genus - Kluyveromyces marxianus species: only 1 read
• Trichomonascaceae family - Sugiyamaella genus - Sugiyamaella lignohabitans species: only 1 read
• Debaryomycetaceae family - Candida genus - Candida dubliniensis species: only 1 read

Everything except Saccharomyces cerevisiae are probably misindentified reads.

Other taxons than yeast have been identified. They could be contamination or misidentification of reads. Indeed, many taxons have less than 5 reads assigned. We will filter these reads out to get a better view of the possible contaminations.

Hands-on: Filter taxons with low assignements
1. Filter Tool: Filter1 with the following parameters:
• param-file “Filter”: report outpout of Kraken2
• “With following condition”: c2>5

We want to keep only taxons with the number of reads assigned, i.e. the value in the 2nd column, is higher than 5.

2. Inspect the output
Question
1. How many taxons have been removed? How many were kept?
2. What are the possible contaminations?
1. 27 lines are now in the file so $$215 - 27 = 188$$ taxons have been removed because low assignment rates.

2. Most of the reads (402) were assigned to humans (Homo sapiens). This is likely a contamination either during the beer production or more likely during DNA extraction.

Bacteria were also found: Firmicutes, Proteobacteria and Bacteroidetes. But the identified taxons are not really precise (not below order level). So difficult to identify the possible source of contamination.

# Visualize the community

Once we have assigned the corresponding taxa to the sequences, the next step is to properly visualize the data: visualize the diversity of taxons at different levels.

To do that, we will use the tool Krona (Ondov et al. 2011). But before that, we need to adjust the output from Kraken2 to the requirements of Krona. Indeed, Krona expects as input a table with the first column containing a count and the remaining columns describing the hierarchy. Currently, we have a report tabular file with the first column containing the taxonomy and the second column the number of reads. We will now use another tool, which also provides taxonomic classification, but it produces the exact formatting Krona needs.

Hands-on: Prepare dataset for Krona
1. Format MetaPhlAn2 Tool: toolshed.g2.bx.psu.edu/repos/iuc/metaphlan2krona/metaphlan2krona/2.6.0.0 with the following parameters:
• param-file “Input file (MetaPhlAN2 output)”: report output of Kraken2 tool)
2. Inspect the output file

Question
1. How many columns are now in the file?
2. How many taxons were now found?
1. 9 columns: one with the number of reads and one for each of the 8 levels of taxonomy.
2. With this new formatting, each row represents 1 detected taxon (to the most precise level). So 55 lines mean 55 identified taxons.

We can now run Krona. This tool creates an interactive report that allows hierarchical data (like taxonomy) to be explored with zooming, as multi-layered pie charts. With this tool, we can easily visualize the composition of a microbiome community.

Hands-on: Krona pie chart
1. Krona pie chart Tool: toolshed.g2.bx.psu.edu/repos/crs4/taxonomy_krona_chart/taxonomy_krona_chart/2.7.1 with the following parameters:
• “What is the type of your input data”: Tabular
• param-file “Input file”: output of Replace Text tool
2. Inspect the generated file

Let’s take a look at the result.

Question
1. What is the percentage of identified reads assigned to Homo sapiens? To Archaea?
2. Click on Saccharomyces in the graph. What are the percentages of identified reads assigned to Saccharomyces for different levels?
3. Click a second time on Saccharomyces in the graph. What is the repartition between the different Saccharomyces species?
1. 52% of identified reads are assigned to Homo sapiens, and 0.3% of Archaea
2. Reads are assigned to Saccharomyces
• 41% out of total identified reads (root)
• 43% out of identified reads for Eukaryota domain
• 98% out of identified reads for Ascomycota phylum
• 99% out of identified reads for Saccharomycetales order
• 100% out of identified reads for Saccharomycetaceae family

3. 92% of Saccharomyces reads are assigned to Saccharomyces cerevisiae, 5% to Saccharomyces paradoxus and 3% to Saccharomyces eubayanus,.

One of the most important features of Galaxy comes at the end of an analysis: sharing your histories with others so they can review them.

Sharing your history allows others to import and access the datasets, parameters, and steps of your history.

• Open the History Options galaxy-gear menu (gear icon) at the top of your history panel
• galaxy-toggle Make History accessible
• A Share Link will appear that you give to others
• Anybody who has this link can view and copy your history
• galaxy-toggle Make History publicly available in Published Histories
• Anybody on this Galaxy server will see your history listed under the Shared Data menu
3. Share only with another user.
• Click the Share with a user button at the bottom
• Enter an email address for the user you want to share with
• Your history will be shared only with this user.
4. Finding histories others have shared with me
• Click on User menu on the top bar
• Select Histories shared with me
• Here you will see all the histories others have shared with you directly

Note: If you want to make changes to your history without affecting the shared version, make a copy by going to galaxy-gear History options icon in your history and clicking Copy

Key points
• Data obtained by sequencing needs to be checked for quality and cleaned before further processing

• Yeast species but also contamination can be identified and visualized directly from the sequences using several bioinformatics tools

• With its graphical interface, Galaxy makes it easy to use the needed bioinformatics tools

• Beer microbiome is not just made of yeast and can be quite complex

# Useful literature

Further information, including links to documentation and original publications, regarding the tools, analysis techniques and the interpretation of results described in this tutorial can be found here.

# References

1. Kurtzman, C. P., 1994 Molecular taxonomy of the yeasts. Yeast 10: 1727–1740.
2. Ondov, B. D., N. H. Bergman, and A. M. Phillippy, 2011 Interactive metagenomic visualization in a Web browser. BMC Bioinformatics 12: 10.1186/1471-2105-12-385
3. Wood, D. E., and S. L. Salzberg, 2014 Kraken: ultrafast metagenomic sequence classification using exact alignments. Genome Biology 15: R46. 10.1186/gb-2014-15-3-r46
4. Wick, R., 2017 Porechop. GitHub. https://github.com/rrwick/Porechop
5. Chen, S., Y. Zhou, Y. Chen, and J. Gu, 2018 fastp: an ultra-fast all-in-one FASTQ preprocessor. 10.1101/274100
6. Sampaio, J. P., 2018 Microbe profile: Saccharomyces eubayanus, the missing link to lager beer yeasts. Microbiology 164: 1069.
7. Wood, D. E., J. Lu, and B. Langmead, 2019 Improved metagenomic analysis with Kraken 2. Genome biology 20: 1–13.
8. Delahaye, C., and J. Nicolas, 2021 Sequencing DNA with nanopores: Troubles and biases. PLoS One 16: e0257521.

# Feedback

Did you use this material as an instructor? Feel free to give us feedback on how it went.
Did you use this material as a learner or student? Click the form below to leave feedback.

# Citing this Tutorial

1. Polina Polunina, Siyu Chen, Bérénice Batut, Teresa Müller, Identification of the micro-organisms in a beer using Nanopore sequencing (Galaxy Training Materials). https://training.galaxyproject.org/training-material/topics/metagenomics/tutorials/beer-data-analysis/tutorial.html Online; accessed TODAY
2. Batut et al., 2018 Community-Driven Data Analysis Training for Biology Cell Systems 10.1016/j.cels.2018.05.012

@misc{metagenomics-beer-data-analysis,
author = "Polina Polunina and Siyu Chen and Bérénice Batut and Teresa Müller",
title = "Identification of the micro-organisms in a beer using Nanopore sequencing (Galaxy Training Materials)",
year = "",
month = "",
day = ""
url = "\url{https://training.galaxyproject.org/training-material/topics/metagenomics/tutorials/beer-data-analysis/tutorial.html}",
note = "[Online; accessed TODAY]"
}
@article{Batut_2018,
doi = {10.1016/j.cels.2018.05.012},
url = {https://doi.org/10.1016%2Fj.cels.2018.05.012},
year = 2018,
month = {jun},
publisher = {Elsevier {BV}},
volume = {6},
number = {6},
pages = {752--758.e1},
author = {B{\'{e}}r{\'{e}}nice Batut and Saskia Hiltemann and Andrea Bagnacani and Dannon Baker and Vivek Bhardwaj and Clemens Blank and Anthony Bretaudeau and Loraine Brillet-Gu{\'{e}}guen and Martin {\v{C}}ech and John Chilton and Dave Clements and Olivia Doppelt-Azeroual and Anika Erxleben and Mallory Ann Freeberg and Simon Gladman and Youri Hoogstrate and Hans-Rudolf Hotz and Torsten Houwaart and Pratik Jagtap and Delphine Larivi{\{e}}re and Gildas Le Corguill{\'{e}} and Thomas Manke and Fabien Mareuil and Fidel Ram{\'{\i}}rez and Devon Ryan and Florian Christoph Sigloch and Nicola Soranzo and Joachim Wolff and Pavankumar Videm and Markus Wolfien and Aisanjiang Wubuli and Dilmurat Yusuf and James Taylor and Rolf Backofen and Anton Nekrutenko and Björn Grüning},
title = {Community-Driven Data Analysis Training for Biology},
journal = {Cell Systems}
}
`

Congratulations on successfully completing this tutorial!


text:
# Blonk numbers and Center of the Cubieverse

#### Stefan

##### Member
.

You might've heard of Bacon numbers or Six Degrees of Kevin Bacon. The idea is to count how many movies someone is separated from Kevin Bacon. He himself is not separated at all, so his own Bacon number is 0. Actors appearing with him in movies have Bacon number 1, actors appearing in movies with those have Bacon number 2, and so on. The lower your Bacon number, the closer you are to Kevin.

I have now transferred the idea to cubing, the connections not made by appearing in the same movie but by appearing in the same WCA competition. But where do I start, who is the Kevin Bacon of cubing? Well, only one way to find out:

So my "Blonk number" is 1, because I participated in the 2005 world championship together with Michiel. Here's the distribution of Blonk numbers for all WCA members:

Code:
Blonk
number    People

0          1   (this is [url=http://www.worldcubeassociation.org/results/p.php?i=2003BLON01]Michiel[/url] himself)
1        201   (I'm one of these, woohoo!)
2       5430
3       3124
4        332
none        19   (the competitors of [url=http://www.worldcubeassociation.org/results/c.php?i=DubaiOpen2009]Dubai Open 2009[/url])

Average Blonk number: 2.39447623239437
Michiel only appeared in two competitions, though, WC2003 and WC2005. That is nice for the game, cause not too many people get a Blonk number of 1, but it also doesn't quite make him the "Center of the Cubieverse" (just like Kevin Bacon isn't really the Center of the Hollywood Universe). The WCA member with the smallest average distance to everyone else is... Lars Vandenbergh. No wonder, as he has competed in 67 competitions, more than anyone else.

Code:
Vandenbergh
number    People

0          1   (this is Lars himself)
1       1672   (I'm one of these, woohoo!)
2       6836
3        579
none        19   (the competitors of [url=http://www.worldcubeassociation.org/results/c.php?i=DubaiOpen2009]Dubai Open 2009[/url])

Average Vandenbergh number: 1.87951144366197
And here are the top 10:

1.880: Lars Vandenbergh (67 competitions)
1.884: Bob Burton (59 competitions)
1.886: Arnaud van Galen (58 competitions)
1.906: Shelley Chang (55 competitions)
1.910: Takao Hashimoto (43 competitions)
1.915: Tyson Mao (43 competitions)
1.927: Timothy Sun (20 competitions)
1.933: Piti Pichedpan (only 9 competitions)

The bottom 10 (or rather 11):
4.210: Yang-Sung Ling (1 competition)
4.210: Joy Lin (1 competition)
4.210: Yung-An Chen (1 competition)
4.210: Yu-Hsiang Chan (1 competition)
4.210: Wei-Shu Lai (1 competition)
4.210: Fang-Chieh Yang (1 competition)
4.210: Tzu-Cheng Chen (1 competition)
4.210: Chih-Chieh Su (1 competition)
4.210: John Lin (1 competition)
4.210: Kai-Chieh Chan (1 competition)
4.210: Jizhen Ho (1 competition)
These are all competitors of the Chia-yi Pyraminx Competition 2009 except Tzu-Chun Chou, who connected this competition to the rest of us (except the Dubai Open 2009).

Note 1: These statistics are based on the WCA database as of early April 12, 2010. I don't intend to update this post, but I'm working on a page that updates automatically and that will also have more functionality.

Note 2: Erdős numbers are the same idea (how many scientific publications are you separated from famous mathematician Paul Erdős) and are older, but Bacon numbers seem to be more well-known and there's no single Paul Erdős of cubing. That's why I chose Bacon. Besides, who doesn't [thread=12681]love Bacon[/thread]? Btw, check out this nice comic.

Last edited:

#### Lucas Garron

##### Member
Note 2: Erdős numbers are the same idea (how many scientific publications are you separated from famous mathematician Paul Erdős) and are older, but Bacon numbers seem to be more well-known and there's no single Paul Erdős of cubing.
But Erdős numbers are more classic!

Anyhow, I would really be in favor of van Bruchem numbers. If there's one guy in the center of cubing, it's Ron.

#### Stefan

##### Member
You're just angry cause your Blonk number is 2

Ok, (van) Bruchem numbers:
Code:
Bruchem
number    People

0          1   (this is Ron himself)
1       1365   (I'm one of these, woohoo!)
2       6876
3        846
none        19   (the competitors of Dubai Open 2009)

Average Bruchem number: 1.94267165492958

#### jiggy

##### Member
Haha, excellent post! What's the deal with those 19 Dubai Open 2009 competitors though?

#### Stefan

##### Member
That Dubai competition is completely separate from the rest. None of its participants ever participated in any other competition, so there's no connection to any other competitions and thus persons.

#### jiggy

##### Member
But is that the only competition where this happened? What a strange anomaly!

#### JBCM627

##### Member
But is that the only competition where this happened? What a strange anomaly!
Normally, the delegate has competed in a previous competition and competes in the competition they are delegating. Not the case with Dubai, who had a delegate from Seven Towns.

#### Stefan

##### Member
Yes, that's the only one. That pyraminx competition came close, only connected to the rest of the world via a single competitor.

#### Vincents

##### Member
Look for familiar names...

I think I'm usually a 2, because everyone at US Nats 09 connects me to most of the world =)

#### Stefan

##### Member
If I understand correctly, my Bacon Number is 4. Me > Anthony > Tyson > Blonk.
I doubt you have a Bacon number. Your Blonk number is 2, like Bryan said.

how do we find out our numbers?
Browse the database making guesses, download the WCA database export and analyse it with a program, or wait until I'm finished with my page

#### scotzbhoy

##### Member
My Blonk number is 2, via Dan Harris. My Vandenbergh number is 1 and my (van) Bruchem number is 2, via quite a few people.

#### Tyson

##### Member
If I understand correctly, my Bacon Number is 4. Me > Anthony > Tyson > Blonk.
I doubt you have a Bacon number. Your Blonk number is 2, like Bryan said.

how do we find out our numbers?
Browse the database making guesses, download the WCA database export and analyse it with a program, or wait until I'm finished with my page
I have a Bacon number

Due to a mistake on IMDB.

format: plain


text:
# User:Helen L. Slucher/Notebook/CHEM 571/2013/10/23

Project name Main project page
Previous entry      Next entry
1. Protein-AuNP analysis
1. Take a picture and note physical description of each ratio
2. Place 1mL of each ratio in an 1.5mL eppendorf tube.
3. Centrifuge for 30 minutes (Be considerate of other uses here. Act quickly, and get as many tubes in the centrifuge as you can at once.)
4. Take a UV-Vis spectrum of each sample (Be considerate of other users here)
5. After taking the spectrum, save the sample in a fresh eppy tube.
2. Synthesis of HRP-AuNPs and Hemoglobin-AuNPs
1. Into test tube that will contain a total of 5mL add
2. Au solution such that the final concentration is 0.25mM
3. For Myoglobin make the following solutions to reflect an Au:Protein ratios
1. 30
2. 50
3. 70
4. 90
5. 110
6. 130
7. 150
8. 170
9. 190
10. 210
4. For HRP make the following solutions to reflect an Au:Protein ratios
1. 230
2. 250
3. 270
4. 290
5. 310
6. 330
7. 350
8. 370
9. 390
10. 410
5. Water up to 5mL

Stock Solutions

1. Gold
1. 2.50mM
2. HRP
1. 1.5μM
3. Myoglobin
1. 16.9μM

## Data

1. Series 1: 30 to 1 Au to Protein
2. Series 2: 50
3. Series 3: 70
4. Series 4: 90
5. Series 5: 110
6. Series 6: 130
7. Series 7: 150
8. Series 8: 170
9. Series 9: 190
10. Series 10: 210
1. Series 1: 30
2. Series 2: 50
3. Series 3: 70
4. Series 4: 90
5. Series 5: 110
6. Series 6: 130
7. Series 7: 150
8. Series 8: 170
9. Series 9: 190
10. Series 10: 210


text:
# Plays a game of Tic Tac Toe

As part of the odin project I've written this bit of code that allows two users to play a game of Tic Tac Toe. I'm still a relative newbie to Ruby and to coding and am guessing that there are much better ways to do what I've done here. I'd love to get input, suggestions and recommendations.

The full code is below but can also be found here.

class TicTacToe

def initialize
@game = Game.new("Chris", "Lisa")
end

class Game
attr_accessor :player1, :player2

def initialize (player1, player2)
@player1 = Player.new(player1)
@player2 = Player.new(player2)
@winning = [[1,2,3], [4,5,6], [7,8,9], [1,4,7], [2,5,8], [3,6,9], [1,5,9], [3,5,7]]
@symbol1 = "X"
@symbol2 = "O"

self.start
end

def start
introduction
player_names
player_assignment
display_board(@winning)
play_game
end

def introduction
puts "Welcome to TicTacToe. We will now randomly choose who goes first. Press any key to begin."
puts ""
@@input = gets.chomp
end

def player_names
puts "Please enter the name of a player."
name1 = gets.chomp
puts ""
puts "Please enter the name of another player."
name2 = gets.chomp

@player1.name = name1
@player2.name = name2
end

def player_assignment
@x = rand(10)

if @x <= 5
@player1.symbol = @symbol1
@player2.symbol = @symbol2
puts ""
puts "#{player1.name} is assigned #{@symbol1} and #{player2.name} is assigned #{@symbol2}"
puts ""
else
@player1.symbol = @symbol2
@player2.symbol = @symbol1
puts ""
puts "#{player1.name} is assigned #{@symbol2} and #{player2.name} is assigned #{@symbol1}"
puts ""
end
end

def play_game
count = 0
if @player1.goes_first? == true
while count < 8
check_board(@player1.play, @player1.symbol)
announce_winner(is_winner?(@player1))
count += 1

check_board(@player2.play, @player2.symbol)
announce_winner(is_winner?(@player2))
count += 1
end
else
while count < 8
check_board(@player2.play, @player2.symbol)
announce_winner(is_winner?(@player2))
count += 1

check_board(@player1.play, @player1.symbol)
announce_winner(is_winner?(@player1))
count += 1
end
end
end_game
end

def display_board(array)
puts ""
print "  #{array[0][0]}  |   #{array[0][1]}  |   #{array[0][2]} \n"
puts "------------------"
print "  #{array[1][0]}  |   #{array[1][1]}  |   #{array[1][2]} \n"
puts "------------------"
print "  #{array[2][0]}  |   #{array[2][1]}  |   #{array[2][2]}"
puts "\n"
end

def check_board(move, symbol)
@move = move.to_i
@symbol = symbol

@winning.each do |array|
array.map! do |num|
if num.is_a?(String)
num
elsif(@move == num)
@symbol
elsif @move != num && num.is_a?(Integer)
num
end
end
end
display_board(@winning)
puts ""
end

def is_winner?(player)

@winning.any? do |line|
line.all? {|position| position == player.symbol}
end
end

def announce_winner(x)
@x = x

if @x == true
puts "You've won, congratulations"
display_board(@winning)
exit
else
return
end
end

def end_game
puts "GAME OVER"
exit
end
end

class Player
attr_accessor :name, :symbol

def initialize(name)
@name = name
end

def play
puts "#{@name}, your symbol is #{self.symbol}."
puts "Please select a square represented."
input = gets.chomp
puts "#{@name} selected #{input} and a #{symbol} will be placed in that position."
puts ""
return input
end

def goes_first?
if self.symbol == "X"
return true
else
return false
end
end
end
end

a = TicTacToe.new

• Not a real answer, but what will you do when the requirement or need arises to change the size of the board? say to 4x4 or 5x5? In that case you will have to make several changes to your code (displaying, winning conditions, etc.). – David Perfors Apr 8 '15 at 10:34

As Caridorc points out, the code is readable overall. I do however have some concerns:

• Typically, Ruby style guides will say that you should use 2 spaces for indentation

• Why is the game initialized with "Chris" and "Lisa" as players, when it never uses that for anything? Given that the game asks for players anyway, it shouldn't be necessary to pass anything to Game.new.

• I'd suggest making TicTacToe a module instead, just for namespacing purposes. There's little need for it to be a class.

• Your method names are a little off.

• #announce_winner doesn't necessarily announce a winner
• #check_board doesn't check the board
• #is_winner? should probably just be #winner? ("is_" isn't necessary when you've got the question mark)
• #player_names doesn't return player names, as its name would suggest as it's a noun.
• #player_assignment is also a noun, but should be a verb, e.g. shuffle players, since that's what it does.
• I'm very confused as to why #introduction creates a class variable called @@input. There's no reason to store the user's input. Nor is there a reason to chomp it.
... and "press any key to begin" isn't quite true: You have to press enter.

• Also of note are the @symbol1 and @symbol2 variables, which don't seem to have any reason to be instance variables in Game. In general, you seem to use instance variables when you should use local variables.

• You don't need most - if not all - of the returns in the code.

• As Caridorc points out, there's quite a few instances of code duplication. Often for dealing with either @player1 or @player2.

• The #start method is very clear in making the steps of the game explicit, but the #play_game method is more muddled. You always call #announce_winner.. even if there's nothing to announce.

• Speaking of #announce_winner: Why create an instance variable to store an argument variable? Why have an else branch that does nothing?

• I wouldn't let the Player be responsible for getting input from the user. It splits the responsibility for interacting with the user between Game and Player Doubly so, since using that input for anything happens in Game.

• As mentioned, you have a bunch of instance variables that shouldn't be instance variables, but for some reason, the actual state of the game - the board - is not an instance variable. Instead, you pass an array around from method to method. It's almost the opposite of how object-oriented programming usually works.

• You can keep picking already-claimed squares... Probably not what you want.
It doesn't change the board, but it makes you forfeit your turn. You can keep picking, say, 5 for both players, and after 9 turns, the game just ends, even though there are 8 unclaimed squares on the board.
You can also just type any random thing other than 1-9, and the game will let you. Again, you just forfeit your turn.
In short, you should really make sure that user's input makes sense before continuing with the game.

Here's a very different implementation (I did it mostly for fun). I'm not saying this is "the right way™" (there are things I'm not happy with, as you can see in the comments). It's just to present an alternative.

# A tiny mixin for Array
class Array
# Get every nth element in the array
def every_nth(step)
0.step(self.count, step).map { |i| self[i] }
end
end

module TicTacToe
# Convenience method
def self.play
Game.new.play
end

class Game
def initialize
@board = Board.new
show_welcome_message
create_players
take_turn until @board.full?
puts "It's a tie!"
end

def show_welcome_message
puts "Welcome to TicTacToe. Press enter to begin."
gets
end

def create_players
names = []
print "Please enter the name of the first player: "
names << gets.chomp # TODO: Should check that something was actually entered

print "Please enter the name of the second player: "
names << gets.chomp # TODO: See above...

puts "Randomizing who'll start..."

@players = names.shuffle.zip(["X", "O"]).map do |name, symbol|
Player.new(symbol, name)
end
end

def print_board
puts @board
end

# Note: I'm not too happy with this method. It's a little messy and recursive...
def take_turn
print_board
puts "It's #{current_player.name}'s (#{current_player.symbol}) turn."
square = get_player_choice
@board[square] = current_player.symbol
check_board # this may exit

puts ""
@players.rotate! # swap players around for next round
end

def current_player
@players.first
end

def get_player_choice
begin
print "Enter the number of an unclaimed square: "
square = gets.chomp.to_i
end until @board.unclaimed_squares.include?(square)
square
end

def check_board
if @board.won?(current_player.symbol)
puts "#{current_player.name} wins!"
exit
end
end
end

# The Player class is simply a Struct
Player = Struct.new(:symbol, :name)

# The Board class handles the state of play, checking win conditions etc.
# I'm not quite happy with checking for Fixnums or Strings - a bit too informal...
class Board

def initialize
@squares = (1..9).to_a
end

def won?(symbol)
winning_squares.any? do |line|
line.all? { |value| value == symbol }
end
end

def full?
@squares.all? { |square| square.is_a?(String) }
end

def []=(number, value)
@squares[number-1] = value
end

def unclaimed_squares
@squares.select { |square| square.is_a?(Fixnum) }
end

def to_s
lines = rows.map do |row|
row.join(" | ")
end
lines.join("\n#{'-' * 9}\n")
end

private

def winning_squares
rows + columns + diagonals
end

def rows
@squares.each_slice(3).to_a
end

def columns
rows.transpose
end

def diagonals
diagonals = []
diagonals << @squares.every_nth(4) # top-left to bottom-right
diagonals << @squares.reverse.every_nth(4) # the other one
diagonals
end
end
end

TicTacToe.play

I can simplify your player_assignment:

• You used a random variable up to ten and then checked if it was less than 5, you can use a random boolean instead

• You repeated very similar code two times, I removed that duplication

def player_assignment

if rand(2) == 1
@player1.symbol = @symbol1
@player2.symbol = @symbol2
else
@player1.symbol = @symbol2
@player2.symbol = @symbol1
end

puts ""
puts "#{player1.name} is assigned #{@player1.symbol} and #{player2.name} is assigned #{@player2.symbol}"
puts ""
end

Also as a simple tip do not overcheck things that are already booleans

def goes_first?
if self.symbol == "X"
return true
else
return false
end
end

should become:

def goes_first?
return self.symbol == "X"
end

I am pretty sure that there is some duplication to be removed down here but I can't understand how:

    if @player1.goes_first? == true
while count < 8
check_board(@player1.play, @player1.symbol)
announce_winner(is_winner?(@player1))
count += 1

check_board(@player2.play, @player2.symbol)
announce_winner(is_winner?(@player2))
count += 1
end
else
while count < 8
check_board(@player2.play, @player2.symbol)
announce_winner(is_winner?(@player2))
count += 1

check_board(@player1.play, @player1.symbol)
announce_winner(is_winner?(@player1))
count += 1
end
end

You should not use explicit while loops with count,

while count < 8

should become

(1..9).each do |turns_played|

removing the increment.

Overall the code is very clearly written, kudos.

• @rand_bool = rand(2); if @rand_bool... This does not work, rand(2) always returns a truthy value (0 or 1). You need to have a smarter if condition; try if rand(2) == 1 and get rid of @rand_bool entirely (which, by the way, shouldn't be an instance var) – Devon Parsons Apr 7 '15 at 19:09
• @DevonParsons so 0 is truthy, I am always learning, thanks. – Caridorc Apr 7 '15 at 19:12
• Yup, only nil and false are falsey - everything is truthy. By the way, the goes_first? method can be reduced to just symbol == "X". The return is implicit, and the self is necessary either :) – Flambino Apr 7 '15 at 21:24


text:
# HighestOrder -- sets the order to which we compute

## Description

HighestOrder is the name of an optional argument. Its value is an integer, which gives an upper bound on to what order a solution of the deformation equation is lifted. Default value is 20.

## Functions with optional argument named HighestOrder :

• "localHilbertScheme(...,HighestOrder=>...)" -- see localHilbertScheme -- computes a power series representation of the local Hilbert scheme
• "versalDeformation(...,HighestOrder=>...)" -- see versalDeformation(Matrix) -- computes a power series representation of a versal deformation

## For the programmer

The object HighestOrder is .


text:
## help_people one year ago For f(x) = x2 and g(x) = (x − 4)2, in which direction and by how many units should f(x) be shifted to obtain g(x)? Left 4 units Up 4 units Right 4 units Down 4 units

1. anonymous

for a function $f(x)$ We have the following ways of how the graph moves $f(x+a)$ Moves the graph LEFT by a units $f(x-a)$ moves the graph RIGHT by a units $f(x)+a$ moves the graph UP by a units $f(x)-a$ moves the graph DOWN by a units, so what do you think?

2. anonymous

If you think about it as a parabolic function in vertex form, $$y=a(x-h)^2+k$$ You can determine that your vertex is at $$(4~,~0)$$ whereas the vertex of the parent function is $$(0~,~0)$$. Comparing the two vertexes, you can tell which way your graph has moved, what is the change from $$4\rightarrow 0=~?$$

3. help_people

so a ? @Jhannybean and @Nishant_Garg srry my mom called me :/

4. help_people

srrry i was inactive :)

5. anonymous

a would be $$g(x) =(x+4)^2$$

6. help_people

? thats now what nishant said

7. anonymous

No, @Nishant_Garg gave you the different variations of HOW the graph would move in certain situations.

8. anonymous

You can also compare the vertices.. and notice how theyve changed.

9. anonymous

i mean vertexes*

10. anonymous

|dw:1442689805859:dw|

11. anonymous

Which way does it LOOK like it's moving?...

12. help_people

to the right

13. help_people

4 times

14. help_people

@Jhannybean so c?

15. anonymous

Yep

16. help_people

ok great thanks :)

17. help_people

can i tag you if i have any more questions?

18. mathmate

What @Nishant_Garg said is still true, we only have to read with care. This is what he wrote, with line spacings rearranged. for a function f(x) We have the following ways of how the graph moves f(x+a) Moves the graph LEFT by a units f(x−a) moves the graph RIGHT by a units f(x)+a moves the graph UP by a units f(x)−a moves the graph DOWN by a units, so what do you think?


text:
# How to calibrate an oven thermometer?

Is there a DIY method for calibrating thermometers in the 200 to 250 degree Celsius range?

In a moment of boredom I decided to put all five of my wife's oven thermometers side-by-side in the oven and set it to maximum. After waiting for them all to stabilize they all disagreed with each other over a 70 degree (C) range of values.

How can I know which one is right? (or even just 'least wrong'?)

I know I can calibrate the zero value against melting ice, and can calibrate 100 degrees against boiling water, but non of my thermometers actually go this low, and even if they did, the temperature range I'm interested in is 200 - 250 degrees.

Any ideas?

UPDATE - I'd prefer to do this without spending too much money, hopefully no more than any of the thermometers cost in the first place. I'm looking for a solution with prove-able results. Simply buying another oven thermometer, even a top-rated one begets the question 'how do I know the new one is any more accurate?'

Incidentally, I googled various oven thermometers reviews, and non of the comparisons even mentioned accuracy, they were more concerned with ease of use and the size of the dial rather than whether or not they worked properly!

UPDATE - apparently sugar melts at 184-186 degrees - pretty close the sort of temperatures I'm interested in. This has some advantages a) I already have sugar! and b) unlike solder, I'm not going to worry about it being potentially toxic and contaminating the oven.

• What equipment are you prepared to buy? Or get some solder for which the melting point is defined and use that. Or get some of those wax sticks used for checking metal temperatures -used by blacksmiths among others. – Solar Mike Aug 16 '20 at 19:50
• So you posted an update based on my comment but did not take on board the other suggestions... – Solar Mike Aug 16 '20 at 20:27
• @Solar Mike - that's because I'm still googling your suggestions! I'm guessing that blacksmiths normally work at temperatures well above 250 C, and I suspect most solders also melt at closer to 300 and above. – ConanTheGerbil Aug 16 '20 at 20:32
• Solder melts at 90 to 450 C (19 to 840 F or 360 to 720K) depending on the composition... but you should have found that by now. – Solar Mike Aug 16 '20 at 20:47
• It's what I would do, but c'est la vie! – StainlessSteelRat Aug 17 '20 at 0:51

Well I recently purchased a Flir C5 Thermography camera. I have worked in predictictive maintenance for many years. There are many tools ranging from $300.00 up which will come in handy and save you time and money and can be used should you choose to in construction,maintenance,engineering, automotive and more. You can possibly save more money on less expensive ones, but tools that cost \$6,000 about 12 years ago are about \$700.00 and less with greater flexibility. Consumer analog thermometers are generally inaccurate. You can get inexpensive infrared which I have found to be excellent (such as Etekcity, about $$\\\10$$ ). Also electronic immersion ( not for oven) are good to 0.1 F for less than $$\\\10$$ ; great for fudge ,etc. I use both types for aquariums as the pet shop alcohol thermometers are worthless. • I do not know computers , so no clue why the different script. – blacksmith37 Aug 18 '20 at 14:56 • The reason for the different script etc. is because you used the dollar sign '$'. It's used at the start & end of items you want to display MathJAX & Tex formats. – Fred Aug 18 '20 at 15:20


text:
# Proof I

When added to the product of two consecutive integers larger one, we get square larger one. Is this true or not?

Result

### Step-by-step explanation:

$n\left(n+1\right)+\left(n+1\right)={n}^{2}+n+n+1={n}^{2}+2n+1=\left(n+1{\right)}^{2}$

We will be pleased if You send us any improvements to this math problem. Thank you!

Tips to related online calculators
Do you have a linear equation or system of equations and looking for its solution? Or do you have a quadratic equation?

#### You need to know the following knowledge to solve this word math problem:

We encourage you to watch this tutorial video on this math problem:

## Related math problems and questions:

• Four integers
Fnd four consecutive integers so that the product of the first two is 70 times smaller than the product of the next two.
• Digits A, B, C
For the various digits A, B, C is true: the square root of the BC is equal to the A and sum B+C is equal to A. Calculate A + 2B + 3C. (BC is a two-digit number, not a product).
• Reciprocal
It is true (prove it) that if a> b> 0: ?
• Proof PT
Can you easily prove Pythagoras theorem using Euclidean theorems? If so, do it.
• Product
The product of two consecutive odd numbers is 8463. What are this numbers?
• Two integers
Two integers, a and b, have a product of 36. What is the least possible sum of a and b?
• Powers
Is true for any number a,b,c,d equality:? ?
• Larger perimeter
There are a square and a circle that passes through two adjacent vertices of the square (end points of side a) and the center of the opposite side (c). Which of the plane shape has a larger perimeter?
• Three ints
The sum of three consecutive integers is 2016. What numbers are they?
• Hexagon - MO
The picture shows the ABCD square, the EFGD square and the HIJD rectangle. Points J and G lie on the side CD and is true |DJ|
• Square sides
If we enlarge the side of the square by a third, its circumference will be 20 cm larger than the original. What is the side of the square?
• The sum 2
The sum of five consecutive even integers is 150. Find the largest of the five integers. A.28 B.30 C.34 D.54 Show your solution and explain your answer.
• Equilateral cylinder
A sphere is inserted into the rotating equilateral cylinder (touching the bases and the shell). Prove that the cylinder has both a volume and a surface half larger than an inscribed sphere.
• Product
The sum and the product of three integers are 6. Write largest of them.
• Rectangle
Area of rectangle is 3002. Its length is 41 larger than the width. What are the dimensions of the rectangle?
• Find two
Find two consecutive natural numbers whose product is 1 larger than their sum. Searched numbers expressed by a fraction whose numerator is the difference between these numbers and the denominator is their sum.
• Sale
If the product twice price cut by 25%, what percentage was price cut in total?