# Name of your program
package "RNALfold" # don't use package if you're using automake
purpose "calculate locally stable secondary structures of RNAs"
#usage "RNALfold [options]\n"

# 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=RNALfold_cmdl --include-getopt --default-optional --func-name=RNALfold_cmdline_parser --arg-struct-name=RNALfold_args_info"


description "Compute locally stable RNA secondary structure with a maximal base pair\
 span. For a sequence of length n and a base pair span of L the algorithm uses only\
 O(n+L*L) memory and O(n*L*L) CPU time. Thus it is practical to \"scan\" very large\
 genomes for short RNA structures.\nOutput consists of a list of secondary structure\
 components of size <= L, one entry per line. Each output line contains the predicted\
 local structure its energy in kcal/mol and the starting position of the local structure.\n"

# Options

option  "verbose" v
"Be verbose.\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 RNALfold is to read input from stdin. Using this parameter\
 the user can specify an input file name where data is read from.\n\n"
string
typestr="filename"
optional

option  "outfile" o
"Print output to file instead of stdout.\n"
details="This option may be used to write all output to output files rather than printing\
 to stdout. The number of output files created for batch input (multiple sequences) depends\
 on three conditions: (i) In case an optional filename is given as parameter argument, a\
 single file with the specified filename will be written into. If the optional argument\
 is omitted, (ii) FASTA input or an active --auto-id switch will write to multiple files\
 that follow the naming scheme \"prefix.lfold\". Here, \"prefix\" is taken from the sequence\
 id as specified in the FASTA header. Lastly, (iii) single-line sequence input without\
 FASTA header will be written to a single file \"RNALfold_output.lfold\". In case an output\
 file already exists, any output of the program will be appended to it.\nSince the filename\
 argument is optional, it must immediately follow the short option flag\
 to not be mistaken as new parameter to the program. For instance \'-ornafold.out\' will\
 write to a file \"rnafold.out\".\nNote: Any special characters in the filename will be\
 replaced by the filename delimiter, hence there is no way to pass an entire directory path\
 through this option yet. (See also the \"--filename-delim\" parameter)\n\n"
string
typestr="filename"
argoptional
optional

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 RNALfold 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, RNALfold 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. Hence, the output files will obey the following naming\
 scheme: \"prefix_xxxx.lfold\" where xxxx is the sequence number. 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  "filename-delim" -
"Change the delimiting character used in sanitized filenames.\n"
details="This parameter can be used to change the delimiting character used while\
 sanitizing filenames, i.e. replacing invalid characters. Note, that the default\
 delimiter ALWAYS is the first character of the \"ID delimiter\" as supplied through\
 the --id-delim option. If the delimiter is a whitespace character or empty, invalid\
 characters will be simply removed rather than substituted.\
 Currently, we regard the following characters as illegal for use in filenames:\
 backslash '\', slash '/', question mark '?', percent sign '%', asterisk '*', colon ':',\
 pipe symbol '|', double quote '\"', triangular brackets '<' and '>'.\n\n"
string
typestr="CHAR"
default="ID-delimiter"
optional
hidden

option  "filename-full" -
"Use full FASTA header to create filenames.\n"
details="This parameter can be used to deactivate the default behavior of limiting\
 output filenames to the first word of the sequence ID. Consider the following example:\
 An input with FASTA header '>NM_0001 Homo Sapiens some gene' usually produces output\
 files with the prefix \"NM_0001\" without the additional data available in the FASTA\
 header, e.g. \"NM_0001_ss.ps\" for secondary structure plots. With this flag set, no\
 truncation of the output filenames is done, i.e. output filenames receive the full\
 FASTA header data as prefixes. Note, however, that invalid characters (such as whitespace)\
 will be substituted by a delimiting character or simply removed, (see also the parameter\
 option --filename-delim).\n\n"
flag
off
hidden


section "Algorithms"
sectiondesc="Select additional algorithms which should be included in the calculations.\nThe Minimum free energy\
 (MFE) and a structure representative are calculated in any case.\n\n"

option  "span"  L
"Set the maximum distance between any two pairing nucleotides.\n"
details="This option specifies the window length L and therefore the upper limit for the\
 distance between the bases i and j of any pair (i, j), i.e. (j - i + 1) <= L.\n\n"
int
default="150"
optional

option  "zscore"  z
"Limit the output to predictions with a Z-score below a threshold.\n"
details="This option activates z-score regression using a trained SVM. Any predicted structure that\
 exceeds the specified threshold will be ommited from the output.\nSince the Z-score threshold is\
 given as a negative number, it must immediately preceed the short option to not be mistaken as\
 a separate argument, e.g. -z-2.9 sets the threshold to a value of -2.9\n\n"
double
default="-2"
argoptional
optional

option  "zscore-pre-filter"  -
"Apply the z-score filtering in the forward recursions.\n"
details="The default mode of z-score filtering considers the entire structure space to\
 decide whether or not a locally optimal structure at any position i is reported or not.\
 When using this post-filtering step, however, alternative locally optimal structures
 starting at i with higher energy but lower z-score can be easily missed. The pre-filter
 option restricts the structure space already in the forward recursions, such that
 only optimal solution among those candidates that satisfy the z-score threshold are considered.\
 Therefore, good results according to the z-score threshold criterion are less likely to\
 be superseded by results with better energy but worse z-score. Note, that activating\
 this switch results in higher computation time which scales linear in the window length.\n\n"
flag
dependon="zscore"
off

option  "zscore-report-subsumed"  -
"Report subsumed structures if their z-score is less than that of the enclosing structure.\n"
details="In default mode, RNALfold only reports locally optimal structures if they\
 are no constituents of another, larger structure with less free energy. In z-score mode,\
 however, such a larger structure may have a higher z-score, thus may be less informative\
 than the smaller substructure. Using this switch activates reporting both, the smaller\
 and the larger structure if the z-score of the smaller is lower than that of the larger.\n\n"
flag
dependon="zscore"
off

option  "backtrack-global"   b
"Backtrack a global MFE structure.\n"
details="Instead of just reporting the locally stable secondary structure\
 a global MFE structure can be constructed that only consists of locally\
 optimal substructures. This switch activates a post-processing step that\
 takes the locally optimal structures to generate the global MFE structure\
 which constitutes the MFE value reported in the last line. The respective\
 global MFE structure is printed just after the inut sequence part on the\
 last line, preceding the global MFE score.\nNote, that this option implies\
 -o/--outfile since the locally optimal structures must be read after the\
 regular prediction step! Also note, that using this option in combination\
 with -z/--zscore implies --zscore-pre-filter to ensure proper construction\
 of the global MFE structure!\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
hidden

option  "commands"   -
"Read additional commands from file\n"
details="Commands include hard and soft constraints, but also structure motifs in hairpin and interior\
 loops that need to be treeted differently. Furthermore, commands can be set for unstructured and structured\
 domains.\n\n"
string
typestr="filename"
optional
hidden


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

option  "modifications" m
"Allow for modified bases within the RNA sequence string.\n"
details="Treat modified bases within the RNA sequence differently, i.e. use corresponding\
 energy corrections and/or pairing partner rules if available. For that, the modified bases\
 in the input sequence must be marked by their corresponding one-letter code. If no additional\
 arguments are supplied, all available corrections are performed. Otherwise, the user may\
 limit the modifications to a particular subset of modifications, resp. one-letter codes,\
 e.g. -mP6 will only correct for pseudouridine and m6A bases.\n\
 Currently supported one-letter codes and energy corrections are:\n\n\
 '7': 7-deaza-adenonsine (7DA)\n\n\
 'I': Inosine\n\n\
 '6': N6-methyladenosine (m6A)\n\n\
 'P': Pseudouridine\n\n\
 '9': Purine (a.k.a. nebularine)\n\n\
 'D': Dihydrouridine\n\n"
string
argoptional
default="7I6P9D"

option  "mod-file"  -
"Use additional modified base data from JSON file.\n\n"
string
multiple
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 (-p).\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 interior pairs in a loop of degree 3 and works only for mfe folding.\n\nNote that with\
 -d1 and -d3 only the MFE computations will be using this setting while partition function uses\
 -d2 setting, i.e. dangling ends will be treated differently.\n\n"
int
default="2"
optional

option  "noLP"  -
"Produce structures without lonely pairs (helices of length 1).\n"
details="For partition function folding this only disallows pairs that can only occur isolated. Other\
 pairs may still occasionally occur as helices of length 1.\n\n"
flag
off

option  "noGU"  -
"Do not allow GU pairs.\n\n"
flag
off
hidden

option  "noClosingGU" -
"Do not allow GU pairs at the end of helices.\n\n"
flag
off
hidden

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" e
"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 (-e 1) or AU (-e 2) pairs.\n\n"
int
optional
hidden

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"
