Package: esmecata
EsMeCaTa:EstimatingMetabolicCapabilties fromTaxonomic affiliationsEsMeCaTa is a method to estimate metabolic capabilities from a taxonomic affiliation (for example with 16S rRNA sequencing or using a specific taxon name) by using the UniProt Proteomes database. This can be used to (1) estimate protein sequences and functions for an organism with no sequenced genomes, (2) explore the protein diveristy of a taxon.Table of contentsEsMeCaTa:EstimatingMetabolicCapabilties fromTaxonomic affiliationsTable of contentsRequirementsInstallationConda and pipSingularityInputEsMeCaTa commandsEsMeCaTa functionsesmecata check: Estimate knowledge associated with taxonomic affiliationesmecata proteomes: Retrieve proteomes associated with taxonomic affiliationesmecata clustering: Proteins clusteringesmecata annotation: Retrieve protein annotations with eggnog-mapperesmecata annotation_uniprot: Retrieve protein annotations with UniProtesmecata workflow: Consecutive runs of the three steps by using eggnog-mapper for the annotationesmecata workflow_uniprot: Consecutive runs of the three stepsEsMeCaTa outputsEsMeCaTa proteomesEsMeCaTa clusteringEsMeCaTa annotationEsMeCaTa annotation_uniprotEsMeCaTa workflowRequirementsEsMeCaTa needs the following python packages:biopython: To create fasta files and used by the option--annotation-filesto index UniProt flat files.pandas: To read the input files.requests: For the REST queries on Uniprot.ete3: To analyse the taxonomic affiliation and extract taxon_id, also used to deal with taxon associated with more than 100 proteomes.SPARQLwrapper: Optionally, you can use SPARQL queries instead of REST queries. This can be done either with theUniprot SPARQL Endpoint(with the option--sparql uniprot) or with a Uniprot SPARQL Endpoint that you created locally (it is supposed to work but not tested, only SPARQL queries on the Uniprot SPARQL endpoint have been tested).Warning: using SPARQL queries will lead to minor differences in functional annotations and metabolic reactions due to how the results are retrieved with REST query or SPARQL query.Also esmecata requires mmseqs2 for protein clustering withesmecata workfloworesmecata clustering:mmseqs2: To cluster proteins. Test have been made on version MMseqs2 Release 13-45111., especially with the version of the commitf349118312919c4fcc448f4595ca3b3a387018e2. But EsMeCaTa should be compatible with more recent version.And eggnog-mapper for the annotation of the protein withesmecata workfloworesmecata annotation:eggnog-mapper: to annotate protein clusters.
It needs a path to the eggnog database. Also according to the option used, it needs around 60 Gb of RAM.
So it is recommended to use it in a cluster.If you use the option--bioservices, EsMeCaTa will also require this package:bioservices: To query Uniprot instead of using the query functions of EsMeCaTa (more robust overtime).InstallationConda and pipThe easiest way to install the dependencies of EsMeCaTa is by using conda:conda install mmseqs2 pandas sparqlwrapper requests biopython ete3 -c conda-forge -c biocondaA conda package for esmecata will be created in the future.EsMeCata can be installed with pip command:pip install esmecataIt can also be installed using esmecata github directory:git clone https://github.com/ArnaudBelcour/esmecata.gitcd esmecatapip install -e . --config-settings editable_mode=compatSingularityA Singularity recipe for EsMeCaTa is availablehere.The image can be created with the following command:sudo singularity build  esmecata.sif SingularityAnd EsMeCaTa can be used with:singularity exec esmecata.sif esmecata workflow -i buchnera_workflow.tsv -o outputInputEsMeCaTa takes as input a tabulated or an excel file with two columns one with the ID corresponding to the taxonomic affiliation (for example the OTU ID for 16S RNA sequencing) and a second column with the taxonomic classification separated by ';'. In the following documentation, the first column (namedobservation_name) will be used to identify the label associated with each taxonomic affiliation. An example is located in the test folder (Example.tsv).For example:observation_nametaxonomic_affiliationCluster_1Bacteria;Spirochaetes;Spirochaetia;Spirochaetales;Spirochaetaceae;Sphaerochaeta;unknown speciesCluster_2Bacteria;Chloroflexi;Anaerolineae;Anaerolineales;Anaerolineaceae;ADurb.Bin120;unknown speciesCluster_3Bacteria;Cloacimonetes;Cloacimonadia;Cloacimonadales;Cloacimonadaceae;Candidatus Cloacimonas;unknown speciesCluster_4Bacteria;Bacteroidetes;Bacteroidia;Bacteroidales;Rikenellaceae;Rikenellaceae RC9 gut group;unknown speciesCluster_5Bacteria;Cloacimonetes;Cloacimonadia;Cloacimonadales;Cloacimonadaceae;W5;unknown speciesCluster_6Bacteria;Bacteroidetes;Bacteroidia;Bacteroidales;Dysgonomonadaceae;unknown genus;unknown speciesCluster_7Bacteria;Firmicutes;Clostridia;Clostridiales;Clostridiaceae;Clostridium;unknown speciesIt is possible to use EsMeCaTa with a taxonomic affiliation containing only one taxon:observation_nametaxonomic_affiliationCluster_1SphaerochaetaCluster_2YersiniaBut this can cause issue. For example, "Cluster_2" is associated with Yersinia but two genus are associated with this name (one mantid (taxId: 444888) and one bacteria (taxId: 629)). EsMeCaTa will not able to differentiate them. But if you give more informations by adding more taxons (for example: 'Bacteria;Gammaproteobacteria;Yersinia'), EsMeCaTa will compare all the taxons of the taxonomic affiliation (here: 2 (Bacteria) and 1236 (Gammaproteobacteria)) to the lineage associated with the two taxIDs (for bacteria Yersinia: [1, 131567, 2, 1224, 1236, 91347, 1903411, 629] and for the mantid one: [1, 131567, 2759, 33154, 33208, 6072, 33213, 33317, 1206794, 88770, 6656, 197563, 197562, 6960, 50557, 85512, 7496, 33340, 33341, 6970, 7504, 7505, 267071, 444888]). In this example, there is 2 matches for the bacteria one (2 and 1236) and 0 for the mantid one. So EsMeCaTa will select the taxId associated with the bacteria (629).Ajupyter notebookexplains how EsMeCata works.EsMeCaTa commandsusage: esmecata [-h] [--version] {check,proteomes,clustering,annotation_uniprot,annotation,workflow_uniprot,workflow,analysis} ...

From taxonomic affiliation to metabolism using Uniprot. For specific help on each subcommand use: esmecata {cmd} --help

options:
  -h, --help            show this help message and exit
  --version             show program's version number and exit

subcommands:
  valid subcommands:

  {check,proteomes,clustering,annotation_uniprot,annotation,workflow_uniprot,workflow,analysis}
    check               Check proteomes associated with taxon in Uniprot Proteomes database.
    proteomes           Download proteomes associated with taxon from Uniprot Proteomes.
    clustering          Cluster the proteins of the different proteomes of a taxon into a single set of representative shared proteins.
    annotation_uniprot  Retrieve protein annotations from Uniprot.
    annotation          Annotate protein clusters using eggnog-mapper.
    workflow_uniprot    Run all esmecata steps (proteomes, clustering and annotation).
    workflow            Run all esmecata steps (proteomes, clustering and annotation with eggnog-mapper).
    analysis            Create clustermap for EC.

Requires: mmseqs2 and an internet connection (for REST and SPARQL queries, except if you have a local Uniprot SPARQL endpoint).
Annotation can be performed with UniProt or eggnog-mapper (which is then a requirement if the option is selected).EsMeCaTa functionsEsMeCaTa is in three steps:proteomes: search for proteomes associated with the taxonomic affiliations on UniProt (also done withchecksubcommand) and download them.clustering: clusters the protein of the proteomes and filter them according to a threshold -option (-t).annotation: annotate the protein cluster.The annotation step can be performed with two methods, either by retrieving annotation from UniProt or by using eggnog-mapper.
The eggnog-mapper approach has been found to be the more accurate in association with a clustering threshold of 0.5 (-t 0.5).
These options are the default options of EsMeCaTa.esmecata check: Estimate knowledge associated with taxonomic affiliationusage: esmecata check [-h] -i INPUT_FILE -o OUPUT_DIR [-b BUSCO] [--ignore-taxadb-update] [--all-proteomes] [-s SPARQL] [-l LIMIT_MAXIMAL_NUMBER_PROTEOMES] [-r RANK_LIMIT] [--minimal-nb-proteomes MINIMAL_NUMBER_PROTEOMES] [--update-affiliations] [--bioservices]

options:
  -h, --help            show this help message and exit
  -i INPUT_FILE, --input INPUT_FILE
                        Input taxon file (excel, tsv or csv) containing a column associating ID to a taxonomic affiliation (separated by ;).
  -o OUPUT_DIR, --output OUPUT_DIR
                        Output directory path.
  -b BUSCO, --busco BUSCO
                        BUSCO percentage between 0 and 1. This will remove all the proteomes without BUSCO score and the score before the selected ratio of completion.
  --ignore-taxadb-update
                        If you have a not up-to-date version of the NCBI taxonomy database with ete3, use this option to bypass the warning message and use the old version.
  --all-proteomes       Download all proteomes associated with a taxon even if they are no reference proteomes.
  -s SPARQL, --sparql SPARQL
                        Use sparql endpoint instead of REST queries on Uniprot.
  -l LIMIT_MAXIMAL_NUMBER_PROTEOMES, --limit-proteomes LIMIT_MAXIMAL_NUMBER_PROTEOMES
                        Choose the maximal number of proteomes after which the tool will select a subset of proteomes instead of using all the available proteomes (default is 99).
  -r RANK_LIMIT, --rank-limit RANK_LIMIT
                        This option limits the rank used when searching for proteomes. All the ranks superior to the given rank will be ignored. For example, if 'family' is given, only taxon ranks inferior or equal to family will be kept. Look at the readme for more
                        information (and a list of rank names).
  --minimal-nb-proteomes MINIMAL_NUMBER_PROTEOMES
                        Choose the minimal number of proteomes to be selected by EsMeCaTa. If a taxon has less proteomes, it will be ignored and a higher taxonomic rank will be used. Default is 5.
  --update-affiliations
                        If the taxonomic affiliations were assigned from an outdated taxonomic database, this can lead to taxon not be found in ete3 database. This option tries to udpate the taxonomic affiliations using the lowest taxon name.
  --bioservices         Use bioservices instead of esmecata functions for protein annotation.For each taxon in each taxonomic affiliations EsMeCaTa will use ete3 to find the corresponding taxon ID. Then it will search for proteomes associated with these taxon ID in the Uniprot Proteomes database.If there is more than 100 proteomes, esmecata will apply a specific method:(1) use the taxon ID associated with each proteomes to create a taxonomic tree with ete3.(2) from the root of the tree (the input taxon), esmecata will find the direct deescendant (sub-taxons).(3) then esmecata will compute the number of proteomes associated with each sub-taxon.(4) the corresponding proportions will be used to select randomly a number of proteomes corresponding to the proportion.For example: for the taxon Clostridiales, 645 proteomes are found. Using the organism taxon ID associated with the 645 proteomes we found that there is 17 direct sub-taxons. Then for each sub-taxon we compute the percentage of proportion of proteomes given by the sub-taxon to the taxon Clostridiales.
There is 198 proteomes associated with the sub-taxon Clostridiaceae, the percentage will be computed as follow: 198 / 645 = 30% (if a percentage is superior to 1 it will be round down and if the percentage is lower than 1 it will be round up to keep all the low proportion sub-taxons). We will use this 30% to select randomly 30 proteomes amongst the 198 proteomes of Clostridiaceae. This is done for all the other sub-taxons, so we get a number of proteomes around 100 (here it will be 102). Due to the different rounds (up or down) the total number of proteomes will not be equal to exactly 100 but it will be around it. The number of proteomes leading to this behavior is set to 99 by default but the user can modify it with the-l/--limit-proteomesoption.esmecata checkoptions:-s/--sparql: use SPARQL instead of REST requestsIt is possible to avoid using REST queries for esmecata and instead use SPARQL queries. This option need a link to a sparql endpoint containing UniProt. If you want to use theSPARQL endpoint of UniProt, you can use the argument:-s uniprot.-b/--busco: filter proteomes using BUSCO score (default is 0.8)It is possible to filter proteomes according to to their BUSCO score (from Uniprot documentation:The Benchmarking Universal Single-Copy Ortholog (BUSCO) assessment tool is used, for eukaryotic and bacterial proteomes, to provide quantitative measures of UniProt proteome data completeness in terms of expected gene content.). It is a percentage between 0 and 1 showing the quality of the proteomes that esmecata will download. By default esmecata uses a BUSCO score of 0.80, it will only download proteomes with a BUSCO score of at least 80%.--ignore-taxadb-update: ignore need to udpate ete3 taxaDBIf you have an old version of the ete3 NCBI taxonomy database, you can use this option to use esmecata with it.--all-proteomes: download all proteomes (reference and non-reference)By default, esmecata will try to downlaod the reference proteomes associated with a taxon. But if you want to download all the proteomes associated with a taxon (either if they are non reference proteome) you can use this option. Without this option non-reference proteoems can also be used if no reference proteomes are found.-l/--limit-proteomes: choose the number of proteomes that will lead to the used of the selection of a subset of proteomesTo avoid working on too many proteomes, esmecata works on subset of proteomes when there is too many proteomes (by default this limit is set on 99 proteomes). Using this option the user can modify the limit.--minimal-nb-proteomes: choose the minimal number of proteomes that taxon must have to be selected by esmecata (default 1).To avoid working on too little proteomes, it is possible to give an int to this option.
With this int, esmecata will select only taxon associated to at least this number of proteomes.
For example if you use--minimal-nb-proteomes 10, and the lowest taxon in the taxonomic affiliation is associated with 3 proteomes, it will be ignored and a taxon with a higer taxonomic rank will be used.-r/--rank-limit: This option limits the rank used when searching for proteomes. All the ranks superior to the given rank will be ignored. For example, if 'family' is given, only taxon ranks inferior or equal to family will be kept.To avoid working on rank with too much proteomes (which can have an heavy impact on the number of proteomes downloaded and then on the clustering) it is possible to select a limit on the taxonomic rank used by the tool.The selected rank will be used to find the ranks to keep. For example, if the rank 'phylum' is given, this rank and all the rank below (from phylum to isolate) will be kept. And the ranks from superphylum to superkingdom will be ignored when searching for proteomes.
The following ranks can be given to this option (from Supplementary Table S3 ofPMC7408187):LevelRank1superkingdom2kingdom3subkingdom4superphylum5phylum6subphylum7infraphylum8superclass9class10subclass11infraclass12cohort13subcohort14superorder15order16suborder17infraorder18parvorder19superfamily20family21subfamily22tribe23subtribe24genus25subgenus26section27subsection28series29subseries30species group31species subgroup32species33forma specialis34subspecies35varietas36subvariety37forma38serogroup39serotype40strain41isolateSome ranks (which are not non-hierarchical) are not used for the moment when using this method (so some taxa can be removed whereas they are below a kept rank):LevelRankNotecladenewly introduced, can appear anywhere in the lineage w/o breaking the orderenvironmental samplesno order below this rank is requiredincertae sediscan appear anywhere in the lineage w/o breaking the order, implies taxa with uncertain placementsunclassifiedno order below this rank is required, includes undefined or unspecified namesno rankapplied to nodes not categorized here yet, additional rank and groups names will be released--bioservices: instead of using REST queries implemented in EsMeCaTa, relies onbioservicesAPI to query UniProt.
This requires the bioservices package.esmecata proteomes: Retrieve proteomes associated with taxonomic affiliationusage: esmecata proteomes [-h] -i INPUT_FILE -o OUPUT_DIR [-b BUSCO] [--ignore-taxadb-update] [--all-proteomes] [-s SPARQL] [-l LIMIT_MAXIMAL_NUMBER_PROTEOMES] [-r RANK_LIMIT] [--minimal-nb-proteomes MINIMAL_NUMBER_PROTEOMES] [--update-affiliations] [--bioservices]

optional arguments:
  -h, --help            show this help message and exit
  -i INPUT_FILE, --input INPUT_FILE
                        Input taxon file (excel, tsv or csv) containing a column associating ID to a taxonomic affiliation (separated by ;).
  -o OUPUT_DIR, --output OUPUT_DIR
                        Output directory path.
  -b BUSCO, --busco BUSCO
                        BUSCO percentage between 0 and 1. This will remove all the proteomes without BUSCO score and the score before the selected ratio of completion.
  --ignore-taxadb-update
                        If you have a not up-to-date version of the NCBI taxonomy database with ete3, use this option to bypass the warning message and use the old version.
  --all-proteomes       Download all proteomes associated with a taxon even if they are no reference proteomes.
  -s SPARQL, --sparql SPARQL
                        Use sparql endpoint instead of REST queries on Uniprot.
  -l LIMIT_MAXIMAL_NUMBER_PROTEOMES, --limit-proteomes LIMIT_MAXIMAL_NUMBER_PROTEOMES
                        Choose the maximal number of proteomes after which the tool will select a subset of proteomes instead of using all the available proteomes (default is 99).
  -r RANK_LIMIT, --rank-limit RANK_LIMIT
                        This option limits the rank used when searching for proteomes. All the ranks superior to the given rank will be ignored. For example, if 'family' is given, only taxon ranks inferior or equal to family will be
                        kept. Look at the readme for more information (and a list of rank names).
  --minimal-nb-proteomes MINIMAL_NUMBER_PROTEOMES
                        Choose the minimal number of proteomes to be selected by EsMeCaTa. If a taxon has less proteomes, it will be ignored and a higher taxonomic rank will be used. Default is 1.
  --update-affiliations
                        If the taxonomic affiliations were assigned from an outdated taxonomic database, this can lead to taxon not be found in ete3 database. This option tries to udpate the taxonomic affiliations using the lowest taxon
                        name.
  --bioservices         Use bioservices instead of esmecata functions for protein annotation.EsMeCaTa proteomes performs the same action than esmecata check and after this step, it downloads the proteomes. For protein with isoforms, thecanonical sequenceis retrieved except when the isoforms are separated in different Uniprot entries.esmecata clustering: Proteins clusteringusage: esmecata clustering [-h] -i INPUT_DIR -o OUPUT_DIR [-c CPU] [-t THRESHOLD_CLUSTERING] [-m MMSEQS_OPTIONS] [--linclust] [--remove-tmp]

optional arguments:
  -h, --help            show this help message and exit
  -i INPUT_DIR, --input INPUT_DIR
                        This input folder of clustering is the output folder of proteomes command.
  -o OUPUT_DIR, --output OUPUT_DIR
                        Output directory path.
  -c CPU, --cpu CPU     CPU number for multiprocessing.
  -t THRESHOLD_CLUSTERING, --threshold THRESHOLD_CLUSTERING
                        Proportion [0 to 1] of proteomes required to occur in a proteins cluster for that cluster to be kept in core proteome assembly.
  -m MMSEQS_OPTIONS, --mmseqs MMSEQS_OPTIONS
                        String containing mmseqs options for cluster command (except --threads which is already set by --cpu command and -v). If nothing is given, esmecata will used the option "--min-seq-id 0.3 -c 0.8"
  --linclust            Use mmseqs linclust (clustering in lienar time) to cluster proteins sequences. It is faster than mmseqs cluster (default behaviour) but less sensitive.
  --remove-tmp          Delete tmp files to limit the disk space used: files created by mmseqs (in mmseqs_tmp).For each taxon (a row in the table) EsMeCaTa will use mmseqs2 to cluster the proteins (using an identity of 30% and a coverage of 80%, these values can be changed with the--mmseqsoption). Then if a cluster contains at least one protein from each proteomes, it will be kept (this threshold can be changed using the--threshold option). The representative proteins from the cluster will be used. A fasta file of all the representative proteins will be created for each taxon.esmecata clusteringoptions:-t/--threshold: clustering thresholdIt is possible to modify the requirements of the presence of at least one protein from each proteomes in a cluster to keep it. Using the threshold option one can give a float between 0 and 1 to select the ratio of representation of proteomes in a cluster to keep.For example a threshold of 0.8 means that all the cluster with at least 80% representations of proteomes will be kept (with a taxon, associated with 10 proteomes, it means that at least 8 proteomes must have a protein in the cluster so the cluster must be kept).-c/--cpu: number of CPU for mmseqs2You can give a numbe of CPUs to parallelise mmseqs2.-m/--mmseqs: mmseqs option to be used for the clustering.String containing mmseqs options for cluster command (except --threads which is already set by --cpu command and -v). If nothing is given, esmecata will used the option "--min-seq-id 0.3 -c 0.8". For example you can give--mmseqs "--min-seq-id 0.8 --kmer-per-seq 80"to ask for a minimal identity between sequence of 80% and having 80 kmers per sequence.--linclust: replacemmseqs clusterbymmseqs linclust(faster but less sensitive)Use mmseqs linclust (clustering in linear time) to cluster proteins sequences. It is faster than mmseqs cluster (default behaviour) but less sensitive.--remove-tmp: remove mmseqs files stored inmmseqs_tmpfolderesmecata annotation: Retrieve protein annotations with eggnog-mapperusage: esmecata annotation [-h] -i INPUT_DIR -o OUPUT_DIR -e EGGNOG_DATABASE [-c CPU] [--eggnog-tmp EGGNOG_TMP_DIR]

options:
  -h, --help            show this help message and exit
  -i INPUT_DIR, --input INPUT_DIR
                        This input folder of annotation is the output folder of clustering command.
  -o OUPUT_DIR, --output OUPUT_DIR
                        Output directory path.
  -e EGGNOG_DATABASE, --eggnog EGGNOG_DATABASE
                        Path to eggnog database.
  -c CPU, --cpu CPU     CPU number for multiprocessing.
  --eggnog-tmp EGGNOG_TMP_DIR
                        Path to eggnog tmp dir.Requires eggnog-mapper in the path and the path to the eggnog database.
This command takes as input the folder created byesmecata clusteringand uses especially thereference_proteins_consensus_fastafolder.
This folder contains the consensus protein sequences associated with each protein clusters kept according to the clustering threshold.
These sequences are given as input to eggnog-mapper.The number of CPU used by eggnog-mapper can be modified with-c.
By default, EsMeCaTa uses the option--dbmemof eggnog-mapper to store the database in memory, this requires around 50G of RAM.esmecata annotation_eggnogoptions:-e: path to the eggnog database (required).-c: number of CPUs to be used by eggnog-mapper.--eggnog-tmp: path to the folder to store eggnog temporary files (by default it is inside esmecata output folder).esmecata annotation_uniprot: Retrieve protein annotations with UniProtusage: esmecata annotation_uniprot [-h] -i INPUT_DIR -o OUPUT_DIR [-s SPARQL] [-p PROPAGATE_ANNOTATION] [--uniref] [--expression] [--annotation-files ANNOTATION_FILES] [--bioservices]

options:
  -h, --help            show this help message and exit
  -i INPUT_DIR, --input INPUT_DIR
                        This input folder of annotation is the output folder of clustering command.
  -o OUPUT_DIR, --output OUPUT_DIR
                        Output directory path.
  -s SPARQL, --sparql SPARQL
                        Use sparql endpoint instead of REST queries on Uniprot.
  -p PROPAGATE_ANNOTATION, --propagate PROPAGATE_ANNOTATION
                        Proportion [0 to 1] of the occurrence of an annotation to be propagated from the protein of a cluster to the reference protein of the cluster. 0 mean the annotations from all proteins are propagated to the reference and 1 only the annotation
                        occurring in all the proteins of the cluster (default).
  --uniref              Use uniref cluster to extract more annotations from the representative member of the cluster associated with the proteins. Needs the --sparql option.
  --expression          Extract expression information associated with the proteins. Needs the --sparql option.
  --annotation-files ANNOTATION_FILES
                        Use UniProt annotation files (uniprot_trembl.txt and uniprot_sprot.txt) to avoid querying UniProt REST API. Need both paths to these files separated by a ",".
  --bioservices         Use bioservices instead of esmecata functions for protein annotation.For each of the protein clusters kept after the clustering, esmecata will look for the annotation (GO terms, EC number, function, gene name, Interpro) in Uniprot.
By default, esmecata will look at the annotations of each proteins from a cluster and keeps only annotation occurring in all the protein of a cluster (threshold 1 of option -p).
It is like selecting the intersection of the annotation of the cluster. This can be changed with the option-pand giving a float between 0 and 1.Then esmecata will create a tabulated file for each row of the input file and also a folder containing PathoLogic file that can be used as input for Pathway Tools.esmecata annotationoptions:-s/--sparql: use SPARQL instead of REST requestsIt is possible to avoid using REST queries for esmecata and instead use SPARQL queries. This option need a link to a sparql endpoint containing UniProt. If you want to use theSPARQL endpoint, you can just use:-s uniprot.-p/--propagate: propagation of annotationIt is possible to modify how the annotations are retrieved. By default, esmecata will take the annotations occurring in at least all the proteins of the cluster (-p 1). But with the-poption it is possible to propagate annotation form the proteins of the cluster to the reference proteins.This option takes a float as input between 0 and 1, that will be used to filter the annotations retrieved. This number is multiplied by the number of protein in the cluster to estimate a threshold. To keep an annotation the number of the protein having this annotation in the cluster must be higher than the threshold. For example with a threshold of 0.5, for a cluster of 10 proteins an annotation will be kept if 5 or more proteins of the cluster have this annotation.If the option is set to 0, there will be no filter all the annotation of the proteins of the cluster will be propagated to the reference protein (it corresponds to theunionof the cluster annotations). This parameter gives the higher number of annotation for proteins. If the option is set to 1, only annotations that are present in all the proteins of a cluster will be kept (it corresponds to theintersectionof the cluster annotations). This parameter is the most stringent and will limit the number of annotations associated with a protein.For example, for the same taxon the annotation with the parameter-p 0leads to the reconstruction of a metabolic networks of 1006 reactions whereas the parameter-p 1creates a metabolic network with 940 reactions (in this example with no use of the-poption, so without annotation propagation, there was also 940 reactions inferred).--uniref: use annotation from unirefTo add more annotations, esmecata can search theUniRefcluster associated with the protein associated with a taxon. Then the representative protein of the cluster will be extracted and if its identity with the protein of interest is superior to 90% esmecata will find its annotation (GO Terms and EC numbers) and will propagate these annotations to the protein. At this moment, this option is only usable when using the--sparqloption.--expression: extract expression informationWith this option, esmecata will extract theexpression informationassociated with a protein. This contains 3 elements: Induction, Tissue specificity and Disruption Phenotype. At this moment, this option is only usable when using the--sparqloption.--annotation-files: use UniProt txt files instead of queyring Uniprot servers.As theannotation stepneeds a high numbers of queries to UniProt servers when working with hundreds or thousands of taxonomic affliations, it can failed due to issues with the query.
A workaround (for example on a cluster), is to use the UniProt flat files containing the protein annotations.
Warning, the TrEMBL file takes a lot of space (around 150G compressed for the version 2022_05 andd 700G uncompressed).
One of the downside of this option is that it needs lof of memory to handle indexing the TrEMBL file (around 32G using Biopython indexing) and it takes several hours to parse it.
But for dataset with thousands of taxonomic affiliations, this can be compensated by the fact that queyring the indexed files is more stable than querying a server.
For this option, you should give the path to the two annotation files (both the Swiss-Prot and the TrEMBL files) separated by,such as:--annotation-files /db/uniprot/UniProt_2022_05/flat/uniprot_sprot.dat,/db/uniprot/UniProt_2022_05/flat/uniprot_trembl.dat.
The names of the files must contained:uniprot_sprotanduniprot_tremblto be able to differentiate them.--bioservices: instead of using REST queries implemented in EsMeCaTa, relies onbioservicesAPI to query UniProt.
This requires the bioservices package.esmecata workflow: Consecutive runs of the three steps by using eggnog-mapper for the annotationusage: esmecata workflow [-h] -i INPUT_FILE -o OUPUT_DIR -e EGGNOG_DATABASE [-b BUSCO] [-c CPU] [--ignore-taxadb-update] [--all-proteomes] [-s SPARQL] [--remove-tmp] [-l LIMIT_MAXIMAL_NUMBER_PROTEOMES] [-t THRESHOLD_CLUSTERING] [-m MMSEQS_OPTIONS] [--linclust]
                         [-r RANK_LIMIT] [--minimal-nb-proteomes MINIMAL_NUMBER_PROTEOMES] [--update-affiliations] [--bioservices] [--eggnog-tmp EGGNOG_TMP_DIR]

options:
  -h, --help            show this help message and exit
  -i INPUT_FILE, --input INPUT_FILE
                        Input taxon file (excel, tsv or csv) containing a column associating ID to a taxonomic affiliation (separated by ;).
  -o OUPUT_DIR, --output OUPUT_DIR
                        Output directory path.
  -e EGGNOG_DATABASE, --eggnog EGGNOG_DATABASE
                        Path to eggnog database.
  -b BUSCO, --busco BUSCO
                        BUSCO percentage between 0 and 1. This will remove all the proteomes without BUSCO score and the score before the selected ratio of completion.
  -c CPU, --cpu CPU     CPU number for multiprocessing.
  --ignore-taxadb-update
                        If you have a not up-to-date version of the NCBI taxonomy database with ete3, use this option to bypass the warning message and use the old version.
  --all-proteomes       Download all proteomes associated with a taxon even if they are no reference proteomes.
  -s SPARQL, --sparql SPARQL
                        Use sparql endpoint instead of REST queries on Uniprot.
  --remove-tmp          Delete tmp files to limit the disk space used: files created by mmseqs (in mmseqs_tmp).
  -l LIMIT_MAXIMAL_NUMBER_PROTEOMES, --limit-proteomes LIMIT_MAXIMAL_NUMBER_PROTEOMES
                        Choose the maximal number of proteomes after which the tool will select a subset of proteomes instead of using all the available proteomes (default is 99).
  -t THRESHOLD_CLUSTERING, --threshold THRESHOLD_CLUSTERING
                        Proportion [0 to 1] of proteomes required to occur in a proteins cluster for that cluster to be kept in core proteome assembly. Default is 0.5.
  -m MMSEQS_OPTIONS, --mmseqs MMSEQS_OPTIONS
                        String containing mmseqs options for cluster command (except --threads which is already set by --cpu command and -v). If nothing is given, esmecata will used the option "--min-seq-id 0.3 -c 0.8"
  --linclust            Use mmseqs linclust (clustering in linear time) to cluster proteins sequences. It is faster than mmseqs cluster (default behaviour) but less sensitive.
  -r RANK_LIMIT, --rank-limit RANK_LIMIT
                        This option limits the rank used when searching for proteomes. All the ranks superior to the given rank will be ignored. For example, if 'family' is given, only taxon ranks inferior or equal to family will be kept. Look at the readme for more
                        information (and a list of rank names).
  --minimal-nb-proteomes MINIMAL_NUMBER_PROTEOMES
                        Choose the minimal number of proteomes to be selected by EsMeCaTa. If a taxon has less proteomes, it will be ignored and a higher taxonomic rank will be used. Default is 5.
  --update-affiliations
                        If the taxonomic affiliations were assigned from an outdated taxonomic database, this can lead to taxon not be found in ete3 database. This option tries to udpate the taxonomic affiliations using the lowest taxon name.
  --bioservices         Use bioservices instead of esmecata functions for protein annotation.
  --eggnog-tmp EGGNOG_TMP_DIR
                        Path to eggnog tmp dir.EsMeCTa will perform the search for proteomes, the protein clustering and the annotation using eggnog-mapper.esmecata workflow_uniprot: Consecutive runs of the three stepsusage: esmecata workflow_uniprot [-h] -i INPUT_FILE -o OUPUT_DIR [-b BUSCO] [-c CPU] [--ignore-taxadb-update] [--all-proteomes] [-s SPARQL] [--remove-tmp] [-l LIMIT_MAXIMAL_NUMBER_PROTEOMES] [-t THRESHOLD_CLUSTERING] [-m MMSEQS_OPTIONS] [--linclust]
                                 [-p PROPAGATE_ANNOTATION] [--uniref] [--expression] [-r RANK_LIMIT] [--minimal-nb-proteomes MINIMAL_NUMBER_PROTEOMES] [--annotation-files ANNOTATION_FILES] [--update-affiliations] [--bioservices]

options:
  -h, --help            show this help message and exit
  -i INPUT_FILE, --input INPUT_FILE
                        Input taxon file (excel, tsv or csv) containing a column associating ID to a taxonomic affiliation (separated by ;).
  -o OUPUT_DIR, --output OUPUT_DIR
                        Output directory path.
  -b BUSCO, --busco BUSCO
                        BUSCO percentage between 0 and 1. This will remove all the proteomes without BUSCO score and the score before the selected ratio of completion.
  -c CPU, --cpu CPU     CPU number for multiprocessing.
  --ignore-taxadb-update
                        If you have a not up-to-date version of the NCBI taxonomy database with ete3, use this option to bypass the warning message and use the old version.
  --all-proteomes       Download all proteomes associated with a taxon even if they are no reference proteomes.
  -s SPARQL, --sparql SPARQL
                        Use sparql endpoint instead of REST queries on Uniprot.
  --remove-tmp          Delete tmp files to limit the disk space used: files created by mmseqs (in mmseqs_tmp).
  -l LIMIT_MAXIMAL_NUMBER_PROTEOMES, --limit-proteomes LIMIT_MAXIMAL_NUMBER_PROTEOMES
                        Choose the maximal number of proteomes after which the tool will select a subset of proteomes instead of using all the available proteomes (default is 99).
  -t THRESHOLD_CLUSTERING, --threshold THRESHOLD_CLUSTERING
                        Proportion [0 to 1] of proteomes required to occur in a proteins cluster for that cluster to be kept in core proteome assembly. Default is 0.5.
  -m MMSEQS_OPTIONS, --mmseqs MMSEQS_OPTIONS
                        String containing mmseqs options for cluster command (except --threads which is already set by --cpu command and -v). If nothing is given, esmecata will used the option "--min-seq-id 0.3 -c 0.8"
  --linclust            Use mmseqs linclust (clustering in linear time) to cluster proteins sequences. It is faster than mmseqs cluster (default behaviour) but less sensitive.
  -p PROPAGATE_ANNOTATION, --propagate PROPAGATE_ANNOTATION
                        Proportion [0 to 1] of the occurrence of an annotation to be propagated from the protein of a cluster to the reference protein of the cluster. 0 mean the annotations from all proteins are propagated to the reference and 1 only the annotation
                        occurring in all the proteins of the cluster (default).
  --uniref              Use uniref cluster to extract more annotations from the representative member of the cluster associated with the proteins. Needs the --sparql option.
  --expression          Extract expression information associated with the proteins. Needs the --sparql option.
  -r RANK_LIMIT, --rank-limit RANK_LIMIT
                        This option limits the rank used when searching for proteomes. All the ranks superior to the given rank will be ignored. For example, if 'family' is given, only taxon ranks inferior or equal to family will be kept. Look at the readme for more
                        information (and a list of rank names).
  --minimal-nb-proteomes MINIMAL_NUMBER_PROTEOMES
                        Choose the minimal number of proteomes to be selected by EsMeCaTa. If a taxon has less proteomes, it will be ignored and a higher taxonomic rank will be used. Default is 5.
  --annotation-files ANNOTATION_FILES
                        Use UniProt annotation files (uniprot_trembl.txt and uniprot_sprot.txt) to avoid querying UniProt REST API. Need both paths to these files separated by a ",".
  --update-affiliations
                        If the taxonomic affiliations were assigned from an outdated taxonomic database, this can lead to taxon not be found in ete3 database. This option tries to udpate the taxonomic affiliations using the lowest taxon name.
  --bioservices         Use bioservices instead of esmecata functions for protein annotation.EsMeCTa will perform the search for proteomes, the protein clustering and the annotation using UniProt.EsMeCaTa outputsEsMeCaTa proteomesoutput_folder
├── proteomes_description
│   └── Cluster_1.tsv
│   └── Cluster_1.tsv
├── proteomes
│   └── Proteome_1.faa.gz
│   └── Proteome_2.faa.gz
│   └── Proteome_3.faa.gz
│   └── ...
├── association_taxon_taxID.json
├── proteome_tax_id.tsv
├── esmecata_proteomes.log
├── esmecata_metadata_proteomes.json
├── stat_number_proteome.tsvTheproteomes_descriptioncontains list of proteomes find by esmecata on Uniprot associated with the taxonomic affiliation.Theproteomescontains all the proteomes that have been found to be associated with one taxon. It will be used for the clustering step.association_taxon_taxID.jsoncontains for eachobservation_namethe name of the taxon and the corresponding taxon_id found withete3.proteome_tax_id.tsvcontains the name, the taxon_id and the proteomes associated with eachobservation_name.The fileesmecata_proteomes.logcontains the log associated with the command.esmecata_metadata_proteomes.jsonis a log about the Uniprot release used and how the queries ware made (REST or SPARQL). It also gets the metadata associated with the command used with esmecata and the dependencies.stat_number_proteome.tsvis a tabulated file containing the number of proteomes found for each observation name.EsMeCaTa clusteringoutput_folder
├── cluster_founds
│   └── Taxon_Name_1.tsv
│   └── ...
├── computed_threshold
│   └── Taxon_Name_1.tsv
│   └── ...
├── mmseqs_tmp (can be cleaned to spare disk space using --remove-tmp option)
│   └── Taxon_Name_1
│       └── mmseqs intermediary files
│       └── ...
│   └── ...
├── reference_proteins
│   └── Taxon_Name_1.tsv
│   └── ...
├── reference_proteins_consensus_fasta
│   └── Taxon_Name_1.faa
│   └── ...
├── reference_proteins_representative_fasta
│   └── Taxon_Name_1.faa
│   └── ...
├── proteome_tax_id.tsv
├── esmecata_clustering.log
├── esmecata_metadata_clustering.json
├── stat_number_clustering.tsvThecluster_foundscontains one tsv file per taxon name used by EsMeCaTa. So multipleobservation_namecan be represented by a similar taxon name to avoid redundancy and limit the disk space used. These files contain the clustered proteins The first column contains the representative proteins of a cluster and the following columns correspond to the other proteins of the same cluster. The first protein occurs two time: one as the representative member o.f the cluster and a second time as a member of the cluster.Thecomputed_thresholdfolder contains the ratio of proteomes represented in a cluster compared to the total number of proteomes associated with a taxon. If the ratio is equal to 1, it means that all the proteomes are represented by a protein in the cluster, 0.5 means that half of the proteoems are represented in the cluster. This score is used when giving the-targument.Themmseqs_tmpfolder contains the intermediary files of mmseqs2 for each taxon name. To save disk space, it is recommended to delete it with the option--remove-tmp.Thereference_proteinscontains one tsv file per taxon name and these files contain the clustered proteins kept after clustering process. it is similar tocluster_foundsbut it contains only protein kept after clustering and threshold.Thereference_proteins_consensus_fastacontains the consensus proteins associated with a taxon name for the cluster kept after clustering process.Thereference_proteins_representative_fastacontains the consensus proteins associated with a taxon name for the cluster kept after clustering process.Theproteome_tax_id.tsvfile is the same than the one created inesmecata proteomes.The fileesmecata_clustering.logcontains the log associated with the command.esmecata_metadata_clustering.jsonis a log about the the metadata associated with the command used with esmecata and the dependencies.stat_number_clustering.tsvis a tabulated file containing the number of shared proteins found for each observation name.EsMeCaTa annotationoutput_folder
├── annotation_reference
│   └── Cluster_1.tsv
│   └── ...
├── eggnog_output
│   └── Taxon_name_1.emapper.annotations
│   └── Taxon_name_1.emapper.hits
│   └── Taxon_name_1.emapper.seed_orthologs
│   └── ...
├── pathologic
│   └── Cluster_1
│       └── Cluster_1.pf
│   └── ...
│   └── taxon_id.tsv
├── esmecata_annotation.log
├── esmecata_metadata_annotation.json
├── stat_number_annotation.tsvTheeggnog_outputcontains the resulting files of the eggnog-mapper run, three files for each taxon name. In this way, eggnog-mapper is run only one time by taxon name which reduces the redundancy if it had to be run on all the differentobservation_name.Theannotation_referencecontains the prediction of eggnog-mapper for the consensus protein of eachobservation_name. To create this file, EsMeCaTa finds the taxon name associated with theobservation_nameand extracts the annotation (EC numbers, GO termes, KEGG reaction).Thepathologiccontains one sub-folder for eachobservation_namein which there is one PathoLogic file. There is also ataxon_id.tsvfile which corresponds to a modified version ofproteome_tax_id.tsvwith only theobservation_nameand thetaxon_id. This folder can be used as input tompwtto reconstruct draft metabolic networks using Pathway Tools PathoLogic.The fileesmecata_annotation.logcontains the log associated with the command.Theesmecata_metadata_annotation.jsonserves the same purpose as the one used inesmecata proteomesto retrieve metadata about Uniprot release at the time of the query. It also gets the metadata associated with the command used with esmecata and the dependencies.stat_number_annotation.tsvis a tabulated file containing the number of GO Terms and EC numbers found for each observation name.EsMeCaTa annotation_uniprotoutput_folder
├── annotation
│   └── Taxon_name_1.tsv
│   └── ...
├── annotation_reference
│   └── Cluster_1.tsv
│   └── ...
├── expression_annotation (if --expression option)
│   └── Cluster_1.tsv
│   └── ...
├── pathologic
│   └── Cluster_1
│       └── Cluster_1.pf
│   └── ...
│   └── taxon_id.tsv
├── uniref_annotation (if --uniref option)
│   └── Cluster_1.tsv
│   └── ...
├── esmecata_annotation.log
├── esmecata_metadata_annotation.json
├── stat_number_annotation.tsvTheannotationfolder contains a tabulated file for each taxon name (that can be associated with multipleobservation_name). It contains the annotation retrieved with Uniprot (protein_name, review, GO Terms, EC numbers, Interpros, Rhea IDs and gene name) associated with all the proteins in a proteome or associated with anobservation_name.Theannotation_referencecontains annotation only for the representative proteins, but the annotation of the other proteins of the same cluster can be propagated to the reference protein if the-pwas used.Theexpression_annotationcontains expression annotation for the proteins of a taxon (if the--expressionoption was used).Thepathologiccontains one sub-folder for eachobservation_namein which there is one PathoLogic file. There is also ataxon_id.tsvfile which corresponds to a modified version ofproteome_tax_id.tsvwith only theobservation_nameand thetaxon_id. This folder can be used as input tompwtto reconstruct draft metabolic networks using Pathway Tools PathoLogic.The fileesmecata_annotation.logcontains the log associated with the command.Theesmecata_metadata_annotation.jsonserves the same purpose as the one used inesmecata proteomesto retrieve metadata about Uniprot release at the time of the query. It also gets the metadata associated with the command used with esmecata and the dependencies.Theuniref_annotationcontains the annotation from the representative protein of the UniRef cluster associated with the proteins of a taxon (if the--unirefoption was used).stat_number_annotation.tsvis a tabulated file containing the number of GO Terms and EC numbers found for each observation name.EsMeCaTa workflowoutput_folder
├── 0_proteomes
  ├── proteomes_description
  │   └── Cluster_1.tsv
  │   └── Cluster_1.tsv
  ├── proteomes
  │   └── Proteome_1.faa.gz
  │   └── Proteome_2.faa.gz
  │   └── Proteome_3.faa.gz
  │   └── ...
  ├── association_taxon_taxID.json
  ├── proteome_tax_id.tsv
  ├── esmecata_metadata_proteomes.json
  ├── stat_number_proteome.tsv
├── 1_clustering
  ├── cluster_founds
  │   └── Taxon_name_1.tsv
  │   └── ...
  ├── computed_threshold
  │   └── Taxon_name_1.tsv
  │   └── ...
  ├── mmseqs_tmp (can be cleaned to spare disk space using --remove-tmp option)
  │   └── Taxon_name_1
  │       └── mmseqs intermediary files
  │       └── ...
  │   └── ...
  ├── reference_proteins
  │   └── Taxon_name_1.tsv
  │   └── ...
  ├── reference_proteins_consensus_fasta
  │   └── Taxon_name_1.faa
  │   └── ...
  ├── reference_proteins_representative_fasta
  │   └── Taxon_name_1.faa
  │   └── ...
  ├── proteome_tax_id.tsv
  ├── esmecata_metadata_clustering.json
  ├── stat_number_clustering.tsv
├── 2_annotation
  ├── annotation_reference
  │   └── Cluster_1.tsv
  │   └── ...
  ├── eggnog_output
  │   └── Taxon_name_1.emapper.annotations
  │   └── Taxon_name_1.emapper.hits
  │   └── Taxon_name_1.emapper.seed_orthologs
  │   └── ...
  ├── pathologic
  │   └── Cluster_1
  │       └── Cluster_1.pf
  │   └── ...
  │   └── taxon_id.tsv
  ├── esmecata_annotation.log
  ├── esmecata_metadata_annotation.json
  ├── stat_number_annotation.tsv
├── esmecata_workflow.log
├── esmecata_metadata_workflow.json
├── stat_number_workflow.tsvThe files in the folders0_proteomes,1_clusteringand2_annotationare the same than the other presented in the previous steps.The fileesmecata_workflow.logcontains the log associated with the command.Theesmecata_metadata_workflow.jsonretrieves metadata about Uniprot release at the time of the query, the command used and its duration.stat_number_workflow.tsvis a tabulated file containing the number of proteomes, shared proteins, GO Terms and EC numbers found for each observation name.esmecata workflow_uniprothas the same output files except that the outputs of the annotation step corresponds to the output ofesmecata annotation_uniprot.