<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pise PUBLIC "pise2.dtd" "pise2.dtd" >
<!--
	This is an attempt to expose PAUP primitively.
	We need to expose some configurable options, and figure out how to deliver those options to PAUP without writing a command block in the Nexus file
-->
   
<pise>	
	<head>
		<title>PAUP on XSEDE</title>
		<version>4.a168</version>
		<description>Phylogenetic Analyses Using Parsimony*</description>
		<authors>David Swofford</authors>
		<reference>
			Swofford, D. L. 2003. PAUP*. Phylogenetic Analysis Using Parsimony (*and Other Methods). 
			Version 4. Sinauer Associates, Sunderland, Massachusetts.
		</reference>
		<category>Phylogeny / Alignment</category>
		<doclink>http://paup.csit.fsu.edu</doclink>
	</head>
	
	<command>paup_xsede</command>
<!--********************************************************************************************************************************
	This interface was created by mamiller on or around 8/1/2014.
	*********************************************************************************************************************************

-->

<!-- After a bit of soul-searching, I have decided to change the default multithreading setting to be a single thread. 
Previously, I queried the system for the number of cores available and defaulted to one thread per core. 
The problem with this method is that many machines now have a large number of cores, and using this many threads degrades rather than enhances 
performance. Also, on a machine running multiple long jobs, better system performance is obtained by not having all of these jobs compete for 
the same set of cores. This is is especially relevant for jobs running on HPC clusters using the Sun Grid Engine for scheduling-the operating 
system will happily report that (say) 16 cores are available even though there are already 15 other jobs running on a node.

So now, if you want to use multithreading for maximum likelihood calculations, you must explicity specify lset nthreads=n; (where n > 1) before 
beginning a likelihood analysis (or use the equivalent setting from the "Optimization" pane of the "Likelihood Settings" dialog box). 
You will probably want to do some experimentation to determine the best value for nthreads-two to four may be better than one, but depending 
on the size of the data, requesting too many threads will be detrimental. You can also use lset nthreads=auto; to obtain the old behavior of using 
one thread per core.  -->

<!-- [cipres@login02 rules]$ cat PAUP.Expanse.rules
Rules for running PAUP on Expanse via the CIPRES gateway

Runs use 1 or 2 Pthreads on 1 or 2 cores of Expanse in the shared 
partition. The charged usage is based upon the Slurm memory.

- Ask the user whether or not the analysis is doing a parsimony search.

- Ask the user whether extra memory is needed for the analysis.

- Specify the run parameters according to the following table.

                         nthreads
               Slurm     in paup_   Extra   Slurm
     Search  threads  command.txt  memory  memory

  parsimony        1            1      no   -> 2G

  parsimony        1            1     yes   -> 6G

      other        2            2     any   -> 4G

- Include the following in the run script.

  #SBATCH -p shared
  #SBATCH -*qos=shared-cipres
  #SBATCH -N 1
  #SBATCH -*ntasks-per-node=1
  #SBATCH -*cpus-per-task=<threads>
  #SBATCH -*mem=<memory>
  ...
  srun ... <wrapper> paup_commands.txt


 -->
	<parameters>
<!-- paup module: paup4a168_expanse  -->

	<!-- this parameter just sets the invocation line paup -n < paup_commands.txt -->
    <parameter ismandatory="1" issimple="1" ishidden="1" type="String"> 
	<name>initiation_string</name>
		<attributes>
			<format>
				<language>perl</language>
				<!-- the -n option is for non-interactive use  -->
				<code>"paup4a168_expanse -n &lt; paup_commands.txt"</code>
			</format>
			<group>0</group>
		</attributes>
	</parameter>

<!-- this element specifies that the input file is named input.nex  -->	
	<parameter ismandatory="1" issimple="1" isinput="1" type="InFile"> 
	<name>infile</name>
		<attributes>
			<prompt>Input Data (nexus format)</prompt>
			<filenames>infile.nex</filenames>	
			<group>0</group>
		</attributes>
	</parameter>
	
<!-- this element creates the file paup_commands.txt required by PAUP; the contents should be
    execute infile.nex;
    execute paup_block.nex;
    quit;
    
    Any additional commands are created in the file paup_block.nex 
    
    
    
 <parameter type="String" ishidden="1">
	<name>paup_commandsb</name>
		<attributes>
			<paramfile>paup_commands.txt</paramfile>	
			<group>0</group>
			<format>
					<language>perl</language>
					<code><![CDATA[ << "EOT"
execute paup_block.nex;
EOT
					  ]]></code> 
				</format>
		</attributes>
	</parameter> -->

  <parameter type="String" ishidden="1">
	<name>paup_commandsa1</name>
		<attributes>
			<paramfile>paup_commands.txt</paramfile>	
			<group>1</group>
			<precond>
				<language>perl</language>
				<code>$optimality_specified ne "Parsimony"</code>
			</precond>
			<format>
					<language>perl</language>
					<code><![CDATA[ << "EOT"
lset nthreads=2;\\n
set autoclose=yes;\\n
execute infile.nex;\\n
EOT
					  ]]></code> 
				</format>
		</attributes>
	</parameter>
	
<!-- for when  -->
	  <parameter type="String" ishidden="1">
	<name>paup_commandsa2</name>
		<attributes>
			<paramfile>paup_commands.txt</paramfile>	
			<group>1</group>
			<precond>
					<language>perl</language>
					<code>$optimality_specified eq "Parsimony"</code>
				</precond>
			<format>
					<language>perl</language>
					<code><![CDATA[ << "EOT"
lset nthreads=1;\\n
set autoclose=yes;\\n
execute infile.nex;\\n
EOT
					  ]]></code> 
				</format>
		</attributes>
	</parameter>
	
<!--  <parameter type="String" ishidden="1">
	<name>paup_commandsa3</name>
		<attributes>
			<paramfile>paup_commands.txt</paramfile>	
			<group>1</group>
			<precond>
					<language>perl</language>
					<code>$optimality_specified eq "Parsimony" &amp;&amp; $more_memory</code>
				</precond>
			<format>
					<language>perl</language>
					<code><![CDATA[ << "EOT"
lset nthreads=$nthreads_specified;\\n
set autoclose=yes;\\n
execute infile.nex;\\n
EOT
					  ]]></code> 
				</format>
		</attributes>
	</parameter> -->

<!-- for when  
	  <parameter type="String" ishidden="1">
	<name>paup_commandsa3</name>
		<attributes>
			<paramfile>paup_commands.txt</paramfile>	
			<group>1</group>
			<precond>
					<language>perl</language>
					<code>$svdq_specified</code>
				</precond>
			<format>
					<language>perl</language>
					<code><![CDATA[ << "EOT"
lset nthreads=24;\\n
set autoclose=yes;\\n
execute infile.nex;\\n
EOT
					  ]]></code> 
				</format>
		</attributes>
	</parameter> -->
	
<parameter type="String" ishidden="1">
	<name>paup_commandsc</name>
		<attributes>
			<paramfile>paup_commands.txt</paramfile>	
			<group>2</group>
			<format>
					<language>perl</language>
					<code><![CDATA[ << "EOT"
quit;
EOT
					  ]]></code> 
				</format>
		</attributes>
	</parameter>
	
	<parameter ishidden="1" type="String">
			<name>paup_scheduler</name>
			<attributes>
				<paramfile>scheduler.conf</paramfile>
				<precond>
					<language>perl</language>
					<code>$optimality_specified ne "Parsimony"</code>
				</precond>
				<format>
					<language>perl</language>
							<code>
									"nodes=1\\n" .
									"node_exclusive=0\\n" .
									"mem=4G\\n" .
									"cpus-per-task=2\\n" .
									"threads_per_process=2\\n"
							</code>
				</format>
			</attributes>
	</parameter>
					
	<parameter ishidden="1" type="String">
			<name>paup_scheduler_likelihood</name>
			<attributes>
				<paramfile>scheduler.conf</paramfile>
				<precond>
					<language>perl</language>
					<code>$optimality_specified eq "Parsimony" &amp;&amp; !$more_memory</code>
				</precond>
				<format>
					<language>perl</language>
							<code>
									"nodes=1\\n" .
									"node_exclusive=0\\n" .
									"mem=2G\\n" .
									"cpus-per-task=1\\n" .
									"threads_per_process=1\\n"
							</code>
				</format>
			</attributes>
	</parameter>
	
		<parameter ishidden="1" type="String">
			<name>paup_scheduler_likelihood2</name>
			<attributes>
				<paramfile>scheduler.conf</paramfile>
				<precond>
					<language>perl</language>
					<code>$optimality_specified eq "Parsimony" &amp;&amp; $more_memory</code>
				</precond>
				<format>
					<language>perl</language>
							<code>
									"nodes=1\\n" .
									"node_exclusive=0\\n" .
									"mem=12G\\n" .
									"cpus-per-task=1\\n" .
									"threads_per_process=1\\n"
							</code>
				</format>
			</attributes>
	</parameter>
	
	
<!-- Begin Visible parameters -->
<!-- Parameters with visible controls start here -->
		
		<parameter type="Float" issimple="1" ismandatory="1">
			<name>runtime</name>
			<attributes>
				<group>1</group>
				<paramfile>scheduler.conf</paramfile>
				<prompt>Maximum Hours to Run (click here for help setting this correctly)</prompt>
				<vdef>
					<value>0.5</value>
				</vdef>
				<ctrls>
					<ctrl>
						<message>Please set maximum hours to a value less than 168 h</message>
						<language>perl</language>
						<code>$runtime &gt; 168.0</code>
					</ctrl>
					<ctrl>
						<message>Please set maximum hours to run to a value greater than 0.1 h</message>
						<language>perl</language>
						<code>$runtime &lt; 0.1</code>
					</ctrl>
				</ctrls>
				<format>
					<language>perl</language>
					<code>"runhours=$value\\n"</code>
				</format>
							<warns>
								<warn>
									<message>The job will run on 2 processors as configured. If it runs for the entire configured time, it will consume 2 x $runtime cpu hours</message>
									<language>perl</language>
									<code>$optimality_specified ne "Parsimony"</code>
								</warn>
								<warn>
									<message>The job will run on 1 processor as configured. If it runs for the entire configured time, it will consume 1 x $runtime cpu hours</message>
									<language>perl</language>
									<code>$optimality_specified eq "Parsimony" </code>
								</warn>
							</warns> 
							<comment>
<value>Estimate the maximum time your job will need to run. We recommend testing initially with a time less than 0.5hr test run because Jobs set for 0.5 h or less depedendably run immediately in the "debug" queue. 
Once you are sure the configuration is correct, you then increase the time.
This is because queue waits can be longer for jobs configured for the full 168 hours. 
</value>
							</comment>
			</attributes>
		</parameter>
		
		<parameter type="Switch" issimple="1" ismandatory="1">
			<name>paupblock</name>
			<attributes>
				<group>1</group>
				<prompt>My data set has commands in a PAUP block</prompt>
				<vdef>
					<value>1</value>
				</vdef>
				<ctrls>
					<ctrl>
						<message>This interface requires a PAUP block in the input file.</message>
						<language>perl</language>
						<code>!$paupblock</code>
					</ctrl>
				</ctrls>
			</attributes>
		</parameter> 
		 

<!-- The section below uses visible commands to create the parameter file paup_block.nex  -->

<!--  <parameter type="Paragraph" >
	<paragraph>
		<name>paup_params</name>
		<prompt>PAUP Parameters</prompt>
		<parameters> -->
<!-- set a header for paup_block.nex -->
<!-- 					<code><![CDATA[ << "EOT"
#nexus\\n
 [PAUPRat example setup file. Sikes, D. S. and P. O. Lewis. 2001. beta software, version 1. PAUPRat: PAUP* implementation of the parsimony\\n
 ratchet. Distributed by the authors. Department of Ecology and Evolutionary Biology, University of Connecticut, Storrs, USA. April 2001. Based on\\n
 Kevin Nixon's Parsimony Ratchet as described in Nixon, K. C.  1999.  The Parsimony Ratchet, a new method for rapid parsimony analysis.  Cladistics 15: 407-414.]\\n
 \\n
begin pauprat;\\n 
EOT
					  ]]></code> -->
<!--  		<parameter type="String" ishidden="1">
			<name>setup_header</name>
			<attributes>
				<paramfile>paup_block.nex</paramfile>
				<group>16</group>
 				<precond>
					<language>perl</language>
					<code>!$paupblock</code>
				</precond> 
				<format>
					<language>perl</language>
					<code><![CDATA[ <<"EOT"
#NEXUS\\n

EOT
					]]></code>
				</format>
			</attributes>
		</parameter> -->
		
		<parameter issimple="1" ismandatory="1" ishidden="0" type="Excl">
			<name>optimality_specified</name>
			<attributes>
				<prompt>Set the Optimality Criterion</prompt>
					<vdef>
						<value>Parsimony</value>
					</vdef>
					<vlist>
						<value>Parsimony</value>
						<label>Parsimony</label>
						<value>Likelihood</value>
						<label>Likelihood</label>
						<value>Distance</value>
						<label>Distance</label>
					</vlist>
			</attributes>
		</parameter>
		
		<parameter issimple="1" ismandatory="1" type="Switch">
			<name>more_memory</name>
			<attributes>
				<prompt>My Parsimony run requires more memory</prompt>
				<precond>
					<language>perl</language>
					<code>$optimality_specified eq "Parsimony"</code>
				</precond>
					<vdef>
						<value>0</value>
					</vdef>
			</attributes>
		</parameter>
<!--   "pset mstaxa=uncertain";\\n --> 
		
<!--   "pset mstaxa=uncertain";\\n 
		<parameter type="Switch">
			<name>setup4</name>
			<attributes>
				<prompt>Treat multistate taxa as uncertain</prompt>
				<paramfile>paup_block.nex</paramfile>
				<precond>
					<language>perl</language>
					<code>!$paupblock</code>
				</precond>
				<group>16</group>
					<vdef>
						<value>1</value>
					</vdef>
			</attributes>
		</parameter>
		
		<parameter type="String" ishidden="1">
			<name>setup4_hidden</name>
			<attributes>
				<paramfile>paup_block.nex</paramfile>
				<group>16</group>
				<precond>
					<language>perl</language>
					<code>!$paupblock</code>
				</precond>
				<format>
					<language>perl</language>
					<code><![CDATA[ <<"EOT"
 pset mstaxa=uncertain;\\n
EOT
					]]></code>
				</format>
			</attributes>
		</parameter> --> 

<!--   "swap=tbr ";\\n 
		<parameter type="Excl" ismandatory="1">
			<name>paup_branchalg</name>
			<attributes>
				<prompt>Branch Swapping Algorithm (swap)</prompt>
				<paramfile>paup_block.nex</paramfile>
				<group>19</group>
				<precond>
					<language>perl</language>
					<code>!$paupblock</code>
				</precond> -->
				<!-- Branch Swapping Algorithm (swap) * TBR SPR NNI -->
<!--  			<vlist>
					<value>tbr</value>
					<label>TBR</label>
					<value>spr</value>
					<label>SPR</label>
					<value>nni</value>
					<label>NNI</label>
				</vlist>
				<vdef>
					<value>tbr</value>
				</vdef>
				<comment>
<value>PAUP uses three branch-swapping algorithms. In order of increasing effectiveness, these are (1) nearest neighbor interchanges (NNI, equivalent to the "local" procedure used in Versions 1 and 2 of PAUP); 
(2) subtree pruning-regrafting (SPR, approximately, but not exactly, equivalent to the "global" procedure used in earlier versions of PAUP); and (3) tree bisection-reconnection (TBR, a new procedure). </value>
				</comment>
			</attributes>
		</parameter> -->

   
<!--  "multrees=no";\\n 
		<parameter type="Excl" ismandatory="1">
			<name>set_multrees</name>
			<attributes>
				<prompt>Save all optimal trees? (multrees)</prompt>
				<paramfile>paup_block.nex</paramfile>
				<group>20</group>
				<precond>
					<language>perl</language>
					<code>!$paupblock</code>
				</precond>
				<vlist>
					<value>yes</value>
					<label>yes</label>
					<value>no</value>
					<label>no</label>
				</vlist>
				<vdef>
					<value>no</value>
				</vdef>
				<comment>
				<value>use multrees = no</value>
				</comment>
			</attributes>
		</parameter> -->
		
<!--   "hsearch status=no";\\n 
		<parameter type="String" ishidden="1">
			<name>setup_hidden5</name>
			<attributes>
				<paramfile>paup_block.nex</paramfile>
				<group>17</group>
				<precond>
					<language>perl</language>
					<code>!$paupblock</code>
				</precond>
				<format>
					<language>perl</language>
					<code><![CDATA[ <<"EOT"
hsearch status=no start=1 swap=$paup_branchalg multrees=$set_multrees;  \\n
EOT
					]]></code>
				</format>
			</attributes>
		</parameter> -->
		
	<!-- Rearrangement limit .
		<parameter type="Integer" >
			<name>set_rearrlimit</name>
			<attributes>
				<prompt>Specify a rearrangement limit</prompt>
				<comment>
					<value>The search will be limited to the specified number of tree rearrangements (branch swaps).</value>
				</comment>
			</attributes>
		</parameter>
		-->
		<!--  
		<parameter type="String" ishidden="1">
			<name>set_rearrlimitb</name>
			<attributes>
				<paramfile>paup_block.nex</paramfile>
				<precond>
					<language>perl</language>
					<code>defined $set_rearrlimit</code>
				</precond>
				<group>21</group>
				<format>
					<language>perl</language>
					<code><![CDATA[ <<"EOT"
 rearrlimit=$set_rearrlimit \\n
EOT
					]]></code>
				</format>
			</attributes>
		</parameter>
		-->
			
<!--add the ability to impose conmstraint tree, at users request; this requires enforce, and constraints commands be added 

ENFORCE = YES|NO
ENFORCE requests that topological constraints be enforced; i.e., trees
that are not compatible with the constraint tree are not evaluated. If
the CONSTRAINTS option (see below) is not used to specify a
constraint tree, the "current" constraint tree is used.

CONSTRAINTS = constraint-tree-name
The specified constraint tree, which must have been defined in a
previous CONSTRAINTS command, becomes the current constraint
tree. You must also specify ENFORCE if you want to search under
constraints. Use the CONSTRAINTS command to define a constraint tree.

	
CONSTRAINTS constraint-name [(BACKBONE)|(MONOPHYLY)|
(CONVEXITY)]=tree-specification|taxpartition-name;
The tree-specification must follow the tree format described on page 25. The
taxpartition-name must follow the format described under TAXPARTITION on
page 24.
Example 1
The following example assumes that there are 10 taxa, and taxa 2, 3, 5, 7 and
9 are a monophyletic assemblage.
constraints lagomorph (monophyly) =
(1,4,6,8,10,(2,3,5,7,9));
Example 2
Because monophyly is the default keyword indicating the constraint type
and taxa 1, 4, 6, 10 connect directly to the root node, the above example
could also be written:
constraints lagomorph = ((2,3,5,7,9));
	
Use the LOADCONSTR command to load constraints from treefile.
Syntax
LOADCONSTR [options];
Available options
? FILE = tree-file-name
? *APPEND = YES|NO
? *ASBACKBONE = YES|NO
*Option is nonpersistent
Commands used in the PAUP Block Command Reference
82 February, 2002 PAUP* 4.0 beta documentation
Description of options
FILE = tree-file-name
Use FILE to specify the tree-file-name containing constraint trees.
APPEND = YES|NO
If APPEND = YES, then the constraints contained in the input file are
added to any constraints already in memory.
ASBACKBONE = YES|NO
Use ASBACKBONE to load the trees as backbone constraints.
Backbone constraint trees should contain only a subset of the taxa
currently in memory.
LOG	 -->
		
<!-- Time limit
		<parameter type="Integer" >
			<name>set_timelimit</name>
			<attributes>
				<prompt>Specify a time limit (in seconds)</prompt>
				<comment>
					<value>The search will be limited to the specified number of tree rearrangements (branch swaps).</value>
				</comment>
			</attributes>
		</parameter>
		-->
		<!-- JUST COMMENTING OUT THIS PARAMETER
		<parameter type="String" ishidden="1">
			<name>set_timelimitb</name>
			<attributes>
				<paramfile>paup_block.nex</paramfile>
				<precond>
					<language>perl</language>
					<code>defined $set_timelimit</code>
				</precond>
				<group>22</group>
				<format>
					<language>perl</language>
					<code><![CDATA[ <<"EOT"
 timelimit=$set_timelimit \\n
EOT
					]]></code>
				</format>
			</attributes>
		</parameter>
		-->
<!-- 	Reconnection Limit.	
		<parameter type="Integer" >
			<name>set_reconlimit</name>
			<attributes>
				<prompt>Specify a reconnection limit for PAUP</prompt>
				<comment>
<value>The reconnection limit option limits the scope of SPR and TBR rearrangements. If an integer-value is specified, the value corresponds to the sum of the number
of nodes between each reconnected branch and the nodes incident to the branch that was cut for pruning (SPR) or bisection (TBR).  A rearrangement limit of 1 corresponds
to nearest-neighbor interchanges. No entry sets the value to infinity.</value>
				</comment>
			</attributes>
		</parameter>
		COMMENTING OUT THE Reconnection Limit. -->
		<!-- JUST COMMENTING OUT
		<parameter type="String" ishidden="1">
			<name>set_reconlimitb</name>
			<attributes>
				<paramfile>paup_block.nex</paramfile>
				<precond>
					<language>perl</language>
					<code>defined $set_reconlimit</code>
				</precond>
				<group>23</group>
				<format>
					<language>perl</language>
					<code><![CDATA[ <<"EOT"
 reconlimit=$set_reconlimit 
EOT
					]]></code>
				</format>
			</attributes>
		</parameter>
		-->
		
<!--  this closes the  line, and adds a carriage return 		
<parameter type="String" ishidden="1" ismandatory="1">
			<name>end_limits</name>
			<attributes>
				<paramfile>paup_block.nex</paramfile>
				<group>24</group>
				<format>
					<language>perl</language>
					<code><![CDATA[ <<"EOT"
; \\n
EOT
					]]></code>
				</format>
			</attributes>
		</parameter>
		
 Maximum number of trees saved (maxtrees). 
		<parameter type="Integer" ismandatory="1">
			<name>set_maxtrees</name>
			<attributes>
				<prompt>Maximum number of trees saved (maxtrees)</prompt>
				<paramfile>paup_block.nex</paramfile>
				<group>25</group>
				<precond>
					<language>perl</language>
					<code>$set_multrees eq "yes"</code>
				</precond>
				<format>
					<language>perl</language>
					<code><![CDATA[ <<"EOT"
"set maxtrees=$value";\\n 
EOT
					]]></code>
				</format>
			</attributes>
		</parameter>   
		
 Automatically increase the number of trees in memory. + no yes	
		<parameter type="Excl" ismandatory="1">
			<name>set_autoincrease</name>
			<attributes>
				<prompt>Automatically increase the number of trees in memory </prompt>
				<paramfile>paup_block.nex</paramfile>
				<group>26</group>
				<precond>
					<language>perl</language>
					<code>$set_multrees eq "yes"</code>
				</precond>
				<format>
					<language>perl</language>
					<code><![CDATA[ <<"EOT"
"set Increase=$value";\\n 
EOT
					]]></code>
				</format>
				<vlist>
					<value>auto</value>
					<label>auto</label>
					<value>no</value>
					<label>no</label>
				</vlist>
				<vdef>
					<value>no</value>
				</vdef>
			</attributes>
		</parameter>    
	
		Auto-increase amount (AutoInc).
		<parameter type="Integer" ismandatory="1">
			<name>set_increaseval</name>
			<attributes>
			<prompt>Auto-increase amount (AutoInc).</prompt>
				<paramfile>paup_block.nex</paramfile>
				<group>27</group>
				<precond>
					<language>perl</language>
					<code>$set_autoincrease eq "auto"</code>
				</precond>
				<format>
					<language>perl</language>
					<code><![CDATA[ <<"EOT"
"set AutoInc=$value";\\n 
EOT
					]]></code>
				</format>
			</attributes>
		</parameter>
			
			 	Set Outgroup
		<parameter type="Switch" >
			<name>set_outgroup</name>
			<attributes>
				<prompt>Specify an Outgroup</prompt>
				<vdef>
					<value>0</value>
				</vdef>
			</attributes>
		</parameter>

		<parameter type="String" ishidden="0">
			<name>set_outgroupb</name>
			<attributes>
			<prompt>Enter Your Outgroup Here</prompt>
				<paramfile>paup_block.nex</paramfile>
				<precond>
					<language>perl</language>
					<code>$set_outgroup</code>
				</precond>
				<group>28</group>
				<format>
					<language>perl</language>
					<code><![CDATA[ <<"EOT"
"outgroup $set_outgroupb";\\n 
EOT
					]]></code>
				</format>
			</attributes>
		</parameter>		
-->
	<!--  	</parameters>
	</paragraph>
</parameter> -->


<!-- return all results files. -->		
		<parameter type="Results">
			<name>result_files</name>
			<attributes>
				<filenames>* </filenames>
			</attributes>
		</parameter>
		
<!-- return specific run files.		
		<parameter type="Results">
			<name>best_tree_file</name>
			<attributes>
				<filenames>paup.best.tre</filenames>
			</attributes>
		</parameter>
		
		<parameter type="Results">
			<name>run_data</name>
			<attributes>
				<filenames>*.txt</filenames>
			</attributes>
		</parameter>
		
		<parameter type="Results">
			<name>run_logs</name>
			<attributes>
				<filenames>*.nex</filenames>
			</attributes>
		</parameter>
		
		<parameter type="Results">
			<name>all_commandline</name>
			<attributes>
				<filenames>COMMANDLINE</filenames>
			</attributes>
		</parameter>
	-->
	</parameters>
</pise>
