docs: def encodeRNAStructure(seq_vec, maxlen=None, seq_align="start",
                         W=240, L=160, U=1,
                         tmpdir="/tmp/RNAplfold/"):
      """Compute RNA secondary structure with RNAplfold implemented in
      Kazan et al 2010, [doi](https://doi.org/10.1371/journal.pcbi.1000832).
  
      # Note
          Secondary structure is represented as the probability
          to be in the following states:
          - `["Pairedness", "Hairpin loop", "Internal loop", "Multi loop", "External region"]`
          See Kazan et al 2010, [doi](https://doi.org/10.1371/journal.pcbi.1000832)
          for more information.
  
  
      # Arguments
           seq_vec: list of DNA/RNA sequences
           maxlen: Maximum sequence length. See `concise.preprocessing.pad_sequences` for more detail
           seq_align: How to align the sequences of variable lengths. See `concise.preprocessing.pad_sequences` for more detail
           W: Int; span - window length
           L: Int; maxiumm span
           U: Int; size of unpaired region
           tmpdir: Where to store the intermediary files of RNAplfold.
  
      # Note
          Recommended parameters:
  
          - for human, mouse use W, L, u : 240, 160, 1
          - for fly, yeast   use W, L, u :  80,  40, 1
  
      # Returns
          np.ndarray of shape `(len(seq_vec), maxlen, 5)`
      """
      # extend the tmpdir with uuid string to allow for parallel execution
      tmpdir = tmpdir + "/" + str(uuid4()) + "/"
  
      if not isinstance(seq_vec, list):
          seq_vec = seq_vec.tolist()
      if not os.path.exists(tmpdir):
          os.makedirs(tmpdir)
  
      fasta_path = tmpdir + "/input.fasta"
      write_fasta(fasta_path, seq_vec)
      run_RNAplfold(fasta_path, tmpdir, W=W, L=L, U=U)
      # 1. split the fasta into pieces
      # 2. run_RNAplfold for each of them
      # 3. Read the results
      return read_RNAplfold(tmpdir, maxlen, seq_align=seq_align, pad_with="E")