-
Notifications
You must be signed in to change notification settings - Fork 18
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Twiss at certain positions #98
Comments
Hi @Rasimilian, I believe the flag should be the generic name of a MADX table, and this will work if you just change |
@fsoubelet it doesn't work too :( |
That's unfortunate. Could you provide your script, or a minimal version so we can have a look at the issue? |
Actually, this doesn't work for any element selected via the command.
|
Could you also provide the contents of |
I can confirm the behavior here. While waiting for @coldfix's take, the simplest I can suggest for now would be to make use of the associated madx = Madx()
madx.call(file="structure.txt")
madx.command.beam(particle="electron", energy=1.8)
madx.use(sequence="RING")
madx.command.select(flag="twiss", class_="monitor", full=False, column=["name", "s", "betx", "bety", "dx"])
madx.twiss(sequence="RING", centre=True)
twiss_table = madx.table.twiss.dframe().copy()
monitors = twiss_table[twiss_table.keyword == "monitor"][madx.table.twiss.selected_columns()] Alternatively, if you have a know regex pattern (beware of MADX's own regex) for your monitors you can use |
@fsoubelet, do you suggest to use |
Hi, twiss = madx.table.twiss
selection = np.array(twiss.selected_rows(), dtype=bool)
rows = twiss.dframe().iloc[selection] However, the function is currently not implemented according to its documentation which means that I will change the implementation to fit the documentation, so this will be slightly different (removing the need for the manual I will also add |
Also for an unknown reason, it currently doesn't seem to work if specifying a custom table name, I will check if anything can be done about that. |
Scrap my last comment, it does work, but the madx.input('SELECT, flag=twiss_in_bpms, class=monitor;')
madx.twiss(sequence=..., table='twiss_in_bpms') (but this also seems to be the case when exporting the table to a file using the filename argument) |
@coldfix, the reason I asked is that I'm struggling for milliseconds now. For my current problem the code speed is essential. So I have measured time of program execution for suggested methods and the best time is for the code with a created file. I thought avoidance of file creating and accessing an internal table instead would buy me time. |
Sure. I will change it so that the selected rows are applied on the C side without having to read out the entire table, so you won't have to worry about performance. But I can't promise I'll be able to do it today. |
Thank you! :) |
API changes: - ``Table.selected_rows()`` now actually returns the *indices* of the selected elements as documented, rather than returning a boolean mask. - ``Madx.eval()`` does no automatic syntax checking anymore. This is a minor performance improvement and is more consistent with ``Madx.input()`` which doesn't check the syntax either. Expressions can still be checked manually using ``cpymad.util.check_expression`` New features: - (#90) Add comparison operators for ArrayAttribute (see #89) - (#94) Add keyword argument ``Table.dframe(index=..)`` to allow specifying a column or sequence as the DataFrame index rather than using the default (``row_names()``). This is essential when accessing a table after having executed a ``USE`` statement (see #93). - (#97) Add basic support for unexpanded nested sequences by returning them as elements of type ``Sequence`` from ``Sequence.elements`` (see #76) - Add keyword argument ``Madx(prompt=...)`` as a shortcut for the most common ``CommandLog`` use case - (#99) Add method ``Table.column()`` to retrieve specified rows in a specific column. - (#99) Add ``rows`` and/or ``columns`` arguments to several ``Table`` methods to allow querying only specific columns or rows from the MAD-X process - (#99) Add method ``Table.selection()`` that returns a new ``Table`` object which exposes only those rows/columns marked by a previous ``SELECT`` statement (see #98) - Fix ``Madx.eval()`` to handle function calls, e.g.: ``sin(...)`` or ``table(...)`` Bug fixes: - (#95) Fix ``KeyError`` when accessing tables after ``CLEAR`` (see #57) - (#99) Fix requesting a subset of table rows using using a *numpy array* of indices - Fix expression syntax checker to not reject function calls anymore. Rewrite the checker to use a LL(1) parser generator. Documentation: - Add links to external documentation using intersphinx - Use automodapi to create module and class summary pages - Use type hints from function annotations in documentation - Mark more objects for inclusion in the documentation - Add "Edit on GitHub" link to directly edit documentation - Add many function annotations - Generate class inheritance diagrams using graphviz - Document problem with ``Table.row_names()`` after ``USE`` (#93) Tests/CI: - Move python 3.5 deprecation warning to package level - Create GitHub releases for tags automatically (required for zenodo DOIs) - Setup sequence definitions individually and explicitly in each test - Add module for regression tests for all future bugfixes - Put transfer map tests in their own module - Port tests from unittest to pytest for simplicity - Mark flaky tests for expected failure on macOS and windows
Hello!
I'm trying to get Twiss at BPMs positions via a select command, but I get a full twiss table:
The only way to get at certain positions is to save a table to a file and then to read the file:
Is it possible not to create an additional file? Could you help me with this please?
The text was updated successfully, but these errors were encountered: