예제 #1
0
def _write_chromatic_w_for_plane(file_chromatic, plane, element_name, bpms_list, measured_chromatic_w,
                                    input_model, model_propagation, model_cor, model_back_propagation, model_back_cor,
                                    save_path, is_element):
    summary_data = []
    for bpm in bpms_list:
        bpm_s = bpm[0]
        bpm_name = bpm[1]

        model_s = input_model.S[input_model.indx[bpm_name]]
        model_w = getattr(input_model, "W" + plane)[input_model.indx[bpm_name]]
        model_phi = getattr(input_model, "PHI" + plane)[input_model.indx[bpm_name]]

        w_prop = getattr(model_propagation, "W" + plane)[model_propagation.indx[bpm_name]]
        phi_prop = getattr(model_propagation, "PHI" + plane)[model_propagation.indx[bpm_name]]
        err_w_prop = 1e-8  # TODO: Propagate
        err_phi_prop = 1e-8  # TODO: Propagate

        w_back = getattr(model_back_propagation, "W" + plane)[model_back_propagation.indx[bpm_name]]
        phi_back = getattr(model_back_propagation, "PHI" + plane)[model_back_propagation.indx[bpm_name]]
        err_w_back = 1e-8  # TODO: Propagate
        err_phi_back = 1e-8  # TODO: Propagate

        if not is_element:
            w_cor = getattr(model_cor, "W" + plane)[model_cor.indx[bpm_name]]
            phi_cor = getattr(model_cor, "PHI" + plane)[model_cor.indx[bpm_name]]
            err_w_cor = 1e-8  # TODO: Propagate
            err_phi_cor = 1e-8  # TODO: Propagate

            w_back_cor = getattr(model_back_cor, "W" + plane)[model_back_cor.indx[bpm_name]]
            phi_back_cor = getattr(model_back_cor, "PHI" + plane)[model_back_cor.indx[bpm_name]]
            err_w_back_cor = 1e-8  # TODO: Propagate
            err_phi_back_cor = 1e-8  # TODO: Propagate

            file_chromatic.add_table_row([bpm_name, bpm_s,
                                          w_prop, err_w_prop, phi_prop, err_phi_prop,
                                          w_cor, err_w_cor, phi_cor, err_phi_cor,
                                          w_back, err_w_back, phi_back, err_phi_back,
                                          w_back_cor, err_w_back_cor, phi_back_cor, err_phi_back_cor,
                                          model_w, model_phi, model_s])
        else:
            average_w, final_err_w = weighted_average_for_SbS_elements(w_prop, err_w_prop, w_back, err_w_prop)
            average_phi, final_err_phi = weighted_average_for_SbS_elements(phi_prop, err_phi_prop, phi_back, err_phi_prop)
            file_chromatic.add_table_row([bpm_name, bpm_s, average_w, final_err_w, average_phi, final_err_phi, model_w, model_phi, model_s])
            if element_name == bpm_name:
                summary_data = [bpm_name, bpm_s, average_w, final_err_w, average_phi, final_err_phi, model_w, model_phi, model_s]

    file_chromatic.write_to_file()
    return summary_data
예제 #2
0
def _write_C_terms(file_C_terms, element_name, is_element, bpms_list, measured_coupling, input_model, model_propagation, model_back_propagation, model_cor, model_back_cor):

    summary_data = []

    for bpm in bpms_list:
        bpm_s = bpm[0]
        bpm_name = bpm[1]

        prop_c11, prop_c12, prop_c21, prop_c22 = model_propagation.C[model_propagation.indx[bpm_name]]
        err_prop_c11, err_prop_c12, err_prop_c21, err_prop_c22 = [1e-8, 1e-8, 1e-8, 1e-8]  # TODO: propagate errors

        back_c11, back_c12, back_c21, back_c22 = model_back_propagation.C[model_back_propagation.indx[bpm_name]]
        err_back_c11, err_back_c12, err_back_c21, err_back_c22 = [1e-8, 1e-8, 1e-8, 1e-8]  # TODO: propagate errors

        if not is_element:
            model_s = measured_coupling.S[measured_coupling.indx[bpm_name]]
            cor_c11, cor_c12, cor_c21, cor_c22 = model_cor.C[model_cor.indx[bpm_name]]
            err_cor_c11, err_cor_c12, err_cor_c21, err_cor_c22 = [1e-8, 1e-8, 1e-8, 1e-8]  # TODO: propagate errors

            back_cor_c11, back_cor_c12, back_cor_c21, back_cor_c22 = model_back_cor.C[model_back_cor.indx[bpm_name]]
            err_back_cor_c11, err_back_cor_c12, err_back_cor_c21, err_back_cor_c22 = [1e-8, 1e-8, 1e-8, 1e-8]  # TODO: propagate errors

            file_C_terms.add_table_row([bpm_name, bpm_s,
                                        prop_c11, err_prop_c11, prop_c12, err_prop_c12, prop_c21, err_prop_c21, prop_c22, err_prop_c22,
                                        cor_c11, err_cor_c11, cor_c12, err_cor_c12, cor_c21, err_cor_c21, cor_c22, err_cor_c22,
                                        back_c11, err_back_c11, back_c12, err_back_c12, back_c21, err_back_c21, back_c22, err_back_c22,
                                        back_cor_c11, err_back_cor_c11, back_cor_c12, err_back_cor_c12, back_cor_c21, err_back_cor_c21, back_cor_c22, err_back_cor_c22,
                                        model_s])
        else:
            model_s = input_model.S[input_model.indx[bpm_name]]
            average_c11, final_err_c11 = weighted_average_for_SbS_elements(prop_c11, err_prop_c11, back_c11, err_back_c11)
            average_c12, final_err_c12 = weighted_average_for_SbS_elements(prop_c12, err_prop_c12, back_c12, err_back_c12)
            average_c21, final_err_c21 = weighted_average_for_SbS_elements(prop_c21, err_prop_c21, back_c21, err_back_c21)
            average_c21, final_err_c21 = weighted_average_for_SbS_elements(prop_c22, err_prop_c22, back_c22, err_back_c22)
            file_C_terms.add_table_row([bpm_name, bpm_s,
                                        average_c11, final_err_c11, average_c12, final_err_c12, average_c21, final_err_c21, average_c21, final_err_c21,
                                        model_s])
            if bpm_name == element_name:
                summary_data = [bpm_name, bpm_s,
                                average_c11, final_err_c11, average_c12, final_err_c12, average_c21, final_err_c21, average_c21, final_err_c21,
                                model_s]
    file_C_terms.write_to_file()
    return summary_data
def _write_normalized_hor_dispersion(file_norm_disp_x, element_name, bpms_list, measured_norm_disp, input_model, model_cor, model_propagation, model_back_propagation, model_back_cor, is_element):

    summary_data = []

    for bpm in bpms_list:
        bpm_s = bpm[0]
        bpm_name = bpm[1]

        prop_norm_disp = model_propagation.DX[model_propagation.indx[bpm_name]] / sqrt(model_propagation.BETX[model_propagation.indx[bpm_name]])
        back_prop_norm_disp = model_back_propagation.DX[model_back_propagation.indx[bpm_name]] / sqrt(model_back_propagation.BETX[model_back_propagation.indx[bpm_name]])

        prop_norm_disp_err = 1e-8  # TODO: Propagate
        back_prop_norm_disp_err = 1e-8  # TODO: Propagate

        if not is_element:
            model_s = measured_norm_disp.S[measured_norm_disp.indx[bpm_name]]
            model_norm_disp = measured_norm_disp.NDXMDL[measured_norm_disp.indx[bpm_name]]

            norm_disp_diff = measured_norm_disp.NDX[measured_norm_disp.indx[bpm_name]] - prop_norm_disp
            back_norm_disp_diff = measured_norm_disp.NDX[measured_norm_disp.indx[bpm_name]] - back_prop_norm_disp

            corr_norm_disp = model_cor.DX[model_cor.indx[bpm_name]] / sqrt(model_cor.BETX[model_cor.indx[bpm_name]])
            corr_norm_disp_diff = corr_norm_disp - prop_norm_disp
            err_corr_norm_disp = 1e-8  # TODO: Propagate

            back_corr_norm_disp = model_back_cor.DX[model_back_cor.indx[bpm_name]] / sqrt(model_back_cor.BETX[model_back_cor.indx[bpm_name]])
            back_corr_norm_disp_diff = back_corr_norm_disp - back_prop_norm_disp
            err_back_corr_norm_disp = 1e-8  # TODO: Propagate

            file_norm_disp_x.add_table_row([bpm_name, bpm_s, norm_disp_diff, prop_norm_disp_err, corr_norm_disp_diff, err_corr_norm_disp, back_norm_disp_diff, back_prop_norm_disp_err, back_corr_norm_disp_diff, err_back_corr_norm_disp, model_norm_disp, model_s])
        else:
            model_s = input_model.S[input_model.indx[bpm_name]]
            model_norm_disp = input_model.DX[input_model.indx[bpm_name]] / sqrt(input_model.BETX[input_model.indx[bpm_name]])
            average_norm_disp, final_norm_disp_err = weighted_average_for_SbS_elements(prop_norm_disp, prop_norm_disp_err, back_prop_norm_disp, back_prop_norm_disp_err)

            file_norm_disp_x.add_table_row([bpm_name, bpm_s, average_norm_disp, final_norm_disp_err, model_norm_disp, model_s])
            if bpm_name == element_name:
                summary_data = [average_norm_disp, final_norm_disp_err, model_norm_disp]
    file_norm_disp_x.write_to_file()
    return summary_data
예제 #4
0
def _write_normalized_hor_dispersion(file_norm_disp_x, element_name, bpms_list, measured_norm_disp, input_model, model_cor, model_propagation, model_back_propagation, model_back_cor, is_element):

    summary_data = []

    for bpm in bpms_list:
        bpm_s = bpm[0]
        bpm_name = bpm[1]

        prop_norm_disp = model_propagation.DX[model_propagation.indx[bpm_name]] / sqrt(model_propagation.BETX[model_propagation.indx[bpm_name]])
        back_prop_norm_disp = model_back_propagation.DX[model_back_propagation.indx[bpm_name]] / sqrt(model_back_propagation.BETX[model_back_propagation.indx[bpm_name]])

        prop_norm_disp_err = 1e-8  # TODO: Propagate
        back_prop_norm_disp_err = 1e-8  # TODO: Propagate

        if not is_element:
            model_s = measured_norm_disp.S[measured_norm_disp.indx[bpm_name]]
            model_norm_disp = measured_norm_disp.NDXMDL[measured_norm_disp.indx[bpm_name]]

            norm_disp_diff = measured_norm_disp.NDX[measured_norm_disp.indx[bpm_name]] - prop_norm_disp
            back_norm_disp_diff = measured_norm_disp.NDX[measured_norm_disp.indx[bpm_name]] - back_prop_norm_disp

            corr_norm_disp = model_cor.DX[model_cor.indx[bpm_name]] / sqrt(model_cor.BETX[model_cor.indx[bpm_name]])
            corr_norm_disp_diff = corr_norm_disp - prop_norm_disp
            err_corr_norm_disp = 1e-8  # TODO: Propagate

            back_corr_norm_disp = model_back_cor.DX[model_back_cor.indx[bpm_name]] / sqrt(model_back_cor.BETX[model_back_cor.indx[bpm_name]])
            back_corr_norm_disp_diff = back_corr_norm_disp - back_prop_norm_disp
            err_back_corr_norm_disp = 1e-8  # TODO: Propagate

            file_norm_disp_x.add_table_row([bpm_name, bpm_s, norm_disp_diff, prop_norm_disp_err, corr_norm_disp_diff, err_corr_norm_disp, back_norm_disp_diff, back_prop_norm_disp_err, back_corr_norm_disp_diff, err_back_corr_norm_disp, model_norm_disp, model_s])
        else:
            model_s = input_model.S[input_model.indx[bpm_name]]
            model_norm_disp = input_model.DX[input_model.indx[bpm_name]] / sqrt(input_model.BETX[input_model.indx[bpm_name]])
            average_norm_disp, final_norm_disp_err = weighted_average_for_SbS_elements(prop_norm_disp, prop_norm_disp_err, back_prop_norm_disp, back_prop_norm_disp_err)

            file_norm_disp_x.add_table_row([bpm_name, bpm_s, average_norm_disp, final_norm_disp_err, model_norm_disp, model_s])
            if bpm_name == element_name:
                summary_data = [average_norm_disp, final_norm_disp_err, model_norm_disp]
    file_norm_disp_x.write_to_file()
    return summary_data
def write_transverse_damper(propagated_models, element_name, input_model,
                            save_path, measured_hor_phase, measured_ver_phase,
                            measured_hor_beta, measured_ver_beta, accel):
    '''
    Function for getting the phase advance between the dampers and pick-ups

    :Parameters:
        'propagated_models.propagation': twiss?
            containing propagation from BPM to damper
        'propagated_models.back_propagation': twiss?
            containing back propagation from BPM to damper
        'element_name': string?
            element name
        'input_model': twiss
            twiss input model
        'save_path': string
            where to save file
        'measured_hor_phase':
            measured phase advances
        'measured_ver_phase':
            measured phase advances
        'errors':
            twissmin,twissminb,twissmax,twissmaxb
    :Return: None
        nothing => writing to file in this function (new/appending)
    '''
    # initial
    damper_map = {}
    bpms_map = {}

    file_transverse_damper = _get_transverse_damper_tfs_file(save_path, accel)

    #beam1
    damper_map['ADTKH.D5L4.B1'] = ['BPMWA.B5L4.B1', 'BPMWA.A5L4.B1']
    damper_map['ADTKH.C5L4.B1'] = ['BPMWA.B5L4.B1', 'BPMWA.A5L4.B1']
    damper_map['ADTKH.B5L4.B1'] = ['BPMWA.B5L4.B1', 'BPMWA.A5L4.B1']
    damper_map['ADTKH.A5L4.B1'] = ['BPMWA.B5L4.B1', 'BPMWA.A5L4.B1']

    damper_map['ADTKV.A5R4.B1'] = ['BPMWA.A5R4.B1', 'BPMWA.B5R4.B1']
    damper_map['ADTKV.B5R4.B1'] = ['BPMWA.A5R4.B1', 'BPMWA.B5R4.B1']
    damper_map['ADTKV.C5R4.B1'] = ['BPMWA.A5R4.B1', 'BPMWA.B5R4.B1']
    damper_map['ADTKV.D5R4.B1'] = ['BPMWA.A5R4.B1', 'BPMWA.B5R4.B1']

    bpms_map['LHCB1_1'] = ['BPMC.9L4.B1', 'BPMC.7L4.B1', 'BPMC.8L4.B1']  # H
    bpms_map['LHCB1_2'] = ['BPMCA.7R4.B1', 'BPMC.9R4.B1', 'BPMC.8R4.B1']  # V

    #beam2
    damper_map['ADTKV.D5L4.B2'] = ['BPMWA.B5L4.B2', 'BPMWA.A5L4.B2']
    damper_map['ADTKV.C5L4.B2'] = ['BPMWA.B5L4.B2', 'BPMWA.A5L4.B2']
    damper_map['ADTKV.B5L4.B2'] = ['BPMWA.B5L4.B2', 'BPMWA.A5L4.B2']
    damper_map['ADTKV.A5L4.B2'] = ['BPMWA.B5L4.B2', 'BPMWA.A5L4.B2']

    damper_map['ADTKH.A5R4.B2'] = ['BPMWA.B5R4.B2', 'BPMWA.A5R4.B2']
    damper_map['ADTKH.B5R4.B2'] = ['BPMWA.B5R4.B2', 'BPMWA.A5R4.B2']
    damper_map['ADTKH.C5R4.B2'] = ['BPMWA.B5R4.B2', 'BPMWA.A5R4.B2']
    damper_map['ADTKH.D5R4.B2'] = ['BPMWA.B5R4.B2', 'BPMWA.A5R4.B2']

    bpms_map['LHCB2_1'] = ['BPMCA.7R4.B2', 'BPMC.9R4.B2', 'BPMC.8R4.B2']  # H
    bpms_map['LHCB2_2'] = ['BPMC.9L4.B2', 'BPMC.7L4.B2', 'BPMC.8L4.B2']  # V

    ## main
    if file_transverse_damper._TfsFileWriter__tfs_table.is_empty(
    ):  # To check if the file is empty

        for count in [1, 2]:

            ref_bpm, end_bpm, eight_bpm = bpms_map[accel + "_" + str(count)]

            # hor bpm_pair's
            try:
                in1x = measured_hor_phase.indx[ref_bpm]

            except:
                in1x = -1

            if (in1x < len(measured_hor_phase.indx) - 1) and (
                    in1x != -1):  # when BPM is not last
                if measured_hor_phase.NAME[measured_hor_phase.indx[ref_bpm] +
                                           1] == end_bpm:
                    in2x = 1
                    eightinphasex = 0
                elif measured_hor_phase.NAME[measured_hor_phase.indx[ref_bpm] +
                                             2] == end_bpm:
                    in2x = 1
                    eightinphasex = 1
                else:  # not in measurement
                    in2x = -1
                    eightinphasex = 0
            elif (in1x != -1):  # when BPM is last
                if measured_hor_phase.NAME[0] == end_bpm:
                    in2x = 1
                    eightinphasex = 0
                elif measured_hor_phase.NAME[1] == end_bpm:
                    in2x = 1
                    eightinphasex = 1
                else:  # not in measurement
                    in2x = -1
                    eightinphasex = 0
            else:
                in2x = -1
                eightinphasex = 0

            # ver bpm's
            try:
                in1y = measured_ver_phase.indx[ref_bpm]
            except:
                in1y = -1

            if (in1y < len(measured_ver_phase.indx) - 1) and (
                    in1y != -1):  # when BPM is not last
                if measured_ver_phase.NAME[measured_ver_phase.indx[ref_bpm] +
                                           1] == end_bpm:
                    in2y = 1
                    eightinphasey = 0
                elif measured_ver_phase.NAME[measured_ver_phase.indx[ref_bpm] +
                                             2] == end_bpm:
                    in2y = 1
                    eightinphasey = 1
                else:  # not in measurement
                    in2y = -1
                    eightinphasey = 0
            elif in1y != -1:  # when BPM is last
                if measured_ver_phase.NAME[0] == end_bpm:
                    in2y = 1
                    eightinphasey = 0
                elif measured_ver_phase.NAME[1] == end_bpm:
                    in2y = 1
                    eightinphasey = 1
                else:  # not in measurement
                    in2y = -1
                    eightinphasey = 0
            else:
                in2y = -1
                eightinphasey = 0

            ###### H plane
            if in1x != -1 and in2x != -1:
                if eightinphasex == 1:
                    phaseh = "% .5f" % float(
                        measured_hor_phase.PHASEX[
                            measured_hor_phase.indx[ref_bpm]] +
                        measured_hor_phase.PHASEX[
                            measured_hor_phase.indx[eight_bpm]])
                    errphaseh = "% .5f" % float(
                        measured_hor_phase.STDPHX[
                            measured_hor_phase.indx[ref_bpm]] +
                        measured_hor_phase.STDPHX[
                            measured_hor_phase.indx[eight_bpm]])
                    phasemodelh = "% .5f" % float(
                        measured_hor_phase.PHXMDL[
                            measured_hor_phase.indx[ref_bpm]] +
                        measured_hor_phase.PHXMDL[
                            measured_hor_phase.indx[eight_bpm]])
                else:
                    phaseh = "% .5f" % float(measured_hor_phase.PHASEX[
                        measured_hor_phase.indx[ref_bpm]])
                    errphaseh = "% .5f" % float(measured_hor_phase.STDPHX[
                        measured_hor_phase.indx[ref_bpm]])
                    phasemodelh = "% .5f" % float(measured_hor_phase.PHXMDL[
                        measured_hor_phase.indx[ref_bpm]])
            else:
                print "Horizontal plane not found for transverse dampers pick-ups"
                phaseh = 'NIM'
                errphaseh = 'NIM'
                phasemodelh = 'NIM'

            ###### V plane
            print in1y, in2y, eightinphasey
            if (in1y != -1) and (in2y != -1):
                if eightinphasey == 1:
                    phasev = "% .5f" % float(
                        measured_ver_phase.PHASEY[
                            measured_ver_phase.indx[ref_bpm]] +
                        measured_ver_phase.PHASEY[
                            measured_ver_phase.indx[eight_bpm]])
                    errphasev = "% .5f" % float(
                        measured_ver_phase.STDPHY[
                            measured_ver_phase.indx[ref_bpm]] +
                        measured_ver_phase.STDPHY[
                            measured_ver_phase.indx[eight_bpm]])
                    phasemodelv = "% .5f" % float(
                        measured_ver_phase.PHYMDL[
                            measured_ver_phase.indx[ref_bpm]] +
                        measured_ver_phase.PHYMDL[
                            measured_ver_phase.indx[eight_bpm]])
                else:
                    phasev = "% .5f" % float(measured_ver_phase.PHASEY[
                        measured_ver_phase.indx[ref_bpm]])
                    errphasev = "% .5f" % float(measured_ver_phase.STDPHY[
                        measured_ver_phase.indx[ref_bpm]])
                    phasemodelv = "% .5f" % float(measured_ver_phase.PHYMDL[
                        measured_ver_phase.indx[ref_bpm]])

            else:
                print "Vertical plane not found for transverse dampers pick-ups"
                phasev = 'NIM'
                errphasev = 'NIM'
                phasemodelv = 'NIM'

            file_transverse_damper.add_table_row([
                ref_bpm, end_bpm, input_model.S[input_model.indx[ref_bpm]],
                input_model.S[input_model.indx[end_bpm]], phaseh, errphaseh,
                phasemodelh, phasev, errphasev, phasemodelv
            ])

    if element_name in damper_map:
        bpm_pair = damper_map[element_name]

        mux_bpm1_prop = propagated_models.propagation.MUX[
            propagated_models.propagation.indx[bpm_pair[0]]]
        mux_bpm2_prop = propagated_models.propagation.MUX[
            propagated_models.propagation.indx[bpm_pair[1]]]
        mux_elem_prop = propagated_models.propagation.MUX[
            propagated_models.propagation.indx[element_name]]
        muy_bpm1_prop = propagated_models.propagation.MUY[
            propagated_models.propagation.indx[bpm_pair[0]]]
        muy_bpm2_prop = propagated_models.propagation.MUY[
            propagated_models.propagation.indx[bpm_pair[1]]]
        muy_elem_prop = propagated_models.propagation.MUY[
            propagated_models.propagation.indx[element_name]]

        model_mux_bpm1 = input_model.MUX[input_model.indx[bpm_pair[0]]]
        model_mux_bpm2 = input_model.MUX[input_model.indx[bpm_pair[1]]]
        model_mux_elem = input_model.MUX[input_model.indx[element_name]]

        model_muy_bpm1 = input_model.MUY[input_model.indx[bpm_pair[0]]]
        model_muy_bpm2 = input_model.MUY[input_model.indx[bpm_pair[1]]]
        model_muy_elem = input_model.MUY[input_model.indx[element_name]]

        phase_advance_x_bpm1_prop = abs(mux_elem_prop - mux_bpm1_prop)
        phase_advance_x_bpm2_prop = abs(mux_bpm2_prop - mux_elem_prop)
        phase_advance_y_bpm1_prop = abs(muy_elem_prop - muy_bpm1_prop)
        phase_advance_y_bpm2_prop = abs(muy_bpm2_prop - muy_elem_prop)

        mux_bpm1_back = propagated_models.back_propagation.MUX[
            propagated_models.back_propagation.indx[bpm_pair[0]]]
        mux_bpm2_back = propagated_models.back_propagation.MUX[
            propagated_models.back_propagation.indx[bpm_pair[1]]]
        mux_elem_back = propagated_models.back_propagation.MUX[
            propagated_models.back_propagation.indx[element_name]]
        muy_bpm1_back = propagated_models.back_propagation.MUY[
            propagated_models.back_propagation.indx[bpm_pair[0]]]
        muy_bpm2_back = propagated_models.back_propagation.MUY[
            propagated_models.back_propagation.indx[bpm_pair[1]]]
        muy_elem_back = propagated_models.back_propagation.MUY[
            propagated_models.back_propagation.indx[element_name]]

        phase_advance_x_bpm1_back = abs(mux_bpm1_back - mux_elem_back)
        phase_advance_x_bpm2_back = abs(mux_elem_back - mux_bpm2_back)
        phase_advance_y_bpm1_back = abs(muy_bpm1_back - muy_elem_back)
        phase_advance_y_bpm2_back = abs(muy_elem_back - muy_bpm2_back)

        model_phase_advance_x_bpm1 = abs(model_mux_elem - model_mux_bpm1)
        model_phase_advance_x_bpm2 = abs(model_mux_bpm2 - model_mux_elem)
        model_phase_advance_y_bpm1 = abs(model_muy_elem - model_muy_bpm1)
        model_phase_advance_y_bpm2 = abs(model_muy_bpm2 - model_muy_elem)

        gather_betas_list = [[0, bpm_pair[0]], [0, bpm_pair[1]]
                             ]  # The function expects this kind of input
        (beta_x_bpm1, err_beta_x_bpm1, alfa_x_bpm1, err_alfa_x_bpm1,
         beta_x_bpm2, err_beta_x_bpm2, alfa_x_bpm2,
         err_alfa_x_bpm2) = sbs_beta_writer._get_start_end_betas(
             gather_betas_list, measured_hor_beta, "X")

        (beta_y_bpm1, err_beta_y_bpm1, alfa_y_bpm1, err_alfa_y_bpm1,
         beta_y_bpm2, err_beta_y_bpm2, alfa_y_bpm2,
         err_alfa_y_bpm2) = sbs_beta_writer._get_start_end_betas(
             gather_betas_list, measured_ver_beta, "Y")

        err_phase_x_bpm1_prop = sbs_phase_writer._propagate_error_phase(
            err_beta_x_bpm1, err_alfa_x_bpm1, phase_advance_x_bpm1_prop,
            beta_x_bpm1, alfa_x_bpm1)
        err_phase_x_bpm1_back = sbs_phase_writer._propagate_error_phase(
            err_beta_x_bpm1, err_alfa_x_bpm1, phase_advance_x_bpm1_back,
            beta_x_bpm1, alfa_x_bpm1)
        err_phase_x_bpm2_prop = sbs_phase_writer._propagate_error_phase(
            err_beta_x_bpm2, err_alfa_x_bpm2, phase_advance_x_bpm2_prop,
            beta_x_bpm2, alfa_x_bpm2)
        err_phase_x_bpm2_back = sbs_phase_writer._propagate_error_phase(
            err_beta_x_bpm2, err_alfa_x_bpm2, phase_advance_x_bpm2_back,
            beta_x_bpm2, alfa_x_bpm2)
        err_phase_y_bpm1_prop = sbs_phase_writer._propagate_error_phase(
            err_beta_y_bpm1, err_alfa_y_bpm1, phase_advance_y_bpm1_prop,
            beta_y_bpm1, alfa_y_bpm1)
        err_phase_y_bpm1_back = sbs_phase_writer._propagate_error_phase(
            err_beta_y_bpm1, err_alfa_y_bpm1, phase_advance_y_bpm1_back,
            beta_y_bpm1, alfa_y_bpm1)
        err_phase_y_bpm2_prop = sbs_phase_writer._propagate_error_phase(
            err_beta_y_bpm2, err_alfa_y_bpm2, phase_advance_y_bpm2_prop,
            beta_y_bpm2, alfa_y_bpm2)
        err_phase_y_bpm2_back = sbs_phase_writer._propagate_error_phase(
            err_beta_y_bpm2, err_alfa_y_bpm2, phase_advance_y_bpm2_back,
            beta_y_bpm2, alfa_y_bpm2)

        # TODO: Is this OK?
        average_phase_advance_x_bpm1, final_error_phase_advance_x_bpm1 = weighted_average_for_SbS_elements(
            phase_advance_x_bpm1_prop, err_phase_x_bpm1_prop,
            phase_advance_x_bpm1_back, err_phase_x_bpm1_back)
        average_phase_advance_y_bpm1, final_error_phase_advance_y_bpm1 = weighted_average_for_SbS_elements(
            phase_advance_y_bpm1_prop, err_phase_y_bpm1_prop,
            phase_advance_y_bpm1_back, err_phase_y_bpm1_back)
        average_phase_advance_x_bpm2, final_error_phase_advance_x_bpm2 = weighted_average_for_SbS_elements(
            phase_advance_x_bpm2_prop, err_phase_x_bpm2_prop,
            phase_advance_x_bpm2_back, err_phase_x_bpm2_back)
        average_phase_advance_y_bpm2, final_error_phase_advance_y_bpm2 = weighted_average_for_SbS_elements(
            phase_advance_y_bpm2_prop, err_phase_y_bpm2_prop,
            phase_advance_y_bpm2_back, err_phase_y_bpm2_back)
        file_transverse_damper.add_table_row([
            bpm_pair[0], element_name,
            input_model.S[input_model.indx[bpm_pair[0]]],
            input_model.S[input_model.indx[element_name]],
            "%.5f" % float(average_phase_advance_x_bpm1),
            "%.5f" % float(final_error_phase_advance_x_bpm1),
            "%.5f" % float(model_phase_advance_x_bpm1),
            "%.5f" % float(average_phase_advance_y_bpm1),
            "%.5f" % float(final_error_phase_advance_y_bpm1),
            "%.5f" % float(model_phase_advance_y_bpm1)
        ])
        file_transverse_damper.add_table_row([
            element_name, bpm_pair[1],
            input_model.S[input_model.indx[element_name]],
            input_model.S[input_model.indx[bpm_pair[1]]],
            "%.5f" % float(average_phase_advance_x_bpm2),
            "%.5f" % float(final_error_phase_advance_x_bpm2),
            "%.5f" % float(model_phase_advance_x_bpm2),
            "%.5f" % float(average_phase_advance_y_bpm2),
            "%.5f" % float(final_error_phase_advance_y_bpm2),
            "%.5f" % float(model_phase_advance_y_bpm2)
        ])
    else:
        print "WARN: Element ", element_name, " Not found in damper_map"

    file_transverse_damper.write_to_file()
def _write_dispersion_for_plane(file_dispersion, plane, element_name, bpms_list, measured_dispersion, input_model, model_cor, model_propagation, model_back_propagation, model_back_cor, is_element):

    summary_data = []

    first_bpm = bpms_list[0][1]
    last_bpm = bpms_list[-1][1]

    for bpm in bpms_list:
        bpm_s = bpm[0]
        bpm_name = bpm[1]

        delta_phase = (getattr(model_propagation, "MU" + plane)[model_propagation.indx[bpm_name]]) % 1
        delta_phase_back = (getattr(model_back_propagation, "MU" + plane)[model_back_propagation.indx[bpm_name]]) % 1

        normal_prop_disp = getattr(model_propagation, "D" + plane)[model_propagation.indx[bpm_name]]
        back_prop_disp = getattr(model_back_propagation, "D" + plane)[model_back_propagation.indx[bpm_name]]

        prop_disp_p = getattr(model_propagation, "DP" + plane)[model_propagation.indx[bpm_name]]
        back_prop_disp_p = getattr(model_back_propagation, "DP" + plane)[model_back_propagation.indx[bpm_name]]
        prop_disp_p_err = 1e-8  # TODO: Propagate?
        back_prop_disp_p_err = 1e-8  # TODO: Propagate?

        normal_prop_disp_err = _propagate_error_dispersion(getattr(measured_dispersion, "STDD" + plane)[measured_dispersion.indx[first_bpm]],
                                                           getattr(model_propagation, "BET" + plane)[model_propagation.indx[first_bpm]],
                                                           getattr(model_propagation, "BET" + plane)[model_propagation.indx[bpm_name]],
                                                           delta_phase,
                                                           getattr(model_propagation, "ALF" + plane)[model_propagation.indx[first_bpm]])

        back_prop_disp_err = _propagate_error_dispersion(getattr(measured_dispersion, "STDD" + plane)[measured_dispersion.indx[last_bpm]],
                                                         getattr(model_back_propagation, "BET" + plane)[model_back_propagation.indx[last_bpm]],
                                                         getattr(model_back_propagation, "BET" + plane)[model_back_propagation.indx[bpm_name]],
                                                         delta_phase_back,
                                                         getattr(model_back_propagation, "ALF" + plane)[model_back_propagation.indx[last_bpm]])

        if not is_element:
            model_s = measured_dispersion.S[measured_dispersion.indx[bpm_name]]
            model_disp = (getattr(measured_dispersion, "D" + plane + "MDL"))[measured_dispersion.indx[bpm_name]]
            model_disp_p = (getattr(measured_dispersion, "DP" + plane + "MDL"))[measured_dispersion.indx[bpm_name]]

            prop_disp_diff = getattr(measured_dispersion, "D" + plane)[measured_dispersion.indx[bpm_name]] - normal_prop_disp
            back_prop_disp_diff = getattr(measured_dispersion, "D" + plane)[measured_dispersion.indx[bpm_name]] - back_prop_disp
            measured_disp_std = getattr(measured_dispersion, "STDD" + plane)[measured_dispersion.indx[bpm_name]]
            prop_disp_diff_err = math.sqrt(measured_disp_std ** 2 + normal_prop_disp_err ** 2)
            back_prop_disp_diff_err = math.sqrt(measured_disp_std ** 2 + back_prop_disp_err ** 2)

            delta_phase_corr = (getattr(model_cor, "MU" + plane)[model_cor.indx[bpm_name]]) % 1
            delta_phase_back_corr = (getattr(model_back_cor, "MU" + plane)[model_back_cor.indx[bpm_name]]) % 1

            corr_disp = getattr(model_cor, "D" + plane)[model_cor.indx[bpm_name]]
            corr_disp_err = _propagate_error_dispersion(getattr(measured_dispersion, "STDD" + plane)[measured_dispersion.indx[last_bpm]],
                                                         getattr(model_cor, "BET" + plane)[model_cor.indx[last_bpm]],
                                                         getattr(model_cor, "BET" + plane)[model_cor.indx[bpm_name]],
                                                         delta_phase_corr,
                                                         getattr(model_back_propagation, "ALF" + plane)[model_cor.indx[last_bpm]])
            corr_disp_diff = corr_disp - normal_prop_disp
            corr_disp_diff_err = math.sqrt(measured_disp_std ** 2 + corr_disp_err ** 2)

            back_corr_prop_disp = getattr(model_back_cor, "D" + plane)[model_back_cor.indx[bpm_name]]
            back_corr_prop_disp_err = _propagate_error_dispersion(getattr(measured_dispersion, "STDD" + plane)[measured_dispersion.indx[last_bpm]],
                                                                     getattr(model_back_cor, "BET" + plane)[model_back_cor.indx[last_bpm]],
                                                                     getattr(model_back_cor, "BET" + plane)[model_back_cor.indx[bpm_name]],
                                                                     delta_phase_back_corr,
                                                                     getattr(model_back_cor, "ALF" + plane)[model_back_cor.indx[last_bpm]])
            back_corr_disp_diff = back_corr_prop_disp - back_prop_disp
            back_corr_disp_diff_err = math.sqrt(measured_disp_std ** 2 + back_corr_prop_disp_err ** 2)

            measured_disp_p_std = getattr(measured_dispersion, "STDD" + plane)[measured_dispersion.indx[bpm_name]]

            prop_disp_p_diff = getattr(measured_dispersion, "DP" + plane)[measured_dispersion.indx[bpm_name]] - prop_disp_p
            prop_disp_p_diff_err = math.sqrt(measured_disp_p_std ** 2 + prop_disp_p_err ** 2)

            back_prop_disp_p_diff = getattr(measured_dispersion, "DP" + plane)[measured_dispersion.indx[bpm_name]] - back_prop_disp_p
            back_prop_disp_p_diff_err = math.sqrt(measured_disp_p_std ** 2 + back_prop_disp_p_err ** 2)

            corr_disp_p = getattr(model_cor, "DP" + plane)[model_cor.indx[bpm_name]]
            corr_disp_p_err = 1e-8  # TODO: propagate?
            corr_disp_p_diff = corr_disp_p - prop_disp_p
            corr_disp_p_diff_err = math.sqrt(measured_disp_p_std ** 2 + corr_disp_p_err ** 2)

            back_corr_disp_p = getattr(model_back_cor, "DP" + plane)[model_back_cor.indx[bpm_name]]
            back_corr_disp_p_err = 1e-8  # TODO: propagate?
            back_corr_disp_p_diff = back_corr_disp_p - back_prop_disp_p
            back_corr_disp_p_diff_err = math.sqrt(measured_disp_p_std ** 2 + back_corr_disp_p_err ** 2)

            file_dispersion.add_table_row([bpm_name, bpm_s,
                                           prop_disp_diff, prop_disp_diff_err, corr_disp_diff, corr_disp_diff_err,
                                           back_prop_disp_diff, back_prop_disp_diff_err, back_corr_disp_diff, back_corr_disp_diff_err,
                                           prop_disp_p_diff, prop_disp_p_diff_err, corr_disp_p_diff, corr_disp_p_diff_err,
                                           back_prop_disp_p_diff, back_prop_disp_p_diff_err, back_corr_disp_p_diff, back_corr_disp_p_diff_err,
                                           model_disp, model_disp_p, model_s])
        else:
            model_s = input_model.S[input_model.indx[bpm_name]]
            model_disp = (getattr(input_model, "D" + plane))[input_model.indx[bpm_name]]
            model_disp_p = (getattr(input_model, "DP" + plane))[input_model.indx[bpm_name]]

            average_disp, final_disp_err = weighted_average_for_SbS_elements(normal_prop_disp, normal_prop_disp_err, back_prop_disp, back_prop_disp_err)
            average_disp_p, final_disp_p_err = weighted_average_for_SbS_elements(prop_disp_p, prop_disp_p_err, back_prop_disp_p, back_prop_disp_p_err)

            file_dispersion.add_table_row([bpm_name, bpm_s, average_disp, final_disp_err, average_disp_p, final_disp_p_err, model_disp, model_disp_p, model_s])
            if bpm_name == element_name:
                summary_data = [bpm_name, bpm_s, average_disp, final_disp_err, average_disp_p, final_disp_p_err, model_disp, model_disp_p, model_s]
    file_dispersion.write_to_file()
    return summary_data
def _write_C_terms(file_C_terms, element_name, is_element, bpms_list,
                   measured_coupling, input_model, model_propagation,
                   model_back_propagation, model_cor, model_back_cor):

    summary_data = []

    for bpm in bpms_list:
        bpm_s = bpm[0]
        bpm_name = bpm[1]

        prop_c11, prop_c12, prop_c21, prop_c22 = model_propagation.C[
            model_propagation.indx[bpm_name]]
        err_prop_c11, err_prop_c12, err_prop_c21, err_prop_c22 = [
            1e-8, 1e-8, 1e-8, 1e-8
        ]  # TODO: propagate errors

        back_c11, back_c12, back_c21, back_c22 = model_back_propagation.C[
            model_back_propagation.indx[bpm_name]]
        err_back_c11, err_back_c12, err_back_c21, err_back_c22 = [
            1e-8, 1e-8, 1e-8, 1e-8
        ]  # TODO: propagate errors

        if not is_element:
            model_s = measured_coupling.S[measured_coupling.indx[bpm_name]]
            cor_c11, cor_c12, cor_c21, cor_c22 = model_cor.C[
                model_cor.indx[bpm_name]]
            err_cor_c11, err_cor_c12, err_cor_c21, err_cor_c22 = [
                1e-8, 1e-8, 1e-8, 1e-8
            ]  # TODO: propagate errors

            back_cor_c11, back_cor_c12, back_cor_c21, back_cor_c22 = model_back_cor.C[
                model_back_cor.indx[bpm_name]]
            err_back_cor_c11, err_back_cor_c12, err_back_cor_c21, err_back_cor_c22 = [
                1e-8, 1e-8, 1e-8, 1e-8
            ]  # TODO: propagate errors

            file_C_terms.add_table_row([
                bpm_name, bpm_s, prop_c11, err_prop_c11, prop_c12,
                err_prop_c12, prop_c21, err_prop_c21, prop_c22, err_prop_c22,
                cor_c11, err_cor_c11, cor_c12, err_cor_c12, cor_c21,
                err_cor_c21, cor_c22, err_cor_c22, back_c11, err_back_c11,
                back_c12, err_back_c12, back_c21, err_back_c21, back_c22,
                err_back_c22, back_cor_c11, err_back_cor_c11, back_cor_c12,
                err_back_cor_c12, back_cor_c21, err_back_cor_c21, back_cor_c22,
                err_back_cor_c22, model_s
            ])
        else:
            model_s = input_model.S[input_model.indx[bpm_name]]
            average_c11, final_err_c11 = weighted_average_for_SbS_elements(
                prop_c11, err_prop_c11, back_c11, err_back_c11)
            average_c12, final_err_c12 = weighted_average_for_SbS_elements(
                prop_c12, err_prop_c12, back_c12, err_back_c12)
            average_c21, final_err_c21 = weighted_average_for_SbS_elements(
                prop_c21, err_prop_c21, back_c21, err_back_c21)
            average_c21, final_err_c21 = weighted_average_for_SbS_elements(
                prop_c22, err_prop_c22, back_c22, err_back_c22)
            file_C_terms.add_table_row([
                bpm_name, bpm_s, average_c11, final_err_c11, average_c12,
                final_err_c12, average_c21, final_err_c21, average_c21,
                final_err_c21, model_s
            ])
            if bpm_name == element_name:
                summary_data = [
                    bpm_name, bpm_s, average_c11, final_err_c11, average_c12,
                    final_err_c12, average_c21, final_err_c21, average_c21,
                    final_err_c21, model_s
                ]
    file_C_terms.write_to_file()
    return summary_data
def _write_f_terms(file_f_terms, element_name, is_element, bpms_list,
                   measured_coupling, input_model, model_propagation,
                   model_back_propagation, model_cor, model_back_cor):
    summary_data = []
    first_bpm = bpms_list[0][1]
    last_bpm = bpms_list[-1][1]

    (f1001ab_ini, f1001_std_ini, p1001_ini, p1001_std_ini, f1001ab_end,
     f1001_std_end, p1001_end,
     p1001_std_end) = _get_start_end_f1001(measured_coupling, first_bpm,
                                           last_bpm)
    (f1010ab_ini, f1010_std_ini, p1010_ini, p1010_std_ini, f1010ab_end,
     f1010_std_end, p1010_end,
     p1010_std_end) = _get_start_end_f1010(measured_coupling, first_bpm,
                                           last_bpm)

    if input_model is not None:
        input_model.Cmatrix()

    for bpm in bpms_list:
        bpm_s = bpm[0]
        bpm_name = bpm[1]

        delta_phase_prop_x = model_propagation.MUX[
            model_propagation.indx[bpm_name]] % 1
        delta_phase_prop_y = model_propagation.MUY[
            model_propagation.indx[bpm_name]] % 1

        f1001_prop = model_propagation.f1001[model_propagation.indx[bpm_name]]
        err_f1001re_prop = _propagate_error_coupling_1001_re(
            f1001ab_ini, p1001_ini, delta_phase_prop_x, delta_phase_prop_y,
            f1001_std_ini, p1001_std_ini)
        err_f1001im_prop = _propagate_error_coupling_1001_im(
            f1001ab_ini, p1001_ini, delta_phase_prop_x, delta_phase_prop_y,
            f1001_std_ini, p1001_std_ini)
        err_f1001abs_prop = f1001_std_ini
        f1010_prop = model_propagation.f1010[model_propagation.indx[bpm_name]]
        err_f1010re_prop = _propagate_error_coupling_1010_re(
            f1010ab_ini, p1010_ini, delta_phase_prop_x, delta_phase_prop_y,
            f1010_std_ini, p1010_std_ini)
        err_f1010im_prop = _propagate_error_coupling_1010_im(
            f1010ab_ini, p1010_ini, delta_phase_prop_x, delta_phase_prop_y,
            f1010_std_ini, p1010_std_ini)
        err_f1010abs_prop = f1010_std_ini

        delta_phase_back_x = model_back_propagation.MUX[
            model_back_propagation.indx[bpm_name]] % 1
        delta_phase_back_y = model_back_propagation.MUY[
            model_back_propagation.indx[bpm_name]] % 1

        f1001_back = model_back_propagation.f1001[
            model_back_propagation.indx[bpm_name]]
        err_f1001re_back = _propagate_error_coupling_1001_re(
            f1001ab_end, p1001_end, delta_phase_back_x, delta_phase_back_y,
            f1001_std_end, p1001_std_end)
        err_f1001im_back = _propagate_error_coupling_1001_im(
            f1001ab_end, p1001_end, delta_phase_back_x, delta_phase_back_y,
            f1001_std_end, p1001_std_end)
        err_f1001abs_back = f1001_std_end
        f1010_back = model_back_propagation.f1010[
            model_back_propagation.indx[bpm_name]]
        err_f1010re_back = _propagate_error_coupling_1010_re(
            f1010ab_end, p1010_end, delta_phase_back_x, delta_phase_back_y,
            f1010_std_end, p1010_std_end)
        err_f1010im_back = _propagate_error_coupling_1010_im(
            f1010ab_end, p1010_end, delta_phase_back_x, delta_phase_back_y,
            f1010_std_end, p1010_std_end)
        err_f1010abs_back = f1010_std_end

        if not is_element:
            model_s = measured_coupling.S[measured_coupling.indx[bpm_name]]
            model_f1001r = measured_coupling.MDLF1001R[
                measured_coupling.indx[bpm_name]]
            model_f1001i = measured_coupling.MDLF1001I[
                measured_coupling.indx[bpm_name]]
            model_f1010r = measured_coupling.MDLF1010R[
                measured_coupling.indx[bpm_name]]
            model_f1010i = measured_coupling.MDLF1010I[
                measured_coupling.indx[bpm_name]]

            meas_abs_f1001 = measured_coupling.F1001W[
                measured_coupling.indx[bpm_name]]
            meas_q1001 = measured_coupling.Q1001[
                measured_coupling.indx[bpm_name]]
            meas_f1001r = measured_coupling.F1001R[
                measured_coupling.indx[bpm_name]]
            meas_f1001i = measured_coupling.F1001I[
                measured_coupling.indx[bpm_name]]
            err_meas_abs_f1001 = measured_coupling.FWSTD1[
                measured_coupling.indx[bpm_name]]
            err_meas_q1001 = measured_coupling.Q1001STD[
                measured_coupling.indx[bpm_name]]
            err_meas_f1001r = _propagate_error_coupling_1001_re(
                meas_abs_f1001, meas_q1001, 0., 0., err_meas_abs_f1001,
                err_meas_q1001)
            err_meas_f1001i = _propagate_error_coupling_1001_im(
                meas_abs_f1001, meas_q1001, 0., 0., err_meas_abs_f1001,
                err_meas_q1001)

            meas_abs_f1010 = measured_coupling.F1010W[
                measured_coupling.indx[bpm_name]]
            meas_q1010 = measured_coupling.Q1010[
                measured_coupling.indx[bpm_name]]
            meas_f1010r = measured_coupling.F1010R[
                measured_coupling.indx[bpm_name]]
            meas_f1010i = measured_coupling.F1010I[
                measured_coupling.indx[bpm_name]]
            err_meas_abs_f1010 = measured_coupling.FWSTD1[
                measured_coupling.indx[bpm_name]]
            err_meas_q1010 = measured_coupling.Q1010STD[
                measured_coupling.indx[bpm_name]]
            err_meas_f1010r = _propagate_error_coupling_1010_re(
                meas_abs_f1010, meas_q1010, 0., 0., err_meas_abs_f1010,
                err_meas_q1010)
            err_meas_f1010i = _propagate_error_coupling_1010_im(
                meas_abs_f1010, meas_q1010, 0., 0., err_meas_abs_f1010,
                err_meas_q1010)

            delta_phase_corr_x = model_cor.MUX[model_cor.indx[bpm_name]] % 1
            delta_phase_corr_y = model_cor.MUY[model_cor.indx[bpm_name]] % 1

            f1001_corr = model_cor.f1001[model_cor.indx[bpm_name]]
            err_f1001re_corr = _propagate_error_coupling_1001_re(
                f1001ab_ini, p1001_ini, delta_phase_corr_x, delta_phase_corr_y,
                f1001_std_ini, p1001_std_ini)
            err_f1001im_corr = _propagate_error_coupling_1001_im(
                f1001ab_ini, p1001_ini, delta_phase_corr_x, delta_phase_corr_y,
                f1001_std_ini, p1001_std_ini)
            err_f1001abs_corr = f1001_std_ini
            f1010_corr = model_cor.f1010[model_cor.indx[bpm_name]]
            err_f1010re_corr = _propagate_error_coupling_1010_re(
                f1010ab_ini, p1010_ini, delta_phase_corr_x, delta_phase_corr_y,
                f1010_std_ini, p1010_std_ini)
            err_f1010im_corr = _propagate_error_coupling_1010_im(
                f1010ab_ini, p1010_ini, delta_phase_corr_x, delta_phase_corr_y,
                f1010_std_ini, p1010_std_ini)
            err_f1010abs_corr = f1010_std_ini

            delta_phase_back_corr_x = model_back_cor.MUX[
                model_back_cor.indx[bpm_name]] % 1
            delta_phase_back_corr_y = model_back_cor.MUY[
                model_back_cor.indx[bpm_name]] % 1

            f1001_back_corr = model_back_cor.f1001[
                model_back_cor.indx[bpm_name]]
            err_f1001re_back_corr = _propagate_error_coupling_1001_re(
                f1001ab_end, p1001_end, delta_phase_back_corr_x,
                delta_phase_back_corr_y, f1001_std_end, p1001_std_end)
            err_f1001im_back_corr = _propagate_error_coupling_1001_im(
                f1001ab_end, p1001_end, delta_phase_back_corr_x,
                delta_phase_back_corr_y, f1001_std_end, p1001_std_end)
            err_f1001abs_back_corr = f1001_std_end
            f1010_back_corr = model_back_cor.f1010[
                model_back_cor.indx[bpm_name]]
            err_f1010re_back_corr = _propagate_error_coupling_1010_re(
                f1010ab_end, p1010_end, delta_phase_back_corr_x,
                delta_phase_back_corr_y, f1010_std_end, p1010_std_end)
            err_f1010im_back_corr = _propagate_error_coupling_1010_im(
                f1010ab_end, p1010_end, delta_phase_back_corr_x,
                delta_phase_back_corr_y, f1010_std_end, p1010_std_end)
            err_f1010abs_back_corr = f1010_std_end

            file_f_terms.add_table_row([
                bpm_name, bpm_s, meas_abs_f1001, err_meas_abs_f1001,
                meas_f1001r, err_meas_f1001r, meas_f1001i, err_meas_f1001i,
                meas_abs_f1010, err_meas_abs_f1010, meas_f1010r,
                err_meas_f1010r, meas_f1010i, err_meas_f1010i,
                abs(f1001_corr), err_f1001abs_corr, f1001_corr.real,
                err_f1001re_corr, f1001_corr.imag, err_f1001im_corr,
                abs(f1010_corr), err_f1010abs_corr, f1010_corr.real,
                err_f1010re_corr, f1010_corr.imag, err_f1010im_corr,
                abs(f1001_back), err_f1001abs_back, f1001_back.real,
                err_f1001re_back, f1001_back.imag, err_f1001im_back,
                abs(f1010_back), err_f1010abs_back, f1010_back.real,
                err_f1010re_back, f1010_back.imag, err_f1010im_back,
                abs(f1001_back_corr), err_f1001abs_back_corr,
                f1001_back_corr.real, err_f1001re_back_corr,
                f1001_back_corr.imag, err_f1001im_back_corr,
                abs(f1010_back_corr), err_f1010abs_back_corr,
                f1010_back_corr.real, err_f1010re_back_corr,
                f1010_back_corr.imag, err_f1010im_back_corr, model_f1001r,
                model_f1001i, model_f1010r, model_f1010i, model_s
            ])
        else:
            model_s = input_model.S[input_model.indx[bpm_name]]

            model_f1001r = input_model.f1001[input_model.indx[bpm_name]].real
            model_f1001i = input_model.f1001[input_model.indx[bpm_name]].imag
            model_f1010r = input_model.f1010[input_model.indx[bpm_name]].real
            model_f1010i = input_model.f1010[input_model.indx[bpm_name]].imag

            average_f1001ab, final_f1001abs_err = weighted_average_for_SbS_elements(
                abs(f1001_prop), err_f1001abs_prop, abs(f1001_back),
                err_f1001abs_back)
            average_f1001re, final_f1001re_err = weighted_average_for_SbS_elements(
                f1001_prop.real, err_f1001re_prop, f1001_back.real,
                err_f1001re_back)
            average_f1001im, final_f1001im_err = weighted_average_for_SbS_elements(
                f1001_prop.imag, err_f1001im_prop, f1001_back.imag,
                err_f1001im_back)

            average_f1010ab, final_f1010abs_err = weighted_average_for_SbS_elements(
                abs(f1010_prop), err_f1010abs_prop, abs(f1010_back),
                err_f1010abs_back)
            average_f1010re, final_f1010re_err = weighted_average_for_SbS_elements(
                f1010_prop.real, err_f1010re_prop, f1010_back.real,
                err_f1010re_back)
            average_f1010im, final_f1010im_err = weighted_average_for_SbS_elements(
                f1010_prop.imag, err_f1010im_prop, f1010_back.imag,
                err_f1010im_back)

            file_f_terms.add_table_row([
                bpm_name, bpm_s, average_f1001ab, final_f1001abs_err,
                average_f1001re, final_f1001re_err, average_f1001im,
                final_f1001im_err, average_f1010ab, final_f1010abs_err,
                average_f1010re, final_f1010re_err, average_f1010im,
                final_f1010im_err, model_f1001r, model_f1001i, model_f1010r,
                model_f1010i, model_s
            ])
            if bpm_name == element_name:
                summary_data = [
                    bpm_name, bpm_s, average_f1001ab, final_f1001abs_err,
                    average_f1001re, final_f1001re_err, average_f1001im,
                    final_f1001im_err, average_f1010ab, final_f1010abs_err,
                    average_f1010re, final_f1010re_err, average_f1010im,
                    final_f1010im_err, model_f1001r, model_f1001i,
                    model_f1010r, model_f1010i, model_s
                ]
    file_f_terms.write_to_file()
    return summary_data
예제 #9
0
def _write_chromatic_w_for_plane(file_chromatic, plane, element_name,
                                 bpms_list, measured_chromatic_w, input_model,
                                 model_propagation, model_cor,
                                 model_back_propagation, model_back_cor,
                                 save_path, is_element):
    summary_data = []
    for bpm in bpms_list:
        bpm_s = bpm[0]
        bpm_name = bpm[1]

        model_s = input_model.S[input_model.indx[bpm_name]]
        model_w = getattr(input_model, "W" + plane)[input_model.indx[bpm_name]]
        model_phi = getattr(input_model,
                            "PHI" + plane)[input_model.indx[bpm_name]]

        w_prop = getattr(model_propagation,
                         "W" + plane)[model_propagation.indx[bpm_name]]
        phi_prop = getattr(model_propagation,
                           "PHI" + plane)[model_propagation.indx[bpm_name]]
        err_w_prop = 1e-8  # TODO: Propagate
        err_phi_prop = 1e-8  # TODO: Propagate

        w_back = getattr(model_back_propagation,
                         "W" + plane)[model_back_propagation.indx[bpm_name]]
        phi_back = getattr(model_back_propagation, "PHI" +
                           plane)[model_back_propagation.indx[bpm_name]]
        err_w_back = 1e-8  # TODO: Propagate
        err_phi_back = 1e-8  # TODO: Propagate

        if not is_element:
            w_cor = getattr(model_cor, "W" + plane)[model_cor.indx[bpm_name]]
            phi_cor = getattr(model_cor,
                              "PHI" + plane)[model_cor.indx[bpm_name]]
            err_w_cor = 1e-8  # TODO: Propagate
            err_phi_cor = 1e-8  # TODO: Propagate

            w_back_cor = getattr(model_back_cor,
                                 "W" + plane)[model_back_cor.indx[bpm_name]]
            phi_back_cor = getattr(model_back_cor, "PHI" +
                                   plane)[model_back_cor.indx[bpm_name]]
            err_w_back_cor = 1e-8  # TODO: Propagate
            err_phi_back_cor = 1e-8  # TODO: Propagate

            file_chromatic.add_table_row([
                bpm_name, bpm_s, w_prop, err_w_prop, phi_prop, err_phi_prop,
                w_cor, err_w_cor, phi_cor, err_phi_cor, w_back, err_w_back,
                phi_back, err_phi_back, w_back_cor, err_w_back_cor,
                phi_back_cor, err_phi_back_cor, model_w, model_phi, model_s
            ])
        else:
            average_w, final_err_w = weighted_average_for_SbS_elements(
                w_prop, err_w_prop, w_back, err_w_prop)
            average_phi, final_err_phi = weighted_average_for_SbS_elements(
                phi_prop, err_phi_prop, phi_back, err_phi_prop)
            file_chromatic.add_table_row([
                bpm_name, bpm_s, average_w, final_err_w, average_phi,
                final_err_phi, model_w, model_phi, model_s
            ])
            if element_name == bpm_name:
                summary_data = [
                    bpm_name, bpm_s, average_w, final_err_w, average_phi,
                    final_err_phi, model_w, model_phi, model_s
                ]

    file_chromatic.write_to_file()
    return summary_data
예제 #10
0
def _write_dispersion_for_plane(file_dispersion, plane, element_name, bpms_list, measured_dispersion, input_model, model_cor, model_propagation, model_back_propagation, model_back_cor, is_element):

    summary_data = []

    first_bpm = bpms_list[0][1]
    last_bpm = bpms_list[-1][1]

    for bpm in bpms_list:
        bpm_s = bpm[0]
        bpm_name = bpm[1]

        delta_phase = (getattr(model_propagation, "MU" + plane)[model_propagation.indx[bpm_name]]) % 1
        delta_phase_back = (getattr(model_back_propagation, "MU" + plane)[model_back_propagation.indx[bpm_name]]) % 1

        normal_prop_disp = getattr(model_propagation, "D" + plane)[model_propagation.indx[bpm_name]]
        back_prop_disp = getattr(model_back_propagation, "D" + plane)[model_back_propagation.indx[bpm_name]]

        prop_disp_p = getattr(model_propagation, "DP" + plane)[model_propagation.indx[bpm_name]]
        back_prop_disp_p = getattr(model_back_propagation, "DP" + plane)[model_back_propagation.indx[bpm_name]]
        prop_disp_p_err = 1e-8  # TODO: Propagate?
        back_prop_disp_p_err = 1e-8  # TODO: Propagate?

        normal_prop_disp_err = _propagate_error_dispersion(getattr(measured_dispersion, "STDD" + plane)[measured_dispersion.indx[first_bpm]],
                                                           getattr(model_propagation, "BET" + plane)[model_propagation.indx[first_bpm]],
                                                           getattr(model_propagation, "BET" + plane)[model_propagation.indx[bpm_name]],
                                                           delta_phase,
                                                           getattr(model_propagation, "ALF" + plane)[model_propagation.indx[first_bpm]])

        back_prop_disp_err = _propagate_error_dispersion(getattr(measured_dispersion, "STDD" + plane)[measured_dispersion.indx[last_bpm]],
                                                         getattr(model_back_propagation, "BET" + plane)[model_back_propagation.indx[last_bpm]],
                                                         getattr(model_back_propagation, "BET" + plane)[model_back_propagation.indx[bpm_name]],
                                                         delta_phase_back,
                                                         getattr(model_back_propagation, "ALF" + plane)[model_back_propagation.indx[last_bpm]])

        if not is_element:
            model_s = measured_dispersion.S[measured_dispersion.indx[bpm_name]]
            model_disp = (getattr(measured_dispersion, "D" + plane + "MDL"))[measured_dispersion.indx[bpm_name]]
            model_disp_p = (getattr(measured_dispersion, "DP" + plane + "MDL"))[measured_dispersion.indx[bpm_name]]

            prop_disp_diff = getattr(measured_dispersion, "D" + plane)[measured_dispersion.indx[bpm_name]] - normal_prop_disp
            back_prop_disp_diff = getattr(measured_dispersion, "D" + plane)[measured_dispersion.indx[bpm_name]] - back_prop_disp
            measured_disp_std = getattr(measured_dispersion, "STDD" + plane)[measured_dispersion.indx[bpm_name]]
            prop_disp_diff_err = math.sqrt(measured_disp_std ** 2 + normal_prop_disp_err ** 2)
            back_prop_disp_diff_err = math.sqrt(measured_disp_std ** 2 + back_prop_disp_err ** 2)

            delta_phase_corr = (getattr(model_cor, "MU" + plane)[model_cor.indx[bpm_name]]) % 1
            delta_phase_back_corr = (getattr(model_back_cor, "MU" + plane)[model_back_cor.indx[bpm_name]]) % 1

            corr_disp = getattr(model_cor, "D" + plane)[model_cor.indx[bpm_name]]
            corr_disp_err = _propagate_error_dispersion(getattr(measured_dispersion, "STDD" + plane)[measured_dispersion.indx[last_bpm]],
                                                         getattr(model_cor, "BET" + plane)[model_cor.indx[last_bpm]],
                                                         getattr(model_cor, "BET" + plane)[model_cor.indx[bpm_name]],
                                                         delta_phase_corr,
                                                         getattr(model_back_propagation, "ALF" + plane)[model_cor.indx[last_bpm]])
            corr_disp_diff = corr_disp - normal_prop_disp
            corr_disp_diff_err = math.sqrt(measured_disp_std ** 2 + corr_disp_err ** 2)

            back_corr_prop_disp = getattr(model_back_cor, "D" + plane)[model_back_cor.indx[bpm_name]]
            back_corr_prop_disp_err = _propagate_error_dispersion(getattr(measured_dispersion, "STDD" + plane)[measured_dispersion.indx[last_bpm]],
                                                                     getattr(model_back_cor, "BET" + plane)[model_back_cor.indx[last_bpm]],
                                                                     getattr(model_back_cor, "BET" + plane)[model_back_cor.indx[bpm_name]],
                                                                     delta_phase_back_corr,
                                                                     getattr(model_back_cor, "ALF" + plane)[model_back_cor.indx[last_bpm]])
            back_corr_disp_diff = back_corr_prop_disp - back_prop_disp
            back_corr_disp_diff_err = math.sqrt(measured_disp_std ** 2 + back_corr_prop_disp_err ** 2)

            measured_disp_p_std = getattr(measured_dispersion, "STDD" + plane)[measured_dispersion.indx[bpm_name]]

            prop_disp_p_diff = getattr(measured_dispersion, "DP" + plane)[measured_dispersion.indx[bpm_name]] - prop_disp_p
            prop_disp_p_diff_err = math.sqrt(measured_disp_p_std ** 2 + prop_disp_p_err ** 2)

            back_prop_disp_p_diff = getattr(measured_dispersion, "DP" + plane)[measured_dispersion.indx[bpm_name]] - back_prop_disp_p
            back_prop_disp_p_diff_err = math.sqrt(measured_disp_p_std ** 2 + back_prop_disp_p_err ** 2)

            corr_disp_p = getattr(model_cor, "DP" + plane)[model_cor.indx[bpm_name]]
            corr_disp_p_err = 1e-8  # TODO: propagate?
            corr_disp_p_diff = corr_disp_p - prop_disp_p
            corr_disp_p_diff_err = math.sqrt(measured_disp_p_std ** 2 + corr_disp_p_err ** 2)

            back_corr_disp_p = getattr(model_back_cor, "DP" + plane)[model_back_cor.indx[bpm_name]]
            back_corr_disp_p_err = 1e-8  # TODO: propagate?
            back_corr_disp_p_diff = back_corr_disp_p - back_prop_disp_p
            back_corr_disp_p_diff_err = math.sqrt(measured_disp_p_std ** 2 + back_corr_disp_p_err ** 2)

            file_dispersion.add_table_row([bpm_name, bpm_s,
                                           prop_disp_diff, prop_disp_diff_err, corr_disp_diff, corr_disp_diff_err,
                                           back_prop_disp_diff, back_prop_disp_diff_err, back_corr_disp_diff, back_corr_disp_diff_err,
                                           prop_disp_p_diff, prop_disp_p_diff_err, corr_disp_p_diff, corr_disp_p_diff_err,
                                           back_prop_disp_p_diff, back_prop_disp_p_diff_err, back_corr_disp_p_diff, back_corr_disp_p_diff_err,
                                           model_disp, model_disp_p, model_s])
        else:
            model_s = input_model.S[input_model.indx[bpm_name]]
            model_disp = (getattr(input_model, "D" + plane))[input_model.indx[bpm_name]]
            model_disp_p = (getattr(input_model, "DP" + plane))[input_model.indx[bpm_name]]

            average_disp, final_disp_err = weighted_average_for_SbS_elements(normal_prop_disp, normal_prop_disp_err, back_prop_disp, back_prop_disp_err)
            average_disp_p, final_disp_p_err = weighted_average_for_SbS_elements(prop_disp_p, prop_disp_p_err, back_prop_disp_p, back_prop_disp_p_err)

            file_dispersion.add_table_row([bpm_name, bpm_s, average_disp, final_disp_err, average_disp_p, final_disp_p_err, model_disp, model_disp_p, model_s])
            if bpm_name == element_name:
                summary_data = [bpm_name, bpm_s, average_disp, final_disp_err, average_disp_p, final_disp_p_err, model_disp, model_disp_p, model_s]
    file_dispersion.write_to_file()
    return summary_data
예제 #11
0
def write_transverse_damper(propagated_models, element_name, input_model, save_path, measured_hor_phase, measured_ver_phase, measured_hor_beta, measured_ver_beta, accel):
    '''
    Function for getting the phase advance between the dampers and pick-ups

    :Parameters:
        'propagated_models.propagation': twiss?
            containing propagation from BPM to damper
        'propagated_models.back_propagation': twiss?
            containing back propagation from BPM to damper
        'element_name': string?
            element name
        'input_model': twiss
            twiss input model
        'save_path': string
            where to save file
        'measured_hor_phase':
            measured phase advances
        'measured_ver_phase':
            measured phase advances
        'errors':
            twissmin,twissminb,twissmax,twissmaxb
    :Return: None
        nothing => writing to file in this function (new/appending)
    '''
    # initial
    damper_map = {}
    bpms_map = {}

    file_transverse_damper = _get_transverse_damper_tfs_file(save_path, accel)

    #beam1
    damper_map['ADTKH.D5L4.B1'] = ['BPMWA.B5L4.B1', 'BPMWA.A5L4.B1']
    damper_map['ADTKH.C5L4.B1'] = ['BPMWA.B5L4.B1', 'BPMWA.A5L4.B1']
    damper_map['ADTKH.B5L4.B1'] = ['BPMWA.B5L4.B1', 'BPMWA.A5L4.B1']
    damper_map['ADTKH.A5L4.B1'] = ['BPMWA.B5L4.B1', 'BPMWA.A5L4.B1']

    damper_map['ADTKV.A5R4.B1'] = ['BPMWA.A5R4.B1', 'BPMWA.B5R4.B1']
    damper_map['ADTKV.B5R4.B1'] = ['BPMWA.A5R4.B1', 'BPMWA.B5R4.B1']
    damper_map['ADTKV.C5R4.B1'] = ['BPMWA.A5R4.B1', 'BPMWA.B5R4.B1']
    damper_map['ADTKV.D5R4.B1'] = ['BPMWA.A5R4.B1', 'BPMWA.B5R4.B1']

    bpms_map['LHCB1_1'] = ['BPMC.9L4.B1', 'BPMC.7L4.B1', 'BPMC.8L4.B1']  # H
    bpms_map['LHCB1_2'] = ['BPMCA.7R4.B1', 'BPMC.9R4.B1', 'BPMC.8R4.B1']  # V

    #beam2
    damper_map['ADTKV.D5L4.B2'] = ['BPMWA.B5L4.B2', 'BPMWA.A5L4.B2']
    damper_map['ADTKV.C5L4.B2'] = ['BPMWA.B5L4.B2', 'BPMWA.A5L4.B2']
    damper_map['ADTKV.B5L4.B2'] = ['BPMWA.B5L4.B2', 'BPMWA.A5L4.B2']
    damper_map['ADTKV.A5L4.B2'] = ['BPMWA.B5L4.B2', 'BPMWA.A5L4.B2']

    damper_map['ADTKH.A5R4.B2'] = ['BPMWA.B5R4.B2', 'BPMWA.A5R4.B2']
    damper_map['ADTKH.B5R4.B2'] = ['BPMWA.B5R4.B2', 'BPMWA.A5R4.B2']
    damper_map['ADTKH.C5R4.B2'] = ['BPMWA.B5R4.B2', 'BPMWA.A5R4.B2']
    damper_map['ADTKH.D5R4.B2'] = ['BPMWA.B5R4.B2', 'BPMWA.A5R4.B2']

    bpms_map['LHCB2_1'] = ['BPMCA.7R4.B2', 'BPMC.9R4.B2', 'BPMC.8R4.B2']  # H
    bpms_map['LHCB2_2'] = ['BPMC.9L4.B2', 'BPMC.7L4.B2', 'BPMC.8L4.B2']  # V

    ## main
    if file_transverse_damper._TfsFileWriter__tfs_table.is_empty():  # To check if the file is empty

        for count in [1, 2]:

            ref_bpm, end_bpm, eight_bpm = bpms_map[accel + "_" + str(count)]

            # hor bpm_pair's
            try:
                in1x = measured_hor_phase.indx[ref_bpm]

            except:
                in1x = -1

            if (in1x < len(measured_hor_phase.indx) - 1) and (in1x != -1):  # when BPM is not last
                if measured_hor_phase.NAME[measured_hor_phase.indx[ref_bpm] + 1] == end_bpm:
                    in2x = 1
                    eightinphasex = 0
                elif measured_hor_phase.NAME[measured_hor_phase.indx[ref_bpm] + 2] == end_bpm:
                    in2x = 1
                    eightinphasex = 1
                else:  # not in measurement
                    in2x = -1
                    eightinphasex = 0
            elif (in1x != -1):  # when BPM is last
                if measured_hor_phase.NAME[0] == end_bpm:
                    in2x = 1
                    eightinphasex = 0
                elif measured_hor_phase.NAME[1] == end_bpm:
                    in2x = 1
                    eightinphasex = 1
                else:  # not in measurement
                    in2x = -1
                    eightinphasex = 0
            else:
                in2x = -1
                eightinphasex = 0

            # ver bpm's
            try:
                in1y = measured_ver_phase.indx[ref_bpm]
            except:
                in1y = -1

            if (in1y < len(measured_ver_phase.indx) - 1) and (in1y != -1):  # when BPM is not last
                if measured_ver_phase.NAME[measured_ver_phase.indx[ref_bpm] + 1] == end_bpm:
                    in2y = 1
                    eightinphasey = 0
                elif measured_ver_phase.NAME[measured_ver_phase.indx[ref_bpm] + 2] == end_bpm:
                    in2y = 1
                    eightinphasey = 1
                else:  # not in measurement
                    in2y = -1
                    eightinphasey = 0
            elif in1y != -1:  # when BPM is last
                if measured_ver_phase.NAME[0] == end_bpm:
                    in2y = 1
                    eightinphasey = 0
                elif measured_ver_phase.NAME[1] == end_bpm:
                    in2y = 1
                    eightinphasey = 1
                else:  # not in measurement
                    in2y = -1
                    eightinphasey = 0
            else:
                in2y = -1
                eightinphasey = 0

            ###### H plane
            if in1x != -1 and in2x != -1:
                if eightinphasex == 1:
                    phaseh = "% .5f" % float(measured_hor_phase.PHASEX[measured_hor_phase.indx[ref_bpm]] + measured_hor_phase.PHASEX[measured_hor_phase.indx[eight_bpm]])
                    errphaseh = "% .5f" % float(measured_hor_phase.STDPHX[measured_hor_phase.indx[ref_bpm]] + measured_hor_phase.STDPHX[measured_hor_phase.indx[eight_bpm]])
                    phasemodelh = "% .5f" % float(measured_hor_phase.PHXMDL[measured_hor_phase.indx[ref_bpm]] + measured_hor_phase.PHXMDL[measured_hor_phase.indx[eight_bpm]])
                else:
                    phaseh = "% .5f" % float(measured_hor_phase.PHASEX[measured_hor_phase.indx[ref_bpm]])
                    errphaseh = "% .5f" % float(measured_hor_phase.STDPHX[measured_hor_phase.indx[ref_bpm]])
                    phasemodelh = "% .5f" % float(measured_hor_phase.PHXMDL[measured_hor_phase.indx[ref_bpm]])
            else:
                print "Horizontal plane not found for transverse dampers pick-ups"
                phaseh = 'NIM'
                errphaseh = 'NIM'
                phasemodelh = 'NIM'

            ###### V plane
            print in1y, in2y, eightinphasey
            if (in1y != -1) and (in2y != -1):
                if eightinphasey == 1:
                    phasev = "% .5f" % float(measured_ver_phase.PHASEY[measured_ver_phase.indx[ref_bpm]] + measured_ver_phase.PHASEY[measured_ver_phase.indx[eight_bpm]])
                    errphasev = "% .5f" % float(measured_ver_phase.STDPHY[measured_ver_phase.indx[ref_bpm]] + measured_ver_phase.STDPHY[measured_ver_phase.indx[eight_bpm]])
                    phasemodelv = "% .5f" % float(measured_ver_phase.PHYMDL[measured_ver_phase.indx[ref_bpm]] + measured_ver_phase.PHYMDL[measured_ver_phase.indx[eight_bpm]])
                else:
                    phasev = "% .5f" % float(measured_ver_phase.PHASEY[measured_ver_phase.indx[ref_bpm]])
                    errphasev = "% .5f" % float(measured_ver_phase.STDPHY[measured_ver_phase.indx[ref_bpm]])
                    phasemodelv = "% .5f" % float(measured_ver_phase.PHYMDL[measured_ver_phase.indx[ref_bpm]])

            else:
                print "Vertical plane not found for transverse dampers pick-ups"
                phasev = 'NIM'
                errphasev = 'NIM'
                phasemodelv = 'NIM'

            file_transverse_damper.add_table_row([ref_bpm, end_bpm, input_model.S[input_model.indx[ref_bpm]], input_model.S[input_model.indx[end_bpm]], phaseh, errphaseh, phasemodelh, phasev, errphasev, phasemodelv])

    if element_name in damper_map:
        bpm_pair = damper_map[element_name]

        mux_bpm1_prop = propagated_models.propagation.MUX[propagated_models.propagation.indx[bpm_pair[0]]]
        mux_bpm2_prop = propagated_models.propagation.MUX[propagated_models.propagation.indx[bpm_pair[1]]]
        mux_elem_prop = propagated_models.propagation.MUX[propagated_models.propagation.indx[element_name]]
        muy_bpm1_prop = propagated_models.propagation.MUY[propagated_models.propagation.indx[bpm_pair[0]]]
        muy_bpm2_prop = propagated_models.propagation.MUY[propagated_models.propagation.indx[bpm_pair[1]]]
        muy_elem_prop = propagated_models.propagation.MUY[propagated_models.propagation.indx[element_name]]

        model_mux_bpm1 = input_model.MUX[input_model.indx[bpm_pair[0]]]
        model_mux_bpm2 = input_model.MUX[input_model.indx[bpm_pair[1]]]
        model_mux_elem = input_model.MUX[input_model.indx[element_name]]

        model_muy_bpm1 = input_model.MUY[input_model.indx[bpm_pair[0]]]
        model_muy_bpm2 = input_model.MUY[input_model.indx[bpm_pair[1]]]
        model_muy_elem = input_model.MUY[input_model.indx[element_name]]

        phase_advance_x_bpm1_prop = abs(mux_elem_prop - mux_bpm1_prop)
        phase_advance_x_bpm2_prop = abs(mux_bpm2_prop - mux_elem_prop)
        phase_advance_y_bpm1_prop = abs(muy_elem_prop - muy_bpm1_prop)
        phase_advance_y_bpm2_prop = abs(muy_bpm2_prop - muy_elem_prop)

        mux_bpm1_back = propagated_models.back_propagation.MUX[propagated_models.back_propagation.indx[bpm_pair[0]]]
        mux_bpm2_back = propagated_models.back_propagation.MUX[propagated_models.back_propagation.indx[bpm_pair[1]]]
        mux_elem_back = propagated_models.back_propagation.MUX[propagated_models.back_propagation.indx[element_name]]
        muy_bpm1_back = propagated_models.back_propagation.MUY[propagated_models.back_propagation.indx[bpm_pair[0]]]
        muy_bpm2_back = propagated_models.back_propagation.MUY[propagated_models.back_propagation.indx[bpm_pair[1]]]
        muy_elem_back = propagated_models.back_propagation.MUY[propagated_models.back_propagation.indx[element_name]]

        phase_advance_x_bpm1_back = abs(mux_bpm1_back - mux_elem_back)
        phase_advance_x_bpm2_back = abs(mux_elem_back - mux_bpm2_back)
        phase_advance_y_bpm1_back = abs(muy_bpm1_back - muy_elem_back)
        phase_advance_y_bpm2_back = abs(muy_elem_back - muy_bpm2_back)

        model_phase_advance_x_bpm1 = abs(model_mux_elem - model_mux_bpm1)
        model_phase_advance_x_bpm2 = abs(model_mux_bpm2 - model_mux_elem)
        model_phase_advance_y_bpm1 = abs(model_muy_elem - model_muy_bpm1)
        model_phase_advance_y_bpm2 = abs(model_muy_bpm2 - model_muy_elem)

        gather_betas_list = [[0, bpm_pair[0]], [0, bpm_pair[1]]]  # The function expects this kind of input
        (beta_x_bpm1, err_beta_x_bpm1, alfa_x_bpm1, err_alfa_x_bpm1,
         beta_x_bpm2, err_beta_x_bpm2, alfa_x_bpm2, err_alfa_x_bpm2) = sbs_beta_writer._get_start_end_betas(gather_betas_list, measured_hor_beta, "X")

        (beta_y_bpm1, err_beta_y_bpm1, alfa_y_bpm1, err_alfa_y_bpm1,
         beta_y_bpm2, err_beta_y_bpm2, alfa_y_bpm2, err_alfa_y_bpm2) = sbs_beta_writer._get_start_end_betas(gather_betas_list, measured_ver_beta, "Y")

        err_phase_x_bpm1_prop = sbs_phase_writer._propagate_error_phase(err_beta_x_bpm1, err_alfa_x_bpm1, phase_advance_x_bpm1_prop, beta_x_bpm1, alfa_x_bpm1)
        err_phase_x_bpm1_back = sbs_phase_writer._propagate_error_phase(err_beta_x_bpm1, err_alfa_x_bpm1, phase_advance_x_bpm1_back, beta_x_bpm1, alfa_x_bpm1)
        err_phase_x_bpm2_prop = sbs_phase_writer._propagate_error_phase(err_beta_x_bpm2, err_alfa_x_bpm2, phase_advance_x_bpm2_prop, beta_x_bpm2, alfa_x_bpm2)
        err_phase_x_bpm2_back = sbs_phase_writer._propagate_error_phase(err_beta_x_bpm2, err_alfa_x_bpm2, phase_advance_x_bpm2_back, beta_x_bpm2, alfa_x_bpm2)
        err_phase_y_bpm1_prop = sbs_phase_writer._propagate_error_phase(err_beta_y_bpm1, err_alfa_y_bpm1, phase_advance_y_bpm1_prop, beta_y_bpm1, alfa_y_bpm1)
        err_phase_y_bpm1_back = sbs_phase_writer._propagate_error_phase(err_beta_y_bpm1, err_alfa_y_bpm1, phase_advance_y_bpm1_back, beta_y_bpm1, alfa_y_bpm1)
        err_phase_y_bpm2_prop = sbs_phase_writer._propagate_error_phase(err_beta_y_bpm2, err_alfa_y_bpm2, phase_advance_y_bpm2_prop, beta_y_bpm2, alfa_y_bpm2)
        err_phase_y_bpm2_back = sbs_phase_writer._propagate_error_phase(err_beta_y_bpm2, err_alfa_y_bpm2, phase_advance_y_bpm2_back, beta_y_bpm2, alfa_y_bpm2)

        # TODO: Is this OK?
        average_phase_advance_x_bpm1, final_error_phase_advance_x_bpm1 = weighted_average_for_SbS_elements(phase_advance_x_bpm1_prop,
                                                                                                           err_phase_x_bpm1_prop,
                                                                                                           phase_advance_x_bpm1_back,
                                                                                                           err_phase_x_bpm1_back)
        average_phase_advance_y_bpm1, final_error_phase_advance_y_bpm1 = weighted_average_for_SbS_elements(phase_advance_y_bpm1_prop,
                                                                                                           err_phase_y_bpm1_prop,
                                                                                                           phase_advance_y_bpm1_back,
                                                                                                           err_phase_y_bpm1_back)
        average_phase_advance_x_bpm2, final_error_phase_advance_x_bpm2 = weighted_average_for_SbS_elements(phase_advance_x_bpm2_prop,
                                                                                                           err_phase_x_bpm2_prop,
                                                                                                           phase_advance_x_bpm2_back,
                                                                                                           err_phase_x_bpm2_back)
        average_phase_advance_y_bpm2, final_error_phase_advance_y_bpm2 = weighted_average_for_SbS_elements(phase_advance_y_bpm2_prop,
                                                                                                           err_phase_y_bpm2_prop,
                                                                                                           phase_advance_y_bpm2_back,
                                                                                                           err_phase_y_bpm2_back)
        file_transverse_damper.add_table_row([bpm_pair[0], element_name,
                                              input_model.S[input_model.indx[bpm_pair[0]]],
                                              input_model.S[input_model.indx[element_name]],
                                              "%.5f" % float(average_phase_advance_x_bpm1),
                                              "%.5f" % float(final_error_phase_advance_x_bpm1),
                                              "%.5f" % float(model_phase_advance_x_bpm1),
                                              "%.5f" % float(average_phase_advance_y_bpm1),
                                              "%.5f" % float(final_error_phase_advance_y_bpm1),
                                              "%.5f" % float(model_phase_advance_y_bpm1)])
        file_transverse_damper.add_table_row([element_name, bpm_pair[1],
                                              input_model.S[input_model.indx[element_name]],
                                              input_model.S[input_model.indx[bpm_pair[1]]],
                                              "%.5f" % float(average_phase_advance_x_bpm2),
                                              "%.5f" % float(final_error_phase_advance_x_bpm2),
                                              "%.5f" % float(model_phase_advance_x_bpm2),
                                              "%.5f" % float(average_phase_advance_y_bpm2),
                                              "%.5f" % float(final_error_phase_advance_y_bpm2),
                                              "%.5f" % float(model_phase_advance_y_bpm2)])
    else:
        print "WARN: Element ", element_name, " Not found in damper_map"

    file_transverse_damper.write_to_file()
예제 #12
0
def _write_f_terms(file_f_terms, element_name, is_element, bpms_list, measured_coupling, input_model, model_propagation, model_back_propagation, model_cor, model_back_cor):
    summary_data = []
    first_bpm = bpms_list[0][1]
    last_bpm = bpms_list[-1][1]

    (f1001ab_ini, f1001_std_ini, p1001_ini, p1001_std_ini,
     f1001ab_end, f1001_std_end, p1001_end, p1001_std_end) = _get_start_end_f1001(measured_coupling, first_bpm, last_bpm)
    (f1010ab_ini, f1010_std_ini, p1010_ini, p1010_std_ini,
     f1010ab_end, f1010_std_end, p1010_end, p1010_std_end) = _get_start_end_f1010(measured_coupling, first_bpm, last_bpm)

    if input_model is not None:
        input_model.Cmatrix()

    for bpm in bpms_list:
        bpm_s = bpm[0]
        bpm_name = bpm[1]

        delta_phase_prop_x = model_propagation.MUX[model_propagation.indx[bpm_name]] % 1
        delta_phase_prop_y = model_propagation.MUY[model_propagation.indx[bpm_name]] % 1

        f1001_prop = model_propagation.f1001[model_propagation.indx[bpm_name]]
        err_f1001re_prop = _propagate_error_coupling_1001_re(f1001ab_ini, p1001_ini, delta_phase_prop_x, delta_phase_prop_y, f1001_std_ini, p1001_std_ini)
        err_f1001im_prop = _propagate_error_coupling_1001_im(f1001ab_ini, p1001_ini, delta_phase_prop_x, delta_phase_prop_y, f1001_std_ini, p1001_std_ini)
        err_f1001abs_prop = f1001_std_ini
        f1010_prop = model_propagation.f1010[model_propagation.indx[bpm_name]]
        err_f1010re_prop = _propagate_error_coupling_1010_re(f1010ab_ini, p1010_ini, delta_phase_prop_x, delta_phase_prop_y, f1010_std_ini, p1010_std_ini)
        err_f1010im_prop = _propagate_error_coupling_1010_im(f1010ab_ini, p1010_ini, delta_phase_prop_x, delta_phase_prop_y, f1010_std_ini, p1010_std_ini)
        err_f1010abs_prop = f1010_std_ini

        delta_phase_back_x = model_back_propagation.MUX[model_back_propagation.indx[bpm_name]] % 1
        delta_phase_back_y = model_back_propagation.MUY[model_back_propagation.indx[bpm_name]] % 1

        f1001_back = model_back_propagation.f1001[model_back_propagation.indx[bpm_name]]
        err_f1001re_back = _propagate_error_coupling_1001_re(f1001ab_end, p1001_end, delta_phase_back_x, delta_phase_back_y, f1001_std_end, p1001_std_end)
        err_f1001im_back = _propagate_error_coupling_1001_im(f1001ab_end, p1001_end, delta_phase_back_x, delta_phase_back_y, f1001_std_end, p1001_std_end)
        err_f1001abs_back = f1001_std_end
        f1010_back = model_back_propagation.f1010[model_back_propagation.indx[bpm_name]]
        err_f1010re_back = _propagate_error_coupling_1010_re(f1010ab_end, p1010_end, delta_phase_back_x, delta_phase_back_y, f1010_std_end, p1010_std_end)
        err_f1010im_back = _propagate_error_coupling_1010_im(f1010ab_end, p1010_end, delta_phase_back_x, delta_phase_back_y, f1010_std_end, p1010_std_end)
        err_f1010abs_back = f1010_std_end

        if not is_element:
            model_s = measured_coupling.S[measured_coupling.indx[bpm_name]]
            model_f1001r = measured_coupling.MDLF1001R[measured_coupling.indx[bpm_name]]
            model_f1001i = measured_coupling.MDLF1001I[measured_coupling.indx[bpm_name]]
            model_f1010r = measured_coupling.MDLF1010R[measured_coupling.indx[bpm_name]]
            model_f1010i = measured_coupling.MDLF1010I[measured_coupling.indx[bpm_name]]

            meas_abs_f1001 = measured_coupling.F1001W[measured_coupling.indx[bpm_name]]
            meas_q1001 = measured_coupling.Q1001[measured_coupling.indx[bpm_name]]
            meas_f1001r = measured_coupling.F1001R[measured_coupling.indx[bpm_name]]
            meas_f1001i = measured_coupling.F1001I[measured_coupling.indx[bpm_name]]
            err_meas_abs_f1001 = measured_coupling.FWSTD1[measured_coupling.indx[bpm_name]]
            err_meas_q1001 = measured_coupling.Q1001STD[measured_coupling.indx[bpm_name]]
            err_meas_f1001r = _propagate_error_coupling_1001_re(meas_abs_f1001, meas_q1001, 0., 0., err_meas_abs_f1001, err_meas_q1001)
            err_meas_f1001i = _propagate_error_coupling_1001_im(meas_abs_f1001, meas_q1001, 0., 0., err_meas_abs_f1001, err_meas_q1001)

            meas_abs_f1010 = measured_coupling.F1010W[measured_coupling.indx[bpm_name]]
            meas_q1010 = measured_coupling.Q1010[measured_coupling.indx[bpm_name]]
            meas_f1010r = measured_coupling.F1010R[measured_coupling.indx[bpm_name]]
            meas_f1010i = measured_coupling.F1010I[measured_coupling.indx[bpm_name]]
            err_meas_abs_f1010 = measured_coupling.FWSTD1[measured_coupling.indx[bpm_name]]
            err_meas_q1010 = measured_coupling.Q1010STD[measured_coupling.indx[bpm_name]]
            err_meas_f1010r = _propagate_error_coupling_1010_re(meas_abs_f1010, meas_q1010, 0., 0., err_meas_abs_f1010, err_meas_q1010)
            err_meas_f1010i = _propagate_error_coupling_1010_im(meas_abs_f1010, meas_q1010, 0., 0., err_meas_abs_f1010, err_meas_q1010)

            delta_phase_corr_x = model_cor.MUX[model_cor.indx[bpm_name]] % 1
            delta_phase_corr_y = model_cor.MUY[model_cor.indx[bpm_name]] % 1

            f1001_corr = model_cor.f1001[model_cor.indx[bpm_name]]
            err_f1001re_corr = _propagate_error_coupling_1001_re(f1001ab_ini, p1001_ini, delta_phase_corr_x, delta_phase_corr_y, f1001_std_ini, p1001_std_ini)
            err_f1001im_corr = _propagate_error_coupling_1001_im(f1001ab_ini, p1001_ini, delta_phase_corr_x, delta_phase_corr_y, f1001_std_ini, p1001_std_ini)
            err_f1001abs_corr = f1001_std_ini
            f1010_corr = model_cor.f1010[model_cor.indx[bpm_name]]
            err_f1010re_corr = _propagate_error_coupling_1010_re(f1010ab_ini, p1010_ini, delta_phase_corr_x, delta_phase_corr_y, f1010_std_ini, p1010_std_ini)
            err_f1010im_corr = _propagate_error_coupling_1010_im(f1010ab_ini, p1010_ini, delta_phase_corr_x, delta_phase_corr_y, f1010_std_ini, p1010_std_ini)
            err_f1010abs_corr = f1010_std_ini

            delta_phase_back_corr_x = model_back_cor.MUX[model_back_cor.indx[bpm_name]] % 1
            delta_phase_back_corr_y = model_back_cor.MUY[model_back_cor.indx[bpm_name]] % 1

            f1001_back_corr = model_back_cor.f1001[model_back_cor.indx[bpm_name]]
            err_f1001re_back_corr = _propagate_error_coupling_1001_re(f1001ab_end, p1001_end, delta_phase_back_corr_x, delta_phase_back_corr_y, f1001_std_end, p1001_std_end)
            err_f1001im_back_corr = _propagate_error_coupling_1001_im(f1001ab_end, p1001_end, delta_phase_back_corr_x, delta_phase_back_corr_y, f1001_std_end, p1001_std_end)
            err_f1001abs_back_corr = f1001_std_end
            f1010_back_corr = model_back_cor.f1010[model_back_cor.indx[bpm_name]]
            err_f1010re_back_corr = _propagate_error_coupling_1010_re(f1010ab_end, p1010_end, delta_phase_back_corr_x, delta_phase_back_corr_y, f1010_std_end, p1010_std_end)
            err_f1010im_back_corr = _propagate_error_coupling_1010_im(f1010ab_end, p1010_end, delta_phase_back_corr_x, delta_phase_back_corr_y, f1010_std_end, p1010_std_end)
            err_f1010abs_back_corr = f1010_std_end

            file_f_terms.add_table_row([bpm_name, bpm_s,
                                        meas_abs_f1001, err_meas_abs_f1001, meas_f1001r, err_meas_f1001r, meas_f1001i, err_meas_f1001i,
                                        meas_abs_f1010, err_meas_abs_f1010, meas_f1010r, err_meas_f1010r, meas_f1010i, err_meas_f1010i,
                                        abs(f1001_corr), err_f1001abs_corr, f1001_corr.real, err_f1001re_corr, f1001_corr.imag, err_f1001im_corr,
                                        abs(f1010_corr), err_f1010abs_corr, f1010_corr.real, err_f1010re_corr, f1010_corr.imag, err_f1010im_corr,
                                        abs(f1001_back), err_f1001abs_back, f1001_back.real, err_f1001re_back, f1001_back.imag, err_f1001im_back,
                                        abs(f1010_back), err_f1010abs_back, f1010_back.real, err_f1010re_back, f1010_back.imag, err_f1010im_back,
                                        abs(f1001_back_corr), err_f1001abs_back_corr, f1001_back_corr.real, err_f1001re_back_corr, f1001_back_corr.imag, err_f1001im_back_corr,
                                        abs(f1010_back_corr), err_f1010abs_back_corr, f1010_back_corr.real, err_f1010re_back_corr, f1010_back_corr.imag, err_f1010im_back_corr,
                                       model_f1001r, model_f1001i, model_f1010r, model_f1010i, model_s])
        else:
            model_s = input_model.S[input_model.indx[bpm_name]]

            model_f1001r = input_model.f1001[input_model.indx[bpm_name]].real
            model_f1001i = input_model.f1001[input_model.indx[bpm_name]].imag
            model_f1010r = input_model.f1010[input_model.indx[bpm_name]].real
            model_f1010i = input_model.f1010[input_model.indx[bpm_name]].imag

            average_f1001ab, final_f1001abs_err = weighted_average_for_SbS_elements(abs(f1001_prop), err_f1001abs_prop, abs(f1001_back), err_f1001abs_back)
            average_f1001re, final_f1001re_err = weighted_average_for_SbS_elements(f1001_prop.real, err_f1001re_prop, f1001_back.real, err_f1001re_back)
            average_f1001im, final_f1001im_err = weighted_average_for_SbS_elements(f1001_prop.imag, err_f1001im_prop, f1001_back.imag, err_f1001im_back)

            average_f1010ab, final_f1010abs_err = weighted_average_for_SbS_elements(abs(f1010_prop), err_f1010abs_prop, abs(f1010_back), err_f1010abs_back)
            average_f1010re, final_f1010re_err = weighted_average_for_SbS_elements(f1010_prop.real, err_f1010re_prop, f1010_back.real, err_f1010re_back)
            average_f1010im, final_f1010im_err = weighted_average_for_SbS_elements(f1010_prop.imag, err_f1010im_prop, f1010_back.imag, err_f1010im_back)

            file_f_terms.add_table_row([bpm_name, bpm_s,
                                        average_f1001ab, final_f1001abs_err, average_f1001re, final_f1001re_err, average_f1001im, final_f1001im_err,
                                        average_f1010ab, final_f1010abs_err, average_f1010re, final_f1010re_err, average_f1010im, final_f1010im_err,
                                        model_f1001r, model_f1001i, model_f1010r, model_f1010i, model_s])
            if bpm_name == element_name:
                summary_data = [bpm_name, bpm_s,
                                average_f1001ab, final_f1001abs_err, average_f1001re, final_f1001re_err, average_f1001im, final_f1001im_err,
                                average_f1010ab, final_f1010abs_err, average_f1010re, final_f1010re_err, average_f1010im, final_f1010im_err,
                                model_f1001r, model_f1001i, model_f1010r, model_f1010i, model_s]
    file_f_terms.write_to_file()
    return summary_data