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

Merge branch 'RF-FB2' into develop

parents 13b37163 bc5e46cf
No related branches found
No related merge requests found
...@@ -6,7 +6,11 @@ from mbtrack2.tracking.particles import (Electron, ...@@ -6,7 +6,11 @@ from mbtrack2.tracking.particles import (Electron,
Particle) Particle)
from mbtrack2.tracking.synchrotron import Synchrotron from mbtrack2.tracking.synchrotron import Synchrotron
from mbtrack2.tracking.rf import (RFCavity, from mbtrack2.tracking.rf import (RFCavity,
CavityResonator) CavityResonator,
ProportionalLoop,
TunerLoop,
ProportionalIntegralLoop,
DirectFeedback)
from mbtrack2.tracking.parallel import Mpi from mbtrack2.tracking.parallel import Mpi
from mbtrack2.tracking.element import (Element, from mbtrack2.tracking.element import (Element,
LongitudinalMap, LongitudinalMap,
......
...@@ -1398,6 +1398,8 @@ class CavityMonitor(Monitor): ...@@ -1398,6 +1398,8 @@ class CavityMonitor(Monitor):
group_name = cavity_name group_name = cavity_name
dict_buffer = {"cavity_phasor_record":(ring.h, buffer_size,), dict_buffer = {"cavity_phasor_record":(ring.h, buffer_size,),
"beam_phasor_record":(ring.h, buffer_size,), "beam_phasor_record":(ring.h, buffer_size,),
"generator_phasor_record":(ring.h, buffer_size,),
"ig_phasor_record":(ring.h, buffer_size,),
"detune":(buffer_size,), "detune":(buffer_size,),
"psi":(buffer_size,), "psi":(buffer_size,),
"Vg":(buffer_size,), "Vg":(buffer_size,),
...@@ -1408,6 +1410,8 @@ class CavityMonitor(Monitor): ...@@ -1408,6 +1410,8 @@ class CavityMonitor(Monitor):
"QL":(buffer_size,)} "QL":(buffer_size,)}
dict_file = {"cavity_phasor_record":(ring.h, total_size,), dict_file = {"cavity_phasor_record":(ring.h, total_size,),
"beam_phasor_record":(ring.h, total_size,), "beam_phasor_record":(ring.h, total_size,),
"generator_phasor_record":(ring.h, total_size,),
"ig_phasor_record":(ring.h, total_size,),
"detune":(total_size,), "detune":(total_size,),
"psi":(total_size,), "psi":(total_size,),
"Vg":(total_size,), "Vg":(total_size,),
...@@ -1418,6 +1422,8 @@ class CavityMonitor(Monitor): ...@@ -1418,6 +1422,8 @@ class CavityMonitor(Monitor):
"QL":(total_size,)} "QL":(total_size,)}
dict_dtype = {"cavity_phasor_record":complex, dict_dtype = {"cavity_phasor_record":complex,
"beam_phasor_record":complex, "beam_phasor_record":complex,
"generator_phasor_record":complex,
"ig_phasor_record":complex,
"detune":float, "detune":float,
"psi":float, "psi":float,
"Vg":float, "Vg":float,
......
...@@ -1087,15 +1087,16 @@ def plot_cavitydata(filename, cavity_name, phasor="cavity", ...@@ -1087,15 +1087,16 @@ def plot_cavitydata(filename, cavity_name, phasor="cavity",
cavity_name : str cavity_name : str
Name of the CavityResonator object. Name of the CavityResonator object.
phasor : str, optional phasor : str, optional
Type of the phasor to plot. Can be "beam" or "cavity". Type of the phasor to plot. Can be "beam", "cavity", "generator" or
"ig".
plot_type : str, optional plot_type : str, optional
Type of plot: Type of plot:
- "bunch" plots the phasor voltage and angle versus time for a - "bunch" plots the phasor voltage and angle versus time for a
given bunch. given bunch.
- "turn" plots the phasor voltage and ange versus bunch index for - "turn" plots the phasor voltage and ange versus bunch index for
a given turn. a given turn.
- "streak_volt" plots the phasor voltage versus bunch index and - "streak_amplitude" plots the phasor amplitude versus bunch index
time. and time.
- "streak_angle" plots the phasor angle versus bunch index and - "streak_angle" plots the phasor angle versus bunch index and
time. time.
- "detune" or "psi" plots the detuning or tuning angle versus time. - "detune" or "psi" plots the detuning or tuning angle versus time.
...@@ -1114,26 +1115,29 @@ def plot_cavitydata(filename, cavity_name, phasor="cavity", ...@@ -1114,26 +1115,29 @@ def plot_cavitydata(filename, cavity_name, phasor="cavity",
Figure object with the plot on it. Figure object with the plot on it.
""" """
file = hp.File(filename, "r") file = hp.File(filename, "r")
cavity_data = file[cavity_name] cavity_data = file[cavity_name]
time = np.array(cavity_data["time"]) time = np.array(cavity_data["time"])
ph = {"cavity":0, "beam":1} ph = {"cavity":0, "beam":1, "generator":2, "ig":3}
labels = ["Cavity", "Beam"] labels = ["Cavity", "Beam", "Generator", "Generator"]
units = [" voltage [MV]", " voltage [MV]", " voltage [MV]", " current [A]"]
units_val = [1e-6, 1e-6, 1e-6, 1]
if plot_type == "bunch": if plot_type == "bunch":
data = [cavity_data["cavity_phasor_record"][bunch_number,:], data = [cavity_data["cavity_phasor_record"][bunch_number,:],
cavity_data["beam_phasor_record"][bunch_number,:]] cavity_data["beam_phasor_record"][bunch_number,:],
cavity_data["generator_phasor_record"][bunch_number,:],
cavity_data["ig_phasor_record"][bunch_number,:]]
ylabel1 = labels[ph[phasor]] + " voltage [MV]" ylabel1 = labels[ph[phasor]] + units[ph[phasor]]
ylabel2 = labels[ph[phasor]] + " phase [rad]" ylabel2 = labels[ph[phasor]] + " phase [rad]"
fig, ax = plt.subplots() fig, ax = plt.subplots()
twin = ax.twinx() twin = ax.twinx()
p1, = ax.plot(time, np.abs(data[ph[phasor]])*1e-6, color="r",label=ylabel1) p1, = ax.plot(time, np.abs(data[ph[phasor]])*units_val[ph[phasor]], color="r",label=ylabel1)
p2, = twin.plot(time, np.angle(data[ph[phasor]]), color="b", label=ylabel2) p2, = twin.plot(time, np.angle(data[ph[phasor]]), color="b", label=ylabel2)
ax.set_xlabel("Turn number") ax.set_xlabel("Turn number")
ax.set_ylabel(ylabel1) ax.set_ylabel(ylabel1)
...@@ -1150,20 +1154,20 @@ def plot_cavitydata(filename, cavity_name, phasor="cavity", ...@@ -1150,20 +1154,20 @@ def plot_cavitydata(filename, cavity_name, phasor="cavity",
index = np.array(time) == turn index = np.array(time) == turn
if (index.size == 0): if (index.size == 0):
raise ValueError("Turn is not valid.") raise ValueError("Turn is not valid.")
ph = {"cavity":0, "beam":1} data = [cavity_data["cavity_phasor_record"][:,index],
data = [np.array(cavity_data["cavity_phasor_record"])[:,index], cavity_data["beam_phasor_record"][:,index],
np.array(cavity_data["beam_phasor_record"])[:,index]] cavity_data["generator_phasor_record"][:,index],
labels = ["Cavity", "Beam"] cavity_data["ig_phasor_record"][:,index]]
h=len(data[0]) h=len(data[0])
x=np.arange(h) x=np.arange(h)
ylabel1 = labels[ph[phasor]] + " voltage [MV]" ylabel1 = labels[ph[phasor]] + units[ph[phasor]]
ylabel2 = labels[ph[phasor]] + " phase [rad]" ylabel2 = labels[ph[phasor]] + " phase [rad]"
fig, ax = plt.subplots() fig, ax = plt.subplots()
twin = ax.twinx() twin = ax.twinx()
p1, = ax.plot(x, np.abs(data[ph[phasor]])*1e-6, color="r",label=ylabel1) p1, = ax.plot(x, np.abs(data[ph[phasor]])*units_val[ph[phasor]], color="r",label=ylabel1)
p2, = twin.plot(x, np.angle(data[ph[phasor]]), color="b", label=ylabel2) p2, = twin.plot(x, np.angle(data[ph[phasor]]), color="b", label=ylabel2)
ax.set_xlabel("Bunch index") ax.set_xlabel("Bunch index")
ax.set_ylabel(ylabel1) ax.set_ylabel(ylabel1)
...@@ -1175,14 +1179,19 @@ def plot_cavitydata(filename, cavity_name, phasor="cavity", ...@@ -1175,14 +1179,19 @@ def plot_cavitydata(filename, cavity_name, phasor="cavity",
ax.yaxis.label.set_color("r") ax.yaxis.label.set_color("r")
twin.yaxis.label.set_color("b") twin.yaxis.label.set_color("b")
if plot_type == "streak_volt" or plot_type == "streak_phase": if plot_type == "streak_amplitude" or plot_type == "streak_phase":
data = [cavity_data["cavity_phasor_record"][:,:],
cavity_data["beam_phasor_record"][:,:],
cavity_data["generator_phasor_record"][:,:],
cavity_data["ig_phasor_record"][:,:]]
if plot_type == "streak_volt": if plot_type == "streak_amplitude":
data = np.transpose(np.abs(cavity_data["cavity_phasor_record"][:,:])*1e-6) data = np.transpose(np.abs(data[ph[phasor]])*units_val[ph[phasor]])
ylabel = labels[ph[phasor]] + " voltage [MV]" ylabel = labels[ph[phasor]] + units[ph[phasor]]
cmap = mpl.cm.coolwarm # diverging cmap = mpl.cm.coolwarm # diverging
elif plot_type == "streak_phase": elif plot_type == "streak_phase":
data = np.transpose(np.angle(cavity_data["cavity_phasor_record"][:,:])) data = np.transpose(np.angle(data[ph[phasor]]))
ylabel = labels[ph[phasor]] + " phase [rad]" ylabel = labels[ph[phasor]] + " phase [rad]"
cmap = mpl.cm.coolwarm # diverging cmap = mpl.cm.coolwarm # diverging
......
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment