In [1]:
import numpy as np
import pandas as pd
import holoviews as hv

hv.extension('matplotlib')
In [2]:
ls -all -h
total 112M
drwx------. 2 apetrenk 2766 4.0K Mar 20 15:21 ./
drwx------. 2 apetrenk 2766 4.0K Mar 20 11:19 ../
-rw-r--r--. 1 apetrenk 2766 8.0M Mar 20 11:38 80-6.dat2
-rw-r--r--. 1 apetrenk 2766 9.5M Mar 20 11:39 80-7.dat2
-rw-r--r--. 1 apetrenk 2766  11M Mar 20 11:40 80-8.dat2
-rw-r--r--. 1 apetrenk 2766 3.7M Mar 20 11:29 Pavel Martyshkin. ct-factory.pdf
-rw-r--r--. 1 apetrenk 2766 5.0M Mar 20 11:30 Pavel Martyshkin. ct-factory.pptx
-rw-r--r--. 1 apetrenk 2766 3.9K Mar 20 15:21 plot.ipynb
In [3]:
!head -4 80-6.dat2
   x(cm)         y(cm)         z(cm)          betx           bety           betz       
   0.127962      0.570673    -97.581345    0.134200466   -0.168576796    0.965747950   
  -0.221021      0.548308     -2.751683    0.009699655    0.020693257    0.999625622   
  -0.095675     -0.216324     -0.523429   -0.000549659   -0.000704930    0.999995851   
In [4]:
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
In [5]:
dat = '80-6.dat2'
df = read_dat(dat)
In [6]:
df.head(3)
Out[6]:
x y z vx vy vz p xp yp
0 1.27962 5.70673 -975.81345 0.13420 -0.168577 0.965748 3.534408 138.960136 -174.555686
1 -2.21021 5.48308 -27.51683 0.00970 0.020693 0.999626 33.967052 9.703288 20.701007
2 -0.95675 -2.16324 -5.23429 -0.00055 -0.000705 0.999996 186.604111 -0.549661 -0.704933
In [7]:
df.tail(3)
Out[7]:
x y z vx vy vz p xp yp
94939 3.15176 -2.73882 -24.48088 -0.007705 -0.002499 0.999915 49.820361 -7.706017 -2.498845
94940 4.37440 1.26770 -7.09838 -0.002016 -0.001581 0.999993 182.010718 -2.015661 -1.581438
94941 2.44921 -1.31254 -2.16303 -0.001303 -0.000246 0.999996 193.433433 -1.303359 -0.245937
In [8]:
%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
In [9]:
hv.Scatter(df, kdims=[dim_z,dim_p]) + hv.Scatter(df, kdims=[dim_xp,dim_p]) + hv.Scatter(df, kdims=[dim_x,dim_p])
Out[9]:
In [10]:
(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)
Out[10]:
In [11]:
dat = '80-8.dat2'
df = read_dat(dat)
In [12]:
df.head(3)
Out[12]:
x y z vx vy vz p xp yp
0 -3.06712 -1.29667 -1180.38297 -0.201572 0.121096 0.959625 3.310655 -210.052653 126.191004
1 -1.83744 1.87483 -766.13413 -0.054458 0.193268 0.975308 5.557221 -55.836887 198.161210
2 -1.80331 -1.34400 -5.03864 -0.000021 0.000404 0.999996 187.064197 -0.021356 0.404279
In [13]:
hv.Scatter(df, kdims=[dim_z,dim_p]) + hv.Scatter(df, kdims=[dim_xp,dim_p]) + hv.Scatter(df, kdims=[dim_x,dim_p])
Out[13]:
In [14]:
(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)
Out[14]:
In [ ]: