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)
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)
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])
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)