コード例 #1
0
def test_lattice_without_symmetry():
    lat = Lattice("")
    assert lat.cell_length is None
    assert lat.cell_bounds is None
    lat = Lattice("", 6)
    assert lat.cell_length is None
    assert lat.cell_bounds is None
コード例 #2
0
def test_get_and_set_unitconv():
    lat = Lattice("")
    with pytest.raises(KeyError):
        lat._data_source_manager._uc["field1"]
    uc = mock.Mock()
    lat.set_unitconv("field1", uc)
    assert lat._data_source_manager._uc["field1"] == uc
    assert lat.get_unitconv("field1") == uc
コード例 #3
0
def test_get_element_devices_raises_ValueError_for_mismatched_family(
        simple_lattice):
    with pytest.raises(ValueError):
        devices = simple_lattice.get_element_devices("not-a-family", "x")
    basic_element = simple_lattice.get_elements("family")[0]
    basic_lattice = Lattice("basic_lattice")
    del basic_element._data_source_manager._data_sources[pytac.LIVE]
    basic_lattice.add_element(basic_element)
    devices = basic_lattice.get_element_devices("family", "x")
    assert devices == []
コード例 #4
0
def test_set_lattice_reference():
    elem1 = Element(1.0, "BPM")
    lat1 = Lattice("one")
    elem2 = Element(2.0, "BPM", lattice=lat1)
    lat2 = Lattice("two")
    assert elem1._lattice is None
    assert elem2._lattice == lat1
    elem1.set_lattice(lat1)
    elem2.set_lattice(lat2)
    assert elem1._lattice == lat1
    assert elem2._lattice == lat2
コード例 #5
0
ファイル: load_csv.py プロジェクト: T-Nicholls/pytac
def load_unitconv(mode_dir: Path, lattice: Lattice) -> None:
    """Load the unit conversion objects from a file.

    Args:
        mode_dir: Path to directory containing CSV files.
        lattice: The lattice object that will be used.
    """
    unitconvs: Dict[int, UnitConv] = {}
    # Assemble datasets from the polynomial file
    unitconvs.update(load_poly_unitconv(mode_dir / POLY_FILENAME))
    # Assemble datasets from the pchip file
    unitconvs.update(load_pchip_unitconv(mode_dir / PCHIP_FILENAME))
    # Add the unitconv objects to the elements
    with csv_loader(mode_dir / UNITCONV_FILENAME) as csv_reader:
        for item in csv_reader:
            # Special case for element 0: the lattice itself.
            if int(item["el_id"]) == 0:
                if item["uc_type"] != "null":
                    # Each element needs its own unitconv object as
                    # it may for example have different limit.
                    uc = copy.copy(unitconvs[int(item["uc_id"])])
                    uc.phys_units = item["phys_units"]
                    uc.eng_units = item["eng_units"]
                    upper, lower = (
                        float(lim) if lim != "" else None
                        for lim in [item["upper_lim"], item["lower_lim"]])
                    uc.set_conversion_limits(lower, upper)
                else:
                    uc = NullUnitConv(item["eng_units"], item["phys_units"])
                lattice.set_unitconv(item["field"], uc)
            else:
                element = lattice[int(item["el_id"]) - 1]
                # For certain magnet types, we need an additional rigidity
                # conversion factor as well as the raw conversion.
                if item["uc_type"] == "null":
                    uc = NullUnitConv(item["eng_units"], item["phys_units"])
                else:
                    # Each element needs its own unitconv object as
                    # it may for example have different limit.
                    uc = copy.copy(unitconvs[int(item["uc_id"])])
                    if any(
                            element.is_in_family(f)
                            for f in ("HSTR", "VSTR", "Quadrupole",
                                      "Sextupole", "Bend")):
                        energy = lattice.get_value("energy", units=pytac.PHYS)
                        uc.set_post_eng_to_phys(utils.get_div_rigidity(energy))
                        uc.set_pre_phys_to_eng(utils.get_mult_rigidity(energy))
                    uc.phys_units = item["phys_units"]
                    uc.eng_units = item["eng_units"]
                    upper, lower = (
                        float(lim) if lim != "" else None
                        for lim in [item["upper_lim"], item["lower_lim"]])
                    uc.set_conversion_limits(lower, upper)
                element.set_unitconv(item["field"], uc)
コード例 #6
0
def test_element_properties_with_lattice():
    e1 = Element(3.1, "DRFIT", "d1")
    e2 = Element(1.3, "DRFIT", "d2")
    lat = Lattice("", symmetry=2)
    lat.add_element(e1)
    lat.add_element(e2)
    assert e1.index == 1
    assert e2.index == 2
    assert e1.s == 0.0
    assert e2.s == 3.1
    assert e1.cell == 1
    assert e2.cell == 2
コード例 #7
0
def test_element_representation():
    elem = Element(0.1, "BPM")
    assert str(elem) == "<Element length 0.1 m, families >"
    elem.add_to_family("fam1")
    assert str(elem) == "<Element length 0.1 m, families fam1>"
    elem.name = "bpm1"
    assert str(elem) == "<Element 'bpm1', length 0.1 m, families fam1>"
    lat = Lattice("")
    lat.add_element(elem)
    assert str(elem) == ("<Element 'bpm1', index 1, length 0.1 m, families " "fam1>")
    lat.symmetry = 2
    assert str(elem) == (
        "<Element 'bpm1', index 1, length 0.1 m, cell 1, " "families fam1>"
    )
    elem.name = None
    assert str(elem) == ("<Element index 1, length 0.1 m, cell 1, families " "fam1>")
コード例 #8
0
def test_create_element():
    lat = Lattice("")
    e = Element(6.0, "BPM", "bpm1", lat)
    assert e.length == 6.0
    assert e.type_ == "BPM"
    assert e.name == "bpm1"
    assert e._lattice == lat
コード例 #9
0
def test_add_element_to_lattice():
    lat1 = Lattice("lat1")
    elem = Element(0.5, "DRIFT")
    assert lat1._elements == []
    assert elem._lattice is None
    lat1.add_element(elem)
    assert lat1._elements == [elem]
    assert elem._lattice == lat1
    lat2 = Lattice("lat2")
    lat2.add_element(elem)
    assert elem._lattice == lat2
コード例 #10
0
def test_lattice_cell_properties():
    lat = Lattice("", 2)
    for i in range(5):
        lat.add_element(Element(0.5, "DRIFT"))
    assert lat.cell_length == 1.25
    assert lat.cell_bounds == [1, 4, 5]
コード例 #11
0
def test_create_lattice():
    lat = Lattice(LATTICE_NAME)
    assert (len(lat)) == 0
    assert lat.name == LATTICE_NAME
コード例 #12
0
ファイル: conftest.py プロジェクト: T-Nicholls/pytac
def simple_lattice(simple_element, x_device, y_device, mock_sim_data_source,
                   unit_uc, double_uc):
    lattice = Lattice(LATTICE_NAME, symmetry=6)
    lattice.add_element(simple_element)
    lattice.set_data_source(DeviceDataSource(), pytac.LIVE)
    lattice.add_device("x", x_device, unit_uc)
    lattice.add_device("y", y_device, double_uc)
    lattice.set_data_source(mock_sim_data_source, pytac.SIM)
    return lattice