A partition function algorithm for nucleic acid secondary structure including pseudoknots | Synapse