示例#1
0
def main(rerun,
         visit1,
         visit2,
         op,
         ccdno,
         datatype='calexp',
         scale=None,
         root=None,
         invert=False,
         cmap='gray',
         vmax=None,
         annotate=None,
         bins=16,
         rerun2=None,
         showCbar=False,
         vsig=None,
         showAnnotate=False,
         percent=None,
         hilite=None):

    vsigDefault = 5.0
    visit1 = int(visit1)
    if visit2:
        visit2 = int(visit2)
    ccdno = set([int(x) for x in hscUtil.idSplit(ccdno)])

    butler1 = hscUtil.getButler(rerun, root=root)
    if rerun2:
        butler2 = hscUtil.getButler(rerun2, root=root)
    else:
        butler2 = butler1

    if datatype not in calibTypes:
        dataIds1 = butler1.queryMetadata(datatype,
                                         "ccd",
                                         format=["visit", "ccd"],
                                         dataId={'visit': visit1})
        dataIds1 = [{'visit': x[0], 'ccd': x[1]} for x in dataIds1]
    else:
        dataIds1 = [{'visit': visit1, 'ccd': x} for x in range(104)]

    dataRef1 = None
    dataRef2 = None

    if visit2:
        dataIds2 = butler2.queryMetadata(datatype,
                                         "ccd",
                                         format=["visit", "ccd"],
                                         dataId={'visit': visit2})
        dataIds2 = [{'visit': x[0], 'ccd': x[1]} for x in dataIds2]

    # flip the color map
    if invert:
        cmap = re.sub("_r$", "", cmap) if re.match('_r$', cmap) else '_r'

    # sleezy, but if vmax isn't set and we're linear, just use ccd in the middle to norm
    if vmax is None and scale != 'histeq':
        vmax = 'c049'

    # handle the gray scale normalization
    vmin = 0.0
    mdRef1 = None
    mdRef2 = None
    if vmax:
        if scale == 'histeq':
            raise ValueError("Cannot specify vmax with histeq scaling.")

        # if it identifies a CCD to use
        if re.match("^c", vmax):
            vmaxCcd = int(re.sub("c", "", vmax))
            try:
                dataRef1 = hscButler.getDataRef(butler1, {
                    'visit': visit1,
                    'ccd': vmaxCcd
                })
                imgRef1 = dataRef1.get(
                    datatype).getMaskedImage().getImage().getArray()
                if datatype not in calibTypes:
                    mdRef1 = dataRef1.get(datatype + '_md', immediate=True)
                if visit2:
                    dataRef2 = hscButler.getDataRef(butler2, {
                        'visit': visit2,
                        'ccd': vmaxCcd
                    })
                    imgRef2 = dataRef2.get(
                        datatype).getMaskedImage().getImage().getArray()
                    mdRef2 = dataRef2.get(datatype + '_md', immediate=True)
                    img_op = hscUtil.rebin(compute(imgRef1, imgRef2, op), bins)
                    med = numpy.median(img_op)
                    std = numpy.std(img_op)
                    if not vsig:
                        vsig = vsigDefault
                    delta = vsig * std
                    if percent:
                        delta = percent * med
                    vmin = med - abs(delta)
                    vmax = med + abs(delta)
                else:
                    if showAnnotate:
                        exp1 = dataRef1.get(datatype)
                        aval = float(exp1.getMetadata().get(annotate))
                        med = aval
                        delta = vsig
                        if not vsig:
                            delta = 0.5 * aval
                        if percent:
                            delta = percent * aval
                        vmin = med - abs(delta)
                        vmax = med + abs(delta)
                    else:
                        img_op = imgRef1
                        med = numpy.median(img_op)
                        sig = numpy.sqrt(med)
                        delta = vsigDefault * sig
                        if vsig:
                            delta = vsig * sig
                        if percent:
                            delta = percent * med
                        vmin = med - abs(delta)
                        vmax = med + abs(delta)
                        if not vsig and not percent:
                            vmin = 0.5 * med
                            vmax = med + 5.0 * sig

            except Exception, e:
                raise RuntimeError("Could not get stats on vmax CCD" +
                                   str(vmax) + "  Exiting." + str(e))

        elif re.search(":", vmax):
            vmaxCcd = None
            vmin, vmax = [float(x) for x in vmax.split(":")]
            med = 0.5 * (vmax + vmin)
        else:
            vmaxCcd = None
            vmax = float(vmax)
            med = 0.5 * (vmax + vmin)
示例#2
0
def main(rerun, visit1, visit2, op, ccdno,
         datatype='calexp', scale=None, root=None, invert=False, cmap='gray',
         vmax=None, annotate=None, bins=16, rerun2=None, showCbar=False, vsig=None,
         showAnnotate=False, percent=None, hilite=None):

    vsigDefault = 5.0
    visit1 = int(visit1)
    if visit2:
        visit2 = int(visit2)
    ccdno = set([int(x) for x in hscUtil.idSplit(ccdno)])
    
    butler1 = hscUtil.getButler(rerun, root=root)
    if rerun2:
        butler2 = hscUtil.getButler(rerun2, root=root)
    else:
        butler2 = butler1

    if datatype not in calibTypes:
        dataIds1 = butler1.queryMetadata(datatype, "ccd", format=["visit", "ccd"], dataId={'visit':visit1})
        dataIds1 = [{'visit':x[0], 'ccd':x[1]} for x in dataIds1]
    else:
        dataIds1 = [{'visit': visit1, 'ccd':x} for x in range(104)]
        
    dataRef1 = None
    dataRef2 = None
    
    if visit2:
        dataIds2 = butler2.queryMetadata(datatype, "ccd", format=["visit", "ccd"], dataId={'visit':visit2})
        dataIds2 = [{'visit':x[0], 'ccd':x[1]} for x in dataIds2]
    
    # flip the color map
    if invert:
        cmap = re.sub("_r$", "", cmap) if re.match('_r$', cmap) else '_r'

    # sleezy, but if vmax isn't set and we're linear, just use ccd in the middle to norm 
    if vmax is None and scale != 'histeq':
        vmax = 'c049'

    # handle the gray scale normalization
    vmin = 0.0
    mdRef1 = None
    mdRef2 = None
    if vmax:
        if scale == 'histeq':
            raise ValueError("Cannot specify vmax with histeq scaling.")
        
        # if it identifies a CCD to use
        if re.match("^c", vmax):
            vmaxCcd = int(re.sub("c", "", vmax))
            try:
                dataRef1 = hscButler.getDataRef(butler1, {'visit':visit1, 'ccd':vmaxCcd})
                imgRef1  = dataRef1.get(datatype).getMaskedImage().getImage().getArray()
                if datatype not in calibTypes:
                    mdRef1   = dataRef1.get(datatype+'_md', immediate=True)
                if visit2:
                    dataRef2 = hscButler.getDataRef(butler2, {'visit':visit2, 'ccd':vmaxCcd})
                    imgRef2  = dataRef2.get(datatype).getMaskedImage().getImage().getArray()
                    mdRef2   = dataRef2.get(datatype+'_md', immediate=True)
                    img_op  = hscUtil.rebin(compute(imgRef1, imgRef2, op), bins)
                    med     = numpy.median(img_op)
                    std     = numpy.std(img_op)
                    if not vsig:
                        vsig = vsigDefault
                    delta = vsig*std
                    if percent:
                        delta = percent*med
                    vmin    = med - abs(delta)
                    vmax    = med + abs(delta)
                else:
                    if showAnnotate:
                        exp1 = dataRef1.get(datatype)
                        aval   = float(exp1.getMetadata().get(annotate))
                        med = aval
                        delta = vsig
                        if not vsig:
                            delta = 0.5*aval
                        if percent:
                            delta = percent*aval
                        vmin    = med - abs(delta)
                        vmax    = med + abs(delta)
                    else:
                        img_op  = imgRef1
                        med     = numpy.median(img_op)
                        sig     = numpy.sqrt(med)
                        delta   = vsigDefault*sig
                        if vsig:
                            delta = vsig*sig
                        if percent:
                            delta = percent*med
                        vmin    = med - abs(delta)
                        vmax    = med + abs(delta)
                        if not vsig and not percent:
                            vmin    = 0.5*med
                            vmax    = med + 5.0*sig

                        
            except Exception, e:
                raise RuntimeError("Could not get stats on vmax CCD" + str(vmax)+ "  Exiting." + str(e))

        elif re.search(":", vmax):
            vmaxCcd = None
            vmin, vmax = [float(x) for x in vmax.split(":")]
            med = 0.5*(vmax + vmin)
        else:
            vmaxCcd = None
            vmax = float(vmax)
            med = 0.5*(vmax + vmin)
示例#3
0
        imshow_kwargs = {}
        if scale == 'linear':
            imshow_kwargs = {'vmin': vmin, 'vmax': vmax}
        if showAnnotate:
            ny, nx = 4, 2
            if exp1.getDetector().getOrientation().getNQuarter() % 2:
                ny, nx = 2, 4
            imtmp = numpy.ones((ny, nx)) * float(aval)
        else:
            if visit2:
                img_op = compute(img1, img2, op)
            else:
                img_op = img1
            # scale as requested
            img_op = scaleLookup[scale](img_op)
            imtmp = hscUtil.rebin(img_op, bins)[::-1]

        im_ax = ax.imshow(imtmp, cmap=cmap, **imshow_kwargs)

    if showCbar and im_ax and scale != "histeq":
        ylo, yhi = vmin, vmax
        rect = (0.91, 0.2, 0.02, 0.6)

        cax = fig.add_axes(rect)
        cax.set_ylim([ylo, yhi])
        cax.get_xaxis().set_ticks([])
        cax.get_yaxis().get_major_formatter().set_useOffset(False)
        cbar = fig.colorbar(im_ax, cax=cax)

        caxp = cax.twinx()
        caxp.set_ylim([ylo / med, yhi / med])
示例#4
0
        imshow_kwargs = {}
        if scale == 'linear':
            imshow_kwargs = {'vmin': vmin, 'vmax': vmax}
        if showAnnotate:
            ny, nx = 4, 2
            if exp1.getDetector().getOrientation().getNQuarter() % 2:
                ny, nx = 2, 4
            imtmp = numpy.ones((ny, nx))*float(aval)
        else:
            if visit2:
                img_op = compute(img1, img2, op)
            else:
                img_op = img1
            # scale as requested
            img_op = scaleLookup[scale](img_op)
            imtmp = hscUtil.rebin(img_op, bins)[::-1]
        
        im_ax = ax.imshow(imtmp, cmap=cmap, **imshow_kwargs)

        

        
    if showCbar and im_ax and scale != "histeq":
        ylo, yhi = vmin, vmax
        rect = (0.91, 0.2, 0.02, 0.6)

        cax  = fig.add_axes(rect)        
        cax.set_ylim([ylo, yhi])
        cax.get_xaxis().set_ticks([])
        cax.get_yaxis().get_major_formatter().set_useOffset(False)        
        cbar = fig.colorbar(im_ax, cax=cax)