Beispiel #1
0
def _bunch_match_twiss(cfg_dir, data):
    bunch = data.models.bunch
    if bunch.match_twiss_parameters == '1' \
       and bunch.method == 'MCOBJET3' \
       and ('bunchReport' in data.report or data.report == 'animation'):
        report = data['report']
        data['report'] = 'twissReport2'
        template.write_parameters(data, py.path.local(cfg_dir), False,
                                  'twiss.py')
        _run_zgoubi(cfg_dir, python_file='twiss.py')
        col_names, row = template.extract_first_twiss_row(cfg_dir)
        for f in _TWISS_TO_BUNCH_FIELD.keys():
            v = template.column_data(f, col_names, [row])[0]
            if (f == 'btx' or f == 'bty') and v <= 0:
                pkdlog('invalid calculated twiss parameter: {} <= 0', f)
                v = 1.0
            bunch[_TWISS_TO_BUNCH_FIELD[f]] = v
        found_fit = False
        lines = pkio.read_text(_ZGOUBI_FIT_FILE).split('\n')
        for i in range(len(lines)):
            line = lines[i]
            if re.search(r"^\s*'OBJET'", line):
                values = lines[i + 4].split()
                assert len(values) >= 5
                found_fit = True
                bunch['Y0'] = float(values[0]) * 1e-2
                bunch['T0'] = float(values[1]) * 1e-3
                break
        assert found_fit, 'failed to parse fit parameters'
        simulation_db.write_json(
            py.path.local(cfg_dir).join(template.BUNCH_SUMMARY_FILE), bunch)
        data['report'] = report
        # rewrite the original report with original parameters
        template.write_parameters(data, py.path.local(cfg_dir), False)
    return data
Beispiel #2
0
def _bunch_match_twiss(cfg_dir):
    data = simulation_db.read_json(template_common.INPUT_BASE_NAME)
    bunch = data.models.bunch
    if bunch.match_twiss_parameters == '1' and ('bunchReport' in data.report or data.report == 'animation'):
        report = data['report']
        data['report'] = 'twissReport2'
        template.write_parameters(data, py.path.local(cfg_dir), False, 'twiss.py')
        _run_zgoubi(cfg_dir, python_file='twiss.py')
        col_names, row = template.extract_first_twiss_row(cfg_dir)
        for f in _TWISS_TO_BUNCH_FIELD.keys():
            v = template.column_data(f, col_names, [row])[0]
            bunch[_TWISS_TO_BUNCH_FIELD[f]] = v
            if f == 'btx' or f == 'bty':
                assert v > 0, 'invalid twiss parameter: {} <= 0'.format(f)
        simulation_db.write_json(py.path.local(cfg_dir).join(template.BUNCH_SUMMARY_FILE), bunch)
        data['report'] = report
        # rewrite the original report with original parameters
        template.write_parameters(data, py.path.local(cfg_dir), False)
    return data
Beispiel #3
0
def _bunch_match_twiss(cfg_dir):
    data = simulation_db.read_json(template_common.INPUT_BASE_NAME)
    bunch = data.models.bunch
    if bunch.match_twiss_parameters == '1' and ('bunchReport' in data.report
                                                or data.report == 'animation'):
        report = data['report']
        data['report'] = 'twissReport2'
        template.write_parameters(data, py.path.local(cfg_dir), False,
                                  'twiss.py')
        _run_zgoubi(cfg_dir, python_file='twiss.py')
        col_names, row = template.extract_first_twiss_row(cfg_dir)
        for f in _TWISS_TO_BUNCH_FIELD.keys():
            v = template.column_data(f, col_names, [row])[0]
            bunch[_TWISS_TO_BUNCH_FIELD[f]] = v
            if f == 'btx' or f == 'bty':
                assert v > 0, 'invalid twiss parameter: {} <= 0'.format(f)
        simulation_db.write_json(
            py.path.local(cfg_dir).join(template.BUNCH_SUMMARY_FILE), bunch)
        data['report'] = report
        # rewrite the original report with original parameters
        template.write_parameters(data, py.path.local(cfg_dir), False)
    return data