# Name of your program
package "RNAeval" # don't use package if you're using automake
purpose "Determine the free energy of a (consensus) secondary structure for (an alignment of) RNA sequence(s)"
usage "RNAeval [OPTIONS] [<input0>] [<input1>]..."

# Version of your program
#version "2.0"   # don't use version if you're using automake


# command line options passed to gengetopt
args "--file-name=RNAeval_cmdl --include-getopt --default-optional --unamed-opts --func-name=RNAeval_cmdline_parser --arg-struct-name=RNAeval_args_info"


description "Evaluates the free energy of a particular (consensus) secondary structure for\
 an (an alignment of) RNA molecule(s). The energy unit is kcal/mol and contains a covariance\
 pseudo-energy term for multiple sequence alignments (--msa option) and corresponding consensus\
 structures.\nThe program will continue to read new sequences and structures until a line\
 consisting of the single character '@' or an end of file condition is encountered.\nIf\
 the input sequence or structure contains the separator character '&' the program calculates\
 the energy of the co-folding of two RNA strands, where the '&' marks the boundary between\
 the two strands.\n"

# Options

option  "verbose" v
"Be verbose and print out energy contribution of each loop in the structure.\n"
details="Lower the log level setting such that even INFO messages are passed through.\n\n"
flag
off


section "I/O Options"
sectiondesc="Command line options for input and output (pre-)processing\n\n"

option  "infile"  i
"Read a file instead of reading from stdin.\n"
details="The default behavior of RNAeval is to read input from stdin or the file(s) that follow(s)\
 the RNAeval command. Using this parameter the user can specify input file names where data\
 is read from. Note, that any additional files supplied to RNAeval are still processed as well.\n\n"
string
typestr="filename"
multiple
optional

option  "msa"   a
"Input is multiple sequence alignment in Stockholm 1.0 format.\n"
details="Using this flag indicates that the input is a multiple sequence alignment (MSA)\
 instead of (a) single sequence(s). Note, that only STOCKHOLM format allows one to specify\
 a consensus structure. Therefore, this is the only supported MSA format for now!\n\n"
flag
off

option  "mis"             -
"Output \"most informative sequence\" instead of simple consensus: For each column of the alignment output\
 the set of nucleotides with frequency greater than average in IUPAC notation.\n\n"
flag
dependon="msa"
off

option  "jobs"  j
"Split batch input into jobs and start processing in parallel using multiple threads. A value of 0\
 indicates to use as many parallel threads as computation cores are available.\n"
details="Default processing of input data is performed in a serial fashion, i.e. one sequence at\
 a time. Using this switch, a user can instead start the computation for many sequences in the\
 input in parallel. RNAeval will create as many parallel computation slots as specified and\
 assigns input sequences of the input file(s) to the available slots. Note, that this increases\
 memory consumption since input alignments have to be kept in memory until an empty compute slot\
 is available and each running job requires its own dynamic programming matrices.\n\n"
int
default="0"
typestr="number"
argoptional
optional

option  "unordered"  -
"Do not try to keep output in order with input while parallel processing is in place.\n"
details="When parallel input processing (--jobs flag) is enabled, the order in which input\
 is processed depends on the host machines job scheduler. Therefore, any output to stdout\
 or files generated by this program will most likely not follow the order of the corresponding\
 input data set. The default of RNAeval is to use a specialized data structure to still keep\
 the results output in order with the input data. However, this comes with a trade-off in terms\
 of memory consumption, since all output must be kept in memory for as long as no chunks\
 of consecutive, ordered output are available. By setting this flag, RNAeval will not buffer\
 individual results but print them as soon as they have been computated.\n\n"
flag
off
dependon="jobs"
hidden

option  "noconv"  -
"Do not automatically substitute nucleotide \"T\" with \"U\".\n\n"
flag
off

option  "auto-id"  -
"Automatically generate an ID for each sequence.\n"
details="The default mode of RNAeval is to automatically determine an ID from the input sequence\
 data if the input file format allows to do that. Sequence IDs are usually given in the FASTA\
 header of input sequences. If this flag is active, RNAeval ignores any IDs retrieved from the\
 input and automatically generates an ID for each sequence. This ID consists of a prefix and an\
 increasing number. This flag can also be used to add a FASTA header to the output even if\
 the input has none.\n\n"
flag
off

option  "id-prefix" -
"Prefix for automatically generated IDs (as used in output file names).\n"
details="If this parameter is set, each sequence will be prefixed with the\
 provided string. Note: Setting this parameter implies --auto-id.\n\n"
string
typestr="STRING"
default="sequence"
optional

option  "id-delim" -
"Change the delimiter between prefix and increasing number for automatically generated IDs (as used in output file names).\n"
details="This parameter can be used to change the default delimiter '_' between\
 the prefix string and the increasing number for automatically generated ID.\n\n"
string
typestr="CHAR"
default="_"
optional
hidden

option  "id-digits"  -
"Specify the number of digits of the counter in automatically generated alignment IDs.\n"
details="When alignments IDs are automatically generated, they receive an increasing number, starting\
 with 1. This number will always be left-padded by leading zeros, such that the number takes up a\
 certain width. Using this parameter, the width can be specified to the users need. We allow\
 numbers in the range [1:18]. This option implies --auto-id.\n\n"
int
default="4"
optional
hidden

option  "id-start"  -
"Specify the first number in automatically generated IDs.\n"
details="When sequence IDs are automatically generated, they receive an increasing number,\
 usually starting with 1. Using this parameter, the first number can be specified to the users\
 requirements. Note: negative numbers are not allowed.\nNote: Setting this parameter implies\
 to ignore any IDs retrieved from the input data, i.e. it activates the --auto-id flag.\n\n"
long
default="1"
optional
hidden


option  "log-level" -
"Set log level threshold.\n"
details="By default, any log messages are filtered such that only warnings (level 2) or errors (level 3)\
 are printed. This setting allows for specifying the log level threshold, where higher values result in\
 fewer information. Log-level 5 turns off all messages, even errors and other critical information.\n\n"
int
typestr="level"
default="2"
hidden


option  "log-file" -
"Print log messages to a file instead of stderr.\n"
string
typestr="filename"
default="RNAeval.log"
argoptional
hidden


option  "log-time" -
"Include time stamp in log messages.\n\n"
flag
off
hidden


option  "log-call" -
"Include file and line of log calling function.\n\n"
flag
off
hidden


section "Algorithms"
sectiondesc="Select additional algorithmic details which should be included in the calculations.\n\n"

option  "circ"    c
"Assume a circular (instead of linear) RNA molecule.\n\n"
flag
off

option  "gquad" g
"Incoorporate G-Quadruplex formation into the structure prediction algorithm.\n\n"
flag
off


section "Structure Constraints"
sectiondesc="Command line options to interact with the structure constraints feature of this program\n\n"

option  "shape" -
"Use SHAPE reactivity data to guide structure predictions.\n\n"
string
typestr="filename"
optional

option  "shapeMethod" -
"Select SHAPE reactivity data incorporation strategy.\n\n"
details="The following methods can be used to convert SHAPE reactivities into pseudo energy contributions.\n\n\
 'D': Convert by using the linear equation according to Deigan et al 2009. Derived pseudo energy terms\
 will be applied for every nucleotide involved in a stacked pair. This method is recognized by a capital\
 'D' in the provided parameter, i.e.: --shapeMethod=\"D\" is the default setting. The slope 'm' and the\
 intercept 'b' can be set to a non-default value if necessary, otherwise m=1.8 and b=-0.6. To alter these\
 parameters, e.g. m=1.9 and b=-0.7, use a parameter string like this: --shapeMethod=\"Dm1.9b-0.7\". You\
 may also provide only one of the two parameters like: --shapeMethod=\"Dm1.9\" or --shapeMethod=\"Db-0.7\".\n\n\
 'Z': Convert SHAPE reactivities to pseudo energies according to Zarringhalam et al 2012.\
 SHAPE reactivities will be converted to pairing probabilities by using linear mapping.\
 Aberration from the observed pairing probabilities will be penalized during the folding recursion.\
 The magnitude of the penalties can affected by adjusting the factor beta\
 (e.g. --shapeMethod=\"Zb0.8\").\n\n\
 'W': Apply a given vector of perturbation energies to unpaired nucleotides according to Washietl et al 2012.\
Perturbation vectors can be calculated by using RNApvmin.\n\n"
string
typestr="method"
dependon="shape"
default="D"
optional
hidden

option  "shapeConversion" -
"Select method for SHAPE reactivity conversion.\n\n"
details="This parameter is useful when dealing with the SHAPE incorporation according to Zarringhalam et al. \
The following methods can be used to convert SHAPE reactivities into the probability for a certain nucleotide to be unpaired.\n
'M': Use linear mapping according to Zarringhalam et al.
'C': Use a cutoff-approach to divide into paired and unpaired nucleotides (e.g. \"C0.25\")
'S': Skip the normalizing step since the input data already represents probabilities for being unpaired rather than raw reactivity values
'L': Use a linear model to convert the reactivity into a probability for being unpaired (e.g. \"Ls0.68i0.2\" to use a slope of 0.68 and an intercept of 0.2)
'O': Use a linear model to convert the log of the reactivity into a probability for being unpaired (e.g. \"Os1.6i-2.29\" to use a slope of 1.6 and an intercept of -2.29)\n\n"
string
typestr="method"
default="O"
optional


section "Energy Parameters"
sectiondesc="Energy parameter sets can be adapted or loaded from user-provided input files\n\n"

option  "temp"  T
"Rescale energy parameters to a temperature of temp C. Default is 37C.\n\n"
double
default="37.0"
optional

option  "paramFile" P
"Read energy parameters from paramfile, instead of using the default parameter set.\n"
details="Different sets of energy parameters for RNA and DNA should accompany your distribution.\nSee the\
 RNAlib documentation for details on the file format. The placeholder file name 'DNA' can be used\
 to load DNA parameters without the need to actually specify any input file.\n\n"
string
typestr="paramfile"
optional

option  "noTetra" 4
"Do not include special tabulated stabilizing energies for tri-, tetra- and hexaloop hairpins.\n"
details="Mostly for testing.\n\n"
flag
off
hidden

option  "salt" -
"Set salt concentration in molar (M). Default is 1.021M.\n\n"
double
optional


section "Model Details"
sectiondesc="Tweak the energy model and pairing rules additionally using the following parameters\n\n"

option  "dangles" d
"How to treat \"dangling end\" energies for bases adjacent to helices in free ends and multi-loops.\n"
details="\nWith -d1 only unpaired bases can participate in at most one dangling end. With -d2 this\
 check is ignored, dangling energies will be added for the bases adjacent to a helix on both sides in\
 any case; this is the default for mfe and partition function folding.\nThe option -d0 ignores\
 dangling ends altogether (mostly for debugging).\nWith -d3 mfe folding will allow coaxial stacking\
 of adjacent helices in multi-loops. At the moment the implementation will not allow coaxial stacking\
 of the two enclosed pairs in a loop of degree 3.\n\n"
int
default="2"
optional

option  "nsp" -
"Allow other pairs in addition to the usual AU,GC,and GU pairs.\n"
details="Its argument is a comma separated list of additionally allowed pairs. If the\
 first character is a \"-\" then AB will imply that AB and BA are allowed pairs, e.g.\
 --nsp=\"-GA\"  will allow GA and AG pairs. Nonstandard pairs are given 0 stacking\
 energy.\n\n"
string
optional
hidden

option  "energyModel" -
"Set energy model.\n"
details="Rarely used option to fold sequences from the artificial ABCD... alphabet, where\
 A pairs B, C-D etc.  Use the energy parameters for GC (--energyModel 1) or AU (--energyModel 2) pairs.\n\n"
int
optional
hidden

option  "logML" -
"Recalculate energies of structures using a logarithmic energy function for multi-loops before output.\n"
details="This option does not effect structure generation, only the energies that are printed out.\
 Since logML lowers energies somewhat, some structures may be missing.\n\n"
flag
off

option  "cfactor"         -
"Set the weight of the covariance term in the energy function\n\n"
default="1.0"
double
dependon="msa"
optional

option  "nfactor"         -
"Set the penalty for non-compatible sequences in the covariance term of the energy function\n\n"
default="1.0"
double
dependon="msa"
optional

option  "ribosum_file"    R
"use specified Ribosum Matrix instead of normal energy model.\n"
details="Matrixes to use should be 6x6 matrices, the order of the terms is\
 'AU', 'CG', 'GC', 'GU', 'UA', 'UG'.\n\n"
string
typestr="ribosumfile"
dependon="msa"
optional

option  "ribosum_scoring" r
"use ribosum scoring matrix.\n"
details="The matrix is chosen according to the minimal and maximal pairwise\
 identities of the sequences in the file.\n\n"
flag
dependon="msa"
off

option  "old" -
"use old energy evaluation, treating gaps as characters.\n\n"
flag
dependon="msa"
off

option  "helical-rise"  -
"Set the helical rise of the helix in units of Angstrom.\n"
details="Use with caution! This value will be re-set automatically to 3.4 in case DNA\
 parameters are loaded via -P DNA and no further value is provided.\n\n"
float
optional
default="2.8"
hidden

option  "backbone-length"  -
"Set the average backbone length for looped regions in units of Angstrom.\n"
details="Use with caution! This value will be re-set automatically to 6.76 in case DNA\
 parameters are loaded via -P DNA and no further value is provided.\n\n"
float
optional
default="6.0"
hidden


text    "\nIf in doubt our program is right, nature is at fault.\nComments should be sent to\
 rna@tbi.univie.ac.at.\n\n"
