docs: def measure_mags(measures):
      """
      Given a list of readings compute the magnitudes for all sources in each reading.
  
      @param measures: list of readings
      @return: None
      """
      import daophot
  
      image_downloader = ImageDownloader()
  
      observations = {}
      for measure in measures:
          for reading in measure:
              if reading.obs not in observations:
                  observations[reading.obs] = {'x': [],
                                               'y': [],
                                               'source': image_downloader.download(reading, needs_apcor=True)}
              assert isinstance(reading.obs, Observation)
              observations[reading.obs]['x'].append(reading.x)
              observations[reading.obs]['y'].append(reading.y)
  
      for observation in observations:
          source = observations[observation]['source']
          assert isinstance(source, SourceCutout)
          source.update_pixel_location(observations[observation]['x'],
                                       observations[observation]['y'])
          hdulist_index = source.get_hdulist_idx(observation.ccdnum)
          observations[observation]['mags'] = daophot.phot(source._hdu_on_disk(hdulist_index),
                                                           observations[observation]['x'],
                                                           observations[observation]['y'],
                                                           aperture=source.apcor.aperture,
                                                           sky=source.apcor.sky,
                                                           swidth=source.apcor.swidth,
                                                           apcor=source.apcor.apcor,
                                                           zmag=source.zmag,
                                                           maxcount=30000,
                                                           extno=0)
  
      return observations