docs: def writeSeqsToFiles(seqArray, seqFNPrefix, offsetFN, uniformLength):    
      '''
      This function takes a seqArray and saves the values to a memmap file that can be accessed for multi-processing.
      Additionally, it saves some offset indices in a numpy file for quicker string access.
      @param seqArray - the list of '$'-terminated strings to be saved
      @param fnPrefix - the prefix for the temporary files, creates a prefix+'.seqs.npy' and prefix+'.offsets.npy' file
      '''
      if uniformLength:
          #first, store the uniform size in our offsets file
          offsets = np.lib.format.open_memmap(offsetFN, 'w+', '<u8', (1,))
          offsets[0] = uniformLength
          
          #define a constant character map for now
          d = {'$':0, 'A':1, 'C':2, 'G':3, 'N':4, 'T':5}
          dArr = np.add(np.zeros(dtype='<u1', shape=(256,)), len(d.keys()))
          for c in d.keys():
              dArr[ord(c)] = d[c]
          
          seqLen = uniformLength
          b = np.reshape(seqArray, (-1, seqLen))
          numSeqs = b.shape[0]
          t = b.transpose()
          
          for i in xrange(0, seqLen):
              #create a file for this column
              seqs = np.lib.format.open_memmap(seqFNPrefix+'.'+str(i)+'.npy', 'w+', '<u1', (numSeqs,))
              chunkSize = 1000000
              j = 0
              while chunkSize*j < numSeqs:
                  seqs[chunkSize*j:chunkSize*(j+1)] = dArr[t[-i-1][chunkSize*j:chunkSize*(j+1)]]
                  j += 1
              del seqs
      else:
          #count how many terminal '$' exist, 36 = '$'
          lenSums = np.add(1, np.where(seqArray == 36)[0])
          numSeqs = lenSums.shape[0]
          totalLen = lenSums[-1]
          
          #track the total length thus far and open the files we plan to fill in
          seqFN = seqFNPrefix+'.npy'
          seqs = np.lib.format.open_memmap(seqFN, 'w+', '<u1', (totalLen,))
          offsets = np.lib.format.open_memmap(offsetFN, 'w+', '<u8', (numSeqs+1,))
          offsets[1:] = lenSums
          
          #define a constant character map for now
          d = {'$':0, 'A':1, 'C':2, 'G':3, 'N':4, 'T':5}
          dArr = np.add(np.zeros(dtype='<u1', shape=(256,)), len(d.keys()))
          for c in d.keys():
              dArr[ord(c)] = d[c]
          
          #copy the values
          chunkSize = 1000000
          i = 0
          while chunkSize*i < seqArray.shape[0]:
              seqs[chunkSize*i:chunkSize*(i+1)] = dArr[seqArray[chunkSize*i:chunkSize*(i+1)]]
              i += 1
          
          #clear memory
          del lenSums
          del seqs
          del offsets
      
      #return the two filenames
      return (seqFNPrefix, offsetFN)