import numpy as np
import pandas as pd
import holoviews as hv
import os
from IPython.display import Image
hv.extension('matplotlib')
pwd
!ls -all -h
dat = '80-8.dat2'
!head -4 $dat
def read_dat(dat):
df = pd.read_csv(dat, names=['x', 'y', 'z', 'vx', 'vy', 'vz'], delim_whitespace=True, skiprows=1)
df['x'] = df['x']*10.0 # mm
df['y'] = df['y']*10.0 # mm
df['z'] = df['z']*10.0 # mm
df['p'] = 0.511/np.sqrt(1-(df['vx']*df['vx'] + df['vy']*df['vy'] + df['vz']*df['vz'])) # MeV/c
df['xp']= 1e3*df['vx']/df['vz'] # mrad
df['yp']= 1e3*df['vy']/df['vz'] # mrad
return df
df = read_dat(dat)
df.head(3)
df.tail(3)
%opts Scatter (alpha=0.01 s=2) [aspect=1 show_grid=True]
dim_x = hv.Dimension('x', unit='mm', label='$x$', range=(-12,+12))
dim_xp = hv.Dimension('xp', unit='mrad', label="$x'$", range=(-12,+12))
dim_y = hv.Dimension('y', unit='mm', label='$y$', range=(-12,+12))
dim_yp = hv.Dimension('yp', unit='mrad', label="$y'$", range=(-12,+12))
dim_z = hv.Dimension('z', unit='mm', label='$z$', range=(-12,+12))
dim_p = hv.Dimension('p', unit='MeV/c', label='$p$', range=(0,None)) # label='100%*$\Delta p/p$', range=(-1.5,+1.5))
%output backend='matplotlib' fig='png' size=100 dpi=100
hv.Scatter(df, kdims=[dim_z,dim_p]) + hv.Scatter(df, kdims=[dim_xp,dim_p]) + hv.Scatter(df, kdims=[dim_x,dim_p])
(hv.Scatter(df, kdims=[dim_x,dim_y]) + \
hv.Scatter(df, kdims=[dim_yp,dim_y]) + \
hv.Scatter(df, kdims=[dim_x,dim_xp]) + \
hv.Scatter(df, kdims=[dim_yp,dim_xp])).cols(2)
df.tail(3)
df['x_m'] = df['x']*1e-3
df['y_m'] = df['y']*1e-3
df['xp_rad'] = df['xp']*1e-3
df['yp_rad'] = df['yp']*1e-3
df['p_mc'] = df['p']/0.511
df['t_sec'] = -df['z']*1e-3/3e8
df.tail(3)
df = df[df.p_mc > 160/0.511]
tmp = "results/isdlksd.txt"
df[['x_m', 'xp_rad', 'y_m', 'yp_rad', 't_sec', 'p_mc']].to_csv(tmp, sep=' ', index=False, float_format='%.6e')
!head -4 $tmp
sdds = 'results/beam.sdds'
os.path.exists(sdds) and os.remove(sdds)
!plaindata2sdds $tmp $sdds -inputMode=ascii -outputMode=binary \
-noRowCount -skiplines=1 \
-column=x,double,units=m \
-column=xp,double,symbol=x' \
-column=y,double,units=m \
-column=yp,double,symbol=y' \
-column=t,double,units=s \
-column=p,double,units=m$$be$$nc
os.path.exists(tmp) and os.remove(tmp)
png = 'results/image.png'
w = sdds
!sddsplot -lay=2,2 -device=lpng -output=$png \
-col=x,y -graph=dot,type=2 $w -endPanel \
-col=yp,y -graph=dot,type=2 $w -endPanel \
-col=x,xp -graph=dot,type=2 $w -endPanel \
-col=yp,xp -graph=dot,type=2 $w
Image(png)
!sddsplot -device=lpng -output=$png -lay=2,2 "-title=" \
-col=t,p -factor=yMult=0.511,xMult=-3e11 \
"-xlabel=z (mm)" "-ylabel=p (MeV/c)" -graph=dot,type=2 $w -endPanel \
-col=xp,p -factor=yMult=0.511,xMult=1e3 \
"-xlabel=xp (mrad)" "-ylabel=p (MeV/c)" -graph=dot,type=2 $w -endPanel \
-col=t,x -factor=xMult=-3e11,yMult=1e3 \
"-xlabel=z (mm)" "-ylabel=x (mm)" -graph=dot,type=2 $w -endPanel \
-col=xp,x -factor=yMult=1e3,xMult=1e3 \
"-xlabel=xp (mrad)" "-ylabel=x (mm)" -graph=dot,type=2 $w -endPanel
Image(png)
Run sddsanalyzebeam to check the beam parameters:
beam_analyzed = 'results/beam_analyzed.sdds'
!sddsprocess $sdds -pipe=out -filter=col,p,330,1000 | sddsanalyzebeam -pipe=in $beam_analyzed
!sddsquery $beam_analyzed
items = np.array([
# name in file symbol factor units
['enx', '\\epsilon_{nx}', 1.0e6, 'mm \\cdot mrad'],
['betax', '\\beta_x', 1.0, 'm' ],
['alphax', '\\alpha_x', 1.0, '' ],
['Sx', '\\sigma_x', 1.0e3, 'mm' ],
['Sxp', "\\sigma_{x'}", 1.0e3, 'mrad' ],
['eny', '\\epsilon_{ny}', 1.0e6, 'mm \\cdot mrad'],
['betay', '\\beta_y', 1.0, 'm' ],
['alphay', '\\alpha_y', 1.0, '' ],
# ['Sy', '\\sigma_y', 1.0e3, 'mm' ],
# ['Syp', "\\sigma_{y'}", 1.0e3, 'mrad' ],
['St', '\\sigma_t', 1e12, 'ps' ],
['St', '\\sigma_z', 3e11, 'mm' ],
['Sdelta', '\\sigma_{\\Delta p/p}', 100.0, '\\%' ],
['pAverage', 'p_{average}', 0.511, 'MeV/c' ],
# ['Charge', 'Q', 1.0e12, 'pC' ],
])
names = items[:,0]
cols_str = "-col=" + ",".join(names)
cols_str
out = !sdds2stream $beam_analyzed $cols_str -pipe=out
values = out[0].split()
values = np.array(values)
values = values.astype(np.float)
values = dict(zip(names, values))
latex_str = r"\begin{aligned}"
for name,symbol,factor,units in items:
value = values[name]*factor.astype(float)
latex_str = latex_str + r"%s &= %.3f~\rm{%s} \\" % (symbol, value, units)
latex_str = latex_str + r"\end{aligned}"
from IPython.display import Latex
Latex(latex_str)