Skip to content

Align the output of the yellow pages with the content of the accelerator #365

Description

@TeresiaOlsson

I think we should align the output of the yellow pages with how the ElementHolders are arranged inside the accelerator now. My thinking is the following:

  1. The user loads a configuration file created by someone else (likely a maintainer in their lab).
  2. They use accelerator.yellow_pages to list what has been created and understand what is available for them to use.
  3. From this they directly get an idea for what to do next if they want to get a specific device/array for a specific mode.

This is the current output from the yellow pages after I loaded the configuration for the integration test:

Controls:
    live
    .

Simulators:
    design
    .

Arrays:
    QF_001                (pyaml.arrays.magnet_array)             size=1
    SF_001                (pyaml.arrays.magnet_array)             size=1
    QD_001                (pyaml.arrays.magnet_array)             size=1
    SD_001                (pyaml.arrays.magnet_array)             size=1
    QF_002                (pyaml.arrays.magnet_array)             size=1
    SF_002                (pyaml.arrays.magnet_array)             size=1
    QD_002                (pyaml.arrays.magnet_array)             size=1
    SD_002                (pyaml.arrays.magnet_array)             size=1
    QF_003                (pyaml.arrays.magnet_array)             size=1
    SF_003                (pyaml.arrays.magnet_array)             size=1
    QD_003                (pyaml.arrays.magnet_array)             size=1
    SD_003                (pyaml.arrays.magnet_array)             size=1
    QF_004                (pyaml.arrays.magnet_array)             size=1
    SF_004                (pyaml.arrays.magnet_array)             size=1
    QD_004                (pyaml.arrays.magnet_array)             size=1
    SD_004                (pyaml.arrays.magnet_array)             size=1
    QF_005                (pyaml.arrays.magnet_array)             size=1
    SF_005                (pyaml.arrays.magnet_array)             size=1
    QD_005                (pyaml.arrays.magnet_array)             size=1
    SD_005                (pyaml.arrays.magnet_array)             size=1
    QF_006                (pyaml.arrays.magnet_array)             size=1
    SF_006                (pyaml.arrays.magnet_array)             size=1
    QD_006                (pyaml.arrays.magnet_array)             size=1
    SD_006                (pyaml.arrays.magnet_array)             size=1
    QF_007                (pyaml.arrays.magnet_array)             size=1
    SF_007                (pyaml.arrays.magnet_array)             size=1
    QD_007                (pyaml.arrays.magnet_array)             size=1
    SD_007                (pyaml.arrays.magnet_array)             size=1
    QF_008                (pyaml.arrays.magnet_array)             size=1
    SF_008                (pyaml.arrays.magnet_array)             size=1
    QD_008                (pyaml.arrays.magnet_array)             size=1
    SD_008                (pyaml.arrays.magnet_array)             size=1
    QF_009                (pyaml.arrays.magnet_array)             size=1
    SF_009                (pyaml.arrays.magnet_array)             size=1
    QD_009                (pyaml.arrays.magnet_array)             size=1
    SD_009                (pyaml.arrays.magnet_array)             size=1
    QF_010                (pyaml.arrays.magnet_array)             size=1
    SF_010                (pyaml.arrays.magnet_array)             size=1
    QD_010                (pyaml.arrays.magnet_array)             size=1
    SD_010                (pyaml.arrays.magnet_array)             size=1
    QF_011                (pyaml.arrays.magnet_array)             size=1
    SF_011                (pyaml.arrays.magnet_array)             size=1
    QD_011                (pyaml.arrays.magnet_array)             size=1
    SD_011                (pyaml.arrays.magnet_array)             size=1
    QF_012                (pyaml.arrays.magnet_array)             size=1
    SF_012                (pyaml.arrays.magnet_array)             size=1
    QD_012                (pyaml.arrays.magnet_array)             size=1
    SD_012                (pyaml.arrays.magnet_array)             size=1
    QF_013                (pyaml.arrays.magnet_array)             size=1
    SF_013                (pyaml.arrays.magnet_array)             size=1
    QD_013                (pyaml.arrays.magnet_array)             size=1
    SD_013                (pyaml.arrays.magnet_array)             size=1
    QF_014                (pyaml.arrays.magnet_array)             size=1
    SF_014                (pyaml.arrays.magnet_array)             size=1
    QD_014                (pyaml.arrays.magnet_array)             size=1
    SD_014                (pyaml.arrays.magnet_array)             size=1
    QF_015                (pyaml.arrays.magnet_array)             size=1
    SF_015                (pyaml.arrays.magnet_array)             size=1
    QD_015                (pyaml.arrays.magnet_array)             size=1
    SD_015                (pyaml.arrays.magnet_array)             size=1
    QF_016                (pyaml.arrays.magnet_array)             size=1
    SF_016                (pyaml.arrays.magnet_array)             size=1
    QD_016                (pyaml.arrays.magnet_array)             size=1
    SD_016                (pyaml.arrays.magnet_array)             size=1
    Cell1                 (pyaml.arrays.element_array)            size=4
    Cell2                 (pyaml.arrays.element_array)            size=4
    Cell3                 (pyaml.arrays.element_array)            size=4
    Cell4                 (pyaml.arrays.element_array)            size=4
    Cell5                 (pyaml.arrays.element_array)            size=4
    Cell6                 (pyaml.arrays.element_array)            size=4
    Cell7                 (pyaml.arrays.element_array)            size=4
    Cell8                 (pyaml.arrays.element_array)            size=4
    Cell9                 (pyaml.arrays.element_array)            size=4
    Cell10                (pyaml.arrays.element_array)            size=4
    Cell11                (pyaml.arrays.element_array)            size=4
    Cell12                (pyaml.arrays.element_array)            size=4
    Cell13                (pyaml.arrays.element_array)            size=4
    Cell14                (pyaml.arrays.element_array)            size=4
    Cell15                (pyaml.arrays.element_array)            size=4
    Cell16                (pyaml.arrays.element_array)            size=4
    .

Diagnostics:
    BETATRON_TUNE (pyaml.diagnostics.tune_monitor)
    .

From this I can understand that I need to do something like accelerator.design to read from the simulator which is already very nice, but after that I would guess accelerator.design.QF_001 which is not the interface. Instead I need to do accelerator.design.magnets.get("QF_001").

If the yellow pages would show the categories corresponding to the element holders maybe the interface would be easier for the users to understand and remember?

Activity

  1. GamelinAl commented on Sep 4, 2026

    @GamelinAl
    Member

    Once #199 has been fully implemented, this will become much easier:

    • QF_001 = accelerator.design['QF_001']
    • QF = accelerator.design['QF*']
    • QF_cell4 = accelerator.design['QF*'] & accelerator.design.get("Cell4")

    This is feature which will grant easy access.

  2. TeresiaOlsson commented on Sep 4, 2026

    @TeresiaOlsson
    MemberAuthor

    Once #199 has been fully implemented, this will become much easier:

    * QF_001 = accelerator.design['QF_001']
    
    * QF = accelerator.design['QF*']
    
    * QF_cell4 = accelerator.design['QF*'] & accelerator.design.get("Cell4")
    

    This is feature which will grant easy access.

    That will be perfect! And it makes the interface similar to pyAT which hopefully should make it easier for pyAT users to get started.

  3. TeresiaOlsson commented on Oct 2, 2026

    @TeresiaOlsson
    MemberAuthor

    I think the tutorial in python-accelerator-middle-layer/documentation#53 show the problem. I think at the moment it's too confusing what the architecture responsibilities are between the yellow pages and the element holder and their APIs are not aligned.

    @GamelinAl if you make an issue to discuss sr.design.magnets vs sr.design.magnet maybe as part of that discussion we should also discuss the alignment with the API of the yellow pages because my feeling is that after settling on the API for the element holders the yellow pages can be modified to agree with it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions