/tools/fastq/fastq_combiner.py

https://bitbucket.org/cistrome/cistrome-harvard/ · Python · 49 lines · 42 code · 5 blank · 2 comment · 15 complexity · c68562f80a7c79f12fc109b36529dd5b MD5 · raw file

  1. #Dan Blankenberg
  2. import sys, os, shutil
  3. from galaxy_utils.sequence.fastq import fastqWriter, fastqSequencingRead, fastqCombiner, fastqFakeFastaScoreReader
  4. from galaxy_utils.sequence.fasta import fastaReader, fastaNamedReader
  5. def main():
  6. #Read command line arguments
  7. fasta_filename = sys.argv[1]
  8. fasta_type = sys.argv[2] or 'fasta' #should always be fasta or csfasta? what if txt?
  9. qual_filename = sys.argv[3]
  10. qual_type = sys.argv[4] or 'qualsanger' #qual454 qualsolid
  11. output_filename = sys.argv[5]
  12. force_quality_encoding = sys.argv[6]
  13. if force_quality_encoding == 'None':
  14. force_quality_encoding = None
  15. format = 'sanger'
  16. if fasta_type == 'csfasta' or qual_type == 'qualsolid':
  17. format = 'cssanger'
  18. elif qual_type == 'qualsolexa':
  19. format = 'solexa'
  20. elif qual_type == 'qualillumina':
  21. format = 'illumina'
  22. out = fastqWriter( open( output_filename, 'wb' ), format = format, force_quality_encoding = force_quality_encoding )
  23. if qual_filename == 'None':
  24. qual_input = fastqFakeFastaScoreReader( format, quality_encoding = force_quality_encoding )
  25. else:
  26. qual_input = fastaNamedReader( open( qual_filename, 'rb' ) )
  27. fastq_combiner = fastqCombiner( format )
  28. i = None
  29. skip_count = 0
  30. for i, sequence in enumerate( fastaReader( open( fasta_filename, 'rb' ) ) ):
  31. quality = qual_input.get( sequence )
  32. if quality:
  33. fastq_read = fastq_combiner.combine( sequence, quality )
  34. out.write( fastq_read )
  35. else:
  36. skip_count += 1
  37. out.close()
  38. if i is None:
  39. print "Your file contains no valid FASTA sequences."
  40. else:
  41. print qual_input.has_data()
  42. print 'Combined %s of %s sequences with quality scores (%.2f%%).' % ( i - skip_count + 1, i + 1, float( i - skip_count + 1 ) / float( i + 1 ) * 100.0 )
  43. if __name__ == "__main__":
  44. main()