Source code for simba.Modules.Twiss.gpt

import os
import numpy as np
from ..gdf_emit import gdf_emit
from .. import constants


[docs] def read_gdf_emit_file_object(self, file): if isinstance(file, (str)): return gdf_emit(file) elif isinstance(file, (gdf_emit)): return file else: raise Exception("file is not str or gdf object!")
[docs] def read_gdf_twiss_files(self, filename=None, gdfbeam=None, reset=True): if reset: self.reset_dicts() if isinstance(filename, (list, tuple)): for f in filename: self.read_gdf_twiss_files(filename=f, reset=False) elif os.path.isfile(filename): lattice_name = os.path.basename(filename).split(".")[0] if gdfbeam is None and filename is not None: gdfbeamdata = read_gdf_emit_file_object(self, filename) if hasattr(gdfbeamdata, "avgz"): # mjohnson code added 2022-08-11 nsteps = len(gdfbeamdata.avgz) z_sort = np.array( [x for _, x in sorted(zip(gdfbeamdata.avgt, gdfbeamdata.avgz))], dtype=float, ) order = np.array( [x for _, x in sorted(zip(gdfbeamdata.avgt, np.arange(nsteps)))], dtype=int, ) offset = 0.0 for i in range(1, nsteps): pos = 0.0 if i == 0 else z_sort[i - 1] if z_sort[i] < pos: offset += pos gdfbeamdata.avgz[order[i]] = z_sort[i] + offset # original code begins self.z.val = np.append(self.z.val, gdfbeamdata.avgz) self.s.val = np.append(self.s.val, gdfbeamdata.avgz) elif hasattr(gdfbeamdata, "position"): self.append("z", gdfbeamdata.position) self.append("s", gdfbeamdata.position) cp = self.E0 * np.sqrt(gdfbeamdata.avgG**2 - 1) # self.cp.val = np.append(self.cp.val, cp / constants.elementary_charge) ke = np.array( (np.sqrt(self.E0**2 + cp**2) - self.E0**2) / constants.elementary_charge ) self.kinetic_energy.val = np.append(self.kinetic_energy.val, ke) gamma = 1 + ke / self.E0_eV cp = ke / np.sqrt((gamma - 1) / (gamma + 1)) self.cp.val = np.append(self.cp.val, cp) self.mean_cp.val = np.append(self.mean_cp.val, cp) self.gamma.val = np.append(self.gamma.val, gamma) self.p.val = np.append(self.p.val, cp * self.q_over_c) self.enx.val = np.append(self.enx.val, gdfbeamdata.nemixrms) self.ex.val = np.append(self.ex.val, gdfbeamdata.nemixrms / gdfbeamdata.avgG) self.eny.val = np.append(self.eny.val, gdfbeamdata.nemiyrms) self.ey.val = np.append(self.ey.val, gdfbeamdata.nemiyrms / gdfbeamdata.avgG) self.enz.val = np.append(self.enz.val, gdfbeamdata.nemizrms) self.ez.val = np.append(self.ez.val, gdfbeamdata.nemizrms / gdfbeamdata.avgG) self.beta_x.val = np.append(self.beta_x.val, gdfbeamdata.CSbetax) self.alpha_x.val = np.append(self.alpha_x.val, gdfbeamdata.CSalphax) self.gamma_x.val = np.append( self.gamma_x.val, (1 + gdfbeamdata.CSalphax**2) / gdfbeamdata.CSbetax ) self.beta_y.val = np.append(self.beta_y.val, gdfbeamdata.CSbetay) self.alpha_y.val = np.append(self.alpha_y.val, gdfbeamdata.CSalphay) self.gamma_y.val = np.append( self.gamma_y.val, (1 + gdfbeamdata.CSalphay**2) / gdfbeamdata.CSbetay ) self.beta_z.val = np.append(self.beta_z.val, np.zeros(len(gdfbeamdata.stdx))) self.alpha_z.val = np.append(self.alpha_z.val, np.zeros(len(gdfbeamdata.stdx))) self.gamma_z.val = np.append(self.gamma_z.val, np.zeros(len(gdfbeamdata.stdx))) self.sigma_x.val = np.append(self.sigma_x.val, gdfbeamdata.stdx) self.sigma_y.val = np.append(self.sigma_y.val, gdfbeamdata.stdy) self.sigma_xp.val = np.append( self.sigma_xp.val, gdfbeamdata.stdBx / gdfbeamdata.avgBz ) self.sigma_yp.val = np.append( self.sigma_yp.val, gdfbeamdata.stdx / gdfbeamdata.avgBz ) self.mean_x.val = np.append(self.mean_x.val, gdfbeamdata.avgx) self.mean_y.val = np.append(self.mean_y.val, gdfbeamdata.avgy) beta = np.sqrt(1 - (gamma**-2)) if hasattr(gdfbeamdata, "stdt"): self.sigma_t.val = np.append(self.sigma_t.val, gdfbeamdata.stdt) else: self.sigma_t.val = np.append( self.sigma_t.val, gdfbeamdata.stdz / (beta * constants.speed_of_light) ) if hasattr(gdfbeamdata, "avgt"): self.t.val = np.append(self.t.val, gdfbeamdata.avgt) else: self.t.val = np.append(self.t.val, gdfbeamdata.time) self.sigma_z.val = np.append(self.sigma_z.val, gdfbeamdata.stdz) # self.append('sigma_cp', (gdfbeamdata.stdG / gdfbeamdata.avgG) * cp) self.sigma_cp.val = np.append( self.sigma_cp.val, (gdfbeamdata.stdG / gdfbeamdata.avgG) * cp / constants.elementary_charge, ) self.sigma_p.val = np.append( self.sigma_p.val, (gdfbeamdata.stdG / gdfbeamdata.avgG) ) self.mux.val = np.append(self.mux.val, np.zeros(len(gdfbeamdata.stdx))) self.muy.val = np.append(self.muy.val, np.zeros(len(gdfbeamdata.stdx))) self.eta_x.val = np.append(self.eta_x.val, np.zeros(len(gdfbeamdata.stdx))) self.eta_xp.val = np.append(self.eta_xp.val, np.zeros(len(gdfbeamdata.stdx))) self.eta_y.val = np.append(self.eta_y.val, np.zeros(len(gdfbeamdata.stdy))) self.eta_yp.val = np.append(self.eta_yp.val, np.zeros(len(gdfbeamdata.stdy))) self.element_name.val = np.append( self.element_name.val, np.full(len(gdfbeamdata.stdx), "") ) self.lattice_name.val = np.append( self.lattice_name.val, np.full(len(gdfbeamdata.stdx), lattice_name) ) # ## BEAM parameters self.ecnx.val = np.append(self.ecnx.val, np.zeros(len(gdfbeamdata.stdx))) self.ecny.val = np.append(self.ecny.val, np.zeros(len(gdfbeamdata.stdx))) self.eta_x_beam.val = np.append( self.eta_x_beam.val, np.zeros(len(gdfbeamdata.stdx)) ) self.eta_xp_beam.val = np.append( self.eta_xp_beam.val, np.zeros(len(gdfbeamdata.stdx)) ) self.eta_y_beam.val = np.append( self.eta_y_beam.val, np.zeros(len(gdfbeamdata.stdx)) ) self.eta_yp_beam.val = np.append( self.eta_yp_beam.val, np.zeros(len(gdfbeamdata.stdx)) ) self.beta_x_beam.val = np.append( self.beta_x_beam.val, np.zeros(len(gdfbeamdata.stdx)) ) self.beta_y_beam.val = np.append( self.beta_y_beam.val, np.zeros(len(gdfbeamdata.stdx)) ) self.alpha_x_beam.val = np.append( self.alpha_x_beam.val, np.zeros(len(gdfbeamdata.stdx)) ) self.alpha_y_beam.val = np.append( self.alpha_y_beam.val, np.zeros(len(gdfbeamdata.stdx)) )