Index: /branches/sj_ippTests_branch_20080929/ippTests/compIPPphoto.py
===================================================================
--- /branches/sj_ippTests_branch_20080929/ippTests/compIPPphoto.py	(revision 19830)
+++ /branches/sj_ippTests_branch_20080929/ippTests/compIPPphoto.py	(revision 19831)
@@ -46,6 +46,53 @@
 # to write the file. 
 
-def scatterplot(x,y,ptype,xlab,ylab,xrange='',yrange='',append=False,close=True,dev='x11'):
-    """Make an sm scatter plot on current device."""
+def smOpenPlot(filename,format='eps'):
+    """Issue sm device command for file of given format:
+    eps -> postfile
+    else just use given format as 'device'"""
+    from sm import device, erase
+    if filename == 'x11':
+        device('x11')
+    elif format == 'eps':
+        device('postfile '+filename)
+    else:
+        device(format +' '+filename)    
+    erase()
+    
+def smClosePlot():
+    from sm import device
+    device('nodevice')
+
+def isNone(something):
+    return isinstance(something,type(None))
+
+def smHistoPlot(vec,step=None,minbin=None,maxbin=None,nbins=None,\
+                    xlab=None,ylab=None,xrange=None,yrange=None,\
+                    box1=None,box2=None,box3=None,box4=None,\
+                    append=False):
+    """Plot a histogram, intelligently deriving bins from the given
+    parameters if they are given intelligently.  Otherwise, silently
+    do nothing."""
+    import sm
+    if isNone(minbin):
+        minbin = min(vec)
+    if isNone(maxbin):
+        maxbin = max(vec)
+    # I am assuming bins are bin centers
+    if not isNone(step):
+        nbins = (maxbin-minbin)/step+1
+    if isNone(nbins):
+        return
+    histo,leftbinedges = histogram(vec,nbins,[minbin,maxbin])
+    bincenters = leftbinedges + 0.5*(leftbinedges[1]-leftbinedges[0])
+
+    if not append:
+        smSetup(bincenters,histo,xrange,yrange,xlab,ylab,box1,box2,box3,box4)
+    sm.histogram(bincenters,histo)
+
+def smLinePlot(x,y,ltype=0,xlab=None,ylab=None,xrange=None,yrange=None,\
+                    box1=None,box2=None,box3=None,box4=None,\
+                    append=False):
+    """Make an sm scatter plot on current device. If append=True,
+    overplot with current limits. Otherwise, draw box box1 box2 box3 box4"""
     import sm
     sm.expand(1.8)
@@ -54,22 +101,54 @@
     try:
         if not append:
-            sm.device(dev)
-            sm.erase()
-            if xrange == '':
-                xrange = x
-            if yrange == '':
-                yrange = y
-            sm.limits(x,y)
-            sm.box()
-            sm.xlabel(xlab)
-            sm.ylabel(ylab)
+            smSetup(x,y,xrange,yrange,xlab,ylab,box1,box2,box3,box4)
+        sm.ltype(ltype)
+        sm.connect(x,y)
+    except:
+        pass
+
+
+def smScatterPlot(x,y,ptype=41,xlab=None,ylab=None,xrange=None,yrange=None,\
+                    box1=None,box2=None,box3=None,box4=None,\
+                    append=False):
+    """Make an sm scatter plot on current device. If append=True,
+    overplot with current limits. Otherwise, draw box box1 box2 box3 box4"""
+    import sm
+    sm.expand(1.8)
+    sm.lweight(5)
+    # Silently ignore any problems with plot generation
+    try:
+        if not append:
+            smSetup(x,y,xrange,yrange,xlab,ylab,box1,box2,box3,box4)
         sm.ptype(ptype)
         sm.points(x,y)
-        # Close active device - maybe add flag to skip this so plot
-        # remains appendable, or use meta? but can't use colour in meta...
-        if close:
-            sm.device('nodevice')
     except:
         pass
+
+def smSetup(x,y,xrange,yrange,xlab,ylab,box1,box2,box3,box4):
+    import sm
+    sm.erase()
+    if isNone(xrange):
+        xrange = x
+    if isNone(yrange):
+        yrange = y
+    sm.limits(x,y)
+    smBox(box1,box2,box3,box4)
+    if not isNone(xlab):
+        sm.xlabel(xlab)
+    if not isNone(ylab):
+        sm.ylabel(ylab)
+
+def smBox(box1,box2,box3,box4):
+    from sm import box
+    if not isNone(box4):
+        box(box1,box2,box3,box4)
+    elif not isNone(box3):
+        box(box1,box2,box3)
+    elif not isNone(box2):
+        box(box1,box2)
+    elif not isNone(box1):
+        box(box1)
+    else:
+        box()
 
 def compIPPphoto(summaryTable,mode):
@@ -244,4 +323,5 @@
             # Compute array for internal use
             SDSScol_good = -2.5*log10(SDSScol_good)
+
         if PS1colname == 'PSF_INST_MAG_SIG' and SDSScolname.lower() == 'psfcountserr':
             # Create column with SDSS instrumental magnitude error
@@ -254,4 +334,5 @@
             SDSScol_good,PS1col_good,SDSScounts_good = filterGoodVal3(SDSScol,PS1col,SDSScounts)
             SDSScol_good = 2.5/log(10.)*SDSScol_good/SDSScounts_good
+
         delta = SDSScol_good - PS1col_good
         avg = delta.mean()
