Skip to content
Snippets Groups Projects
Commit 733a57a2 authored by Alexis GAMELIN's avatar Alexis GAMELIN
Browse files

Prepare release v0.7

parent 712120af
Branches
Tags
2 merge requests!13v0.7.0,!12Prepare release v0.7
mbtrack2
========
[![Documentation Status](https://readthedocs.org/projects/mbtrack2/badge/?version=latest)](https://mbtrack2.readthedocs.io/en/latest/?badge=latest)
![GitLab Release](https://img.shields.io/gitlab/v/release/184?gitlab_url=https%3A%2F%2Fgitlab.synchrotron-soleil.fr%2F)
![PyPI - License](https://img.shields.io/pypi/l/mbtrack2)
![Read the Docs](https://img.shields.io/readthedocs/mbtrack2)
mbtrack2 is a coherent object-oriented framework written in python to work on collective effects in synchrotrons.
......@@ -58,11 +60,19 @@ To test your installation run:
from mbtrack2 import *
```
### Using docker
A docker image is available:
```
docker pull gitlab-registry.synchrotron-soleil.fr/pa/collective-effects/mbtrack2
```
References
----------
If used in a publication, please cite mbtrack2 paper and the zenodo archive for the corresponding code version (and any other paper in this list for more specific features).
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.10871040.svg)](https://doi.org/10.5281/zenodo.10871040)
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.12749990.svg)](https://doi.org/10.5281/zenodo.12749990)
### mbtrack2 general features
A. Gamelin, W. Foosang, and R. Nagaoka, “mbtrack2, a Collective Effect Library in Python”, presented at the 12th Int. Particle Accelerator Conf. (IPAC'21), Campinas, Brazil, May 2021, paper MOPAB070.
......
# -*- coding: utf-8 -*-
__version__ = "0.6.0"
__version__ = "0.7.0"
from mbtrack2.impedance import *
from mbtrack2.instability import *
from mbtrack2.tracking import *
......
......@@ -600,8 +600,6 @@ class Impedance(ComplexData):
Return a WakeFunction object from the impedance data.
plot()
Plot the impedance data.
to_pycolleff()
Convenience method to export impedance to pycolleff.
"""
def __init__(self,
......@@ -783,36 +781,6 @@ class Impedance(ComplexData):
ax.set_ylabel(label)
return ax
def to_pycolleff(self):
"""
Convenience method to export impedance to pycolleff.
Only implemented for longitudinal impedance.
Returns
-------
imp : pycolleff.longitudinal_equilibrium.ImpedanceSource
pycolleff ImpedanceSource object
"""
# pycolleff is a soft dependency
from pycolleff.longitudinal_equilibrium import ImpedanceSource
# avoid circular import
from mbtrack2.utilities.misc import double_sided_impedance
imp = ImpedanceSource()
if self.component_type == "long":
double_sided_impedance(self)
# Negative imag sign convention !
imp.zl_table = self.data["real"].to_numpy(
) - 1j * self.data["imag"].to_numpy()
imp.ang_freq_table = self.data.index.to_numpy() * 2 * np.pi
else:
raise NotImplementedError()
imp.calc_method = ImpedanceSource.Methods.ImpedanceDFT
imp.active_passive = ImpedanceSource.ActivePassive.Passive
return imp
class WakeField:
"""
......
......@@ -193,8 +193,6 @@ class CavityResonator():
Force feedback update from current CavityResonator parameters.
sample_voltage()
Sample the voltage seen by a zero charge particle during an RF period.
to_pycolleff()
Convenience method to export a CavityResonator to pycolleff.
References
----------
......@@ -1146,47 +1144,6 @@ class CavityResonator():
return pos, voltage_rec
def to_pycolleff(self, Impedance=True):
"""
Convenience method to export a CavityResonator to pycolleff.
Parameters
----------
Impedance : bool, optional
If True, export as impedance (i.e. ImpedanceSource.Methods.ImpedanceDFT).
If False, export as wake (i.e. ImpedanceSource.Methods.Wake).
Default is True.
Returns
-------
cav : pycolleff ImpedanceSource object
"""
# pycolleff is a soft dependency
from pycolleff.longitudinal_equilibrium import ImpedanceSource
cav = ImpedanceSource()
cav.harm_rf = self.m
cav.Q = self.QL
RoverQ = self.RL / self.QL
cav.shunt_impedance = RoverQ * cav.Q
cav.ang_freq_rf = self.ring.omega1
cav.ang_freq = cav.harm_rf * cav.ang_freq_rf
cav.detune_w = 2 * np.pi * self.detune
if self.Vg != 0:
cav.active_passive = ImpedanceSource.ActivePassive.Active
if Impedance:
raise NotImplementedError()
else:
cav.calc_method = ImpedanceSource.Methods.Wake
else:
cav.active_passive = ImpedanceSource.ActivePassive.Passive
if Impedance:
cav.calc_method = ImpedanceSource.Methods.ImpedanceDFT
else:
cav.calc_method = ImpedanceSource.Methods.Wake
return cav
class ProportionalLoop():
"""
......
......@@ -116,8 +116,7 @@ class Synchrotron:
single or multi-harmonic RF systems.
to_pyat(Vrf)
Return a pyAT simple_ring element from the Synchrotron element data.
to_pycolleff(I0, Vrf, bunch_number)
Return a pycolleff Ring element from the Synchrotron element data.
"""
def __init__(self, h, optics, particle, **kwargs):
......@@ -587,48 +586,3 @@ class Synchrotron:
U0=self.U0,
TimeLag=TimeLag)
return at_simple_ring
def to_pycolleff(self, I0, Vrf, bunch_number):
"""
Return a pycolleff Ring element from the Synchrotron element data.
Parameters
----------
I0 : float
Beam current in [A].
Vrf : float
RF voltage in [V].
bunch_number : int
Total number of bunches filled.
Returns
-------
ring : pycolleff.colleff.Ring
pycolleff Ring object.
"""
# pycolleff is a soft dependency
from pycolleff.colleff import Ring
ring = Ring()
ring.version = 'from_mbtrack2'
ring.rf_freq = self.f1
ring.mom_comp = self.ac # momentum compaction factor
ring.energy = self.E0 # energy [eV]
ring.tuney = self.tune[1] # vertical tune
ring.tunex = self.tune[0] # horizontal tune
ring.chromx = self.chro[0] # horizontal chromaticity
ring.chromy = self.chro[1] # vertical chromaticity
ring.harm_num = self.h # harmonic Number
ring.num_bun = bunch_number # number of bunches filled
ring.total_current = I0 # total current [A]
ring.sync_tune = self.synchrotron_tune(Vrf) # synchrotron tune
ring.espread = self.sigma_delta
ring.bunlen = self.sigma_0 * c # [m]
ring.damptx = self.tau[0] # [s]
ring.dampty = self.tau[1] # [s]
ring.dampte = self.tau[2] # [s]
ring.en_lost_rad = self.U0 # [eV]
ring.gap_voltage = Vrf # [V]
return ring
[tool.poetry]
name = "mbtrack2"
version = "0.6.0"
version = "0.7.0"
description = "A coherent object-oriented framework to work on collective effects in synchrotrons."
authors = ["Alexis Gamelin <alexis.gamelin@synchrotron-soleil.fr>"]
license = "BSD-3-Clause"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment