Antifungal resistance mutations¶
FunFlux can screen every genome for point mutations studied for resistance to antifungal drugs
and fungicides. The AMR screen (the resistance-mutation screen) runs ChroQueTas against the FungAMR
database (Bédard et al. 2025), which lists such mutations with the evidence for or against
resistance. For every sample it writes
05.amr/{sample}/amr_summary.tsv, with one row per target protein of the species and the changes
found. Each change gets a verdict from the evidence FungAMR holds: whether it confers resistance,
to which drugs, and how strong the evidence is (Evidence levels and verdicts).
The table also appears in the MultiQC report.
---
config:
themeVariables:
fontSize: 14px
flowchart:
nodeSpacing: 35
rankSpacing: 35
---
flowchart TD
TAB([species<br/>column 2 of the<br/>annotation parameter table]) --> MATCH[match to a species folder<br/>of the database]
DB([ChroQueTas and its database<br/>downloaded once<br/>per output folder]) --> MATCH
MATCH --> NUC[nuclear run<br/>contigs_final.fasta<br/>nuclear genetic code]
MATCH -.->|species with cytochrome b| MIT[mitochondrial run<br/>mitochondrial genetic code]
NUC --> CALL[each target read from the run<br/>of its own compartment<br/>verdicts from evidence levels]
MIT --> CALL
CALL --> OUT([05.amr/sample/<br/>amr_summary.tsv<br/>amr_positions.tsv])
OUT --> REP([MultiQC report<br/>summary of every sample])
The AMR screen is off by default. ChroQueTas and its database are licensed only for non-commercial use, and switching the screen on is your acceptance of that licence (Licence). To switch it on, set:
Terms used on this page
| AMR screen | antimicrobial resistance screen: the optional step, off by default, in which ChroQueTas looks in each genome for the changes FungAMR lists for the species |
| FungAMR | the database of mutations studied for resistance to antifungal drugs and fungicides, with evidence levels for and against; ChroQueTas screens each genome against part of it |
| target protein | a protein whose FungAMR positions ChroQueTas checks, such as Beta-tubulin or Cyp51; amr_summary.tsv has one row per target of the species |
| FungAMR mutation | the ChroQueTas call for a change that FungAMR lists at that position, whatever its evidence; it does not by itself mean resistance |
| evidence level | the FungAMR score for a change and a drug, by kind of study: 1 (strongest) to 8 for resistance found, -1 to -8 for none found |
| verdict | the reading of FungAMR's evidence for a change or a target: resistance, conflicting, no resistance, unknown, wild type, or not compared for a position |
| compartment | nuclear or mitochondrial: the ChroQueTas run, each with its own genetic code, from which a target protein's result is read |
| contamination and mitochondrion screen | the screen of the draft assembly: BLAST against core_nt, BlobTools, the mitochondrion screen and the contig selector; in contigs mode only with parameters.contigs.screen: true |
What the screen looks for¶
Fungi become resistant through changes in their own genes. FungAMR records amino acid substitutions and other changes, such as more copies of a gene, and ChroQueTas screens the substitutions. Many of them sit in the protein the drug acts on, at a few known positions. The gene itself is present in every strain of the species, sensitive or resistant, so a search for resistance genes, as used for bacteria, does not fit. What tells a resistant strain from a sensitive one is the amino acid at those positions. The AMR screen therefore finds each target protein in the assembly and reads those positions.
The table lists the main targets in the database, with drugs named in their entries.
| Target (database name) | Protein | Drugs, for example | Species in the database with this target |
|---|---|---|---|
Cyp51 |
sterol 14α-demethylase of the ergosterol pathway | azoles: fluconazole, voriconazole, itraconazole, posaconazole | 27 |
Cytochrome_b |
cytochrome b of respiratory complex III, encoded in the mitochondrial genome | QoI fungicides (strobilurins): azoxystrobin, pyraclostrobin, trifloxystrobin | 15 |
Beta-tubulin |
β-tubulin of the microtubules | benzimidazoles: carbendazim, benomyl, thiophanate-methyl; diethofencarb | 12 |
Fks |
β-1,3-glucan synthase of the cell wall | echinocandins: caspofungin, anidulafungin, micafungin | 10 |
Sdh |
succinate dehydrogenase, respiratory complex II | SDHI fungicides: boscalid, carboxin, pydiflumetofen | 4 |
Bos1, OS1 |
one histidine kinase of the osmotic stress pathway, listed under two names with the same reference protein (UniProt Q8X1E7) | dicarboximides (iprodione, procymidone), fludioxonil | 1 (Botrytis cinerea) |
The database has 210 target proteins in all, under 109 target names. The others include efflux
pumps and their regulators (Cdr1, Pdr1, Tac1, Mrr1) and the enzymes that turn
5-fluorocytosine into its toxic form (Fcy1, Fur1).
In two species the database holds one protein under two names: Botrytis cinerea Bos1 and
OS1, and Fusarium graminearum Myosin-1 and Myosin-5. Each name gets its own row in the
tables, so a change at a position both names list is reported twice.
FungAMR and ChroQueTas¶
FungAMR (Bédard et al. 2025) was curated by hand from 501 published studies. It holds 35,792 entries for 208 drugs, 246 genes and 95 fungal species. Each entry gives the gene, the mutation and the drug, with a confidence score for the evidence (Evidence levels and verdicts). FungAMR can be searched online in the Comprehensive Antibiotic Resistance Database (CARD).
ChroQueTas, from the same paper, screens a genome against the part of FungAMR prepared for it. FunFlux runs version 1.0.1, downloaded from one fixed commit of its GitHub repository, as described under Settings. ChroQueTas takes each target protein of the species through four steps:
| Step | Tool | What happens |
|---|---|---|
| 1 | miniprot 0.14 | aligns the reference protein to the genome, across introns, and translates the gene it finds with the genetic code of the run |
| 2 | BLASTP of BLAST+ 2.16.0 | compares the extracted protein with the reference, and ChroQueTas keeps it at more than 90 % identity over more than 75 % of the reference |
| 3 | MAFFT 7.525 | aligns the extracted protein with the reference |
| 4 | ChroQueTas | reads the amino acid at every FungAMR position of the target and calls it |
Every position gets one of the calls below. FunFlux writes ChroQueTas's FungAMR MUTATION as
FungAMR mutation, its New mutation as new mutation, and so on.
| Call | Meaning |
|---|---|
FungAMR mutation |
the amino acid differs from the reference, and FungAMR lists this change at this position, whatever the evidence says: for resistance, against it, or both. ChroQueTas adds the drugs with their evidence levels, and the verdict says which way they point (Evidence levels and verdicts) |
new mutation |
the amino acid differs from the reference, but FungAMR does not list this change at this position. It is a possible new resistance mutation that needs its own investigation (ChroQueTas README) |
no mutation |
the reference amino acid |
no alignment |
the found protein has a gap at the position. The gap is a deletion, a part of the gene missing from the assembly (as at a contig end), or a premature stop codon, which MAFFT turns into a gap. A nonsense mutation that FungAMR lists (written X) therefore shows up here, not as a FungAMR mutation. The copy's protein, <name>_<target>.<fragment>.faa, tells which, because a stop is written * there |
position not found |
the position lies outside the alignment, or it is not a number, or its codon could not be read (found amino acid X) |
The last two calls are not comparisons. They do not count as positions checked, and the summary's
note names them. A target with no compared position at all is not evaluated
(Statuses).
Three database rows have no position number. ChroQueTas reports the insertion (Cryptococcus
deuterogattii Uxs1, 1182ins(fs)) as position not found, and skips the duplication
(Nakaseomyces glabratus Pdr1, c.3308dupT) without a word. It reads the translocation
(Candidozyma auris Ncp1) as position 1, and FunFlux reports that row as position not found
too.
ChroQueTas calls a position a FungAMR mutation when the letter it found is one of those the database lists there, and a new mutation when it is a letter other than the reference's. In three cases the letter is not a change, and FunFlux writes another call:
| What ChroQueTas found | ChroQueTas's call | FunFlux's call |
|---|---|---|
X: miniprot's letter for a codon it cannot read, one with N bases (a gap in a scaffold). FungAMR writes a stop as X too, but miniprot writes a stop as * |
FungAMR MUTATION where FungAMR lists a stop, New mutation elsewhere |
position not found |
a gap where FungAMR lists a deletion (written -, 22 rows), beyond the part of the reference the found protein covers (BLASTP's sstart to send): the protein ends early, as for a gene cut at a contig end |
FungAMR MUTATION |
no alignment |
the reference amino acid, at the one row that lists the reference amino acid as the change: Saccharomyces cerevisiae Hap1 N832N (clotrimazole, level 4) |
FungAMR MUTATION |
no mutation |
A gap inside the found protein, where FungAMR lists a deletion, stays a FungAMR mutation. As on
every row, fungamr_drugs keeps ChroQueTas's drug text.
ChroQueTas does not screen the whole of FungAMR. The database of version 1.0.1 holds only single mutations, and only species with a reliable reference protein (ChroQueTas README):
| FungAMR | ChroQueTas database 1.0.1 | |
|---|---|---|
| entries | 35,792 | 8,285 mutations: only single mutations, tested on their own rather than in combination with others |
| species | 95 | 57: only species for which an accurate reference protein exists; a species without one is left out, because a poor reference could give spurious calls |
An entry can carry evidence for resistance, against it, or both (Evidence levels and verdicts).
Only single mutations in the target proteins are screened
The AMR screen does not detect gene duplication or loss, gene disruption, translocation, aneuploidy, combinations of mutations, or any change outside the protein, such as an insertion in a promoter that raises the expression of the target.
Evidence levels and verdicts¶
The verdicts rest on the evidence levels of FungAMR. FungAMR gives each drug of a change two
confidence scores, which ChroQueTas writes as Drug(positive/negative) (Bédard et al. 2025;
ChroQueTas wiki, "Confidence score for antimicrobial resistance"):
| Score | Meaning |
|---|---|
| positive, 1 to 8 | evidence that the change causes resistance to that drug; 1 is the strongest, 8 the weakest |
| negative, -1 to -8 | evidence, from the same kinds of study, that it does not: the change was reported in susceptible strains; -1 is the strongest |
NA |
no report of that kind |
When several studies report a change, each score is the strongest of its kind.
The level names the kind of study. FunFlux writes it in words after the number, and the same words serve both signs. After a positive level the study found resistance, and after a negative one it found none.
| Level | What the positive level means (ChroQueTas wiki) | Words in the tables |
|---|---|---|
| 1 | the change was made in a susceptible strain of the same species, and its effect on resistance was measured | the change made in the species and measured |
| 2 | the change was made in the same gene expressed in another species, possibly at another level of expression, and its effect measured | the change made in the gene, expressed in another species |
| 3 | its effect was measured in a bulk competition assay, such as deep mutational scanning | bulk competition assay |
| 4 | it arose in experimental evolution, often enough in independent replicates to suggest that it causes resistance | experimental evolution |
| 5 | deleting the gene causes resistance | gene deletion |
| 6 | overexpressing or duplicating the gene causes resistance | gene overexpression or duplication |
| 7 | a significant association with resistance in a population: GWAS, QTL mapping or classical genetics | population association study |
| 8 | found in a resistant natural strain, such as a clinical isolate, without further validation | natural isolates, not validated further |
A negative level is the same kind of study with the opposite result. -8, for example, records a
natural isolate with the change that was not resistant, and -3 a deep mutational scan in which
the change gave no resistance.
A FungAMR mutation is not always a resistance mutation¶
ChroQueTas calls every change that FungAMR lists a FungAMR mutation, whatever its scores, and
more than half of the changes in its database carry evidence against resistance only. In
ChroQueTas 1.0.1 the evidence splits as follows:
| Evidence | Negative only | Positive only | Both | No drug | All |
|---|---|---|---|---|---|
| rows of the database (changes), all drugs of the row together | 4,655 | 2,943 | 686 | 1 | 8,285 |
| drugs of those rows, one by one | 19,397 | 8,868 | 108 | 28,373 |
Most of the negative-only rows, 4,596, belong to Candida albicans Cyp51 and Saccharomyces
cerevisiae Fcy1, and all but five of those come from deep mutational scans (level -3).
FunFlux therefore sorts the drugs of every FungAMR mutation by their evidence. Candida albicans
Cyp51 A61V, for example, reads
Clotrimazole(3/NA),Fluconazole(NA/-2),Isavuconazole(3/NA),Itraconazole(3/-2),Posaconazole(2/NA),Voriconazole(3/-2),
and its drugs are sorted like this:
| A drug with | Goes to | In A61V |
|---|---|---|
| a positive level only | resistance_to |
clotrimazole, isavuconazole, posaconazole |
| a negative level only | no_resistance_to |
fluconazole |
| both | both columns, each with its own level: a conflicting drug | itraconazole, voriconazole |
Each position then gets a verdict. For a FungAMR mutation, it is the first of its four rows below that applies:
| Call | Verdict | When |
|---|---|---|
FungAMR mutation |
resistance |
at least one drug has a positive level only |
FungAMR mutation |
conflicting |
no drug has a positive level only, and at least one has both |
FungAMR mutation |
no resistance |
every drug named has a negative level only |
FungAMR mutation |
unknown |
no drug is named |
new mutation |
unknown |
a change FungAMR does not list, at a position where it lists others |
no mutation |
wild type |
the reference amino acid |
no alignment, position not found |
not compared |
the position could not be compared |
A61V is resistance, although two of its drugs conflict. A change is conflicting only when no
drug has resistance evidence alone, as for Aspergillus niger Cyp51 Q228R, Voriconazole(8/-8).
FunFlux does not weigh one kind of evidence against the other, and both levels stay in the tables.
The 8,285 rows of the database get these verdicts:
| Verdict | Rows |
|---|---|
resistance |
3,610, of which 42 have a conflicting drug as well |
no resistance |
4,655 |
conflicting |
19 |
unknown |
1: the Cryptococcus deuterogattii Uxs1 insertion, which names no drug; ChroQueTas does not compare it (FungAMR and ChroQueTas) |
A target takes the first of these verdicts found among its compared positions, all copies
together: resistance, conflicting, unknown, no resistance, wild type. A change of
unknown effect ranks above no resistance and wild type, because it needs a look. A target that
is not evaluated or not found, and a sample that is not screened, get -, and the status says
why.
Botrytis cinerea β-tubulin E198V, for example, reads
Benzimidazole(8/NA),Carbendazim(7/NA),Diethofencarb(8/NA),Iprodione(NA/-8) in the database. A
genome with valine at position 198 gets these cells in amr_positions.tsv:
| Column | Cell |
|---|---|
verdict |
resistance |
resistance_to |
Benzimidazole (8: natural isolates, not validated further); Carbendazim (7: population association study); Diethofencarb (8: natural isolates, not validated further) |
no_resistance_to |
Iprodione (-8: natural isolates, not validated further) |
That is evidence that E198V causes resistance to three drugs, and reports of natural isolates with E198V that were not resistant to iprodione.
What a level does not say¶
A positive level says how good the evidence is that a change causes resistance, and a negative level how good the evidence is that it does not. Neither is a measurement of the isolate. Whether this strain is resistant, and how strongly, takes a susceptibility test. The FungAMR authors put it the same way: a confidence score is not a probability of treatment failure, but reflects the evidence that a change confers resistance under laboratory conditions (Bédard et al. 2025).
The verdict no resistance says only what the reports found
Evidence of no resistance is the harder kind to judge. A susceptible result can come from an
assay that was not sensitive enough, and such assays rarely test a resistant control
alongside. The FungAMR authors kept these reports in the database but left them out of their
own analyses for that reason (Bédard et al. 2025). The verdict no resistance therefore means
that the reports found no resistance to the drugs named. It does not show that the change
never matters for resistance, and it says nothing about drugs that were not tested.
Levels 7 and 8 rest on association, not on a test of the change itself. The change was found in
resistant isolates, or linked to resistance in a population. Field isolates are often resistant
to several classes of fungicides at once. A drug at level 7 or 8 that acts on another target can
therefore record a resistance found together with the change rather than caused by it. In
Botrytis cinerea, for example, iprodione (level 8) is listed for β-tubulin E198A, and
carbendazim (level 7) and boscalid (level 8) for cytochrome b G143A. Such a drug counts towards
the verdict resistance like any other.
The species¶
Each sample is screened against the database folder of its species. The species is column 2 of
the annotation parameter table
(files.annotation_params), the name funannotate uses as well. The database names its species
folders Genus_species. FunFlux matches the name to a folder, ignoring case, and takes the first
of three tries that succeeds:
- The whole name, with spaces turned into underscores and
f. sp.(orf.sp.) removed:Blumeria graminis f. sp. hordeigivesBlumeria_graminis_hordei. - The first two words:
Zymoseptoria tritici IPO323givesZymoseptoria_tritici. -
A short list of other names, older or newer, of species whose database folder carries a different name. Each pair is one taxon in NCBI Taxonomy:
Name in the annotation table Database folder Candida glabrata Nakaseomyces_glabratusCandida auris Candidozyma_aurisParastagonospora nodorum Phaeosphaeria_nodorumPseudocercospora fijiensis Mycosphaerella_fijiensisFulvia fulva, Cladosporium fulvum Passalora_fulvaOculimacula yallundae Tapesia_yallundaeOculimacula acuformis Tapesia_acuformisIssatchenkia orientalis, Candida krusei Pichia_kudriavzeviiCandida lusitaniae Clavispora_lusitaniaeLodderomyces metapsilosis Candida_metapsilosisLodderomyces orthopsilosis Candida_orthopsilosisPyricularia grisea Magnaporthe_griseaBlumeria hordei Blumeria_graminis_hordei
Only renamings of one species are listed. Pyricularia oryzae, the rice blast fungus, is not
matched to Magnaporthe_grisea, because NCBI Taxonomy keeps them as two species (Magnaporthe
grisea is Pyricularia grisea).
A name that matches no folder leaves the sample not screened, and the run goes on.
amr_summary.tsv gets one row with status not screened, and a NOTE in the log and on the
console names the database folders of the same genus, if there are any.
00.resources/chroquetas/species.txt lists the 57 folders.
A species outside the database is not screened against a relative
FunFlux never screens a sample against another species of its genus, because the positions of
a resistance mutation are positions in the reference protein of one species. For a species
outside the database, FungAMR itself may still list mutations of its targets. Search it in
CARD (https://card.mcmaster.ca/fungamrhome, the address ChroQueTas gives) and compare the
positions by hand with the predicted proteins in
04.annotation/{sample}/funannotate/annotate_results/.
Two runs: the nuclear and the mitochondrial genome¶
ChroQueTas translates the genome with one genetic code per run. The nuclear and the mitochondrial genes of one fungus use different codes, so one run cannot translate both correctly. These are the codes that matter here (NCBI, The Genetic Codes):
| NCBI table | Used by | Differs from the standard code in |
|---|---|---|
| 1, the standard code | the nuclear genes of most fungi | |
| 12 | the nuclear genes of the yeasts of the CTG clade; ChroQueTas chooses 12 for its 8 species of that clade and 1 for the others | CTG read as serine |
| 4, the mold mitochondrial code | fungal mitochondria | TGA codes for tryptophan instead of a stop |
| 3, the yeast mitochondrial code | the mitochondria of Saccharomyces cerevisiae and Candida glabrata | TGA read as tryptophan too, ATA as methionine and CTN as threonine |
Cytochrome b is the one target of the database encoded in the mitochondrial genome, and it is
held for 15 species. Translated with the nuclear code, its gene gives a poorer protein, and
the example below shows how much. Rule amr_chroquetas therefore runs
ChroQueTas twice, each run in its own folder:
| Run | Input | Genetic code | Results read from it |
|---|---|---|---|
nuclear, chroquetas/nuclear/ |
02.assembly/{sample}/contigs_final.fasta |
chosen by ChroQueTas for the species | every target except Cytochrome_b |
mitochondrial, chroquetas/mitochondrial/ |
contigs_mitochondrial.fasta when the contamination and mitochondrion screen splits the mitochondrion off (parameters.mitochondria.mode: separate_confirmed, the default); otherwise contigs_final.fasta |
parameters.amr.mito_genetic_code; auto: 3 for the four Saccharomycetaceae of the database (Saccharomyces cerevisiae, S. paradoxus, Nakaseomyces glabratus, Kluyveromyces marxianus), 4 for every other species, as NCBI Taxonomy records them |
Cytochrome_b |
A target is read only from the run of its own compartment, and a target the other run also extracts, translated with the wrong code, is ignored. The mitochondrial run reads the confirmed mitochondrion when the contamination and mitochondrion screen splits it off, and the whole assembly when nothing is split off. Whether the mitochondrial run happens, and what it reads, in each case:
| Case | Mitochondrial run | Cytochrome_b |
|---|---|---|
the species' database folder does not hold Cytochrome_b |
none | not a target of the species |
| the contamination and mitochondrion screen splits the mitochondrion off and confirmed a contig | on contigs_mitochondrial.fasta |
read from this run |
| the contamination and mitochondrion screen splits the mitochondrion off but confirmed no contig | none: contigs_mitochondrial.fasta is empty |
not evaluated (no mitochondrial contig) |
contigs mode without the contamination and mitochondrion screen, or any mode with parameters.mitochondria.mode off or report: nothing is split off |
on contigs_final.fasta, among whose contigs the mitochondrion lies if the assembly holds it |
read from this run |
Statuses¶
The status tells whether the positions of a target could be compared. Every target of the species
gets one in amr_summary.tsv:
| Status | Meaning |
|---|---|
evaluated |
at least one copy of the protein passed step 2 and had at least one FungAMR position compared; amr_positions.tsv lists them |
not evaluated |
no position was compared: the protein was found but has insertions against the reference; or it was found, but every FungAMR position lies in a gap of the found protein, at a codon that could not be read, or outside the protein (no alignment, position not found); or ChroQueTas skipped it; or, for Cytochrome_b, there was no mitochondrial contig to search. The note says which |
not found |
no copy passed step 2: miniprot found no alignment of the reference protein in the genome (ChroQueTas's log says We could not extract <target> from the genome), or what it found does not pass the filter of step 2 (more than 90 % identity over more than 75 % of the reference). The gene is absent from the assembly, or too different from the reference |
not screened |
the species is not in the database (The species); one row for the sample, target - |
For a copy whose positions it does not compare, ChroQueTas writes
WARNING: genome contains insertions for <target> and thus AMR are not calculated instead of
the positions. The line has two causes, which FunFlux reports differently:
- Insertions. The extracted protein has residues the reference lacks. FunFlux counts the copy
as found, with its positions not compared:
not evaluated. - A copy below the thresholds of step 2. ChroQueTas then keeps no
.blastp.txtfile for it. FunFlux counts the copy as not found, and a target with no other copy isnot found.
A common cause of insertions is an intron the protein aligner could not place, such as an intron of a mitochondrial cytochrome b gene (the example below).
ChroQueTas 1.0.1 also skips a target silently in one case. When a target is not found, it removes
the name from its list of targets by a text replacement that also cuts that name out of longer
names. Vma16 is therefore lost when Vma1 was not found. Such a target is not evaluated,
with a note that says so.
ChroQueTas numbers the copies of a target it finds as fragment 1, 2, and so on. A second copy can
be a gene duplication, a gene split across two contigs of a fragmented assembly, or aneuploidy
(ChroQueTas README). Each copy is compared on its own, and the summary marks the changes of a
later copy, for example E198A (copy 2) (resistance).
The tables¶
amr_summary.tsv and amr_positions.tsv share a few conventions. In both tables - marks an
empty cell. Drug names are FungAMR's, with underscores for spaces. A few contain a comma, such as
Fludioxonil,_Iprodione (one entry, both drugs together), so the drugs of a FunFlux cell are
separated by ;. Changes are written as reference amino acid, position and found amino acid,
as in E198A.
05.amr/{sample}/amr_summary.tsv has one row per target of the species:
| Column | Content |
|---|---|
sample |
the sample name |
species |
the database folder the species was matched to, for example Botrytis_cinerea; for a sample that is not screened, column 2 of the annotation table as written there |
target |
the target protein as the database names it, for example Beta-tubulin; - for a sample that is not screened |
compartment |
nuclear or mitochondrial: the run the result comes from; - for a sample that is not screened |
status |
evaluated, not evaluated, not found or not screened (Statuses) |
positions_checked |
the FungAMR positions compared, over all compared copies; 0 when none |
verdict |
the first of resistance, conflicting, unknown, no resistance, wild type among the verdicts of the target's compared positions, all copies together (Verdicts); - for a target that is not evaluated or not found, and for a sample that is not screened |
fungamr_mutations |
the FungAMR mutations, each with its verdict, separated by ,: E198A (resistance); E198A (copy 2) (resistance) for a change in a second copy |
new_mutations |
the other changes at FungAMR positions, separated by ,: F200L, F200L (copy 2). Their verdict is unknown |
resistance_to |
the drugs with a positive level, from all FungAMR mutations of the target, each with the change and the level: Carbendazim (E198A, 7); Iprodione (E198A, 8). A drug named by two changes appears once for each; a change found on two copies names its drugs once |
no_resistance_to |
the drugs with a negative level, written the same way: Iprodione (E198V, -8) |
note |
for an evaluated target, the copies and positions that were not compared, and a target found more than once; otherwise why the target was not evaluated or not found, or why the sample was not screened |
05.amr/{sample}/amr_positions.tsv has one row per FungAMR position of every copy that
ChroQueTas read position by position, including the positions it could not compare (a copy with
insertions has no rows):
| Column | Content |
|---|---|
sample, target, compartment |
as in the summary |
fragment |
the copy of the target: 1 for the first |
position |
the position in the reference protein |
reference_aa, found_aa |
the amino acid of the reference and of this genome |
call |
FungAMR mutation, new mutation, no mutation, no alignment or position not found |
verdict |
for a FungAMR mutation resistance, conflicting, no resistance or unknown; unknown for a new mutation; wild type for no mutation; not compared for the last two calls (Verdicts) |
resistance_to |
for a FungAMR mutation, the drugs with a positive level, each with the level and its words: Carbendazim (7: population association study); Iprodione (8: natural isolates, not validated further) |
no_resistance_to |
for a FungAMR mutation, the drugs with a negative level, the same way: Iprodione (-8: natural isolates, not validated further) |
known_resistance_changes |
for a compared position, the changes the database lists there with a positive level for at least one drug, in the order of the database file: E198A, E198G, E198K, E198V. On a wild type row, the changes that would matter there; on an unknown row, the changes known at that position |
fungamr_drugs |
ChroQueTas's text, unchanged: Carbendazim(7/NA),Iprodione(8/NA); - where it names no drug (NA, or Unknown for a new mutation). Its drugs are separated by commas, but a few names hold a comma (Fludioxonil,_Iprodione) or brackets (Azole(s)): split it at each comma that follows a closing bracket (),), not at every comma |
05.amr/{sample}/amr_summary_mqc.tsv is the same summary with header lines for MultiQC. They
hold the section name and a description that names FungAMR, says what the verdicts mean and how
to read the evidence levels. The rows of the file are named {sample}: {target}, so the tables of
all samples merge into one table in the section AMR mutations (ChroQueTas) of
06.report/multiqc_report.html (Report).
The log logs/amr_chroquetas_{sample}.log holds ChroQueTas's messages of both runs. It ends with
one line, [FunFlux] amr_chroquetas <sample>: ..., which the rule copies to the Snakemake
console. The line names the database folder used, the targets evaluated, not evaluated and not
found, and the targets per verdict, as in
verdicts: 1 resistance (Beta-tubulin), 2 wild type (Bos1, OS1). It then gives each FungAMR
mutation found, with its verdict and the levels of its drugs, as in
Beta-tubulin E198A (resistance: Carbendazim 7, Iprodione 8). A change with evidence against
resistance only reads (no resistance: Iprodione -8). The NOTE of a sample that is not screened
reaches the console the same way.
ChroQueTas's own files¶
05.amr/{sample}/chroquetas/nuclear/ and mitochondrial/ hold ChroQueTas's output as it wrote
it, the files to read when a call needs checking. FunFlux hands the genome to ChroQueTas as
genome.fasta in the nuclear run and as mito.fasta in the mitochondrial run, and ChroQueTas
names its files after it (<name> below):
| File | Content |
|---|---|
<name>.ChroQueTaS.AMR_summary.txt |
every FungAMR and new mutation of the run: Protein, Fragment, Position_reference, AA_reference, AA_query, Fungicide_resistance; or the single line No AMR mutations found in <name> |
<name>.ChroQueTaS.AMR_stats.txt |
per target, the number of FungAMR and new mutations; absent when there is none |
<name>.ChroQueTaS.<target>.<fragment>.tsv |
every FungAMR position of that copy: Position, Reference, Query, Result, Fungicides; or the single WARNING line of a protein whose positions were not compared |
<name>_<target>.<fragment>.faa |
the protein extracted from the genome |
<name>_<target>.<fragment>.paf |
miniprot's alignment of the reference protein to the genome; fields 6 to 9 give the contig and the coordinates |
<name>_<target>.<fragment>.blastp.txt |
the BLASTP comparison with the reference: identity, coverage, lengths, gaps; only for a protein that passed the thresholds |
tmp/ |
ChroQueTas's working files |
A target miniprot could not extract has no file at all, and a run that was not made has no
folder. mitochondrial/ exists only when the species has cytochrome b and its mitochondrial run
was made (Two runs).
Files added to chroquetas/ are lost when amr_chroquetas runs again
Snakemake deletes the whole chroquetas/ folder before amr_chroquetas runs again, so each
run starts clean, and files you add there are lost.
How the step runs¶
Two rules make the tables. Both run only with parameters.amr.chroquetas: on.
| Rule | Runs | Does | Writes |
|---|---|---|---|
chroquetas_db |
once per output folder | downloads bin/ChroQueTas.sh, FungAMR_db/db-v20250811.tgz and LICENSE from links.chroquetas_link, checks the script and the archive against their SHA-256, unpacks the archive (Reference databases); conda environment download for curl and tar, and sha256sum of the machine |
00.resources/chroquetas/ |
amr_chroquetas |
once per sample, as soon as contigs_final.fasta exists (and contigs_mitochondrial.fasta where it is read) |
a FunFlux script matches the species to a database folder, runs ChroQueTas once or twice (Two runs) and writes the three tables; conda environment chroquetas; up to 4 threads; seconds |
05.amr/{sample}/ |
The FunFlux script runs with the Python 3.12 of the chroquetas environment. That environment holds the tools ChroQueTas calls, at the versions its
authors pin in their own conda package: BLAST+ 2.16.0, EMBOSS 6.6.0, MAFFT 7.525, miniprot 0.14
and SeqKit 2.1.0. ChroQueTas itself is a bash script and is not in the environment. The FunFlux
script runs it as bash ChroQueTas.sh ... from 00.resources/chroquetas/. ChroQueTas takes
bash, GNU grep (it uses grep -P), sed and basic commands such as cut, paste and tr
from the machine
(Commands outside the conda environments).
A failed ChroQueTas run stops the job with [FunFlux] amr_chroquetas: error: ... and the last
20 lines of ChroQueTas's log (Troubleshooting). A
run in which no target could be extracted is not a failure, and every target is then not found.
The AMR screen reads only the assembly, so it runs early, beside the annotation, without waiting for it.
Licence, and why the step is off¶
ChroQueTas and the FungAMR database that comes with it are licensed CC BY-NC-ND 4.0: use for non-commercial purposes only, with credit to the authors, and no distribution of modified copies. ChroQueTas is not packaged on bioconda or conda-forge, and its authors publish it on their own conda channel. FunFlux therefore handles both as follows.
- It ships neither the script nor the database, and never changes them.
- It downloads both at run time, unchanged, from one pinned commit of the authors' GitHub repository, and checks them against SHA-256 checksums before anything runs them.
- It runs the script with the tools it needs from a pinned environment of bioconda and conda-forge packages.
- It keeps the step off by default.
Switching the AMR screen on accepts a non-commercial licence
Setting parameters.amr.chroquetas: on is your acceptance of that licence, as naming a
SignalP 6 archive is for DTU's. For commercial use, ask the authors.
Every dry run prints whether the AMR screen is on:
AMR screen: ChroQueTas on (licence CC BY-NC-ND 4.0: non-commercial use). or AMR screen: off.
00.resources/chroquetas/ holds the script, the database and their licence text. The licence
allows passing them on unchanged, for non-commercial purposes and with credit
(Licensing).
Settings¶
These are the settings of the AMR screen, with their defaults:
parameters:
amr:
chroquetas: off
mito_genetic_code: auto
chroquetas_script_sha256: d8961a0d311be57d4a9939bd9e4d90dbc796589b3298dd1835359ed776abfce3
chroquetas_db_sha256: 6f89ecb3117110aad85b8b6ca7b8a3d3715cb5984b6cb75450a6cda5633d16e7
links:
chroquetas_link: https://raw.githubusercontent.com/nmquijada/ChroQueTas/1aad051d6ad48f5e403636699d19095e655764f7
| Key | Default | Allowed values | What it does |
|---|---|---|---|
chroquetas |
off |
off (also empty, false, no, 0, none, null), on (also true, yes, 1) |
on: every sample is screened, the report gets the AMR table, and links.chroquetas_link is required. off: none of this, and the link is not read. |
mito_genetic_code |
auto |
auto (any case; an empty value too), or the number of an NCBI genetic code: 1-6, 9-16 or 21-33 |
The genetic code of the mitochondrial run (Two runs). A number is used for every sample of the run. |
chroquetas_script_sha256 |
the checksum of bin/ChroQueTas.sh at the template address |
64 hexadecimal characters | The SHA-256 the downloaded script must have. |
chroquetas_db_sha256 |
the checksum of FungAMR_db/db-v20250811.tgz at the template address |
64 hexadecimal characters | The SHA-256 the downloaded database archive must have, checked before it is unpacked. |
links.chroquetas_link |
template URL | the raw-file address of one commit of the ChroQueTas repository, without a trailing file name | Where chroquetas_db downloads the three files. Required when chroquetas is on. |
The address names one commit, so the files behind it do not change. To move to a newer version of
ChroQueTas, change the link and both checksums together
(Reference databases). FunFlux reads the files
ChroQueTas 1.0.1 writes, and the position lists of its database (<target>.txt, for the known
resistance changes). A version that writes them differently stops amr_chroquetas with an error,
and needs a newer FunFlux. The keys are checked before any job starts, and a value outside the
list stops the run with a [FunFlux] parameters.amr.<key>: ... message
(Troubleshooting).
The table lists what each change runs again.
| Change | Runs again |
|---|---|
mito_genetic_code |
amr_chroquetas of every sample, and the report |
| column 2 of the annotation table, the species | amr_chroquetas of that sample; the species is also funannotate's, so augustus_model_check, funannotate_prediction and everything after them for that sample too |
links.chroquetas_link or a checksum |
chroquetas_db, then amr_chroquetas of every sample |
a new contigs_final.fasta or contigs_mitochondrial.fasta |
amr_chroquetas of that sample |
chroquetas: on |
adds the two rules |
chroquetas: off |
the report, without the AMR table; 05.amr/ stays on disk |
A change to an AMR screen setting runs only the AMR screen and the report again. Snakemake's reasons for running a step again are listed under What makes Snakemake re-run a rule.
A change of species also runs the annotation of that sample again
The species in column 2 of the annotation table is funannotate's as well, so changing it runs the gene prediction and the annotation of that sample again, not only its AMR screen.
A worked example: Botrytis cinerea B05.10¶
The genome of the validation runs, the public Botrytis cinerea B05.10,
was run in hybrid mode. Public ONT reads of the strain were assembled with hifiasm, and
Polypolish corrected the assembly with the strain's public Illumina pairs. contigs_final.fasta holds 34 contigs, and contigs_mitochondrial.fasta
the one mitochondrial contig. Column 2 of the annotation table reads Botrytis cinerea, which
matches the folder Botrytis_cinerea at the first try. The folder holds three proteins under four
target names. Beta-tubulin, and Bos1 and OS1, two entries of one histidine kinase, are in the
nucleus, and Cytochrome_b is in the mitochondrion.
The nuclear run, with the standard code ChroQueTas chose, took 4.2 s and about 0.5 GB of memory. The
mitochondrial run, with code 4 (auto for this species), took 0.9 s. amr_summary.tsv reads, in
part:
target |
compartment |
status |
positions_checked |
verdict |
fungamr_mutations |
resistance_to |
no_resistance_to |
|---|---|---|---|---|---|---|---|
Beta-tubulin |
nuclear | evaluated |
3 | resistance |
E198A (resistance) |
Carbendazim (E198A, 7); Iprodione (E198A, 8) |
- |
Bos1 |
nuclear | evaluated |
11 | wild type |
- |
- |
- |
Cytochrome_b |
mitochondrial | not evaluated |
0 | - |
- |
- |
- |
OS1 |
nuclear | evaluated |
2 | wild type |
- |
- |
- |
The β-tubulin rows of amr_positions.tsv read, in part:
position |
reference_aa |
found_aa |
call |
verdict |
resistance_to |
known_resistance_changes |
|---|---|---|---|---|---|---|
| 198 | E | A | FungAMR mutation |
resistance |
Carbendazim (7: population association study); Iprodione (8: natural isolates, not validated further) |
E198A, E198G, E198K, E198V |
| 200 | F | F | no mutation |
wild type |
- |
F200Y |
| 351 | T | T | no mutation |
wild type |
- |
T351I |
B05.10 carries β-tubulin E198A, verdict resistance. Its histidine kinase (Bos1, OS1) is wild
type, and cytochrome b is not evaluated, the expected outcome for this strain, as explained
below.
- β-tubulin E198A. The extracted protein matches the FungAMR reference (UniProt P53373) at
99.8 % identity over its whole length, and position 198 is alanine where the reference has
glutamate. FungAMR holds evidence that E198A causes resistance to carbendazim at level 7 (a
population-level association) and to iprodione at level 8, and none against it, so the verdict
is
resistance. The protein of the B05.10 reference annotation, BctubA (RefSeq XP_024546500.1), also has alanine at 198, so the call is the genotype of the strain, not an error of the assembly. The iprodione entry is of the kind described under What a level does not say: iprodione acts on the osmotic stress pathway, not on tubulin. - The known resistance changes. E198A is one of four changes at position 198 with evidence of resistance. Positions 200 and 351 carry the wild type, and their rows name the change that would matter there: F200Y (carbendazim, level 7, and diethofencarb, level 8) and T351I (zoxamide, level 8).
- Bos1 and OS1, two entries of the same protein with 11 and 2 positions (12 distinct, as 373
is in both), were found at 99.9 % identity. They have the reference amino acid at every FungAMR
position, so their verdict is
wild type. The nuclear run did not extract cytochrome b, as expected, because the mitochondrion is not incontigs_final.fasta. - Cytochrome b. The mitochondrial run extracted a protein of 398 amino acids against the
reference's 391, at 96.2 % identity. The protein has 7 residues the reference lacks, so
ChroQueTas compared no position. The status is
not evaluated, and the verdict-. The same run with the standard code (table 1) did worse, with 91.2 % identity, 17 gaps, and five tryptophans, encoded by TGA, read as stops. That is why the mitochondrial run gets its own code.
Cytochrome b has insertions because of its introns. In B05.10 the gene has four introns, and two of them enclose a short exon of 12 codons, codons 132 to 143. One intron, of 1,366 bp, ends just before codon 132, and the other, of 1,205 bp, starts right after codon 143. Codon 142 is TGA, tryptophan in code 4, and codon 143 is GGT, glycine, the wild type. The next exon starts with codon 144.
Neither intron starts with GT and ends with AG, as most introns do: the first reads TA...TG,
the second TT...TG. Because miniprot penalises intron ends other than GT-AG (Li 2023), it ended
both introns too early and translated their last nucleotides as protein. That gave 3 extra
residues around codon 131, and 4 at codons 142 and 143, where the protein it built reads MMINAL
instead of WG. Together they make the 7 residues the reference lacks.
The intron matters beyond the alignment. Banno et al. (2009) found two forms of the B. cinerea
cytochrome b gene among field isolates: one with three introns, and one with an additional intron
between codons 143 and 144, the form B05.10 carries. All 88 isolates with that intron were
sensitive to the QoI fungicide azoxystrobin. The authors suggested that G143A, the change known to
make plant pathogens resistant to QoI fungicides, would keep the intron from splicing itself out.
Grasso et al. (2006) found an intron at the same place in the rusts and in Alternaria solani, in
which G143A has never been reported. For a strain like B05.10, a not evaluated cytochrome b is
therefore the expected outcome, and G143A is not expected.
Limits¶
- Species. 57 species have a database folder. Any other species is not screened, and FunFlux does not fall back to a related species. The species says where to look instead.
- Single mutations only. A combination of mutations that causes resistance only together, gene duplication or loss, aneuploidy and changes outside the protein are not detected (FungAMR and ChroQueTas).
- Introns that miniprot cannot place. A gene with an intron whose ends are not GT...AG, as in
the mitochondrial cytochrome b of B05.10, can come out with extra residues and stay
not evaluated. The.faathen holds wrong residues around the misplaced junction (in B05.10,MMINALwhere codons 142 and 143 should readWG), so do not read the position from it. Align the reference protein to the contig with the right genetic code instead, and read the position from the hit that covers it, since the hits follow the exons. BLAST+ is in thechroquetasenvironment:tblastn -query 00.resources/chroquetas/FungAMR_db/<species>/Cytochrome_b.faa -subject 02.assembly/{sample}/contigs_mitochondrial.fasta -db_gencode 4 -outfmt '6 qstart qend sstart send pident qseq sseq'. In B05.10 the hit for codons 132 to 143 readsYVLPYGQMSLWG, glycine at 143. The.paf(fields 6 to 9) shows which contig and region miniprot used. - Nonsense mutations. A premature stop codon at a FungAMR position comes out as
no alignment, not as a FungAMR mutation, even where FungAMR lists the stop. FungAMR lists such a stop, writtenX, in 242 rows, most of them in Saccharomyces cerevisiaeFcy1andFur1, for 5-fluorocytosine. The.faaof the copy shows the stop as*. - An unconfirmed mitochondrion. When the contamination and mitochondrion screen splits the
mitochondrion off but confirms no contig, cytochrome b is
not evaluated, even if the mitochondrion sits unconfirmed among the contigs ofcontigs_final.fasta.mitochondria/mitochondrial_screen.tsvsays why no contig was confirmed (Mitochondria). - The genetic code is one per run.
mito_genetic_codesets one code for the mitochondrial run of every sample, so a batch of species with different mitochondrial codes needsauto. - The assembly. A target split across two contigs, or with a sequencing error at a FungAMR
position, gives a second copy, a lower identity or a false call. Read the
.pafand.blastp.txtfiles of a surprising call. A copy cut at a contig end can still pass the filter of step 2 while it lacks up to a quarter of the protein. The positions it lacks areno alignment, also where FungAMR lists a deletion, and a codon withNbases isposition not found(FungAMR and ChroQueTas). Neither is a finding about the strain. - Paths without spaces. ChroQueTas uses its file paths without quotes, so a space in the path
of the output folder or of the database breaks it. The job then stops with
[FunFlux] amr_chroquetas: error: ...before ChroQueTas starts. - Evidence, not phenotype. A verdict sums up what FungAMR records about a change (Verdicts). It is not a susceptibility test, and does not replace one for a decision on a treatment or a spray programme. ChroQueTas itself ends each completed run with the reminder that its mutations must be weighed by their confidence scores.
How to cite¶
Cite FungAMR and ChroQueTas through Bédard et al. (2025), as the ChroQueTas authors ask, together with the ChroQueTas repository and version (Quijada et al., 1.0.1). Also cite the tools ChroQueTas runs: miniprot (Li 2023), BLAST+ (Camacho et al. 2009), MAFFT (Katoh and Standley 2013), SeqKit (Shen et al. 2016) and EMBOSS (Rice et al. 2000). The full references are on Citation and references.
Output files¶
The AMR screen writes these files, and all of them are kept after the run.
| Path | Content | Written by |
|---|---|---|
00.resources/chroquetas/ChroQueTas.sh |
the ChroQueTas script, unchanged | chroquetas_db |
00.resources/chroquetas/FungAMR_db/ |
the unpacked database: one folder per species | chroquetas_db |
00.resources/chroquetas/species.txt |
the 57 database folders | chroquetas_db |
00.resources/chroquetas/PROVENANCE.txt |
source addresses, download date, checksums, species count, licence | chroquetas_db |
00.resources/chroquetas/LICENSE |
the licence text of ChroQueTas and its database | chroquetas_db |
05.amr/{sample}/amr_summary.tsv |
one row per target (The tables) | amr_chroquetas |
05.amr/{sample}/amr_positions.tsv |
one row per FungAMR position | amr_chroquetas |
05.amr/{sample}/amr_summary_mqc.tsv |
the summary for the MultiQC report | amr_chroquetas |
05.amr/{sample}/chroquetas/nuclear/, mitochondrial/ |
ChroQueTas's own files (ChroQueTas's own files) | amr_chroquetas |
logs/chroquetas_db.log |
the download, the two checksums, the unpacking | chroquetas_db |
logs/amr_chroquetas_{sample}.log |
ChroQueTas's messages, the one-line summary and the NOTE when there is one | amr_chroquetas |
The full output tree is on Output files.