Source code for pyaml.external.pySC_interface
import time
from typing import TYPE_CHECKING, Optional, Tuple
import numpy as np
if TYPE_CHECKING:
from ..common.element_holder import ElementHolder
from ..common.exception import PyAMLException
[docs]
class pySCInterface:
set_wait_time: float = 0
def __init__(
self,
element_holder: "ElementHolder",
bpm_array_name: str,
rf_plant_name: Optional[str] = None,
):
self.element_holder = element_holder
self.bpm_array = element_holder.get_bpms(bpm_array_name)
self.rf_plant_name = rf_plant_name
if rf_plant_name is not None:
self.rf_plant = element_holder.get_rf_plant(self.rf_plant_name)
else:
self.rf_plant = None
[docs]
def get_orbit(self) -> Tuple[np.array, np.array]:
# we should wait here somehow according to polling rate
positions = self.bpm_array.positions.get()
return positions[:, 0], positions[:, 1]
[docs]
def get(self, name: str) -> float:
magnet = self.element_holder.get_magnet(name=name)
return magnet.strength.get()
[docs]
def set(self, name: str, value: float) -> None:
magnet = self.element_holder.get_magnet(name=name)
magnet.strength.set(value=value) # ideally set_and_wait but not implemented
time.sleep(self.set_wait_time)
return
[docs]
def get_rf_main_frequency(self) -> float:
if self.rf_plant is None:
raise PyAMLException("RF plant name was not provided.")
return self.rf_plant.frequency.get()
[docs]
def set_rf_main_frequency(self, value: float) -> None:
if self.rf_plant is None:
raise PyAMLException("RF plant name was not provided.")
self.rf_plant.frequency.set(value)
time.sleep(self.set_wait_time)
return