#!/usr/bin/env python
# GainEstimater.py
#   Copyright (C) 2006 CCLRC, Graeme Winter
#
#   This code is distributed under the BSD license, a copy of which is
#   included in the root directory of this package.
#
# A module to estimate the GAIN for a detector based on a number of images
# from a sweep. Will generate a GAIN value from a number of images in that
# sweep and collect the average.
#
# Will also include some test code to estimate the error on that average.

import os
import sys
import exceptions
import math

if not os.environ.has_key('XIA2_ROOT'):
  raise RuntimeError, 'XIA2_ROOT not defined'
if not os.environ.has_key('XIA2CORE_ROOT'):
  raise RuntimeError, 'XIA2CORE_ROOT not defined'

if not os.environ['XIA2_ROOT'] in sys.path:
  sys.path.append(os.path.join(os.environ['XIA2_ROOT']))

from Wrappers.XIA.Diffdump import Diffdump

def gain(image):
  '''Get the gain from an image.'''

  dd = Diffdump()
  dd.set_image(image)
  return dd.gain()

def generate_gain(image_list):
  '''Get the mean and standard deviation in gain from a list
  of images.'''

  gains = []
  for image in image_list:
    gains.append(gain(image))

  sum = 0.0
  for g in gains:
    sum += g
  mean = sum / len(gains)

  sd = 0.0
  for g in gains:
    sd += (g - mean) * (g - mean)
  sd = math.sqrt(sd / len(gains))

  return mean, sd

if __name__ == '__main__':

  directory = os.path.join(os.environ['XIA2_ROOT'],
                           'Data', 'Test', 'Images')

  if len(sys.argv) == 1:

    print gain(os.path.join(directory, '12287_1_E1_001.img'))
    print gain(os.path.join(directory, '12287_1_E1_090.img'))

    print generate_gain([os.path.join(directory, '12287_1_E1_001.img'),
                         os.path.join(directory, '12287_1_E1_090.img')])


  else:

    print generate_gain(sys.argv[1:])
