Skip to content
Snippets Groups Projects
Commit decae2cf authored by Ryoichi Miyamoto's avatar Ryoichi Miyamoto
Browse files

A minor update lib_tw.py for the Ryoichi's version of PARTRAversion.

parent b942513e
No related branches found
No related tags found
No related merge requests found
Pipeline #40872 failed
......@@ -429,7 +429,6 @@ class PROJECT:
# ---- Data related
class PARTRAN:
"""
Note:
......@@ -438,143 +437,155 @@ class PARTRAN:
History:
- 2016.02.17: Changed how to identify the line of indices.
- 2016.02.17: Added a logic to avoid #/0 for LEBT.
- 2016-02-17: Changed how to identify the line of indices.
- 2016-02-17: Added a logic to avoid #/0 for LEBT.
- 2020-08-28: Adopted to python3.
- 2020-08-28: 99% emittance added.
- 2020-08-28: alfz was wrong (in power of gamma) and fixed.
"""
def __init__(self, file_name):
# Consts for conversions
mc2 = 938.272088 # MeV
wlen = 2.99792e8/352.21e6*1e3 # mm
# Consts to convert phs to z.
c = 2.99792458
freq = 352.21
# Extract indices.
# Extract indices
with open(file_name) as file:
i_header = 0
for lin in file.readlines():
lin = lin.split()
if "##" in lin[0]:
idx_s = lin.index("z(m)")
idx_Nelem = lin.index("##")
idx_s = lin.index("z(m)")
idx_gamma = lin.index("gama-1")
idx_x = lin.index("x0")
idx_y = lin.index("y0")
idx_phs = lin.index("p0")
idx_sigx = lin.index("SizeX")
idx_sigy = lin.index("SizeY")
idx_sigz = lin.index("SizeZ")
idx_sigp = lin.index("SizeP")
idx_alfx = lin.index("sxx'")
idx_alfy = lin.index("syy'")
idx_alfz = lin.index("szdp")
idx_epsx = lin.index("ex")
idx_epsy = lin.index("ey")
idx_epsz = lin.index("ezdp")
idx_epsp = lin.index("ep")
idx_halx = lin.index("hx")
idx_haly = lin.index("hy")
idx_halp = lin.index("hp")
idx_x = lin.index("x0")
idx_y = lin.index("y0")
idx_phs = lin.index("p0")
idx_sigx = lin.index("SizeX")
idx_sigy = lin.index("SizeY")
idx_sigz = lin.index("SizeZ")
idx_sigp = lin.index("SizeP")
idx_alfx = lin.index("sxx'")
idx_alfy = lin.index("syy'")
idx_alfz = lin.index("szdp") # Note unit is [um]
idx_epsx = lin.index("ex")
idx_epsy = lin.index("ey")
idx_epsz = lin.index("ezdp")
idx_epsp = lin.index("ep")
idx_e99x = lin.index("ex99")
idx_e99y = lin.index("ey99")
idx_e99z = lin.index("ep99") # Note 'ep99' is actually for z-z'
idx_halx = lin.index("hx")
idx_haly = lin.index("hy")
idx_halp = lin.index("hp")
idx_Nptcl = lin.index("npart")
idx_loss = lin.index("Powlost")
idx_loss = lin.index("Powlost")
break
# Extract data.
with open(file_name) as file:
data = []
flag = 0
for lin in file.readlines():
lin = lin.split()
if flag == 1:
data.append(map(float, lin))
if "##" in lin[0]:
flag = 1
data = numpy.array(data).transpose()
i_header += 1
# Extract data
data = numpy.loadtxt(file_name, skiprows=i_header+1).transpose()
# Instances
self.s = data[idx_s]
self.x = data[idx_x]
self.y = data[idx_y]
self.phs = data[idx_phs]
self.sigx = data[idx_sigx]
self.sigy = data[idx_sigy]
self.sigz = data[idx_sigz]
self.sigp = data[idx_sigp]
self.epsx = data[idx_epsx]
self.epsy = data[idx_epsy]
self.epsz = data[idx_epsz]
self.epsp = data[idx_epsp]
self.halx = data[idx_halx]
self.haly = data[idx_haly]
self.halz = data[idx_halp]
self.halp = data[idx_halp]
self.Nelem = data[idx_Nelem].astype(numpy.int)
self.s = data[idx_s]
self.x = data[idx_x]
self.y = data[idx_y]
self.phs = data[idx_phs]
self.sigx = data[idx_sigx]
self.sigy = data[idx_sigy]
self.sigz = data[idx_sigz]
self.sigp = data[idx_sigp]
self.epsx = data[idx_epsx]
self.epsy = data[idx_epsy]
self.epsz = data[idx_epsz]
self.epsp = data[idx_epsp]
self.e99x = data[idx_e99x]
self.e99y = data[idx_e99y]
self.e99z = data[idx_e99z]
self.halx = data[idx_halx]
self.haly = data[idx_haly]
self.halz = data[idx_halp]
self.halp = data[idx_halp]
self.Nptcl = data[idx_Nptcl]
self.loss = data[idx_loss]
self.loss = data[idx_loss]
# Way around for 0 emitt
for i in range(len(self.s)):
if self.epsx[i] == 0.0:
self.epsx[i] = numpy.inf
if self.epsy[i] == 0.0:
self.epsy[i] = numpy.inf
if self.epsz[i] == 0.0:
self.epsz[i] = numpy.inf
if self.epsp[i] == 0.0:
self.epsp[i] = numpy.inf
for i in numpy.arange(len(self.s)):
if self.epsx[i] == 0.0: self.epsx[i] = numpy.inf
if self.epsy[i] == 0.0: self.epsy[i] = numpy.inf
if self.epsz[i] == 0.0: self.epsz[i] = numpy.inf
if self.epsp[i] == 0.0: self.epsp[i] = numpy.inf
if self.e99x[i] == 0.0: self.e99x[i] = numpy.inf
if self.e99y[i] == 0.0: self.e99y[i] = numpy.inf
if self.e99z[i] == 0.0: self.e99z[i] = numpy.inf
# Additional instances
self.gamma = data[idx_gamma] + 1.0
self.beta = numpy.sqrt(1.0 - 1.0 / self.gamma ** 2)
self.z = -self.phs * self.beta * (c / freq * 1e5) / 360.0
self.betx = self.sigx ** 2 / self.epsx * self.beta * self.gamma
self.bety = self.sigy ** 2 / self.epsy * self.beta * self.gamma
self.betz = self.sigz ** 2 / self.epsz * self.beta * self.gamma ** 3
self.betp = self.sigp ** 2 / self.epsp
self.alfx = -data[idx_alfx] / self.epsx * self.beta * self.gamma
self.alfy = -data[idx_alfy] / self.epsy * self.beta * self.gamma
self.alfz = -data[idx_alfz] / self.epsz * self.beta * self.gamma ** 3
self.alfp = -self.alfz
self.beta = numpy.sqrt(1.0 - 1.0 / self.gamma ** 2)
self.z = -self.phs * self.beta * wlen / 360.0
self.betx = self.sigx ** 2 / self.epsx * self.beta * self.gamma
self.bety = self.sigy ** 2 / self.epsy * self.beta * self.gamma
self.betz = self.sigz ** 2 / self.epsz * self.beta * self.gamma ** 3
self.betp = self.sigp ** 2 / self.epsp
self.alfx = -data[idx_alfx] / self.epsx * self.beta * self.gamma
self.alfy = -data[idx_alfy] / self.epsy * self.beta * self.gamma
self.alfz = -data[idx_alfz] / self.epsz * self.beta * self.gamma
self.alfp = -self.alfz
self.e99p = self.e99z * 1e-3 * 360.0 * mc2 / wlen
print(data[idx_alfz][ 0])
print(data[idx_alfz][-1])
# Set inf emitt back to 0
for i in range(len(self.s)):
if self.epsx[i] == numpy.inf:
self.epsx[i] = 0.0
if self.epsy[i] == numpy.inf:
self.epsy[i] = 0.0
if self.epsz[i] == numpy.inf:
self.epsz[i] = 0.0
if self.epsp[i] == numpy.inf:
self.epsp[i] = 0.0
for i in numpy.arange(len(self.s)):
if self.epsx[i] == numpy.inf: self.epsx[i] = 0.0
if self.epsy[i] == numpy.inf: self.epsy[i] = 0.0
if self.epsz[i] == numpy.inf: self.epsz[i] = 0.0
if self.epsp[i] == numpy.inf: self.epsp[i] = 0.0
if self.e99x[i] == numpy.inf: self.e99x[i] = 0.0
if self.e99y[i] == numpy.inf: self.e99y[i] = 0.0
if self.e99z[i] == numpy.inf: self.e99z[i] = 0.0
if self.e99p[i] == numpy.inf: self.e99p[i] = 0.0
# Convert to list (not necessary?)
self.s = self.s.tolist()
self.Nelem = self.Nelem.tolist()
self.s = self.s.tolist()
self.gamma = self.gamma.tolist()
self.beta = self.beta.tolist()
self.x = self.x.tolist()
self.y = self.y.tolist()
self.z = self.z.tolist()
self.phs = self.phs.tolist()
self.sigx = self.sigx.tolist()
self.sigy = self.sigy.tolist()
self.sigz = self.sigz.tolist()
self.sigp = self.sigp.tolist()
self.betx = self.betx.tolist()
self.bety = self.bety.tolist()
self.betz = self.betz.tolist()
self.betp = self.betp.tolist()
self.alfx = self.alfx.tolist()
self.alfy = self.alfy.tolist()
self.alfz = self.alfz.tolist()
self.alfp = self.alfp.tolist()
self.epsx = self.epsx.tolist()
self.epsy = self.epsy.tolist()
self.epsz = self.epsz.tolist()
self.epsp = self.epsp.tolist()
self.halx = self.halx.tolist()
self.haly = self.haly.tolist()
self.halz = self.halz.tolist()
self.halp = self.halp.tolist()
self.beta = self.beta.tolist()
self.x = self.x.tolist()
self.y = self.y.tolist()
self.z = self.z.tolist()
self.phs = self.phs.tolist()
self.sigx = self.sigx.tolist()
self.sigy = self.sigy.tolist()
self.sigz = self.sigz.tolist()
self.sigp = self.sigp.tolist()
self.betx = self.betx.tolist()
self.bety = self.bety.tolist()
self.betz = self.betz.tolist()
self.betp = self.betp.tolist()
self.alfx = self.alfx.tolist()
self.alfy = self.alfy.tolist()
self.alfz = self.alfz.tolist()
self.alfp = self.alfp.tolist()
self.epsx = self.epsx.tolist()
self.epsy = self.epsy.tolist()
self.epsz = self.epsz.tolist()
self.epsp = self.epsp.tolist()
self.e99x = self.e99x.tolist()
self.e99y = self.e99y.tolist()
self.e99z = self.e99z.tolist()
self.e99p = self.e99p.tolist()
self.halx = self.halx.tolist()
self.haly = self.haly.tolist()
self.halz = self.halz.tolist()
self.halp = self.halp.tolist()
self.Nptcl = self.Nptcl.tolist()
self.loss = self.loss.tolist()
self.loss = self.loss.tolist()
def loss_den(self, file_name_dt="", dlt_dt=5e-6):
return loss_elem2den(self.s, self.loss, file_name_dt, dlt_dt)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment