text: # Copyright 2008 Michiel de Hoon. All rights reserved.
  #
  # This file is part of the Biopython distribution and governed by your
  # choice of the "Biopython License Agreement" or the "BSD 3-Clause License".
  # Please see the LICENSE file that should have been included as part of this
  # package.
  
  """Code to interact with the primersearch program from EMBOSS."""
  
  
  class InputRecord(object):
      """Represent the input file into the primersearch program.
  
      This makes it easy to add primer information and write it out to the
      simple primer file format.
      """
  
      def __init__(self):
          """Initialize the class."""
          self.primer_info = []
  
      def __str__(self):
          output = ""
          for name, primer1, primer2 in self.primer_info:
              output += "%s %s %s\n" % (name, primer1, primer2)
          return output
  
      def add_primer_set(self, primer_name, first_primer_seq,
                         second_primer_seq):
          """Add primer information to the record."""
          self.primer_info.append((primer_name, first_primer_seq,
                                   second_primer_seq))
  
  
  class OutputRecord(object):
      """Represent the information from a primersearch job.
  
      amplifiers is a dictionary where the keys are the primer names and
      the values are a list of PrimerSearchAmplifier objects.
      """
  
      def __init__(self):
          """Initialize the class."""
          self.amplifiers = {}
  
  
  class Amplifier(object):
      """Represent a single amplification from a primer."""
  
      def __init__(self):
          """Initialize the class."""
          self.hit_info = ""
          self.length = 0
  
  
  def read(handle):
      """Get output from primersearch into a PrimerSearchOutputRecord."""
      record = OutputRecord()
  
      for line in handle:
          if not line.strip():
              continue
          elif line.startswith("Primer name"):
              name = line.split()[-1]
              record.amplifiers[name] = []
          elif line.startswith("Amplimer"):
              amplifier = Amplifier()
              record.amplifiers[name].append(amplifier)
          elif line.startswith("\tSequence: "):
              amplifier.hit_info = line.replace("\tSequence: ", "")
          elif line.startswith("\tAmplimer length: "):
              length = line.split()[-2]
              amplifier.length = int(length)
          else:
              amplifier.hit_info += line
  
      for name in record.amplifiers:
          for amplifier in record.amplifiers[name]:
              amplifier.hit_info = amplifier.hit_info.rstrip()
  
      return record
  