Beispiel #1
0
def test1():
    s1 = SigProc(nSamples=16384, nAdcCh=20, nSdmCh=19, adcSdmCycRatio=5)
    # data1 = s1.generate_adcDataBuf()
    # data2 = s1.generate_sdmDataBuf()
    # data1 = ((s1.ANALYSIS_WAVEFORM_BASE_TYPE * s1.nSamples) * s1.nAdcCh)()
    data1 = (s1.ANALYSIS_WAVEFORM_BASE_TYPE * (s1.nSamples * s1.nAdcCh))()
    # data1 = ((s1.ANALYSIS_WAVEFORM_BASE_TYPE * s1.nSamples) * s1.nAdcCh)()
    # print len(data1[0])
    print type(data1)
    # print type(byref(data1[0]))
    print type(pointer(data1))
    data1 = array('f', [0] * (16384 * 20))
    inRoot = 'data/fpgaLin/Feb09b_data_581.root'
    fout1 = TFile(inRoot, 'read')
    tree1 = fout1.Get('tree1')
    tree1.SetBranchAddress('adc', data1)

    i = 37
    tree1.GetEntry(i)
    # print data1[3]

    sp1 = SignalProcessor()
    sp1.nAdcCh = 20
    # sp1.sRanges.clear()
    # sp1.sRanges.push_back((0,3000))
    # sp1.sRanges.push_back((3000,8000))
    # sp1.sRanges.push_back((8000,15000))
    # sp1.measure_pulse(byref(data1))
    # sp1.measure_pulse(pointer(data1))
    # sp1.measure_pulse(data1)
    print sp1.nMeasParam

    f = 1000
    a = 16384 * 0.2 * f * 0.000001
    print 16384 * 0.2 * f * 0.000001
    n1 = int(1 / (0.2 * f * 0.000001))
    print n1
    sp1.sRanges.clear()
    ip = 0
    while ip + n1 < sp1.nSamples:
        iq = ip + n1
        #     if iq > sp1.nSamples: iq = sp1.nSamples
        #     a = (ip, iq)
        sp1.sRanges.push_back((ip, iq))
        ip = iq
    #
    sp1.measure_pulse(data1)
    for i in range(sp1.nAdcCh):
        #     print i, sp1.measParam[sp1.nMeasParam*i], sp1.measParam[sp1.nMeasParam*i+1], sp1.measParam[sp1.nMeasParam*i+2], sp1.measParam[sp1.nMeasParam*i+3]
        print i,
        for j in range(sp1.nMeasParam):
            print sp1.measParam[sp1.nMeasParam * i + j],
        print
    sp1.test2()
def readSignal(inRoot, outText, freq=1000):
    sp1 = SignalProcessor()
    sp1.nSamples = 16384
    sp1.nAdcCh = 20
    sp1.fltParam.clear()
    for x in [50, 150, 200, -1.]:
        sp1.fltParam.push_back(x)

    n1 = int(1 / (0.2 * freq * 0.000001))
    sp1.sRanges.clear()
    ip = 0
    dn = 2500 % n1  ## 2500 is the expected position of the signal
    #     while ip+dn < sp1.nSamples:
    #         sp1.sRanges.push_back((ip, min(ip+n1, sp1.nSamples)))
    #         ip += n1

    sp1.sRanges.push_back((0, 400))
    #     while ip+n1<sp1.nSamples:
    #         sp1.sRanges.push_back((ip, ip+n1))
    #         ip += n1

    data1 = array('f', [0] * (sp1.nSamples * sp1.nAdcCh))

    #     inRoot = 'data/fpgaLin/Jan21b_C2_100mV_f1000.root'
    fout1 = TFile(inRoot, 'read')
    tree1 = fout1.Get('tree1')
    tree1.SetBranchAddress('adc', data1)

    with open(outText, 'w') as fout:
        fout.write(':'.join(
            ['sID/I', 'ch/I', 'B/F', 'dB/F', 'im/I', 'idx/I', 'A/F']))

        for ievt in range(tree1.GetEntries()):
            tree1.GetEntry(ievt)

            sp1.measure_pulse(data1)
            for i in range(sp1.nAdcCh):
                itmp = sp1.nMeasParam * i
                for j in range(sp1.nMeasParam / 2 - 1):
                    fout.write('\n' + ' '.join([
                        str(ievt),
                        str(i),
                        str(sp1.measParam[itmp]),
                        str(sp1.measParam[itmp + 1]),
                        str(j),
                        str(int(sp1.measParam[itmp + 2 * j + 2])),
                        str(sp1.measParam[itmp + 2 * j + 3])
                    ]))
def readSignal2(inRoot, oTag=None, freq=1000, runPattern='.*_data_(\d+).root'):
    if oTag is None:
        oTag = readSignal2.oTag
    print "Starting", inRoot, oTag
    #     return

    run = -1
    if runPattern is not None:
        m = re.match(runPattern, inRoot)
        if m:
            run = int(m.group(1))
    print run

    sp1 = SignalProcessor()
    sp1.nSamples = 16384
    sp1.nAdcCh = 20
    sp1.fltParam.clear()
    for x in [50, 150, 250, 2500]:
        sp1.fltParam.push_back(x)
    #     for x in [50, 150, 200, -1.]: sp1.fltParam.push_back(x)
    #     for x in [50, 150, 200, 2500]: sp1.fltParam.push_back(x)
    #     for x in [50, 15, 50, 2500]: sp1.fltParam.push_back(x)
    #     for x in [500, 450, 800, 2500]: sp1.fltParam.push_back(x)

    n1 = int(1 / (0.2 * freq * 0.000001))
    sp1.sRanges.clear()
    ip = 0
    dn = 2500 % n1  ## 2500 is the expected position of the signal
    #     while ip+dn < sp1.nSamples:
    #         sp1.sRanges.push_back((ip, min(ip+n1, sp1.nSamples)))
    #         ip += n1

    #     sp1.sRanges.push_back((0, 400))
    sp1.sRanges.push_back((0, 3000))

    data1 = array('f', [0] * (sp1.nSamples * sp1.nAdcCh))
    dataT = array('i', [0])

    fin1 = TFile(inRoot, 'read')
    tree1 = fin1.Get('tree1')
    tree1.SetBranchAddress('adc', data1)
    tree1.SetBranchAddress('T', dataT)

    fout1 = TFile(
        os.path.dirname(inRoot) + '/' + oTag + os.path.basename(inRoot),
        'recreate')
    tup1 = TNtuple('tup1', "filter analysis tuple",
                   'run:sID:ch:B:dB:im:idx:A:T')

    for ievt in range(tree1.GetEntries()):
        tree1.GetEntry(ievt)

        sp1.measure_pulse(data1)
        for i in range(sp1.nAdcCh):
            itmp = sp1.nMeasParam * i
            for j in range(sp1.nMeasParam / 2 - 1):
                tup1.Fill(run, ievt, i, sp1.measParam[itmp],
                          sp1.measParam[itmp + 1], j,
                          sp1.measParam[itmp + 2 * j + 2],
                          sp1.measParam[itmp + 2 * j + 3],
                          dataT[0] - 788947200)

    tup1.Write()
    fout1.Close()
Beispiel #4
0
def main():
    inRoot = sys.argv[1] if len(sys.argv) > 1 else "test.root"
    ich = int(sys.argv[2]) if len(sys.argv) > 2 else 0
    sp1 = SignalProcessor()
    sp1.nSamples = 16384
    sp1.nAdcCh = 20
    sp1.fltParam.clear()
    for x in [50, 150, 200, -1.]:
        sp1.fltParam.push_back(x)

    freq = 1000
    n1 = int(1 / (0.2 * freq * 0.000001))
    sp1.sRanges.clear()
    ip = 0
    dn = 2500 % n1  ## 2500 is the expected position of the signal
    while ip + dn < sp1.nSamples:
        sp1.sRanges.push_back((ip, min(ip + n1, sp1.nSamples)))
        ip += n1

    data1 = array('f', [0] * (sp1.nSamples * sp1.nAdcCh))

    fout1 = TFile(inRoot, 'read')
    tree1 = fout1.Get('tree1')
    tree1.SetBranchAddress('adc', data1)

    ### range
    eRange = None
    if len(sys.argv) > 3:
        lx = []
        r = sys.argv[3].split(',')
        for ri in r:
            si = ri.find('-')
            if si == -1:
                lx.append(int(ri))
            else:
                end = tree1.GetEntries() if si == len(ri) - 1 else int(ri[si +
                                                                          1:])
                lx += range(int(ri[:si]), end)
        eRange = lx
    else:
        eRange = range(tree1.GetEntries())

    ### plotting
    plt.ion()
    plt.show()

    fig, ax1 = plt.subplots()
    ax1.set_xlabel('time (s)')
    # Make the y-axis label, ticks and tick labels match the line color.
    ax1.set_ylabel('exp', color='b')
    ax1.tick_params('y', colors='b')
    ax2 = ax1.twinx()
    ax2.set_ylabel('sin', color='r')
    ax2.tick_params('y', colors='r')

    #     for i in range(10):
    for i in eRange:
        print i
        tree1.GetEntry(i)
        sp1.measure_pulse(data1, ich)

        ax1.clear()
        ax1.plot(data1[sp1.nSamples * ich:sp1.nSamples * (ich + 1)])
        ax2.clear()
        ax2.plot([sp1.scrAry[i] for i in range(sp1.nSamples)], 'r.')
        fig.tight_layout()
        plt.draw()
        plt.pause(0.001)
        x = raw_input("Press [enter] to continue.")
        if x == 'q': break
Beispiel #5
0
def check0():
    inRoot = sys.argv[1] if len(sys.argv) > 1 else "test.root"
    ich = int(sys.argv[2]) if len(sys.argv) > 2 else 0
    sp1 = SignalProcessor()
    sp1.nSamples = 16384
    sp1.nAdcCh = 20
    freq = 1000
    n1 = int(1 / (0.2 * freq * 0.000001))
    sp1.sRanges.clear()
    ip = 0
    dn = 2500 % n1  ## 2500 is the expected position of the signal
    while ip + dn < sp1.nSamples:
        sp1.sRanges.push_back((ip, min(ip + n1, sp1.nSamples)))
        ip += n1

    data1 = array('f', [0] * (sp1.nSamples * sp1.nAdcCh))

    fout1 = TFile(inRoot, 'read')
    tree1 = fout1.Get('tree1')
    tree1.SetBranchAddress('adc', data1)

    ### range
    eRange = None
    if len(sys.argv) > 3:
        lx = []
        r = sys.argv[3].split(',')
        for ri in r:
            si = ri.find('-')
            if si == -1:
                lx.append(int(ri))
            else:
                end = tree1.GetEntries() if si == len(ri) - 1 else int(ri[si +
                                                                          1:])
                lx += range(int(ri[:si]), end)
        eRange = lx
    else:
        eRange = range(tree1.GetEntries())

    ### plotting
    plt.ion()
    plt.show()

    fig, ax1 = plt.subplots()
    ax1.set_xlabel('time (s)')
    # Make the y-axis label, ticks and tick labels match the line color.
    ax1.set_ylabel('exp', color='b')
    ax1.tick_params('y', colors='b')
    ax2 = ax1.twinx()
    ax2.set_ylabel('sin', color='r')
    ax2.tick_params('y', colors='r')

    #     fl1 = Filter_ibl(sp1.nSamples)
    #     fl1.setup(2,3e-3)
    fl1 = Filter_ibb(sp1.nSamples)
    fl1.setup(4, 2e-3, 5e-3)

    #     for i in range(10):

    for i in eRange:
        print i
        tree1.GetEntry(i)
        ax1.clear()
        ax1.plot(data1[sp1.nSamples * ich:sp1.nSamples * (ich + 1)])
        ax2.clear()

        sp1.fltParam.clear()
        #         for x in [500, 150, 200, 2500]: sp1.fltParam.push_back(x)
        for x in [500, 800, 2000, 2500]:
            sp1.fltParam.push_back(x)
        sp1.measure_pulse(data1, ich)
        ax2.plot([sp1.scrAry[i] for i in range(sp1.nSamples)], 'r.')

        sp1.fltParam.clear()
        for x in [500, 15, 50, 2500]:
            sp1.fltParam.push_back(x)
        #         for x in [500, 150, 200, 2500]: sp1.fltParam.push_back(x)
        sp1.measure_pulse(data1, ich)
        #         ax2.plot([sp1.scrAry[i] for i in range(sp1.nSamples)], 'g.')

        vx = np.array([sp1.scrAry[i] for i in range(sp1.nSamples)])
        ax2.plot(vx, 'g.')

        fl1.apply(sp1.scrAry)
        vf1 = np.array([fl1.outWav[i] for i in range(sp1.nSamples)])
        ax2.plot(vf1, 'm.')

        #         peakind = find_peaks_cwt(vx, np.arange(1,100))
        #         peaks = find_peaks_cwt(vx, np.array([5, 10, 20,30,50,100,200,350]), min_snr=50)
        #         print peaks, vx[peaks]
        #         peaks, properties = signal.find_peaks(vx, prominence=1, width=20)
        #         plt.plot(peaks, vx[peaks], "x")

        fig.tight_layout()
        plt.draw()
        plt.grid(True)
        plt.pause(0.001)
        x = raw_input("Press [enter] to continue.")
        if x == 'q': break
Beispiel #6
0
def check1(inRoot, chRange=None, nEvt=None, oTag='_tt'):
    '''Use various filters to extract the results'''

    if os.path.exists(inRoot.rstrip('.root') + oTag + '.root'):
        print "has:", inRoot
        return


#     print inRoot
#     return
    sp1 = SignalProcessor()
    sp1.nSamples = 16384
    sp1.nAdcCh = 20
    freq = 1000
    n1 = int(1 / (0.2 * freq * 0.000001))
    sp1.sRanges.clear()
    ip = 0
    dn = 2500 % n1  ## 2500 is the expected position of the signal
    while ip + dn < sp1.nSamples:
        sp1.sRanges.push_back((ip, min(ip + n1, sp1.nSamples)))
        ip += n1

    data1 = array('f', [0] * (sp1.nSamples * sp1.nAdcCh))

    fin1 = TFile(inRoot, 'read')
    tree1 = fin1.Get('tree1')
    tree1.SetBranchAddress('adc', data1)
    if nEvt is None: nEvt = tree1.GetEntries()
    if chRange is None: chRange = range(sp1.nAdcCh)

    fout1 = TFile(inRoot.rstrip('.root') + oTag + '.root', 'recreate')
    tup1 = TNtuple('tup1', "filter analysis tuple",
                   'evt:fR:fW:ich:b:bE:im:idx:A')

    ### start processing
    INTV = 1000 if nEvt > 10000 else max(nEvt / 10, 1)
    for ievt in range(nEvt):
        tree1.GetEntry(ievt)

        if ievt % INTV == 0: print ievt, ' events processed'

        for R in range(50, 300, 50):
            for W in range(50, 600, 50):
                sp1.fltParam.clear()
                for x in [500, R, W, -1.]:
                    sp1.fltParam.push_back(x)
                sp1.measure_pulse(data1)

                for ich in chRange:
                    itmp = sp1.nMeasParam * ich
                    for j in range(sp1.nMeasParam / 2 - 1):
                        tup1.Fill(ievt, R, W, ich, sp1.measParam[itmp],
                                  sp1.measParam[itmp + 1], j,
                                  sp1.measParam[itmp + 2 * j + 2],
                                  sp1.measParam[itmp + 2 * j + 3])
    tup1.Write()

    ### save the ENC results
    tup2 = TNtuple('tup2', "filter analysis tuple enc",
                   'ich:fR:fW:m:mE:sigma:sigmaE:fq:fStatus')
    for R in range(50, 300, 50):
        for W in range(50, 600, 50):
            for ich in chRange:
                gDirectory.Delete('h1*')
                tup1.Draw(
                    'A>>h1',
                    'int(fW)=={0:d}&&int(fR)=={1:d}&&ich=={2:d}'.format(
                        W, R, ich), 'goff')
                h1 = gDirectory.Get('h1')
                r = h1.Fit('gaus', 'S0')
                fun1 = h1.GetFunction('gaus')
                tup2.Fill(ich, R, W, fun1.GetParameter(1), fun1.GetParError(1),
                          fun1.GetParameter(2), fun1.GetParError(2), r.Prob(),
                          r.Status())

    tup2.Write()
    fout1.Close()