Index: /branches/sj_branches/sj_ippTests_branch_20080929/ippTests/compIPPphoto.py
===================================================================
--- /branches/sj_branches/sj_ippTests_branch_20080929/ippTests/compIPPphoto.py	(revision 23262)
+++ /branches/sj_branches/sj_ippTests_branch_20080929/ippTests/compIPPphoto.py	(revision 23263)
@@ -68,4 +68,8 @@
 
 # Look at extended flag in PS1 vs. SDSS!!!
+
+# os.chdir('/disk1/jester/IPP/data/SDSS/stripe82/coadd/compare')
+# execfile('/disk1/jester/usrdevel/ipp_sj/ippTests/compIPPphoto.py')
+# h1,h2=compIPPphoto('test.fits','new',workdir='/IPP/data/SDSS/stripe82/coadd/compare',runlist=[1056,1755])
 
 plotcol_1frame_tlist = [
@@ -167,4 +171,5 @@
         plotStatsOnefile(column_hash,goodrow_hash,matchtable,plotcol_1frame_tlist,bandindex,bandid=filter_name)
         # return column_hash,goodrow_hash
+    # Herre, need to check that keylist is filled i.e. files were found
     newrows = numpy.rec.array(rowtuple_list,names=keylist)
     tabhdu = tabHDUfromRecArray(newrows)
@@ -269,7 +274,9 @@
                     if not re.search('objc',col2name):
                         try:
-                            [xmin,xmax] = stats_med(values1[goodrows],[histo_min_ntile,histo_max_ntile])
+                            r = stats_med(values1[goodrows],[histo_min_ntile,histo_max_ntile])
+                            [xmin,xmax] = r
                             [ymin,ymax] = stats_med(values2[goodrows],[histo_min_ntile,histo_max_ntile])
-                        except IndexError:
+                        except ValueError:
+                            print "Pffrz! ",r
                             print col1name, goodrows, type(goodrows), len(goodrows), len(values1)
                         # print "Huhu", outname, min(values1),max(values2),xmin,xmax
@@ -448,10 +455,4 @@
     # "reference columns"
     outhash = {}
-    #print "Looking for FWHM_MAJ in table %s" %(tablename)
-    if 'FWHM_MAJ' in copyfields_list and 'FWHM_MAJ' not in h.ascardlist().keys():
-        copyfields_list.remove('FWHM_MAJ')
-        copyfields_list.remove('FWHM_MIN')
-        copyfields_list.append('FWHM_X')
-        copyfields_list.append('FWHM_Y')
     for f in copyfields_list:
         outhash[f] = h[f]
@@ -477,5 +478,5 @@
     # Maybe I want to keep track of these number of "good" rows?
 
-    # XXX: Count number of objects in a) SDSS, b) PS1, c) both, by
+    #  Count number of objects in a) SDSS, b) PS1, c) both, by
     #  counting number of a) entries > 0 in 'id', b) non-nan entries
     #  in IPP_IDET, c) both (Later pass the following as parameters to
@@ -617,4 +618,5 @@
     file."""
     import pyfits
+    from numpy import nan
 
     def getOutname(SDSSfile,PS1file,sdssbandstr):
@@ -631,9 +633,13 @@
     
     filters = ['u','g','r','i','z']
-    # Read primary  header of PS1 file to work out band
-    try:
-        ps1copyfields_hash = headerfieldHash(['FWHM_MAJ','FWHM_MIN','FILTER'],PS1cmf,HDU=0)
-    except KeyError:
-        ps1copyfields_hash = headerfieldHash(['FWHM_X','FWHM_Y','FILTER'],PS1cmf,HDU=0)
+    # Read primary header of PS1 file to work out band and copy other
+    # interesting fields. These include FHWM_MAJ,MIN which used to be
+    # called FWHM_X,Y, but are missing in some cases if the camera
+    # stage failed. In the latter case, we can still read IQ_FW1,2. So
+    # we first update the .cmf file to be sure that FWHM_MAJ,MIN is
+    # present for later analysis.    
+    ensureFHWMheaderfields(PS1cmf)
+    ps1copyfields_hash = headerfieldHash(['FWHM_MAJ','FWHM_MIN','FILTER'],PS1cmf,HDU=0)            
+    sdsscopyfields_hash = headerfieldHash(['RUN','RERUN','CAMCOL','FIELD'],SDSSfpObjc,0)
     sdssbandstr = ps1copyfields_hash['FILTER']
     bandindex = filters.index(sdssbandstr)
@@ -642,5 +648,4 @@
         return outname,sdssbandstr,bandindex
         
-    sdsscopyfields_hash = headerfieldHash(['RUN','RERUN','CAMCOL','FIELD'],SDSSfpObjc,0)
 
     # Note position offset - y_sdss-y_psf1 ~ 0.6, x_sdss-x_ps1 ~ 0.35 (in 1056-r1-0192)
@@ -682,4 +687,20 @@
     return outname,sdssbandstr,bandindex
 
+def ensureFHWMheaderfields(PS1cmf):
+    import pyfits
+    PS1handle = pyfits.open(PS1cmf,mode='update')
+    PS1primhead = PS1handle[0].header
+    headfields = PS1primhead.ascardlist().keys()
+    if not ('FWHM_MAJ' in headfields and 'FWHM_MIN' in headfields):
+        if ('FWHM_X' in headfields and 'FWHM_Y' in headfields):
+            PS1primhead.update('FWHM_MAJ',PS1primhead['FWHM_X'])
+            PS1primhead.update('FWHM_MIN',PS1primhead['FWHM_Y'])
+        else:
+            PS1primhead.update('FWHM_MAJ',PS1primhead['IQ_FW1'])
+            PS1primhead.update('FWHM_MIN',PS1primhead['IQ_FW2'])
+    PS1handle.close()
+
+    
+
 def updateHeaderFromHash(header,hash):
     """Add fields in hash to header"""
@@ -698,4 +719,5 @@
     for field in fieldlist:
         outhash[field] = h[field]
+    f.close()
     return outhash
 
@@ -1018,4 +1040,5 @@
     # For testing:
     # return ['1056-0192.421/1056-0192.421.ch.421.CHIP1.cmf'],['1056-0192.421/fpObjc-001056-1-0192.fit']
+    # return ['1056-0192.1/1056-0192.1.ch.1.CHIP21.cmf'],['1056-0192.1/fpObjc-001056-1-0192.fit']
 
     from glob import glob
