Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #4
0
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}."
Beispiel #5
0
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)
Beispiel #6
0
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
Beispiel #7
0
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
Beispiel #8
0
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)
Beispiel #9
0
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
Beispiel #10
0
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
Beispiel #11
0
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)