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
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
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