Esempio n. 1
0
    def __init__(self):
        super(HandlesProc, self).__init__()
        self.handles: dict = {}
        self.handle_descr: dict = {}
        self.orbit_rma_knob = {}

        self.cell_col: dict = {0: 'name', 1: 'descr'}
        self.client_list: list = ['handle', 'rm_proc', 'inj_vs_handles', 'orbitd']
        self.cmd_table: dict = {
            'add_handle': self.add_handle_, 'handle_complete': self.handle_complete_, 'add_cor': self.add_cor_,
            'delete_handle': self.delete_handle_, 'edit_item': self.edit_item_,
            'step_up': self.step_up_, 'cst_step_up': self.cst_step_up_,
            'step_down': self.step_down_, 'cst_step_down': self.cst_step_down_,
            'add_orbit_rma_knob': self.add_orbit_rma_knob_, 'orbit_rma_step_up': self.orbit_rma_step_up_,
            'orbit_rma_step_down': self.orbit_rma_step_down_, 'add_orbit_rma_corr': self.add_orbit_rma_corr_,
            'orbit_rma_knob_complete': self.orbit_rma_knob_complete_
        }
        self.knob_is_adding: bool = False
        self.knob_orbit_is_adding: bool = False
        self.tmp = {}
        self.i = 0

        soft_conf = load_config_knob(CONF + '/knobd_conf.txt')
        chan_conf = soft_conf['chans_conf']
        for chan in ['res', 'cmd']:
            if chan not in chan_conf:
                print(chan + ' is absent in knobd_conf')

        self.chan_cmd = cda.StrChan(**chan_conf['cmd'])
        self.chan_cmd.valueMeasured.connect(self.cmd)
        self.chan_res = cda.StrChan(**chan_conf['res'])

        self.load_handles()
        print('start')
Esempio n. 2
0
    def __init__(self, bpm, collect_orbit, collect_tunes, send_current,
                 send_fft, send_coor, CONF):
        super(BPM, self).__init__()
        self.collect_orbit, self.collect_tunes, self.send_current, self.send_fft, self.send_coor = \
            collect_orbit, collect_tunes, send_current, send_fft, send_coor

        chans_conf = load_config_bpm(CONF + '/bpm_conf.txt', bpm)
        for chan in ['datatxzi', 'numpts', 'tunes_range']:
            if chan not in chans_conf:
                print(bpm + ' ' + chan + ' is absent in bpm_conf')

        self.last_data_upd: int = 0
        self.no_connection: bool = False
        self.name: str = bpm
        self.turns_mes: int = 0
        self.act_state: int = 1
        self.marker: int = 0
        self.turn_num: int = 1
        self.data_len: int = 1024
        self.turn_slice: tuple = (100.0, 100.0)
        self.starting: bool = True
        self.coor: tuple = (0, 0)
        self.sigma: tuple = (0, 0)
        self.turn_arrays: nparray = np.ndarray([])
        self.x_bound: list = [0.345, 0.365]
        self.z_bound: list = [0.2, 0.4]

        self.chan_datatxzi = cda.VChan(**chans_conf['datatxzi'])
        self.chan_datatxzi.valueMeasured.connect(self.data_proc)
        self.chan_numpts = cda.DChan(**chans_conf['numpts'])
        self.chan_tunes_range = cda.StrChan(**chans_conf['tunes_range'])
        self.chan_tunes_range.valueMeasured.connect(self.tunes_range)
Esempio n. 3
0
    def __init__(self, bpm, collect_orbit, chan_tunes, chan_turns, chan_fft, chan_coor, collect_act_bpm, CONF):
        super(BPM, self).__init__()
        self.collect_orbit, self.chan_tunes, self.chan_turns, self.chan_fft, self.chan_coor, self.collect_act_bpm = \
            collect_orbit, chan_tunes, chan_turns, chan_fft, chan_coor, collect_act_bpm

        chans_conf = load_config_bpm(CONF + '/bpm_conf.txt', bpm)
        for chan in ['datatxzi', 'numpts', 'tunes_range', 'is_on', 'x', 'xstd', 'z', 'zstd']:
            if chan not in chans_conf:
                print(bpm + ' ' + chan + ' is absent in bpm_conf')

        self.chan_is_on = cda.DChan(**chans_conf['is_on'])
        self.chan_is_on.valueMeasured.connect(self.is_on)
        self.chan_x = cda.DChan(**chans_conf['x'])
        self.chan_xstd = cda.DChan(**chans_conf['xstd'])
        self.chan_z = cda.DChan(**chans_conf['z'])
        self.chan_zstd = cda.DChan(**chans_conf['zstd'])
        self.chan_tunes_range = cda.StrChan(**chans_conf['tunes_range'])
        self.chan_tunes_range.valueMeasured.connect(self.tunes_range)
        self.chan_datatxzi = cda.VChan(**chans_conf['datatxzi'])
        self.chan_datatxzi.valueMeasured.connect(self.data_proc)

        self.name: str = bpm
        self.turns_mes: int = 0
        self.act_state: int = 1
        self.data_len: int = 1024
        self.coor: tuple = (0.0, 0.0)
        self.std: tuple = (0.0, 0.0)
        self.x_bound: list = [0.345, 0.365]
        self.z_bound: list = [0.2, 0.4]
        self.marker = 1
Esempio n. 4
0
    def __init__(self):
        super(KickerDaem, self).__init__()
        self.cmd_chan = cda.StrChan("cxhw:2.kickADCproc.inj.cmd",
                                    on_update=1,
                                    max_nelems=1024)
        self.res_chan = cda.StrChan("cxhw:2.kickADCproc.inj.res",
                                    on_update=1,
                                    max_nelems=1024)

        self.inj = InfWorkMode("inj", DIR + '/aux_mod/inj_adc_conf.txt',
                               self.data_proc, DIR)
        self.ext = InfWorkMode("ext", DIR + '/aux_mod/ext_adc_conf.txt',
                               self.data_proc, DIR)
        self.n_interp = 20
        self.STEP = 5.6 / self.n_interp  # = 0.28, I need 0.25 for start
        self.time_stamp = 0

        self.cmd_chan.valueMeasured.connect(self.daemon_cmd)
        print("prog_start")
    def __init__(self, cycle_part, conf_name, data_proc, dir_d):
        super(InfWorkMode, self).__init__()
        self.dir = dir_d + '/km_'
        self.ic_mode = ''
        self.active_tab = {'p': 1, 'e': 0}

        self.data_proc = data_proc
        self.cycle_part = cycle_part
        adc_list, p_names, e_names = load_config(conf_name)
        self.adcs = [ADC(self.data_receiver, name) for name in adc_list]
        self.inflectors = {
            "p":
            {key: InfDef(cycle_part, val)
             for key, val in p_names.items()},
            "e":
            {key: InfDef(cycle_part, val)
             for key, val in e_names.items()}
        }

        self.chan_ic_mode = cda.StrChan("cxhw:0.k500.modet", max_nelems=4)
        self.chan_sel_all = cda.DChan("cxhw:18.kkr_sel_all.0")

        self.chan_ic_mode.valueChanged.connect(self.kkr_sel)
Esempio n. 6
0
    def __init__(self):
        self.c_v2k_regime = cda.StrChan(v2k_cas + '.Regime', on_update=True)
        self.c_bep_state = cda.StrChan(v2k_cas + '.BEP.State', on_update=True)

        self.c_v2k_inflector = cda.StrChan(v2k_cas + '.B-3M.BEP_Inflektor',
                                           on_update=True)
        self.c_v2k_probros = cda.StrChan(v2k_cas + '.BEP.RF.Probros',
                                         on_update=True)
        self.c_v2k_auto_state = cda.StrChan(v2k_cas + '.BEP.Injection.State',
                                            on_opdate=True)

        self.c_bep_is_busy = cda.IChan('bep.is_busy', on_update=True)
        self.c_bep_offline = cda.IChan('bep.offline', on_update=True)
        self.c_v2k_particles = cda.StrChan('bep.particles',
                                           max_nelems=50,
                                           on_update=True)

        self.c_v2k_regime.valueMeasured.connect(self.requested_particles_check)
        self.c_bep_state.valueMeasured.connect(self.bep_busy_check)
        self.c_v2k_inflector.valueMeasured.connect(self.offline_check)
        self.c_v2k_probros.valueMeasured.connect(self.offline_check)
        self.c_v2k_auto_state.valueMeasured.connect(self.offline_check)
Esempio n. 7
0
#!/usr/bin/env python
import signal
import pycx4.pycda as cda

signal.signal(signal.SIGINT, signal.SIG_DFL)


def printval(chan):
    print chan.val


text_c = cda.StrChan("localhost:0.msg.1")
text_c.valueMeasured.connect(printval)

cda.main_loop()
Esempio n. 8
0
    def __init__(self):
        super(BpmPreproc, self).__init__()
        self.DIVIDER = 10
        soft_conf = load_config_orbit(CONF + '/orbitd_conf.txt', DIR)
        chans_conf = soft_conf['chans_conf']
        bpms_list = soft_conf['bpm_conf']
        self.client_list = soft_conf['client_conf']
        self.mode_d = soft_conf['mode_d']
        # checking config
        for chan in [
                'tunes', 'control_tunes', 'fft', 'coor', 'cmd', 'res', 'orbit',
                'one_turn', 'control_orbit', 'turns', 'turns_matrix', 'modet'
        ]:
            if chan not in chans_conf:
                print(chan + ' is absent in orbitd_conf')

        self.bpms_zeros = np.zeros(2 * len(bpms_list), )
        self.bpms_deviation = np.zeros(2 * len(bpms_list), )
        self.ic_mode: str
        self.turn_bpm: str = 'bpm01'
        self.bckgr_proc: bool = False
        self.bckrg_counter: int = 0
        self.bckgr_it_num: int = 0
        self.current_orbit = np.empty(0)
        self.ctrl_orbit = np.empty(0)
        self.rev_rm = np.empty(0)
        self.rm_info: dict = {}
        self.current_tunes = np.empty(0)

        self.chan_tunes = cda.VChan(**chans_conf['tunes'])
        self.chan_tunes.valueMeasured.connect(self.collect_tunes)
        self.chan_ctrl_tunes = cda.StrChan(**chans_conf['control_tunes'])
        # order: p2v2, e2v2, p2v4, e2v4
        self.chan_act_bpm = cda.StrChan(**chans_conf['act_bpm'])
        self.chan_fft = cda.VChan(**chans_conf['fft'])
        self.chan_coor = cda.VChan(**chans_conf['coor'])
        self.chan_cmd = cda.StrChan(**chans_conf['cmd'])
        self.chan_cmd.valueMeasured.connect(self.cmd)
        self.chan_res = cda.StrChan(**chans_conf['res'])
        self.chan_res.valueMeasured.connect(self.cmd_res)
        self.chan_orbit = cda.VChan(**chans_conf['orbit'])
        self.chan_one_turn = cda.VChan(**chans_conf['one_turn'])
        self.chan_ctrl_orbit = cda.VChan(**chans_conf['control_orbit'])
        self.chan_turns = cda.VChan(**chans_conf['turns'])
        self.chan_turns_matrix = cda.VChan(**chans_conf['turns_matrix'])
        self.chan_mode = cda.StrChan(**chans_conf['modet'])
        self.chan_mode.valueMeasured.connect(self.mode_changed)

        self.bpms: list = [
            BPM(bpm, self.collect_orbit, self.chan_tunes, self.chan_turns,
                self.chan_fft, self.chan_coor, self.collect_act_bpm, CONF)
            for bpm in bpms_list
        ]

        self.cmd_table = {
            'load_orbit': self.load_file_,
            'load_tunes': self.load_file_,
            'load_inj_matrix': self.load_file_,
            'save_orbit': self.save_file_,
            'save_tunes': self.save_file_,
            'turn_bpm': self.turn_bpm_,
            'no_cmd': self.no_cmd_,
            'start_tunes': self.start_tunes_,
            'bckgr': self.bckgr_start_,
            'bckgr_discard': self.bckgr_discard_,
            'status': self.status_,
            'load_rresp_mat': self.load_rresp_mat_,
            'step_dn': self.step_down_,
            'step_up': self.step_up_,
            'knob_recalc': self.knob_recalc_
        }
        self.start_tunes_()
        print('start')
    def init_chans(self):
        self.chan_adc200_ptsofs_1 = cda.DChan("cxhw:18.adc200_kkr1.ptsofs")
        self.chan_adc200_ptsofs_2 = cda.DChan("cxhw:18.adc200_kkr2.ptsofs")
        self.chan_adc200_numpts_1 = cda.DChan("cxhw:18.adc200_kkr1.numpts")
        self.chan_adc200_numpts_2 = cda.DChan("cxhw:18.adc200_kkr2.numpts")
        self.chan_adc200_timing_1 = cda.DChan("cxhw:18.adc200_kkr1.timing")
        self.chan_adc200_timing_2 = cda.DChan("cxhw:18.adc200_kkr2.timing")
        self.chan_adc200_frq_div_1 = cda.DChan("cxhw:18.adc200_kkr1.frqdiv")
        self.chan_adc200_frq_div_2 = cda.DChan("cxhw:18.adc200_kkr2.frqdiv")
        self.chan_adc200_range_1_1 = cda.DChan("cxhw:18.adc200_kkr1.range1")
        self.chan_adc200_range_1_2 = cda.DChan("cxhw:18.adc200_kkr1.range2")
        self.chan_adc200_range_2_1 = cda.DChan("cxhw:18.adc200_kkr2.range1")
        self.chan_adc200_range_2_2 = cda.DChan("cxhw:18.adc200_kkr2.range2")

        self.chan_pp = cda.VChan("cxhw:18.adc200_kkr1.line1", max_nelems=424)
        self.chan_pn = cda.VChan("cxhw:18.adc200_kkr1.line2", max_nelems=424)
        self.chan_kp = cda.VChan("cxhw:18.adc200_kkr2.line1", max_nelems=424)
        self.chan_kn = cda.VChan("cxhw:18.adc200_kkr2.line2", max_nelems=424)

        self.chan_sel_all = cda.DChan("cxhw:18.kkr_sel_all.0")

        self.cmd_chan = cda.StrChan("cxhw:2.kickADCproc.inj.cmd@u")
        self.res_chan = cda.StrChan("cxhw:2.kickADCproc.inj.res@u")

        self.chan_ic_mode = cda.StrChan("cxhw:0.k500.modet", max_nelems=4)

        self.chan_Tgood_ppn = cda.VChan(
            "cxhw:2.inj.prekick.p.neg.Tgood",
            max_nelems=1024)  # positrons "-" prekick
        self.chan_Ugood_ppn = cda.VChan("cxhw:2.inj.prekick.p.neg.Ugood",
                                        max_nelems=1024)
        self.chan_Ttemp_ppn = cda.VChan("cxhw:2.inj.prekick.p.neg.Ttemp",
                                        max_nelems=1024)
        self.chan_Utemp_ppn = cda.VChan("cxhw:2.inj.prekick.p.neg.Utemp",
                                        max_nelems=1024)
        self.chan_delta_a_ppn = cda.DChan("cxhw:2.inj.prekick.p.neg.delta_a")
        self.chan_delta_t_ppn = cda.DChan("cxhw:2.inj.prekick.p.neg.delta_t")
        self.chan_n_interp_ppn = cda.DChan("cxhw:2.inj.prekick.p.neg.n_interp")
        self.chan_sigma_t_ppn = cda.DChan("cxhw:2.inj.prekick.p.neg.sigma_cur")
        self.chan_delta_arr_ppn = cda.VChan(
            "cxhw:2.inj.prekick.p.neg.delta_t_array", max_nelems=100)
        self.chan_t_peak_ppn = cda.DChan("cxhw:2.inj.prekick.p.neg.t_peak")
        self.chan_histo_range_ppn = cda.DChan(
            "cxhw:2.inj.prekick.p.neg.histo_range")
        self.chan_histo_x_all_ppn = cda.VChan(
            "cxhw:2.inj.prekick.p.neg.histo_x_all", max_nelems=100)
        self.chan_histo_y_all_ppn = cda.VChan(
            "cxhw:2.inj.prekick.p.neg.histo_y_all", max_nelems=100)
        self.chan_histo_x_1_ppn = cda.VChan(
            "cxhw:2.inj.prekick.p.neg.histo_x_1", max_nelems=101)
        self.chan_histo_y_1_ppn = cda.VChan(
            "cxhw:2.inj.prekick.p.neg.histo_y_1", max_nelems=101)
        self.chan_histo_x_2_ppn = cda.VChan(
            "cxhw:2.inj.prekick.p.neg.histo_x_2", max_nelems=101)
        self.chan_histo_y_2_ppn = cda.VChan(
            "cxhw:2.inj.prekick.p.neg.histo_y_2", max_nelems=101)
        self.chan_histo_x_3_ppn = cda.VChan(
            "cxhw:2.inj.prekick.p.neg.histo_x_3", max_nelems=101)
        self.chan_histo_y_3_ppn = cda.VChan(
            "cxhw:2.inj.prekick.p.neg.histo_y_3", max_nelems=101)
        self.chan_abs_a_good_ppn = cda.DChan(
            "cxhw:2.inj.prekick.p.neg.abs_a_good")

        self.chan_Tgood_kpn = cda.VChan("cxhw:2.inj.kick.p.neg.Tgood",
                                        max_nelems=1024)  # positrons "-" kick
        self.chan_Ugood_kpn = cda.VChan("cxhw:2.inj.kick.p.neg.Ugood",
                                        max_nelems=1024)
        self.chan_Ttemp_kpn = cda.VChan("cxhw:2.inj.kick.p.neg.Ttemp",
                                        max_nelems=1024)
        self.chan_Utemp_kpn = cda.VChan("cxhw:2.inj.kick.p.neg.Utemp",
                                        max_nelems=1024)
        self.chan_delta_a_kpn = cda.DChan("cxhw:2.inj.kick.p.neg.delta_a")
        self.chan_delta_t_kpn = cda.DChan("cxhw:2.inj.kick.p.neg.delta_t")
        self.chan_n_interp_kpn = cda.DChan("cxhw:2.inj.kick.p.neg.n_interp")
        self.chan_sigma_t_kpn = cda.DChan("cxhw:2.inj.kick.p.neg.sigma_cur")
        self.chan_delta_arr_kpn = cda.VChan(
            "cxhw:2.inj.kick.p.neg.delta_t_array", max_nelems=200)
        self.chan_t_peak_kpn = cda.DChan("cxhw:2.inj.kick.p.neg.t_peak")
        self.chan_histo_x_all_kpn = cda.VChan(
            "cxhw:2.inj.kick.p.neg.histo_x_all", max_nelems=100)
        self.chan_histo_y_all_kpn = cda.VChan(
            "cxhw:2.inj.kick.p.neg.histo_y_all", max_nelems=100)
        self.chan_histo_x_1_kpn = cda.VChan("cxhw:2.inj.kick.p.neg.histo_x_1",
                                            max_nelems=101)
        self.chan_histo_y_1_kpn = cda.VChan("cxhw:2.inj.kick.p.neg.histo_y_1",
                                            max_nelems=101)
        self.chan_histo_x_2_kpn = cda.VChan("cxhw:2.inj.kick.p.neg.histo_x_2",
                                            max_nelems=101)
        self.chan_histo_y_2_kpn = cda.VChan("cxhw:2.inj.kick.p.neg.histo_y_2",
                                            max_nelems=101)
        self.chan_histo_x_3_kpn = cda.VChan("cxhw:2.inj.kick.p.neg.histo_x_3",
                                            max_nelems=101)
        self.chan_histo_y_3_kpn = cda.VChan("cxhw:2.inj.kick.p.neg.histo_y_3",
                                            max_nelems=101)
        self.chan_abs_a_good_kpn = cda.DChan(
            "cxhw:2.inj.kick.p.neg.abs_a_good")

        self.chan_Tgood_ppp = cda.VChan(
            "cxhw:2.inj.prekick.p.pos.Tgood",
            max_nelems=1024)  # positrons "+" prekick
        self.chan_Ugood_ppp = cda.VChan("cxhw:2.inj.prekick.p.pos.Ugood",
                                        max_nelems=1024)
        self.chan_Ttemp_ppp = cda.VChan("cxhw:2.inj.prekick.p.pos.Ttemp",
                                        max_nelems=1024)
        self.chan_Utemp_ppp = cda.VChan("cxhw:2.inj.prekick.p.pos.Utemp",
                                        max_nelems=1024)
        self.chan_delta_a_ppp = cda.DChan("cxhw:2.inj.prekick.p.pos.delta_a")
        self.chan_delta_t_ppp = cda.DChan("cxhw:2.inj.prekick.p.pos.delta_t")
        self.chan_n_interp_ppp = cda.DChan("cxhw:2.inj.prekick.p.pos.n_interp")
        self.chan_sigma_t_ppp = cda.DChan("cxhw:2.inj.prekick.p.pos.sigma_cur")
        self.chan_delta_arr_ppp = cda.VChan(
            "cxhw:2.inj.prekick.p.pos.delta_t_array", max_nelems=200)
        self.chan_t_peak_ppp = cda.DChan("cxhw:2.inj.prekick.p.pos.t_peak")
        self.chan_histo_x_all_ppp = cda.VChan(
            "cxhw:2.inj.prekick.p.pos.histo_x_all", max_nelems=100)
        self.chan_histo_y_all_ppp = cda.VChan(
            "cxhw:2.inj.prekick.p.pos.histo_y_all", max_nelems=100)
        self.chan_histo_x_1_ppp = cda.VChan(
            "cxhw:2.inj.prekick.p.pos.histo_x_1", max_nelems=101)
        self.chan_histo_y_1_ppp = cda.VChan(
            "cxhw:2.inj.prekick.p.pos.histo_y_1", max_nelems=101)
        self.chan_histo_x_2_ppp = cda.VChan(
            "cxhw:2.inj.prekick.p.pos.histo_x_2", max_nelems=101)
        self.chan_histo_y_2_ppp = cda.VChan(
            "cxhw:2.inj.prekick.p.pos.histo_y_2", max_nelems=101)
        self.chan_histo_x_3_ppp = cda.VChan(
            "cxhw:2.inj.prekick.p.pos.histo_x_3", max_nelems=101)
        self.chan_histo_y_3_ppp = cda.VChan(
            "cxhw:2.inj.prekick.p.pos.histo_y_3", max_nelems=101)
        self.chan_abs_a_good_ppp = cda.DChan(
            "cxhw:2.inj.prekick.p.pos.abs_a_good")

        self.chan_Tgood_kpp = cda.VChan("cxhw:2.inj.kick.p.pos.Tgood",
                                        max_nelems=1024)  # positrons "+" kick
        self.chan_Ugood_kpp = cda.VChan("cxhw:2.inj.kick.p.pos.Ugood",
                                        max_nelems=1024)
        self.chan_Ttemp_kpp = cda.VChan("cxhw:2.inj.kick.p.pos.Ttemp",
                                        max_nelems=1024)
        self.chan_Utemp_kpp = cda.VChan("cxhw:2.inj.kick.p.pos.Utemp",
                                        max_nelems=1024)
        self.chan_delta_a_kpp = cda.DChan("cxhw:2.inj.kick.p.pos.delta_a")
        self.chan_delta_t_kpp = cda.DChan("cxhw:2.inj.kick.p.pos.delta_t")
        self.chan_n_interp_kpp = cda.DChan("cxhw:2.inj.kick.p.pos.n_interp")
        self.chan_sigma_t_kpp = cda.DChan("cxhw:2.inj.kick.p.pos.sigma_cur")
        self.chan_delta_arr_kpp = cda.VChan(
            "cxhw:2.inj.kick.p.pos.delta_t_array", max_nelems=200)
        self.chan_t_peak_kpp = cda.DChan("cxhw:2.inj.kick.p.pos.t_peak")
        self.chan_histo_x_all_kpp = cda.VChan(
            "cxhw:2.inj.kick.p.pos.histo_x_all", max_nelems=100)
        self.chan_histo_y_all_kpp = cda.VChan(
            "cxhw:2.inj.kick.p.pos.histo_y_all", max_nelems=100)
        self.chan_histo_x_1_kpp = cda.VChan("cxhw:2.inj.kick.p.pos.histo_x_1",
                                            max_nelems=101)
        self.chan_histo_y_1_kpp = cda.VChan("cxhw:2.inj.kick.p.pos.histo_y_1",
                                            max_nelems=101)
        self.chan_histo_x_2_kpp = cda.VChan("cxhw:2.inj.kick.p.pos.histo_x_2",
                                            max_nelems=101)
        self.chan_histo_y_2_kpp = cda.VChan("cxhw:2.inj.kick.p.pos.histo_y_2",
                                            max_nelems=101)
        self.chan_histo_x_3_kpp = cda.VChan("cxhw:2.inj.kick.p.pos.histo_x_3",
                                            max_nelems=101)
        self.chan_histo_y_3_kpp = cda.VChan("cxhw:2.inj.kick.p.pos.histo_y_3",
                                            max_nelems=101)
        self.chan_abs_a_good_kpp = cda.DChan(
            "cxhw:2.inj.kick.p.pos.abs_a_good")

        self.chan_Tgood_pen = cda.VChan(
            "cxhw:2.inj.prekick.e.neg.Tgood",
            max_nelems=1024)  # electrons "-" prekick
        self.chan_Ugood_pen = cda.VChan("cxhw:2.inj.prekick.e.neg.Ugood",
                                        max_nelems=1024)
        self.chan_Ttemp_pen = cda.VChan("cxhw:2.inj.prekick.e.neg.Ttemp",
                                        max_nelems=1024)
        self.chan_Utemp_pen = cda.VChan("cxhw:2.inj.prekick.e.neg.Utemp",
                                        max_nelems=1024)
        self.chan_delta_a_pen = cda.DChan("cxhw:2.inj.prekick.e.neg.delta_a")
        self.chan_delta_t_pen = cda.DChan("cxhw:2.inj.prekick.e.neg.delta_t")
        self.chan_n_interp_pen = cda.DChan("cxhw:2.inj.prekick.e.neg.n_interp")
        self.chan_sigma_t_pen = cda.DChan("cxhw:2.inj.prekick.e.neg.sigma_cur")
        self.chan_delta_arr_pen = cda.VChan(
            "cxhw:2.inj.prekick.e.neg.delta_t_array", max_nelems=200)
        self.chan_t_peak_pen = cda.DChan("cxhw:2.inj.prekick.e.neg.t_peak")
        self.chan_histo_x_all_pen = cda.VChan(
            "cxhw:2.inj.prekick.e.neg.histo_x_all", max_nelems=100)
        self.chan_histo_y_all_pen = cda.VChan(
            "cxhw:2.inj.prekick.e.neg.histo_y_all", max_nelems=100)
        self.chan_histo_x_1_pen = cda.VChan(
            "cxhw:2.inj.prekick.e.neg.histo_x_1", max_nelems=101)
        self.chan_histo_y_1_pen = cda.VChan(
            "cxhw:2.inj.prekick.e.neg.histo_y_1", max_nelems=101)
        self.chan_histo_x_2_pen = cda.VChan(
            "cxhw:2.inj.prekick.e.neg.histo_x_2", max_nelems=101)
        self.chan_histo_y_2_pen = cda.VChan(
            "cxhw:2.inj.prekick.e.neg.histo_y_2", max_nelems=101)
        self.chan_histo_x_3_pen = cda.VChan(
            "cxhw:2.inj.prekick.e.neg.histo_x_3", max_nelems=101)
        self.chan_histo_y_3_pen = cda.VChan(
            "cxhw:2.inj.prekick.e.neg.histo_y_3", max_nelems=101)
        self.chan_abs_a_good_pen = cda.DChan(
            "cxhw:2.inj.prekick.e.neg.abs_a_good")

        self.chan_Tgood_ken = cda.VChan("cxhw:2.inj.kick.e.neg.Tgood",
                                        max_nelems=1024)  # electrons "-" kick
        self.chan_Ugood_ken = cda.VChan("cxhw:2.inj.kick.e.neg.Ugood",
                                        max_nelems=1024)
        self.chan_Ttemp_ken = cda.VChan("cxhw:2.inj.kick.e.neg.Ttemp",
                                        max_nelems=1024)
        self.chan_Utemp_ken = cda.VChan("cxhw:2.inj.kick.e.neg.Utemp",
                                        max_nelems=1024)
        self.chan_delta_a_ken = cda.DChan("cxhw:2.inj.kick.e.neg.delta_a")
        self.chan_delta_t_ken = cda.DChan("cxhw:2.inj.kick.e.neg.delta_t")
        self.chan_n_interp_ken = cda.DChan("cxhw:2.inj.kick.e.neg.n_interp")
        self.chan_sigma_t_ken = cda.DChan("cxhw:2.inj.kick.e.neg.sigma_cur")
        self.chan_delta_arr_ken = cda.VChan(
            "cxhw:2.inj.kick.e.neg.delta_t_array", max_nelems=200)
        self.chan_t_peak_ken = cda.DChan("cxhw:2.inj.kick.e.neg.t_peak")
        self.chan_histo_x_all_ken = cda.VChan(
            "cxhw:2.inj.kick.e.neg.histo_x_all", max_nelems=100)
        self.chan_histo_y_all_ken = cda.VChan(
            "cxhw:2.inj.kick.e.neg.histo_y_all", max_nelems=100)
        self.chan_histo_x_1_ken = cda.VChan("cxhw:2.inj.kick.e.neg.histo_x_1",
                                            max_nelems=101)
        self.chan_histo_y_1_ken = cda.VChan("cxhw:2.inj.kick.e.neg.histo_y_1",
                                            max_nelems=101)
        self.chan_histo_x_2_ken = cda.VChan("cxhw:2.inj.kick.e.neg.histo_x_2",
                                            max_nelems=101)
        self.chan_histo_y_2_ken = cda.VChan("cxhw:2.inj.kick.e.neg.histo_y_2",
                                            max_nelems=101)
        self.chan_histo_x_3_ken = cda.VChan("cxhw:2.inj.kick.e.neg.histo_x_3",
                                            max_nelems=101)
        self.chan_histo_y_3_ken = cda.VChan("cxhw:2.inj.kick.e.neg.histo_y_3",
                                            max_nelems=101)
        self.chan_abs_a_good_ken = cda.DChan(
            "cxhw:2.inj.kick.e.neg.abs_a_good")

        self.chan_Tgood_pep = cda.VChan(
            "cxhw:2.inj.prekick.e.pos.Tgood",
            max_nelems=1024)  # electrons "+" prekick
        self.chan_Ugood_pep = cda.VChan("cxhw:2.inj.prekick.e.pos.Ugood",
                                        max_nelems=1024)
        self.chan_Ttemp_pep = cda.VChan("cxhw:2.inj.prekick.e.pos.Ttemp",
                                        max_nelems=1024)
        self.chan_Utemp_pep = cda.VChan("cxhw:2.inj.prekick.e.pos.Utemp",
                                        max_nelems=1024)
        self.chan_delta_a_pep = cda.DChan("cxhw:2.inj.prekick.e.pos.delta_a")
        self.chan_delta_t_pep = cda.DChan("cxhw:2.inj.prekick.e.pos.delta_t")
        self.chan_n_interp_pep = cda.DChan("cxhw:2.inj.prekick.e.pos.n_interp")
        self.chan_sigma_t_pep = cda.DChan("cxhw:2.inj.prekick.e.pos.sigma_cur")
        self.chan_delta_arr_pep = cda.VChan(
            "cxhw:2.inj.prekick.e.pos.delta_t_array", max_nelems=200)
        self.chan_t_peak_pep = cda.DChan("cxhw:2.inj.prekick.e.pos.t_peak")
        self.chan_histo_x_all_pep = cda.VChan(
            "cxhw:2.inj.prekick.e.pos.histo_x_all", max_nelems=100)
        self.chan_histo_y_all_pep = cda.VChan(
            "cxhw:2.inj.prekick.e.pos.histo_y_all", max_nelems=100)
        self.chan_histo_x_1_pep = cda.VChan(
            "cxhw:2.inj.prekick.e.pos.histo_x_1", max_nelems=101)
        self.chan_histo_y_1_pep = cda.VChan(
            "cxhw:2.inj.prekick.e.pos.histo_y_1", max_nelems=101)
        self.chan_histo_x_2_pep = cda.VChan(
            "cxhw:2.inj.prekick.e.pos.histo_x_2", max_nelems=101)
        self.chan_histo_y_2_pep = cda.VChan(
            "cxhw:2.inj.prekick.e.pos.histo_y_2", max_nelems=101)
        self.chan_histo_x_3_pep = cda.VChan(
            "cxhw:2.inj.prekick.e.pos.histo_x_3", max_nelems=101)
        self.chan_histo_y_3_pep = cda.VChan(
            "cxhw:2.inj.prekick.e.pos.histo_y_3", max_nelems=101)
        self.chan_abs_a_good_pep = cda.DChan(
            "cxhw:2.inj.prekick.e.pos.abs_a_good")

        self.chan_Tgood_kep = cda.VChan("cxhw:2.inj.kick.e.pos.Tgood",
                                        max_nelems=1024)  # electrons "+" kick
        self.chan_Ugood_kep = cda.VChan("cxhw:2.inj.kick.e.pos.Ugood",
                                        max_nelems=1024)
        self.chan_Ttemp_kep = cda.VChan("cxhw:2.inj.kick.e.pos.Ttemp",
                                        max_nelems=1024)
        self.chan_Utemp_kep = cda.VChan("cxhw:2.inj.kick.e.pos.Utemp",
                                        max_nelems=1024)
        self.chan_delta_a_kep = cda.DChan("cxhw:2.inj.kick.e.pos.delta_a")
        self.chan_delta_t_kep = cda.DChan("cxhw:2.inj.kick.e.pos.delta_t")
        self.chan_n_interp_kep = cda.DChan("cxhw:2.inj.kick.e.pos.n_interp")
        self.chan_sigma_t_kep = cda.DChan("cxhw:2.inj.kick.e.pos.sigma_cur")
        self.chan_delta_arr_kep = cda.VChan(
            "cxhw:2.inj.kick.e.pos.delta_t_array", max_nelems=200)
        self.chan_t_peak_kep = cda.DChan("cxhw:2.inj.kick.e.pos.t_peak")
        self.chan_histo_x_all_kep = cda.VChan(
            "cxhw:2.inj.kick.e.pos.histo_x_all", max_nelems=100)
        self.chan_histo_y_all_kep = cda.VChan(
            "cxhw:2.inj.kick.e.pos.histo_y_all", max_nelems=100)
        self.chan_histo_x_1_kep = cda.VChan("cxhw:2.inj.kick.e.pos.histo_x_1",
                                            max_nelems=101)
        self.chan_histo_y_1_kep = cda.VChan("cxhw:2.inj.kick.e.pos.histo_y_1",
                                            max_nelems=101)
        self.chan_histo_x_2_kep = cda.VChan("cxhw:2.inj.kick.e.pos.histo_x_2",
                                            max_nelems=101)
        self.chan_histo_y_2_kep = cda.VChan("cxhw:2.inj.kick.e.pos.histo_y_2",
                                            max_nelems=101)
        self.chan_histo_x_3_kep = cda.VChan("cxhw:2.inj.kick.e.pos.histo_x_3",
                                            max_nelems=101)
        self.chan_histo_y_3_kep = cda.VChan("cxhw:2.inj.kick.e.pos.histo_y_3",
                                            max_nelems=101)
        self.chan_abs_a_good_kep = cda.DChan(
            "cxhw:2.inj.kick.e.pos.abs_a_good")

        self.list_hist_ppp = [
            self.chan_histo_x_all_ppp, self.chan_histo_y_all_ppp,
            self.chan_histo_x_1_ppp, self.chan_histo_y_1_ppp,
            self.chan_histo_x_2_ppp, self.chan_histo_y_2_ppp,
            self.chan_histo_x_3_ppp, self.chan_histo_y_3_ppp
        ]
        self.list_hist_ppn = [
            self.chan_histo_x_all_ppn, self.chan_histo_y_all_ppn,
            self.chan_histo_x_1_ppn, self.chan_histo_y_1_ppn,
            self.chan_histo_x_2_ppn, self.chan_histo_y_2_ppn,
            self.chan_histo_x_3_ppn, self.chan_histo_y_3_ppn
        ]
        self.list_hist_kpp = [
            self.chan_histo_x_all_kpp, self.chan_histo_y_all_kpp,
            self.chan_histo_x_1_kpp, self.chan_histo_y_1_kpp,
            self.chan_histo_x_2_kpp, self.chan_histo_y_2_kpp,
            self.chan_histo_x_3_kpp, self.chan_histo_y_3_kpp
        ]
        self.list_hist_kpn = [
            self.chan_histo_x_all_kpn, self.chan_histo_y_all_kpn,
            self.chan_histo_x_1_kpn, self.chan_histo_y_1_kpn,
            self.chan_histo_x_2_kpn, self.chan_histo_y_2_kpn,
            self.chan_histo_x_3_kpn, self.chan_histo_y_3_kpn
        ]
        self.list_hist_pep = [
            self.chan_histo_x_all_pep, self.chan_histo_y_all_pep,
            self.chan_histo_x_1_pep, self.chan_histo_y_1_pep,
            self.chan_histo_x_2_pep, self.chan_histo_y_2_pep,
            self.chan_histo_x_3_ppp, self.chan_histo_y_3_ppp
        ]
        self.list_hist_pen = [
            self.chan_histo_x_all_pen, self.chan_histo_y_all_pen,
            self.chan_histo_x_1_pen, self.chan_histo_y_1_pen,
            self.chan_histo_x_2_pen, self.chan_histo_y_2_pen,
            self.chan_histo_x_3_pen, self.chan_histo_y_3_pen
        ]
        self.list_hist_kep = [
            self.chan_histo_x_all_kep, self.chan_histo_y_all_kep,
            self.chan_histo_x_1_kep, self.chan_histo_y_1_kep,
            self.chan_histo_x_2_kep, self.chan_histo_y_2_kep,
            self.chan_histo_x_3_kep, self.chan_histo_y_3_kep
        ]
        self.list_hist_ken = [
            self.chan_histo_x_all_ken, self.chan_histo_y_all_ken,
            self.chan_histo_x_1_ken, self.chan_histo_y_1_ken,
            self.chan_histo_x_2_ken, self.chan_histo_y_2_ken,
            self.chan_histo_x_3_ken, self.chan_histo_y_3_ken
        ]

        self.dict_hist = {
            'cxhw:18.adc200_kkr1.line1p': self.list_hist_ppp,
            'cxhw:18.adc200_kkr1.line2p': self.list_hist_ppn,
            'cxhw:18.adc200_kkr2.line1p': self.list_hist_kpp,
            'cxhw:18.adc200_kkr2.line2p': self.list_hist_kpn,
            'cxhw:18.adc200_kkr1.line1e': self.list_hist_pep,
            'cxhw:18.adc200_kkr1.line2e': self.list_hist_pen,
            'cxhw:18.adc200_kkr2.line1e': self.list_hist_kep,
            'cxhw:18.adc200_kkr2.line2e': self.list_hist_ken
        }
        self.dict_good_chans = {
            'cxhw:18.adc200_kkr1.line1p': self.chan_Ugood_ppp,
            'cxhw:18.adc200_kkr1.line2p': self.chan_Ugood_ppn,
            'cxhw:18.adc200_kkr2.line1p': self.chan_Ugood_kpp,
            'cxhw:18.adc200_kkr2.line2p': self.chan_Ugood_kpn,
            'cxhw:18.adc200_kkr1.line1e': self.chan_Ugood_pep,
            'cxhw:18.adc200_kkr1.line2e': self.chan_Ugood_pen,
            'cxhw:18.adc200_kkr2.line1e': self.chan_Ugood_kep,
            'cxhw:18.adc200_kkr2.line2e': self.chan_Ugood_ken
        }
        self.dict_temp_chans = {
            'cxhw:18.adc200_kkr1.line1p': self.chan_Utemp_ppp,
            'cxhw:18.adc200_kkr1.line2p': self.chan_Utemp_ppn,
            'cxhw:18.adc200_kkr2.line1p': self.chan_Utemp_kpp,
            'cxhw:18.adc200_kkr2.line2p': self.chan_Utemp_kpn,
            'cxhw:18.adc200_kkr1.line1e': self.chan_Utemp_pep,
            'cxhw:18.adc200_kkr1.line2e': self.chan_Utemp_pen,
            'cxhw:18.adc200_kkr2.line1e': self.chan_Utemp_kep,
            'cxhw:18.adc200_kkr2.line2e': self.chan_Utemp_ken
        }
        self.dict_delta_t = {
            'cxhw:18.adc200_kkr1.line1p': self.chan_delta_t_ppp,
            'cxhw:18.adc200_kkr1.line2p': self.chan_delta_t_ppn,
            'cxhw:18.adc200_kkr2.line1p': self.chan_delta_t_kpp,
            'cxhw:18.adc200_kkr2.line2p': self.chan_delta_t_kpn,
            'cxhw:18.adc200_kkr1.line1e': self.chan_delta_t_pep,
            'cxhw:18.adc200_kkr1.line2e': self.chan_delta_t_pen,
            'cxhw:18.adc200_kkr2.line1e': self.chan_delta_t_kep,
            'cxhw:18.adc200_kkr2.line2e': self.chan_delta_t_ken
        }
        self.dict_delta_arr = {
            'cxhw:18.adc200_kkr1.line1p': self.chan_delta_arr_ppp,
            'cxhw:18.adc200_kkr1.line2p': self.chan_delta_arr_ppn,
            'cxhw:18.adc200_kkr2.line1p': self.chan_delta_arr_kpp,
            'cxhw:18.adc200_kkr2.line2p': self.chan_delta_arr_kpn,
            'cxhw:18.adc200_kkr1.line1e': self.chan_delta_arr_pep,
            'cxhw:18.adc200_kkr1.line2e': self.chan_delta_arr_pen,
            'cxhw:18.adc200_kkr2.line1e': self.chan_delta_arr_kep,
            'cxhw:18.adc200_kkr2.line2e': self.chan_delta_arr_ken
        }
        self.dict_sigma_t = {
            'cxhw:18.adc200_kkr1.line1p': self.chan_sigma_t_ppp,
            'cxhw:18.adc200_kkr1.line2p': self.chan_sigma_t_ppn,
            'cxhw:18.adc200_kkr2.line1p': self.chan_sigma_t_kpp,
            'cxhw:18.adc200_kkr2.line2p': self.chan_sigma_t_kpn,
            'cxhw:18.adc200_kkr1.line1e': self.chan_sigma_t_pep,
            'cxhw:18.adc200_kkr1.line2e': self.chan_sigma_t_pen,
            'cxhw:18.adc200_kkr2.line1e': self.chan_sigma_t_kep,
            'cxhw:18.adc200_kkr2.line2e': self.chan_sigma_t_ken
        }
        self.dict_t_peak = {
            'cxhw:18.adc200_kkr1.line1p': self.chan_t_peak_ppp,
            'cxhw:18.adc200_kkr1.line2p': self.chan_t_peak_ppn,
            'cxhw:18.adc200_kkr2.line1p': self.chan_t_peak_kpp,
            'cxhw:18.adc200_kkr2.line2p': self.chan_t_peak_kpn,
            'cxhw:18.adc200_kkr1.line1e': self.chan_t_peak_pep,
            'cxhw:18.adc200_kkr1.line2e': self.chan_t_peak_pen,
            'cxhw:18.adc200_kkr2.line1e': self.chan_t_peak_kep,
            'cxhw:18.adc200_kkr2.line2e': self.chan_t_peak_ken
        }