Beispiel #1
0
def main3():
    import psana
    ds = psana.DataSource("exp=cxid9114:run=62")
    events = ds.events()

    det = psana.Detector('CxiDs2.0:Cspad.0')
    dark = det.pedestals(62)
    gain_map = det.gain_mask(62) == 1
    plt.imshow(gain_map[0])
    plt.show()
    mask = mask_utils.mask_small_regions(gain_map)
    mask2 = np.load("details_mask.npy")
    mask *= mask2
    start = 0
    for i in range(100):
        ev = events.next()
        if ev is None:
            continue
        if i < start:
            continue
        data = det.calib(ev, cmpars=(5, 0, 0, 0, 0))
        #data = det.calib(ev, cmpars=(1,25,25,100,1))
        if data is None:
            continue
        plt.imshow(gain_map[0])
        plt.show()
        xlow, ylow, xhigh, yhigh, new_data = get_gain_dists(
            data, gain_map, mask)

        low_g0, low_g1, fit_low = fit_utils.fit_low_gain_dist(xlow,
                                                              ylow,
                                                              plot=1)
        high_g0, high_g1, fit_high = fit_utils.fit_high_gain_dist(xhigh,
                                                                  yhigh,
                                                                  plot=1)

        plt.figure()
        plt.imshow(data[0], vmin=-10, vmax=50, cmap='gnuplot')
        plt.show()
Beispiel #2
0
def correct_panels(data, gain_map, mask, plot=False):
    xlow, ylow, xhigh, yhigh, new_data = get_gain_dists(data, gain_map, mask)

    low_g0, low_g1, fit_low = fit_utils.fit_low_gain_dist(xlow,
                                                          ylow,
                                                          plot=plot)
    high_g0, high_g1, fit_high = fit_utils.fit_high_gain_dist(xhigh,
                                                              yhigh,
                                                              plot=plot)

    low_1phot = xlow[low_g1.argmax()]
    #high_1phot = xhigh[high_g1.argmax()]
    high_1phot = xhigh[np.argmax(utils.smooth(yhigh, window_size=30)[220:300])
                       + 220]
    print "Low gain 1 photon peak: %.4f ADU" % low_1phot
    print "High gain 1 photon peak: %.4f ADU" % high_1phot
    gain = high_1phot / low_1phot

    print "Estimated gain: %.4f" % gain

    low_0phot_wid = fit_low.params['wid0']
    high_0phot_wid = fit_high.params['wid0']
    bg_gain = high_0phot_wid / low_0phot_wid
    print "Estimated dark-current gain: %.4f" % bg_gain

    cutoff = low_1phot - 1 * fit_low.params['wid1'].value / np.sqrt(2.)
    print "Estimated low-gain dark-current cutoff ADU: %.4f" % cutoff

    #cutoff = 1.85
    #gain = 6.85
    #bg_gain = 1.95

    lowgain_photons = np.logical_and(new_data > cutoff, gain_map)
    new_data[gain_map] = new_data[gain_map] * bg_gain
    new_data[lowgain_photons] = new_data[lowgain_photons] * gain / bg_gain

    return new_data
    if fix_gain:
        data32 = np.array([
            np.hstack([pan_data[i * 2], pan_data[i * 2 + 1]])
            for i in range(32)
        ])
        # undo the nominal low-to-high gain correction
        data32[loader.gain] /= loader.nominal_gain_val  # this is default 6.85

        outg = gain_utils.get_gain_dists(data32,
                                         loader.gain,
                                         loader.cspad_mask,
                                         plot=False,
                                         norm=True)

        fit = fit_utils.fit_low_gain_dist(outg[0], outg[1], plot=plot)
        fitH = fit_utils.fit_high_gain_dist(outg[2], outg[3], plot=plot)
        bgg = fitH[2].params['wid0'].value / fit[2].params['wid0'].value
        low2highG = fitH[2].params['mu1'].value / fit[2].params['mu1'].value

        lowGres = np.sum(fit[2].residual**2)
        highGres = np.sum(fitH[2].residual**2)

        all_lowGres.append([lowGres] * Nref)
        all_highGres.append([highGres] * Nref)

        all_g.append([low2highG] * Nref)
        all_bgg.append([bgg] * Nref)

        data32[loader.gain] = data32[loader.gain] * low2highG

        phot3_g = fitH[2].params['mu1'].value
Beispiel #4
0
get_ipython().magic(u'cd results')
get_ipython().magic(u'cd run62')
get_ipython().magic(u'ls ')
from dxtbx.model.experiment_list import ExperimentListFactory
data = [x.as_numpy_array() for x in loader.get_raw_data(54598)]
data32 = array([hstack([data[i*2], data[i*2+1]]) for i in range(32)])
data2 = data32.copy()
data2[loader.gain] /= loader.nominal_gain_val
imshow(data2[0], vmin=-20, vmax=30)
figure(1)
figure()
imshow(data2[0], vmin=-20, vmax=30)
figure();imshow(data32[0], vmin=-20, vmax=30)
out2 = gain_utils.get_gain_dists(data2, loader.gain, loader.cspad_mask, plot=False, norm=True)
fit2 = fit_utils.fit_low_gain_dist(out2[0], out2[1], plot=1)
fit2H = fit_utils.fit_high_gain_dist(out2[2], out2[3], plot=1)
fit2H
fit2H[0]
fit2H[1]
fit2H[2]
fit2H[2].x
fit2H[2].param
fit2H[2].params
fit2H[2].params['mu1']
fit2H[2].params['mu1'].value
fit2H[2].params['mu1'].value
fit2[2].params['mu1'].value
27.402076353130738 / 4.0863837771690239
data3 = data2.copy()
data3[loader.gain] *= 6.70570309774341
figure();imshow(data3[0], vmin=-20, vmax=30)