Mercurial > repos > tiagoantao > raxml
changeset 0:66bcdd1ac9ca draft
planemo upload commit 2c71c5e5604b9c05648b883fddbb163a8e03c807
author | tiagoantao |
---|---|
date | Tue, 03 Nov 2015 16:27:41 -0500 |
parents | |
children | e45298aa1eb3 |
files | README.md raxml.py raxml.xml test-data/RAxML_parsimonyTree.galaxy test-data/dna.phy tool_dependencies.xml |
diffstat | 6 files changed, 952 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/README.md Tue Nov 03 16:27:41 2015 -0500 @@ -0,0 +1,10 @@ +RAxML for Galaxy +================ + +95% of this work was made by Oleksandr Moskalenko. Tiago Antao +is trying to update it to a more current version. + +Acknowledgements +---------------- + +Björn Grüning for all the help
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/raxml.py Tue Nov 03 16:27:41 2015 -0500 @@ -0,0 +1,360 @@ +#!/usr/bin/env python +""" +Runs RAxML on a sequence file. +For use with RAxML version 8.2.4 +""" +import os, shutil, subprocess, sys, optparse, fnmatch, glob + +def stop_err(msg): + sys.stderr.write("%s\n" % msg) + sys.exit() + +def getint(name): + basename = name.partition('RUN.') + if basename[2] != '': + num = basename[2] + return int(num) + +def __main__(): + usage = "usage: %prog -T <threads> -s <input> -n <output> -m <model> [optional arguments]" + + # Parse the primary wrapper's command line options + parser = optparse.OptionParser(usage = usage) + # raxml binary name, hardcoded in the xml file + parser.add_option("--binary", action="store", type="string", dest="binary", help="Command to run") + # (-a) + parser.add_option("--weightfile", action="store", type="string", dest="weightfile", help="Column weight file") + # (-A) + parser.add_option("--secondary_structure_model", action="store", type="string", dest="secondary_structure_model", help="Secondary structure model") + # (-b) + parser.add_option("--bootseed", action="store", type="int", dest="bootseed", help="Bootstrap random number seed") + # (-c) + parser.add_option("--numofcats", action="store", type="int", dest="numofcats", help="Number of distinct rate categories") + # (-d) + parser.add_option("--search_complete_random_tree", action="store_true", dest="search_complete_random_tree", help="Search with a complete random starting tree") + # (-D) + parser.add_option("--ml_search_convergence", action="store_true", dest="ml_search_convergence", help="ML search onvergence criterion") + # (-e) + parser.add_option("--model_opt_precision", action="store", type="float", dest="model_opt_precision", help="Model Optimization Precision (-e)") + # (-E) + parser.add_option("--excludefile", action="store", type="string", dest="excludefile", help="Exclude File Name") + # (-f) + parser.add_option("--search_algorithm", action="store", type="string", dest="search_algorithm", help="Search Algorithm") + # (-F) + parser.add_option("--save_memory_cat_model", action="store_true", dest="save_memory_cat_model", help="Save memory under CAT and GTRGAMMA models") + # (-g) + parser.add_option("--groupingfile", action="store", type="string", dest="groupingfile", help="Grouping File Name") + # (-G) + parser.add_option("--enable_evol_heuristics", action="store_true", dest="enable_evol_heuristics", help="Enable evol algo heuristics") + # (-i) + parser.add_option("--initial_rearrangement_setting", action="store", type="int", dest="initial_rearrangement_setting", help="Initial Rearrangement Setting") + # (-I) + parser.add_option("--posterior_bootstopping_analysis", action="store", type="string", dest="posterior_bootstopping_analysis", help="Posterior bootstopping analysis") + # (-J) + parser.add_option("--majority_rule_consensus", action="store", type="string", dest="majority_rule_consensus", help="Majority rule consensus") + # (-k) + parser.add_option("--print_branch_lengths", action="store_true", dest="print_branch_lengths", help="Print branch lengths") + # (-K) + parser.add_option("--multistate_sub_model", action="store", type="string", dest="multistate_sub_model", help="Multistate substitution model") + # (-m) + parser.add_option("--model_type", action="store", type="string", dest="model_type", help="Model Type") + parser.add_option("--base_model", action="store", type="string", dest="base_model", help="Base Model") + parser.add_option("--aa_empirical_freq", action="store_true", dest="aa_empirical_freq", help="Use AA Empirical base frequences") + parser.add_option("--aa_search_matrix", action="store", type="string", dest="aa_search_matrix", help="AA Search Matrix") + # (-n) + parser.add_option("--name", action="store", type="string", dest="name", help="Run Name") + # (-N/#) + parser.add_option("--number_of_runs", action="store", type="int", dest="number_of_runs", help="Number of alternative runs") + parser.add_option("--number_of_runs_bootstop", action="store", type="string", dest="number_of_runs_bootstop", help="Number of alternative runs based on the bootstop criteria") + # (-M) + parser.add_option("--estimate_individual_branch_lengths", action="store_true", dest="estimate_individual_branch_lengths", help="Estimate individual branch lengths") + # (-o) + parser.add_option("--outgroup_name", action="store", type="string", dest="outgroup_name", help="Outgroup Name") + # (-O) + parser.add_option("--disable_undetermined_seq_check", action="store_true", dest="disable_undetermined_seq_check", help="Disable undetermined sequence check") + # (-p) + parser.add_option("--random_seed", action="store", type="int", dest="random_seed", help="Random Number Seed") + # (-P) + parser.add_option("--external_protein_model", action="store", type="string", dest="external_protein_model", help="External Protein Model") + # (-q) + parser.add_option("--multiple_model", action="store", type="string", dest="multiple_model", help="Multiple Model File") + # (-r) + parser.add_option("--constraint_file", action="store", type="string", dest="constraint_file", help="Constraint File") + # (-R) + parser.add_option("--bin_model_parameter_file", action="store", type="string", dest="bin_model_parameter_file", help="Constraint File") + # (-s) + parser.add_option("--source", action="store", type="string", dest="source", help="Input file") + # (-S) + parser.add_option("--secondary_structure_file", action="store", type="string", dest="secondary_structure_file", help="Secondary structure file") + # (-t) + parser.add_option("--starting_tree", action="store", type="string", dest="starting_tree", help="Starting Tree") + # (-T) + parser.add_option("--threads", action="store", type="int", dest="threads", help="Number of threads to use") + # (-u) + parser.add_option("--use_median_approximation", action="store_true", dest="use_median_approximation", help="Use median approximation") + # (-U) + parser.add_option("--save_memory_gappy_alignments", action="store_true", dest="save_memory_gappy_alignments", help="Save memory in large gapped alignments") + # (-V) + parser.add_option("--disable_rate_heterogeneity", action="store_true", dest="disable_rate_heterogeneity", help="Disable rate heterogeneity") + # (-W) + parser.add_option("--sliding_window_size", action="store", type="string", dest="sliding_window_size", help="Sliding window size") + # (-x) + parser.add_option("--rapid_bootstrap_random_seed", action="store", type="int", dest="rapid_bootstrap_random_seed", help="Rapid Boostrap Random Seed") + # (-y) + parser.add_option("--parsimony_starting_tree_only", action="store_true", dest="parsimony_starting_tree_only", help="Generate a parsimony starting tree only") + # (-z) + parser.add_option("--file_multiple_trees", action="store", type="string", dest="file_multiple_trees", help="Multiple Trees File") + + (options, args) = parser.parse_args() + cmd = [] + + # Required parameters + binary = options.binary + cmd.append(binary) + # Threads + threads = "-T %d" % options.threads + cmd.append(threads) + # Source + source = "-s %s" % options.source + cmd.append(source) + #Hardcode to "galaxy" first to simplify the output part of the wrapper + #name = "-n %s" % options.name + name = "-n galaxy" + cmd.append(name) + ## Model + model_type = options.model_type + base_model = options.base_model + aa_search_matrix = options.aa_search_matrix + aa_empirical_freq = options.aa_empirical_freq + if model_type == 'aminoacid': + model = "-m %s%s" % (base_model, aa_search_matrix) + if aa_empirical_freq: + model = "-m %s%s%s" % (base_model, aa_search_matrix, 'F') + # (-P) + if options.external_protein_model: + external_protein_model = "-P %s" % options.external_protein_model + cmd.append(external_protein_model) + else: + model = "-m %s" % base_model + cmd.append(model) + if model == "GTRCAT": + # (-c) + if options.numofcats: + numofcats = "-c %d" % options.numofcats + cmd.append(numofcats) + # Optional parameters + if options.number_of_runs_bootstop: + number_of_runs_bootstop = "-N %s" % options.number_of_runs_bootstop + cmd.append(number_of_runs_bootstop) + else: + number_of_runs_bootstop = '' + if options.number_of_runs: + number_of_runs_opt = "-N %d" % options.number_of_runs + cmd.append(number_of_runs_opt) + else: + number_of_runs_opt = 0 + # (-a) + if options.weightfile: + weightfile = "-a %s" % options.weightfile + cmd.append(weightfile) + # (-A) + if options.secondary_structure_model: + secondary_structure_model = "-A %s" % options.secondary_structure_model + cmd.append(secondary_structure_model ) + # (-b) + if options.bootseed: + bootseed = "-b %d" % options.bootseed + cmd.append(bootseed) + else: + bootseed = 0 + # -C - doesn't work in pthreads version, skipped + if options.search_complete_random_tree: + cmd.append("-d") + if options.ml_search_convergence: + cmd.append("-D" ) + if options.model_opt_precision: + model_opt_precision = "-e %f" % options.model_opt_precision + cmd.append(model_opt_precision) + if options.excludefile: + excludefile = "-E %s" % options.excludefile + cmd.append(excludefile) + if options.search_algorithm: + search_algorithm = "-f %s" % options.search_algorithm + cmd.append(search_algorithm) + if options.save_memory_cat_model: + cmd.append("-F") + if options.groupingfile: + groupingfile = "-g %s" % options.groupingfile + cmd.append(groupingfile) + if options.enable_evol_heuristics: + enable_evol_heuristics = "-G %f" % options.enable_evol_heuristics + cmd.append(enable_evol_heuristics ) + if options.initial_rearrangement_setting: + initial_rearrangement_setting = "-i %s" % options.initial_rearrangement_setting + cmd.append(initial_rearrangement_setting) + if options.posterior_bootstopping_analysis: + posterior_bootstopping_analysis = "-I %s" % options.posterior_bootstopping_analysis + cmd.append(posterior_bootstopping_analysis) + if options.majority_rule_consensus: + majority_rule_consensus = "-J %s" % options.majority_rule_consensus + cmd.append(majority_rule_consensus) + if options.print_branch_lengths: + cmd.append("-k") + if options.multistate_sub_model: + multistate_sub_model = "-K %s" % options.multistate_sub_model + cmd.append(multistate_sub_model) + if options.estimate_individual_branch_lengths: + cmd.append("-M") + if options.outgroup_name: + outgroup_name = "-o %s" % options.outgroup_name + cmd.append(outgroup_name) + if options.disable_undetermined_seq_check: + cmd.append("-O") + if options.random_seed: + random_seed = "-p %d" % options.random_seed + cmd.append(random_seed) + multiple_model = None + if options.multiple_model: + multiple_model = "-q %s" % options.multiple_model + cmd.append(multiple_model) + if options.constraint_file: + constraint_file = "-r %s" % options.constraint_file + cmd.append(constraint_file) + if options.bin_model_parameter_file: + bin_model_parameter_file_name = "RAxML_binaryModelParameters.galaxy" + os.symlink(options.bin_model_parameter_file, bin_model_parameter_file_name ) + bin_model_parameter_file = "-R %s" % options.bin_model_parameter_file + #Needs testing. Is the hardcoded name or the real path needed? + cmd.append(bin_model_parameter_file) + if options.secondary_structure_file: + secondary_structure_file = "-S %s" % options.secondary_structure_file + cmd.append(secondary_structure_file) + if options.starting_tree: + starting_tree = "-t %s" % options.starting_tree + cmd.append(starting_tree) + if options.use_median_approximation: + cmd.append("-u") + if options.save_memory_gappy_alignments: + cmd.append("-U") + if options.disable_rate_heterogeneity: + cmd.append("-V") + if options.sliding_window_size: + sliding_window_size = "-W %d" % options.sliding_window_size + cmd.append(sliding_window_size) + if options.rapid_bootstrap_random_seed: + rapid_bootstrap_random_seed = "-x %d" % options.rapid_bootstrap_random_seed + cmd.append(rapid_bootstrap_random_seed) + else: + rapid_bootstrap_random_seed = 0 + if options.parsimony_starting_tree_only: + cmd.append("-y") + if options.file_multiple_trees: + file_multiple_trees = "-z %s" % options.file_multiple_trees + cmd.append(file_multiple_trees) + + print "cmd list: ", cmd, "\n" + + full_cmd = " ".join(cmd) + print "Command string: %s" % full_cmd + + try: + proc = subprocess.Popen(args=full_cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + except Exception, err: + sys.stderr.write("Error invoking command: \n%s\n\n%s\n" % (cmd, err)) + sys.exit(1) + stdout, stderr = proc.communicate() + return_code = proc.returncode + if return_code: + sys.stdout.write(stdout) + sys.stderr.write(stderr) + sys.stderr.write("Return error code %i from command:\n" % return_code) + sys.stderr.write("%s\n" % cmd) + else: + sys.stdout.write(stdout) + sys.stdout.write(stderr) + + #Multiple runs - concatenate + if number_of_runs_opt > 0: + if (bootseed == 0) and (rapid_bootstrap_random_seed == 0 ): + runfiles = glob.glob('RAxML*RUN*') + runfiles.sort(key=getint) + # Logs + outfile = open('RAxML_log.galaxy','w') + for filename in runfiles: + if fnmatch.fnmatch(filename, 'RAxML_log.galaxy.RUN.*'): + infile = open(filename, 'r') + filename_line = "%s\n" % filename + outfile.write(filename_line) + for line in infile: + outfile.write(line) + infile.close() + outfile.close() + # Parsimony Trees + outfile = open('RAxML_parsimonyTree.galaxy','w') + for filename in runfiles: + if fnmatch.fnmatch(filename, 'RAxML_parsimonyTree.galaxy.RUN.*'): + infile = open(filename, 'r') + filename_line = "%s\n" % filename + outfile.write(filename_line) + for line in infile: + outfile.write(line) + infile.close() + outfile.close() + # Results + outfile = open('RAxML_result.galaxy','w') + for filename in runfiles: + if fnmatch.fnmatch(filename, 'RAxML_result.galaxy.RUN.*'): + infile = open(filename, 'r') + filename_line = "%s\n" % filename + outfile.write(filename_line) + for line in infile: + outfile.write(line) + infile.close() + outfile.close() + # Multiple Model Partition Files + if multiple_model: + files = glob.glob('RAxML_bestTree.galaxy.PARTITION.*') + if len(files) > 0: + files.sort(key=getint) + outfile = open('RAxML_bestTreePartitions.galaxy','w') + # Best Tree Partitions + for filename in files: + if fnmatch.fnmatch(filename, 'RAxML_bestTree.galaxy.PARTITION.*'): + infile = open(filename, 'r') + filename_line = "%s\n" % filename + outfile.write(filename_line) + for line in infile: + outfile.write(line) + infile.close() + outfile.close() + else: + outfile = open('RAxML_bestTreePartitions.galaxy','w') + outfile.write("No partition files were produced.\n") + outfile.close() + + # Result Partitions + files = glob.glob('RAxML_result.galaxy.PARTITION.*') + if len(files) > 0: + files.sort(key=getint) + outfile = open('RAxML_resultPartitions.galaxy','w') + for filename in files: + if fnmatch.fnmatch(filename, 'RAxML_result.galaxy.PARTITION.*'): + infile = open(filename, 'r') + filename_line = "%s\n" % filename + outfile.write(filename_line) + for line in infile: + outfile.write(line) + infile.close() + outfile.close() + else: + outfile = open('RAxML_resultPartitions.galaxy','w') + outfile.write("No partition files were produced.\n") + outfile.close() + + # DEBUG options + infof = open('RAxML_info.galaxy','a') + infof.write('\nOM: CLI options DEBUG START:\n') + infof.write(options.__repr__()) + infof.write('\nOM: CLI options DEBUG END\n') + +if __name__=="__main__": __main__()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/raxml.xml Tue Nov 03 16:27:41 2015 -0500 @@ -0,0 +1,564 @@ +<tool id="raxml" name="Phyogenetic reconstruction with RaXML" version="1.0.1"> + <description>- Maximum Likelihood based inference of large phylogenetic trees</description> + <requirements> + <requirement type='package' version="8.2.4">raxml</requirement> + </requirements> + <command interpreter="python">raxml.py + ## Required parameters + ## Program name and threads are hard-coded as they are dependent on the binary and threads are specified in the Galaxy's tool configuration + ## binary is hard-coded to the pthreads enabled raxml executable + --binary "raxmlHPC-PTHREADS" + ## (-T) + --threads \${GALAXY_SLOTS:-1} + ## (-s) + --source $infile + ## (-m) + --model_type $search_model_selector.model_type + --base_model $search_model_selector.base_model + #if str( $search_model_selector.model_type ) == 'aminoacid': + $search_model_selector.aa_model_empirical_base_frequencies + #if $search_model_selector.aa_search_matrix: + --aa_search_matrix $search_model_selector.aa_search_matrix + #end if + #end if + ## (-p) + #if $random_seed: + --random_seed $random_seed + #else + --random_seed 1234567890 + #end if + + ## Optional parameters + +#if str( $selExtraOpts.extraOptions ) == 'full': + ## (-N/#) + #if $selExtraOpts.number_of_runs: + --number_of_runs $selExtraOpts.number_of_runs + #end if + #if $selExtraOpts.number_of_runs_bootstop: + --number_of_runs_bootstop $selExtraOpts.number_of_runs_bootstop + #end if + ## (-a) + #if $selExtraOpts.weightfile: + --weightfile $selExtraOpts.weightfile + #end if + ## (-b) + #if str ($selExtraOpts.secondary_structure_model) != "": + --secondary_structure_model $selExtraOpts.secondary_structure_model + #end if + ## (-b) + #if $selExtraOpts.bootseed: + --bootseed $selExtraOpts.bootseed + #end if + ## (-c) + #if $selExtraOpts.numofcats: + --numofcats $selExtraOpts.numofcats + #end if + ## (-d) + $selExtraOpts.search_complete_random_tree + ## (-D) + $selExtraOpts.ml_search_convergence + ## (-e) + #if $selExtraOpts.model_opt_precision: + --model_opt_precision $selExtraOpts.model_opt_precision + #end if + ## (-E) + #if $selExtraOpts.excludefile: + --excludefile $selExtraOpts.excludefile + #end if + ## (-f) + #if $selExtraOpts.search_algorithm: + --search_algorithm $selExtraOpts.search_algorithm + #end if + ## (-F) + $selExtraOpts.save_memory_cat_model + ## (-g) + #if $selExtraOpts.groupingfile: + --groupingfile $selExtraOpts.groupingfile + #end if + ## (-G) + #if $selExtraOpts.enable_evol_heuristics: + --enable_evol_heuristics $selExtraOpts.enable_evol_heuristics + #end if + ## (-i) + #if $selExtraOpts.initial_rearrangement_setting: + --initial_rearrangement_setting $selExtraOpts.initial_rearrangement_setting + #end if + ## (-I) + #if $selExtraOpts.posterior_bootstopping_analysis: + --posterior_bootstopping_analysis $selExtraOpts.posterior_bootstopping_analysis + #end if + ## (-J) + #if $selExtraOpts.majority_rule_consensus: + --majority_rule_consensus $selExtraOpts.majority_rule_consensus + #end if + ## (-k) + $selExtraOpts.print_branch_lengths + ## (-K) + #if str ($selExtraOpts.multistate_sub_model) != "": + --multistate_sub_model $selExtraOpts.multistate_sub_model + #end if + ## (-m) - see elsewhere + ## (-M) + $selExtraOpts.estimate_individual_branch_lengths + ## (-n) - see elsewhere + ## (-o) + #if $selExtraOpts.outgroup_name: + --outgroup_name $selExtraOpts.outgroup_name + #end if + ## (-O) + $selExtraOpts.disable_undetermined_seq_check + ## (-P) + #if $selExtraOpts.external_protein_model: + --external_protein_model $selExtraOpts.external_protein_model + #end if + ## (-q) + #if $selExtraOpts.multiple_model: + --multiple_model $selExtraOpts.multiple_model + #end if + ## (-r) + #if $selExtraOpts.constraint_file: + --constraint_file $selExtraOpts.constraint_file + #end if + ## (-R) + #if $selExtraOpts.bin_model_parameter_file: + --bin_model_parameter_file $selExtraOpts.bin_model_parameter_file + #end if + ## (-S) + #if $selExtraOpts.secondary_structure_file: + --secondary_structure_file $selExtraOpts.secondary_structure_file + #end if + ## (-t) + #if $selExtraOpts.start_tree_file: + --starting_tree $selExtraOpts.start_tree_file + #end if + ## (-T) see elsewhere + ## (-u) + $selExtraOpts.use_median_approximation + ## (-U) + $selExtraOpts.save_memory_gappy_alignments + ## (-V) + $selExtraOpts.disable_rate_heterogeneity + ## (-W) + #if $selExtraOpts.sliding_window_size: + --sliding_window_size $selExtraOpts.sliding_window_size + #end if + ## (-x) + #if $selExtraOpts.rapid_bootstrap_random_seed: + --rapid_bootstrap_random_seed $selExtraOpts.rapid_bootstrap_random_seed + #end if + ## (-y) + $selExtraOpts.parsimony_starting_tree_only + ## (-z) + #if $selExtraOpts.file_multiple_trees: + --file_multiple_trees $selExtraOpts.file_multiple_trees + #end if +#end if + + </command> + <inputs> + ## (-s) + <param type="data" format="fasta,phylip" name="infile" label="Source file"/> + ## (-m) + <conditional name="search_model_selector"> + <param name="model_type" type="select" label="Model Type"> + <option value="nucleotide" selected="true">Nucleotide</option> + <option value="aminoacid">Amino Acid</option> + <option value="binary">Binary</option> + <option value="multistate">Multistate</option> + </param> + <when value="nucleotide"> + ## Nucleotide substitution models + <param name="base_model" type="select" label="Substitution Model"> + <option value="GTRCAT">GTRCAT</option> + <option value="GTRCATI">GTRCATI</option> + <option value="GTRGAMMA" select="true">GTRGAMMA</option> + <option value="GTRGAMMAI">GTRGAMMAI</option> + </param> + </when> + ## Aminoacid substitution models + <when value="aminoacid"> + <param name="aa_model_empirical_base_frequencies" + type="boolean" checked="no" truevalue="--aa_empirical_freq" falsevalue="" display="checkboxes" label="Use empirical base frequencies in AA models" /> + <param name="base_model" type="select" label="Substitution Model (-m)"> + <option value="PROTCAT" select="true">PROTCAT</option> + <option value="PROTCATI">PROTCATI</option> + <option value="PROTGAMMA">PROTGAMMA</option> + <option value="PROTGAMMAI">PROTGAMMAI</option> + </param> + <param name="aa_search_matrix" type="select" label="Matrix"> + <option value="DAYHOFF" select="true">DAYHOFF</option> + <option value="DCMUT">DCMUT</option> + <option value="JTT">JTT</option> + <option value="MTREV">MTREV</option> + <option value="WAG">WAG</option> + <option value="RTREV">RTREV</option> + <option value="CPREV">CPREV</option> + <option value="VT">VT</option> + <option value="BLOSUM62">BLOSUM62</option> + <option value="MTMAM">MTMAM</option> + <option value="LG">LG</option> + <option value="MTART">MTART</option> + <option value="MTZOA">MTZOA</option> + <option value="PMB">PMB</option> + <option value="HIVB">HIVB</option> + <option value="HIVW">HIVW</option> + <option value="JTTDCMUT">JTTDCMUT</option> + <option value="FLU">FLU</option> + <option value="DUMMY">DUMMY</option> + <option value="DUMMY2">DUMMY2</option> + <option value="GTR_UNLINKED">GTR_UNLINKED</option> + <option value="GTR">GTR</option> + </param> + </when> +## Binary substitution models + <when value="binary"> + <param name="base_model" type="select" label="Substitution Model"> + <option value="BINCAT">BINCAT</option> + <option value="BINCATI">BINCATI</option> + <option value="BINGAMMA">BINGAMMA</option> + <option value="BINGAMMAI">BINGAMMAI</option> + </param> + </when> +## Multi-state substitution models + <when value="multistate"> + <param name="base_model" type="select" label="Substitution Model"> + <option value="MULTICAT">MULTICAT</option> + <option value="MULTICATI">MULTICATI</option> + <option value="MULTIGAMMA">MULTIGAMMA</option> + <option value="MULTIGAMMAI">MULTIGAMMAI</option> + </param> + </when> + </conditional> + <param name="random_seed" type="integer" value="1234567890" size="12" label="Random + seed used for the parsimony inferences" /> + <conditional name="selExtraOpts"> + <param name="extraOptions" type="select" label="RAxML options to use" + help="The required minimal settings are the input file and the + substitution model. To specify extra options select the 'Full option list'"> + <option value="required">Required options only</option> + <option value="full">Full option list</option> + </param> + <when value="full"> + ## (-N/#) + <param name="number_of_runs" type="integer" size="8" value="" + label="Number of runs" help="Specify the number of + alternative runs (-N|#) on distinct starting trees In combination + with the '-b' option will invoke a multiple boostrap analysis. + You can add the bootstopping criteria by choosing the autoMR, + autoMRE, autoMRE_IGN, or autoFC value in a menu below instead of + providing a number here. Bootstopping will only work in + combination with '-x' or '-b'." + optional="True" /> + <param name="number_of_runs_bootstop" type="select" label="Use bootstopping criteria for number of runs" optional="True"> + <option value="" selected="yes"></option> + <option value="autoMR">autoMR</option> + <option value="autoMRE">autoMRE</option> + <option value="autoMRE_IGN">autoMRE_IGN</option> + <option value="autoFC">autoFC</option> + </param> + ## Alphabetical Listing of Advanced Options + ## (-a) + <param format="txt" name="weightfile" type="data" label="Column weight file" optional="True" /> + ## (-A) + <param name="secondary_structure_model" type="select" label="Secondary structure substitution model" optional="True"> + <option value="" selected="yes"></option> + <option value="S6A">S6A</option> + <option value="S6B">S6B</option> + <option value="S6C">S6C</option> + <option value="S6D">S6D</option> + <option value="S6E">S6E</option> + <option value="S7A">S7A</option> + <option value="S7B">S7B</option> + <option value="S7C">S7C</option> + <option value="S7D">S7D</option> + <option value="S7E">S7E</option> + <option value="S7F">S7F</option> + <option value="S16">S16</option> + <option value="S16A">S16A</option> + <option value="S16B">S16B</option> + </param> + ## (-b) + <param name="bootseed" type="integer" size="8" value="" label="Random number for non-parametric bootstrapping" refresh_on_change='true' optional="True" /> + ## (-x) + <param name="rapid_bootstrap_random_seed" type="integer" value='' size="7" label="Rapid bootstrapping random seed" optional="True" help="Specify a random seed and turn on rapid bootstrapping. CAUTION: unlike in version 7.0.4 RAxML will conduct rapid BS replicates under the model of rate heterogeneity you specified via '-m' and not by default under CAT." /> + ## (-B) + <param name="cutoff_threshold" type="float" size="8" label="MR Cutoff threshold" value="" help="Cutoff threshold for the MR-based bootstopping criteria, recommended value is 0.1" optional="True" /> + ## (-c) + <param name="numofcats" type="integer" size="8" label="Number of Rate Categories for GTRCAT/GTRMIX" optional="True" /> + ## (-C) Conduct model parameter optimization doesn't work in the pthreads version. Skip for now. + ## (-d) + <param name="search_complete_random_tree" type="boolean" checked="False" truevalue="--search_complete_random_tree" falsevalue="" display="checkboxes" label="Start ML optimization from a complete random starting tree" /> + ## (-D) + <param name="ml_search_convergence" type="boolean" checked="False" truevalue="--ml_search_convergence" falsevalue="" label="ML search convergence criterion" /> + ## (-e) + <param name="model_opt_precision" type="float" size="8" label="Model optimization precision" value="" help="Set model optimization precision in log likelihood units when MIX/MIXI or GAMMA/GAMMAI models are used" optional="True" /> + ## (-E) + <param format="txt" name="excludefile" type="data" label="Exclude file" optional="True" /> + ## (-f) + <param name="search_algorithm" type="select" label="Algorithm to execute" optional="True"> + <option value="a">Rapid bootstrap and best ML tree search (a)</option> + <option value="A">Compute marginal ancestral states (A)</option> + <option value="b">Draw bipartition information (b)</option> + <option value="c">Check if the alignment can be read (c)</option> + <option value="d" selected="true">Hill-climbing ML Search (d) (default)</option> + <option value="e">Optimize GAMMA/GAMMAI model/branches (e)</option> + <option value="g">Compute per-site log likelihoods for -z trees (g)</option> + <option value="h">Compute log likelihood test for -t / -z trees (h)</option> + <option value="j">Generate bootstrapped alignment files (j)</option> + <option value="J">Compute SH-like support values for the -t tree (J)</option> + <option value="m">Compare bipartitions between -t and -z trees (m)</option> + <option value="n">Compute log likelihood score for -z trees (n)</option> + <option value="o">Use old slower search algorithm (o)</option> + <option value="p">Stepwise MP addition of new sequences (p)</option> + <option value="q">Fast quartet calculator (q)</option> + <option value="r">Compute pairwise RF distances in -z trees (r)</option> + <option value="s">Split a multi-gene alignment (s)</option> + <option value="S">Compute site-specific placement bias (S)</option> + <option value="t">Randomized tree searches on a fixed starting tree (t)</option> + <option value="T">Final optimization of a ML tree from a bootstrap (T)</option> + <option value="u">Morphological weight calibration using ML on a -t tree (u)</option> + <option value="v">Classify environmental sequences (v)</option> + <option value="w">Compute ELW-test on -z trees (w)</option> + <option value="x">Compute GAMMA model pair-wise ML distances on a tree (x)</option> + <option value="y">Classify environmental sequences into a reference tree (y)</option> + </param> + ## (-F) + <param name="save_memory_cat_model" type="boolean" checked="no" truevalue="--save_memory_cat_model" falsevalue="" display="checkboxes" label="ML tree searches under CAT model" optional="True" help="ML tree searches under CAT model for very large trees without switching to GAMMA in the end (saves memory) and no thorough optimization under GAMMA" /> + ## (-g) + <param name="groupingfile" format="txt" type="data" label="Multifurcating constraint tree" optional="True" /> + ## (-G) + <param name="enable_evol_heuristics" type="float" size="8" label="Enable the ML-based evolutionary placement algorithm heuristics" help="Enable the ML-based evolutionary placement algorithm heuristics by specifiyng a threshold value (fraction of insertion branches to be evaluated using slow insertions under ML)." optional="True" > + <validator type="in_range" message="0.0 <= fraction <= 1.0" min="0.0" max="1.0"/> + </param> + ## (-i) + <param name="initial_rearrangement_setting" type="integer" size="5" value="" label="Initial rearrangement setting" optional="True" /> + ## (-I) + <param name="posterior_bootstopping_analysis" type="select" label="Posterior bootstopping analysis" optional="True"> + <option value="" selected="True"></option> + <option value="autoFC">Frequency-based criterion (autoFC)</option> + <option value="autoMR">Majority-rule consensus tree criterion (autoMR)</option> + <option value="autoMRE">Extended majority-rule consensus tree criterion (autoMRE)</option> + <option value="autoMRE_IGN">Extended MR consensus tree criterion with bipartitions (autoMRE_IGN)</option> + </param> + ## (-j) - EMPTY - we cannot handle intermediate tree files in Galaxy + ## (-J) + <param name="majority_rule_consensus" type="select" label="Compute consensus tree" optional="True"> + <option value="" selected="True"></option> + <option value="MR">Majority-rule consensus tree (MR)</option> + <option value="MRE">Extended majority-rule consensus tree (MRE)</option> + <option value="STRICT">Strict consensus tree (STRICT)</option> + <option value="STRICT_DROP">Identify strict dropsets (STRICT_DROP)</option> + <option value="MR_DROP">Identify majority-rule dropsets (MR_DROP)</option> + </param> + ## (-k) + <param name="print_branch_lengths" type="boolean" checked="no" truevalue="--print_branch_lengths" falsevalue="" display="checkboxes" label="Print bootstrapped trees with branch lengths" help="Specifies that bootstrapped trees should be printed with branch lengths. The bootstraps will run a bit longer, because model parameters will be optimized at the end of each run under GAMMA or GAMMA+P-Invar respectively." optional="True" /> + ## (-K) + <param name="multistate_sub_model" type="select" label="Specify a + multi-state substitution model" optional="True"> + <option value="" selected="true"></option> + <option value="GTR">GTR</option> + <option value="ORDERED">ORDERED</option> + <option value="MK">MK</option> + </param> + ## (-M) + <param name="estimate_individual_branch_lengths" type="boolean" checked="no" truevalue="--estimate_individual_branch_lengths" falsevalue="" display="checkboxes" label="Estimate individual per-partition branch lengths" help="Only has effect with a partition file (-q)." optional="True" /> + ## (-n) name is hard-coded to 'galaxy' for more straightforward handling of output files + ## (-o) + <param name="outgroup_name" type="text" size="40" value="" label="Outgroup name" help="E.g. Mouse or Mouse,Rat. No spaces between taxon names are allowed." optional="True" /> + ## (-O) + <param name="disable_undetermined_seq_check" type="boolean" checked="no" truevalue="--disable_undertermined_seq_check" falsevalue="" display="checkboxes" label="Disable check for completely undetermined sequence in alignment" optional="True" help="Disable the check for completely undetermined sequence in alignment. The program will not exit with an error message when '-O' is specified." /> + <param name="external_protein_model" format="txt" type="data" label="External AA substitution model" help="Specify the file name of a user-defined AA (Protein) substitution model. This file must contain 420 entries, the first 400 being the AA substitution rates (this must be a symmetric matrix) and the last 20 are the empirical base frequencies." optional="True" /> + ## (-q) + <param name="multiple_model" format="txt" type="data" label="Multiple model assignment to alignment partitions" optional="True" help="Specify the file name which contains the assignment of models to alignment partitions for multiple models of substitution. For the syntax of this file please consult the manual." /> + ## (-r) + <param name="constraint_file" format="txt" type="data" label="Binary constraint tree" optional="True" help="Specify the file name of a binary constraint tree. This tree does not need to be comprehensive, i.e. must not contain all taxa." /> + ## (-R) + <param name="bin_model_parameter_file" format="txt" type="data" label="Binary model parameter file" optional="True" help="Specify the file name of a binary model parameter file that has previously been generated with RAxML using the '-f e' tree evaluation option." /> + ## (-s) source file option is in the required options section + ## (-S) + <param name="secondary_structure_file" format="txt" type="data" label="Secondary structure file" optional="True" help="Specify the name of a secondary structure file. The file can contain '.' for alignment columns that do not form part of a stem and characters '()<>[]{}' to define stem regions and pseudoknots."/> + ## (-t) + <param name="start_tree_file" format="txt" type="data" label="Starting tree file" optional="True" help="Specify a user starting tree file name in Newick format." /> + ## (-T) is hard-coded in the required options section + <param name="use_median_approximation" type="boolean" checked="no" truevalue="--use_median_approximation" falsevalue="" display="checkboxes" label="Use the median for the discrete approximation" help="Use the median for the discrete approximation of the GAMMA model of rate heterogeneity." optional="True" /> + ## (-U) + <param name="save_memory_gappy_alignments" type="boolean" checked="no" truevalue="--save_memory_gappy_alignments" falsevalue="" display="checkboxes" label="Save memory on large gappy alignments" help="Try to save memory by using SEV-based implementation for gap columns on large gappy alignments." optional="True" /> + ## (-V) + <param name="disable_rate_heterogeneity" type="boolean" checked="no" truevalue="--disable_raite_heterogeneity" falsevalue="" display="checkboxes" label="Disable rate heterogeneity" help="Disable rate heterogeneity among sites model and use one without rate heterogeneity instead. Only works if you specify the CAT model of rate heterogeneity." optional="True" /> + ## (-W) + <param name="sliding_window_size" type="integer" size="5" value="" label="Sliding window size" optional="True" help="Sliding window size for leave-one-out site-specific placement bias algorithm. Only effective when used in combination with '-f S'. Default is '100 sites'" /> + ## (-x) - see it by the (-b) + ## (-y) + <param name="parsimony_starting_tree_only" type="boolean" checked="no" truevalue="--parsimony_starting_tree_only" falsevalue="" display="checkboxes" label="Compute a randomized parsimony starting tree only" optional="True" help="If you want to only compute a parsimony starting tree with RAxML specify '-y'. The program will exit after computation of the starting tree." /> + ## (-z) + <param name="file_multiple_trees" format="txt" type="data" label="Multiple trees file" help="Specify the file name of a file containing multiple trees e.g. from a bootstrap that shall be used to draw bipartition values onto a tree provided with '-t', It can also be used to compute per site log likelihoods in combination with '-f g' and to read a bunch of trees for '-f h', '-f m' and '-f n'." optional="True" /> + </when> ## full option list + </conditional> ## END $selExtraOpts + </inputs> + <outputs> + <data format="txt" name="info" from_work_dir="RAxML_info.galaxy" label="Info" /> + ## REQUIRED + <data format="txt" name="logReq" from_work_dir="RAxML_log.galaxy" label="Log"> + <filter>(selExtraOpts['extraOptions'] == 'required')</filter> + <filter>selExtraOpts['search_algorithm'] != 'a'</filter> + </data> + <data format="txt" name="bestTreeReq" from_work_dir="RAxML_bestTree.galaxy" label="Best-scoring ML Tree"> + <filter>(selExtraOpts['extraOptions'] == 'required')</filter> + </data> + <data format="txt" name="parsimonyTreeReq" from_work_dir="RAxML_parsimonyTree.galaxy" label="Parsimony Tree"> + <filter>(selExtraOpts['extraOptions'] == 'required')</filter> + <filter>selExtraOpts['search_algorithm'] != 'a'</filter> + </data> + <data format="txt" name="resultReq" from_work_dir="RAxML_result.galaxy" label="Result"> + <filter>(selExtraOpts['extraOptions'] == 'required')</filter> + <filter>selExtraOpts['search_algorithm'] != 'a'</filter> + </data> + ## ADVANCED + <data format="txt" name="randomTree" from_work_dir="RAxML_randomTree.galaxy" label="Random Tree"> + <filter>selExtraOpts['search_complete_random_tree'] is True</filter> + <filter>selExtraOpts['extraOptions'] == "full"</filter> + </data> + <data format="txt" name="bestTree" from_work_dir="RAxML_bestTree.galaxy" label="Best-scoring ML Tree"> + <filter>(selExtraOpts['extraOptions'] == 'full')</filter> + <filter>(selExtraOpts['rapid_bootstrap_random_seed'] == '' or selExtraOpts['bootseed'] == '') and (selExtraOpts['search_algorithm'] == 'a')</filter> + <filter>(selExtraOpts['search_algorithm'] != 'b')</filter> + <filter>(selExtraOpts['majority_rule_consensus'] == '')</filter> + </data> + <data format="txt" name="bestTreeMultipleModel" from_work_dir="RAxML_bestTree.galaxy" label="Best-scoring ML Tree"> + <filter>(selExtraOpts['extraOptions'] == "full")</filter> + <filter>(selExtraOpts['multiple_model'] != '')</filter> + </data> + <data format="txt" name="bestTreeMultipleModelPartitions" from_work_dir="RAxML_bestTreePartitions.galaxy" label="Best-scoring ML Tree Partitions"> + <filter>(selExtraOpts['extraOptions'] == "full")</filter> + <filter>selExtraOpts['multiple_model'] is not None </filter> + </data> + <data format="txt" name="log" from_work_dir="RAxML_log.galaxy" label="Log"> + <filter>(selExtraOpts['extraOptions'] == "full")</filter> + <filter>(selExtraOpts['rapid_bootstrap_random_seed'] == '')</filter> + <filter>(selExtraOpts['bootseed'] == '')</filter> + <filter>(selExtraOpts['search_algorithm'] != 'a')</filter> + <filter>(selExtraOpts['search_algorithm'] != 'b')</filter> + <filter>(selExtraOpts['majority_rule_consensus'] == '') </filter> + </data> + <data format="txt" name="result" from_work_dir="RAxML_result.galaxy" label="Result"> + <filter>(selExtraOpts['extraOptions'] == "full")</filter> + <filter>(selExtraOpts['rapid_bootstrap_random_seed'] == '')</filter> + <filter>selExtraOpts['bootseed'] == ''</filter> + <filter>selExtraOpts['search_algorithm'] != 'a'</filter> + <filter>selExtraOpts['search_algorithm'] != 'b'</filter> + <filter>(selExtraOpts['majority_rule_consensus'] == '') </filter> + </data> + <data format="txt" name="resultMultipleModelPartitions" from_work_dir="RAxML_resultPartitions.galaxy" label="Result Partitions"> + <filter>(selExtraOpts['extraOptions'] == "full")</filter> + <filter>(selExtraOpts['multiple_model'] is not None)</filter> + </data> + <data format="txt" name="parsimonyTree" from_work_dir="RAxML_parsimonyTree.galaxy" label="Parsimony Tree"> + <filter>(selExtraOpts['extraOptions'] == "full")</filter> + <filter>(selExtraOpts['rapid_bootstrap_random_seed'] == '')</filter> + <filter>(selExtraOpts['bootseed'] == '')</filter> + <filter>(selExtraOpts['search_algorithm'] != 'a')</filter> + <filter>(selExtraOpts['constraint_file'] is None)</filter> + <filter>(selExtraOpts['groupingfile'] is None)</filter> + <filter>(selExtraOpts['search_complete_random_tree'] is False)</filter> + <filter>(selExtraOpts['start_tree_file'] is None)</filter> + <filter>(selExtraOpts['majority_rule_consensus'] == '') </filter> + </data> + <data format="txt" name="bootstrap" from_work_dir="RAxML_bootstrap.galaxy" label="Final Bootstrap Trees"> + <filter>selExtraOpts['extraOptions'] == "full"</filter> + <filter>selExtraOpts['number_of_runs'] != '' or selExtraOpts['number_of_runs_bootstop'] != ''</filter> + <filter>selExtraOpts['rapid_bootstrap_random_seed'] != '' or selExtraOpts['bootseed'] != ''</filter> + </data> + <data format="txt" name="bipartitions" from_work_dir="RAxML_bipartitions.galaxy" label="Bipartitions"> + <filter>(selExtraOpts['search_algorithm'] == 'b') or ((selExtraOpts['search_algorithm'] == 'a') and (selExtraOpts['rapid_bootstrap_random_seed'] != '')) </filter> + <filter>selExtraOpts['extraOptions'] == "full"</filter> + </data> + <data format="txt" name="bipartitionsBranchLabels" from_work_dir="RAxML_bipartitionsBranchLabels.galaxy" label="Bipartitions Branch Labels"> + <filter>selExtraOpts['extraOptions'] == "full"</filter> + <filter>(selExtraOpts['search_algorithm'] == 'b') or ((selExtraOpts['search_algorithm'] == 'a') and (selExtraOpts['rapid_bootstrap_random_seed'] != '')) </filter> + </data> + <data format="txt" name="strictConsensusTree" from_work_dir="RAxML_StrictConsensusTree.galaxy" label="Strict Consensus Tree"> + <filter>selExtraOpts['extraOptions'] == "full"</filter> + <filter>(selExtraOpts['majority_rule_consensus'] == 'STRICT') </filter> + </data> + <data format="txt" name="majorityRuleConsensusTree" from_work_dir="RAxML_MajorityRuleConsensusTree.galaxy" label="Majority Rule Consensus Tree"> + <filter>selExtraOpts['extraOptions'] == "full"</filter> + <filter>(selExtraOpts['majority_rule_consensus'] == 'MR')</filter> + </data> + <data format="txt" name="majorityRuleExtendedConsensusTree" from_work_dir="RAxML_MajorityRuleExtendedConsensusTree.galaxy" label="Majority Rule Extended Consensus Tree"> + <filter>selExtraOpts['extraOptions'] == "full"</filter> + <filter>(selExtraOpts['majority_rule_consensus'] == 'MRE')</filter> + </data> + <data format="txt" name="bipartitionFreq" from_work_dir="RAxML_bipartitionFrequences.galaxy" label="Pair-wise bipartition frequences."> + <filter>selExtraOpts['search_algorithm'] == 'm' </filter> + <filter>selExtraOpts['extraOptions'] == "full"</filter> + </data> + <data format="txt" name="perSiteLLs" from_work_dir="RAxML_perSiteLLs.galaxy" label="Per-site likelihood schores"> + <filter>selExtraOpts['search_algorithm'] == 'g' </filter> + <filter>selExtraOpts['extraOptions'] == "full"</filter> + </data> + <data format="txt" name="distances" from_work_dir="RAxML_distances.galaxy" label="Pair-wise distances"> + <filter>selExtraOpts['search_algorithm'] == 'x' </filter> + <filter>selExtraOpts['extraOptions'] == "full"</filter> + </data> + </outputs> + <tests> + <test> + <param name="extraOptions" value="required"/> + <param name="infile" value="dna.phy"/> + <param name="model_type" value="nucleotide"/> + <param name="base_model" value="GTRCAT"/> + <output name="parsimonyTreeReq" file="RAxML_parsimonyTree.galaxy"> + <output name="bestTreeReq"/> + <assert_contents> + <has_text_matching expression="Frog" /> + </assert_contents> + </output> + </test> + </tests> + <help> +Title: +______ +Randomized Axelerated Maximum Likelihood + +Author: +_______ +Alexandros Stamatakis + +Description: +____________ + +RAxML is a program for Maximum Likelihood-based inference of large phylogenetic +trees. The program is explicitly being developed to efficiently infer trees for +extremely large datasets, either in terms of the number of taxa and/or the +sequence length. + +This wrapper works with the RAxML version 8.2.4. + +URL: +____ +Author's page: http://www.exelixis-lab.org/ + +Help: http://groups.google.com/group/raxml + + +Tool development: +----------------- +Oleksandr Moskalenko with adaptations from Tiago Antao. + + </help> +<citations> + <citation type="doi">10.1093/bioinformatics/btu033</citation> + <citation type="bibtex"> +@article{stamatakis2014raxml, + title={RAxML version 8: a tool for phylogenetic analysis and post-analysis of large phylogenies}, + author={Stamatakis, Alexandros}, + journal={Bioinformatics}, + volume={30}, + number={9}, + pages={1312--1313}, + year={2014}, + publisher={Oxford Univ Press}} + </citation> +</citations> +</tool>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/RAxML_parsimonyTree.galaxy Tue Nov 03 16:27:41 2015 -0500 @@ -0,0 +1,1 @@ +(Whale,((((Mouse,Chicken),Human),Rat),((Frog,(Carp,Loach)),Seal)),Cow);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/dna.phy Tue Nov 03 16:27:41 2015 -0500 @@ -0,0 +1,11 @@ +10 60 +Cow ATGGCATATCCCATACAACTAGGATTCCAAGATGCAACATCACCAATCATAGAAGAACTA +Carp ATGGCACACCCAACGCAACTAGGTTTCAAGGACGCGGCCATACCCGTTATAGAGGAACTT +Chicken ATGGCCAACCACTCCCAACTAGGCTTTCAAGACGCCTCATCCCCCATCATAGAAGAGCTC +Human ATGGCACATGCAGCGCAAGTAGGTCTACAAGACGCTACTTCCCCTATCATAGAAGAGCTT +Loach ATGGCACATCCCACACAATTAGGATTCCAAGACGCGGCCTCACCCGTAATAGAAGAACTT +Mouse ATGGCCTACCCATTCCAACTTGGTCTACAAGACGCCACATCCCCTATTATAGAAGAGCTA +Rat ATGGCTTACCCATTTCAACTTGGCTTACAAGACGCTACATCACCTATCATAGAAGAACTT +Seal ATGGCATACCCCCTACAAATAGGCCTACAAGATGCAACCTCTCCCATTATAGAGGAGTTA +Whale ATGGCATATCCATTCCAACTAGGTTTCCAAGATGCAGCATCACCCATCATAGAAGAGCTC +Frog ATGGCACACCCATCACAATTAGGTTTTCAAGACGCAGCCTCTCCAATTATAGAAGAATTA \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tool_dependencies.xml Tue Nov 03 16:27:41 2015 -0500 @@ -0,0 +1,6 @@ +<?xml version="1.0"?> +<tool_dependency> + <package name="raxml" version="8.2.4"> + <repository changeset_revision="25be7ee8d4b6" name="package_raxml_8_2_4" owner="tiagoantao" toolshed="https://testtoolshed.g2.bx.psu.edu" /> + </package> +</tool_dependency>