def _get_suboptions(opt, rest): if opt.harpy: harpy_opt, rest = _harpy_entrypoint(rest) if opt.optics: rest = add_to_arguments(rest, entry_params=optics_params(), files=harpy_opt.files, outputdir=harpy_opt.outputdir) harpy_opt.outputdir = join(harpy_opt.outputdir, 'lin_files') if harpy_opt.model is not None: rest = add_to_arguments( rest, entry_params={"model_dir": { "flags": "--model_dir" }}, model_dir=dirname(abspath(harpy_opt.model))) else: harpy_opt = None if opt.optics: optics_opt, rest = _optics_entrypoint(rest) accel_opt = manager.get_parsed_opt(rest) optics_opt.accelerator = manager.get_accelerator(rest) if not optics_opt.accelerator.excitation and optics_opt.compensation != "none": raise AttributeError( "Compensation requested and no driven model was provided.") else: optics_opt = None accel_opt = None return harpy_opt, optics_opt, accel_opt
def global_correction_entrypoint(opt: DotDict, accel_opt) -> None: """Do the global correction. Iteratively.""" LOG.info("Starting Iterative Global Correction.") opt = _check_opt_add_dicts(opt) opt = _add_hardcoded_paths(opt) opt.output_dir.mkdir(parents=True, exist_ok=True) accel_inst = manager.get_accelerator(accel_opt) handler.correct(accel_inst, opt)
def _create_input(motion): dpps = [0, 0, 0, -4e-4, -4e-4, 4e-4, 4e-4, 5e-5, -3e-5, -2e-5] print(f"\nInput creation: {dpps}") opt_dict = dict(accel="lhc", year="2018", ats=True, beam=1, files=[""], model_dir=join(dirname(__file__), "..", "inputs", "models", "25cm_beam1"), outputdir=BASE_PATH) optics_opt, rest = _optics_entrypoint(opt_dict) optics_opt.accelerator = manager.get_accelerator(rest) lins = optics_measurement_test_files(opt_dict["model_dir"], dpps, motion) return lins, optics_opt
def test_varmap_creation(model_inj_beams): """ Tests the creation of varmap files and compares them with earlier created ones. Hint: the `model_inj_beam` fixture is defined in `conftest.py`.""" accel_inst = get_accelerator(**model_inj_beams) varmap_old = read_varmap(accel_inst.model_dir / "varmap_MQSl.h5") varmap_new = evaluate_for_variables(accel_inst, ['MQSl']) for order in varmap_new.keys(): for circuit in varmap_new[order].keys(): assert all(varmap_new[order][circuit] == varmap_old[order][circuit] ), f"Varmap values not identical in {order}/{circuit}."
def test_lhc_creation_nominal_driven_check_output(model_25cm_beam1): accel = get_accelerator(**model_25cm_beam1) LhcModelCreator.check_run_output(accel) for dat_file in (TWISS_AC_DAT, TWISS_DAT, TWISS_ELEMENTS_DAT, TWISS_ADT_DAT): file_path: Path = accel.model_dir / dat_file file_path_moved: Path = file_path.with_suffix(f"{file_path.suffix}0") if dat_file == TWISS_ADT_DAT: accel.excitation = AccExcitationMode.ADT # Test ACD before else: shutil.move(file_path, file_path_moved) # Run test with pytest.raises(FileNotFoundError) as creation_error: LhcModelCreator.check_run_output(accel) assert str(dat_file) in str(creation_error.value) if file_path_moved.exists(): shutil.move(file_path_moved, file_path)
def check_accel_from_dir_vs_options(model_dir, accel_options, accel_from_opt, required_keys): # creation via model_from_dir tests that all files are in place: accel_from_dir = get_accelerator( accel=accel_options["accel"], model_dir=model_dir, **{k: accel_options[k] for k in required_keys}, ) _check_arrays(accel_from_opt.nat_tunes, accel_from_dir.nat_tunes, eps=1e-4, tunes=True) _check_arrays(accel_from_opt.drv_tunes, accel_from_dir.drv_tunes, eps=1e-4, tunes=True) _check_arrays(accel_from_opt.modifiers, accel_from_dir.modifiers) assert accel_from_opt.excitation == accel_from_dir.excitation assert accel_from_opt.model_dir == accel_from_dir.model_dir
def create_response_entrypoint(opt: DotDict, other_opt) -> Dict[str, pd.DataFrame]: """Entry point for creating pandas-based response matrices. The response matrices can be either created by response_madx or TwissResponse. """ LOG.info("Creating response.") accel_inst = manager.get_accelerator(other_opt) if opt.creator == "madx": fullresponse = response_madx.create_fullresponse( accel_inst, opt.variable_categories, delta_k=opt.delta_k) elif opt.creator == "twiss": fullresponse = response_twiss.create_response(accel_inst, opt.variable_categories, opt.optics_params) if opt.outfile_path is not None: write_fullresponse(opt.outfile_path, fullresponse) return fullresponse
def create_instance_and_model(opt, accel_opt): if sys.flags.debug: numeric_level = getattr(logging, "DEBUG", None) ch = logging.StreamHandler(sys.stdout) formatter = logging.Formatter( ' %(asctime)s %(levelname)s | %(name)s : %(message)s') ch.setFormatter(formatter) logging.getLogger().addHandler(ch) logging.getLogger().setLevel(numeric_level) else: numeric_level = getattr(logging, "WARNING", None) logging.basicConfig(level=numeric_level) # warning level to stderr create_dirs(opt.outputdir) accel_inst = manager.get_accelerator(accel_opt) LOGGER.info( f"Accelerator Instance {accel_inst.NAME}, model type {opt.type}") accel_inst.verify_object() creator = CREATORS[accel_inst.NAME][opt.type] creator.prepare_run(accel_inst, opt.outputdir) madx_script = creator.get_madx_script(accel_inst, opt.outputdir) run_string(madx_script, output_file=opt.writeto, log_file=opt.logfile)
def input_data(request, tmp_path_factory): """Creates the input lin data and optics_options.""" data = {} beam = request.param for motion in ("free", "driven"): np.random.seed(12345678) output_path = tmp_path_factory.mktemp(f"input_{motion}_b{beam}") opt_dict = dict(accel="lhc", year="2018", ats=True, beam=beam, files=[""], model_dir=INPUTS / "models" / f"25cm_beam{beam}", outputdir=output_path) optics_opt, rest = _optics_entrypoint(opt_dict) optics_opt.accelerator = manager.get_accelerator(rest) lins = optics_measurement_test_files( opt_dict["model_dir"], DPPS, motion, beam_direction=(1 if beam == 1 else -1)) data[motion] = {'lins': lins, 'optics_opt': optics_opt} return data
def create_instance_and_model(opt, accel_opt) -> Accelerator: """ Manager Keyword Args: *--Required--* - **accel**: Choose the accelerator to use.Can be the class already. choices: ``['lhc', 'ps', 'esrf', 'psbooster', 'skekb', 'JPARC', 'petra', 'iota']`` Creator Keyword Args: *--Required--* - **outputdir** *(str)*: Output path for model, twiss files will be writen here. *--Optional--* - **logfile** *(str)*: Path to the file where to write the MAD-X script output.If not provided it will be written to sys.stdout. - **type**: Type of model to create. choices: ``('nominal', 'best_knowledge', 'coupling_correction')`` Accelerator Keyword Args: lhc: :mod:`omc3.model.accelerators.lhc` ps: :mod:`omc3.model.accelerators.ps` esrf: :mod:`omc3.model.accelerators.esrf` psbooster: :mod:`omc3.model.accelerators.psbooster` skekb: :mod:`omc3.model.accelerators.skekb` iota: :mod:`omc3.model.accelerators.iota` petra: :mod:`omc3.model.accelerators.petra` (not implemented) JPARC: Not implemented """ # Prepare paths create_dirs(opt.outputdir) accel_inst = manager.get_accelerator(accel_opt) LOG.info(f"Accelerator Instance {accel_inst.NAME}, model type {opt.type}") creator = CREATORS[accel_inst.NAME][opt.type] # Prepare model-dir output directory accel_inst.model_dir = opt.outputdir creator.prepare_run(accel_inst) # get madx-script with relative output-paths # as `cwd` changes run to correct directory. # The resulting model-dir is then more self-contained. (jdilly) accel_inst.model_dir = Path() madx_script = creator.get_madx_script(accel_inst) # Run madx to create model run_string(madx_script, output_file=opt.outputdir / JOB_MODEL_MADX, log_file=opt.logfile, cwd=opt.outputdir) # Check output and return accelerator instance accel_inst.model_dir = opt.outputdir creator.check_run_output(accel_inst) return accel_inst
def create_instance_and_model(opt, accel_opt): """ Manager Keyword Args: *--Required--* - **accel**: Choose the accelerator to use.Can be the class already. choices: ``['lhc', 'ps', 'esrf', 'psbooster', 'skekb', 'JPARC', 'petra', 'iota']`` Creator Keyword Args: *--Required--* - **outputdir** *(str)*: Output path for model, twiss files will be writen here. *--Optional--* - **logfile** *(str)*: Path to the file where to write the MAD-X script output.If not provided it will be written to sys.stdout. - **type**: Type of model to create, either nominal or best_knowledge choices: ``('nominal', 'best_knowledge', 'coupling_correction')`` - **writeto** *(str)*: Path to the file where to write the resulting MAD-X script. Accelerator Keyword Args: lhc: :mod:`omc3.model.accelerators.lhc` ps: :mod:`omc3.model.accelerators.ps` esrf: :mod:`omc3.model.accelerators.esrf` psbooster: :mod:`omc3.model.accelerators.psbooster` skekb: :mod:`omc3.model.accelerators.skekb` iota: :mod:`omc3.model.accelerators.iota` petra: :mod:`omc3.model.accelerators.petra` (not implemented) JPARC: Not implemented """ if sys.flags.debug: numeric_level = getattr(logging, "DEBUG", None) ch = logging.StreamHandler(sys.stdout) formatter = logging.Formatter(' %(asctime)s %(levelname)s | %(name)s : %(message)s') ch.setFormatter(formatter) logging.getLogger().addHandler(ch) logging.getLogger().setLevel(numeric_level) else: numeric_level = getattr(logging, "WARNING", None) logging.basicConfig(level=numeric_level) # warning level to stderr create_dirs(opt.outputdir) accel_inst = manager.get_accelerator(accel_opt) LOGGER.info(f"Accelerator Instance {accel_inst.NAME}, model type {opt.type}") accel_inst.verify_object() creator = CREATORS[accel_inst.NAME][opt.type] creator.prepare_run(accel_inst, opt.outputdir) madx_script = creator.get_madx_script(accel_inst, opt.outputdir) run_string(madx_script, output_file=opt.writeto, log_file=opt.logfile)