def get_darks(fname,
              protoevent,
              roi_start=9,
              ref_cm=89.5,
              dev_cm=None,
              roi_width=180,
              nchannels=2):
    """dev_cm should be the same as in the normal cut, so it gets calculated
    in the same way"""
    print fname
    st, wd = roi_start, roi_width
    my_dtype = return_dtype(2)
    protoevent = array(protoevent, dtype=uint16)
    if dev_cm is None:
        spom, spam, dev_cm = find_start(fname, 340, roi_width, nchannels)

    with open(fname, 'r') as f:
        gen = (fromstring(event, my_dtype)[0][5]
               for event in event_generator(f, 2))
        specdata = [
            sum((event + protoevent)[st:st + wd]) for event in gen if
            abs(center_of_mass(-(event + protoevent)[st:st + wd])[0] -
                ref_cm) < dev_cm
        ]
    return histogram(specdata, bins=2048)
def get_spec(fname, roi_start, roi_width=180, nchannels=2, force_start=False,
             **kwargs):
    """return a sipm spectrum using the cm method as a cut.
    roi_start is the star of the region of interest, + roi_width channels
    ref_cm is the reference center of mass. if None then mean(cm) of all events
    will be calculated.
    dev_cm is the allowed deviation from ref_cm. if None then std(cm)
    of all events will be calculated.
    nchannels is the number of DRS channels with data. either 1 or 2"""

    st, wd = roi_start, roi_width
    my_dtype = return_dtype(nchannels)
    if not force_start:
        st, ref_cm, dev_cm = find_start(fname, roi_start, roi_width, nchannels,
                                        **kwargs)
    else:
        cmsarr = cms_(fname, roi_start, roi_width, nchannels)
        cmhist = histogram(cmsarr, bins=512)
        ref_cm = cmhist[1][argmax(cmhist[0])]
        dev_cm = dev_cm_(cmsarr)

    with open(fname, 'r') as f:
        gen = (fromstring(event, my_dtype)[0][5]
               for event in event_generator(f, nchannels))
        specdata = [sum(event[st:st + wd]) for event in gen
                    if abs(center_of_mass(- event[st:st + wd])[0] - ref_cm)
                    < dev_cm]
    return histogram(specdata, bins=2048)
def get_spec(fname,
             roi_start,
             roi_width=180,
             nchannels=2,
             force_start=False,
             **kwargs):
    """return a sipm spectrum using the cm method as a cut.
    roi_start is the star of the region of interest, + roi_width channels
    ref_cm is the reference center of mass. if None then mean(cm) of all events
    will be calculated.
    dev_cm is the allowed deviation from ref_cm. if None then std(cm)
    of all events will be calculated.
    nchannels is the number of DRS channels with data. either 1 or 2"""

    st, wd = roi_start, roi_width
    my_dtype = return_dtype(nchannels)
    if not force_start:
        st, ref_cm, dev_cm = find_start(fname, roi_start, roi_width, nchannels,
                                        **kwargs)
    else:
        cmsarr = cms_(fname, roi_start, roi_width, nchannels)
        cmhist = histogram(cmsarr, bins=512)
        ref_cm = cmhist[1][argmax(cmhist[0])]
        dev_cm = dev_cm_(cmsarr)

    with open(fname, 'r') as f:
        gen = (fromstring(event, my_dtype)[0][5]
               for event in event_generator(f, nchannels))
        specdata = [
            sum(event[st:st + wd]) for event in gen
            if abs(center_of_mass(-event[st:st + wd])[0] - ref_cm) < dev_cm
        ]
    return histogram(specdata, bins=2048)
def cms_(fname, roi_start, roi_width, nchannels=2):
    st, wd = roi_start, roi_width
    my_dtype = return_dtype(nchannels)
    with open(fname, 'r') as f:
        gen = (fromstring(event, my_dtype)[0][5]
               for event in event_generator(f, nchannels))
        cms = [center_of_mass(-event[st:st + wd])[0] for event in gen]
    return cms
def cms_(fname, roi_start, roi_width, nchannels=2):
    st, wd = roi_start, roi_width
    my_dtype = return_dtype(nchannels)
    with open(fname, 'r') as f:
        gen = (fromstring(event, my_dtype)[0][5]
               for event in event_generator(f, nchannels))
        cms = [center_of_mass(-event[st:st + wd])[0] for event in gen]
    return cms
Esempio n. 6
0
def peaks(filename, int_limits, nchannels=2):

    print 'getting peak spectrum'
    my_dtype = return_dtype(nchannels)
    with open(filename, 'r') as f:
        gen = (fromstring(event, my_dtype)[0][5]
               for event in event_generator(f, nchannels))
        peaks = [sum(event[int_limits[0]:int_limits[1]]) for event in gen]

    return peaks
def cms_dark(fname, roi_start, roi_width, protoevent):
    st, wd = roi_start, roi_width
    my_dtype = return_dtype(2)
    protoevent = array(protoevent, dtype=uint16)
    with open(fname, 'r') as f:
        gen = (fromstring(event, my_dtype)[0][5]
               for event in event_generator(f, 2))
        cms = [center_of_mass(-(event + protoevent)[st:st + wd])[0]
               for event in gen]
    return cms
def peaks(filename, int_limits, nchannels=2):

    print 'getting peak spectrum'
    my_dtype = return_dtype(nchannels)
    with open(filename, 'r') as f:
        gen = (fromstring(event, my_dtype)[0][5]
               for event in event_generator(f, nchannels))
        peaks = [sum(event[int_limits[0]:int_limits[1]]) for event in gen]

    return peaks
def cms_dark(fname, roi_start, roi_width, protoevent):
    st, wd = roi_start, roi_width
    my_dtype = return_dtype(2)
    protoevent = array(protoevent, dtype=uint16)
    with open(fname, 'r') as f:
        gen = (fromstring(event, my_dtype)[0][5]
               for event in event_generator(f, 2))
        cms = [
            center_of_mass(-(event + protoevent)[st:st + wd])[0]
            for event in gen
        ]
    return cms
Esempio n. 10
0
def find_threshold(filename, int_limits, nchannels=2):
    b, a = iirfilter(1, 0.05, btype='lowpass')
    my_dtype = return_dtype(nchannels)

    with open(filename, 'r') as f:
        gen = (fromstring(event, my_dtype)[0][5]
               for event in event_generator(f, nchannels))
        peaks = [min(event[int_limits[0]:int_limits[1]])for event
                 in (filtfilt(b, a, eventt) for eventt in gen)]
    hist = histogram(peaks, bins=2048)
    idx = get_cutoff(hist[0], get_guess(hist[0]))
    threshold = hist[1][idx]
    print threshold
    return threshold
Esempio n. 11
0
def find_threshold(filename, int_limits, nchannels=2):
    b, a = iirfilter(1, 0.05, btype='lowpass')
    my_dtype = return_dtype(nchannels)

    with open(filename, 'r') as f:
        gen = (fromstring(event, my_dtype)[0][5]
               for event in event_generator(f, nchannels))
        peaks = [min(event[int_limits[0]:int_limits[1]])for event
                 in (filtfilt(b, a, eventt) for eventt in gen)]
    hist = histogram(peaks, bins=2048)
    idx = get_cutoff(hist[0], get_guess(hist[0]))
    threshold = hist[1][idx]
    print threshold
    return threshold
Esempio n. 12
0
def darks(filename, thrs_1, thrs_2=None, rng=(40, 800), nchannels=2):

    print 'getting dark count spectum'
    if thrs_2 is None:
        thrs_2 = thrs_1
    my_dtype = return_dtype(nchannels)

    with open(filename, 'r') as f:
        gen = (fromstring(event, my_dtype)[0][5]
               for event in event_generator(f, nchannels))
        traces = []

        for event in gen:
            traces.append(trigger(thrs_1, event, rng))

    return [sm for sm in (fsum(trace) for trace in traces) if sm > 0]
Esempio n. 13
0
def darks(filename, thrs_1, thrs_2=None, rng=(40, 800), nchannels=2):

    print 'getting dark count spectum'
    if thrs_2 is None:
        thrs_2 = thrs_1
    my_dtype = return_dtype(nchannels)

    with open(filename, 'r') as f:
        gen = (fromstring(event, my_dtype)[0][5]
               for event in event_generator(f, nchannels))
        traces = []

        for event in gen:
            traces.append(trigger(thrs_1, event, rng))

    return [sm for sm in (fsum(trace) for trace in traces) if sm > 0]
Esempio n. 14
0
def get_darks(fname, protoevent, roi_start=9, ref_cm=89.5, dev_cm=None,
              roi_width=180, nchannels=2):
    """dev_cm should be the same as in the normal cut, so it gets calculated
    in the same way"""
    print fname
    st, wd = roi_start, roi_width
    my_dtype = return_dtype(2)
    protoevent = array(protoevent, dtype=uint16)
    if dev_cm is None:
        spom, spam, dev_cm = find_start(fname, 340, roi_width, nchannels)

    with open(fname, 'r') as f:
        gen = (fromstring(event, my_dtype)[0][5]
               for event in event_generator(f, 2))
        specdata = [sum((event + protoevent)[st:st + wd]) for event in gen
                    if abs(center_of_mass(-
                           (event + protoevent)[st:st + wd])[0] - ref_cm)
                    < dev_cm]
    return histogram(specdata, bins=2048)
Esempio n. 15
0
def get_dark_counts(filelist, w_start, w_len):
    my_dtype = return_dtype(2)
    darks = []
    for fn in filelist:
        with open(fn, 'r') as fl:
            sipm_data = (fromstring(event, my_dtype)[0][5]
                         for event in event_generator(fl, 2))
            sipm_max = [sum(event[w_start - w_len:w_start])
                        for event in sipm_data]
            sipm_spec = histogram(sipm_max, bins=2048)[0]
            guess = get_guess(sipm_spec)
            cutoff = get_cutoff(sipm_spec, get_cutoff(sipm_spec, guess))
            mn = get_n_mean(sipm_spec, cutoff)
            if mn < 1:
                darks.append(mn)
        """dkcts = median(darks)
        dkcts_err = max(abs(median(darks) - percentile(darks, i))
                        for i in (80, 20))"""
    dkcts = mean(darks)
    dkcts_err = std(darks)

    print dkcts, dkcts_err
    return dkcts, dkcts_err
Esempio n. 16
0
def get_dark_counts(filelist, w_start, w_len):
    my_dtype = return_dtype(2)
    darks = []
    for fn in filelist:
        with open(fn, 'r') as fl:
            sipm_data = (fromstring(event, my_dtype)[0][5]
                         for event in event_generator(fl, 2))
            sipm_max = [
                sum(event[w_start - w_len:w_start]) for event in sipm_data
            ]
            sipm_spec = histogram(sipm_max, bins=2048)[0]
            guess = get_guess(sipm_spec)
            cutoff = get_cutoff(sipm_spec, get_cutoff(sipm_spec, guess))
            mn = get_n_mean(sipm_spec, cutoff)
            if mn < 1:
                darks.append(mn)
        """dkcts = median(darks)
        dkcts_err = max(abs(median(darks) - percentile(darks, i))
                        for i in (80, 20))"""
    dkcts = mean(darks)
    dkcts_err = std(darks)

    print dkcts, dkcts_err
    return dkcts, dkcts_err
Esempio n. 17
0
def extract_pde(dark_counts=False,
                cutoff=32675,
                w_start=340,
                w_len=180,
                small_pmt_win=False,
                print_pe=False):

    filelist = [fname for fname in glob('*_*') if not '.' in fname]
    wavelengths = unique(i[:-2] for i in filelist)
    QE_file = '/home/jammer/diplom/calib/pmt2c.dat'
    f = loadtxt(QE_file, unpack=True)

    pde_array = []
    wavelength_array = []
    sterr_array = []
    syserr_array = []

    my_dtype = return_dtype(2)

    if not dark_counts:
        dark_counts = get_dark_counts(filelist, w_start, w_len)

    for wavelength in wavelengths:
        A = []
        B = []
        quantum_eff = f[2][where(f[0] == float(wavelength))[0][0]]

        for i in range(2):
            #data = read_drs_binary(wavelength + '_' +str(i+1), 2)
            fname = wavelength + '_' + str(i + 1)
            #create sipm spectrum
            with open(fname, 'r') as fl:
                sipm_data = (fromstring(event, my_dtype)[0][5]
                             for event in event_generator(fl, 2))

                sipm_max = [
                    sum(event[w_start:w_start + w_len]) for event in sipm_data
                ]
                sipm_spec = histogram(sipm_max, bins=2048)[0]

            #create pmt spectrum
            with open(fname, 'r') as fl:
                pmt_data = (fromstring(event, my_dtype)[0][7]
                            for event in event_generator(fl, 2))

                pmt_sum = [sum(event[600:900]) for event in pmt_data]
                pmt_spec = histogram(pmt_sum, bins=2048)[0]

            sipm_guess = get_guess(sipm_spec)
            sipm_pe = get_nmean_errors(sipm_spec,
                                       get_cutoff(sipm_spec, guess=sipm_guess))
            pmt_pe = get_nmean_errors(pmt_spec, get_co_exp(pmt_spec, 1950))
            #if pmt_pe == inf or small_pmt_win:
            #    pmt_pe = get_nmean_errors(pmt_spec, get_cutoff(pmt_spec,
            #                              1950, window=10))
            if print_pe:
                print 'sipm pe' + str(sipm_pe)
                print 'pmt pe' + str(pmt_pe)

            A.append(sipm_pe)
            B.append(pmt_pe)

        real_wl = correct_wavelength(float(wavelength))
        pde, sterr, syserr = calc_pde_with_errors(A[0],
                                                  A[1],
                                                  B[0],
                                                  B[1],
                                                  quantum_eff,
                                                  dkcts=dark_counts)
        print ' '.join((str((pde, sterr, syserr)), wavelength))
        pde_array.append(pde)
        wavelength_array.append(real_wl)
        sterr_array.append(sterr)
        syserr_array.append(syserr)

    return pde_array, wavelength_array, sterr_array, syserr_array
Esempio n. 18
0
def extract_pde(dark_counts=False, cutoff=32675, w_start=340,
                w_len=180, small_pmt_win=False, print_pe=False):

    filelist = [fname for fname in glob('*_*') if not '.' in fname]
    wavelengths = unique(i[:-2] for i in filelist)
    QE_file = '/home/jammer/diplom/calib/pmt2c.dat'
    f = loadtxt(QE_file, unpack=True)

    pde_array = []
    wavelength_array = []
    sterr_array = []
    syserr_array = []

    my_dtype = return_dtype(2)

    if not dark_counts:
        dark_counts = get_dark_counts(filelist, w_start, w_len)

    for wavelength in wavelengths:
        A = []
        B = []
        quantum_eff = f[2][where(f[0] == float(wavelength))[0][0]]

        for i in range(2):
            #data = read_drs_binary(wavelength + '_' +str(i+1), 2)
            fname = wavelength + '_' + str(i+1)
            #create sipm spectrum
            with open(fname, 'r') as fl:
                sipm_data = (fromstring(event, my_dtype)[0][5]
                             for event in event_generator(fl, 2))

                sipm_max = [sum(event[w_start:w_start + w_len])
                            for event in sipm_data]
                sipm_spec = histogram(sipm_max, bins=2048)[0]

            #create pmt spectrum
            with open(fname, 'r') as fl:
                pmt_data = (fromstring(event, my_dtype)[0][7]
                            for event in event_generator(fl, 2))

                pmt_sum = [sum(event[600:900]) for event in pmt_data]
                pmt_spec = histogram(pmt_sum, bins=2048)[0]

            sipm_guess = get_guess(sipm_spec)
            sipm_pe = get_nmean_errors(sipm_spec,
                                       get_cutoff(sipm_spec, guess=sipm_guess))
            pmt_pe = get_nmean_errors(pmt_spec, get_co_exp(pmt_spec, 1950))
            #if pmt_pe == inf or small_pmt_win:
            #    pmt_pe = get_nmean_errors(pmt_spec, get_cutoff(pmt_spec,
            #                              1950, window=10))
            if print_pe:
                print 'sipm pe' + str(sipm_pe)
                print 'pmt pe' + str(pmt_pe)

            A.append(sipm_pe)
            B.append(pmt_pe)

        real_wl = correct_wavelength(float(wavelength))
        pde, sterr, syserr = calc_pde_with_errors(A[0], A[1], B[0], B[1],
                                                  quantum_eff,
                                                  dkcts=dark_counts)
        print ' '.join((str((pde, sterr, syserr)), wavelength))
        pde_array.append(pde)
        wavelength_array.append(real_wl)
        sterr_array.append(sterr)
        syserr_array.append(syserr)

    return pde_array, wavelength_array, sterr_array, syserr_array