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