Skip to main content

Cython binding to MAD-X

Project description

Latest Version Downloads License Supported Python versions

CPyMAD is a Cython binding to MAD-X.

MAD-X is a software package to simulate particle accelerators and is used at CERN and all around the world. It has its own proprietary scripting language and is usually launched from the command line.

This version of CPyMAD is tested with MAD-X 5.02.10. Other MAD-X versions (and immediate revisions) might work too, but are more likely to cause problems.

The installable wheel archives that are provided for some versions of python to simplify the installation on windows contain a precompiled version of CPyMAD that is statically linked against MAD-X 5.02.10.

Disclaimer

This is a heavily modified fork of the cern-cpymad package. The fork is not authored or maintained by CERN members.

CPyMAD links against an unofficial build of MAD-X that is not supported by CERN, i.e. this binary may have problems that the official binary does not have and vice versa. This means:

  • Only report issues to CERN that can be reproduced with their official command line client.

  • Only report issues here if they cannot be reproduced with their official command line client.

See Reporting issues.

Project pages

Usage

The Madx class provides a basic binding to the MAD-X interpreter:

from cpymad.madx import Madx

# Start a MAD-X interpretor. All MAD-X commands issued via cpymad will
# be logged to `command_log`:
madx = Madx(command_log="log.madx")

# Show the version of MAD-X that is actually loaded:
print(madx.version)

# Execute one of your predefined MAD-X files:
madx.call('/path/to/some/input_file.madx')

# Only a handful of MAD-X methods are exposed as methods. For others,
# you can use the `command` attribute. For example, to set a beam:
madx.command.beam(sequence='myseq1', particle='PROTON')

# Calculate TWISS parameters:
twiss = madx.twiss(sequence='LEBT',
                   betx=0.1, bety=0.1,
                   alfx=0.1, alfy=0.1)

# Your own analysis below:
from matplotlib import pyplot as plt
plt.plot(twiss['s'], twiss['betx'])
plt.show()

There are alternative syntaxes for the extreme cases where you need more fine grained control over the command string composition or where command fails to do the right thing:

# can't use `global` as attribute, since it's a python keyword:
madx.command.global_(sequence='cassps', Q1=26.58)

# can't use `: ` as attribute:
madx.command('QP: QUADRUPOLE', AT=2, L=1)

# issue a plain text command, don't forget the semicolon!
madx.input('FOO, BAR=[baz], QUX=<NORF>;')

See http://hibtc.github.io/cpymad for further documentation.

Known issues

On windows with python3.3, there is currently no satisfying way to close file handles in the MAD-X process or prevent them from being inherited by default. You have to make sure on your own that you close all file handles before creating a new cpymad.madx.Madx instance!

Hacking

Try to be consistent with the PEP8 guidelines. Add unit tests for all non-trivial functionality. Dependency injection is a great pattern to keep modules testable.

Commits should be reversible, independent units if possible. Use descriptive titles and also add an explaining commit message unless the modification is trivial. See also: A Note About Git Commit Messages.

Reporting issues

If you have a problem with a sequence file, first try to check if that problem remains when using the MAD-X command line client distributed by CERN, then:

  • Report the issue to CERN only if it be reproduced with their official command line client.

  • Report the issue here only if it cannot be reproduced with their official command line client.

For issues regarding the cpymad code itself or usage information, I’m happy to answer. Just keep in mind to be precise, specific, concise and provide all the necessary information.

See also:

Tests

Currently, tests run on:

  • The Travis CI service is mainly used to check that the unit tests for pymad itself execute on several python versions. Python{2.7,3.3} are supported. The tests are executed on any update of an upstream branch. The Travis builds use a unofficial precompiled libmadx-dev package to avoid having to rebuild the entire MAD-X library on each invocation.

    Build Status Coverage

License

CPyMAD must be used in compliance with the licenses as described in the following sections:

License for CPyMAD source

applies to the python source of the CPyMAD package:

Copyright (c) 2013-2015, HIT - Heidelberg Ion-Therapy Center

To the extent possible under law, the person who associated CC0 with
CPyMAD has waived all copyright and related or neighboring rights to
CPyMAD.

You should have received a copy of the CC0 legalcode along with this
work. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.

Note that this package is a heavily modified fork of the original cern-cpymad package developed at CERN:

Copyright (c) 2011, CERN. All rights reserved.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use cern-cpymad except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

For details, see the version history or ask the package maintainer.

License for MAD-X

applies to binary distributions that do not require a separate installation of MAD-X, i.e. binaries that are statically linked to MAD-X:

CERN

EUROPEAN ORGANISATION FOR NUCLEAR RESEARCH


Program name:                 MAD --- Methodical Accelerator Design

CERN program library entry:   T5001

Authors or contacts:          mad@cern.ch
                              BE-ABP Group
                              CERN
                              CH-1211 GENEVA 23
                              SWITZERLAND


Copyright CERN, Geneva 1990 - Copyright and any other appropriate legal
protection of this computer program and associated documentation reserved
in all countries of the world. Organisations collaborating with CERN may
receive this program and documentation freely and without charge. CERN
undertakes no obligation for the maintenance of this program, nor
responsibility for its correctness, and accepts no liability whatsoever
resulting from its use. Program and documentation are provided solely for
the use of the organisation to which they are distributed. This program
may not be copied or otherwise distributed without permission. This
message must be retained on this and any other authorised copies. The
material cannot be sold. CERN should be given credit in all references.

Changelog

(dates are in the form dd.mm.yyyy)

0.14.3

Date: 15.09.2016

  • in setup: disable unsupported --no-as-needed on Mac

  • in setup: allow value of --madxdir to be specified as separate argument

  • format types.Expression in commands

  • fix formatting of types.Constraint

0.14.2

Date: 12.09.2016

  • don’t ignore exceptions from clibmadx._get_node_index

  • fix node positions for auto-inserted DRIFTs

  • fix node positions for unexpanded sequences

  • add some methods for sequence expansion

  • change libmadx.get_table_column_count() to return number of selected columns for consistency

  • fix bug in Madx._use() that caused Madx.twiss() and other functions to reUSE the sequence and thus clear previously selected flags

  • force linking against libptc (required on py35 if MAD-X is installed in non-system location, since DT_RUNPATH is non-transitive and does not resolve libptc as indirect dependency via the chain cpymad->libmadx->libptc)

0.14.1

Date: 18.05.2016

  • improve MAD-X command composition

  • Update official support to MAD-X 5.02.10

0.14.0

Date: 04.03.2016

  • Add function to obtain transfer map

  • Fix bug with expanded_elements listing too many elements (leading elements were re-listed at the end)

0.13.0

Date: 24.01.2016

  • Update to MAD-X 5.02.08:
    • official support

    • automatic tests

    • prebuilt binaries on PyPI (for windows)

0.12.2

Date: 30.10.2015

  • Strip trailing underscore from MadxCommands attribute names. This allows the syntax to be used even for python keywords, e.g. m.command.global_()

  • Change the behaviour of Madx.globals:
    • when setting string values, set the variable as deferred expression

    • when getting deferred variables, return instances of type Expression

    • when iterating, only show non-constant globals

0.12.1

Date: 13.10.2015

  • fix crash due to incorrect parameter name for logging.basicConfig

  • fix crash due to missing subprocess.MAXFD on python3.5

  • fix coverage report submitted to coveralls.io

0.12.0

Date: 05.10.2015

  • expose directory of global MAD-X variables as Madx.globals

  • expose directory of global MAD-X elements as Madx.elements

  • fix a bug with Elements.__contains__ reporting yes incorrectly

  • list only those column of a table that are marked for output

  • add function to get row names of a table

0.11.0

Date: 03.07.2015

  • Remove models + resource handling from cpymad. If you need these, check them out from the previous version and maintain them in your own code base. This way you are much more flexible to adapt models to your needs.

0.10.8

Date: 02.07.2015

  • Public element names are now of the form “foo[3]” or simply “foo”. The syntax “foo:d” can not be used anymore (this form is used by MAD-X only internally and converted at the lowest wrapper level).

  • Fix exception when not specifying sequence name on Madx methods

0.10.7

Date: 21.06.2015

  • allow redirection of MAD-X standard I/O via Madx constructor

0.10.6

Date: 29.05.2015

  • add csv() method for ResourceProvider

  • use C loader from yaml for performance if available

  • convert madx.metadata.get_copyright_notice

  • add accessors to real sequence + elements for model.Sequence

0.10.5

Date: 25.05.2015

  • add MAD-X specific metadata in cpymad.madx.metadata

  • speedup Travis testing (using caches and docker containers)

0.10.4

Date: 22.04.2015

  • prevent MAD-X process from exiting on Ctrl-C (this was an especially nasty feature when using the interactive python interpretor)

  • upgrade to MAD-X 5.02.05 (development release from 10.04.2015)

  • fix leakage of open file handles into remote process on py2/windows

0.10.3

Date: 29.03.2015

  • make sequence.elements.index more convenient: can now handle names with or without the ‘:d’ suffix as well as the special names ‘#s’ and ‘#e’

0.10.2

Date: 05.03.2015

  • add some utility functions to work with MAD-X element names and identifiers

  • add a setter method for values to Madx

  • improve install instructions. In particular, recommend WinPython as build environment

  • fix the MinGW build error due to broken sysconfig inline

  • run setup only if invoked as main script

0.10.1

Date: 09.01.2015

  • convert IOError to RemoteProcessCrashed, which can occur on transmission if the remote process is already down

  • convert ValueError to RemoteProcessClosed, which can occur on transmission if the remote process was already closed

0.10.0 Fork

Date: 09.01.2015

This is the first independent version released for the HIT cpymad fork. The changes on the public API are so heavy, that this is basically a new library.

  • rename package from cern.cpymad to cpymad

  • remove LHC models from repository

  • redesign API to make more use of OOP (no stable API yet!)

  • removed some obsolete / unused modules

0.9

Date: 17.11.2014

  • don’t link against numpy anymore (this makes distribution of prebuilt binaries on windows actually useful)

  • add MAD-X license notice (required to distribute binaries)

  • setup.py doesn’t require setuptools to be pre-installed anymore (if internet is available)

  • some doc-fixes

  • convert cpymad._couch to a simple module (was a single file package)

  • use logging through-out the project

  • alow logger to be specified as model/madx constructor argument

  • multi-column access, e.g.: table.columns['betx','bety']

  • move tests one folder level up

0.8

Date: 30.06.2014

  • isolate cpymad: remove jpymad backend, remove pymad base

  • bootstrap the dependency on numpy

  • remove custom MAD-X path discovery during setup. You should use –madxdir if the library is not installed in a system location.

  • add function libmadx.is_expanded

  • add function libmadx.chdir

  • handle MAD-X table columns with integer arrays

  • make madx.command more powerful (allows **kwargs and attribute access)

  • use inherited pipes for IPC with remote MAD-X processes (allows to forward stdin/stdout separately)

  • close connection to remote process on finalization of LibMadxClient

  • remove MAD-X command checks, recursive_history and filename completion

  • fix name clash

  • fix some bugs

  • rename convenience constructors to cern.cpymad.load_model and cern.cpymad.start_madx due to name clash with module names

0.7

Date: 16.04.2014

  • close handles in remote process properly on all supported python versions

  • rewrite libmadx.get_table functionality

  • madx functions that return tables now return proxy objects instead. For backward compatibility these can be iterated to allow unpacking into a tuple

  • the returned table columns is now a proxy object as well and not TfsTable

  • remove retdict parameter

  • move some cpymad specific functionality into the cpymad package

  • add libmadx/madx functions to access list of elements in a sequence

0.6

Date: 17.03.2014

  • raise exception and don’t hang up anymore, if libmadx process crashes

  • on python>=3.4, close handles in remote process properly

  • let every ‘Madx’ instance have an independent copy of the madx library. this makes the madx module much more useful. previously, this was only true for instances of ‘cpymad.model’.

  • restrict to only one cython module that links to libmadx. (allows static linking which is advantageous on windows!)

  • use YAML model files instead of JSON

  • make ‘madx’ a submodule of ‘cpymad’

  • fix test exit status

0.5

Date: 21.01.2014

  • migrate to setuptools from distutils

  • python3 support

  • add continuous integration with Travis

  • proper setup.py and MANIFEST.in to be used with PyPI

  • rename package to ‘cern-pymad’

  • allow to build from PyPI without having cython

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cpymad-0.14.3.tar.gz (126.6 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

cpymad-0.14.3-py3.4-win-amd64.egg (3.4 MB view details)

Uploaded Egg

cpymad-0.14.3-py3.4-win32.egg (2.9 MB view details)

Uploaded Egg

cpymad-0.14.3-py3.3-win-amd64.egg (3.4 MB view details)

Uploaded Egg

cpymad-0.14.3-py3.3-win32.egg (2.9 MB view details)

Uploaded Egg

cpymad-0.14.3-py2.7-win-amd64.egg (3.4 MB view details)

Uploaded Egg

cpymad-0.14.3-py2.7-win32.egg (2.9 MB view details)

Uploaded Egg

cpymad-0.14.3-cp34-cp34m-win_amd64.whl (3.4 MB view details)

Uploaded CPython 3.4mWindows x86-64

cpymad-0.14.3-cp34-cp34m-win32.whl (2.9 MB view details)

Uploaded CPython 3.4mWindows x86

cpymad-0.14.3-cp33-none-win_amd64.whl (3.4 MB view details)

Uploaded CPython 3.3Windows x86-64

cpymad-0.14.3-cp33-none-win32.whl (2.9 MB view details)

Uploaded CPython 3.3Windows x86

cpymad-0.14.3-cp27-none-win_amd64.whl (3.4 MB view details)

Uploaded CPython 2.7Windows x86-64

cpymad-0.14.3-cp27-none-win32.whl (2.9 MB view details)

Uploaded CPython 2.7Windows x86

File details

Details for the file cpymad-0.14.3.tar.gz.

File metadata

  • Download URL: cpymad-0.14.3.tar.gz
  • Upload date:
  • Size: 126.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for cpymad-0.14.3.tar.gz
Algorithm Hash digest
SHA256 bb5640fa058fd76e48898aa767467631741a9ded11af43f25bde857e55040d4c
MD5 49bc47fcefa07386353b06796f1e1a4d
BLAKE2b-256 532a9da15fda52008d9b5a9a247ee9719b1d9e3ba54b488847d35c9f17fb4d5d

See more details on using hashes here.

File details

Details for the file cpymad-0.14.3-py3.4-win-amd64.egg.

File metadata

File hashes

Hashes for cpymad-0.14.3-py3.4-win-amd64.egg
Algorithm Hash digest
SHA256 6d05b45ba69210efd77f5a6cae336756d90ef6ed8d91de2c736bbff49c2ef4cc
MD5 20d7d5b29f91e902d4d6d72a95357cc7
BLAKE2b-256 2cf6df8613cf3dcd17cd5dfacc2e7d5c99843843de8b2628bc340eec4a375b04

See more details on using hashes here.

File details

Details for the file cpymad-0.14.3-py3.4-win32.egg.

File metadata

File hashes

Hashes for cpymad-0.14.3-py3.4-win32.egg
Algorithm Hash digest
SHA256 0f463f9304d7c5239bcb7ab85ca609988338f1e48155e7b2f7f9c3d3c7fd8f47
MD5 e1177f03cd3854cead42560546bb7942
BLAKE2b-256 79763b494c297d4146f2db6430c1e38be580507e3248a1e134d19f74a082be56

See more details on using hashes here.

File details

Details for the file cpymad-0.14.3-py3.3-win-amd64.egg.

File metadata

File hashes

Hashes for cpymad-0.14.3-py3.3-win-amd64.egg
Algorithm Hash digest
SHA256 3c09d56f6c36e98deace0aea17378a6d24fd9cb6d52cb39954a8c536d804b278
MD5 80ac79834333604f5f8f418d2cf59822
BLAKE2b-256 e4855ec18bf67b04d197ad97f423b4b5098efda6729f73ded424131ca8b7034f

See more details on using hashes here.

File details

Details for the file cpymad-0.14.3-py3.3-win32.egg.

File metadata

File hashes

Hashes for cpymad-0.14.3-py3.3-win32.egg
Algorithm Hash digest
SHA256 de695dac075033ac587f90a207eec298dcf310c4a680d7c2b09c344656ca1456
MD5 e23b578e90cb5db71fecacc8600fe445
BLAKE2b-256 39970a710f918d27f53adcdb14670cc394a253e10d3f11b7d5a26774387d12af

See more details on using hashes here.

File details

Details for the file cpymad-0.14.3-py2.7-win-amd64.egg.

File metadata

File hashes

Hashes for cpymad-0.14.3-py2.7-win-amd64.egg
Algorithm Hash digest
SHA256 9c5a25ea9b0edabd65be4e42b33c773377d2dfca9a10c4572577779221755a5b
MD5 d26991278a166ed19cf6d3cfc7eb12b9
BLAKE2b-256 dfdcc0823da20ca7eaed46330e11c24ac3dc33e1636a0da427551801f8cfa498

See more details on using hashes here.

File details

Details for the file cpymad-0.14.3-py2.7-win32.egg.

File metadata

File hashes

Hashes for cpymad-0.14.3-py2.7-win32.egg
Algorithm Hash digest
SHA256 09b703313f2e85452c5b18b76ee70ba97682ccad47bde557061c26c85d0cc780
MD5 b2311cff365619d370c328c998dc5e93
BLAKE2b-256 d799f85b70a0e94309392b05ce01f8f4a2d6fc78854bb0efb9afaca8c9f6d4c2

See more details on using hashes here.

File details

Details for the file cpymad-0.14.3-cp34-cp34m-win_amd64.whl.

File metadata

File hashes

Hashes for cpymad-0.14.3-cp34-cp34m-win_amd64.whl
Algorithm Hash digest
SHA256 b813447aba6082937697d8e498d4062b1a9370cd4991a584fc46a6377f927ded
MD5 f6ad7c8e76ad7847a524960e0a1f2f79
BLAKE2b-256 635eb712c4965171d339e3276f4f84155074df04a7f0bc5192e93744db7ecf27

See more details on using hashes here.

File details

Details for the file cpymad-0.14.3-cp34-cp34m-win32.whl.

File metadata

File hashes

Hashes for cpymad-0.14.3-cp34-cp34m-win32.whl
Algorithm Hash digest
SHA256 2ff6b3381aac99f168610614813ace846be4a43eb55b475761dc77374cbc6400
MD5 e8fc836104fd8c499e65511db51b01f6
BLAKE2b-256 248783a9c597da66d804599c8a361ddbb655194a766ae69f9c39ccf131ae6fa2

See more details on using hashes here.

File details

Details for the file cpymad-0.14.3-cp33-none-win_amd64.whl.

File metadata

File hashes

Hashes for cpymad-0.14.3-cp33-none-win_amd64.whl
Algorithm Hash digest
SHA256 c16a7e9125662a0666e852db5578c246b9916b0b8c3b1e2795704eebb5290121
MD5 580373759c6cae08422e7d602ecc3fa1
BLAKE2b-256 8888b263b7c6ba6159a7f8472ad488ffa2c0bbf3ebf4c8a0bcb8fe35e97c9090

See more details on using hashes here.

File details

Details for the file cpymad-0.14.3-cp33-none-win32.whl.

File metadata

File hashes

Hashes for cpymad-0.14.3-cp33-none-win32.whl
Algorithm Hash digest
SHA256 c6ffc492df8fbdb0c4ba8ad5a170132bf616ccc81368d589d50a9472407ee470
MD5 29aceeb82ca63f263811c3d036056d46
BLAKE2b-256 2e6b6f2fe6d1264348858ede08062fd50da3e3143a0262561227b7bf94d56a69

See more details on using hashes here.

File details

Details for the file cpymad-0.14.3-cp27-none-win_amd64.whl.

File metadata

File hashes

Hashes for cpymad-0.14.3-cp27-none-win_amd64.whl
Algorithm Hash digest
SHA256 793bbd440ac51ec23def89c49b9a22baf31bd84386b9eb23c7ceb93ba987cc3d
MD5 1c74367568ed8c5afed3784133b28a81
BLAKE2b-256 963bade39dc04bdac8832aa9ef085f0986e180cd4cd8ab9b861d7de6c7a4acc9

See more details on using hashes here.

File details

Details for the file cpymad-0.14.3-cp27-none-win32.whl.

File metadata

File hashes

Hashes for cpymad-0.14.3-cp27-none-win32.whl
Algorithm Hash digest
SHA256 a88d9850b8b77a3992984c7cc885f68d4f59b5d1cf618e6ff4f028ee6af8d679
MD5 af0409d21573010db5002ce4e62e1943
BLAKE2b-256 05fd3f536b264afdd3b71130fad13c0cf75d83ce05fa32f1d9358e84286fe0ed

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page