text: #!/afs/bx.psu.edu/project/pythons/linux-x86_64-ucs4/bin/python2.7
  
  """
  Reads a list of intervals and a set of indexed mafs. For each interval print
  the amount covered by each species other than the reference.
  
  usage: %prog maf_files  [options] < interval_file
     -s, --src=s:      Use this src for all intervals
     -p, --prefix=p:   Prepend this to each src before lookup
  """
  
  from __future__ import division
  
  import psyco_full
  
  from bx.cookbook import doc_optparse
  
  import bx.align.maf
  from bx import intervals
  from bx import misc
  import sys
  
  def __main__():
  
      # Parse Command Line
  
      options, args = doc_optparse.parse( __doc__ )
  
      try:
          maf_files = args
          if options.prefix: prefix = options.prefix
          else: prefix = None
      except:
          doc_optparse.exit()
  
      # Open indexed access to mafs
      indexes = [ bx.align.maf.Indexed( maf_file, maf_file + ".index" ) for maf_file in maf_files ]
  
      # Iterate over input ranges 
  
      for line in sys.stdin:
          fields = line.split()
          src, start, end = fields[0], int( fields[1] ), int( fields[2] )
          if prefix: src = prefix + src
  
          total_length = end - start
  
          # Find overlap with reference component
          blocks = []
          for index in indexes: blocks += index.get( src, start, end )
  
          coverage = dict()
          for block in blocks:
              overlap_start = max( start, block.components[0].start )
              overlap_end = min( end, block.components[0].end )
              length = overlap_end - overlap_start
              assert length > 0
              for c in block.components[1:]:
                  species = c.src.split( '.' )[0]
                  try: coverage[ species ] += length
                  except: coverage[ species ] = length
  
          print line,
          for key, value in coverage.iteritems():
              print "   ", key.ljust(10), "%0.2f" % ( value / total_length )
  
  
  if __name__ == "__main__": __main__()
  