#from numarray import * ## Changed to numpy Aug 2007
from numpy import *
import pyfits
#from random import *
import numpy
from simpler_skymap_datons import *

NewCompFluxFileLst = ['ModelFluxRebinndNewComp.060529.fits', 'ModelFluxPaddedNewComp.060529.fits']
#
# For each "old" Poisdaton file:
#
IntTimeLst = [7.0,22.0,73.0,242.0,806.0]

ExpFileLst = [
'ExposrTimPaddedIntTime7.0.060529.fits',
'ExposrTimPaddedIntTime22.0.060529.fits',
'ExposrTimPaddedIntTime73.0.060529.fits',
'ExposrTimPaddedIntTime242.0.060529.fits',
'ExposrTimPaddedIntTime806.0.060529.fits']

NewCompDataFileLst = [
    'NewCompDataPaddedIntTime7.0.060604.fits',
    'NewCompDataPaddedIntTime22.0.060604.fits',
    'NewCompDataPaddedIntTime73.0.060604.fits',
    'NewCompDataPaddedIntTime242.0.060604.fits',
    'NewCompDataPaddedIntTime806.0.060604.fits']

OldPoisDatonsFileLst = [
    'PoisDatonPaddedIntTime7.0.060604.fits',
    'PoisDatonPaddedIntTime22.0.060604.fits',
    'PoisDatonPaddedIntTime73.0.060604.fits',
    'PoisDatonPaddedIntTime242.0.060604.fits',
    'PoisDatonPaddedIntTime806.0.060604.fits']

NewCompDatonsFileLst = ['NewCompPoisDatonPaddedIntTime7.0.060604.fits',
                        'NewCompPoisDatonPaddedIntTime22.0.060604.fits',
                        'NewCompPoisDatonPaddedIntTime73.0.060604.fits',
                        'NewCompPoisDatonPaddedIntTime242.0.060604.fits',
                        'NewCompPoisDatonPaddedIntTime806.0.060604.fits']

NewPoisDatonsFileLst = ['NewSumPoisDatonPaddedIntTime7.0.060604.fits','NewSumPoisDatonPaddedIntTime22.0.060604.fits','NewSumPoisDatonPaddedIntTime73.0.060604.fits','NewSumPoisDatonPaddedIntTime242.0.060604.fits','NewSumPoisDatonPaddedIntTime806.0.060604.fits']



# Quick-o check of the other lists:
if ( ( len(IntTimeLst) != len(ExpFileLst) ) or ( len(IntTimeLst) != len(NewCompDataFileLst) ) or ( len(IntTimeLst) != len(NewCompDatonsFileLst) )  ):
    print 'Whoa! Dude! Fatal Error! Your IntTimeLst and various FileLst dont have the same number of entries!!!'

# Get that model flux:
this_NewCompFlux = pyfits.open('ModelFluxPaddedNewComp.060529.fits')
# and ping it:
print this_NewCompFlux[0].header
print this_NewCompFlux[0].data[0][1][2]

#
#
##FOR each item in lists:
for kk in range( len(IntTimeLst) ):

#   Read in old Exposure
    this_exp_hdulst = pyfits.open(ExpFileLst[kk])
#
#   Multiply fake component by associated IntTime*Exposure
#      to get FakeComp piece
    newcompdata_hdu = simpler_outer_products( this_NewCompFlux[0], this_exp_hdulst[0] )
    newcompdata_HDU = pyfits.PrimaryHDU(data=newcompdata_hdu.data,header=newcompdata_hdu.header)
    newcompdata_HDU.writeto(NewCompDataFileLst[kk])
    this_exp_hdulst.close()
#
#   Get new Poisson Datons with the new component:
    newcompdatons_hdu = simpler_poisson_datons(newcompdata_HDU)
#
#   Write out fits and txt files for each NewComp
    print 'Sample data012 of output from outerprod:', newcompdatons_hdu.data[0][1][2]
    print 'Header of output from outerprod:', newcompdatons_hdu.header,'\n'
    newcompdatons_HDU = pyfits.PrimaryHDU(data=newcompdatons_hdu.data,header=newcompdatons_hdu.header)
    newcompdatons_HDU.writeto(NewCompDatonsFileLst[kk])


#
#
# For each array, SUM the new piece with the old one to get NewPoissDatons* .
#   Read in previous fits daton files:
    olddatons_HDU = pyfits.open(OldPoisDatonsFileLst[kk])
    print 'kk: ', kk, '  OldPoisDatonsFileLst[kk]: ', OldPoisDatonsFileLst[kk], '\n'
    print 'Sample data012 of 1st input to sum:', olddatons_HDU[0].data[0][1][2]
    print 'Header of 1st input to sum:', olddatons_HDU[0].header,'\n'

#   SUM
    NewPoisDatons_hdu = simpler_twosum(olddatons_HDU[0],newcompdatons_HDU)
    print 'Sample data012 of output from sum:', NewPoisDatons_hdu.data[0][1][2]
    print 'Header of output from sum:', NewPoisDatons_hdu.header,'\n'

    olddatons_HDU.close()
#
#   Now write 'em out, fits ant txt
    NewPoisDatons_HDU = pyfits.PrimaryHDU(data=NewPoisDatons_hdu.data,header=NewPoisDatons_hdu.header)
    NewPoisDatons_HDU.writeto(NewPoisDatonsFileLst[kk])


# All done?? For now??

# ModelFluxPaddedICPion1-1000GeV.060529.fits
# ModelFluxRebinndICPion1-1000GeV.060529.fits
# PoisDatonPaddedIntTime7.0.060529.fits
# ModelDataPaddedIntTime7.0.060529.fits
# ExposrTimPaddedIntTime7.0.060529.fits
# ExposrTimRebinndIntTime7.0.060529.fits
# PoisDatonPaddedIntTime22.0.060529.fits
# ModelDataPaddedIntTime22.0.060529.fits
# ExposrTimPaddedIntTime22.0.060529.fits
# ExposrTimRebinndIntTime22.0.060529.fits
# PoisDatonPaddedIntTime73.0.060529.fits
# ModelDataPaddedIntTime73.0.060529.fits
# ExposrTimPaddedIntTime73.0.060529.fits
# ExposrTimRebinndIntTime73.0.060529.fits
# ModelDataPaddedIntTime242.0.060529.fits
# PoisDatonPaddedIntTime242.0.060529.fits
# ExposrTimPaddedIntTime242.0.060529.fits
# ExposrTimRebinndIntTime242.0.060529.fits
# ModelDataPaddedIntTime806.0.060529.fits
# PoisDatonPaddedIntTime806.0.060529.fits
# ExposrTimPaddedIntTime806.0.060529.fits
# ExposrTimRebinndIntTime806.0.060529.fits
# ModelFluxPaddedBremICPion1-1000GeV.060529.fits
# ModelFluxRebinndBremICPion1-1000GeV.060529.fits
