From ec1a6dee1dcc2efc61d8593202ad9c434010cfa1 Mon Sep 17 00:00:00 2001 From: Venkata Sai Kiran Kollapudi Date: Thu, 29 Oct 2020 22:56:55 +0530 Subject: [PATCH 01/59] excluding ambiguous dates --- augur/filter.py | 4 +- augur/utils.py | 143 +++++++++++++++++++++++++++++------------------- 2 files changed, 90 insertions(+), 57 deletions(-) diff --git a/augur/filter.py b/augur/filter.py index 5977ffe38..a0d15522f 100644 --- a/augur/filter.py +++ b/augur/filter.py @@ -105,6 +105,8 @@ def register_arguments(parser): help="Exclude samples matching these conditions. Ex: \"host=rat\" or \"host!=rat\". Multiple values are processed as OR (matching any of those specified will be excluded), not AND") parser.add_argument('--include-where', nargs='+', help="Include samples with these values. ex: host=rat. Multiple values are processed as OR (having any of those specified will be included), not AND. This rule is applied last and ensures any sequences matching these rules will be included.") + parser.add_argument('--exclude-ambiguous-dates', choices=['all', 'days', 'months'], + help='Exclude ambiguous dates Ex: days - excludes 2020-09-XX, months - exclueds 2020-xx-19, all - excludes any ambiguous dates') parser.add_argument('--query', help="Filter samples by attribute. Uses Pandas Dataframe querying, see https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#indexing-query for syntax.") parser.add_argument('--output', '-o', help="output file", required=True) @@ -234,7 +236,7 @@ def run(args): # filter by date num_excluded_by_date = 0 if (args.min_date or args.max_date) and 'date' in meta_columns: - dates = get_numerical_dates(meta_dict, fmt="%Y-%m-%d") + dates = get_numerical_dates(meta_dict, fmt="%Y-%m-%d", exclude_ambiguous_dates=args.exclude_ambiguous_dates) tmp = [s for s in seq_keep if dates[s] is not None] if args.min_date: tmp = [s for s in tmp if (np.isscalar(dates[s]) or all(dates[s])) and np.max(dates[s])>args.min_date] diff --git a/augur/utils.py b/augur/utils.py index c73541434..8dccbcd45 100644 --- a/augur/utils.py +++ b/augur/utils.py @@ -37,6 +37,7 @@ def open_file(fname, mode): with open(fname, mode, encoding='utf-8') as fh: yield fh + def is_vcf(fname): """Convenience method to check if a file is a vcf file. @@ -49,6 +50,7 @@ def is_vcf(fname): """ return fname.lower().endswith(".vcf") or fname.lower().endswith(".vcf.gz") + def myopen(fname, mode): if fname.endswith('.gz'): import gzip @@ -56,12 +58,14 @@ def myopen(fname, mode): else: return open(fname, mode, encoding='utf-8') + def get_json_name(args, default=None): if args.output_node_data: return args.output_node_data else: if default: - print("WARNING: no name for the output file was specified. Writing results to %s."%default, file=sys.stderr) + print("WARNING: no name for the output file was specified. Writing results to %s." % default, + file=sys.stderr) return default else: raise ValueError("Please specify a name for the JSON file containing the results.") @@ -70,22 +74,32 @@ def get_json_name(args, default=None): def ambiguous_date_to_date_range(uncertain_date, fmt, min_max_year=None): return DateDisambiguator(uncertain_date, fmt=fmt, min_max_year=min_max_year).range() + def read_metadata(fname, query=None): return MetadataFile(fname, query).read() -def get_numerical_dates(meta_dict, name_col = None, date_col='date', fmt=None, min_max_year=None): + +def get_numerical_dates(meta_dict, name_col=None, date_col='date', fmt=None, min_max_year=None, + exclude_ambiguous_dates=None): + num_excluede_recs = 0 if fmt: from datetime import datetime numerical_dates = {} - for k,m in meta_dict.items(): + for k, m in meta_dict.items(): v = m[date_col] - if type(v)!=str: - print("WARNING: %s has an invalid data string:"%k,v) + if type(v) != str: + print("WARNING: %s has an invalid data string:" % k, v) continue elif 'XX' in v: + if (exclude_ambiguous_dates == 'all') or \ + (exclude_ambiguous_dates == 'days' and 'XX' in v.split('-')[2]) or \ + (exclude_ambiguous_dates == 'months' and 'XX' in v.split('-')[1]): + numerical_dates[k] = None + num_excluede_recs += 1 + continue ambig_date = ambiguous_date_to_date_range(v, fmt, min_max_year) if ambig_date is None or None in ambig_date: - numerical_dates[k] = [None, None] #don't send to numeric_date or will be set to today + numerical_dates[k] = [None, None] # don't send to numeric_date or will be set to today else: numerical_dates[k] = [numeric_date(d) for d in ambig_date] else: @@ -94,8 +108,9 @@ def get_numerical_dates(meta_dict, name_col = None, date_col='date', fmt=None, m except: numerical_dates[k] = None else: - numerical_dates = {k:float(v) for k,v in meta_dict.items()} - + numerical_dates = {k: float(v) for k, v in meta_dict.items()} + if num_excluede_recs: + print("%s records were excluded due to ambiguous data" % num_excluede_recs) return numerical_dates @@ -150,7 +165,8 @@ def read_tree(fname, min_terminals=3): # If the tree cannot be loaded, raise an error to that effect. if T is None: raise InvalidTreeError( - "Could not read the given tree %s using the following supported formats: %s" % (fname, ", ".join(supported_tree_formats)) + "Could not read the given tree %s using the following supported formats: %s" % ( + fname, ", ".join(supported_tree_formats)) ) return T @@ -181,12 +197,12 @@ def write_json(data, file_name, indent=(None if os.environ.get("AUGUR_MINIFY_JSO ------ OSError """ - #in case parent folder does not exist yet + # in case parent folder does not exist yet parent_directory = os.path.dirname(file_name) if parent_directory and not os.path.exists(parent_directory): try: os.makedirs(parent_directory) - except OSError: #Guard against race condition + except OSError: # Guard against race condition if not os.path.isdir(parent_directory): raise @@ -198,26 +214,27 @@ def write_json(data, file_name, indent=(None if os.environ.get("AUGUR_MINIFY_JSO def load_features(reference, feature_names=None): - #read in appropriately whether GFF or Genbank - #checks explicitly for GFF otherwise assumes Genbank + # read in appropriately whether GFF or Genbank + # checks explicitly for GFF otherwise assumes Genbank if not os.path.isfile(reference): print("ERROR: reference sequence not found. looking for", reference) return None features = {} if '.gff' in reference.lower(): - #looks for 'gene' and 'gene' as best for TB + # looks for 'gene' and 'gene' as best for TB try: - from BCBio import GFF #Package name is confusing - tell user exactly what they need! + from BCBio import GFF # Package name is confusing - tell user exactly what they need! except ImportError: - print("ERROR: Package BCBio.GFF not found! Please install using \'pip install bcbio-gff\' before re-running.") + print( + "ERROR: Package BCBio.GFF not found! Please install using \'pip install bcbio-gff\' before re-running.") return None - limit_info = dict( gff_type = ['gene'] ) + limit_info = dict(gff_type=['gene']) with open(reference, encoding='utf-8') as in_handle: for rec in GFF.parse(in_handle, limit_info=limit_info): for feat in rec.features: - if feature_names is not None: #check both tags; user may have used either + if feature_names is not None: # check both tags; user may have used either if "gene" in feat.qualifiers and feat.qualifiers["gene"][0] in feature_names: fname = feat.qualifiers["gene"][0] elif "locus_tag" in feat.qualifiers and feat.qualifiers["locus_tag"][0] in feature_names: @@ -240,7 +257,7 @@ def load_features(reference, feature_names=None): else: from Bio import SeqIO for feat in SeqIO.read(reference, 'genbank').features: - if feat.type=='CDS': + if feat.type == 'CDS': if "locus_tag" in feat.qualifiers: fname = feat.qualifiers["locus_tag"][0] if feature_names is None or fname in feature_names: @@ -249,14 +266,15 @@ def load_features(reference, feature_names=None): fname = feat.qualifiers["gene"][0] if feature_names is None or fname in feature_names: features[fname] = feat - elif feat.type=='source': #read 'nuc' as well for annotations - need start/end of whole! + elif feat.type == 'source': # read 'nuc' as well for annotations - need start/end of whole! features['nuc'] = feat return features + def read_config(fname): if not (fname and os.path.isfile(fname)): - print("ERROR: config file %s not found."%fname) + print("ERROR: config file %s not found." % fname) return defaultdict(dict) try: @@ -273,8 +291,10 @@ def read_config(fname): return config + def read_lat_longs(overrides=None, use_defaults=True): coordinates = {} + # TODO: make parsing of tsv files more robust while allow for whitespace delimiting for backwards compatibility def add_line_to_coordinates(line): if line.startswith('#') or line.strip() == "": @@ -288,7 +308,10 @@ def add_line_to_coordinates(line): "longitude": long } else: - print("WARNING: geo-coordinate file contains invalid line. Please make sure not to mix tabs and spaces as delimiters (use only tabs):",line) + print( + "WARNING: geo-coordinate file contains invalid line. Please make sure not to mix tabs and spaces as delimiters (use only tabs):", + line) + if use_defaults: with resource_stream(__package__, "data/lat_longs.tsv") as stream: with TextIOWrapper(stream, "utf-8") as defaults: @@ -303,9 +326,11 @@ def add_line_to_coordinates(line): print("WARNING: input lat/long file %s not found." % overrides) return coordinates + def read_colors(overrides=None, use_defaults=True): return ColorParser(mapping_filename=overrides, use_defaults=use_defaults).mapping + def write_VCF_translation(prot_dict, vcf_file_name, ref_file_name): """ Writes out a VCF-style file (which seems to be minimally handleable @@ -319,66 +344,66 @@ def write_VCF_translation(prot_dict, vcf_file_name, ref_file_name): """ import numpy as np - #for the header + # for the header seqNames = list(prot_dict[list(prot_dict.keys())[0]]['sequences'].keys()) - #prepare the header of the VCF & write out - header=["#CHROM","POS","ID","REF","ALT","QUAL","FILTER","INFO","FORMAT"]+seqNames + # prepare the header of the VCF & write out + header = ["#CHROM", "POS", "ID", "REF", "ALT", "QUAL", "FILTER", "INFO", "FORMAT"] + seqNames with open(vcf_file_name, 'w', encoding='utf-8') as the_file: - the_file.write( "##fileformat=VCFv4.2\n"+ - "##source=NextStrain_Protein_Translation\n"+ - "##FORMAT=\n") - the_file.write("\t".join(header)+"\n") + the_file.write("##fileformat=VCFv4.2\n" + + "##source=NextStrain_Protein_Translation\n" + + "##FORMAT=\n") + the_file.write("\t".join(header) + "\n") refWrite = [] vcfWrite = [] - #go through for every gene/protein + # go through for every gene/protein for fname, prot in prot_dict.items(): sequences = prot['sequences'] ref = prot['reference'] positions = prot['positions'] - #write out the reference fasta - refWrite.append(">"+fname) + # write out the reference fasta + refWrite.append(">" + fname) refWrite.append(ref) - #go through every variable position - #There are no deletions here, so it's simpler than for VCF nuc sequenes! + # go through every variable position + # There are no deletions here, so it's simpler than for VCF nuc sequenes! for pi in positions: - pos = pi+1 #change numbering to match VCF not python - refb = ref[pi] #reference base at this position + pos = pi + 1 # change numbering to match VCF not python + refb = ref[pi] # reference base at this position - #try/except is (much) faster than list comprehension! + # try/except is (much) faster than list comprehension! pattern = [] - for k,v in sequences.items(): + for k, v in sequences.items(): try: pattern.append(sequences[k][pi]) except KeyError: pattern.append('.') pattern = np.array(pattern) - #get the list of ALTs - minus any '.'! + # get the list of ALTs - minus any '.'! uniques = np.unique(pattern) - uniques = uniques[np.where(uniques!='.')] + uniques = uniques[np.where(uniques != '.')] - #Convert bases to the number that matches the ALT - j=1 + # Convert bases to the number that matches the ALT + j = 1 for u in uniques: - pattern[np.where(pattern==u)[0]] = str(j) - j+=1 - #Now convert these calls to #/# (VCF format) - calls = [ j+"/"+j if j!='.' else '.' for j in pattern ] - if len(uniques)==0: + pattern[np.where(pattern == u)[0]] = str(j) + j += 1 + # Now convert these calls to #/# (VCF format) + calls = [j + "/" + j if j != '.' else '.' for j in pattern] + if len(uniques) == 0: print("UNEXPECTED ERROR WHILE CONVERTING TO VCF AT POSITION {}".format(str(pi))) break - #put it all together and write it out + # put it all together and write it out output = [fname, str(pos), ".", refb, ",".join(uniques), ".", "PASS", ".", "GT"] + calls vcfWrite.append("\t".join(output)) - #write it all out + # write it all out with open(ref_file_name, 'w', encoding='utf-8') as the_file: the_file.write("\n".join(refWrite)) @@ -387,13 +412,15 @@ def write_VCF_translation(prot_dict, vcf_file_name, ref_file_name): if vcf_file_name.lower().endswith('.gz'): import os - #must temporarily remove .gz ending, or gzip won't zip it! + # must temporarily remove .gz ending, or gzip won't zip it! os.rename(vcf_file_name, vcf_file_name[:-3]) call = ["gzip", vcf_file_name[:-3]] - run_shell_command(" ".join(call), raise_errors = True) + run_shell_command(" ".join(call), raise_errors=True) + shquote = shlex.quote + def run_shell_command(cmd, raise_errors=False, extra_env=None): """ Run the given command string via Bash with error checking. @@ -562,6 +589,7 @@ def json_to_tree(json_dict, root=True): return node + def get_augur_version(): """ Returns a string of the current augur version. @@ -589,17 +617,18 @@ def read_bed_file(bed_file): """ mask_sites = [] try: - bed = pd.read_csv(bed_file, sep='\t', header=None, usecols=[1,2], - dtype={1:int,2:int}) + bed = pd.read_csv(bed_file, sep='\t', header=None, usecols=[1, 2], + dtype={1: int, 2: int}) except ValueError: # Check if we have a header row. Otherwise, just fail. - bed = pd.read_csv(bed_file, sep='\t', header=None, usecols=[1,2], - dtype={1:int,2:int}, skiprows=1) + bed = pd.read_csv(bed_file, sep='\t', header=None, usecols=[1, 2], + dtype={1: int, 2: int}, skiprows=1) print("Skipped row 1 of %s, assuming it is a header." % bed_file) for _, row in bed.iterrows(): mask_sites.extend(range(row[1], row[2])) return sorted(set(mask_sites)) + def read_mask_file(mask_file): """Read a masking file and return a list of excluded sites. @@ -631,6 +660,7 @@ def read_mask_file(mask_file): raise return sorted(set(mask_sites)) + def load_mask_sites(mask_file): """Load masking sites from either a BED file or a masking file. @@ -651,7 +681,8 @@ def load_mask_sites(mask_file): print("%d masking sites read from %s" % (len(mask_sites), mask_file)) return mask_sites -VALID_NUCLEOTIDES = { # http://reverse-complement.com/ambiguity.html + +VALID_NUCLEOTIDES = { # http://reverse-complement.com/ambiguity.html "A", "G", "C", "T", "U", "N", "R", "Y", "S", "W", "K", "M", "B", "V", "D", "H", "-", "a", "g", "c", "t", "u", "n", "r", "y", "s", "w", "k", "m", "b", "v", "d", "h", "-" } From a2f102abb6d25f8271c25254c8223696642e3e27 Mon Sep 17 00:00:00 2001 From: Venkata Sai Kiran Kollapudi Date: Thu, 29 Oct 2020 23:05:10 +0530 Subject: [PATCH 02/59] removing pep8 changes --- augur/utils.py | 139 +++++++++++++++++++++---------------------------- 1 file changed, 58 insertions(+), 81 deletions(-) diff --git a/augur/utils.py b/augur/utils.py index 8dccbcd45..ec76ed6c7 100644 --- a/augur/utils.py +++ b/augur/utils.py @@ -37,7 +37,6 @@ def open_file(fname, mode): with open(fname, mode, encoding='utf-8') as fh: yield fh - def is_vcf(fname): """Convenience method to check if a file is a vcf file. @@ -50,7 +49,6 @@ def is_vcf(fname): """ return fname.lower().endswith(".vcf") or fname.lower().endswith(".vcf.gz") - def myopen(fname, mode): if fname.endswith('.gz'): import gzip @@ -58,14 +56,12 @@ def myopen(fname, mode): else: return open(fname, mode, encoding='utf-8') - def get_json_name(args, default=None): if args.output_node_data: return args.output_node_data else: if default: - print("WARNING: no name for the output file was specified. Writing results to %s." % default, - file=sys.stderr) + print("WARNING: no name for the output file was specified. Writing results to %s."%default, file=sys.stderr) return default else: raise ValueError("Please specify a name for the JSON file containing the results.") @@ -74,32 +70,29 @@ def get_json_name(args, default=None): def ambiguous_date_to_date_range(uncertain_date, fmt, min_max_year=None): return DateDisambiguator(uncertain_date, fmt=fmt, min_max_year=min_max_year).range() - def read_metadata(fname, query=None): return MetadataFile(fname, query).read() - -def get_numerical_dates(meta_dict, name_col=None, date_col='date', fmt=None, min_max_year=None, - exclude_ambiguous_dates=None): - num_excluede_recs = 0 +def get_numerical_dates(meta_dict, name_col = None, date_col='date', fmt=None, min_max_year=None, exclude_ambiguous_dates=None): + num_excluded_recs = 0 if fmt: from datetime import datetime numerical_dates = {} - for k, m in meta_dict.items(): + for k,m in meta_dict.items(): v = m[date_col] - if type(v) != str: - print("WARNING: %s has an invalid data string:" % k, v) + if type(v)!=str: + print("WARNING: %s has an invalid data string:"%k,v) continue elif 'XX' in v: if (exclude_ambiguous_dates == 'all') or \ (exclude_ambiguous_dates == 'days' and 'XX' in v.split('-')[2]) or \ (exclude_ambiguous_dates == 'months' and 'XX' in v.split('-')[1]): numerical_dates[k] = None - num_excluede_recs += 1 + num_excluded_recs += 1 continue ambig_date = ambiguous_date_to_date_range(v, fmt, min_max_year) if ambig_date is None or None in ambig_date: - numerical_dates[k] = [None, None] # don't send to numeric_date or will be set to today + numerical_dates[k] = [None, None] #don't send to numeric_date or will be set to today else: numerical_dates[k] = [numeric_date(d) for d in ambig_date] else: @@ -108,9 +101,9 @@ def get_numerical_dates(meta_dict, name_col=None, date_col='date', fmt=None, min except: numerical_dates[k] = None else: - numerical_dates = {k: float(v) for k, v in meta_dict.items()} + numerical_dates = {k:float(v) for k,v in meta_dict.items()} if num_excluede_recs: - print("%s records were excluded due to ambiguous data" % num_excluede_recs) + print("%s records were excluded due to ambiguous date"%num_excluded_recs) return numerical_dates @@ -165,8 +158,7 @@ def read_tree(fname, min_terminals=3): # If the tree cannot be loaded, raise an error to that effect. if T is None: raise InvalidTreeError( - "Could not read the given tree %s using the following supported formats: %s" % ( - fname, ", ".join(supported_tree_formats)) + "Could not read the given tree %s using the following supported formats: %s" % (fname, ", ".join(supported_tree_formats)) ) return T @@ -197,12 +189,12 @@ def write_json(data, file_name, indent=(None if os.environ.get("AUGUR_MINIFY_JSO ------ OSError """ - # in case parent folder does not exist yet + #in case parent folder does not exist yet parent_directory = os.path.dirname(file_name) if parent_directory and not os.path.exists(parent_directory): try: os.makedirs(parent_directory) - except OSError: # Guard against race condition + except OSError: #Guard against race condition if not os.path.isdir(parent_directory): raise @@ -214,27 +206,26 @@ def write_json(data, file_name, indent=(None if os.environ.get("AUGUR_MINIFY_JSO def load_features(reference, feature_names=None): - # read in appropriately whether GFF or Genbank - # checks explicitly for GFF otherwise assumes Genbank + #read in appropriately whether GFF or Genbank + #checks explicitly for GFF otherwise assumes Genbank if not os.path.isfile(reference): print("ERROR: reference sequence not found. looking for", reference) return None features = {} if '.gff' in reference.lower(): - # looks for 'gene' and 'gene' as best for TB + #looks for 'gene' and 'gene' as best for TB try: - from BCBio import GFF # Package name is confusing - tell user exactly what they need! + from BCBio import GFF #Package name is confusing - tell user exactly what they need! except ImportError: - print( - "ERROR: Package BCBio.GFF not found! Please install using \'pip install bcbio-gff\' before re-running.") + print("ERROR: Package BCBio.GFF not found! Please install using \'pip install bcbio-gff\' before re-running.") return None - limit_info = dict(gff_type=['gene']) + limit_info = dict( gff_type = ['gene'] ) with open(reference, encoding='utf-8') as in_handle: for rec in GFF.parse(in_handle, limit_info=limit_info): for feat in rec.features: - if feature_names is not None: # check both tags; user may have used either + if feature_names is not None: #check both tags; user may have used either if "gene" in feat.qualifiers and feat.qualifiers["gene"][0] in feature_names: fname = feat.qualifiers["gene"][0] elif "locus_tag" in feat.qualifiers and feat.qualifiers["locus_tag"][0] in feature_names: @@ -257,7 +248,7 @@ def load_features(reference, feature_names=None): else: from Bio import SeqIO for feat in SeqIO.read(reference, 'genbank').features: - if feat.type == 'CDS': + if feat.type=='CDS': if "locus_tag" in feat.qualifiers: fname = feat.qualifiers["locus_tag"][0] if feature_names is None or fname in feature_names: @@ -266,15 +257,14 @@ def load_features(reference, feature_names=None): fname = feat.qualifiers["gene"][0] if feature_names is None or fname in feature_names: features[fname] = feat - elif feat.type == 'source': # read 'nuc' as well for annotations - need start/end of whole! + elif feat.type=='source': #read 'nuc' as well for annotations - need start/end of whole! features['nuc'] = feat return features - def read_config(fname): if not (fname and os.path.isfile(fname)): - print("ERROR: config file %s not found." % fname) + print("ERROR: config file %s not found."%fname) return defaultdict(dict) try: @@ -291,10 +281,8 @@ def read_config(fname): return config - def read_lat_longs(overrides=None, use_defaults=True): coordinates = {} - # TODO: make parsing of tsv files more robust while allow for whitespace delimiting for backwards compatibility def add_line_to_coordinates(line): if line.startswith('#') or line.strip() == "": @@ -308,10 +296,7 @@ def add_line_to_coordinates(line): "longitude": long } else: - print( - "WARNING: geo-coordinate file contains invalid line. Please make sure not to mix tabs and spaces as delimiters (use only tabs):", - line) - + print("WARNING: geo-coordinate file contains invalid line. Please make sure not to mix tabs and spaces as delimiters (use only tabs):",line) if use_defaults: with resource_stream(__package__, "data/lat_longs.tsv") as stream: with TextIOWrapper(stream, "utf-8") as defaults: @@ -326,11 +311,9 @@ def add_line_to_coordinates(line): print("WARNING: input lat/long file %s not found." % overrides) return coordinates - def read_colors(overrides=None, use_defaults=True): return ColorParser(mapping_filename=overrides, use_defaults=use_defaults).mapping - def write_VCF_translation(prot_dict, vcf_file_name, ref_file_name): """ Writes out a VCF-style file (which seems to be minimally handleable @@ -344,66 +327,66 @@ def write_VCF_translation(prot_dict, vcf_file_name, ref_file_name): """ import numpy as np - # for the header + #for the header seqNames = list(prot_dict[list(prot_dict.keys())[0]]['sequences'].keys()) - # prepare the header of the VCF & write out - header = ["#CHROM", "POS", "ID", "REF", "ALT", "QUAL", "FILTER", "INFO", "FORMAT"] + seqNames + #prepare the header of the VCF & write out + header=["#CHROM","POS","ID","REF","ALT","QUAL","FILTER","INFO","FORMAT"]+seqNames with open(vcf_file_name, 'w', encoding='utf-8') as the_file: - the_file.write("##fileformat=VCFv4.2\n" + - "##source=NextStrain_Protein_Translation\n" + - "##FORMAT=\n") - the_file.write("\t".join(header) + "\n") + the_file.write( "##fileformat=VCFv4.2\n"+ + "##source=NextStrain_Protein_Translation\n"+ + "##FORMAT=\n") + the_file.write("\t".join(header)+"\n") refWrite = [] vcfWrite = [] - # go through for every gene/protein + #go through for every gene/protein for fname, prot in prot_dict.items(): sequences = prot['sequences'] ref = prot['reference'] positions = prot['positions'] - # write out the reference fasta - refWrite.append(">" + fname) + #write out the reference fasta + refWrite.append(">"+fname) refWrite.append(ref) - # go through every variable position - # There are no deletions here, so it's simpler than for VCF nuc sequenes! + #go through every variable position + #There are no deletions here, so it's simpler than for VCF nuc sequenes! for pi in positions: - pos = pi + 1 # change numbering to match VCF not python - refb = ref[pi] # reference base at this position + pos = pi+1 #change numbering to match VCF not python + refb = ref[pi] #reference base at this position - # try/except is (much) faster than list comprehension! + #try/except is (much) faster than list comprehension! pattern = [] - for k, v in sequences.items(): + for k,v in sequences.items(): try: pattern.append(sequences[k][pi]) except KeyError: pattern.append('.') pattern = np.array(pattern) - # get the list of ALTs - minus any '.'! + #get the list of ALTs - minus any '.'! uniques = np.unique(pattern) - uniques = uniques[np.where(uniques != '.')] + uniques = uniques[np.where(uniques!='.')] - # Convert bases to the number that matches the ALT - j = 1 + #Convert bases to the number that matches the ALT + j=1 for u in uniques: - pattern[np.where(pattern == u)[0]] = str(j) - j += 1 - # Now convert these calls to #/# (VCF format) - calls = [j + "/" + j if j != '.' else '.' for j in pattern] - if len(uniques) == 0: + pattern[np.where(pattern==u)[0]] = str(j) + j+=1 + #Now convert these calls to #/# (VCF format) + calls = [ j+"/"+j if j!='.' else '.' for j in pattern ] + if len(uniques)==0: print("UNEXPECTED ERROR WHILE CONVERTING TO VCF AT POSITION {}".format(str(pi))) break - # put it all together and write it out + #put it all together and write it out output = [fname, str(pos), ".", refb, ",".join(uniques), ".", "PASS", ".", "GT"] + calls vcfWrite.append("\t".join(output)) - # write it all out + #write it all out with open(ref_file_name, 'w', encoding='utf-8') as the_file: the_file.write("\n".join(refWrite)) @@ -412,15 +395,13 @@ def write_VCF_translation(prot_dict, vcf_file_name, ref_file_name): if vcf_file_name.lower().endswith('.gz'): import os - # must temporarily remove .gz ending, or gzip won't zip it! + #must temporarily remove .gz ending, or gzip won't zip it! os.rename(vcf_file_name, vcf_file_name[:-3]) call = ["gzip", vcf_file_name[:-3]] - run_shell_command(" ".join(call), raise_errors=True) - + run_shell_command(" ".join(call), raise_errors = True) shquote = shlex.quote - def run_shell_command(cmd, raise_errors=False, extra_env=None): """ Run the given command string via Bash with error checking. @@ -589,7 +570,6 @@ def json_to_tree(json_dict, root=True): return node - def get_augur_version(): """ Returns a string of the current augur version. @@ -617,18 +597,17 @@ def read_bed_file(bed_file): """ mask_sites = [] try: - bed = pd.read_csv(bed_file, sep='\t', header=None, usecols=[1, 2], - dtype={1: int, 2: int}) + bed = pd.read_csv(bed_file, sep='\t', header=None, usecols=[1,2], + dtype={1:int,2:int}) except ValueError: # Check if we have a header row. Otherwise, just fail. - bed = pd.read_csv(bed_file, sep='\t', header=None, usecols=[1, 2], - dtype={1: int, 2: int}, skiprows=1) + bed = pd.read_csv(bed_file, sep='\t', header=None, usecols=[1,2], + dtype={1:int,2:int}, skiprows=1) print("Skipped row 1 of %s, assuming it is a header." % bed_file) for _, row in bed.iterrows(): mask_sites.extend(range(row[1], row[2])) return sorted(set(mask_sites)) - def read_mask_file(mask_file): """Read a masking file and return a list of excluded sites. @@ -660,7 +639,6 @@ def read_mask_file(mask_file): raise return sorted(set(mask_sites)) - def load_mask_sites(mask_file): """Load masking sites from either a BED file or a masking file. @@ -681,8 +659,7 @@ def load_mask_sites(mask_file): print("%d masking sites read from %s" % (len(mask_sites), mask_file)) return mask_sites - -VALID_NUCLEOTIDES = { # http://reverse-complement.com/ambiguity.html +VALID_NUCLEOTIDES = { # http://reverse-complement.com/ambiguity.html "A", "G", "C", "T", "U", "N", "R", "Y", "S", "W", "K", "M", "B", "V", "D", "H", "-", "a", "g", "c", "t", "u", "n", "r", "y", "s", "w", "k", "m", "b", "v", "d", "h", "-" } From e24c37442fc4cd5006686dd1f25e0fec6d0b9d27 Mon Sep 17 00:00:00 2001 From: Venkata Sai Kiran Kollapudi Date: Thu, 29 Oct 2020 23:12:16 +0530 Subject: [PATCH 03/59] fixing typo, test fix --- augur/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/augur/utils.py b/augur/utils.py index ec76ed6c7..a36a1ac98 100644 --- a/augur/utils.py +++ b/augur/utils.py @@ -102,7 +102,7 @@ def get_numerical_dates(meta_dict, name_col = None, date_col='date', fmt=None, m numerical_dates[k] = None else: numerical_dates = {k:float(v) for k,v in meta_dict.items()} - if num_excluede_recs: + if num_excluded_recs: print("%s records were excluded due to ambiguous date"%num_excluded_recs) return numerical_dates From 55e5f9b114b8e5ddc91078405af57c3eefd67cc8 Mon Sep 17 00:00:00 2001 From: Venkata Sai Kiran Kollapudi Date: Sun, 1 Nov 2020 12:30:39 +0530 Subject: [PATCH 04/59] Adding testcases --- tests/util_support/test_numeric_dates.py | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 tests/util_support/test_numeric_dates.py diff --git a/tests/util_support/test_numeric_dates.py b/tests/util_support/test_numeric_dates.py new file mode 100644 index 000000000..58e5dfe58 --- /dev/null +++ b/tests/util_support/test_numeric_dates.py @@ -0,0 +1,10 @@ +import unittest + + +class MyTestCase(unittest.TestCase): + def test_something(self): + self.assertEqual(True, False) + + +if __name__ == '__main__': + unittest.main() From 2b2a4f3479465df376304a067b6cd9e20189773d Mon Sep 17 00:00:00 2001 From: Venkata Sai Kiran Kollapudi Date: Sun, 1 Nov 2020 12:40:18 +0530 Subject: [PATCH 05/59] adding testcases --- tests/test_utils.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/test_utils.py b/tests/test_utils.py index 7203e230b..45edcfb5f 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -6,6 +6,7 @@ from augur import utils + class TestUtils: def test_ambiguous_date_to_date_range_not_ambiguous(self): assert utils.ambiguous_date_to_date_range("2000-03-29", "%Y-%m-%d") == ( @@ -100,3 +101,13 @@ def test_read_mask_file_drm_file(self, tmpdir): with open(drm_file, "w") as fh: fh.write("\n".join(drm_lines)) assert utils.read_mask_file(drm_file) == expected_sites + + def test_numeric_dates_exclude_months(self): + meta_dict = {'SEQ1': {"date": "2015-XX-18"}, "SEQ2": {"date": "2019-10-XX"}} + result_dict = utils.get_numerical_dates(meta_dict, fmt='%Y-%m-%d', exclude_ambiguous_dates='months') + assert result_dict == {'SEQ1': None, 'SEQ2': [2019.7493150684932, 2019.831506849315]} + + def test_numeric_dates_exclude_all(self): + meta_dict = {'SEQ1': {"date": "2015-XX-18"}, "SEQ2": {"date": "2019-09-XX"}} + result_dict = utils.get_numerical_dates(meta_dict, fmt='%Y-%m-%d', exclude_ambiguous_dates='all') + assert result_dict == {'SEQ1': None, 'SEQ2': None} From 24782a941a4fc1f554392703ab66f6d5270f2f1c Mon Sep 17 00:00:00 2001 From: Venkata Sai Kiran Kollapudi Date: Sun, 1 Nov 2020 12:42:19 +0530 Subject: [PATCH 06/59] deleting the test_numeric_dates --- tests/util_support/test_numeric_dates.py | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 tests/util_support/test_numeric_dates.py diff --git a/tests/util_support/test_numeric_dates.py b/tests/util_support/test_numeric_dates.py deleted file mode 100644 index 58e5dfe58..000000000 --- a/tests/util_support/test_numeric_dates.py +++ /dev/null @@ -1,10 +0,0 @@ -import unittest - - -class MyTestCase(unittest.TestCase): - def test_something(self): - self.assertEqual(True, False) - - -if __name__ == '__main__': - unittest.main() From 0b3a1f54fd3d98ef1e852f86183f0dadf1418b00 Mon Sep 17 00:00:00 2001 From: Venkata Sai Kiran Kollapudi Date: Sun, 1 Nov 2020 12:46:06 +0530 Subject: [PATCH 07/59] removing new line --- tests/test_utils.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_utils.py b/tests/test_utils.py index 45edcfb5f..e909be121 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -6,7 +6,6 @@ from augur import utils - class TestUtils: def test_ambiguous_date_to_date_range_not_ambiguous(self): assert utils.ambiguous_date_to_date_range("2000-03-29", "%Y-%m-%d") == ( From d1ae8e732e8e60430d9d036f31dedf59e67cc600 Mon Sep 17 00:00:00 2001 From: John Huddleston Date: Fri, 6 Nov 2020 08:53:49 -0800 Subject: [PATCH 08/59] Add first draft of modular augur paper Adds a first draft of the paper with a couple of issues left to be resolved (at least): 1. Fix style of citations (show all authors only when there are two) 2. Define authors, ORC IDs, and institutions 3. Update Figure 1 to represent composability of workflows with non-Augur tools --- paper/README.md | 7 + paper/example-modular-augur-workflows.pdf | Bin 0 -> 239871 bytes paper/paper.bib | 178 ++++++++++++++++++++++ paper/paper.md | 66 ++++++++ 4 files changed, 251 insertions(+) create mode 100644 paper/README.md create mode 100644 paper/example-modular-augur-workflows.pdf create mode 100644 paper/paper.bib create mode 100644 paper/paper.md diff --git a/paper/README.md b/paper/README.md new file mode 100644 index 000000000..392ce8082 --- /dev/null +++ b/paper/README.md @@ -0,0 +1,7 @@ +# Compile paper with pandoc + +Use pandoc to compile the paper. + +```bash +pandoc --citeproc --bibliography=paper.bib -s paper.md -o paper.pdf +``` diff --git a/paper/example-modular-augur-workflows.pdf b/paper/example-modular-augur-workflows.pdf new file mode 100644 index 0000000000000000000000000000000000000000..119d5711b95ebf4c712b72ad6eafc50ce12ef9ad GIT binary patch literal 239871 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

;fITvTb}IpOi6>Wv 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 R{Qi`dm!T98xMiqA`Csbu0a*Y5 literal 0 HcmV?d00001 diff --git a/paper/paper.bib b/paper/paper.bib new file mode 100644 index 000000000..a1d5688d0 --- /dev/null +++ b/paper/paper.bib @@ -0,0 +1,178 @@ +@article{Price2010, + author = {Price, Morgan N. AND Dehal, Paramvir S. AND Arkin, Adam P.}, + journal = {PLOS ONE}, + publisher = {Public Library of Science}, + title = {FastTree 2 – Approximately Maximum-Likelihood Trees for Large Alignments}, + year = {2010}, + month = {03}, + volume = {5}, + url = {https://doi.org/10.1371/journal.pone.0009490}, + pages = {1-10}, + abstract = {Background We recently described FastTree, a tool for inferring phylogenies for alignments with up to hundreds of thousands of sequences. Here, we describe improvements to FastTree that improve its accuracy without sacrificing scalability. Methodology/Principal Findings Where FastTree 1 used nearest-neighbor interchanges (NNIs) and the minimum-evolution criterion to improve the tree, FastTree 2 adds minimum-evolution subtree-pruning-regrafting (SPRs) and maximum-likelihood NNIs. FastTree 2 uses heuristics to restrict the search for better trees and estimates a rate of evolution for each site (the “CAT” approximation). Nevertheless, for both simulated and genuine alignments, FastTree 2 is slightly more accurate than a standard implementation of maximum-likelihood NNIs (PhyML 3 with default settings). Although FastTree 2 is not quite as accurate as methods that use maximum-likelihood SPRs, most of the splits that disagree are poorly supported, and for large alignments, FastTree 2 is 100–1,000 times faster. FastTree 2 inferred a topology and likelihood-based local support values for 237,882 distinct 16S ribosomal RNAs on a desktop computer in 22 hours and 5.8 gigabytes of memory. Conclusions/Significance FastTree 2 allows the inference of maximum-likelihood phylogenies for huge alignments. FastTree 2 is freely available at http://www.microbesonline.org/fasttree.}, + number = {3}, + doi = {10.1371/journal.pone.0009490} +} + +@article{Stamatakis2014, + author = {Stamatakis, Alexandros}, + title = "{RAxML version 8: a tool for phylogenetic analysis and post-analysis of large phylogenies}", + journal = {Bioinformatics}, + volume = {30}, + number = {9}, + pages = {1312-1313}, + year = {2014}, + month = {01}, + abstract = "{Motivation: Phylogenies are increasingly used in all fields of medical and biological research. Moreover, because of the next-generation sequencing revolution, datasets used for conducting phylogenetic analyses grow at an unprecedented pace. RAxML (Randomized Axelerated Maximum Likelihood) is a popular program for phylogenetic analyses of large datasets under maximum likelihood. Since the last RAxML paper in 2006, it has been continuously maintained and extended to accommodate the increasingly growing input datasets and to serve the needs of the user community.Results: I present some of the most notable new features and extensions of RAxML, such as a substantial extension of substitution models and supported data types, the introduction of SSE3, AVX and AVX2 vector intrinsics, techniques for reducing the memory requirements of the code and a plethora of operations for conducting post-analyses on sets of trees. In addition, an up-to-date 50-page user manual covering all new RAxML options is available.Availability and implementation: The code is available under GNU GPL at https://github.com/stamatak/standard-RAxML.Contact:alexandros.stamatakis@h-its.orgSupplementary information:Supplementary data are available at Bioinformatics online.}", + issn = {1367-4803}, + doi = {10.1093/bioinformatics/btu033}, + url = {https://doi.org/10.1093/bioinformatics/btu033}, + eprint = {https://academic.oup.com/bioinformatics/article-pdf/30/9/1312/17345185/btu033.pdf}, +} + +@Article{Black2020, +author={Black, Allison +and MacCannell, Duncan R. +and Sibley, Thomas R. +and Bedford, Trevor}, +title={Ten recommendations for supporting open pathogen genomic analysis in public health}, +journal={Nature Medicine}, +year={2020}, +month={Jun}, +day={01}, +volume={26}, +number={6}, +pages={832-841}, +abstract={Increasingly, public-health agencies are using pathogen genomic sequence data to support surveillance and epidemiological investigations. As access to whole-genome sequencing has grown, greater amounts of molecular data have helped improve the ability to detect and track outbreaks of diseases such as COVID-19, investigate transmission chains and explore large-scale population dynamics, such as the spread of antibiotic resistance. However, the wide adoption of whole-genome sequencing also poses new challenges for public-health agencies that must adapt to support a new set of expertise, which means that the capacity to perform genomic data assembly and analysis has not expanded as widely as the adoption of sequencing itself. In this Perspective, we make recommendations for developing an accessible, unified informatic ecosystem to support pathogen genomic analysis in public-health agencies across income settings. We hope that the creation of this ecosystem will allow agencies to effectively and efficiently share data, workflows and analyses and thereby increase the reproducibility, accessibility and auditability of pathogen genomic analysis while also supporting agency autonomy.}, +issn={1546-170X}, +doi={10.1038/s41591-020-0935-z}, +url={https://doi.org/10.1038/s41591-020-0935-z} +} + +@article {Bedford2020, + author = {Bedford, T. and Greninger, A. L. and Roychoudhury, P. and Starita, L. M. and Famulare, M. and Huang, M. and Nalla, A. and Pepper, G. and Reinhardt, A. and Xie, H. and Shrestha, L. and Nguyen, T. N. and Adler, A. and Brandstetter, E. and Cho, S. and Giroux, D. and Han, P. D. and Fay, K. and Frazar, C. D. and Ilcisin, M. and Lacombe, K. and Lee, J. and Kiavand, A. and Richardson, M. and Sibley, T. R. and Truong, M. and Wolf, C. R. and Nickerson, D. A. and Rieder, M. J. and Englund, J. A. and The Seattle Flu Study Investigators and Hadfield, J. and Hodcroft, E. B. and Huddleston, J. and Moncla, L. H. and M{\"u}ller, N. F. and Neher, R. A. and Deng, X. and Gu, W. and Federman, S. and Chiu, C. and Duchin, J. S. and Gautom, R. and Melly, G. and Hiatt, B. and Dykema, P. and Lindquist, S. and Queen, K. and Tao, Y. and Uehara, A. and Tong, S. and MacCannell, D. and Armstrong, G. L. and Baird, G. S. and Chu, H. Y. and Shendure, J. and Jerome, K. R.}, + title = {Cryptic transmission of {SARS-CoV-2} in {W}ashington state}, + elocation-id = {eabc0523}, + year = {2020}, + month = sep, + doi = {10.1126/science.abc0523}, + publisher = {American Association for the Advancement of Science}, + abstract = {Following its emergence in Wuhan, China, in late November or early December 2019, the SARS-CoV-2 virus has rapidly spread globally. Genome sequencing of SARS-CoV-2 allows reconstruction of its transmission history, although this is contingent on sampling. We have analyzed 453 SARS-CoV-2 genomes collected between 20 February and 15 March 2020 from infected patients in Washington State, USA. We find that most SARS-CoV-2 infections sampled during this time derive from a single introduction in late January or early February 2020 which subsequently spread locally before active community surveillance was implemented.}, + issn = {0036-8075}, + URL = {https://science.sciencemag.org/content/early/2020/09/09/science.abc0523}, + eprint = {https://science.sciencemag.org/content/early/2020/09/09/science.abc0523.full.pdf}, + journal = {Science} +} + +@article{Neher:2015jr, + Author = {Neher, Richard A and Bedford, Trevor}, + Journal = {Bioinformatics}, + Month = nov, + Number = {21}, + Pages = {3546--3548}, + Title = {{nextflu: real-time tracking of seasonal influenza virus evolution in humans.}}, + Volume = {31}, + Year = {2015}} + +@article{Hadfield2018, +author = {Hadfield, J. and Megill, C. and Bell, S. M. and Huddleston, J. and Potter, B. and Callender, C. and Sagulenko, P. and Bedford, T. and Neher, R. A.}, +title = {Nextstrain: real-time tracking of pathogen evolution}, +journal = {Bioinformatics}, +volume = {}, +number = {}, +pages = {bty407}, +year = {2018}, +month = {May}, +doi = {10.1093/bioinformatics/bty407}, +URL = {http://dx.doi.org/10.1093/bioinformatics/bty407}, +eprint = {/oup/backfile/content_public/journal/bioinformatics/pap/10.1093_bioinformatics_bty407/2/bty407.pdf} +} + +@article{Li2009, + author = {Li, Heng and Handsaker, Bob and Wysoker, Alec and Fennell, Tim and Ruan, Jue and Homer, Nils and Marth, Gabor and Abecasis, Goncalo and Durbin, Richard and 1000 Genome Project Data Processing Subgroup}, + title = "{The Sequence Alignment/Map format and SAMtools}", + journal = {Bioinformatics}, + volume = {25}, + number = {16}, + pages = {2078-2079}, + year = {2009}, + month = {06}, + abstract = "{Summary: The Sequence Alignment/Map (SAM) format is a generic alignment format for storing read alignments against reference sequences, supporting short and long reads (up to 128 Mbp) produced by different sequencing platforms. It is flexible in style, compact in size, efficient in random access and is the format in which alignments from the 1000 Genomes Project are released. SAMtools implements various utilities for post-processing alignments in the SAM format, such as indexing, variant caller and alignment viewer, and thus provides universal tools for processing read alignments.Availability:http://samtools.sourceforge.netContact:rd@sanger.ac.uk}", + issn = {1367-4803}, + doi = {10.1093/bioinformatics/btp352}, + url = {https://doi.org/10.1093/bioinformatics/btp352}, + eprint = {https://academic.oup.com/bioinformatics/article-pdf/25/16/2078/531810/btp352.pdf}, +} + +@article{Li2011, + author = {Li, Heng}, + title = "{A statistical framework for SNP calling, mutation discovery, association mapping and population genetical parameter estimation from sequencing data}", + journal = {Bioinformatics}, + volume = {27}, + number = {21}, + pages = {2987-2993}, + year = {2011}, + month = {09}, + abstract = "{Motivation: Most existing methods for DNA sequence analysis rely on accurate sequences or genotypes. However, in applications of the next-generation sequencing (NGS), accurate genotypes may not be easily obtained (e.g. multi-sample low-coverage sequencing or somatic mutation discovery). These applications press for the development of new methods for analyzing sequence data with uncertainty.Results: We present a statistical framework for calling SNPs, discovering somatic mutations, inferring population genetical parameters and performing association tests directly based on sequencing data without explicit genotyping or linkage-based imputation. On real data, we demonstrate that our method achieves comparable accuracy to alternative methods for estimating site allele count, for inferring allele frequency spectrum and for association mapping. We also highlight the necessity of using symmetric datasets for finding somatic mutations and confirm that for discovering rare events, mismapping is frequently the leading source of errors.Availability:http://samtools.sourceforge.netContact:hengli@broadinstitute.org}", + issn = {1367-4803}, + doi = {10.1093/bioinformatics/btr509}, + url = {https://doi.org/10.1093/bioinformatics/btr509}, + eprint = {https://academic.oup.com/bioinformatics/article-pdf/27/21/2987/577342/btr509.pdf}, +} + +@article{Katoh2002, + author = {Katoh, Kazutaka and Misawa, Kazuharu and Kuma, Kei‐ichi and Miyata, Takashi}, + title = "{MAFFT: a novel method for rapid multiple sequence alignment based on fast Fourier transform}", + journal = {Nucleic Acids Research}, + volume = {30}, + number = {14}, + pages = {3059-3066}, + year = {2002}, + month = {07}, + abstract = "{A multiple sequence alignment program, MAFFT, has been developed. The CPU time is drastically reduced as compared with existing methods. MAFFT includes two novel techniques. (i) Homo logous regions are rapidly identified by the fast Fourier transform (FFT), in which an amino acid sequence is converted to a sequence composed of volume and polarity values of each amino acid residue. (ii) We propose a simplified scoring system that performs well for reducing CPU time and increasing the accuracy of alignments even for sequences having large insertions or extensions as well as distantly related sequences of similar length. Two different heuristics, the progressive method (FFT‐NS‐2) and the iterative refinement method (FFT‐NS‐i), are implemented in MAFFT. The performances of FFT‐NS‐2 and FFT‐NS‐i were compared with other methods by computer simulations and benchmark tests; the CPU time of FFT‐NS‐2 is drastically reduced as compared with CLUSTALW with comparable accuracy. FFT‐NS‐i is over 100 times faster than T‐COFFEE, when the number of input sequences exceeds 60, without sacrificing the accuracy.}", + issn = {0305-1048}, + doi = {10.1093/nar/gkf436}, + url = {https://doi.org/10.1093/nar/gkf436}, + eprint = {http://oup.prod.sis.lan/nar/article-pdf/30/14/3059/9488148/gkf436.pdf}, +} + +@article{Nguyen2014, + author = {Nguyen, Lam-Tung and Schmidt, Heiko A. and von Haeseler, Arndt and Minh, Bui Quang}, + title = "{IQ-TREE: A Fast and Effective Stochastic Algorithm for Estimating Maximum-Likelihood Phylogenies}", + journal = {Molecular Biology and Evolution}, + volume = {32}, + number = {1}, + pages = {268-274}, + year = {2014}, + month = {11}, + abstract = "{Large phylogenomics data sets require fast tree inference methods, especially for maximum-likelihood (ML) phylogenies. Fast programs exist, but due to inherent heuristics to find optimal trees, it is not clear whether the best tree is found. Thus, there is need for additional approaches that employ different search strategies to find ML trees and that are at the same time as fast as currently available ML programs. We show that a combination of hill-climbing approaches and a stochastic perturbation method can be time-efficiently implemented. If we allow the same CPU time as RAxML and PhyML, then our software IQ-TREE found higher likelihoods between 62.2\\% and 87.1\\% of the studied alignments, thus efficiently exploring the tree-space. If we use the IQ-TREE stopping rule, RAxML and PhyML are faster in 75.7\\% and 47.1\\% of the DNA alignments and 42.2\\% and 100\\% of the protein alignments, respectively. However, the range of obtaining higher likelihoods with IQ-TREE improves to 73.3–97.1\\%. IQ-TREE is freely available at http://www.cibiv.at/software/iqtree.}", + issn = {0737-4038}, + doi = {10.1093/molbev/msu300}, + url = {https://doi.org/10.1093/molbev/msu300}, + eprint = {http://oup.prod.sis.lan/mbe/article-pdf/32/1/268/13171186/msu300.pdf}, +} + +@article{Snakemake, +author = {K{\"o}ster, Johannes and Rahmann, Sven}, +title = {{Snakemake—a scalable bioinformatics workflow engine}}, +journal = {Bioinformatics}, +year = {2012}, +volume = {28}, +number = {19}, +pages = {2520--2522}, +month = aug +} + +@article{Sagulenko2018, + author = {Sagulenko, Pavel and Puller, Vadim and Neher, Richard A}, + title = "{TreeTime: Maximum-likelihood phylodynamic analysis}", + journal = {Virus Evolution}, + volume = {4}, + number = {1}, + year = {2018}, + month = {01}, + abstract = "{Mutations that accumulate in the genome of cells or viruses can be used to infer their evolutionary history. In the case of rapidly evolving organisms, genomes can reveal their detailed spatiotemporal spread. Such phylodynamic analyses are particularly useful to understand the epidemiology of rapidly evolving viral pathogens. As the number of genome sequences available for different pathogens has increased dramatically over the last years, phylodynamic analysis with traditional methods becomes challenging as these methods scale poorly with growing datasets. Here, we present TreeTime, a Python-based framework for phylodynamic analysis using an approximate Maximum Likelihood approach. TreeTime can estimate ancestral states, infer evolution models, reroot trees to maximize temporal signals, estimate molecular clock phylogenies and population size histories. The runtime of TreeTime scales linearly with dataset size.}", + issn = {2057-1577}, + doi = {10.1093/ve/vex042}, + url = {https://doi.org/10.1093/ve/vex042}, + eprint = {http://oup.prod.sis.lan/ve/article-pdf/4/1/vex042/23361340/vex042.pdf}, +} diff --git a/paper/paper.md b/paper/paper.md new file mode 100644 index 000000000..9a3d01ad6 --- /dev/null +++ b/paper/paper.md @@ -0,0 +1,66 @@ +--- +title: "Augur: a bioinformatics toolkit for phylogenetic analyses of human pathogens" +papersize: a4 +tags: + - Python + - bioinformatics + - molecular biology + - human pathogens + - evolutionary biology +date: 5 November 2020 +bibliography: paper.bib +--- + +# Summary and statement of need + +The analysis of human pathogens requires a diverse collection of bioinformatics tools. +These tools include standard genomic and phylogenetic software and custom software developed to handle the relatively numerous and short genomes of viruses and bacteria. +Researchers increasingly depend on the outputs of these tools to infer transmission dynamics of human diseases and make actionable recommendations to public health officials [@Black2020; @Bedford2020]. +Under these circumstances, bioinformatics tools must scale rapidly with the number of disease samples to enable real-time analyses of pathogen evolution. +To meet these needs, we developed Augur, a bioinformatics toolkit designed for phylogenetic analyses of human pathogens. + +Augur originally existed as an internal component of the nextflu [@Neher:2015jr] and Nextstrain [@Hadfield2018] applications. +In its original form, Augur consisted of two monolithic Python scripts, "prepare" and "process", that performed most operations in memory. +These scripts prepared a subset of pathogen sequences and metadata and then processed those data to produce an annotated phylogeny that could be viewed at [Nextstrain](https://nextstrain.org). +The original nextflu scripts only supported seasonal influenza viruses. +When nextflu was replaced with Nextstrain and expanded to support multiple viral and bacterial pathogens, each pathogen received its own copy of the original scripts. +The resulting redundancy of these large scripts complicated efforts to debug analyses, add new features for all pathogens, and add support for new pathogens. +Critically, this software architecture led to long-lived, divergent branches of untested code in version control that Nextstrain team members could not confidently merge without potentially breaking existing analyses. + +# Implementation + +To address these issues, we refactored the original Augur scripts into a toolkit of individual subcommands wrapped by a single command line executable, `augur`. +With this approach, we followed the pattern established by samtools [@Li2009] and bcftools [@Li2011] where subcommands perform single, tightly-scoped tasks (e.g., "view", "sort", "merge", etc.) that can be chained together in bioinformatics pipelines. +We migrated or rewrote the existing functionality of the original Augur scripts into appropriate corresponding Augur subcommands. +To enable interoperability with existing bioinformatics tools, we designed subcommands to accept inputs and produce outputs in standard bioinformatics file formats wherever possible. +For example, we represented all raw sequence data in FASTA format, alignments in either FASTA or VCF format, and phylogenies in Newick format. +To handle the common case where a standard file format could not represent some or all of the outputs produced by an Augur command, we implemented a lightweight JSON schema to store the remaining data. +The "node data" JSON format represents one such Augur-specific file format that supports arbitrary annotations of phylogenies indexed by the name assigned to internal nodes or tips. +To provide a standard interface for our own analyses, we also designed several Augur subcommands to wrap existing bioinformatics tools including `augur align` (mafft [@Katoh2002]), `augur tree` (FastTree [@Price2010], RAxML [@Stamatakis2014], and IQ-TREE [@Nguyen2014]), and `augur refine` (TreeTime [@Sagulenko2018]). + +By implementing the core components of Augur as a command line tool, we were able to rewrite our existing pathogen analyses as straightforward bioinformatics workflows using existing workflow management software like Snakemake [@Snakemake]. +Most pathogen workflows begin with user-curated sequences in a FASTA file (e.g., `sequences.fasta`) and metadata describing each sequence in a tab-delimited text file (e.g., `metadata.tsv`). +Users can apply a series of Augur commands and other standard bioinformatics tools to these files to create annotated phylogenies that can be viewed in Auspice, the web application that serves [Nextstrain](https://nextstrain.org) (\autoref{fig:example-workflows}). +This approach allows users to leverage the distributed computing abilities of workflow managers to run multiple steps of the workflow in parallel and also run individual commands that support multiprocessing in parallel. + +The modular Augur interface has enabled a proliferation of phylogenetic and genomic epidemiological analyses by academic researchers, public health laboratories, and private companies. +Most recently, these tools have supported the real-time tracking of SARS-CoV-2 evolution at global and local scales. +This success has attracted contributions from the open source community that have allowed us to improve Augur's functionality, documentation, and test coverage. +Augur can be installed from PyPI ([nextstrain-augur](https://pypi.org/project/nextstrain-augur/)) and Bioconda ([augur](https://bioconda.github.io/recipes/augur/README.html)). +[See the full documentation](http://docs.nextstrain.org/) for more details about how to use or contribute to development of Augur. + +# Figures + +![Example workflows composed with Snakemake from Augur commands for A) Zika virus and B) tuberculosis. + Each node in the workflow graph represents an Augur command than performs a specific part of the analysis (e.g., aligning sequences, building a tree, etc.). + A typical workflow starts by filtering sequences and metadata to a desired subset for analysis followed by inference of a phylogeny, annotation of that phylogeny, and export of the annotated phylogeny to a JSON that can be viewed on Nextstrain. + Workflows for viral (A) and bacterial (B) pathogens follow a similar structure but also support custom pathogen-specific steps. + Multiple outgoing edges from a single node represent opportunities to run the workflow in parallel. + See the full workflows at [https://github.com/nextstrain/zika-tutorial](https://github.com/nextstrain/zika-tutorial) and [https://github.com/nextstrain/tb](https://github.com/nextstrain/tb).\label{fig:example-workflows}](example-modular-augur-workflows.pdf) + +# Acknowledgments + +Thank you to all of [the open source community members who have contributed to Augur](https://github.com/nextstrain/augur/graphs/contributors). +Thank you to Dan Fornika from BCCDC Public Health Laboratory for creating the first conda recipe for Augur in Bioconda. + +# References From d7b7d2ffabaf37668b21ddf15726e2afa974f8f3 Mon Sep 17 00:00:00 2001 From: Venkata Sai Kiran Kollapudi Date: Sat, 7 Nov 2020 13:08:19 +0530 Subject: [PATCH 09/59] moving ambiguous date logic to separate method --- augur/filter.py | 26 ++++++++++++++++++++++---- augur/utils.py | 27 ++++++++++++++++++++------- tests/test_utils.py | 20 ++++++++++++-------- 3 files changed, 54 insertions(+), 19 deletions(-) diff --git a/augur/filter.py b/augur/filter.py index a0d15522f..817f0cd92 100644 --- a/augur/filter.py +++ b/augur/filter.py @@ -10,7 +10,7 @@ import sys import datetime import treetime.utils -from .utils import read_metadata, get_numerical_dates, run_shell_command, shquote +from .utils import read_metadata, get_numerical_dates, run_shell_command, shquote, is_date_ambiguous comment_char = '#' @@ -105,8 +105,8 @@ def register_arguments(parser): help="Exclude samples matching these conditions. Ex: \"host=rat\" or \"host!=rat\". Multiple values are processed as OR (matching any of those specified will be excluded), not AND") parser.add_argument('--include-where', nargs='+', help="Include samples with these values. ex: host=rat. Multiple values are processed as OR (having any of those specified will be included), not AND. This rule is applied last and ensures any sequences matching these rules will be included.") - parser.add_argument('--exclude-ambiguous-dates', choices=['all', 'days', 'months'], - help='Exclude ambiguous dates Ex: days - excludes 2020-09-XX, months - exclueds 2020-xx-19, all - excludes any ambiguous dates') + parser.add_argument('--exclude-ambiguous-dates-by', choices=['all', 'day', 'month', 'year'], + help='Exclude ambiguous dates Ex: days - excludes 2020-09-XX, months - excludes 2020-xx-19, all - excludes any ambiguous dates') parser.add_argument('--query', help="Filter samples by attribute. Uses Pandas Dataframe querying, see https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#indexing-query for syntax.") parser.add_argument('--output', '-o', help="output file", required=True) @@ -233,10 +233,26 @@ def run(args): num_excluded_by_length = len(seq_keep) - len(seq_keep_by_length) seq_keep = seq_keep_by_length + # filter by ambiguous dates + num_excluded_by_ambiguous_date = 0 + if args.exclude_ambiguous_dates_by and 'date' in meta_columns: + seq_keep_by_date = [] + for seq_name in seq_keep: + if is_date_ambiguous(meta_dict[seq_name]['date'],args.exclude_ambiguous_dates_by) is False: + seq_keep_by_date.append(seq_name) + num_excluded_by_ambiguous_date = len(seq_keep) - len(seq_keep_by_date) + seq_keep = seq_keep_by_date + # filter by date num_excluded_by_date = 0 if (args.min_date or args.max_date) and 'date' in meta_columns: - dates = get_numerical_dates(meta_dict, fmt="%Y-%m-%d", exclude_ambiguous_dates=args.exclude_ambiguous_dates) + if num_excluded_by_ambiguous_date: + date_meta_dict = {} + for seq_name in seq_keep: + date_meta_dict[seq_name]=meta_dict[seq_name] + dates = get_numerical_dates(date_meta_dict, fmt="%Y-%m-%d") + else: + dates = get_numerical_dates(meta_dict, fmt="%Y-%m-%d") tmp = [s for s in seq_keep if dates[s] is not None] if args.min_date: tmp = [s for s in tmp if (np.isscalar(dates[s]) or all(dates[s])) and np.max(dates[s])>args.min_date] @@ -412,6 +428,8 @@ def run(args): print("\t%i of these were filtered out by the query:\n\t\t\"%s\"" % (num_excluded_by_query, args.query)) if args.min_length: print("\t%i of these were dropped because they were shorter than minimum length of %sbp" % (num_excluded_by_length, args.min_length)) + if args.exclude_ambiguous_dates_by and num_excluded_by_ambiguous_date: + print("\t%i of these were dropped because of their ambiguous date in %s" % (num_excluded_by_ambiguous_date, args.exclude_ambiguous_dates_by)) if (args.min_date or args.max_date) and 'date' in meta_columns: print("\t%i of these were dropped because of their date (or lack of date)" % (num_excluded_by_date)) if args.non_nucleotide: diff --git a/augur/utils.py b/augur/utils.py index a36a1ac98..9a2475bf3 100644 --- a/augur/utils.py +++ b/augur/utils.py @@ -73,7 +73,26 @@ def ambiguous_date_to_date_range(uncertain_date, fmt, min_max_year=None): def read_metadata(fname, query=None): return MetadataFile(fname, query).read() -def get_numerical_dates(meta_dict, name_col = None, date_col='date', fmt=None, min_max_year=None, exclude_ambiguous_dates=None): +def is_date_ambiguous(date, ambiguous_by="all"): + """ + Returns whether a given date string in the format of YYYY-MM-DD is ambiguous by a given part of the date (e.g., day, month, year, or all parts). + + Parameters + ---------- + date : str + Date string in the format of YYYY-MM-DD + ambiguous_by : str + Field of the date string to test for ambiguity ("day", "month", "year", "all") + """ + year, month, day = date.split('-') + return ( + (ambiguous_by == 'all' and 'X' in date) or + (ambiguous_by == 'day' and 'X' in day) or + (ambiguous_by == 'month' and 'X' in month) or + (ambiguous_by == 'year' and 'X' in year) + ) + +def get_numerical_dates(meta_dict, name_col = None, date_col='date', fmt=None, min_max_year=None): num_excluded_recs = 0 if fmt: from datetime import datetime @@ -84,12 +103,6 @@ def get_numerical_dates(meta_dict, name_col = None, date_col='date', fmt=None, m print("WARNING: %s has an invalid data string:"%k,v) continue elif 'XX' in v: - if (exclude_ambiguous_dates == 'all') or \ - (exclude_ambiguous_dates == 'days' and 'XX' in v.split('-')[2]) or \ - (exclude_ambiguous_dates == 'months' and 'XX' in v.split('-')[1]): - numerical_dates[k] = None - num_excluded_recs += 1 - continue ambig_date = ambiguous_date_to_date_range(v, fmt, min_max_year) if ambig_date is None or None in ambig_date: numerical_dates[k] = [None, None] #don't send to numeric_date or will be set to today diff --git a/tests/test_utils.py b/tests/test_utils.py index e909be121..7de887fd0 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -101,12 +101,16 @@ def test_read_mask_file_drm_file(self, tmpdir): fh.write("\n".join(drm_lines)) assert utils.read_mask_file(drm_file) == expected_sites - def test_numeric_dates_exclude_months(self): - meta_dict = {'SEQ1': {"date": "2015-XX-18"}, "SEQ2": {"date": "2019-10-XX"}} - result_dict = utils.get_numerical_dates(meta_dict, fmt='%Y-%m-%d', exclude_ambiguous_dates='months') - assert result_dict == {'SEQ1': None, 'SEQ2': [2019.7493150684932, 2019.831506849315]} + def test_is_date_ambiguous(self): + """ is_date_ambiguous should return true for ambiguous dates""" + assert utils.is_date_ambiguous("2019-0X-0X", "all") + assert utils.is_date_ambiguous("2019-XX-09", "month") + assert utils.is_date_ambiguous("2019-03-XX", "day") + assert utils.is_date_ambiguous("201X-03-09", "year") - def test_numeric_dates_exclude_all(self): - meta_dict = {'SEQ1': {"date": "2015-XX-18"}, "SEQ2": {"date": "2019-09-XX"}} - result_dict = utils.get_numerical_dates(meta_dict, fmt='%Y-%m-%d', exclude_ambiguous_dates='all') - assert result_dict == {'SEQ1': None, 'SEQ2': None} + def test_not_is_date_ambiguous(self): + """ is_date_ambiguous should return false for valid dates""" + assert utils.is_date_ambiguous("2019-09-03", "all") is False + assert utils.is_date_ambiguous("2019-03-XX", "month") is False + assert utils.is_date_ambiguous("2019-XX-01", "day") is False + assert utils.is_date_ambiguous("2019-XX-XX", "year") is False From 8214c75f3b844db555ab0a5be911e1db1339fc1a Mon Sep 17 00:00:00 2001 From: Richard Neher Date: Mon, 9 Nov 2020 21:52:23 +0100 Subject: [PATCH 10/59] manuscript: added references, some wording --- paper/paper.bib | 52 +++++++++++++++++++++++++++++++++++++++++++++++++ paper/paper.md | 13 +++++++------ 2 files changed, 59 insertions(+), 6 deletions(-) diff --git a/paper/paper.bib b/paper/paper.bib index a1d5688d0..04e8f9b71 100644 --- a/paper/paper.bib +++ b/paper/paper.bib @@ -1,3 +1,55 @@ + +@misc{NextstrainNcov2020, + title = {nextstrain/ncov}, + copyright = {MIT License}, + url = {https://github.com/nextstrain/ncov}, + abstract = {Nextstrain build for novel coronavirus SARS-CoV-2}, + urldate = {2020-11-09}, + author = {{The Nextstrain Team}}, + month = nov, + year = {2020}, + note = {original-date: 2020-01-19T17:23:17Z}, + keywords = {ncov, nextstrain, sars-cov-2} +} + + +@article{Alm2020, + title = {Geographical and temporal distribution of {SARS}-{CoV}-2 clades in the {WHO} {European} {Region}, {January} to {June} 2020}, + volume = {25}, + issn = {1560-7917}, + url = {https://www.eurosurveillance.org/content/10.2807/1560-7917.ES.2020.25.32.2001410}, + doi = {10.2807/1560-7917.ES.2020.25.32.2001410}, + abstract = {We show the distribution of severe acute respiratory syndrome coronavirus-2 (SARS-CoV-2) genetic clades over time and between countries and outline potential genomic surveillance objectives. We applied three genomic nomenclature systems to all sequence data from the World Health Organization European Region available until 10 July 2020. We highlight the importance of real-time sequencing and data dissemination in a pandemic situation, compare the nomenclatures and lay a foundation for future European genomic surveillance of SARS-CoV-2.}, + language = {en}, + number = {32}, + urldate = {2020-08-26}, + journal = {Eurosurveillance}, + author = {Alm, Erik and Broberg, Eeva K. and Connor, Thomas and Hodcroft, Emma B. and Komissarov, Andrey B. and Maurer-Stroh, Sebastian and Melidou, Angeliki and Neher, Richard A. and O’Toole, Áine and Pereyaslov, Dmitriy and Group, The WHO European Region sequencing laboratories {and} GISAID EpiCoV}, + month = aug, + year = {2020}, + note = {Publisher: European Centre for Disease Prevention and Control}, + pages = {2001410} +} + + +@article{Gardy2015, + title = {Real-time digital pathogen surveillance — the time is now}, + volume = {16}, + issn = {1474-760X}, + url = {https://doi.org/10.1186/s13059-015-0726-x}, + doi = {10.1186/s13059-015-0726-x}, + abstract = {It is time to shake up public health surveillance. New technologies for sequencing, aided by friction-free approaches to data sharing, could have an impact on public health efforts.}, + urldate = {2018-01-08}, + journal = {Genome Biology}, + author = {Gardy, Jennifer and Loman, Nicholas J. and Rambaut, Andrew}, + month = jul, + year = {2015}, + keywords = {Ebola, Real-time whole-genome sequencing, Surveillance, Salmonella}, + pages = {155}, + annote = {Pages 155 in PDF}, +} + + @article{Price2010, author = {Price, Morgan N. AND Dehal, Paramvir S. AND Arkin, Adam P.}, journal = {PLOS ONE}, diff --git a/paper/paper.md b/paper/paper.md index 9a3d01ad6..82ffb00b9 100644 --- a/paper/paper.md +++ b/paper/paper.md @@ -15,16 +15,16 @@ bibliography: paper.bib The analysis of human pathogens requires a diverse collection of bioinformatics tools. These tools include standard genomic and phylogenetic software and custom software developed to handle the relatively numerous and short genomes of viruses and bacteria. -Researchers increasingly depend on the outputs of these tools to infer transmission dynamics of human diseases and make actionable recommendations to public health officials [@Black2020; @Bedford2020]. +Researchers increasingly depend on the outputs of these tools to infer transmission dynamics of human diseases and make actionable recommendations to public health officials [@Black2020; @Gardy2015]. Under these circumstances, bioinformatics tools must scale rapidly with the number of disease samples to enable real-time analyses of pathogen evolution. To meet these needs, we developed Augur, a bioinformatics toolkit designed for phylogenetic analyses of human pathogens. Augur originally existed as an internal component of the nextflu [@Neher:2015jr] and Nextstrain [@Hadfield2018] applications. -In its original form, Augur consisted of two monolithic Python scripts, "prepare" and "process", that performed most operations in memory. -These scripts prepared a subset of pathogen sequences and metadata and then processed those data to produce an annotated phylogeny that could be viewed at [Nextstrain](https://nextstrain.org). The original nextflu scripts only supported seasonal influenza viruses. When nextflu was replaced with Nextstrain and expanded to support multiple viral and bacterial pathogens, each pathogen received its own copy of the original scripts. The resulting redundancy of these large scripts complicated efforts to debug analyses, add new features for all pathogens, and add support for new pathogens. +In its original form, Augur consisted of two monolithic Python scripts, "prepare" and "process", that performed most operations in memory. +These scripts prepared a subset of pathogen sequences and metadata and then processed those data to produce an annotated phylogeny that could be viewed at [Nextstrain](https://nextstrain.org). Critically, this software architecture led to long-lived, divergent branches of untested code in version control that Nextstrain team members could not confidently merge without potentially breaking existing analyses. # Implementation @@ -36,15 +36,16 @@ To enable interoperability with existing bioinformatics tools, we designed subco For example, we represented all raw sequence data in FASTA format, alignments in either FASTA or VCF format, and phylogenies in Newick format. To handle the common case where a standard file format could not represent some or all of the outputs produced by an Augur command, we implemented a lightweight JSON schema to store the remaining data. The "node data" JSON format represents one such Augur-specific file format that supports arbitrary annotations of phylogenies indexed by the name assigned to internal nodes or tips. -To provide a standard interface for our own analyses, we also designed several Augur subcommands to wrap existing bioinformatics tools including `augur align` (mafft [@Katoh2002]), `augur tree` (FastTree [@Price2010], RAxML [@Stamatakis2014], and IQ-TREE [@Nguyen2014]), and `augur refine` (TreeTime [@Sagulenko2018]). +To provide a standard interface for our own analyses, we also designed several Augur subcommands to wrap existing bioinformatics tools including `augur align` (mafft [@Katoh2002]) and `augur tree` (FastTree [@Price2010], RAxML [@Stamatakis2014], and IQ-TREE [@Nguyen2014]). +Many commands including `augur refine`, `traits` and `ancestral` make extensive use of TreeTime [@Sagulenko2018] to provide time-scaled phylogenetic trees or further annotate the phylogeny. By implementing the core components of Augur as a command line tool, we were able to rewrite our existing pathogen analyses as straightforward bioinformatics workflows using existing workflow management software like Snakemake [@Snakemake]. Most pathogen workflows begin with user-curated sequences in a FASTA file (e.g., `sequences.fasta`) and metadata describing each sequence in a tab-delimited text file (e.g., `metadata.tsv`). Users can apply a series of Augur commands and other standard bioinformatics tools to these files to create annotated phylogenies that can be viewed in Auspice, the web application that serves [Nextstrain](https://nextstrain.org) (\autoref{fig:example-workflows}). This approach allows users to leverage the distributed computing abilities of workflow managers to run multiple steps of the workflow in parallel and also run individual commands that support multiprocessing in parallel. -The modular Augur interface has enabled a proliferation of phylogenetic and genomic epidemiological analyses by academic researchers, public health laboratories, and private companies. -Most recently, these tools have supported the real-time tracking of SARS-CoV-2 evolution at global and local scales. +The modular Augur interface has enabled phylogenetic and genomic epidemiological analyses by academic researchers, public health laboratories, and private companies. +Most recently, these tools have supported the real-time tracking of SARS-CoV-2 evolution at global and local scales [@NextstrainNcov2020, @Bedford2020, @Alm2020]. This success has attracted contributions from the open source community that have allowed us to improve Augur's functionality, documentation, and test coverage. Augur can be installed from PyPI ([nextstrain-augur](https://pypi.org/project/nextstrain-augur/)) and Bioconda ([augur](https://bioconda.github.io/recipes/augur/README.html)). [See the full documentation](http://docs.nextstrain.org/) for more details about how to use or contribute to development of Augur. From 6d738c3b814ef49717021c53412ca6276a125991 Mon Sep 17 00:00:00 2001 From: John Huddleston Date: Mon, 9 Nov 2020 15:57:28 -0800 Subject: [PATCH 11/59] Build workflow figure with dot language Replaces the hardcoded PDF figure for the manuscript with a figure generated by a Makefile using the dot executable from the Graphviz library and a single dot file with both Zika and TB workflows represented as subgraphs. This approach allows us to easily modify aspects of the figure by modifying the dot source instead of modifying static PDFs and automatically annotate subfigure labels (A and B). Adding a Makefile also makes recompiling the paper easier. Along with the Makefile, this commit updates the README to include instructions for making a conda environment with the dependencies required to compile the manucript. --- paper/Makefile | 10 ++++ paper/README.md | 13 ++++- paper/example-modular-augur-workflows.dot | 66 ++++++++++++++++++++++ paper/example-modular-augur-workflows.pdf | Bin 239871 -> 18742 bytes 4 files changed, 87 insertions(+), 2 deletions(-) create mode 100644 paper/Makefile create mode 100644 paper/example-modular-augur-workflows.dot diff --git a/paper/Makefile b/paper/Makefile new file mode 100644 index 000000000..1a76885a0 --- /dev/null +++ b/paper/Makefile @@ -0,0 +1,10 @@ +all : paper.pdf + +paper.pdf : paper.md paper.bib example-modular-augur-workflows.pdf + pandoc --citeproc --bibliography=paper.bib -s $< -o $@ + +example-modular-augur-workflows.pdf : example-modular-augur-workflows.dot + dot -Tpdf $< > $@ + +clean : + rm -f paper.pdf example-modular-augur-workflows.pdf diff --git a/paper/README.md b/paper/README.md index 392ce8082..c09d194da 100644 --- a/paper/README.md +++ b/paper/README.md @@ -1,7 +1,16 @@ -# Compile paper with pandoc +# Augur manuscript + +## Setup + +``` bash +conda create -n augur-manuscript graphviz pandoc +conda activate augur-manuscript +``` + +## Compile manuscript Use pandoc to compile the paper. ```bash -pandoc --citeproc --bibliography=paper.bib -s paper.md -o paper.pdf +make ``` diff --git a/paper/example-modular-augur-workflows.dot b/paper/example-modular-augur-workflows.dot new file mode 100644 index 000000000..60012f73d --- /dev/null +++ b/paper/example-modular-augur-workflows.dot @@ -0,0 +1,66 @@ +digraph G { + graph[margin=0]; + + subgraph cluster_zika_snakemake_dag { + graph[bgcolor=white, color=white, margin=0, center=true, label="A ", labeljus=left, labelloc=top, fontsize=20, size=4.25]; + node[shape=box, style=rounded, fontname=sans, fontsize=12, penwidth=2]; + edge[penwidth=2, color=grey]; + z1[label = "export", color = "0.27 0.6 0.85", style="rounded"]; + z2[label = "refine", color = "0.60 0.6 0.85", style="rounded"]; + z3[label = "traits", color = "0.07 0.6 0.85", style="rounded"]; + z4[label = "ancestral", color = "0.40 0.6 0.85", style="rounded"]; + z5[label = "translate", color = "0.33 0.6 0.85", style="rounded"]; + z6[label = "tree", color = "0.13 0.6 0.85", style="rounded"]; + z7[label = "align", color = "0.00 0.6 0.85", style="rounded"]; + z8[label = "filter", color = "0.53 0.6 0.85", style="rounded"]; + z2 -> z1 + z3 -> z1 + z4 -> z1 + z5 -> z1 + z6 -> z2 + z7 -> z2 + z2 -> z3 + z2 -> z4 + z7 -> z4 + z2 -> z5 + z4 -> z5 + z7 -> z6 + z8 -> z7 + } + + subgraph cluster_tb_snakemake_dag { + graph[bgcolor=white, color=white, margin=0, center=true, label="B ", labeljus=left, labelloc=top, fontsize=20, size=4.25]; + node[shape=box, style=rounded, fontname=sans, fontsize=12, penwidth=2]; + edge[penwidth=2, color=grey]; + t1[label = "export", color = "0.22 0.6 0.85", style="rounded"]; + t2[label = "refine", color = "0.28 0.6 0.85", style="rounded"]; + t3[label = "traits", color = "0.00 0.6 0.85", style="rounded"]; + t4[label = "ancestral", color = "0.33 0.6 0.85", style="rounded"]; + t5[label = "translate", color = "0.44 0.6 0.85", style="rounded"]; + t6[label = "seqtraits", color = "0.56 0.6 0.85", style="rounded"]; + t7[label = "clades", color = "0.06 0.6 0.85", style="rounded"]; + t8[label = "tree", color = "0.17 0.6 0.85", style="rounded"]; + t9[label = "mask", color = "0.39 0.6 0.85", style="rounded"]; + t10[label = "filter", color = "0.50 0.6 0.85", style="rounded"]; + t2 -> t1 + t3 -> t1 + t4 -> t1 + t5 -> t1 + t6 -> t1 + t7 -> t1 + t8 -> t2 + t9 -> t2 + t2 -> t3 + t2 -> t4 + t9 -> t4 + t2 -> t5 + t4 -> t5 + t4 -> t6 + t5 -> t6 + t2 -> t7 + t5 -> t7 + t4 -> t7 + t9 -> t8 + t10 -> t9 + } +} diff --git a/paper/example-modular-augur-workflows.pdf b/paper/example-modular-augur-workflows.pdf index 119d5711b95ebf4c712b72ad6eafc50ce12ef9ad..b2592418a456369105b69a9edffee439bd95bf08 100644 GIT binary patch literal 18742 zcmcJ%1y~%*);5Y0+}$R)!{APU;1b;33GNWwHNk?ry99y-m*50<2<{Txy-V*oO;!&B5AR@}j}0+<1|hHv5d_y9~YCN^eH z<^VR3ND&?Y05FMJSUH(Efc{$fcXVf`;5TlCV)ogB{*Tx3+4{SI4$d|&6` zY)$Rahvqh`Tr@mpToTiZd>T|1?x?U8?{o$MIGr{Hu*2kxY`}NGyg~i*YwWZs{ zsSx)1s$0!zCPmx4ris@dFqT_1A-oT?B_xe{3+3yZx6r56-V7#Iw%O@%m7VTgoX&A( zw%x{%d4KTSytjS2VyC=WFI~sJDu+_*whvw5QoADH`nIZu*V;tUWitrmNV6Nf#)wnz z*}aRlpSJPRq?#USH?Y=`h$y|1Y-dL%fEY!1WQ4*${6NlN4|C6t*tZ+CQgyp?K}bgf z6&_q#um-lBd90uGhLl_+Zn^9Bs>UdI;}|?EAi2(Y+wf}LsmuEdO56Q;X8jMr%)$VS z4zv>+H(^X!dVKrDH@vE#w#tPhXu#wEc1Dmd!B7T$Igs&Q#yh5bjk)nNkHK&o)n)hR z_qPMSR+5!r&LjH3xgyrBZ*%&1|59a7`h2(1@!j3Aro;7B=FxJQo>#5+&G71j&kqtk z{`*t!hrNrg{h4p^j~BNWGy6*@8b^j`oWbpTlad`&N~9S8jr|(%4&V2 z#&6=9IqrLYd1KiPKIVla*>^SK3+xm<5*p)*V~%#a_qf+H4ze&>`d<Y&H zK*E`UUCjj^S7-qNbIgHY9_I!c)|L1#ayk|4vD0T?o#Oev=6Q)KgAVukD|!3`8XKn{ zQUIKyUp}9Pr(BhA&&Bm#21ePH?GGQfr=vLXe5}QMsC;Z2LJq0oF6)rcuS(x(8PQXhwR=qpt0kqnRNE1lo?_Q*=5d;y z@=~wjw=v+MpF;1FDyjm=EhB?p(bp3pM0hh3Qzk6J)wM-g$YITE1Cp$vTW70I9D)^) z9|*0TF-j-MyFr`kWae?ZWR#35kg-H3Nut25QDiII&bK~zHi-H)&wL6d+-@4p{@7SE=zuN!A zdJ4^*%fRSB0G^ODIKaN!QmK=8V3|ISa01tWpUJm`3f%$`(=Rn!U08VBEZnw4if+){ zh1$?hJ!%*E@G2PBXJt=u5fkMVQ&$y1qVlXG%<{KOJ}doBVuO8%xLD=)jJXP4*Z5sWHwv=C-1yv_C`^bP!^hIs9QlgVbsJfB0c-)5_25zG9 z_FKGH<5PjJ)G+SBUwzgdLWO{$1TFs$H$qr3k^0#FU9TJZXpHSvte}QK>))8%J{XSH zlFrE9a3i?e7-Rwbtls-czAm~dlk~o3vy`dt_K2E#6J{3;CWDM3ePZ(Al_Q~}Vmq=W z5t^QugxYDn1RgHD;g_-nAH&YIFQ=bgBJ&Tb+Y6=OO5-wyx){iBxRJsS%PN3PkNAc` zpoT+468q7Qyn3PkB>~);k5|Eusgnsg)jgLbUJgxmCokc@T7UTmZg zsw{tmt3!_Y^3gFxT?PRaJzmw-`>OTJ8q=4~P;qVQi+~zxuKw zQ40H-o8gW2ye!T0w^*ldO)|w8Bc&Q;(;|~sMP-CczD*6VV4F#?YnJ>P>NxBEVJysHSCjkVPs?%`@0=5ep`KR6$wF)iC>c`utS|;Cm z(afMV0(eUOplcDNYQUilf}zPwt=%R=QFsfW-vFX?;|;%mU^Nty&X~kwU5REIFR7 zI2w*A#TKwA$!N`5?(6Wu!lUnkZfkP)k$@HqcHad(y1PEa_W>Ja&QAyzNgtL&p9W!1+B5lBNRQAKD)kWhyk6BZkBm8Se;F9r6|6 zUdVQJFDg`+^TMdkgEl}W13BmkHtgsae2094^-aWF?O}gM2X7hnPn4gM8<^=>qB^!d z2m;o<5)z^o9+R|}%K8Y?;~%GBBE~I3ng&%(O+_POdto&C^tmFzdY$M@O**SCw900U z0<&q@E)PPkX=4oDibkBC-hXf%Z({$d4FrFUKU3m7tem2JI}}RrWnerB>NxypmVMI| zt5;&=eH1n&_B=OVUxj60?ThJ!sb=P76LtOixK@afmPnkXuxbiflkA|E+IuhT3i=YR zBk4=&z9Dc7zIrj~MKY>e#8lZmc-ZXI&RW9#bkB(x(tG!VSYQh1azig_*+^?@Q9=aO zErDvqhx3(oZ@@&rEG%?jj)_xBd)CZyXKu*>d|FAJ(j@7+2+ZM;G7ybJXKab#rDjJk zyI$T{TEwBZ*-38m9rfqxvrhAf<+)jtPIQ;+^Ko2Mmd}1G;v+?6^5Ce{FsceA-_|z$ za=hrk8X0RNUwtyeHgF=qrj9k3t&2T^ z>(mg^pgcw*>VaHq<;DOJ={`3Snl-}s0jmbl42laaNhPEEQ&>k#Cs@>4pmN-Z#%jLO z+Yz(=Mg&gDA7q2_MgrdUhJ=w-uJ7g)FPE#r%F4CJ4s}(LT@nJvZ8j)PO>W5e?7RtR z*5fkQ3O?cCW%0=va@4ds&0b&3279rGtv4h%2I3f`&%D=)~rMjQujA%C)iBi z%LJm!<|fZvxVKB^Qvs*E z0MazX5h4!u5<22Jw;<74{XK;diq6>jhlMOU{FG{XEsq2Jp0~1E-{Q<8(@6z6m}zoi zrXmGe?VE&n6J$B-l$_s^m5i)Uo4K=)S{L|a5mq_pv}lhhV7Hux#SOR5aBD)E#~!fg zoE=ZzU&jpN;C-fj^RPA?NDZxmu^8B?bti5wHfGu!B(R8B?#JOM+M5cu_GuUflH!9& z`oJkxv%-gaYFJ6EsW=*}T(kp1(=8Yc?df7teVV1x70U+^j(ux_emWR^*MfwYP90PO zjBjt1dS$B!;IS&d=0%VcRw=8>G$bkS?C&r1B@{AgJCel13$Qjw)`&nb_>yhojE??z zsfNQQ1!34mA9%-iyM|$8;{{*7Sc+DADJDB(_~56}SWiJ~1jWyW9t{$V7ejHZJ z=m8<#SRbr#6t6x5T z)$dDw2s$zjTp;$Y*}uCydC76elRQ%=#^EgMS|9l~q!mG)Q6?eoc2yLM`6%oIp)dd? zr0J7YZovXq@m~34C8qu=tPL4VKO+pj&SGd6NTX>g zJ>V>?aW)+i2>i4n?$uwWNn3evUnR@vVq^?CC|TOn*|KGT6WHyn9Q>;H3n;8 zzqYRGx$Z9VE*w1vU8rc(=<~AY|KEn`9<6 z&=BMprXd3R5AB+No|dmZd6LBOuuqIS4(8t^6Sd#uO3Qh=^dq&&Ch`?{PhU(gdL*W4 zdVHs7yMI_Zo!NZ4g=`OiH?cAP16Tn4dWIyPafs*tAS8kf$jSCx;5o_iCt~pvqY!m- z5?68p;S&HpzGngG#bm$?N&uKdgaAMQlaT@F8-!YbGJbtCiP_pX{iU=i12Y3Nfc-b> z@q7SN1|Uep@plmmNW}SD1UeMx^GBDs{_GNfN!i`b1i&P3U}o~Od-4VjCZN`Uzw0r{ zniyLc2-~^=v_K+e02@0SfSsESp!2h|2&iYE;*Nl4SmqZ7Bko}9Z1F?nx zfm(GiuyM3|Zp+C1w^$P3T;vaBD4IChIy)GdI0Bv( ztN52uaf8zTfQEq2UH+f3q33pffk;3A2Qw?j-@u|nPHQKOnfR;LvBHzt*Z}Lfo(!~g zCXHAVtsZ^UOI&iC1@OpEVbIXVksVwHey^zI1!So8V6fqlvR9zSw@N8Adi<;WJzqhR zTL{Z>&BYp9NTf_hr;%ILFhtvg=C`nN1fEy%b9-D`J)P?eH)a0#es|%P?0cJo>2e7e5aa}5&|=T3uwaS6YxYW+~n-Z@K#Xn7v|LM|r6 z_nUf`P@1kz@p$GzOe zl9=D+VZ85s<+-ySKhCQ6oinoNHXy=~Kif9Hh;(+0>M2%wgWf_rg^>o>AN$fcRPI}` zBkn+>gHB@y)pd74L&0SEqUsXm1k4$aw@&AmZs&yZPE~uRdbRq9<@hQ(`$Ut60<_EFheQ)8vE!J-@#F1Y+0B9x-i6H zd;1UM_!biDifcoZO#3pvESwt*YVVj6 zmuYZzM(M7Fmsj1OGD>DthEpwJ54R&6k~C-r;%{BQrmz-aFr}snriI$NP!`W zwoue&%KStwIswD2N}(44gFxB%t=rAoJ#;z>5~@_4RpX50az zjHKyF(A*q1r8rcJgQ6y@<;SmbCxLxo`J$#FQ|JcTZ;EFeRhKjpmSx%;F5p$B9rDLr zgQPZ-TZ<}ZGD!=w3CZKO~GL>4Ga~>fSgmFH-Hy74f*m zM8$8h+j`^0R9RN6(N9|eS`zn<)|Fnz?H#Ri2Z2u=OL0Cg&C*MBP7YX0fdj#C+&u$d z7cWIsf)~YoF4lRrqqFboeSlM4kJQ(f52f_^nBvl0?oiBfy5Ov~11gi-b%1Py+s-lgHGS|CC9f7j5kd(>b(c<5k%;NUk2T|Cq9wLyKzyy$d;}# z8YJ<_5K%g>Xao^`tb=U+26zEqgJ}4hW7smlxf--yLy1=iYD!vj& zc){zczro%%YJ)}blC2*nmMT1>0wbzIU9yt2B2$)c=C>mhX#c1VO)f%n-HzgzO|;b| z*byahMVc1kYX4%m2T2sO5dX-Jp$dT*23l7L+$S_@XXw+VI;>1KB9Hl^T*@%_HSQxu zxf_Jud!#U;?5mJ5JT8bH^IID?DB^(3VpcyjxOcl*8If0Z=xX@uMiie2j58%v;l;&=eiqt3-<|@MjB(vgRSHBfDh2*3nXz4 zz5vn)dYZpa?m()7p-Net&SqI!S!$jhz7_^ArU%U>c6n&Vw=jorP4UudsDuv6S(%%o zz}#b&W^v04=<{qeh9oI&!j6b*JV;X$@J{D+d0P)qS>b;d_7oFR=ThZIh9S_7z zJWf%q+?rhJT)JGQ?ma`4-i)yHJgb9`@4pnRX9b(`!r@y$Z@0sjPwVXI=6E7^IYNok zly0v=b4fRPL8)1cc*#05TRK-MP=r?zdZ`P!e-IU%)+dtd7Sqi1s7n5}fXwqoZ9Qto z>7Yma7?{$F=5KV(*Xp-@tmChHpSB`hU?yg2gg$7(QcBhkk`+{2?ZOc?Y_{+s!#HFX z4SUtMbfu&b8zP9eKYjcArohIdbYg{8&RzDA+LxLy2w!xUGM#2Fu)ShhB?Z6gvwkE< zz$fM;{;Lw)uIf%}XgW_qE zh#UQSQ?`v<%x*8wG^hS1KdVT4Z07{OMI_ff=gc>e5AF;lnq&)Ce%l#eiHd{^0tC?2MC6m_*=u>d3z*pOQ}rpDlrop`Jl|JHr9-MN>Q)uNE*)zfH6CDVuRn z0zZGpkv?|T8Oc05k1o?kYn%lD+$iE)8=1NpQ`z470C)f+^5av}ff~9P<_~=$jMTUC zg1S%c-J$CmP7~Vmbmkp8n=m&dWJJfD4WqRSoBHTn`^CmEaaM)3NxBSs!J@;N8=q2C zOKntSB6*Q7>bA$Ui4>OACdRsBMdEZ_`C*4mP)F!=6u6Qta`p=Owy$rqBo}>in)A(D zRh|dD@B^jaJfT)Ap-+7Q5Gj!Jv}gxqGs@|){32KqF8y*A&<~g;p>;FEo9|zpELYg| zA7Wi9)=_8%Nk2u=@*OlOHyrS)xLv2y@%cLtSEx4JKUH>;*_Kwh+!a!~-&wI@c+HHy z9lr)$KNPIGeov4S7t#B%cGc4u%D((r?GyM;rQoqyPPTdIvWK)|js2}!huoV4@9^79 zm|l$25kUqOVGO+$eTs#Z45cXZpiE09aV{FC;ToOCl`1$KKENfV4;R{ywD2y<~^FOx;eZ-6yQ5h1y3U zZlMi9)EflSHl2-`(0l0y=sijM%<0@T`H?oYk*M-*y8WA&i~BRK@FQA2htn0$$FH6O zu_J=go0yw~Zx5-x{!pTvv8S28ot;N{ekQ9FiL#c;BnS9=14Rah#Z zLy#@R(pU6pb>X~`n0iT(n7T-1p8~3Sg}Sgq=!hvkQ)`b&Z#Lk-vzv&|E=Z4~t@hvv z$K$m?3P`uxDt_YC{uD6@Z7`E69FKLDh3Y7ghNLUY;HSn)!sCmy+M~@fLz4a4=)(&` z^-!B|Wn?Go8g+6H72wnG^J~P-`arl$#G(^ zZxqD+6;svvFDNFc&eO)xmTgWw@;YVveRnTRC_X4qlDaW5m8Ve%Q#Y-W!z<9``>@*U zMzbOqoT!3H{`~_9EIwP~5((n`-p8i>R5CYiW+vfqcc)6F_(aK9S2!$1N(JWL?Lwqa zKyziZ8v~OS`G?U2hKV7Lt5o+sgyb8Qyp#)nan`dc-Qfe-sWP)TvXvk9Tx=L#FRjL9 zICc?KFlgO;wnW(`m)B3sRqf%iE!=Uw(xl|d49Cn!Q)1~(NXfUY@tPpu~-Zus#p`$RNF2y}&Jv=`npo z&_KEsY+74a+K?|hM^$?hUmL4;kUZ@L>s()wL3!hm#XCB?IKfbV(>1YSF%Nxu9Bdr{ zu^e7|qgp1qaI|8Tx@Q%GZz-~Zyysi;J*x-4=o7@-GNe-&h6JAa_U3*g?B#3*_Z2_9 z2%Hh$Cz!*w!qk7`7(Z{C{{S*rxqzI%Q3K#JDDcl4>|ZzG&o|QloAZTEbcanB05SLn zUr^Lxwtp6}LSAvxMwPSXJS;$;B@a4U1lj!#UD0_Q8JFNG^TNn`_j}U{>oHS!K`-Jr zSZS`_AjD4JT$HjH{g(cb5;4}@Za2R>=Wkrj9ij!8$3Mo?Sj+9)YV6y|Ai=yTA~w2S zgxuvXXWmle>!mRpqn25BRhOkl;* zgr?wq$u_vVo;}rn(dBRS2c#hu7VbY)`ByiVUkJ%F$n)C7(a6EV&dJu{C%W=1k~6Rd z!80=Is!}2w$=tVe-;oku(q&r2T=daqxmJaGB5){GAw_V5&nhWFt9MQ z0vOm>xBx&-W@Z48g%kJ(jw9)0U}a$>WMgJ!0$~1GO~}#c83*EI|CN01*>jqKF%Huh#6r-mNZvJ;V0uuzCmEo)*Crc82XTLNO@d1F7bQ z|LV$9++#nDA=%Xi(r(5;PXX42TIm|msk> zW-GKN-z^v#6w@LA@?jP#zDm#I2>M(hxzCDu?{ND0!-H*+dtf$h8pz<{vvdMB0{uGZ zcRInSfYR1^yQ~sM!$z`3%_*!zpk5G`6idbK;s;PkEuJkEQ82BzaT z4_pz!DLWyN@9|)fC7_uUV4FDMQ082?EL5c_s>I@^qxD%}ri5})t770vws$Z#uxegc=)}zb~F^UVeLVv+QhZTW4%M>CI|!Y*l{LBnkNgIRRHn>O2XFf_qqA zS3q9C7sOU4+kknTIrKWgmUeViu}OalG~p_IQ^~r6?kq;sRop^zsZ7%F>O96+!C=cP zi^an0b?(LN;_O$$m+Bt{Mt7=w5j{gI=*dI|@OJTbU1L*IRtvU31eg&^W1OVW<8jU^ zv}UIx-?k)p3o?A@$d9u;JHBk>G+IWM9Y)V#fvVkBOUL(j*OsSyP2w|c_&22 zFUC_Ha)$&bR_>Viyi_7S!D}=PoJPOXoB zaA~SeMT(z4E*na#nC@3E`F(^crE<={GnbJtq0UcAGVb_@vLn4lYEM4rS9^m?GD|~Z z5LX3IEk`kD-6jjIhPp_16?S~9u*wW4kim*KED4?0uFTe41X#|Rk-Wb3@@@%vXA)9> zdmKZ{ln`^!BHFRx8{ z__$sqZ~9$li*v}H;Yojddi@|+f9TYp_g_L{GYoG755J^K8my|UvYjPgO6R@{Y!AcM zWx!Wf{r;9+;SnlTXO&aK`jT1Uz?CV?a?7{bNVzkKW8iKWigjIyf>u7_yg}`IBxb3Q zl!fx0?@kqJtlj=+)$cxpeu!}3B8cEnfZ}#ve9=awEYyqe!pAS9u4}7>95$Y7n3Aoi zH`~222;IlrGm_|awrMvjL61vjyC`IOqOBbd0wOGos0?t`MXaR?Rr^VwvO+BV1q2T# z5DR-*B2`BfG=p@rFA?Zb(sXHN(Ix8`vtUbK0%b}rn-&s~`ai3>B42S7-(RoT_n(GZ znUAKa>*EK3Zap|mFv1L4%r0yu;$~{F70hPJHC=uCxs^Z1=jde>w@AZqO5a+3@Rp^S z-3|48s7bNf1Tw(Ion|FU(gG*aREz7AhdEO0z?m&%;XcO|>>x<0mLB?hd>?PXF=ymv zB=E3S@z~_KxTCozZ&t?9tF09wa1!E@1ByP?{sc zg-;!jVjWOcsqBBm;4+?LV<%lhv}|j{2{labf= z(QH~fNkp)@VC3d@pXysCM1OGNIx);>aJha!az}H(BHRZ&BHKzzMWfuxddOVG8geAJL>yz=|I7}C6j8&#OS2!eo^RGYN4LJhY2(2Rxz7R zR7ZPUT8ZxRLps=qkxbvJNdUY_X~V4hB_ab=BM{dEuR@TPUqzL!_4%W2{5! zPsh`9IMtKk;yLahQD zh7t_)0iY3Q8KwLeW-%7s$>CPs6$k*dD?ZCORk&$-HMeZYWMLa3WPrNFn*;AkZ$9sAXmIDTvW!J>|@e4>&7`q9eLM)yg6 z2zWfKAC`w6K*5toKBE>(M)OKCERQ(WMdFKnTp1FEB=#n&yR|_5^e#+Llq&`g#zlmz zxD=ay=90NRhMI6V!6J?3`xUh>VI!sTvGhGi+F%jJEnTu@k{^tG9~gVL6k^(9_C@Ugk=_kRm6)>-^{a5=Ee9)dgmVwMK4C2` z+%#olLaIn5Hh9@^mA&*!0sBH9kDixJwA7=LG~kE!Ch%W4f)PSh^M#ZtjnC%h$^yR0 z4Sa*Is?)BWuEg6s<1OQEq+61v4d&C5i5l@Ped@1|N9lX%IFxMiZrrM$)~iHq`;7d~ zGupIExN`ix1-W%U_)pK*M* z9ky}az=in*i#$h!NH&x(J?$hXEVh2WXVzzg6E0P;E>zYxbGQ`7=hSDya0t|drqtIq zOLh4Rb<3@9sdlaVh#I#~P77@pNp4Q|1>-dI(!39&p6pKri&wj1spQw9ayf=<$Tb8X z(`CB6;zbKq8U?V89B~$j>8a~LzIF^=#;^<9E8|cB$*N(D0x`LwskD-V>pig$l(`I| z`#9xCAL(r9iF10%oSKx%!Naeqd3!eBQem%TozQ+P`+}R@TZbKY@D;$$=o+Q_ok+J9 zzV%A&LQrrz6UgW}i0ts>d^6XSIsEQ?dMU;Su~jT#coFUGlGB^BTp!Owe0Iv(cU@5e z18S^6MPYuZEV`}hE6H8%_L&0eX!M)Vx`Px+&^6O(D>(OV{AHiyRECv``E~PU&(-5G zjV`~4))cKWXMN&rcFJKvvX&=d4u;#UhaMe^1`Nl366Y0^fO!XR!dL&%IhOjS9Dy1fCUb@}g)$WQ{WPV=B4ybEi zYvg4{{q8Bd*LOO(SB!+B*JNtPb@BDW*|H9$BL4&ZK<05@YCxsb-I0*lG5;+(*1HLA zSxmf_sB}R%(yW~C(|cVU>rd$BM9wYGLv~Embc|Qr z361blHZdV0juhb9N7G`rKc>m%W_<*g*O*H2c3pTG3nlVcJQOa}3QeYrs4!>(#$1{9 zG5sa|R7+pkP@OSbjkI&GlW?+pLZWn@G8-pl65hl zmBkBQk9?wfg`sBV!%BlO&n*CRQ3RO=~&_8a9p-8;G;eJGV*5nVEd;DjbV zGSB;6Z7OaY8MtBAbwnIvHAWDIy1Z`6p~}t7QdK|xKJRNm!~IGi`-;UURDkfogUw$e zPl(667J9l1qv26kruRiOtpooq`F=kPt;CWjk-loxRv%yu)%R1<+Z8eOpcjPx>&Gb9 zex9-#=0r=9ZG;Swk0@`~p%(K$$GPlueny|bUz|YejL~KZp3IIHkl=`REpmDbKP9mw zwIr6FYq^W(#QA{i$T~6deb8o0ImR|uJclah$EvJW;J!W_eb-V86xAxhb?nS^if!VLND$NQ@WT2BVNc^ald$JQhJi$-18me1L_0L zt(GaK^rwZ{5iX`Dg*=98o>MVQvgw^Ga}|i-O^Q%^h9Q5|#Y02fU|n;hgO1NQ`7VUI z!804@H1_Rao>A0b8S)&lZzv5)C}yG?jRkH$b|vXXyWe~O0S@p|Z<1+Xr(V@6L=+M4 z@t1_uP3)e#z2j-YnJ7J{x#jc9Fi3vgL%!_t!vq_s#cXYMo8-METNg<5b-G$qoIi-H+cai)xs3O<@ovMUT!_VUlENB?+uvTUe2m zk4DV1hm;8uYR{^8-K0gAie_wm@iav>`}Qz5q;F+vXHGfRIFLn8H=(j= zAM~iaYai5q-v3@=S#8(CAqd9!U95~CU;;mH$;Puo#bme0DF_tkMXS6tHKsMC7&b@* zPf9pYCev>ZB}BnM=npKH=A~DcWGxZqcw?f{w^#hJ*W6ZRKTUpVqo+iwX<;eQYgT1B zbh&RJjp+pLs%YD7YY_ukSS#Xn?KgA8v2xj$C8CgaJSE^)CSCic-42q=}x>mC0cB|Es;RQXY8fa$1YxY7WkxMRb;wPu7+p!egX!(d* z5HwM>i);_-p{-RirUwd8C)qEx0#qAg;@$hI%O>A934UbfvHYx@_=RE6@M7Dw_jXyJ zAa zhH3dXU7{R3v_?a<^hF11>el1LnzSi)-qMveP~I@x`+ODOZNWu%@UHhxGp5~8wx_%h z&}rb_NvPS~lP*y}l6iew+l}5>P{FeGpjSzB(%14ATjMrH+^3w7&~{gOp{9ek`gWsHO4#kdHpFh&FXSuyjtuY*WIm?gyhH&x_d6bn**AVtPCGnQ22bVg|*kGtZ~8Y`NB;541wJ z0P4+TzvxxGX;Aa~ncd2XGh~>`=oukahgYyKj-QlV@@4!Y#4z zc&j476zmZpKh#wM{Z8+_ebOKh$M9PpuC*U=H4$<9J+3MKR-8u`!P(m(6a&-XqVyz` z7>`@Lmu^W;0q-MGN^rMp#Y!h~l)0CYF^<~FzM;@(62DX(ZKvvUPT?NO2k+P} znE}DnNM!3`VLbTQE^LN?d>HsO$%A>qL9*}LZ&nrsyD=$4M3U0BiDqL>&dJE4dnwD>~OPm?#HTERp}IRP6gW!{mHZg z6WR?$oJFoY-51}`xIWUW-iYf92)o3TN6Xb+di3(5kcBNQ2{Otz17*DH+b9`E2q^1e zBi@d4z`VWx-u}9fQ~vOZjQ>K#o7;y-FlA($_1Ix^eW^K}6COs0${e~j3lqu@C9d#p zFntlNnqUAeVd)N9PQPmd@4)y&G{3`kMgRnvJj9D0yYos|a%+y@{v$}9FyS?Bxq=4f zxf;RgTB;pm^6(f~r;o~tK-R3#R~>GV8b1&mt4NDW7Zq)A^O=e(?$tyGO-y>)yy;&f zTEBKgIz&%pHWnqNDu?2PzSc!o_sPshSSIqCZ2hi0>W1);x3$vm(=@MyP_PT@`J zV6AP(+Vw-{%s5ArNQu^hNCf|3d^U83)J$tdqZ)1o9g?d%?N!HOi6z0+FjAe`r7LvP z#zOC7T{y*XqL<~xXnlgRw!tTOi%%5e_46r}%!~9$^^(hP6I!R}y-FEoDSf2p&8F^y z!&7+`c*k~gjASieyiet8L9@-3jW?*)Iqj}*e}b5WvPJkWgw=0G21Fxp06BnvGFH#d z#lM-FKLW3Te|i`HS0V!Bu={7^wN8wzZ2&Wf{JX&ta0v;Iav7C+VX?ZNFrnQ$37}=lha5#J9xEgTOTo`xlw$tbK|=(<~8FoYAJcK;02m; z2jaB8oW|v8Uq`bG(iE8Ls3h%xW&NwX1T+#TFk@TYY)%*drJ4L~c^~H^ShLUI4r6s$ z^1TjB0UkuAf%M5&>EZ4ebzYwzXaqPz`-+Q@N&N(snsJLITS_-wPszF?V8wQ1WM z4i;@*t%xe|i&Qto1c@{!!lij$|PPCgoN#oeld3 zt7`pABs(w~K=(Mmh|LI!}{I@6f-|4MC8LwYFqL7NLhNJ|Ygo%}l ziIatq!JpZ`S;Rkc{ud^Zo1GcNByxdBL^d{d5N*ZszcY!P|6~$Dbm%iz^%o`)beNx_ z{}U$hCo}d}s_eIho|&@$ODgfdtL1+r5`iqghVpk+1Ad;2U(V*giNpWjnZ*C^9OSQ> z?Cj6$njORjKmYpq_s4H$5MTXFUO(qO|Keh0{ZE-c%CbJop7S}MmH+&HPW=oG_#3PF zD=^_d@dv>F;;PT`T>XD`)&Hw8VU=h0?ZOnP5Qc{2hm;0XRr$WiIgWK~Oyg@j=l8;r z3YSu9JnzDaY&hqC6{zG}1D3+9)$7PcQbx^+Xrb9 zPnesIG31XOH@-5`+H>fUY&U=u?9qk$ojq%_xIp^jDu(1Ofd=X?$Qx#8i9-b18Nd(c zA z$eL%{B5UB}VDTJy^E~%J=kDkCuk7EG0KoDe_l0Mt2YCluBT!__UmuC`+a2PU&HB?D z;+LiUt5X9b3;VBw{~2NfddkZ4TmlX6ugm%8Jo)Ry`Rmg7WqF^&i5!0pPujxx*=OQ; zpHloYXvq0F!sxHF^slyC1oW^LkOvHa+Q`7d!4?2y1hO##Spd}LPEK|_OrY>6kkrh< zz|P#l$dS?3!HnkDRs|Zlv9l5A=`a5m_5Nd#Kt3`5S>C_KAYuS=im^5OIf|d-`6DRm zKb71ZOibZH){h&W`Og=CgPom~9bgLhB?EGDv495m`~ukgA!7!4;D8L^-(}3q&u$%m zm$9*cd_?{s;|6kp48`Bd0Xf;Z{#g#l!S;Nb{#K5ejg9r6<(SzxKs)(A%5kxC{Id;a zu79_|%*6!?1p8-Q?&qt*zqiZH#`(`Sfb5+A(hEq&4w_1Ts|&gUW&LLxAQ}5V+W>NK zvH!Er&rVMN)H6uN`mZ)PfzPM^@9lB||D_ioC(H9i$3M!ku>ZR*I|pc0{-Ych_rLnb z#r(X3{4VF@U;uKFa`^dVBPEM>CeQQgdEqJA+ByM#&d*<4jiimKEojGmUQoYWdkh?$ Ue$GT77c(d5F-a7nZ^YpLADuP#TmS$7 literal 239871 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

;fITvTb}IpOi6>Wv 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 R{Qi`dm!T98xMiqA`Csbu0a*Y5 From c5eeb8ac9da156a3ddf808580d29178f5c41fb75 Mon Sep 17 00:00:00 2001 From: eharkins Date: Wed, 30 Sep 2020 15:28:43 -0400 Subject: [PATCH 12/59] add link back to parent project for api docs --- docs/api/api.rst | 3 +++ docs/conf.py | 8 +++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/docs/api/api.rst b/docs/api/api.rst index c89729232..a93d2cde7 100644 --- a/docs/api/api.rst +++ b/docs/api/api.rst @@ -2,6 +2,9 @@ Python Development API ====================== +.. warning:: + This is the augur API reference documentation. For the general Nextstrain docs, go here: :doc:`docs.nextstrain.org:index` + These pages contain documentation automatically generated from docstrings within the augur codebase. They are intended for people developing augur or importing augur into their python scripts. If you are using `augur` as a command line program, then please see the `using augur <../usage/usage.html>`__ section. diff --git a/docs/conf.py b/docs/conf.py index 9649daff5..9c1b5f631 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -53,7 +53,7 @@ def prose_list(items): # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. -extensions = ['recommonmark', 'sphinx.ext.autodoc', 'sphinxarg.ext', 'sphinx.ext.napoleon', 'sphinx_markdown_tables'] +extensions = ['recommonmark', 'sphinx.ext.autodoc', 'sphinxarg.ext', 'sphinx.ext.napoleon', 'sphinx_markdown_tables', 'sphinx.ext.intersphinx'] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] @@ -88,3 +88,9 @@ def prose_list(items): html_css_files = [ 'css/custom.css', ] + +# -- Cross-project references ------------------------------------------------ + +intersphinx_mapping = { + 'docs.nextstrain.org': ('https://docs.nextstrain.org/en/migrate/', None), +} From d5d6743071c50206f1be179641883849769cf8a8 Mon Sep 17 00:00:00 2001 From: eharkins Date: Thu, 1 Oct 2020 13:25:23 -0400 Subject: [PATCH 13/59] only display reference guides --- docs/faq/faq.rst | 11 ++------- docs/faq/introduction-to-augur.md | 27 ++++++++++++++++++++ docs/faq/what-is-a-build.md | 41 +++++++++++++++++++++++++++++++ docs/index.rst | 1 - docs/usage/usage.rst | 1 - 5 files changed, 70 insertions(+), 11 deletions(-) create mode 100644 docs/faq/introduction-to-augur.md create mode 100644 docs/faq/what-is-a-build.md diff --git a/docs/faq/faq.rst b/docs/faq/faq.rst index bcb6e83d0..1f32c78d1 100644 --- a/docs/faq/faq.rst +++ b/docs/faq/faq.rst @@ -10,15 +10,8 @@ common questions and problems users run into. :maxdepth: 1 :glob: + introduction-to-augur + what-is-a-build metadata - translate_ref clades - community_hosting - import-beast - colors - lat_longs Specifying `refine` rates - Using Augur and Snakemake - vcf_input - fasta_input - seq_traits \ No newline at end of file diff --git a/docs/faq/introduction-to-augur.md b/docs/faq/introduction-to-augur.md new file mode 100644 index 000000000..4f61d0625 --- /dev/null +++ b/docs/faq/introduction-to-augur.md @@ -0,0 +1,27 @@ +# Augur: Nextstrain's Bioinformatics Toolkit + +Nextstrain's bioinformatics toolkit is called __Augur__. +It is a core part of the Nextstrain ecosystem used by all of our [pathogen builds](../../tutorials/index), and all source code is available on [GitHub](https://github.com/nextstrain/augur). + +Augur provides ways to perform common bioinformatics tasks through a collection of commands which are designed to be composable into larger processing pipelines. +This means the commands work well both independently and together, embracing the [philosophy of composability](https://en.wikipedia.org/wiki/Composability). + + +We've used Augur to analyze a bunch of different pathogens -- from viruses with tiny genomes like [Zika](../../tutorials/zika), to bacterial genomes orders-of-magnitude bigger like [tuberculosis](https://docs.nextstrain.org/projects/augur/en/stable/tutorials/tb_tutorial.html). +Check out the tutorials (via the sidebar to the left) to see which components we used in each one. + +Since we built it to be composable, it's easy to use other code or software to replace steps (or multiple steps!). +Similarly, not all available commands are applicable -- nor scientifically valid -- for different pathogen analyses. +We've used BEAST to replace multiple augur commands, but still visualize the results in auspice. +It's also common to have additional scripts which are called in-between different components; reading the different tutorials should give you a feel for how powerful these can be, and how versatile your builds can be! + + +### Explore in more depth: + +* Learn more about [each Augur command](https://docs.nextstrain.org/projects/augur/en/stable/usage/cli/cli.html). + +* Learn more about the [data formats Augur uses and produces](../../reference/formats/data-formats). + +* See [how Augur commands are used in our Zika build](../../tutorials/zika). + + diff --git a/docs/faq/what-is-a-build.md b/docs/faq/what-is-a-build.md new file mode 100644 index 000000000..3ce36ff6a --- /dev/null +++ b/docs/faq/what-is-a-build.md @@ -0,0 +1,41 @@ +# The concept of a 'build' + +Nextstrain's focus on providing a _real-time_ snapshot of evolving pathogen populations necessitates a reproducible analysis that can be rerun when new sequences are available. +The individual steps necessary to repeat analysis together comprise a "build". + + +Because no two datasets or pathogens are the same, we build Augur to be flexible and suitable for different analyses. +The individual Augur commands are composable, and can be mixed and matched with other scripts as needed. +These steps, taken together, are what we refer to as a "build". + + +### Example build + +The [Zika virus tutorial](/docs/tutorials/zika#build-steps) describes a build which contains the following steps: + +1. Prepare pathogen sequences and metadata +2. Align sequences +3. Construct a phylogeny from aligned sequences +4. Annotate the phylogeny with inferred ancestral pathogen dates, sequences, and traits +5. Export the annotated phylogeny and corresponding metadata into auspice-readable format + +and each of these can be run via a separate `augur` command. + + + + +### Snakemake + +While it is possible to run a build by running each of the individual steps, we typically group these together into a make-type file. +[Snakemake](https://snakemake.readthedocs.io/en/stable/index.html) is "a tool to create reproducible and scalable data analyses... via a human-readable, Python-based language." + +> Snakemake is installed as part of the [conda environment](/docs/getting-started/local-installation#install-augur--auspice-with-conda-recommended) or the [docker container](/docs/getting-started/container-installation#install-docker). +If you ever see a build which has a "Snakefile" then you can run this by typing `snakemake --cores 1` or `nextstrain build --cpus 1 .`, respectively. + + +### Next steps + +* Have a look at some of the tutorials (listed in the sidebar). +Each one will use a slightly different combination of `augur` commands depending on the pathogen. + +* Visit the [augur docs](https://nextstrain-augur.readthedocs.io/en/stable) for more information on the bioinformatics toolkit. diff --git a/docs/index.rst b/docs/index.rst index d1e5669f8..ab76058d9 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -37,7 +37,6 @@ The nextstrain team uses `snakemake `__ shows h :maxdepth: 2 cli/cli - augur_snakemake json_format envvars From 5fed06e622d7ccfaecfb35abce8eee2060e294fa Mon Sep 17 00:00:00 2001 From: eharkins Date: Thu, 1 Oct 2020 13:33:41 -0400 Subject: [PATCH 14/59] move warning / link to parent proj to index page --- docs/api/api.rst | 3 --- docs/index.rst | 3 +++ 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/api/api.rst b/docs/api/api.rst index a93d2cde7..c89729232 100644 --- a/docs/api/api.rst +++ b/docs/api/api.rst @@ -2,9 +2,6 @@ Python Development API ====================== -.. warning:: - This is the augur API reference documentation. For the general Nextstrain docs, go here: :doc:`docs.nextstrain.org:index` - These pages contain documentation automatically generated from docstrings within the augur codebase. They are intended for people developing augur or importing augur into their python scripts. If you are using `augur` as a command line program, then please see the `using augur <../usage/usage.html>`__ section. diff --git a/docs/index.rst b/docs/index.rst index ab76058d9..3aca1c560 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -2,6 +2,9 @@ Augur: A bioinformatics toolkit for phylogenetic analysis ========================================================= +.. warning:: + This is the augur project's reference documentation. For the general Nextstrain docs, go here: :doc:`docs.nextstrain.org:index` + *One held to foretell events by omens.* (`Merriam-Webster `__) From e1889479b602d4bf8c57ea8b9985625e3d499cd1 Mon Sep 17 00:00:00 2001 From: eharkins Date: Thu, 1 Oct 2020 13:43:18 -0400 Subject: [PATCH 15/59] fix warning mistake --- docs/index.rst | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/index.rst b/docs/index.rst index 3aca1c560..ce3baff07 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -2,11 +2,12 @@ Augur: A bioinformatics toolkit for phylogenetic analysis ========================================================= + *One held to foretell events by omens.* + (`Merriam-Webster `__) + .. warning:: This is the augur project's reference documentation. For the general Nextstrain docs, go here: :doc:`docs.nextstrain.org:index` - *One held to foretell events by omens.* - (`Merriam-Webster `__) Augur is a bioinformatics toolkit to track evolution from sequence and serological data. It provides a collection of commands which are designed to be composable into larger processing pipelines. From 0c4bf20dc29fe7ba82f575cc2fc25661e027354e Mon Sep 17 00:00:00 2001 From: eharkins Date: Mon, 19 Oct 2020 16:53:43 -0700 Subject: [PATCH 16/59] move DEV_DOCS to actual docs; this will be source at guides/contribute/augur using the submodule for this repo in docs.nextstrain.org --- README.md | 2 +- DEV_DOCS.md => docs/contribute/DEV_DOCS.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) rename DEV_DOCS.md => docs/contribute/DEV_DOCS.md (99%) diff --git a/README.md b/README.md index db07ecc3e..066754875 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ The output of augur is a series of JSONs that can be used to visualize your resu * [Technical documentation for Augur](https://nextstrain-augur.readthedocs.io/en/stable/installation/installation.html) * [Contributor guide](https://github.com/nextstrain/.github/blob/master/CONTRIBUTING.md) * [Project board with available issues](https://github.com/orgs/nextstrain/projects/6) -* [Developer docs for Augur](./DEV_DOCS.md) +* [Developer docs for Augur](./docs/contribute/DEV_DOCS.md) ## Quickstart diff --git a/DEV_DOCS.md b/docs/contribute/DEV_DOCS.md similarity index 99% rename from DEV_DOCS.md rename to docs/contribute/DEV_DOCS.md index cf483790e..77f83edf5 100644 --- a/DEV_DOCS.md +++ b/docs/contribute/DEV_DOCS.md @@ -1,6 +1,6 @@ -# Development Docs for Contributors +# Augur Development Docs for Contributors -Thank you for helping us to improve Nextstrain! This document describes: +Thank you for helping us to improve Augur! This document describes: - Getting Started - Contributing code From 83ee9c5bb13aa49c91f219e41af944220dac8d81 Mon Sep 17 00:00:00 2001 From: eharkins Date: Fri, 23 Oct 2020 15:42:59 -0700 Subject: [PATCH 17/59] docs link back to docs.nextstrain.org/en/latest; prepare for merging migrate into master in docs.nextstrain.org --- docs/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index 9c1b5f631..16f66296f 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -92,5 +92,5 @@ def prose_list(items): # -- Cross-project references ------------------------------------------------ intersphinx_mapping = { - 'docs.nextstrain.org': ('https://docs.nextstrain.org/en/migrate/', None), + 'docs.nextstrain.org': ('https://docs.nextstrain.org/en/latest/', None), } From 281a1798058c3fc0bc6dc8f7c760043dc1e26dbc Mon Sep 17 00:00:00 2001 From: james hadfield Date: Tue, 3 Nov 2020 17:51:56 +1300 Subject: [PATCH 18/59] [docs] Set theme (sidebar) options Part of an effort to standardize the appearance of the sidebar in subprojects. Settings chosen based on docs.nextstrain.org. --- docs/conf.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/conf.py b/docs/conf.py index 16f66296f..0483b47a8 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -78,6 +78,12 @@ def prose_list(items): # html_theme = 'nextstrain-sphinx-theme' +html_theme_options = { + 'logo_only': False, # if True, don't display project name at top of the sidebar + 'collapse_navigation': False, # if True, no [+] icons in sidebar + 'titles_only': True, # if True, page subheadings not included in nav +} + # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". From c318a937293a35dfdb00718dea4ee06085055965 Mon Sep 17 00:00:00 2001 From: eharkins Date: Wed, 4 Nov 2020 11:27:55 -0800 Subject: [PATCH 19/59] remove intro page from faq section of docs --- docs/faq/faq.rst | 1 - docs/faq/introduction-to-augur.md | 27 --------------------------- 2 files changed, 28 deletions(-) delete mode 100644 docs/faq/introduction-to-augur.md diff --git a/docs/faq/faq.rst b/docs/faq/faq.rst index 1f32c78d1..9dfd5bb5b 100644 --- a/docs/faq/faq.rst +++ b/docs/faq/faq.rst @@ -10,7 +10,6 @@ common questions and problems users run into. :maxdepth: 1 :glob: - introduction-to-augur what-is-a-build metadata clades diff --git a/docs/faq/introduction-to-augur.md b/docs/faq/introduction-to-augur.md deleted file mode 100644 index 4f61d0625..000000000 --- a/docs/faq/introduction-to-augur.md +++ /dev/null @@ -1,27 +0,0 @@ -# Augur: Nextstrain's Bioinformatics Toolkit - -Nextstrain's bioinformatics toolkit is called __Augur__. -It is a core part of the Nextstrain ecosystem used by all of our [pathogen builds](../../tutorials/index), and all source code is available on [GitHub](https://github.com/nextstrain/augur). - -Augur provides ways to perform common bioinformatics tasks through a collection of commands which are designed to be composable into larger processing pipelines. -This means the commands work well both independently and together, embracing the [philosophy of composability](https://en.wikipedia.org/wiki/Composability). - - -We've used Augur to analyze a bunch of different pathogens -- from viruses with tiny genomes like [Zika](../../tutorials/zika), to bacterial genomes orders-of-magnitude bigger like [tuberculosis](https://docs.nextstrain.org/projects/augur/en/stable/tutorials/tb_tutorial.html). -Check out the tutorials (via the sidebar to the left) to see which components we used in each one. - -Since we built it to be composable, it's easy to use other code or software to replace steps (or multiple steps!). -Similarly, not all available commands are applicable -- nor scientifically valid -- for different pathogen analyses. -We've used BEAST to replace multiple augur commands, but still visualize the results in auspice. -It's also common to have additional scripts which are called in-between different components; reading the different tutorials should give you a feel for how powerful these can be, and how versatile your builds can be! - - -### Explore in more depth: - -* Learn more about [each Augur command](https://docs.nextstrain.org/projects/augur/en/stable/usage/cli/cli.html). - -* Learn more about the [data formats Augur uses and produces](../../reference/formats/data-formats). - -* See [how Augur commands are used in our Zika build](../../tutorials/zika). - - From db422a7d5d16459b6a3fe9c696341605934721d6 Mon Sep 17 00:00:00 2001 From: eharkins Date: Wed, 4 Nov 2020 11:28:50 -0800 Subject: [PATCH 20/59] docs index page: add links to non-reference docs --- docs/index.rst | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/docs/index.rst b/docs/index.rst index ce3baff07..0e1547a71 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -5,13 +5,19 @@ Augur: A bioinformatics toolkit for phylogenetic analysis *One held to foretell events by omens.* (`Merriam-Webster `__) -.. warning:: - This is the augur project's reference documentation. For the general Nextstrain docs, go here: :doc:`docs.nextstrain.org:index` +.. note:: + The documentation you are viewing is Augur's reference guide, which means it is information-oriented and targeted at users who just need info about how Augur works. + + * If you have a question about how to achieve a specific goal with Augur, check out our :doc:`Augur-focused How-to Guides section ` in the main Nextstrain documentation. + * If you want to learn the basics of how to use Augur from scratch, check out our :doc:`Zika tutorial ` in the main Nextstrain documentation. + * If you want to understand how Augur fits together with Auspice to visualize results, check out our :doc:`Data Formats section ` in the main Nextstrain documentation. + Augur is a bioinformatics toolkit to track evolution from sequence and serological data. It provides a collection of commands which are designed to be composable into larger processing pipelines. Augur originated as part of `Nextstrain `__, an open-source project to harness the scientific and public health potential of pathogen genome data. +All source code is available on [GitHub](https://github.com/nextstrain/augur). .. note:: We have just released version 6 of augur -- `check our upgrading guide `__ @@ -30,7 +36,6 @@ The ``refine`` step is necessary to ensure that cross-referencing between tree n The different augur modules can be strung together by workflow managers like snakemake and nextflow. The nextstrain team uses `snakemake `__ to run and manage the different analysis that you see on `nextstrain.org `__. - .. toctree:: :maxdepth: 2 :caption: Table of contents From 0bbd195d678c9de9397b9f7678761a9cc8b14485 Mon Sep 17 00:00:00 2001 From: eharkins Date: Wed, 4 Nov 2020 11:31:47 -0800 Subject: [PATCH 21/59] fix what-is-a-build page; this page came from nextstrain.org/docs and so had broken links and language that didn't make sense in the augur docs. This fixes those issues to make it more useful in this new context --- docs/faq/what-is-a-build.md | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/docs/faq/what-is-a-build.md b/docs/faq/what-is-a-build.md index 3ce36ff6a..37191b472 100644 --- a/docs/faq/what-is-a-build.md +++ b/docs/faq/what-is-a-build.md @@ -11,7 +11,7 @@ These steps, taken together, are what we refer to as a "build". ### Example build -The [Zika virus tutorial](/docs/tutorials/zika#build-steps) describes a build which contains the following steps: +The [Zika virus tutorial](https://docs.nextstrain.org/en/latest/tutorials/zika.html#build-steps) describes a build which contains the following steps: 1. Prepare pathogen sequences and metadata 2. Align sequences @@ -21,21 +21,12 @@ The [Zika virus tutorial](/docs/tutorials/zika#build-steps) describes a build wh and each of these can be run via a separate `augur` command. - - +If you look at the [other tutorials](https://docs.nextstrain.org/en/latest/tutorials/index.html), each one uses a slightly different combination of `augur` commands depending on the pathogen. ### Snakemake While it is possible to run a build by running each of the individual steps, we typically group these together into a make-type file. [Snakemake](https://snakemake.readthedocs.io/en/stable/index.html) is "a tool to create reproducible and scalable data analyses... via a human-readable, Python-based language." -> Snakemake is installed as part of the [conda environment](/docs/getting-started/local-installation#install-augur--auspice-with-conda-recommended) or the [docker container](/docs/getting-started/container-installation#install-docker). +> Snakemake is installed as part of the [conda environment](https://docs.nextstrain.org/en/latest/guides/install/local-installation.html#install-augur-auspice-with-conda) or the [docker container](https://docs.nextstrain.org/en/latest/cli/doc/installation.html). If you ever see a build which has a "Snakefile" then you can run this by typing `snakemake --cores 1` or `nextstrain build --cpus 1 .`, respectively. - - -### Next steps - -* Have a look at some of the tutorials (listed in the sidebar). -Each one will use a slightly different combination of `augur` commands depending on the pathogen. - -* Visit the [augur docs](https://nextstrain-augur.readthedocs.io/en/stable) for more information on the bioinformatics toolkit. From 02978922ac83d32c39a06f06203bc56326b310e0 Mon Sep 17 00:00:00 2001 From: eharkins Date: Wed, 4 Nov 2020 11:39:31 -0800 Subject: [PATCH 22/59] fix docs index.rst github link --- docs/index.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/index.rst b/docs/index.rst index 0e1547a71..3e4774765 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -6,7 +6,7 @@ Augur: A bioinformatics toolkit for phylogenetic analysis (`Merriam-Webster `__) .. note:: - The documentation you are viewing is Augur's reference guide, which means it is information-oriented and targeted at users who just need info about how Augur works. + The documentation you are viewing is Augur's reference guide, which means it is information-oriented and targeted at users who just need info about how Augur works. * If you have a question about how to achieve a specific goal with Augur, check out our :doc:`Augur-focused How-to Guides section ` in the main Nextstrain documentation. * If you want to learn the basics of how to use Augur from scratch, check out our :doc:`Zika tutorial ` in the main Nextstrain documentation. @@ -17,7 +17,7 @@ Augur: A bioinformatics toolkit for phylogenetic analysis Augur is a bioinformatics toolkit to track evolution from sequence and serological data. It provides a collection of commands which are designed to be composable into larger processing pipelines. Augur originated as part of `Nextstrain `__, an open-source project to harness the scientific and public health potential of pathogen genome data. -All source code is available on [GitHub](https://github.com/nextstrain/augur). +All source code is available on `GitHub `__. .. note:: We have just released version 6 of augur -- `check our upgrading guide `__ From 13e88b78169a1eb20385f669fea85ea752388d74 Mon Sep 17 00:00:00 2001 From: eharkins Date: Wed, 4 Nov 2020 12:17:51 -0800 Subject: [PATCH 23/59] docs: fix 404s resulting from migration; some documents are no longer in this repo or no longer linked in a toctree so this updates links to send you to their new location in docs.nextstrain.org --- docs/releases/migrating-v5-v6.md | 4 ++-- docs/releases/v6.md | 4 ++-- docs/usage/cli/filter.rst | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/releases/migrating-v5-v6.md b/docs/releases/migrating-v5-v6.md index df3360bbd..6d9eef8e2 100644 --- a/docs/releases/migrating-v5-v6.md +++ b/docs/releases/migrating-v5-v6.md @@ -119,7 +119,7 @@ These may have been inferred for internal nodes by Augur functions like `augur t Certain traits have a geographic interpretation, e.g. "country". Auspice will attempt to display these traits on a map (and provide a drop-down to switch between them if there are more than one). -> _Make sure that these have corresponding entry in the lat-longs TSV file supplied to `export`. See how to do this [here](/faq/lat_longs)._ +> _Make sure that these have corresponding entry in the lat-longs TSV file supplied to `export`. See how to do this [here](https://docs.nextstrain.org/en/latest/augur/docs/faq/lat_longs.html)._ --- @@ -528,5 +528,5 @@ In Auspice v2, all values are now displayed exactly as they arrive, allowing use Don't forget to also change them in any custom lat-long and/or coloring files you are using. We've also become stricter about the format of the files that pass in color and lat-long information. Previously, it didn't matter if columns were separated by spaces or tabs - now, they must be separated by tabs. -You can find out more about how to add [custom coloring](/faq/colors) and [lat-long](/faq/lat_longs) values. +You can find out more about how to add [custom coloring](https://docs.nextstrain.org/en/latest/augur/docs/faq/colors.html) and [lat-long](https://docs.nextstrain.org/en/latest/augur/docs/faq/lat_longs.html) values. If you use the command `parse` to generate a metadata table from fields in a fasta header, you can use the flag `--prettify-fields` to apply some prettifying operations to specific metadata entries, see the documentation [`parse`](/usage/cli/parse). diff --git a/docs/releases/v6.md b/docs/releases/v6.md index 0d75a53a6..359b2a250 100644 --- a/docs/releases/v6.md +++ b/docs/releases/v6.md @@ -46,7 +46,7 @@ Users can ask for this output and specify a file name using `--output-sequences` Deprecation warning: The argument `--output` is now deprecated. Please use `--output-node-data` instead. ## Import BEAST MCC trees -We now have instructions and functionality to import BEAST trees, see [here](/faq/import-beast). +We now have instructions and functionality to import BEAST trees, see [here](https://docs.nextstrain.org/en/latest/augur/docs/faq/import-beast.html). ## Prettifying of strings Previous auspice version "prettified" metadata strings (like changing 'north_america' to 'North America'). @@ -110,4 +110,4 @@ We've tried to use redirects to ensure that all the old links continue to work. * Errors in formatting of input files (e.g. metadata files, Auspice config files) weren't handled nicely, often resulting in hard-to-interpret stack traces. We now try to catch these and print an error indicating the offending file. -* Tests using Python version 2 have now been removed. \ No newline at end of file +* Tests using Python version 2 have now been removed. diff --git a/docs/usage/cli/filter.rst b/docs/usage/cli/filter.rst index f34c0bdbe..5c6a31542 100644 --- a/docs/usage/cli/filter.rst +++ b/docs/usage/cli/filter.rst @@ -15,7 +15,7 @@ augur filter How we subsample sequences in the zika-tutoral ============================================== -As an example, we'll look that the ``filter`` command in greater detail using material form the `zika tutorial <../../tutorials/zika_tutorial.html>`__. +As an example, we'll look that the ``filter`` command in greater detail using material form the :doc:`zika tutorial `. The filter command allows you to selected various subsets of your input data for different types of analysis. A simple example use of this command would be @@ -45,7 +45,7 @@ To drop such strains, you can pass the name of this file to the augur filter com --output filtered.fasta (To improve legibility, we have wrapped the command across multiple lines.) -If you run this command (you should be able to copy-paste this into your terminal) on the data provided in the `zika tutorial `__, you should see that one of the sequences in the data set was dropped since its name was in the ``dropped_strains.txt`` file. +If you run this command (you should be able to copy-paste this into your terminal) on the data provided in the :doc:`zika tutorial `, you should see that one of the sequences in the data set was dropped since its name was in the ``dropped_strains.txt`` file. Another common filtering operation is subsetting of data to a achieve a more even spatio-temporal distribution or to cut-down data set size to more manageable numbers. The filter command allows you to select a specific number of sequences from specific groups, for example one sequence per month from each country: From e6aad6164dcd3d82291cb0c3979e2569d331df64 Mon Sep 17 00:00:00 2001 From: eharkins Date: Wed, 4 Nov 2020 17:29:01 -0800 Subject: [PATCH 24/59] remove unused docs --- docs/faq/augur_snakemake.md | 1 - docs/faq/community_hosting.md | 45 ----------------------------------- docs/tutorials/tutorials.rst | 12 ---------- 3 files changed, 58 deletions(-) delete mode 120000 docs/faq/augur_snakemake.md delete mode 100644 docs/faq/community_hosting.md delete mode 100644 docs/tutorials/tutorials.rst diff --git a/docs/faq/augur_snakemake.md b/docs/faq/augur_snakemake.md deleted file mode 120000 index c45f33e95..000000000 --- a/docs/faq/augur_snakemake.md +++ /dev/null @@ -1 +0,0 @@ -../usage/augur_snakemake.md \ No newline at end of file diff --git a/docs/faq/community_hosting.md b/docs/faq/community_hosting.md deleted file mode 100644 index 79de1689b..000000000 --- a/docs/faq/community_hosting.md +++ /dev/null @@ -1,45 +0,0 @@ -# Sharing your analysis - -[nextstrain.org](https://nextstrain.org) has a feature that allows you to share your own analysis through the nextstrain.org website. -This works using github as a repository for your analysis files. -To share an analysis, you need to create a repository. -The name of the repository will be what is used to access the results. -Within this repository, there should a folder called auspice which contains the output json files of the augur pipeline. -Importantly, the name of these files has to start with the name of the repository. -If so, you should be able to access your analysis via the nextstrain community feature. - -As an example, lets look at one of our nextstrain community analysis. -The following link shows you an analysis we made a few month ago of many influenza B sequences: - -[nextstrain.org/community/neherlab/allflu/B_ha](https://nextstrain.org/community/neherlab/allflu/B_ha) - -The analysis files are hosted on our github page in the reposity - -[github.com/neherlab/allflu](https://github.com/neherlab/allflu) - -In this repository, you'll find the folder `auspice` which contains the files -``` -allflu_B_ha_meta.json -allflu_B_ha_tree.json -``` -Note that all files start with "allflu" which matches the name of the repository. -In fact, there are multiple analysis in this folder. The corresponding files all start with "allflu" but they differ in the viral lineage they correspond to: -``` -allflu_B_ha_meta.json -allflu_B_ha_tree.json -allflu_h1n1_ha_meta.json -allflu_h1n1_ha_tree.json -allflu_h1n1pdm_ha_meta.json -allflu_h1n1pdm_ha_tree.json -allflu_h3n2_ha_meta.json -allflu_h3n2_ha_tree.json -``` -All these can be accessed as - -[nextstrain.org/community/neherlab/allflu/h1n1_ha](https://nextstrain.org/community/neherlab/allflu/h1n1_ha) - -[nextstrain.org/community/neherlab/allflu/h3n2_ha](https://nextstrain.org/community/neherlab/allflu/h3n2_ha) - -[nextstrain.org/community/neherlab/allflu/h1n1pdm_ha](https://nextstrain.org/community/neherlab/allflu/h1n1pdm_ha) - - diff --git a/docs/tutorials/tutorials.rst b/docs/tutorials/tutorials.rst deleted file mode 100644 index 831ee9a90..000000000 --- a/docs/tutorials/tutorials.rst +++ /dev/null @@ -1,12 +0,0 @@ -========= -Tutorials -========= - -.. note:: We have just released version 6 of augur -- `check our upgrading guide <../releases/migrating-v5-v6.html>`__ - -.. toctree:: - :maxdepth: 1 - :caption: Available tutorials - - zika_tutorial - tb_tutorial From 4ab45e7bdf202dcf92ee5fe712d3b2b6222ccdd8 Mon Sep 17 00:00:00 2001 From: eharkins Date: Wed, 4 Nov 2020 20:15:29 -0800 Subject: [PATCH 25/59] exclude unused docs from build --- docs/conf.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index 0483b47a8..d1d2ffea3 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -61,7 +61,19 @@ def prose_list(items): # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This pattern also affects html_static_path and html_extra_path. -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store', + 'contribute/DEV_DOCS.md', + 'faq/colors.md', + 'faq/fasta_input.md', + 'faq/import-beast.md', + 'faq/lat_longs.md', + 'faq/seq_traits.md', + 'faq/translate_ref.md', + 'faq/vcf_input.md', + 'tutorials/tb_tutorial.md', + 'tutorials/zika_tutorial.md', + 'usage/augur_snakemake.md', +] # A string of reStructuredText that will be included at the end of every source # file that is read. This is a possible place to add substitutions that should From 02a1906d1a757d87d30eb3f5aacc9f0caa78d282 Mon Sep 17 00:00:00 2001 From: eharkins Date: Sat, 7 Nov 2020 14:37:34 -0800 Subject: [PATCH 26/59] [fetch-docs] relative links this relative link did not work after fetching this doc into docs.nextstrain.org because the folder structure is different from this repo so this changes it to fit with that of docs.nextstrain.org. this means the relative link breaks in this repo but this document is not rendered in this repo's docs. This will need to remain this way or become an absolute link until we have a unified toctree. --- docs/tutorials/tb_tutorial.md | 2 +- docs/tutorials/zika_tutorial.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/tutorials/tb_tutorial.md b/docs/tutorials/tb_tutorial.md index 8b9b095fe..c40b2965e 100644 --- a/docs/tutorials/tb_tutorial.md +++ b/docs/tutorials/tb_tutorial.md @@ -7,7 +7,7 @@ As in the Zika fasta-input [tutorial](zika_tutorial), we'll build up a Snakefile ## Setup -To run this tutorial you'll need to [install augur](../installation/installation) and [install Snakemake](https://snakemake.readthedocs.io/en/stable/getting_started/installation.html). +To run this tutorial you'll need to [install augur](../guides/install/augur_install.md) and [install Snakemake](https://snakemake.readthedocs.io/en/stable/getting_started/installation.html). ## Build steps Nextstrain builds typically require the following steps: diff --git a/docs/tutorials/zika_tutorial.md b/docs/tutorials/zika_tutorial.md index 69ffbdc96..f7bafb66b 100644 --- a/docs/tutorials/zika_tutorial.md +++ b/docs/tutorials/zika_tutorial.md @@ -7,7 +7,7 @@ We will work off the tutorial for Zika virus on the [nextstrain web site](https: ## Setup -To run this tutorial you'll need to [install augur](../installation/installation) and [install Snakemake](https://snakemake.readthedocs.io/en/stable/getting_started/installation.html). +To run this tutorial you'll need to [install augur](../guides/install/augur_install.md) and [install Snakemake](https://snakemake.readthedocs.io/en/stable/getting_started/installation.html). ## Augur commands From fa384d1b4f1b8f91f8cc6409110cf45b89d30c86 Mon Sep 17 00:00:00 2001 From: Elias Harkins Date: Wed, 11 Nov 2020 15:53:44 -0800 Subject: [PATCH 27/59] [fetch-docs] update links Update links according to URLs resulting from the merging of https://github.com/nextstrain/docs.nextstrain.org/pull/36 --- docs/faq/what-is-a-build.md | 2 +- docs/index.rst | 2 +- docs/releases/migrating-v5-v6.md | 6 ++++-- docs/releases/v6.md | 2 +- docs/usage/cli/filter.rst | 4 ++-- 5 files changed, 9 insertions(+), 7 deletions(-) diff --git a/docs/faq/what-is-a-build.md b/docs/faq/what-is-a-build.md index 37191b472..405c67163 100644 --- a/docs/faq/what-is-a-build.md +++ b/docs/faq/what-is-a-build.md @@ -28,5 +28,5 @@ If you look at the [other tutorials](https://docs.nextstrain.org/en/latest/tutor While it is possible to run a build by running each of the individual steps, we typically group these together into a make-type file. [Snakemake](https://snakemake.readthedocs.io/en/stable/index.html) is "a tool to create reproducible and scalable data analyses... via a human-readable, Python-based language." -> Snakemake is installed as part of the [conda environment](https://docs.nextstrain.org/en/latest/guides/install/local-installation.html#install-augur-auspice-with-conda) or the [docker container](https://docs.nextstrain.org/en/latest/cli/doc/installation.html). +> Snakemake is installed as part of the [conda environment](https://docs.nextstrain.org/en/latest/guides/install/local-installation.html#install-augur-auspice-with-conda) or the [docker container](https://docs.nextstrain.org/en/latest/guides/install/cli-install.html). If you ever see a build which has a "Snakefile" then you can run this by typing `snakemake --cores 1` or `nextstrain build --cpus 1 .`, respectively. diff --git a/docs/index.rst b/docs/index.rst index 3e4774765..ead0a788c 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -9,7 +9,7 @@ Augur: A bioinformatics toolkit for phylogenetic analysis The documentation you are viewing is Augur's reference guide, which means it is information-oriented and targeted at users who just need info about how Augur works. * If you have a question about how to achieve a specific goal with Augur, check out our :doc:`Augur-focused How-to Guides section ` in the main Nextstrain documentation. - * If you want to learn the basics of how to use Augur from scratch, check out our :doc:`Zika tutorial ` in the main Nextstrain documentation. + * If you want to learn the basics of how to use Augur from scratch, check out our :doc:`Zika tutorial ` in the main Nextstrain documentation. * If you want to understand how Augur fits together with Auspice to visualize results, check out our :doc:`Data Formats section ` in the main Nextstrain documentation. diff --git a/docs/releases/migrating-v5-v6.md b/docs/releases/migrating-v5-v6.md index 6d9eef8e2..23512f81c 100644 --- a/docs/releases/migrating-v5-v6.md +++ b/docs/releases/migrating-v5-v6.md @@ -119,7 +119,8 @@ These may have been inferred for internal nodes by Augur functions like `augur t Certain traits have a geographic interpretation, e.g. "country". Auspice will attempt to display these traits on a map (and provide a drop-down to switch between them if there are more than one). -> _Make sure that these have corresponding entry in the lat-longs TSV file supplied to `export`. See how to do this [here](https://docs.nextstrain.org/en/latest/augur/docs/faq/lat_longs.html)._ +> _Make sure that these have corresponding entry in the lat-longs TSV file supplied to `export`. See how to do this [here](https://docs.nextstrain.org/en/latest/guides/bioinformatics/lat_longs.html)._ + --- @@ -528,5 +529,6 @@ In Auspice v2, all values are now displayed exactly as they arrive, allowing use Don't forget to also change them in any custom lat-long and/or coloring files you are using. We've also become stricter about the format of the files that pass in color and lat-long information. Previously, it didn't matter if columns were separated by spaces or tabs - now, they must be separated by tabs. -You can find out more about how to add [custom coloring](https://docs.nextstrain.org/en/latest/augur/docs/faq/colors.html) and [lat-long](https://docs.nextstrain.org/en/latest/augur/docs/faq/lat_longs.html) values. +You can find out more about how to add [custom coloring](https://docs.nextstrain.org/en/latest/guides/bioinformatics/colors.html) and [lat-long](https://docs.nextstrain.org/en/latest/guides/bioinformatics/lat_longs.html) values. + If you use the command `parse` to generate a metadata table from fields in a fasta header, you can use the flag `--prettify-fields` to apply some prettifying operations to specific metadata entries, see the documentation [`parse`](/usage/cli/parse). diff --git a/docs/releases/v6.md b/docs/releases/v6.md index 359b2a250..9bdbcec9d 100644 --- a/docs/releases/v6.md +++ b/docs/releases/v6.md @@ -46,7 +46,7 @@ Users can ask for this output and specify a file name using `--output-sequences` Deprecation warning: The argument `--output` is now deprecated. Please use `--output-node-data` instead. ## Import BEAST MCC trees -We now have instructions and functionality to import BEAST trees, see [here](https://docs.nextstrain.org/en/latest/augur/docs/faq/import-beast.html). +We now have instructions and functionality to import BEAST trees, see [here](https://docs.nextstrain.org/en/latest/guides/bioinformatics/import-beast.html). ## Prettifying of strings Previous auspice version "prettified" metadata strings (like changing 'north_america' to 'North America'). diff --git a/docs/usage/cli/filter.rst b/docs/usage/cli/filter.rst index 5c6a31542..3ebf97072 100644 --- a/docs/usage/cli/filter.rst +++ b/docs/usage/cli/filter.rst @@ -15,7 +15,7 @@ augur filter How we subsample sequences in the zika-tutoral ============================================== -As an example, we'll look that the ``filter`` command in greater detail using material form the :doc:`zika tutorial `. +As an example, we'll look that the ``filter`` command in greater detail using material form the :doc:`zika tutorial `. The filter command allows you to selected various subsets of your input data for different types of analysis. A simple example use of this command would be @@ -45,7 +45,7 @@ To drop such strains, you can pass the name of this file to the augur filter com --output filtered.fasta (To improve legibility, we have wrapped the command across multiple lines.) -If you run this command (you should be able to copy-paste this into your terminal) on the data provided in the :doc:`zika tutorial `, you should see that one of the sequences in the data set was dropped since its name was in the ``dropped_strains.txt`` file. +If you run this command (you should be able to copy-paste this into your terminal) on the data provided in the :doc:`zika tutorial `, you should see that one of the sequences in the data set was dropped since its name was in the ``dropped_strains.txt`` file. Another common filtering operation is subsetting of data to a achieve a more even spatio-temporal distribution or to cut-down data set size to more manageable numbers. The filter command allows you to select a specific number of sequences from specific groups, for example one sequence per month from each country: From 026d97de285eb4223978f2265e0f8424a0d5f496 Mon Sep 17 00:00:00 2001 From: John Huddleston Date: Tue, 10 Nov 2020 14:54:28 -0800 Subject: [PATCH 28/59] Do not consider ambiguous date results in numerical date filter Reverts logic in augur filter to not consider ambiguous date results and removes logic for tracking ambiguous dates from `get_numerical_dates`. --- augur/filter.py | 8 +------- augur/utils.py | 4 +--- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/augur/filter.py b/augur/filter.py index 4ffc9eb31..114e8f720 100644 --- a/augur/filter.py +++ b/augur/filter.py @@ -246,13 +246,7 @@ def run(args): # filter by date num_excluded_by_date = 0 if (args.min_date or args.max_date) and 'date' in meta_columns: - if num_excluded_by_ambiguous_date: - date_meta_dict = {} - for seq_name in seq_keep: - date_meta_dict[seq_name]=meta_dict[seq_name] - dates = get_numerical_dates(date_meta_dict, fmt="%Y-%m-%d") - else: - dates = get_numerical_dates(meta_dict, fmt="%Y-%m-%d") + dates = get_numerical_dates(meta_dict, fmt="%Y-%m-%d") tmp = [s for s in seq_keep if dates[s] is not None] if args.min_date: tmp = [s for s in tmp if (np.isscalar(dates[s]) or all(dates[s])) and np.max(dates[s])>args.min_date] diff --git a/augur/utils.py b/augur/utils.py index 9a2475bf3..ebd6ee963 100644 --- a/augur/utils.py +++ b/augur/utils.py @@ -93,7 +93,6 @@ def is_date_ambiguous(date, ambiguous_by="all"): ) def get_numerical_dates(meta_dict, name_col = None, date_col='date', fmt=None, min_max_year=None): - num_excluded_recs = 0 if fmt: from datetime import datetime numerical_dates = {} @@ -115,8 +114,7 @@ def get_numerical_dates(meta_dict, name_col = None, date_col='date', fmt=None, m numerical_dates[k] = None else: numerical_dates = {k:float(v) for k,v in meta_dict.items()} - if num_excluded_recs: - print("%s records were excluded due to ambiguous date"%num_excluded_recs) + return numerical_dates From 75099661ad5845e0ace2c975a740be560255dec0 Mon Sep 17 00:00:00 2001 From: John Huddleston Date: Tue, 10 Nov 2020 15:07:08 -0800 Subject: [PATCH 29/59] Minor updates based on Python and doc style Updates the help documentation for the ambiguous date filter and uses the "not" operator instead of "is False" for readability of boolean expressions. --- augur/filter.py | 5 +++-- tests/test_utils.py | 10 +++++----- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/augur/filter.py b/augur/filter.py index 114e8f720..edc0b3e8f 100644 --- a/augur/filter.py +++ b/augur/filter.py @@ -106,7 +106,7 @@ def register_arguments(parser): parser.add_argument('--include-where', nargs='+', help="Include samples with these values. ex: host=rat. Multiple values are processed as OR (having any of those specified will be included), not AND. This rule is applied last and ensures any sequences matching these rules will be included.") parser.add_argument('--exclude-ambiguous-dates-by', choices=['all', 'day', 'month', 'year'], - help='Exclude ambiguous dates Ex: days - excludes 2020-09-XX, months - excludes 2020-xx-19, all - excludes any ambiguous dates') + help='Exclude ambiguous dates by day (e.g., 2020-09-XX), month (e.g., 2020-XX-XX), year (e.g., 200X-10-01), or all date fields') parser.add_argument('--query', help="Filter samples by attribute. Uses Pandas Dataframe querying, see https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#indexing-query for syntax.") parser.add_argument('--output', '-o', help="output file", required=True) @@ -238,8 +238,9 @@ def run(args): if args.exclude_ambiguous_dates_by and 'date' in meta_columns: seq_keep_by_date = [] for seq_name in seq_keep: - if is_date_ambiguous(meta_dict[seq_name]['date'],args.exclude_ambiguous_dates_by) is False: + if not is_date_ambiguous(meta_dict[seq_name]['date'], args.exclude_ambiguous_dates_by): seq_keep_by_date.append(seq_name) + num_excluded_by_ambiguous_date = len(seq_keep) - len(seq_keep_by_date) seq_keep = seq_keep_by_date diff --git a/tests/test_utils.py b/tests/test_utils.py index 7de887fd0..ba2cbccd2 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -91,7 +91,7 @@ def test_read_bed_file_with_bad_lines(self, tmpdir): fh.write("\n".join(bed_lines)) with pytest.raises(Exception): utils.read_bed_file(bed_file) - + def test_read_mask_file_drm_file(self, tmpdir): """read_mask_file should handle drm files as well""" drm_file = str(tmpdir / "temp.drm") @@ -110,7 +110,7 @@ def test_is_date_ambiguous(self): def test_not_is_date_ambiguous(self): """ is_date_ambiguous should return false for valid dates""" - assert utils.is_date_ambiguous("2019-09-03", "all") is False - assert utils.is_date_ambiguous("2019-03-XX", "month") is False - assert utils.is_date_ambiguous("2019-XX-01", "day") is False - assert utils.is_date_ambiguous("2019-XX-XX", "year") is False + assert not utils.is_date_ambiguous("2019-09-03", "all") + assert not utils.is_date_ambiguous("2019-03-XX", "month") + assert not utils.is_date_ambiguous("2019-XX-01", "day") + assert not utils.is_date_ambiguous("2019-XX-XX", "year") From 3fd75d8662a3faa196fcd8ac1f960fc273250983 Mon Sep 17 00:00:00 2001 From: John Huddleston Date: Tue, 10 Nov 2020 15:09:40 -0800 Subject: [PATCH 30/59] Add support for dates without all three fields Expands the logic of the date ambiguity test function to support date strings like "YYYY" and "YYYY-MM" that caused the previous implementation to break. Since a date with only a year or year and month is stil valid, we mockup ambiguous day and month values for these incomplete date strings and explicitly test the resulting year, month, and day values. This commit also adds unit tests to represent these incomplete and ambiguous date strings. --- augur/utils.py | 15 +++++++++++++-- tests/test_utils.py | 3 +++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/augur/utils.py b/augur/utils.py index ebd6ee963..422b09bf8 100644 --- a/augur/utils.py +++ b/augur/utils.py @@ -84,9 +84,20 @@ def is_date_ambiguous(date, ambiguous_by="all"): ambiguous_by : str Field of the date string to test for ambiguity ("day", "month", "year", "all") """ - year, month, day = date.split('-') + date_components = date.split('-', 2) + + if len(date_components) == 3: + year, month, day = date_components + elif len(date_components) == 2: + year, month = date_components + day = "XX" + else: + year = date_components + month = "XX" + day = "XX" + return ( - (ambiguous_by == 'all' and 'X' in date) or + (ambiguous_by == 'all' and ('X' in year or 'X' in month or 'X' in day)) or (ambiguous_by == 'day' and 'X' in day) or (ambiguous_by == 'month' and 'X' in month) or (ambiguous_by == 'year' and 'X' in year) diff --git a/tests/test_utils.py b/tests/test_utils.py index ba2cbccd2..8bd4c6333 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -107,6 +107,8 @@ def test_is_date_ambiguous(self): assert utils.is_date_ambiguous("2019-XX-09", "month") assert utils.is_date_ambiguous("2019-03-XX", "day") assert utils.is_date_ambiguous("201X-03-09", "year") + assert utils.is_date_ambiguous("2019", "all") + assert utils.is_date_ambiguous("2019-10", "day") def test_not_is_date_ambiguous(self): """ is_date_ambiguous should return false for valid dates""" @@ -114,3 +116,4 @@ def test_not_is_date_ambiguous(self): assert not utils.is_date_ambiguous("2019-03-XX", "month") assert not utils.is_date_ambiguous("2019-XX-01", "day") assert not utils.is_date_ambiguous("2019-XX-XX", "year") + assert not utils.is_date_ambiguous("2019", "year") From ca1b9c52145272a53cfe2dbae4a441136b9f13a4 Mon Sep 17 00:00:00 2001 From: John Huddleston Date: Thu, 12 Nov 2020 09:42:40 -0800 Subject: [PATCH 31/59] Add more tests for incomplete and ambiguous dates Cleans up unit tests for the `is_date_ambiguous` function, collecting them into a single function with clearer documentation. Also, adds tests for valid incomplete date strings and fixes a bug in the `is_date_ambiguous` function that was revealed by these new tests. --- augur/utils.py | 2 +- tests/test_utils.py | 15 +++++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/augur/utils.py b/augur/utils.py index 422b09bf8..2ac54319c 100644 --- a/augur/utils.py +++ b/augur/utils.py @@ -92,7 +92,7 @@ def is_date_ambiguous(date, ambiguous_by="all"): year, month = date_components day = "XX" else: - year = date_components + year = date_components[0] month = "XX" day = "XX" diff --git a/tests/test_utils.py b/tests/test_utils.py index 8bd4c6333..694a9105c 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -102,18 +102,25 @@ def test_read_mask_file_drm_file(self, tmpdir): assert utils.read_mask_file(drm_file) == expected_sites def test_is_date_ambiguous(self): - """ is_date_ambiguous should return true for ambiguous dates""" + """is_date_ambiguous should return true for ambiguous dates and false for valid dates.""" + # Test complete date strings with ambiguous values. assert utils.is_date_ambiguous("2019-0X-0X", "all") assert utils.is_date_ambiguous("2019-XX-09", "month") assert utils.is_date_ambiguous("2019-03-XX", "day") assert utils.is_date_ambiguous("201X-03-09", "year") + + # Test incomplete date strings with ambiguous values. assert utils.is_date_ambiguous("2019", "all") + assert utils.is_date_ambiguous("201X", "year") + assert utils.is_date_ambiguous("2019-XX", "month") assert utils.is_date_ambiguous("2019-10", "day") - def test_not_is_date_ambiguous(self): - """ is_date_ambiguous should return false for valid dates""" + # Test complete date strings without ambiguous dates for the requested field. assert not utils.is_date_ambiguous("2019-09-03", "all") assert not utils.is_date_ambiguous("2019-03-XX", "month") - assert not utils.is_date_ambiguous("2019-XX-01", "day") + assert not utils.is_date_ambiguous("2019-09-03", "day") assert not utils.is_date_ambiguous("2019-XX-XX", "year") + + # Test incomplete date strings without ambiguous dates for the requested fields. assert not utils.is_date_ambiguous("2019", "year") + assert not utils.is_date_ambiguous("2019-10", "month") From 2ac2223daf88c2148caa1f6672080f45e741bb07 Mon Sep 17 00:00:00 2001 From: John Huddleston Date: Thu, 12 Nov 2020 14:58:05 -0800 Subject: [PATCH 32/59] Rename ambiguity option to "any" and update logic and tests accordingly Replaces the "all" option for `is_date_ambiguous` with "any" and updates the help documentation, ambiguity boolean logic, and unit tests to clarify this hierarchical treatment of ambiguity. --- augur/filter.py | 4 ++-- augur/utils.py | 19 ++++++++++--------- tests/test_utils.py | 11 ++++++++--- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/augur/filter.py b/augur/filter.py index edc0b3e8f..bb7f27dda 100644 --- a/augur/filter.py +++ b/augur/filter.py @@ -105,8 +105,8 @@ def register_arguments(parser): help="Exclude samples matching these conditions. Ex: \"host=rat\" or \"host!=rat\". Multiple values are processed as OR (matching any of those specified will be excluded), not AND") parser.add_argument('--include-where', nargs='+', help="Include samples with these values. ex: host=rat. Multiple values are processed as OR (having any of those specified will be included), not AND. This rule is applied last and ensures any sequences matching these rules will be included.") - parser.add_argument('--exclude-ambiguous-dates-by', choices=['all', 'day', 'month', 'year'], - help='Exclude ambiguous dates by day (e.g., 2020-09-XX), month (e.g., 2020-XX-XX), year (e.g., 200X-10-01), or all date fields') + parser.add_argument('--exclude-ambiguous-dates-by', choices=['any', 'day', 'month', 'year'], + help='Exclude ambiguous dates by day (e.g., 2020-09-XX), month (e.g., 2020-XX-XX), year (e.g., 200X-10-01), or any date fields. An ambiguous year makes the corresponding month and day ambiguous, too, even if those fields have unambiguous values (e.g., "201X-10-01"). Similarly, an ambiguous month makes the corresponding day ambiguous (e.g., "2010-XX-01").') parser.add_argument('--query', help="Filter samples by attribute. Uses Pandas Dataframe querying, see https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#indexing-query for syntax.") parser.add_argument('--output', '-o', help="output file", required=True) diff --git a/augur/utils.py b/augur/utils.py index 2ac54319c..5fb1ed923 100644 --- a/augur/utils.py +++ b/augur/utils.py @@ -73,16 +73,16 @@ def ambiguous_date_to_date_range(uncertain_date, fmt, min_max_year=None): def read_metadata(fname, query=None): return MetadataFile(fname, query).read() -def is_date_ambiguous(date, ambiguous_by="all"): +def is_date_ambiguous(date, ambiguous_by="any"): """ - Returns whether a given date string in the format of YYYY-MM-DD is ambiguous by a given part of the date (e.g., day, month, year, or all parts). + Returns whether a given date string in the format of YYYY-MM-DD is ambiguous by a given part of the date (e.g., day, month, year, or any parts). Parameters ---------- date : str Date string in the format of YYYY-MM-DD ambiguous_by : str - Field of the date string to test for ambiguity ("day", "month", "year", "all") + Field of the date string to test for ambiguity ("day", "month", "year", "any") """ date_components = date.split('-', 2) @@ -96,12 +96,13 @@ def is_date_ambiguous(date, ambiguous_by="all"): month = "XX" day = "XX" - return ( - (ambiguous_by == 'all' and ('X' in year or 'X' in month or 'X' in day)) or - (ambiguous_by == 'day' and 'X' in day) or - (ambiguous_by == 'month' and 'X' in month) or - (ambiguous_by == 'year' and 'X' in year) - ) + # Determine ambiguity hierarchically such that, for example, an ambiguous + # month implicates an ambiguous day even when day information is available. + return any(( + "X" in year, + "X" in month and ambiguous_by in ("any", "month", "day"), + "X" in day and ambiguous_by in ("any", "day") + )) def get_numerical_dates(meta_dict, name_col = None, date_col='date', fmt=None, min_max_year=None): if fmt: diff --git a/tests/test_utils.py b/tests/test_utils.py index 694a9105c..264bcc643 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -104,19 +104,24 @@ def test_read_mask_file_drm_file(self, tmpdir): def test_is_date_ambiguous(self): """is_date_ambiguous should return true for ambiguous dates and false for valid dates.""" # Test complete date strings with ambiguous values. - assert utils.is_date_ambiguous("2019-0X-0X", "all") + assert utils.is_date_ambiguous("2019-0X-0X", "any") assert utils.is_date_ambiguous("2019-XX-09", "month") assert utils.is_date_ambiguous("2019-03-XX", "day") assert utils.is_date_ambiguous("201X-03-09", "year") + assert utils.is_date_ambiguous("20XX-01-09", "month") + assert utils.is_date_ambiguous("2019-XX-03", "day") + assert utils.is_date_ambiguous("20XX-01-03", "day") # Test incomplete date strings with ambiguous values. - assert utils.is_date_ambiguous("2019", "all") + assert utils.is_date_ambiguous("2019", "any") assert utils.is_date_ambiguous("201X", "year") assert utils.is_date_ambiguous("2019-XX", "month") assert utils.is_date_ambiguous("2019-10", "day") + assert utils.is_date_ambiguous("2019-XX", "any") + assert utils.is_date_ambiguous("2019-XX", "day") # Test complete date strings without ambiguous dates for the requested field. - assert not utils.is_date_ambiguous("2019-09-03", "all") + assert not utils.is_date_ambiguous("2019-09-03", "any") assert not utils.is_date_ambiguous("2019-03-XX", "month") assert not utils.is_date_ambiguous("2019-09-03", "day") assert not utils.is_date_ambiguous("2019-XX-XX", "year") From e3d9ce8dda8d577d1da2724128adf1c975531cde Mon Sep 17 00:00:00 2001 From: John Huddleston Date: Fri, 13 Nov 2020 12:27:08 -0800 Subject: [PATCH 33/59] Augur was a single monolith, not two monoliths Rewrites the background paragraph such that the monolithic single Augur script is introduced early enough for other sentences to meaningfully reference this script. As part of this rewriting, I've tried to clarify what was confusing about the paragraph before Richard's edits. Specifically, I've noted that the original script was part of nextflu and only worked with flu data. The general flow of the paragraph is now like this: 1. Augur as a monolith in nextflu 2. Augur as many monoliths in Nextstrain 3. Redundancy and confusion for all, as a result of many monoliths, warranting a modular Augur. --- paper/paper.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/paper/paper.md b/paper/paper.md index 82ffb00b9..a330340ab 100644 --- a/paper/paper.md +++ b/paper/paper.md @@ -20,11 +20,10 @@ Under these circumstances, bioinformatics tools must scale rapidly with the numb To meet these needs, we developed Augur, a bioinformatics toolkit designed for phylogenetic analyses of human pathogens. Augur originally existed as an internal component of the nextflu [@Neher:2015jr] and Nextstrain [@Hadfield2018] applications. -The original nextflu scripts only supported seasonal influenza viruses. -When nextflu was replaced with Nextstrain and expanded to support multiple viral and bacterial pathogens, each pathogen received its own copy of the original scripts. +As a component of nextflu, Augur consisted of a single monolithic Python script that performed most operations in memory. +This script prepared a subset of seasonal influenza sequences and metadata and then processed those data to produce an annotated phylogeny for visualization in the nextflu web application. +When Nextstrain replaced nextflu and expanded to support multiple viral and bacterial pathogens, each pathogen received its own copy of the original script. The resulting redundancy of these large scripts complicated efforts to debug analyses, add new features for all pathogens, and add support for new pathogens. -In its original form, Augur consisted of two monolithic Python scripts, "prepare" and "process", that performed most operations in memory. -These scripts prepared a subset of pathogen sequences and metadata and then processed those data to produce an annotated phylogeny that could be viewed at [Nextstrain](https://nextstrain.org). Critically, this software architecture led to long-lived, divergent branches of untested code in version control that Nextstrain team members could not confidently merge without potentially breaking existing analyses. # Implementation From eb7698f8f81046f7f6701f29d7737dee6368a8b1 Mon Sep 17 00:00:00 2001 From: John Huddleston Date: Fri, 13 Nov 2020 14:28:01 -0800 Subject: [PATCH 34/59] Add authors Adds authors and updates Makefile to use the custom LaTeX template that expects author information to be defined in the frontmatter as "authors" instead of "author" (the default for the pandoc template but not for JOSS's template). --- paper/Makefile | 2 +- paper/paper.md | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/paper/Makefile b/paper/Makefile index 1a76885a0..67db76156 100644 --- a/paper/Makefile +++ b/paper/Makefile @@ -1,7 +1,7 @@ all : paper.pdf paper.pdf : paper.md paper.bib example-modular-augur-workflows.pdf - pandoc --citeproc --bibliography=paper.bib -s $< -o $@ + pandoc --citeproc --bibliography=paper.bib --template template.tex -s $< -o $@ example-modular-augur-workflows.pdf : example-modular-augur-workflows.dot dot -Tpdf $< > $@ diff --git a/paper/paper.md b/paper/paper.md index a330340ab..0597a1e6b 100644 --- a/paper/paper.md +++ b/paper/paper.md @@ -7,6 +7,37 @@ tags: - molecular biology - human pathogens - evolutionary biology +authors: + - name: John Huddleston + affiliation: "1, 2" + orcid: 0000-0002-4250-2063 + - name: James Hadfield + affiliation: 2 + orcid: 0000-0002-4118-6468 + - name: Thomas R. Sibley + affiliation: 2 + orcid: 0000-0001-5269-2297 + - name: Eli Harkins + affiliation: 2 + - name: Augur Contributors + - name: Trevor Bedford + affiliation: 2 + orcid: 0000-0002-4039-5794 + - name: Richard A. Neher + affiliation: "3, 4" + orcid: 0000-0003-2525-1407 + - name: Emma B. Hodcroft + affiliation: "3, 4" + orcid: 0000-0002-0078-2212 +affiliations: + - name: Molecular and Cell Biology Program, University of Washington, Seattle, WA, USA + index: 1 + - name: Vaccine and Infectious Disease Division, Fred Hutchinson Cancer Research Center, Seattle, WA, USA + index: 2 + - name: Biozentrum, University of Basel, Basel, Switzerland + index: 3 + - name: Swiss Institute of Bioinformatics, Basel, Switzerland + index: 4 date: 5 November 2020 bibliography: paper.bib --- From af87eb9c56cc261159ea560335394f2925c75a41 Mon Sep 17 00:00:00 2001 From: John Huddleston Date: Fri, 13 Nov 2020 14:29:23 -0800 Subject: [PATCH 35/59] Add third panel to figure 1 showing BEAST workflow Resize the existing panels in the figure and replaces the arbitrary colors created by Snakemake's `--dag` output with black for Augur rules and red for rules using non-Augur commands. --- paper/example-modular-augur-workflows.dot | 55 ++++++++++++++-------- paper/example-modular-augur-workflows.pdf | Bin 18742 -> 21990 bytes paper/paper.md | 7 +-- 3 files changed, 39 insertions(+), 23 deletions(-) diff --git a/paper/example-modular-augur-workflows.dot b/paper/example-modular-augur-workflows.dot index 60012f73d..72b29d1f1 100644 --- a/paper/example-modular-augur-workflows.dot +++ b/paper/example-modular-augur-workflows.dot @@ -2,17 +2,17 @@ digraph G { graph[margin=0]; subgraph cluster_zika_snakemake_dag { - graph[bgcolor=white, color=white, margin=0, center=true, label="A ", labeljus=left, labelloc=top, fontsize=20, size=4.25]; + graph[bgcolor=white, color=white, margin=0, center=true, label="A ", labeljus=left, labelloc=top, fontsize=20, size=2.25]; node[shape=box, style=rounded, fontname=sans, fontsize=12, penwidth=2]; edge[penwidth=2, color=grey]; - z1[label = "export", color = "0.27 0.6 0.85", style="rounded"]; - z2[label = "refine", color = "0.60 0.6 0.85", style="rounded"]; - z3[label = "traits", color = "0.07 0.6 0.85", style="rounded"]; - z4[label = "ancestral", color = "0.40 0.6 0.85", style="rounded"]; - z5[label = "translate", color = "0.33 0.6 0.85", style="rounded"]; - z6[label = "tree", color = "0.13 0.6 0.85", style="rounded"]; - z7[label = "align", color = "0.00 0.6 0.85", style="rounded"]; - z8[label = "filter", color = "0.53 0.6 0.85", style="rounded"]; + z1[label = "export", color = "0.0 0.0 0.0", style="rounded"]; + z2[label = "refine", color = "0.0 0.0 0.0", style="rounded"]; + z3[label = "traits", color = "0.0 0.0 0.0", style="rounded"]; + z4[label = "ancestral", color = "0.0 0.0 0.0", style="rounded"]; + z5[label = "translate", color = "0.0 0.0 0.0", style="rounded"]; + z6[label = "tree", color = "0.0 0.0 0.0", style="rounded"]; + z7[label = "align", color = "0.0 0.0 0.0", style="rounded"]; + z8[label = "filter", color = "0.0 0.0 0.0", style="rounded"]; z2 -> z1 z3 -> z1 z4 -> z1 @@ -29,19 +29,19 @@ digraph G { } subgraph cluster_tb_snakemake_dag { - graph[bgcolor=white, color=white, margin=0, center=true, label="B ", labeljus=left, labelloc=top, fontsize=20, size=4.25]; + graph[bgcolor=white, color=white, margin=0, center=true, label="B ", labeljus=left, labelloc=top, fontsize=20, size=2.25]; node[shape=box, style=rounded, fontname=sans, fontsize=12, penwidth=2]; edge[penwidth=2, color=grey]; - t1[label = "export", color = "0.22 0.6 0.85", style="rounded"]; - t2[label = "refine", color = "0.28 0.6 0.85", style="rounded"]; - t3[label = "traits", color = "0.00 0.6 0.85", style="rounded"]; - t4[label = "ancestral", color = "0.33 0.6 0.85", style="rounded"]; - t5[label = "translate", color = "0.44 0.6 0.85", style="rounded"]; - t6[label = "seqtraits", color = "0.56 0.6 0.85", style="rounded"]; - t7[label = "clades", color = "0.06 0.6 0.85", style="rounded"]; - t8[label = "tree", color = "0.17 0.6 0.85", style="rounded"]; - t9[label = "mask", color = "0.39 0.6 0.85", style="rounded"]; - t10[label = "filter", color = "0.50 0.6 0.85", style="rounded"]; + t1[label = "export", color = "0.0 0.0 0.0", style="rounded"]; + t2[label = "refine", color = "0.0 0.0 0.0", style="rounded"]; + t3[label = "traits", color = "0.0 0.0 0.0", style="rounded"]; + t4[label = "ancestral", color = "0.0 0.0 0.0", style="rounded"]; + t5[label = "translate", color = "0.0 0.0 0.0", style="rounded"]; + t6[label = "seqtraits", color = "0.0 0.0 0.0", style="rounded"]; + t7[label = "clades", color = "0.0 0.0 0.0", style="rounded"]; + t8[label = "tree", color = "0.0 0.0 0.0", style="rounded"]; + t9[label = "mask", color = "0.0 0.0 0.0", style="rounded"]; + t10[label = "filter", color = "0.0 0.0 0.0", style="rounded"]; t2 -> t1 t3 -> t1 t4 -> t1 @@ -63,4 +63,19 @@ digraph G { t9 -> t8 t10 -> t9 } + + subgraph cluster_beast{ + graph[bgcolor=white, color=white, margin=0, center=true, label="C ", labeljus=left, labelloc=top, fontsize=20, size=2.25]; + node[shape=box, style=rounded, fontname=sans, fontsize=12, penwidth=2]; + edge[penwidth=2, color=grey]; + b1[label = "BEAST", color = "red", style="rounded"]; + b2[label = "import beast", color = "0.0 0.0 0.0", style="rounded"]; + b3[label = "traits", color = "0.0 0.0 0.0", style="rounded"]; + b5[label = "export", color = "0.0 0.0 0.0", style="rounded"]; + b1 -> b2 + b1 -> b5 + b2 -> b5 + b2 -> b3 + b3 -> b5 + } } diff --git a/paper/example-modular-augur-workflows.pdf b/paper/example-modular-augur-workflows.pdf index b2592418a456369105b69a9edffee439bd95bf08..c95977214a2ee2325308a2f4676645a0c354c188 100644 GIT binary patch delta 18765 zcmZshV{j(gwytB_wr$(C(XnmkOUJg=v2CYg+qP{dcdcFf+`6~w{Ftn%dMC!Lr$$R6 z@Np$@ygWcxK8}pjx%;Gc^x#^U+8+Sa4`i*)WN3)ka%}#}bbXc3e4XlHF?{>&+xrqY zIbNai(liTB2eE)WCYLD8(i8O5I#m1la(42xfoT8r_OP$fit%T8bK(8W=!;9>wG}Y@ z=VxF8(D&0z_w!9yxv}|vGSvB`Sczz3Z}ik$wF4;HUcFHO z$>R#yA$z^100X4lCJ$?1w)&$6bYG`C! zM5Uxqapr2eG%U`z{m=LN-pW(w&9Xyp@6UZNA;FH|=hwvh)<{?!VGixr*8BCA_lu$+ zo#6Lb*b!o{z~t1XH3I+J6HXt3NAHu~%IwFo@HMIeV1l_e|FJrygCiF!czdbZ2moyw zGMVz&@fIjfsS-Qg<6)~{t4pHD)jI?d8;xMVuKW66YRLJEV!pG9J&pa>gz#lN#|>?( zH|$hxoGHDgCk|1Y1l#9|^VZe%pboaFdkZ{SHZYzsYCov`Pykjx5(wR7m{~J;1#ubX zb6BBe7DVC<(CRESFlR%OkZv?THvmuA1yzeR+>kLonKEL=Np+M9)nLnI^YLgQ%%I2D zAKj-Z5ERX0v45(<%w}l-;FPJZBw?JdFrEToyd!R8)LPmX-;I(6 zm!oH_m%yj@&n-6I<15Yg@AD0r@%=mu@^%4HEMA?@R2EmUzZ$pLrVlAvCe@DSUgRP3rRkQUGoKKrpIaW1iX$>yCqljf9j2FuC=EU>}1TCLAPAUHln? zaZ^KuDmFq2iRK2A51(@kTo`W?IU;ou-+J@HBe(&`p_yfs6D80EFkS{*W}T`zwe7zX zc>h@?2<_XgI{)Lv$q1ssFROBx*Fs!Ma&4O2Ow0pQ$wJkZ-Ju_VVIJKDZ!om3nh{yx zjV_h>U|2yvQUrqfCe0=)bq&h)w9D0IKxG{HY%5HH5o}Nnmrde$# zIi}W8$ri^MHFj{;8oW{n+Nl_C)C~$hcNRFP(`_pQD9s=q-eqDsKFLHiEi}HAN)J3t8Eq=aPyEBqG$Lwcr3$^d4BU(iYdEfgC#Qb3buT*3t)qz;qDTx-|MMoqJpSq6j>Tfj4Lsd8!upTap z+uBXp$X*V4X%4oQAZYlXOe84Fz*1l&`YM)Spx6Nx z`aC3jOi>8{pLu#7NF56WrG)ir#-RMV0aVv%pjeyp%=uo}O1a@W34wc+f5Y#AdK1T0 zm3umT!1-=^QkP@dDbx>hU~yuvIG&Iu;(!_c8)_la3c4vg!KpS*B&tfS7MkPSSt4j= z79LR5AK(KZqC+4mE)c7X-$+98^q@LE?&shvTrx6%VPNUV2Rt0evXHRMEtdGN?8Y3v zlT631@-ZG-tc*p031GbQwbhS-14hB0cOG0ka&72}NcS@7NYb?qOyrxe5yNJjbT~6Q zcSsI=RvQI-v+v0^dp%ncWk(e2mR8ee>uTo!2Ey&g)2JK9L2g}tL&GmPsq6?giMgQw z)_QUgAP;lw+4a7>OK|pKWnX3|iUMhb*+FgkcqLao2$m2INK}()_C3#}NVjRD(l2l) z4Hzzg3$34P)47ARFvZ#?Abi+K$mdb6iX47#-g-%oR@1oa*vq+1ZXZ{VF@ld5$mehX z5v#HdJXr^6o1~?31Q82(AuN>@ClW|D+}{S8sS${s#R6#ixl>L zqUawu)Vv5z!zt=AOzG&L!4obL5#NDEi0{^<%7jpzv84#+A}*1tdUuEwzup?6da%OT4xZMc^#b`B-V^==n(DWw%pWZ}E zc>1qGmg?WrGMA)FG8}Mnro_(bHO)FOVj0jBy4dHb0t?~cAE%nk9>8;;pdv1fRsExJ z9IS@|4L83t1+@c{CnuA&o*#iz!p64lzu4di@|kRz5kn}5{(3M3k)(@COmbHMR&>p< zSZ#s#z@8ZXO* z?dJXlqP!Pt2kFrc1iG1%c#yf?c*vm=5P9fX=@UdYP6y)H8wO@O{k;oSyE;30Zmz1i z;gr2_{yBS##~i~~WO$B|kr}BI-8wjce5mlH>CXz|{(+X6`CO%MNCy@|AC4omTA3VLWD_`|<2DchW|8 zc$S2k*pgQAFc$~Cghh~h{C$35p32{ajD|kMg=%%Z&HMM+Zg?F;1z`Z-S{r8W2E#VG z-dZM8GT(88?HfOv^%`obw43p8z0+)Y$UsVJ(VI7=BM_KNQq$9b-IE4^95;c8OzR#t zAywNB=)`=g1&5kWdX7V~G8pPad3%*K*L>h-lt1wk`}SW2&(x2}S)*$zLCa0%q(|r& z8y4f&efdGVP*LSG|6T;l8B(z0(pz9g;vT=C42L!)lKnT!( z*i5=M20OZ@W@)<7$i(9#(CNyguTeJOUT6>p?K1IUp_ZkikBL+|)Embj(-bRJHyZ9$ zz6R$byNzrdu;xnNXjD26wILX3RccJC;3)4g=2$>cEokj`RQdxXYaZ-3(bKgoPi}u% z>(a{+F%j3C2WC(VfY8RVfqPz?b)72k>&`13Ghy|YD*)j}Scc7nCw6qT8WzF@3mx46 zUxmONz+`VKe87e(F5R8fB5Vr!zdj7uT>VOuPDD(tFQh&}Fb)g3Y?bw=2#C+2 zM5$6xMwIE7lm-y9o8vMtFNpql4wpLis>*3^LJku9J@1KaE;H|JRKh$1|${^t7@? zs@j(ER>a449(iBoj>HDxP?=*Po8l!JrQ3QGKo#&dRj`_RRIE7;c}tDVm##Jib652* zcI-?6)PwWJt>ZgW{|+n^ZA-T8H=+r>m(C=y;Cz%(1;y0&FesNbIA)V7QWmMypjdlv z~M`f(7%D&0yr3YIwQz0Hn>Hbs4gIn24D}33yfr&0&Scq57awaZ}!!y%RfSe}m&rzEq+0Qo@l^nX*e3 z!IK`zqQ?f~iQZHG_qa-3X@_x@hRhLH1kUQ%h>3Or9Zp92>4Etgd}L8oWc_HlKJK>< zL8*XCByv7e49Hu6I70PN1)hAc)k$Dk9XHs1-R}Lx0E)`_dX>wN0yudIJ=`lzVnN^t&n|Thr zZ#>`J9;wLeil!@hz8j@QW7hb1DPVj=NIU4G!02O18Zpu{$Y$65ePA9q(;As}D zU28l!bSwPQ;4q+@3*k8BXG-`g7e_Ir15pIDoaIqSyc1N*@V=Q-YE!Ml&pbRKX?dp8 zTz1dl+;F^vI62=;uPwU4+U{DAUQ^wd*i@mYDCe~Vig&h-BhjJJr8nY;ih5}l_8h8K z&sv^+;YqE(;h@%`(c;CZdttQ*s0xYmZob7uuPjty;Lyo*xel=‰wIiBeiB=EZ{ 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%0D8Hm3689fIbS51w-!6Q=y) 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 delta 16099 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 K3eoRku>T*}7BkKO diff --git a/paper/paper.md b/paper/paper.md index 0597a1e6b..d84203226 100644 --- a/paper/paper.md +++ b/paper/paper.md @@ -82,12 +82,13 @@ Augur can be installed from PyPI ([nextstrain-augur](https://pypi.org/project/ne # Figures -![Example workflows composed with Snakemake from Augur commands for A) Zika virus and B) tuberculosis. - Each node in the workflow graph represents an Augur command than performs a specific part of the analysis (e.g., aligning sequences, building a tree, etc.). +![Example workflows composed with Snakemake from Augur commands for A) Zika virus, B) tuberculosis, and C) a BEAST analysis. + Each node in the workflow graph represents a command than performs a specific part of the analysis (e.g., aligning sequences, building a tree, etc.) with Augur commands in black and non-Augur commands in red. A typical workflow starts by filtering sequences and metadata to a desired subset for analysis followed by inference of a phylogeny, annotation of that phylogeny, and export of the annotated phylogeny to a JSON that can be viewed on Nextstrain. Workflows for viral (A) and bacterial (B) pathogens follow a similar structure but also support custom pathogen-specific steps. + Augur's modularity enables workflows that build on outputs from other tools in the field like BEAST (C). Multiple outgoing edges from a single node represent opportunities to run the workflow in parallel. - See the full workflows at [https://github.com/nextstrain/zika-tutorial](https://github.com/nextstrain/zika-tutorial) and [https://github.com/nextstrain/tb](https://github.com/nextstrain/tb).\label{fig:example-workflows}](example-modular-augur-workflows.pdf) + See the full viral and bacterial workflows at [https://github.com/nextstrain/zika-tutorial](https://github.com/nextstrain/zika-tutorial) and [https://github.com/nextstrain/tb](https://github.com/nextstrain/tb).\label{fig:example-workflows}](example-modular-augur-workflows.pdf) # Acknowledgments From 563eb59b2a85bba705b266ab091eeb1fa83edc50 Mon Sep 17 00:00:00 2001 From: John Huddleston Date: Fri, 13 Nov 2020 14:40:16 -0800 Subject: [PATCH 36/59] Add placeholder affiliation for Augur Contributors JOSS's paper template require an affiliation for each author entry and will assign the first affiliation to any authors with missing affiliation entries. This commit addresses this issue by adding a placeholder affiliation for Augur Contributors along the lines of the "Independent Researcher" example in the JOSS documentation [1]. [1] https://joss.readthedocs.io/en/latest/submitting.html?highlight=affiliation#example-paper-and-bibliography --- paper/paper.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/paper/paper.md b/paper/paper.md index d84203226..44884ae78 100644 --- a/paper/paper.md +++ b/paper/paper.md @@ -20,24 +20,27 @@ authors: - name: Eli Harkins affiliation: 2 - name: Augur Contributors + affiliation: 3 - name: Trevor Bedford affiliation: 2 orcid: 0000-0002-4039-5794 - name: Richard A. Neher - affiliation: "3, 4" + affiliation: "4, 5" orcid: 0000-0003-2525-1407 - name: Emma B. Hodcroft - affiliation: "3, 4" + affiliation: "4, 5" orcid: 0000-0002-0078-2212 affiliations: - name: Molecular and Cell Biology Program, University of Washington, Seattle, WA, USA index: 1 - name: Vaccine and Infectious Disease Division, Fred Hutchinson Cancer Research Center, Seattle, WA, USA index: 2 - - name: Biozentrum, University of Basel, Basel, Switzerland + - name: Open Source Software community index: 3 - - name: Swiss Institute of Bioinformatics, Basel, Switzerland + - name: Biozentrum, University of Basel, Basel, Switzerland index: 4 + - name: Swiss Institute of Bioinformatics, Basel, Switzerland + index: 5 date: 5 November 2020 bibliography: paper.bib --- From c27a6df2034f8c8e4259bd4b7e1c4e3780978774 Mon Sep 17 00:00:00 2001 From: John Huddleston Date: Fri, 13 Nov 2020 15:14:51 -0800 Subject: [PATCH 37/59] Update change log to reflect new features --- CHANGES.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 1728f939e..27857991d 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,6 +2,14 @@ ## __NEXT__ +### Features + +* docs: Migrate non-reference documentation to docs.nextstrain.org [#620][] +* filter: Add `--exclude-ambiguous-dates-by` flag to enable exclusion of samples with ambiguous dates [#623][] and [#631][] + +[#620]: https://github.com/nextstrain/augur/pull/620 +[#623]: https://github.com/nextstrain/augur/pull/623 +[#631]: https://github.com/nextstrain/augur/pull/631 ## 10.0.4 (6 November 2020) From d2d542386e5f53013d3893035ec0859708340a7c Mon Sep 17 00:00:00 2001 From: John Huddleston Date: Fri, 13 Nov 2020 15:34:56 -0800 Subject: [PATCH 38/59] version 10.1.0 --- CHANGES.md | 3 +++ augur/__version__.py | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 27857991d..fd9bc8771 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,6 +2,9 @@ ## __NEXT__ + +## 10.1.0 (13 November 2020) + ### Features * docs: Migrate non-reference documentation to docs.nextstrain.org [#620][] diff --git a/augur/__version__.py b/augur/__version__.py index 8b6c56bfb..7a763534d 100644 --- a/augur/__version__.py +++ b/augur/__version__.py @@ -1,4 +1,4 @@ -__version__ = '10.0.4' +__version__ = '10.1.0' def is_augur_version_compatible(version): From bddeaf4e46c53bdfab7609c65888466fbd62124d Mon Sep 17 00:00:00 2001 From: Richard Neher Date: Sun, 15 Nov 2020 17:43:21 +0100 Subject: [PATCH 39/59] chore: bump required treetime version to 0.8.0 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 7d5a16c02..9d2ee94d8 100644 --- a/setup.py +++ b/setup.py @@ -53,7 +53,7 @@ "jsonschema >=3.0.0, ==3.*", "packaging >=19.2", "pandas >=1.0.0, ==1.*", - "phylo-treetime >=0.7.4, ==0.7.*" + "phylo-treetime ==0.8.*" ], extras_require = { 'full': [ From 821d33c2a5998848958de2855650795a4e2d9690 Mon Sep 17 00:00:00 2001 From: Richard Neher Date: Sun, 15 Nov 2020 17:50:48 +0100 Subject: [PATCH 40/59] chore: treetime new requires biopython <1.77 because of a bug in nexus export --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 9d2ee94d8..f2d8dffa4 100644 --- a/setup.py +++ b/setup.py @@ -49,7 +49,7 @@ python_requires = '>={}'.format('.'.join(str(n) for n in min_version)), install_requires = [ "bcbio-gff >=0.6.0, ==0.6.*", - "biopython >=1.67, <=1.78", + "biopython >=1.67, <=1.76", "jsonschema >=3.0.0, ==3.*", "packaging >=19.2", "pandas >=1.0.0, ==1.*", From f022f0922d9ac2a8636f78ea02237cff668aa7db Mon Sep 17 00:00:00 2001 From: Richard Neher Date: Sun, 15 Nov 2020 17:52:50 +0100 Subject: [PATCH 41/59] tests: remove VisibleDeprecationWarning from test output since treetime no longer outputs this --- tests/functional/ancestral.t | 6 ------ tests/functional/refine.t | 8 -------- 2 files changed, 14 deletions(-) diff --git a/tests/functional/ancestral.t b/tests/functional/ancestral.t index 54966f54a..c064edc05 100644 --- a/tests/functional/ancestral.t +++ b/tests/functional/ancestral.t @@ -11,8 +11,6 @@ The default is to infer ambiguous bases, so there should not be N bases in the i > --alignment ancestral/aligned.fasta \ > --output-node-data "$TMP/ancestral_mutations.json" \ > --output-sequences "$TMP/ancestral_sequences.fasta" > /dev/null - */treetime/aa_models.py:108: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray (glob) - [0.800038509951648, 1.20274751778601, 1.55207513886163, 1.46600946033173, 0.830022143283238, 1.5416250309563, 1.53255698189437, 1.41208067821187, 1.47469999960758, 0.351200119909572, 0.570542199221932, 1.21378822764856, 0.609532859331199, 0.692733248746636, 1.40887880416009, 1.02015839286433, 0.807404666228614, 1.268589159299, 0.933095433689795] $ grep N "$TMP/ancestral_sequences.fasta" >NODE_0000000 @@ -26,8 +24,6 @@ There should not be N bases in the inferred output sequences. > --infer-ambiguous \ > --output-node-data "$TMP/ancestral_mutations.json" \ > --output-sequences "$TMP/ancestral_sequences.fasta" > /dev/null - */treetime/aa_models.py:108: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray (glob) - [0.800038509951648, 1.20274751778601, 1.55207513886163, 1.46600946033173, 0.830022143283238, 1.5416250309563, 1.53255698189437, 1.41208067821187, 1.47469999960758, 0.351200119909572, 0.570542199221932, 1.21378822764856, 0.609532859331199, 0.692733248746636, 1.40887880416009, 1.02015839286433, 0.807404666228614, 1.268589159299, 0.933095433689795] $ grep N "$TMP/ancestral_sequences.fasta" >NODE_0000000 @@ -41,8 +37,6 @@ There be N bases in the inferred output sequences. > --keep-ambiguous \ > --output-node-data "$TMP/ancestral_mutations.json" \ > --output-sequences "$TMP/ancestral_sequences.fasta" > /dev/null - */treetime/aa_models.py:108: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray (glob) - [0.800038509951648, 1.20274751778601, 1.55207513886163, 1.46600946033173, 0.830022143283238, 1.5416250309563, 1.53255698189437, 1.41208067821187, 1.47469999960758, 0.351200119909572, 0.570542199221932, 1.21378822764856, 0.609532859331199, 0.692733248746636, 1.40887880416009, 1.02015839286433, 0.807404666228614, 1.268589159299, 0.933095433689795] $ grep N "$TMP/ancestral_sequences.fasta" >NODE_0000000 diff --git a/tests/functional/refine.t b/tests/functional/refine.t index 8edee4253..c2895cfda 100644 --- a/tests/functional/refine.t +++ b/tests/functional/refine.t @@ -17,8 +17,6 @@ Try building a time tree. > --date-inference marginal \ > --clock-filter-iqd 4 \ > --seed 314159 > /dev/null - */treetime/aa_models.py:108: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray (glob) - [0.800038509951648, 1.20274751778601, 1.55207513886163, 1.46600946033173, 0.830022143283238, 1.5416250309563, 1.53255698189437, 1.41208067821187, 1.47469999960758, 0.351200119909572, 0.570542199221932, 1.21378822764856, 0.609532859331199, 0.692733248746636, 1.40887880416009, 1.02015839286433, 0.807404666228614, 1.268589159299, 0.933095433689795] Confirm that TreeTime trees match expected topology and branch lengths. @@ -40,8 +38,6 @@ Build a time tree with mutations as the reported divergence unit. > --clock-filter-iqd 4 \ > --seed 314159 \ > --divergence-units mutations > /dev/null - */treetime/aa_models.py:108: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray (glob) - [0.800038509951648, 1.20274751778601, 1.55207513886163, 1.46600946033173, 0.830022143283238, 1.5416250309563, 1.53255698189437, 1.41208067821187, 1.47469999960758, 0.351200119909572, 0.570542199221932, 1.21378822764856, 0.609532859331199, 0.692733248746636, 1.40887880416009, 1.02015839286433, 0.807404666228614, 1.268589159299, 0.933095433689795] Confirm that TreeTime trees match expected topology and branch lengths. @@ -62,8 +58,6 @@ This is one way to get named internal nodes for downstream analyses and does not > --clock-filter-iqd 4 \ > --seed 314159 \ > --divergence-units mutations-per-site > /dev/null - */treetime/aa_models.py:108: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray (glob) - [0.800038509951648, 1.20274751778601, 1.55207513886163, 1.46600946033173, 0.830022143283238, 1.5416250309563, 1.53255698189437, 1.41208067821187, 1.47469999960758, 0.351200119909572, 0.570542199221932, 1.21378822764856, 0.609532859331199, 0.692733248746636, 1.40887880416009, 1.02015839286433, 0.807404666228614, 1.268589159299, 0.933095433689795] Confirm that trees match expected topology and branch lengths, given that the output should not be a time tree. @@ -87,8 +81,6 @@ This approach only works when we provide an alignment FASTA. > --clock-filter-iqd 4 \ > --seed 314159 \ > --divergence-units mutations > /dev/null - */treetime/aa_models.py:108: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray (glob) - [0.800038509951648, 1.20274751778601, 1.55207513886163, 1.46600946033173, 0.830022143283238, 1.5416250309563, 1.53255698189437, 1.41208067821187, 1.47469999960758, 0.351200119909572, 0.570542199221932, 1.21378822764856, 0.609532859331199, 0.692733248746636, 1.40887880416009, 1.02015839286433, 0.807404666228614, 1.268589159299, 0.933095433689795] Confirm that trees match expected topology and branch lengths, given that the output should not be a time tree. From 6b9cc9cf7f68467a53a0c9f14286d80762a53d87 Mon Sep 17 00:00:00 2001 From: Richard Neher Date: Sun, 15 Nov 2020 18:19:22 +0100 Subject: [PATCH 42/59] tests: update more test outputs --- tests/builds/zika.t | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tests/builds/zika.t b/tests/builds/zika.t index a752b35fb..900e92c2b 100644 --- a/tests/builds/zika.t +++ b/tests/builds/zika.t @@ -75,8 +75,6 @@ Build a time tree from the existing tree topology, the multiple sequence alignme > --date-inference marginal \ > --clock-filter-iqd 4 \ > --seed 314159 > /dev/null - */treetime/aa_models.py:108: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray (glob) - [0.800038509951648, 1.20274751778601, 1.55207513886163, 1.46600946033173, 0.830022143283238, 1.5416250309563, 1.53255698189437, 1.41208067821187, 1.47469999960758, 0.351200119909572, 0.570542199221932, 1.21378822764856, 0.609532859331199, 0.692733248746636, 1.40887880416009, 1.02015839286433, 0.807404666228614, 1.268589159299, 0.933095433689795] Confirm that TreeTime trees match expected topology and branch lengths. @@ -107,8 +105,6 @@ Infer ancestral sequences from the tree. > --infer-ambiguous \ > --output-node-data "$TMP/out/nt_muts.json" \ > --inference joint > /dev/null - */treetime/aa_models.py:108: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray (glob) - [0.800038509951648, 1.20274751778601, 1.55207513886163, 1.46600946033173, 0.830022143283238, 1.5416250309563, 1.53255698189437, 1.41208067821187, 1.47469999960758, 0.351200119909572, 0.570542199221932, 1.21378822764856, 0.609532859331199, 0.692733248746636, 1.40887880416009, 1.02015839286433, 0.807404666228614, 1.268589159299, 0.933095433689795] $ diff -u --ignore-matching-lines version "results/nt_muts.json" "$TMP/out/nt_muts.json" From a4fafd41bbea9a22e946f7f29694ff123748395a Mon Sep 17 00:00:00 2001 From: John Huddleston Date: Mon, 16 Nov 2020 09:39:36 -0800 Subject: [PATCH 43/59] Update change log for patch release --- CHANGES.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index fd9bc8771..8b6ab0046 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,6 +2,11 @@ ## __NEXT__ +### Bug Fixes + +* dependencies: Require the most recent minor versions of TreeTime (0.8.X) to fix numpy matrix errors [#633][] + +[#633]: https://github.com/nextstrain/augur/pull/633 ## 10.1.0 (13 November 2020) From f75f05eefd7bbe87d65a9018fad6a5ebab3bb138 Mon Sep 17 00:00:00 2001 From: John Huddleston Date: Mon, 16 Nov 2020 09:40:16 -0800 Subject: [PATCH 44/59] version 10.1.1 --- CHANGES.md | 3 +++ augur/__version__.py | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 8b6ab0046..3816769be 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,6 +2,9 @@ ## __NEXT__ + +## 10.1.1 (16 November 2020) + ### Bug Fixes * dependencies: Require the most recent minor versions of TreeTime (0.8.X) to fix numpy matrix errors [#633][] diff --git a/augur/__version__.py b/augur/__version__.py index 7a763534d..0919ec80b 100644 --- a/augur/__version__.py +++ b/augur/__version__.py @@ -1,4 +1,4 @@ -__version__ = '10.1.0' +__version__ = '10.1.1' def is_augur_version_compatible(version): From d5f68ad0f821054fab1e18a9db2149e1032bdaa8 Mon Sep 17 00:00:00 2001 From: John Huddleston Date: Tue, 17 Nov 2020 09:46:31 -0800 Subject: [PATCH 45/59] Add funding to acknowledgements Adds funding for John, Trevor, and Richard based on recent papers. Adds placeholder sentences for funding information for James, Tom, Eli, and Emma. --- paper/paper.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/paper/paper.md b/paper/paper.md index 44884ae78..cde61a460 100644 --- a/paper/paper.md +++ b/paper/paper.md @@ -97,5 +97,12 @@ Augur can be installed from PyPI ([nextstrain-augur](https://pypi.org/project/ne Thank you to all of [the open source community members who have contributed to Augur](https://github.com/nextstrain/augur/graphs/contributors). Thank you to Dan Fornika from BCCDC Public Health Laboratory for creating the first conda recipe for Augur in Bioconda. +JH is a Graduate Research Fellow and is supported by the NIH grant NIAID F31AI140714. +JH is supported by. +TRS is supported by. +EH is supported by. +TB is a Pew Biomedical Scholar and is supported by NIH grants NIGMS R35 GM119774-01, NIAID U19 AI117891-01 and NIAID R01 AI127893-01. +RAN is supported by NIAID R01 AI127893-01 and institutional core funding. +EBH is supported by. # References From 118d01f315def6532b2cb2e7c2f98a32ff170057 Mon Sep 17 00:00:00 2001 From: Trevor Bedford Date: Tue, 17 Nov 2020 10:26:59 -0800 Subject: [PATCH 46/59] Small revisions to the manuscript 1. Update affiliations 2. Update acknowledgements --- paper/paper.md | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/paper/paper.md b/paper/paper.md index cde61a460..9f47056c6 100644 --- a/paper/paper.md +++ b/paper/paper.md @@ -22,7 +22,7 @@ authors: - name: Augur Contributors affiliation: 3 - name: Trevor Bedford - affiliation: 2 + affiliation: "1, 2" orcid: 0000-0002-4039-5794 - name: Richard A. Neher affiliation: "4, 5" @@ -50,7 +50,7 @@ bibliography: paper.bib The analysis of human pathogens requires a diverse collection of bioinformatics tools. These tools include standard genomic and phylogenetic software and custom software developed to handle the relatively numerous and short genomes of viruses and bacteria. Researchers increasingly depend on the outputs of these tools to infer transmission dynamics of human diseases and make actionable recommendations to public health officials [@Black2020; @Gardy2015]. -Under these circumstances, bioinformatics tools must scale rapidly with the number of disease samples to enable real-time analyses of pathogen evolution. +Under these circumstances, bioinformatics tools must scale rapidly with the number of samples to enable real-time analyses of pathogen evolution. To meet these needs, we developed Augur, a bioinformatics toolkit designed for phylogenetic analyses of human pathogens. Augur originally existed as an internal component of the nextflu [@Neher:2015jr] and Nextstrain [@Hadfield2018] applications. @@ -97,12 +97,10 @@ Augur can be installed from PyPI ([nextstrain-augur](https://pypi.org/project/ne Thank you to all of [the open source community members who have contributed to Augur](https://github.com/nextstrain/augur/graphs/contributors). Thank you to Dan Fornika from BCCDC Public Health Laboratory for creating the first conda recipe for Augur in Bioconda. -JH is a Graduate Research Fellow and is supported by the NIH grant NIAID F31AI140714. -JH is supported by. -TRS is supported by. -EH is supported by. -TB is a Pew Biomedical Scholar and is supported by NIH grants NIGMS R35 GM119774-01, NIAID U19 AI117891-01 and NIAID R01 AI127893-01. -RAN is supported by NIAID R01 AI127893-01 and institutional core funding. -EBH is supported by. +JHu is a Graduate Research Fellow and is supported by the NIH grant NIAID F31AI140714. +TB is a Pew Biomedical Scholar. +RAN is supported by... +EBH is supported by... +This work is supported by NIH awards NIGMS R35 GM119774-01, NIAID U19 AI117891-01 and NIAID R01 AI127893-01. # References From c609bbacc7eb3ce37a9317b63f53555d7094e928 Mon Sep 17 00:00:00 2001 From: John Huddleston Date: Tue, 17 Nov 2020 11:17:47 -0800 Subject: [PATCH 47/59] Add LaTeX template required to build paper PDF --- paper/template.tex | 538 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 538 insertions(+) create mode 100644 paper/template.tex diff --git a/paper/template.tex b/paper/template.tex new file mode 100644 index 000000000..a9c33c7f5 --- /dev/null +++ b/paper/template.tex @@ -0,0 +1,538 @@ +% Options for packages loaded elsewhere +\PassOptionsToPackage{unicode$for(hyperrefoptions)$,$hyperrefoptions$$endfor$}{hyperref} +\PassOptionsToPackage{hyphens}{url} +$if(colorlinks)$ +\PassOptionsToPackage{dvipsnames,svgnames*,x11names*}{xcolor} +$endif$ +$if(dir)$ +$if(latex-dir-rtl)$ +\PassOptionsToPackage{RTLdocument}{bidi} +$endif$ +$endif$ +$if(CJKmainfont)$ +\PassOptionsToPackage{space}{xeCJK} +$endif$ +% +\documentclass[ +$if(fontsize)$ + $fontsize$, +$endif$ +$if(lang)$ + $babel-lang$, +$endif$ +$if(papersize)$ + $papersize$paper, +$endif$ +$if(beamer)$ + ignorenonframetext, +$if(handout)$ + handout, +$endif$ +$if(aspectratio)$ + aspectratio=$aspectratio$, +$endif$ +$endif$ +$for(classoption)$ + $classoption$$sep$, +$endfor$ +]{$documentclass$} +$if(beamer)$ +$if(background-image)$ +\usebackgroundtemplate{% + \includegraphics[width=\paperwidth]{$background-image$}% +} +$endif$ +\usepackage{pgfpages} +\setbeamertemplate{caption}[numbered] +\setbeamertemplate{caption label separator}{: } +\setbeamercolor{caption name}{fg=normal text.fg} +\beamertemplatenavigationsymbols$if(navigation)$$navigation$$else$empty$endif$ +$for(beameroption)$ +\setbeameroption{$beameroption$} +$endfor$ +% Prevent slide breaks in the middle of a paragraph +\widowpenalties 1 10000 +\raggedbottom +$if(section-titles)$ +\setbeamertemplate{part page}{ + \centering + \begin{beamercolorbox}[sep=16pt,center]{part title} + \usebeamerfont{part title}\insertpart\par + \end{beamercolorbox} +} +\setbeamertemplate{section page}{ + \centering + \begin{beamercolorbox}[sep=12pt,center]{part title} + \usebeamerfont{section title}\insertsection\par + \end{beamercolorbox} +} +\setbeamertemplate{subsection page}{ + \centering + \begin{beamercolorbox}[sep=8pt,center]{part title} + \usebeamerfont{subsection title}\insertsubsection\par + \end{beamercolorbox} +} +\AtBeginPart{ + \frame{\partpage} +} +\AtBeginSection{ + \ifbibliography + \else + \frame{\sectionpage} + \fi +} +\AtBeginSubsection{ + \frame{\subsectionpage} +} +$endif$ +$endif$ +$if(beamerarticle)$ +\usepackage{beamerarticle} % needs to be loaded first +$endif$ +$if(fontfamily)$ +\usepackage[$for(fontfamilyoptions)$$fontfamilyoptions$$sep$,$endfor$]{$fontfamily$} +$else$ +\usepackage{lmodern} +$endif$ +$if(linestretch)$ +\usepackage{setspace} +$endif$ +\usepackage{amssymb,amsmath} +\usepackage{ifxetex,ifluatex} +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc} + \usepackage[utf8]{inputenc} + \usepackage{textcomp} % provide euro and other symbols +\else % if luatex or xetex +$if(mathspec)$ + \ifxetex + \usepackage{mathspec} + \else + \usepackage{unicode-math} + \fi +$else$ + \usepackage{unicode-math} +$endif$ + \defaultfontfeatures{Scale=MatchLowercase} + \defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1} +$if(mainfont)$ + \setmainfont[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$]{$mainfont$} +$endif$ +$if(sansfont)$ + \setsansfont[$for(sansfontoptions)$$sansfontoptions$$sep$,$endfor$]{$sansfont$} +$endif$ +$if(monofont)$ + \setmonofont[$for(monofontoptions)$$monofontoptions$$sep$,$endfor$]{$monofont$} +$endif$ +$for(fontfamilies)$ + \newfontfamily{$fontfamilies.name$}[$for(fontfamilies.options)$$fontfamilies.options$$sep$,$endfor$]{$fontfamilies.font$} +$endfor$ +$if(mathfont)$ +$if(mathspec)$ + \ifxetex + \setmathfont(Digits,Latin,Greek)[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} + \else + \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} + \fi +$else$ + \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} +$endif$ +$endif$ +$if(CJKmainfont)$ + \ifxetex + \usepackage{xeCJK} + \setCJKmainfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} + \fi +$endif$ +$if(luatexjapresetoptions)$ + \ifluatex + \usepackage[$for(luatexjapresetoptions)$$luatexjapresetoptions$$sep$,$endfor$]{luatexja-preset} + \fi +$endif$ +$if(CJKmainfont)$ + \ifluatex + \usepackage[$for(luatexjafontspecoptions)$$luatexjafontspecoptions$$sep$,$endfor$]{luatexja-fontspec} + \setmainjfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} + \fi +$endif$ +\fi +$if(beamer)$ +$if(theme)$ +\usetheme[$for(themeoptions)$$themeoptions$$sep$,$endfor$]{$theme$} +$endif$ +$if(colortheme)$ +\usecolortheme{$colortheme$} +$endif$ +$if(fonttheme)$ +\usefonttheme{$fonttheme$} +$endif$ +$if(mainfont)$ +\usefonttheme{serif} % use mainfont rather than sansfont for slide text +$endif$ +$if(innertheme)$ +\useinnertheme{$innertheme$} +$endif$ +$if(outertheme)$ +\useoutertheme{$outertheme$} +$endif$ +$endif$ +% Use upquote if available, for straight quotes in verbatim environments +\IfFileExists{upquote.sty}{\usepackage{upquote}}{} +\IfFileExists{microtype.sty}{% use microtype if available + \usepackage[$for(microtypeoptions)$$microtypeoptions$$sep$,$endfor$]{microtype} + \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts +}{} +$if(indent)$ +$else$ +\makeatletter +\@ifundefined{KOMAClassName}{% if non-KOMA class + \IfFileExists{parskip.sty}{% + \usepackage{parskip} + }{% else + \setlength{\parindent}{0pt} + \setlength{\parskip}{6pt plus 2pt minus 1pt}} +}{% if KOMA class + \KOMAoptions{parskip=half}} +\makeatother +$endif$ +$if(verbatim-in-note)$ +\usepackage{fancyvrb} +$endif$ +\usepackage{xcolor} +\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available +\IfFileExists{bookmark.sty}{\usepackage{bookmark}}{\usepackage{hyperref}} +\hypersetup{ +$if(title-meta)$ + pdftitle={$title-meta$}, +$endif$ +$if(author-meta)$ + pdfauthor={$author-meta$}, +$endif$ +$if(lang)$ + pdflang={$lang$}, +$endif$ +$if(subject)$ + pdfsubject={$subject$}, +$endif$ +$if(keywords)$ + pdfkeywords={$for(keywords)$$keywords$$sep$, $endfor$}, +$endif$ +$if(colorlinks)$ + colorlinks=true, + linkcolor=$if(linkcolor)$$linkcolor$$else$Maroon$endif$, + filecolor=$if(filecolor)$$filecolor$$else$Maroon$endif$, + citecolor=$if(citecolor)$$citecolor$$else$Blue$endif$, + urlcolor=$if(urlcolor)$$urlcolor$$else$Blue$endif$, +$else$ + hidelinks, +$endif$ + pdfcreator={LaTeX via pandoc}} +\urlstyle{same} % disable monospaced font for URLs +$if(verbatim-in-note)$ +\VerbatimFootnotes % allow verbatim text in footnotes +$endif$ +$if(geometry)$ +$if(beamer)$ +\geometry{$for(geometry)$$geometry$$sep$,$endfor$} +$else$ +\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry} +$endif$ +$endif$ +$if(beamer)$ +\newif\ifbibliography +$endif$ +$if(listings)$ +\usepackage{listings} +\newcommand{\passthrough}[1]{#1} +\lstset{defaultdialect=[5.3]Lua} +\lstset{defaultdialect=[x86masm]Assembler} +$endif$ +$if(lhs)$ +\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{} +$endif$ +$if(highlighting-macros)$ +$highlighting-macros$ +$endif$ +$if(tables)$ +\usepackage{longtable,booktabs} +$if(beamer)$ +\usepackage{caption} +% Make caption package work with longtable +\makeatletter +\def\fnum@table{\tablename~\thetable} +\makeatother +$else$ +% Correct order of tables after \paragraph or \subparagraph +\usepackage{etoolbox} +\makeatletter +\patchcmd\longtable{\par}{\if@noskipsec\mbox{}\fi\par}{}{} +\makeatother +% Allow footnotes in longtable head/foot +\IfFileExists{footnotehyper.sty}{\usepackage{footnotehyper}}{\usepackage{footnote}} +\makesavenoteenv{longtable} +$endif$ +$endif$ +$if(graphics)$ +\usepackage{graphicx} +\makeatletter +\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi} +\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi} +\makeatother +% Scale images if necessary, so that they will not overflow the page +% margins by default, and it is still possible to overwrite the defaults +% using explicit options in \includegraphics[width, height, ...]{} +\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} +% Set default figure placement to htbp +\makeatletter +\def\fps@figure{htbp} +\makeatother +$endif$ +$if(links-as-notes)$ +% Make links footnotes instead of hotlinks: +\DeclareRobustCommand{\href}[2]{#2\footnote{\url{#1}}} +$endif$ +$if(strikeout)$ +\usepackage[normalem]{ulem} +% Avoid problems with \sout in headers with hyperref +\pdfstringdefDisableCommands{\renewcommand{\sout}{}} +$endif$ +\setlength{\emergencystretch}{3em} % prevent overfull lines +\providecommand{\tightlist}{% + \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} +$if(numbersections)$ +\setcounter{secnumdepth}{$if(secnumdepth)$$secnumdepth$$else$5$endif$} +$else$ +\setcounter{secnumdepth}{-\maxdimen} % remove section numbering +$endif$ +$if(beamer)$ +$else$ +$if(block-headings)$ +% Make \paragraph and \subparagraph free-standing +\ifx\paragraph\undefined\else + \let\oldparagraph\paragraph + \renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}} +\fi +\ifx\subparagraph\undefined\else + \let\oldsubparagraph\subparagraph + \renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}} +\fi +$endif$ +$endif$ +$if(pagestyle)$ +\pagestyle{$pagestyle$} +$endif$ +$for(header-includes)$ +$header-includes$ +$endfor$ +$if(lang)$ +\ifxetex + % Load polyglossia as late as possible: uses bidi with RTL langages (e.g. Hebrew, Arabic) + \usepackage{polyglossia} + \setmainlanguage[$for(polyglossia-lang.options)$$polyglossia-lang.options$$sep$,$endfor$]{$polyglossia-lang.name$} +$for(polyglossia-otherlangs)$ + \setotherlanguage[$for(polyglossia-otherlangs.options)$$polyglossia-otherlangs.options$$sep$,$endfor$]{$polyglossia-otherlangs.name$} +$endfor$ +\else + \usepackage[shorthands=off,$for(babel-otherlangs)$$babel-otherlangs$,$endfor$main=$babel-lang$]{babel} +$if(babel-newcommands)$ + $babel-newcommands$ +$endif$ +\fi +$endif$ +\ifluatex + \usepackage{selnolig} % disable illegal ligatures +\fi +$if(dir)$ +\ifxetex + % Load bidi as late as possible as it modifies e.g. graphicx + \usepackage{bidi} +\fi +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \TeXXeTstate=1 + \newcommand{\RL}[1]{\beginR #1\endR} + \newcommand{\LR}[1]{\beginL #1\endL} + \newenvironment{RTL}{\beginR}{\endR} + \newenvironment{LTR}{\beginL}{\endL} +\fi +$endif$ +$if(natbib)$ +\usepackage[$natbiboptions$]{natbib} +\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$} +$endif$ +$if(biblatex)$ +\usepackage[$if(biblio-style)$style=$biblio-style$,$endif$$for(biblatexoptions)$$biblatexoptions$$sep$,$endfor$]{biblatex} +$for(bibliography)$ +\addbibresource{$bibliography$} +$endfor$ +$endif$ +$if(csl-refs)$ +\newlength{\cslhangindent} +\setlength{\cslhangindent}{1.5em} +\newlength{\csllabelwidth} +\setlength{\csllabelwidth}{3em} +\newenvironment{CSLReferences}[3] % #1 hanging-ident, #2 entry sp + {% don't indent paragraphs + \setlength{\parindent}{0pt} + % turn on hanging indent if param 1 is 1 + \ifodd #1 \everypar{\setlength{\hangindent}{\cslhangindent}}\ignorespaces\fi + % set line spacing + % set entry spacing + \ifnum #2 > 0 + \setlength{\parskip}{#3\baselineskip} + \fi + }% + {} +\usepackage{calc} % for \widthof, \maxof +\newcommand{\CSLBlock}[1]{#1\hfill\break} +\newcommand{\CSLLeftMargin}[1]{\parbox[t]{\maxof{\widthof{#1}}{\csllabelwidth}}{#1}} +\newcommand{\CSLRightInline}[1]{\parbox[t]{\linewidth}{#1}} +\newcommand{\CSLIndent}[1]{\hspace{\cslhangindent}#1} +$endif$ + +$if(title)$ +\title{$title$$if(thanks)$\thanks{$thanks$}$endif$} +$endif$ +$if(subtitle)$ +$if(beamer)$ +$else$ +\usepackage{etoolbox} +\makeatletter +\providecommand{\subtitle}[1]{% add subtitle to \maketitle + \apptocmd{\@title}{\par {\large #1 \par}}{}{} +} +\makeatother +$endif$ +\subtitle{$subtitle$} +$endif$ + +\usepackage{authblk} +\renewcommand\Authfont{\normalsize \bf} +\renewcommand\Affilfont{\small \normalfont} +\makeatletter +\renewcommand\AB@affilsepx{, \protect\Affilfont} +\makeatother + +$if(authors)$ + $for(authors)$ + $if(authors.affiliation)$ + \author[$authors.affiliation$]{$authors.name$} + $else$ + \author{$authors.name$} + $endif$ + $endfor$ +$endif$ + +$if(affiliations)$ + $for(affiliations)$ + \affil[$affiliations.index$]{$affiliations.name$} + $endfor$ +$endif$ +\date{\vspace{-5ex}} + +$if(beamer)$ +$if(institute)$ +\institute{$for(institute)$$institute$$sep$ \and $endfor$} +$endif$ +$if(titlegraphic)$ +\titlegraphic{\includegraphics{$titlegraphic$}} +$endif$ +$if(logo)$ +\logo{\includegraphics{$logo$}} +$endif$ +$endif$ + +\begin{document} +$if(has-frontmatter)$ +\frontmatter +$endif$ +$if(title)$ +$if(beamer)$ +\frame{\titlepage} +$else$ +\maketitle +$endif$ +$if(abstract)$ +\begin{abstract} +$abstract$ +\end{abstract} +$endif$ +$endif$ + +$for(include-before)$ +$include-before$ + +$endfor$ +$if(toc)$ +$if(toc-title)$ +\renewcommand*\contentsname{$toc-title$} +$endif$ +$if(beamer)$ +\begin{frame}[allowframebreaks] +$if(toc-title)$ + \frametitle{$toc-title$} +$endif$ + \tableofcontents[hideallsubsections] +\end{frame} +$else$ +{ +$if(colorlinks)$ +\hypersetup{linkcolor=$if(toccolor)$$toccolor$$else$$endif$} +$endif$ +\setcounter{tocdepth}{$toc-depth$} +\tableofcontents +} +$endif$ +$endif$ +$if(lot)$ +\listoftables +$endif$ +$if(lof)$ +\listoffigures +$endif$ +$if(linestretch)$ +\setstretch{$linestretch$} +$endif$ +$if(has-frontmatter)$ +\mainmatter +$endif$ +$body$ + +$if(has-frontmatter)$ +\backmatter +$endif$ +$if(natbib)$ +$if(bibliography)$ +$if(biblio-title)$ +$if(has-chapters)$ +\renewcommand\bibname{$biblio-title$} +$else$ +\renewcommand\refname{$biblio-title$} +$endif$ +$endif$ +$if(beamer)$ +\begin{frame}[allowframebreaks]{$biblio-title$} + \bibliographytrue +$endif$ + \bibliography{$for(bibliography)$$bibliography$$sep$,$endfor$} +$if(beamer)$ +\end{frame} +$endif$ + +$endif$ +$endif$ +$if(biblatex)$ +$if(beamer)$ +\begin{frame}[allowframebreaks]{$biblio-title$} + \bibliographytrue + \printbibliography[heading=none] +\end{frame} +$else$ +\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$ +$endif$ + +$endif$ +$for(include-after)$ +$include-after$ + +$endfor$ +\end{document} From 273d5a21e4644b36ca8e357ee06d1843c608b992 Mon Sep 17 00:00:00 2001 From: james hadfield Date: Fri, 27 Nov 2020 16:20:52 +1300 Subject: [PATCH 48/59] Add more complex example (SARS-CoV-2) Note that the PDF was manually modified to improve layout and thus the Makefile was adjusted so that `make` doesn't overwrite the custom pdf. --- paper/Makefile | 7 +- paper/example-modular-augur-workflows.dot | 88 +++++++++++++++++++++- paper/example-modular-augur-workflows.pdf | Bin 21990 -> 42691 bytes paper/paper.md | 8 +- 4 files changed, 95 insertions(+), 8 deletions(-) diff --git a/paper/Makefile b/paper/Makefile index 67db76156..c9e11bd5e 100644 --- a/paper/Makefile +++ b/paper/Makefile @@ -3,8 +3,9 @@ all : paper.pdf paper.pdf : paper.md paper.bib example-modular-augur-workflows.pdf pandoc --citeproc --bibliography=paper.bib --template template.tex -s $< -o $@ -example-modular-augur-workflows.pdf : example-modular-augur-workflows.dot - dot -Tpdf $< > $@ +# example-modular-augur-workflows.pdf : example-modular-augur-workflows.dot +# dot -Tpdf $< > $@ clean : - rm -f paper.pdf example-modular-augur-workflows.pdf + # rm -f paper.pdf example-modular-augur-workflows.pdf + rm -f paper.pdf diff --git a/paper/example-modular-augur-workflows.dot b/paper/example-modular-augur-workflows.dot index 72b29d1f1..22f4b6b10 100644 --- a/paper/example-modular-augur-workflows.dot +++ b/paper/example-modular-augur-workflows.dot @@ -1,5 +1,5 @@ digraph G { - graph[margin=0]; + graph[margin=1]; subgraph cluster_zika_snakemake_dag { graph[bgcolor=white, color=white, margin=0, center=true, label="A ", labeljus=left, labelloc=top, fontsize=20, size=2.25]; @@ -78,4 +78,90 @@ digraph G { b2 -> b3 b3 -> b5 } + + subgraph ncov_pipeline { + graph[bgcolor=white, ranksep=0.1, color=white, margin=0, center=true, label="D ", labeljus=left, labelloc=top, fontsize=20, size=2.25]; + node[shape=box, style=rounded, fontname=sans, fontsize=10, penwidth=1, height=0.25]; + edge[penwidth=1, color=grey]; + 0[label = "finalize", color = "royalblue", style="rounded"]; + 1[label = "incorporate_travel_history", color = "royalblue", style="rounded"]; + 2[label = "tip_frequencies", color = "0.0 0.0 0.0", style="rounded"]; + 3[label = "export", color = "0.0 0.0 0.0", style="rounded"]; + 4[label = "colors", color = "royalblue", style="rounded"]; + 5[label = "refine", color = "0.0 0.0 0.0", style="rounded"]; + 6[label = "download", color = "royalblue", style="rounded"]; + 7[label = "ancestral", color = "0.0 0.0 0.0", style="rounded"]; + 8[label = "translate", color = "0.0 0.0 0.0", style="rounded"]; + 9[label = "rename_legacy_clades", color = "royalblue", style="rounded"]; + 10[label = "rename_subclades", color = "royalblue", style="rounded"]; + 11[label = "clades", color = "0.0 0.0 0.0", style="rounded"]; + 12[label = "recency: global", color = "royalblue", style="rounded"]; + 13[label = "traits", color = "0.0 0.0 0.0", style="rounded"]; + 14[label = "tree", color = "0.0 0.0 0.0", style="rounded"]; + 15[label = "combine_samples", color = "royalblue", style="rounded"]; + 16[label = "legacy_clades", color = "0.0 0.0 0.0", style="rounded"]; + 17[label = "subclades", color = "0.0 0.0 0.0", style="rounded"]; + 18[label = "clade_files: global", color = "royalblue", style="rounded"]; + 19[label = "subsample", color = "0.0 0.0 0.0", style="rounded"]; + 20[label = "mask", color = "0.0 0.0 0.0", style="rounded"]; + 21[label = "refilter", color = "0.0 0.0 0.0", style="rounded"]; + 22[label = "aggregate_alignments", color = "royalblue", style="rounded"]; + 23[label = "diagnostic", color = "royalblue", style="rounded"]; + 24[label = "partition_sequences", color = "royalblue", style="rounded"]; + 25[label = "filter", color = "0.0 0.0 0.0", style="rounded"]; + 1 -> 0 + 2 -> 0 + 3 -> 0 + 3 -> 1 + 4 -> 1 + 5 -> 2 + 6 -> 2 + 5 -> 3 + 6 -> 3 + 7 -> 3 + 8 -> 3 + 9 -> 3 + 10 -> 3 + 11 -> 3 + 12 -> 3 + 13 -> 3 + 4 -> 3 + 6 -> 4 + 14 -> 5 + 15 -> 5 + 6 -> 5 + 5 -> 7 + 15 -> 7 + 5 -> 8 + 7 -> 8 + 16 -> 9 + 17 -> 10 + 5 -> 11 + 8 -> 11 + 7 -> 11 + 18 -> 11 + 6 -> 12 + 5 -> 13 + 6 -> 13 + 15 -> 14 + 19 -> 15 + 5 -> 16 + 8 -> 16 + 7 -> 16 + 5 -> 17 + 8 -> 17 + 7 -> 17 + 20 -> 19 + 6 -> 19 + 21 -> 20 + 22 -> 21 + 6 -> 21 + 23 -> 21 + 24 -> 22 + 22 -> 23 + 6 -> 23 + 25 -> 24 + 6 -> 25 + } + } diff --git a/paper/example-modular-augur-workflows.pdf b/paper/example-modular-augur-workflows.pdf index c95977214a2ee2325308a2f4676645a0c354c188..4aa6d08b4008ee2fcbcd6f469a490d2a085e406c 100644 GIT binary patch literal 42691 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∨QMebXY}lo^GIFo_5*w0p9Me6 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 Bo1Opw literal 21990 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 Zayo8^#C)NcMh}i*3_{<+!qMGH|39WgTC@NF diff --git a/paper/paper.md b/paper/paper.md index 9f47056c6..7240517b2 100644 --- a/paper/paper.md +++ b/paper/paper.md @@ -85,13 +85,13 @@ Augur can be installed from PyPI ([nextstrain-augur](https://pypi.org/project/ne # Figures -![Example workflows composed with Snakemake from Augur commands for A) Zika virus, B) tuberculosis, and C) a BEAST analysis. - Each node in the workflow graph represents a command than performs a specific part of the analysis (e.g., aligning sequences, building a tree, etc.) with Augur commands in black and non-Augur commands in red. +![Example workflows composed with Snakemake from Augur commands for A) Zika virus, B) tuberculosis, C) a BEAST analysis and D) the Nextstrain SARS-CoV-2 pipeline as of 2020-11-27. + Each node in the workflow graph represents a command than performs a specific part of the analysis (e.g., aligning sequences, building a tree, etc.) with Augur commands in black, external software in red and custom scripts in blue. A typical workflow starts by filtering sequences and metadata to a desired subset for analysis followed by inference of a phylogeny, annotation of that phylogeny, and export of the annotated phylogeny to a JSON that can be viewed on Nextstrain. Workflows for viral (A) and bacterial (B) pathogens follow a similar structure but also support custom pathogen-specific steps. - Augur's modularity enables workflows that build on outputs from other tools in the field like BEAST (C). + Augur's modularity enables workflows that build on outputs from other tools in the field like BEAST (C) as well as more complicated analyses such as that behind Nextstrain's daily SARS-CoV-2 builds (D) which often require custom scripts to perform analysis-specific steps. Multiple outgoing edges from a single node represent opportunities to run the workflow in parallel. - See the full viral and bacterial workflows at [https://github.com/nextstrain/zika-tutorial](https://github.com/nextstrain/zika-tutorial) and [https://github.com/nextstrain/tb](https://github.com/nextstrain/tb).\label{fig:example-workflows}](example-modular-augur-workflows.pdf) + See the full workflows behind A,B and D at [github.com/nextstrain/zika-tutorial](https://github.com/nextstrain/zika-tutorial), [github.com/nextstrain/tb](https://github.com/nextstrain/tb) and [github.com/nextstrain/ncov](https://github.com/nextstrain/ncov).\label{fig:example-workflows}](example-modular-augur-workflows.pdf) # Acknowledgments From 8d9185eacc018b4a4d709aeaf4dd1a1386dfdd90 Mon Sep 17 00:00:00 2001 From: John Huddleston Date: Wed, 2 Dec 2020 09:16:39 -0800 Subject: [PATCH 49/59] Add some pedantic Oxford commas --- paper/paper.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/paper/paper.md b/paper/paper.md index 7240517b2..7b414e936 100644 --- a/paper/paper.md +++ b/paper/paper.md @@ -85,13 +85,13 @@ Augur can be installed from PyPI ([nextstrain-augur](https://pypi.org/project/ne # Figures -![Example workflows composed with Snakemake from Augur commands for A) Zika virus, B) tuberculosis, C) a BEAST analysis and D) the Nextstrain SARS-CoV-2 pipeline as of 2020-11-27. - Each node in the workflow graph represents a command than performs a specific part of the analysis (e.g., aligning sequences, building a tree, etc.) with Augur commands in black, external software in red and custom scripts in blue. +![Example workflows composed with Snakemake from Augur commands for A) Zika virus, B) tuberculosis, C) a BEAST analysis, and D) the Nextstrain SARS-CoV-2 pipeline as of 2020-11-27. + Each node in the workflow graph represents a command than performs a specific part of the analysis (e.g., aligning sequences, building a tree, etc.) with Augur commands in black, external software in red, and custom scripts in blue. A typical workflow starts by filtering sequences and metadata to a desired subset for analysis followed by inference of a phylogeny, annotation of that phylogeny, and export of the annotated phylogeny to a JSON that can be viewed on Nextstrain. Workflows for viral (A) and bacterial (B) pathogens follow a similar structure but also support custom pathogen-specific steps. Augur's modularity enables workflows that build on outputs from other tools in the field like BEAST (C) as well as more complicated analyses such as that behind Nextstrain's daily SARS-CoV-2 builds (D) which often require custom scripts to perform analysis-specific steps. Multiple outgoing edges from a single node represent opportunities to run the workflow in parallel. - See the full workflows behind A,B and D at [github.com/nextstrain/zika-tutorial](https://github.com/nextstrain/zika-tutorial), [github.com/nextstrain/tb](https://github.com/nextstrain/tb) and [github.com/nextstrain/ncov](https://github.com/nextstrain/ncov).\label{fig:example-workflows}](example-modular-augur-workflows.pdf) + See the full workflows behind A, B, and D at [github.com/nextstrain/zika-tutorial](https://github.com/nextstrain/zika-tutorial), [github.com/nextstrain/tb](https://github.com/nextstrain/tb) and [github.com/nextstrain/ncov](https://github.com/nextstrain/ncov).\label{fig:example-workflows}](example-modular-augur-workflows.pdf) # Acknowledgments From 99ee3e34387533060eb2c512f7d6ed5f37a7f6b5 Mon Sep 17 00:00:00 2001 From: Emma Hodcroft Date: Sat, 5 Dec 2020 15:19:13 +0100 Subject: [PATCH 50/59] suggestions from Emma --- paper/paper.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/paper/paper.md b/paper/paper.md index 7b414e936..6b150cd8b 100644 --- a/paper/paper.md +++ b/paper/paper.md @@ -50,7 +50,7 @@ bibliography: paper.bib The analysis of human pathogens requires a diverse collection of bioinformatics tools. These tools include standard genomic and phylogenetic software and custom software developed to handle the relatively numerous and short genomes of viruses and bacteria. Researchers increasingly depend on the outputs of these tools to infer transmission dynamics of human diseases and make actionable recommendations to public health officials [@Black2020; @Gardy2015]. -Under these circumstances, bioinformatics tools must scale rapidly with the number of samples to enable real-time analyses of pathogen evolution. +In order to enable real-time analyses of pathogen evolution, bioinformatics tools must scale rapidly with the number of samples and be flexible enough to adapt to a variety of questions and organisms. To meet these needs, we developed Augur, a bioinformatics toolkit designed for phylogenetic analyses of human pathogens. Augur originally existed as an internal component of the nextflu [@Neher:2015jr] and Nextstrain [@Hadfield2018] applications. @@ -76,6 +76,7 @@ By implementing the core components of Augur as a command line tool, we were abl Most pathogen workflows begin with user-curated sequences in a FASTA file (e.g., `sequences.fasta`) and metadata describing each sequence in a tab-delimited text file (e.g., `metadata.tsv`). Users can apply a series of Augur commands and other standard bioinformatics tools to these files to create annotated phylogenies that can be viewed in Auspice, the web application that serves [Nextstrain](https://nextstrain.org) (\autoref{fig:example-workflows}). This approach allows users to leverage the distributed computing abilities of workflow managers to run multiple steps of the workflow in parallel and also run individual commands that support multiprocessing in parallel. +Further, the Augur modules can be easily recombined both with each other and with user-generated scripts to flexibly address the differing questions and restrictions posed by a variety of human pathogens. The modular Augur interface has enabled phylogenetic and genomic epidemiological analyses by academic researchers, public health laboratories, and private companies. Most recently, these tools have supported the real-time tracking of SARS-CoV-2 evolution at global and local scales [@NextstrainNcov2020, @Bedford2020, @Alm2020]. From 238a41461bfa2bbf1b0bc2b4c5560bd586396893 Mon Sep 17 00:00:00 2001 From: Emma Hodcroft Date: Mon, 7 Dec 2020 15:51:58 +0100 Subject: [PATCH 51/59] add pha4ge etc sentance --- paper/paper.bib | 38 ++++++++++++++++++++++++++++++++++++++ paper/paper.md | 1 + 2 files changed, 39 insertions(+) diff --git a/paper/paper.bib b/paper/paper.bib index 04e8f9b71..ca4fdee21 100644 --- a/paper/paper.bib +++ b/paper/paper.bib @@ -1,4 +1,42 @@ + +@article{griffiths_pha4ge_2020, + title = {The {PHA4GE} {SARS}-{CoV}-2 {Contextual} {Data} {Specification} for {Open} {Genomic} {Epidemiology}}, + url = {https://www.preprints.org/manuscript/202008.0220/v1}, + doi = {10.20944/preprints202008.0220.v1}, + abstract = {The Public Health Alliance for Genomic Epidemiology (PHA4GE) (https://pha4ge.org) is a global coalition that is actively working to establish consensus standards, document and share best practices, improve the availability of critical bioinformatic tools and resources, and advocate for greater openness, interoperability, accessibility and reproducibility in public health microbial bioinformatics. In the face of the current pandemic, PHA4GE has identified a clear and present need for a fit-for-purpose, open source SARS-CoV-2 contextual data standard. As such, we have developed an extension to the INSDC pathogen package, providing a SARS-CoV-2 contextual data specification based on harmonisable, publicly available, community standards. The specification is implementable via a collection template, as well as an array of protocols and tools to support the harmonisation and submission of sequence data and contextual information to public repositories. Well-structured, rich contextual data adds value, promotes reuse, and enables aggregation and integration of disparate data sets. Adoption of the proposed standard and practices will better enable interoperability between datasets and systems, improve the consistency and utility of generated data, and ultimately facilitate novel insights and discoveries in SARS-CoV-2 and COVID-19.}, + language = {en}, + urldate = {2020-12-07}, + author = {Griffiths, Emma J. and Timme, Ruth E. and Page, Andrew J. and Alikhan, Nabil-Fareed and Fornika, Dan and Maguire, Finlay and Mendes, Catarina Inês and Tausch, Simon H. and Black, Allison and Connor, Thomas R. and Tyson, Gregory H. and Aanensen, David M. and Alcock, Brian and Campos, Josefina and Christoffels, Alan and Silva, Anders Gonçalves da and Hodcroft, Emma and Hsiao, William W. L. and Katz, Lee S. and Nicholls, Samuel M. and Oluniyi, Paul E. and Olawoye, Idowu B. and Raphenya, Amogelang R. and Vasconcelos, Ana Tereza R. and Witney, Adam A. and MacCannell, Duncan R.}, + month = aug, + year = {2020}, + note = {Publisher: Preprints}, + file = {Full Text PDF:C\:\\Users\\Emma\\Zotero\\storage\\DKB3PGD2\\Griffiths et al. - 2020 - The PHA4GE SARS-CoV-2 Contextual Data Specificatio.pdf:application/pdf} +} + + +@article{black_ten_2020, + title = {Ten recommendations for supporting open pathogen genomic analysis in public health}, + volume = {26}, + copyright = {2020 Springer Nature America, Inc.}, + issn = {1546-170X}, + url = {https://www.nature.com/articles/s41591-020-0935-z}, + doi = {10.1038/s41591-020-0935-z}, + abstract = {Increasingly, public-health agencies are using pathogen genomic sequence data to support surveillance and epidemiological investigations. As access to whole-genome sequencing has grown, greater amounts of molecular data have helped improve the ability to detect and track outbreaks of diseases such as COVID-19, investigate transmission chains and explore large-scale population dynamics, such as the spread of antibiotic resistance. However, the wide adoption of whole-genome sequencing also poses new challenges for public-health agencies that must adapt to support a new set of expertise, which means that the capacity to perform genomic data assembly and analysis has not expanded as widely as the adoption of sequencing itself. In this Perspective, we make recommendations for developing an accessible, unified informatic ecosystem to support pathogen genomic analysis in public-health agencies across income settings. We hope that the creation of this ecosystem will allow agencies to effectively and efficiently share data, workflows and analyses and thereby increase the reproducibility, accessibility and auditability of pathogen genomic analysis while also supporting agency autonomy.}, + language = {en}, + number = {6}, + urldate = {2020-12-07}, + journal = {Nature Medicine}, + author = {Black, Allison and MacCannell, Duncan R. and Sibley, Thomas R. and Bedford, Trevor}, + month = jun, + year = {2020}, + note = {Number: 6 +Publisher: Nature Publishing Group}, + pages = {832--841}, + file = {Full Text PDF:C\:\\Users\\Emma\\Zotero\\storage\\8AUJB6TH\\Black et al. - 2020 - Ten recommendations for supporting open pathogen g.pdf:application/pdf;Snapshot:C\:\\Users\\Emma\\Zotero\\storage\\8ZIEXA78\\s41591-020-0935-z.html:text/html} +} + + @misc{NextstrainNcov2020, title = {nextstrain/ncov}, copyright = {MIT License}, diff --git a/paper/paper.md b/paper/paper.md index 6b150cd8b..5592a9809 100644 --- a/paper/paper.md +++ b/paper/paper.md @@ -81,6 +81,7 @@ Further, the Augur modules can be easily recombined both with each other and wit The modular Augur interface has enabled phylogenetic and genomic epidemiological analyses by academic researchers, public health laboratories, and private companies. Most recently, these tools have supported the real-time tracking of SARS-CoV-2 evolution at global and local scales [@NextstrainNcov2020, @Bedford2020, @Alm2020]. This success has attracted contributions from the open source community that have allowed us to improve Augur's functionality, documentation, and test coverage. +In order to continue facilitating Augur modules' use as part of wider bioinformatics pipelines in public health, we are committed to working with and contributing to open-source data standards such as PHA4GE [@griffiths_pha4ge_2020], and to following recommendations to enable better pathogen genome analyses [@black_ten_2020]. Augur can be installed from PyPI ([nextstrain-augur](https://pypi.org/project/nextstrain-augur/)) and Bioconda ([augur](https://bioconda.github.io/recipes/augur/README.html)). [See the full documentation](http://docs.nextstrain.org/) for more details about how to use or contribute to development of Augur. From b41d041718bf73d9227b3bbb51215667fbd2c468 Mon Sep 17 00:00:00 2001 From: John Huddleston Date: Wed, 9 Dec 2020 02:23:44 -0800 Subject: [PATCH 52/59] Minor edits to concluding paragraph Fixes a couple of citations and makes minor tweaks in the last paragraph. --- paper/paper.bib | 22 ---------------------- paper/paper.md | 4 ++-- 2 files changed, 2 insertions(+), 24 deletions(-) diff --git a/paper/paper.bib b/paper/paper.bib index ca4fdee21..3b6b56923 100644 --- a/paper/paper.bib +++ b/paper/paper.bib @@ -15,28 +15,6 @@ @article{griffiths_pha4ge_2020 } -@article{black_ten_2020, - title = {Ten recommendations for supporting open pathogen genomic analysis in public health}, - volume = {26}, - copyright = {2020 Springer Nature America, Inc.}, - issn = {1546-170X}, - url = {https://www.nature.com/articles/s41591-020-0935-z}, - doi = {10.1038/s41591-020-0935-z}, - abstract = {Increasingly, public-health agencies are using pathogen genomic sequence data to support surveillance and epidemiological investigations. As access to whole-genome sequencing has grown, greater amounts of molecular data have helped improve the ability to detect and track outbreaks of diseases such as COVID-19, investigate transmission chains and explore large-scale population dynamics, such as the spread of antibiotic resistance. However, the wide adoption of whole-genome sequencing also poses new challenges for public-health agencies that must adapt to support a new set of expertise, which means that the capacity to perform genomic data assembly and analysis has not expanded as widely as the adoption of sequencing itself. In this Perspective, we make recommendations for developing an accessible, unified informatic ecosystem to support pathogen genomic analysis in public-health agencies across income settings. We hope that the creation of this ecosystem will allow agencies to effectively and efficiently share data, workflows and analyses and thereby increase the reproducibility, accessibility and auditability of pathogen genomic analysis while also supporting agency autonomy.}, - language = {en}, - number = {6}, - urldate = {2020-12-07}, - journal = {Nature Medicine}, - author = {Black, Allison and MacCannell, Duncan R. and Sibley, Thomas R. and Bedford, Trevor}, - month = jun, - year = {2020}, - note = {Number: 6 -Publisher: Nature Publishing Group}, - pages = {832--841}, - file = {Full Text PDF:C\:\\Users\\Emma\\Zotero\\storage\\8AUJB6TH\\Black et al. - 2020 - Ten recommendations for supporting open pathogen g.pdf:application/pdf;Snapshot:C\:\\Users\\Emma\\Zotero\\storage\\8ZIEXA78\\s41591-020-0935-z.html:text/html} -} - - @misc{NextstrainNcov2020, title = {nextstrain/ncov}, copyright = {MIT License}, diff --git a/paper/paper.md b/paper/paper.md index 5592a9809..4bd87a35f 100644 --- a/paper/paper.md +++ b/paper/paper.md @@ -79,9 +79,9 @@ This approach allows users to leverage the distributed computing abilities of wo Further, the Augur modules can be easily recombined both with each other and with user-generated scripts to flexibly address the differing questions and restrictions posed by a variety of human pathogens. The modular Augur interface has enabled phylogenetic and genomic epidemiological analyses by academic researchers, public health laboratories, and private companies. -Most recently, these tools have supported the real-time tracking of SARS-CoV-2 evolution at global and local scales [@NextstrainNcov2020, @Bedford2020, @Alm2020]. +Most recently, these tools have supported the real-time tracking of SARS-CoV-2 evolution at global and local scales [@NextstrainNcov2020; @Bedford2020; @Alm2020]. This success has attracted contributions from the open source community that have allowed us to improve Augur's functionality, documentation, and test coverage. -In order to continue facilitating Augur modules' use as part of wider bioinformatics pipelines in public health, we are committed to working with and contributing to open-source data standards such as PHA4GE [@griffiths_pha4ge_2020], and to following recommendations to enable better pathogen genome analyses [@black_ten_2020]. +To facilitate Augur's continued use as part of wider bioinformatics pipelines in public health, we have committed to work with and contribute to open data standards such as PHA4GE [@griffiths_pha4ge_2020] and follow recommendations for open pathogen genomic analyses [@Black2020]. Augur can be installed from PyPI ([nextstrain-augur](https://pypi.org/project/nextstrain-augur/)) and Bioconda ([augur](https://bioconda.github.io/recipes/augur/README.html)). [See the full documentation](http://docs.nextstrain.org/) for more details about how to use or contribute to development of Augur. From 47e0d04358272e9d96adb694715445893a3e2195 Mon Sep 17 00:00:00 2001 From: Richard Neher Date: Wed, 9 Dec 2020 21:29:06 +0100 Subject: [PATCH 53/59] add RAN and EBH funding, Emma's new affiliation --- paper/paper.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/paper/paper.md b/paper/paper.md index 4bd87a35f..c503d389d 100644 --- a/paper/paper.md +++ b/paper/paper.md @@ -28,7 +28,7 @@ authors: affiliation: "4, 5" orcid: 0000-0003-2525-1407 - name: Emma B. Hodcroft - affiliation: "4, 5" + affiliation: "4, 5, 6" orcid: 0000-0002-0078-2212 affiliations: - name: Molecular and Cell Biology Program, University of Washington, Seattle, WA, USA @@ -41,6 +41,8 @@ affiliations: index: 4 - name: Swiss Institute of Bioinformatics, Basel, Switzerland index: 5 + - name: Institute of Social and Preventive Medicine, University of Bern, Bern, Switzerland + index: 6 date: 5 November 2020 bibliography: paper.bib --- @@ -101,8 +103,7 @@ Thank you to all of [the open source community members who have contributed to A Thank you to Dan Fornika from BCCDC Public Health Laboratory for creating the first conda recipe for Augur in Bioconda. JHu is a Graduate Research Fellow and is supported by the NIH grant NIAID F31AI140714. TB is a Pew Biomedical Scholar. -RAN is supported by... -EBH is supported by... +RAN and EBH are supported by University of Basel core funding. This work is supported by NIH awards NIGMS R35 GM119774-01, NIAID U19 AI117891-01 and NIAID R01 AI127893-01. # References From 972bc9ce91bb45652adb754e8142fb09fd088e00 Mon Sep 17 00:00:00 2001 From: John Huddleston Date: Wed, 9 Dec 2020 13:59:38 -0800 Subject: [PATCH 54/59] Fix syntax error in caption URLs --- paper/paper.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper/paper.md b/paper/paper.md index c503d389d..49905d325 100644 --- a/paper/paper.md +++ b/paper/paper.md @@ -95,7 +95,7 @@ Augur can be installed from PyPI ([nextstrain-augur](https://pypi.org/project/ne Workflows for viral (A) and bacterial (B) pathogens follow a similar structure but also support custom pathogen-specific steps. Augur's modularity enables workflows that build on outputs from other tools in the field like BEAST (C) as well as more complicated analyses such as that behind Nextstrain's daily SARS-CoV-2 builds (D) which often require custom scripts to perform analysis-specific steps. Multiple outgoing edges from a single node represent opportunities to run the workflow in parallel. - See the full workflows behind A, B, and D at [github.com/nextstrain/zika-tutorial](https://github.com/nextstrain/zika-tutorial), [github.com/nextstrain/tb](https://github.com/nextstrain/tb) and [github.com/nextstrain/ncov](https://github.com/nextstrain/ncov).\label{fig:example-workflows}](example-modular-augur-workflows.pdf) + See the full workflows behind A, B, and D at https://github.com/nextstrain/zika-tutorial, https://github.com/nextstrain/tb, and https://github.com/nextstrain/ncov.\label{fig:example-workflows}](example-modular-augur-workflows.pdf) # Acknowledgments From 189cab68d7309eb2ed2648892c66dbb0a2823856 Mon Sep 17 00:00:00 2001 From: John Huddleston Date: Wed, 9 Dec 2020 14:02:53 -0800 Subject: [PATCH 55/59] Note how to compile paper with JOSS's Docker image --- paper/README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/paper/README.md b/paper/README.md index c09d194da..0cad2cd28 100644 --- a/paper/README.md +++ b/paper/README.md @@ -14,3 +14,13 @@ Use pandoc to compile the paper. ```bash make ``` + +Alternately, use [JOSS's Docker image to compile the paper](https://joss.readthedocs.io/en/latest/submitting.html#docker) from this `paper` directory. + +``` bash +docker run --rm \ + --volume $PWD:/data \ + --user $(id -u):$(id -g) \ + --env JOURNAL=joss \ + openjournals/paperdraft +``` From 9fd632e0b18850ed9f4661733ec1b6f78fc96336 Mon Sep 17 00:00:00 2001 From: John Huddleston Date: Wed, 9 Dec 2020 14:07:34 -0800 Subject: [PATCH 56/59] Attempt to fix JOSS compilation issue with Whedon The paper compiles fine locally with the Docker image, but the Whedon preview has broken captions and label for the figure. --- paper/paper.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/paper/paper.md b/paper/paper.md index 49905d325..844b72496 100644 --- a/paper/paper.md +++ b/paper/paper.md @@ -95,7 +95,8 @@ Augur can be installed from PyPI ([nextstrain-augur](https://pypi.org/project/ne Workflows for viral (A) and bacterial (B) pathogens follow a similar structure but also support custom pathogen-specific steps. Augur's modularity enables workflows that build on outputs from other tools in the field like BEAST (C) as well as more complicated analyses such as that behind Nextstrain's daily SARS-CoV-2 builds (D) which often require custom scripts to perform analysis-specific steps. Multiple outgoing edges from a single node represent opportunities to run the workflow in parallel. - See the full workflows behind A, B, and D at https://github.com/nextstrain/zika-tutorial, https://github.com/nextstrain/tb, and https://github.com/nextstrain/ncov.\label{fig:example-workflows}](example-modular-augur-workflows.pdf) + See the full workflows behind A, B, and D at https://github.com/nextstrain/zika-tutorial, https://github.com/nextstrain/tb, and https://github.com/nextstrain/ncov. + \label{fig:example-workflows}](example-modular-augur-workflows.pdf) # Acknowledgments From e7aa2b5d4ce30fb187fad5fe0ec290aa77f5301f Mon Sep 17 00:00:00 2001 From: John Huddleston Date: Wed, 9 Dec 2020 14:24:19 -0800 Subject: [PATCH 57/59] Add Eli's ORCID and full first name --- paper/paper.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/paper/paper.md b/paper/paper.md index 844b72496..980a9c75b 100644 --- a/paper/paper.md +++ b/paper/paper.md @@ -17,8 +17,9 @@ authors: - name: Thomas R. Sibley affiliation: 2 orcid: 0000-0001-5269-2297 - - name: Eli Harkins + - name: Elias Harkins affiliation: 2 + orcid: 0000-0001-6525-9134 - name: Augur Contributors affiliation: 3 - name: Trevor Bedford From 7d3dca51420eed1a3dfe14502e501960f3c10c1d Mon Sep 17 00:00:00 2001 From: John Huddleston Date: Wed, 9 Dec 2020 15:40:58 -0800 Subject: [PATCH 58/59] Fix a subtle typo in the Augur manuscript --- paper/paper.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper/paper.md b/paper/paper.md index 980a9c75b..5a8331e11 100644 --- a/paper/paper.md +++ b/paper/paper.md @@ -91,7 +91,7 @@ Augur can be installed from PyPI ([nextstrain-augur](https://pypi.org/project/ne # Figures ![Example workflows composed with Snakemake from Augur commands for A) Zika virus, B) tuberculosis, C) a BEAST analysis, and D) the Nextstrain SARS-CoV-2 pipeline as of 2020-11-27. - Each node in the workflow graph represents a command than performs a specific part of the analysis (e.g., aligning sequences, building a tree, etc.) with Augur commands in black, external software in red, and custom scripts in blue. + Each node in the workflow graph represents a command that performs a specific part of the analysis (e.g., aligning sequences, building a tree, etc.) with Augur commands in black, external software in red, and custom scripts in blue. A typical workflow starts by filtering sequences and metadata to a desired subset for analysis followed by inference of a phylogeny, annotation of that phylogeny, and export of the annotated phylogeny to a JSON that can be viewed on Nextstrain. Workflows for viral (A) and bacterial (B) pathogens follow a similar structure but also support custom pathogen-specific steps. Augur's modularity enables workflows that build on outputs from other tools in the field like BEAST (C) as well as more complicated analyses such as that behind Nextstrain's daily SARS-CoV-2 builds (D) which often require custom scripts to perform analysis-specific steps. From 98c0ea34caf341e1b1ae9ffd335f0f9473f5afbd Mon Sep 17 00:00:00 2001 From: Trevor Bedford Date: Sun, 13 Dec 2020 18:02:41 -0800 Subject: [PATCH 59/59] Update country lat/longs --- augur/data/lat_longs.tsv | 2 ++ 1 file changed, 2 insertions(+) diff --git a/augur/data/lat_longs.tsv b/augur/data/lat_longs.tsv index 1b159f924..c7d891ab0 100644 --- a/augur/data/lat_longs.tsv +++ b/augur/data/lat_longs.tsv @@ -53,6 +53,8 @@ country burkina faso 12.5 -1.66667 country cambodia 13.0 105.0 country cameroon 6.0 12.5 country canada 61.0666922 -107.991707 +country cape_verde 14.998654 -23.530702 +country cape verde 14.998654 -23.530702 country cayman_islands 19.323979 -81.138315 country cayman islands 19.323979 -81.138315 country central_african_republic 7.0 21.0