コード例 #1
0
ファイル: test_impulse_response.py プロジェクト: teoarg/BLonD
    def test_wake(self):

        time = np.linspace(-0.1e-6, 0.7e-6, 1000)

        l_cav = 16.082
        v_g = 0.0946
        tau = l_cav / (v_g * c) * (1 + v_g)

        TWC_impedance_source = TravelingWaveCavity(l_cav**2 * 27.1e3 / 8,
                                                   200.222e6, 2 * np.pi * tau)

        TWC_impedance_source.wake_calc(time - time[0])
        wake_impSource = np.around(TWC_impedance_source.wake / 1e12, 12)

        TWC_impulse_response = SPS4Section200MHzTWC()
        # omega_c not need for computation of wake function
        TWC_impulse_response.impulse_response_beam(2 * np.pi * 200.222e6, time)
        TWC_impulse_response.impulse_response_gen(2 * np.pi * 200.222e6, time)
        TWC_impulse_response.compute_wakes(time)
        wake_impResp = np.around(TWC_impulse_response.W_beam / 1e12, 12)

        self.assertListEqual(
            wake_impSource.tolist(),
            wake_impResp.tolist(),
            msg="In TestTravelingWaveCavity test_wake: wake fields differ")
コード例 #2
0
    def test_3(self):

        TWC = SPS4Section200MHzTWC()
        filter, n_taps, n_filling, n_fit = feedforward_filter(TWC,
                                                              self.T_s,
                                                              debug=False,
                                                              opt_output=True)
        self.assertEqual(
            n_taps,
            37,
            msg="In TestFeedforwardFilter, test_3: n_taps incorrect")
        self.assertEqual(
            n_filling,
            24,
            msg="In TestFeedforwardFilter, test_3: n_filling incorrect")
        self.assertEqual(
            n_fit, 61, msg="In TestFeedforwardFilter, test_3: n_fit incorrect")

        #        filter_ref = np.array(
        #            [ 0.0048142895, 0.0035544775, 0.0011144336, 0.0011144336,
        #              0.0011144336, -0.0056984584, -0.0122587698, -0.0054458778,
        #              0.0011144336, 0.0011144336, 0.0011144336, -0.0001684528,
        #             -0.000662115, 0.0016716504, 0.0016716504, 0.0016716504,
        #              0.0016716504, 0.0016716504, 0.0016716504, 0.0016716504,
        #              0.0016716504, 0.0016716504, 0.0016716504, 0.0016716504,
        #              0.0040787952, 0.0034488892, 0.0022288672, 0.0022288672,
        #              0.0022288672, 0.0090417593, 0.0146881621, 0.0062036196,
        #             -0.0011144336, -0.0011144336, -0.0011144336, -0.0036802064,
        #             -0.0046675309])
        filter_ref = np.copy(feedforward_filter_TWC4)

        np.testing.assert_allclose(
            filter,
            filter_ref,
            rtol=1e-8,
            atol=1e-9,
            err_msg="In TestFeedforwardFilter, test_3: filter array incorrect")

        del TWC
コード例 #3
0
    ax8 = ax7.twinx()
    ax8.plot(t_coarse*1e6, rf_current_coarse.real, 'b', label='coarse, real')
    ax8.plot(t_coarse*1e6, rf_current_coarse.imag, 'r', label='coarse, imag')
    ax8.plot(t_coarse*1e6, np.absolute(rf_current_coarse), 'purple', label='coarse, abs')
    ax8.set_ylabel("RF current [A]")
    ax8.legend()
    logging.info("Peak beam current, meas %.10f A" %(peak_rf_current))
    logging.info("Peak beam current, theor %.4f A" %(2*N_b*e/bunch_spacing))


if IMP_RESP == True:

    # Impulse response of beam- and generator-induced voltage for TWC
    # Comparison of wake and impulse resonse
    time = np.linspace(-1e-6, 4.e-6, 10000)
    TWC_v1 = SPS4Section200MHzTWC()
    TWC_v1.impulse_response_beam(2*np.pi*f_rf, time)
    TWC_v1.impulse_response_gen(2*np.pi*f_rf, time)
    TWC_v1.compute_wakes(time)
    TWC_v2 = TravelingWaveCavity(0.876e6, f_rf, 2*np.pi*6.207e-7)
    TWC_v2.wake_calc(time - time[0])
    t_beam = time - time[0]
    t_gen = time - time[0] - 0.5*TWC_v1.tau

    plt.figure()
    plt.plot(TWC_v2.time_array, TWC_v2.wake, 'b', marker='.', label='wake, impedances')
    plt.plot(t_beam, TWC_v1.W_beam, 'r', marker='.', label='cav wake, OTFB')
    plt.plot(t_beam, TWC_v1.h_beam.real, 'g', marker='.', label='hs_cav, OTFB')
    plt.plot(t_gen, TWC_v1.W_gen, 'orange', marker='.', label='gen wake, OTFB')
    plt.plot(t_gen, TWC_v1.h_gen.real, 'purple', marker='.', label='hs_gen, OTFB')
    plt.xlabel("Time [s]")
コード例 #4
0
    TWC = SPS3Section200MHzTWC()
    TWC.tau = 420e-9
    filter, n_taps, n_filling, n_fit = feedforward_filter(TWC,
                                                          4 / 125 * 1e-6,
                                                          debug=True,
                                                          taps=31,
                                                          opt_output=True)
    #    print(filter)

    logging.info("3-section cavity filter design")
    TWC_3 = SPS3Section200MHzTWC()
    filter = feedforward_filter(TWC_3, T_s, debug=True)
    #    print(filter)

    logging.info("4-section cavity filter design")
    TWC_4 = SPS4Section200MHzTWC()
    filter = feedforward_filter(TWC_4, T_s, debug=True)
    #    print(filter)

    logging.info("5-section cavity filter design")
    TWC_5 = SPS5Section200MHzTWC()
    filter = feedforward_filter(TWC_5, T_s, debug=True)
#    print(filter)

if FEEDFORWARD:

    # Single bunch
    bunch = Beam(ring, N_m, N_b)
    bigaussian(ring, rf, bunch, 3.2e-9 / 4, seed=1234, reinsertion=True)
    logging.info("Bunch spacing %.3e s", rf.t_rf[0, 0] * bunch_spacing)