IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 19831


Ignore:
Timestamp:
Oct 2, 2008, 9:12:00 AM (18 years ago)
Author:
Sebastian Jester
Message:

add plotting routines for histograms and line plots, plus move out reusable things like setting up the plot axes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/sj_ippTests_branch_20080929/ippTests/compIPPphoto.py

    r19803 r19831  
    4646# to write the file.
    4747
    48 def scatterplot(x,y,ptype,xlab,ylab,xrange='',yrange='',append=False,close=True,dev='x11'):
    49     """Make an sm scatter plot on current device."""
     48def smOpenPlot(filename,format='eps'):
     49    """Issue sm device command for file of given format:
     50    eps -> postfile
     51    else just use given format as 'device'"""
     52    from sm import device, erase
     53    if filename == 'x11':
     54        device('x11')
     55    elif format == 'eps':
     56        device('postfile '+filename)
     57    else:
     58        device(format +' '+filename)   
     59    erase()
     60   
     61def smClosePlot():
     62    from sm import device
     63    device('nodevice')
     64
     65def isNone(something):
     66    return isinstance(something,type(None))
     67
     68def smHistoPlot(vec,step=None,minbin=None,maxbin=None,nbins=None,\
     69                    xlab=None,ylab=None,xrange=None,yrange=None,\
     70                    box1=None,box2=None,box3=None,box4=None,\
     71                    append=False):
     72    """Plot a histogram, intelligently deriving bins from the given
     73    parameters if they are given intelligently.  Otherwise, silently
     74    do nothing."""
     75    import sm
     76    if isNone(minbin):
     77        minbin = min(vec)
     78    if isNone(maxbin):
     79        maxbin = max(vec)
     80    # I am assuming bins are bin centers
     81    if not isNone(step):
     82        nbins = (maxbin-minbin)/step+1
     83    if isNone(nbins):
     84        return
     85    histo,leftbinedges = histogram(vec,nbins,[minbin,maxbin])
     86    bincenters = leftbinedges + 0.5*(leftbinedges[1]-leftbinedges[0])
     87
     88    if not append:
     89        smSetup(bincenters,histo,xrange,yrange,xlab,ylab,box1,box2,box3,box4)
     90    sm.histogram(bincenters,histo)
     91
     92def smLinePlot(x,y,ltype=0,xlab=None,ylab=None,xrange=None,yrange=None,\
     93                    box1=None,box2=None,box3=None,box4=None,\
     94                    append=False):
     95    """Make an sm scatter plot on current device. If append=True,
     96    overplot with current limits. Otherwise, draw box box1 box2 box3 box4"""
    5097    import sm
    5198    sm.expand(1.8)
     
    54101    try:
    55102        if not append:
    56             sm.device(dev)
    57             sm.erase()
    58             if xrange == '':
    59                 xrange = x
    60             if yrange == '':
    61                 yrange = y
    62             sm.limits(x,y)
    63             sm.box()
    64             sm.xlabel(xlab)
    65             sm.ylabel(ylab)
     103            smSetup(x,y,xrange,yrange,xlab,ylab,box1,box2,box3,box4)
     104        sm.ltype(ltype)
     105        sm.connect(x,y)
     106    except:
     107        pass
     108
     109
     110def smScatterPlot(x,y,ptype=41,xlab=None,ylab=None,xrange=None,yrange=None,\
     111                    box1=None,box2=None,box3=None,box4=None,\
     112                    append=False):
     113    """Make an sm scatter plot on current device. If append=True,
     114    overplot with current limits. Otherwise, draw box box1 box2 box3 box4"""
     115    import sm
     116    sm.expand(1.8)
     117    sm.lweight(5)
     118    # Silently ignore any problems with plot generation
     119    try:
     120        if not append:
     121            smSetup(x,y,xrange,yrange,xlab,ylab,box1,box2,box3,box4)
    66122        sm.ptype(ptype)
    67123        sm.points(x,y)
    68         # Close active device - maybe add flag to skip this so plot
    69         # remains appendable, or use meta? but can't use colour in meta...
    70         if close:
    71             sm.device('nodevice')
    72124    except:
    73125        pass
     126
     127def smSetup(x,y,xrange,yrange,xlab,ylab,box1,box2,box3,box4):
     128    import sm
     129    sm.erase()
     130    if isNone(xrange):
     131        xrange = x
     132    if isNone(yrange):
     133        yrange = y
     134    sm.limits(x,y)
     135    smBox(box1,box2,box3,box4)
     136    if not isNone(xlab):
     137        sm.xlabel(xlab)
     138    if not isNone(ylab):
     139        sm.ylabel(ylab)
     140
     141def smBox(box1,box2,box3,box4):
     142    from sm import box
     143    if not isNone(box4):
     144        box(box1,box2,box3,box4)
     145    elif not isNone(box3):
     146        box(box1,box2,box3)
     147    elif not isNone(box2):
     148        box(box1,box2)
     149    elif not isNone(box1):
     150        box(box1)
     151    else:
     152        box()
    74153
    75154def compIPPphoto(summaryTable,mode):
     
    244323            # Compute array for internal use
    245324            SDSScol_good = -2.5*log10(SDSScol_good)
     325
    246326        if PS1colname == 'PSF_INST_MAG_SIG' and SDSScolname.lower() == 'psfcountserr':
    247327            # Create column with SDSS instrumental magnitude error
     
    254334            SDSScol_good,PS1col_good,SDSScounts_good = filterGoodVal3(SDSScol,PS1col,SDSScounts)
    255335            SDSScol_good = 2.5/log(10.)*SDSScol_good/SDSScounts_good
     336
    256337        delta = SDSScol_good - PS1col_good
    257338        avg = delta.mean()
Note: See TracChangeset for help on using the changeset viewer.