km2sdds
Posted: 24 May 2022, 08:11
Dear all,
I am trying to use the function km2dds to compute the kick map from an undulator for the element UKICKMAP.
If I want to build the kick map by myself it is clear that I have to generate a file which has (x,y,kickX,kickY) columns, because kickX and kickY will be two scalars for each couple (x,y), and I will finish with a grid.
I would like to use the km2sdds, if possible. In this case it is not clear to me how to pass the inputs. I have a Radia model of an undulator, so I can have the 3D field map. At the moment it is in the format (the .log file is):
per = 36.
Br = 1.35
fa = 10
rass1 = 0
gap/slit = 4
k8 = 1
ka = kb = 0.5
kae2 = 0.63*ka= 0.41
Nkeeperlong= 18
y-pos = {-4, -2, -1, -0.5, -0.3, -0.1, 0, 0.1, 0.3, 0.5, 1, 2, 4}
z-pos = {-2, -1, -0.5, -0.3, -0.1, 0, 0.1, 0.3, 0.5, 1, 2}
File structure:
Coordinate system: Bx longitudinal, By horizontal, Bz vertical
pos Bx[y1,z1] By[y1,z1] Bz[y1,z1] Bx[y2,z1], By[y2,z1] ...
I can provide (s,x,y,Bx,By), but Bx and By in this case will be two arrays, so should I do something like:
s1 x1 y1 Bx(x1,y1,s1) By(x1,y1,s1)
s2 x1 y1 Bx(x1,y1,s2) By(x1,y1,s2)
...
sN x1 y1 Bx(x1,y1,sN) By(x1,y1,sN)
s1 x2 y1 Bx(x2,y1,s1) By(x2,y1,s1)
s2 x2 y1 Bx(x2,y1,s2) By(x2,y1,s2)
...
sN x2 y1 Bx(x2,y1,sN) By(x2,y1,sN)
?
Is there a way to say for each (x,y) take a couple of arrays, which will be Bx and By for example? Is there any example which I did not find to use km2dds?
I tried to give x,y,z,Bx,By as:
SDDS1ASTRA2ELEGANT2003
&column name=x, units=m, type=double, &end
&column name=y, units=m, type=double, &end
&column name=z, units=m, type=double, &end
&column name=By, units=T, type=double, &end
&column name=Bx, units=T, type=double, &end
&data mode=ascii, &end
! page number 1
1.00000e+00 2.00000e+00 3.00000e+00 4.00000e+00 5.00000e+00
6.00000e+00 7.00000e+00 8.00000e+00 9.00000e+00 5.00000e+00
2.00000e+00 3.00000e+00 4.00000e+00 8.00000e+00 7.00000e+00
...
but I get an error message when I try to run km2sdds:
can't read "value": no such variable
while executing
"set [lindex $itemList $index] $value"
("while" body line 9)
invoked from within
"while {![eof $fdi]} {
gets $fdi data
if [string match "\#*" $data] continue
if [string compare START $data]==0 {
set found 1
..."
(file "/opt/psi/MPI/elegant/2021.4.0-2_slurm/openmpi/4.0.5-1_slurm/gcc/10.3.0/oag/apps/bin/linux-x86_64/km2sdds" line 31)
Sorry for the maybe trivial question, but I did not find how to pass the data.
Best regards,
Simona.
I am trying to use the function km2dds to compute the kick map from an undulator for the element UKICKMAP.
If I want to build the kick map by myself it is clear that I have to generate a file which has (x,y,kickX,kickY) columns, because kickX and kickY will be two scalars for each couple (x,y), and I will finish with a grid.
I would like to use the km2sdds, if possible. In this case it is not clear to me how to pass the inputs. I have a Radia model of an undulator, so I can have the 3D field map. At the moment it is in the format (the .log file is):
per = 36.
Br = 1.35
fa = 10
rass1 = 0
gap/slit = 4
k8 = 1
ka = kb = 0.5
kae2 = 0.63*ka= 0.41
Nkeeperlong= 18
y-pos = {-4, -2, -1, -0.5, -0.3, -0.1, 0, 0.1, 0.3, 0.5, 1, 2, 4}
z-pos = {-2, -1, -0.5, -0.3, -0.1, 0, 0.1, 0.3, 0.5, 1, 2}
File structure:
Coordinate system: Bx longitudinal, By horizontal, Bz vertical
pos Bx[y1,z1] By[y1,z1] Bz[y1,z1] Bx[y2,z1], By[y2,z1] ...
I can provide (s,x,y,Bx,By), but Bx and By in this case will be two arrays, so should I do something like:
s1 x1 y1 Bx(x1,y1,s1) By(x1,y1,s1)
s2 x1 y1 Bx(x1,y1,s2) By(x1,y1,s2)
...
sN x1 y1 Bx(x1,y1,sN) By(x1,y1,sN)
s1 x2 y1 Bx(x2,y1,s1) By(x2,y1,s1)
s2 x2 y1 Bx(x2,y1,s2) By(x2,y1,s2)
...
sN x2 y1 Bx(x2,y1,sN) By(x2,y1,sN)
?
Is there a way to say for each (x,y) take a couple of arrays, which will be Bx and By for example? Is there any example which I did not find to use km2dds?
I tried to give x,y,z,Bx,By as:
SDDS1ASTRA2ELEGANT2003
&column name=x, units=m, type=double, &end
&column name=y, units=m, type=double, &end
&column name=z, units=m, type=double, &end
&column name=By, units=T, type=double, &end
&column name=Bx, units=T, type=double, &end
&data mode=ascii, &end
! page number 1
1.00000e+00 2.00000e+00 3.00000e+00 4.00000e+00 5.00000e+00
6.00000e+00 7.00000e+00 8.00000e+00 9.00000e+00 5.00000e+00
2.00000e+00 3.00000e+00 4.00000e+00 8.00000e+00 7.00000e+00
...
but I get an error message when I try to run km2sdds:
can't read "value": no such variable
while executing
"set [lindex $itemList $index] $value"
("while" body line 9)
invoked from within
"while {![eof $fdi]} {
gets $fdi data
if [string match "\#*" $data] continue
if [string compare START $data]==0 {
set found 1
..."
(file "/opt/psi/MPI/elegant/2021.4.0-2_slurm/openmpi/4.0.5-1_slurm/gcc/10.3.0/oag/apps/bin/linux-x86_64/km2sdds" line 31)
Sorry for the maybe trivial question, but I did not find how to pass the data.
Best regards,
Simona.