#!/usr/presto/bin/python

# calculates exposure time for JWST templates

import math,sys,string
 
#################################################################
# read in nframes.groupgap file and store values needed
# in nfrgrgap
#################################################################

input=open("/user/ritchie/mimir2/apt/jwst/EXPTIME/nframes.groupgap","r")
nfggtab=[]

n=-1
while 1:
  nfggline=[]
  line=input.readline()
  if not line:
    break
  if len(line) > 10:
    x=line.split()
    # need instrument, readout, nframes, groupgap
    nfggline.append(x[0]) ## instrument line[0]
    nfggline.append(x[1]) ## readout line[1]
    nfggline.append(float(x[2])) ## nframes line[2]
    nfggline.append(float(x[3])) ## groupgap line[3]
    nfggtab.append(nfggline)
    n+=1

# close nframes.groupgap
input.close()
 
# print values in nfggtab
#for i in range (n+1):
#  print i,nfggtab[i][0],nfggtab[i][1],nfggtab[i][2],nfggtab[i][3]

#######################################################################

#################################################################
# read in framereadtime file and store values needed
# in frrdtab
#################################################################

input=open("/user/ritchie/mimir2/apt/jwst/EXPTIME/framereadtime","r")
frrdtab=[]

m=-1
while 1:
  frrdline=[]
  line=input.readline()
  if not line:
    break
  if len(line) > 10:
    x=line.split()
    # need instrument, readout, nframes, groupgap
    frrdline.append(x[0]) ## instrument line[0]
    frrdline.append(x[1]) ## subarray/coron line[1]
    frrdline.append(float(x[2])) ## framereatime line[2]
    if x[0][0:4]=="MIRI":
      frrdline.append(x[3]) ## readout line[3]
    frrdtab.append(frrdline)
    m+=1

# close framereadtime
input.close()
 
# print values in frrdtab
#for i in range (m+1):
#  if frrdtab[i][0]=="MIRI":
#    print i,frrdtab[i][0],frrdtab[i][1],frrdtab[i][2],frrdtab[i][3]
#  else:
#    print i,frrdtab[i][0],frrdtab[i][1],frrdtab[i][2]

#######################################################################

#################################################################
# open my input file and start actual program 
#################################################################

input=open(sys.argv[1],'r') #(instrument,readpatt,subarray|coron,ngrps,nints)
output=open(sys.argv[2],'w')

while 1:
  nints=1
  ngrps=1
  subarray="---"
  readpatt="---"
  
  line=input.readline()
  if not line:
    break
  sline=line.split()
  instrument=sline[0]
  readpatt=sline[1]
  subarray=sline[2]
  ngrps=int(sline[3])
  nints=int(sline[4])

  # figure out nfggtab value
  for i in range(n+1):
    if instrument==nfggtab[i][0]:
      if readpatt==nfggtab[i][1]:
        nframe=nfggtab[i][2]
        grgap=nfggtab[i][3]
  #print instrument,readpatt,nframe,grgap

  # figure out frrdtab value
  for i in range(m+1):
    if instrument==frrdtab[i][0]:
      if subarray==frrdtab[i][1]:
        if instrument!="MIRI":
          framereadtime=frrdtab[i][2]
          #print instrument,readpatt,nframe,grgap,framereadtime
        else:
          if readpatt==frrdtab[i][3]:
            framereadtime=frrdtab[i][2]
            #print instrument,readpatt,nframe,grgap,framereadtime

  if instrument in ('GUIDER1','GUIDER2','NIRISS'):
    exptime=framereadtime*((ngrps*nframe)+((ngrps-1)*grgap)+1)*nints
  else:
    exptime=framereadtime*((ngrps*nframe)+((ngrps-1)*grgap))*nints
  output.write("%-7s %-11s %-11s %5d %5d %8.3f\n" % (instrument,readpatt,subarray,ngrps,nints,exptime))
  print "%-7s %-11s %-11s %5d %5d %8.3f" % (instrument,readpatt,subarray,ngrps,nints,exptime)
  #print instrument,readpatt,subarray,nints,ngrps,exptime


input.close()
output.close()
