nodes: 0, module; 1, function_definition; 2, function_name:createMSBWTFromBam; 3, parameters; 4, block; 5, identifier:bamFNs; 6, identifier:outputDir; 7, identifier:numProcs; 8, identifier:areUniform; 9, identifier:logger; 10, expression_statement; 11, comment:#generate the files we will reference and clear out the in memory array before making the BWT; 12, expression_statement; 13, expression_statement; 14, expression_statement; 15, expression_statement; 16, expression_statement; 17, expression_statement; 18, expression_statement; 19, expression_statement; 20, string; 21, call; 22, assignment; 23, assignment; 24, assignment; 25, assignment; 26, call; 27, call; 28, call; 29, string_content:This function takes a fasta filename and creates the BWT using the technique from Cox and Bauer
      @param bamFNs - a list of BAM filenames to extract sequences from, READS MUST BE SORTED BY NAME
      @param outputDir - the directory for all of the bwt related data
      @param numProcs - the number of processes it's allowed to use
      @areUniform - true if all the sequences passed into the function are of equal length; 30, attribute; 31, argument_list; 32, identifier:seqFN; 33, binary_operator:outputDir+'/seqs.npy'; 34, identifier:offsetFN; 35, binary_operator:outputDir+'/offsets.npy'; 36, identifier:abtFN; 37, binary_operator:outputDir+'/about.npy'; 38, identifier:bwtFN; 39, binary_operator:outputDir+'/msbwt.npy'; 40, attribute; 41, argument_list; 42, identifier:preprocessBams; 43, argument_list; 44, attribute; 45, argument_list; 46, identifier:logger; 47, identifier:info; 48, string; 49, identifier:outputDir; 50, string; 51, identifier:outputDir; 52, string; 53, identifier:outputDir; 54, string; 55, identifier:outputDir; 56, string; 57, identifier:MSBWTGen; 58, identifier:clearAuxiliaryData; 59, identifier:outputDir; 60, identifier:bamFNs; 61, identifier:seqFN; 62, identifier:offsetFN; 63, identifier:abtFN; 64, identifier:areUniform; 65, identifier:logger; 66, identifier:MSBWTGen; 67, identifier:createFromSeqs; 68, identifier:seqFN; 69, identifier:offsetFN; 70, identifier:bwtFN; 71, identifier:numProcs; 72, identifier:areUniform; 73, identifier:logger; 74, string_content:Saving sorted sequences...; 75, string_content:/seqs.npy; 76, string_content:/offsets.npy; 77, string_content:/about.npy; 78, string_content:/msbwt.npy
code: def createMSBWTFromBam(bamFNs, outputDir, numProcs, areUniform, logger):
      '''
      This function takes a fasta filename and creates the BWT using the technique from Cox and Bauer
      @param bamFNs - a list of BAM filenames to extract sequences from, READS MUST BE SORTED BY NAME
      @param outputDir - the directory for all of the bwt related data
      @param numProcs - the number of processes it's allowed to use
      @areUniform - true if all the sequences passed into the function are of equal length
      '''
      #generate the files we will reference and clear out the in memory array before making the BWT
      logger.info('Saving sorted sequences...')
      seqFN = outputDir+'/seqs.npy'
      offsetFN = outputDir+'/offsets.npy'
      abtFN = outputDir+'/about.npy'
      bwtFN = outputDir+'/msbwt.npy'
      
      MSBWTGen.clearAuxiliaryData(outputDir)
      preprocessBams(bamFNs, seqFN, offsetFN, abtFN, areUniform, logger)
      MSBWTGen.createFromSeqs(seqFN, offsetFN, bwtFN, numProcs, areUniform, logger)