Skip to content

Commit 0efa8b2

Browse files
committed
Merge branch 'develop'
2 parents 8684a41 + c39e6d1 commit 0efa8b2

65 files changed

Lines changed: 1405 additions & 2036 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
*.swp
2+
13
# specific of PyParaSlice
24
pyparislog.txt
35
test_pickle.pkl

communication_helpers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def list_of_strings_2_buffer(strlist):
3737

3838
def buffer_2_list_of_strings(buf):
3939
str_received = ''.join(map(unichr, list(buf)))
40-
strlist = map(str, str_received.split('\n')[0].split(';'))[:-1]
40+
strlist = list(map(str, str_received.split('\n')[0].split(';')))[:-1]
4141
return strlist
4242

4343

gen_multibunch_beam.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ def gen_matched_multibunch_beam(machine, n_macroparticles_per_bunch, filling_pat
2121
list_genbunches = []
2222
for i_slot, inten_slot in enumerate(filling_pattern):
2323
if inten_slot>0:
24+
print('Generating bunch at slot %d/%d'%(i_slot, len(filling_pattern)))
2425
bunch = generate_bunch(n_macroparticles_per_bunch, inten_slot*bunch_intensity, epsn_x, epsn_y, sigma_z=sigma_z)
2526
bunch.z -= b_spac_buckets*bucket_length_m*i_slot
2627
list_genbunches.append(bunch)
@@ -51,9 +52,6 @@ def gen_matched_multibunch_beam(machine, n_macroparticles_per_bunch, filling_pat
5152
bb.slice_info['interact_with_EC'] = slice4EC
5253
bb.slice_info['N_bunches_tot_beam'] = len(list_bunches)
5354
bb.slice_info['i_bunch'] = i_bb
54-
bb.slice_info['i_turn'] = 0
55-
56-
57-
55+
bb.slice_info['i_turn'] = 0
5856

5957
return list_bunches

generate_python3

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
mkdir ../python3
2+
rm -rf ../python3/PyPARIS
3+
cp -r ../PyPARIS ../python3/PyPARIS
4+
rm ../python3/PyPARIS/*.so
5+
2to3 --output-dir=../python3/PyPARIS -W -n ../PyPARIS
6+
rm -rf ../python3/PyPARIS/.git

multiprocexec.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import multiprocessing as mp
44
import numpy as np
55
import os, sys
6+
import importlib
7+
68

79
class mpComm(object):
810
def __init__(self, pid, N_proc, queue_list,
@@ -68,22 +70,21 @@ def todo(sim_module_string, pid, N_proc, queue_list,
6870
sys.path.append(BIN)
6971

7072
sim_module_strings = sim_module_string.split('.')
71-
if len(sim_module_strings)!=2:
72-
raise(ValueError('\n\nsim_class must be given in the form: module.class.\nNested referencing not implemented.\n\n'))
73-
module_name = sim_module_strings[0]
74-
class_name = sim_module_strings[1]
73+
# if len(sim_module_strings)!=2:
74+
# raise(ValueError('\n\nsim_class must be given in the form: module.class.\nNested referencing not implemented.\n\n'))
75+
module_name = '.'.join(sim_module_strings[:-1])
76+
class_name = sim_module_strings[-1]
7577

76-
77-
SimModule = __import__(module_name)
78+
SimModule = importlib.import_module(module_name)
7879
SimClass = getattr(SimModule, class_name)
7980

8081
if multiturn:
81-
from ring_of_CPUs_multiturn import RingOfCPUs_multiturn
82+
from PyPARIS.ring_of_CPUs_multiturn import RingOfCPUs_multiturn
8283
simulation_content = SimClass()
8384
myCPUring = RingOfCPUs_multiturn(simulation_content, comm=comm)
8485
myCPUring.run()
8586
else:
86-
from ring_of_CPUs import RingOfCPUs
87+
from PyPARIS.ring_of_CPUs import RingOfCPUs
8788
simulation_content = SimClass()
8889
myCPUring = RingOfCPUs(simulation_content, comm=comm)
8990
myCPUring.run()

myfilemanager.py

Lines changed: 83 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -2,70 +2,91 @@
22

33

44
class obj_from_dict:
5-
def __init__(self, dictto):
6-
for kk in dictto.keys():
7-
exec 'self.'+kk +'= dictto[kk]'
8-
9-
5+
def __init__(self, dictto):
6+
for kk in dictto.keys():
7+
setattr(self, kk, dictto[kk])
8+
9+
1010
def obj_to_dict(obj):
11-
dict_out={}
12-
members = dir(obj)
13-
for member in members:
14-
exec "dict_out['%s'] = obj.%s"%(member,member)
15-
return dict_out
16-
11+
dict_out={}
12+
members = dir(obj)
13+
for member in members:
14+
dict_out[member] = getattr(obj, member)
15+
return dict_out
16+
17+
1718
def myloadmat(filename, squeeze = True):
18-
import scipy.io as sio
19-
dict_var=sio.loadmat(filename)
20-
if squeeze:
21-
for kk in dict_var.keys():
22-
try:
23-
dict_var[kk]=np.squeeze(dict_var[kk])
24-
except:
25-
pass
26-
return dict_var
27-
28-
29-
19+
import scipy.io as sio
20+
dict_var=sio.loadmat(filename)
21+
if squeeze:
22+
for kk in dict_var.keys():
23+
try:
24+
dict_var[kk]=np.squeeze(dict_var[kk])
25+
except:
26+
pass
27+
return dict_var
28+
29+
3030
def myloadmat_to_obj(filename, squeeze = True):
31-
return obj_from_dict(myloadmat(filename, squeeze=squeeze))
32-
33-
34-
31+
return obj_from_dict(myloadmat(filename, squeeze=squeeze))
32+
33+
3534
def dict_of_arrays_and_scalar_from_h5(filename):
36-
import h5py
37-
with h5py.File(filename) as fid:
38-
f_dict = {}
39-
for kk in fid.keys():
40-
f_dict[kk] = np.array(fid[kk]).copy()
41-
if f_dict[kk].shape == ():
42-
f_dict[kk] = f_dict[kk].tolist()
43-
return f_dict
44-
35+
import h5py
36+
with h5py.File(filename, 'r') as fid:
37+
f_dict = {}
38+
for kk in fid.keys():
39+
f_dict[kk] = np.array(fid[kk]).copy()
40+
if f_dict[kk].shape == ():
41+
f_dict[kk] = f_dict[kk].tolist()
42+
return f_dict
43+
4544
def object_with_arrays_and_scalar_from_h5(filename):
46-
return obj_from_dict(dict_of_arrays_and_scalar_from_h5(filename))
47-
48-
def bunchh5_to_dict(filename):
49-
import h5py
50-
with h5py.File(filename, 'r') as bunch_ev:
51-
bunch = bunch_ev['Bunch']
52-
bunch_dict = {}
53-
for kk in bunch.keys():
54-
bunch_dict[kk] = np.array(bunch[kk]).copy()
55-
56-
return bunch_dict
57-
58-
def bunchh5_to_obj(filename):
59-
return obj_from_dict(bunchh5_to_dict(filename))
60-
61-
def bunchh5list_to_dict(filename_list):
62-
bunch_dict = bunchh5_to_dict(filename_list[0])
63-
for i_file in xrange(1,len(filename_list)):
64-
bunch_dict_curr = bunchh5_to_dict(filename_list[i_file])
65-
for kk in bunch_dict.keys():
66-
bunch_dict[kk] = np.array(list(bunch_dict[kk])+list(bunch_dict_curr[kk]))
67-
68-
return bunch_dict
69-
70-
def bunchh5list_to_obj(filename_list):
71-
return obj_from_dict(bunchh5list_to_dict(filename_list))
45+
return obj_from_dict(dict_of_arrays_and_scalar_from_h5(filename))
46+
47+
48+
def monitorh5_to_dict(filename, key= 'Bunch'):
49+
import h5py
50+
with h5py.File(filename, 'r') as monitor_ev:
51+
monitor = monitor_ev[key]
52+
monitor_dict = {}
53+
for kk in monitor.keys():
54+
monitor_dict[kk] = np.array(monitor[kk]).copy()
55+
56+
return monitor_dict
57+
58+
59+
def monitorh5_to_obj(filename, key= 'Bunch'):
60+
return obj_from_dict(monitorh5_to_dict(filename, key))
61+
62+
def monitorh5list_to_dict(filename_list, key='Bunch', permissive=False):
63+
monitor_dict = monitorh5_to_dict(filename_list[0], key=key)
64+
for i_file in xrange(1,len(filename_list)):
65+
print('Loading '+filename_list[i_file])
66+
try:
67+
monitor_dict_curr = monitorh5_to_dict(filename_list[i_file])
68+
for kk in monitor_dict.keys():
69+
monitor_dict[kk] = np.array(list(monitor_dict[kk])+list(monitor_dict_curr[kk]))
70+
except IOError as err:
71+
print('Got:')
72+
print(err)
73+
if not permissive:
74+
raise err
75+
76+
return monitor_dict
77+
78+
def monitorh5list_to_obj(filename_list, key= 'Bunch', permissive=False):
79+
return obj_from_dict(monitorh5list_to_dict(filename_list, key, permissive))
80+
81+
82+
def dict_to_h5(dict_save, filename):
83+
import h5py
84+
with h5py.File(filename, 'w') as fid:
85+
for kk in dict_save.keys():
86+
fid[kk] = dict_save[kk]
87+
88+
89+
90+
91+
92+

serialexec.py

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,11 @@
22

33
import numpy as np
44
import os, sys
5+
import importlib
56

67
BIN = os.path.expanduser("./")
78
sys.path.append(BIN)
89

9-
import sys
10-
1110
if len(sys.argv)!=2:
1211
raise ValueError('\n\nSyntax must be:\n\t serialexec.py sim_class=module.class\n\n')
1312
if 'sim_class' not in sys.argv[1]:
@@ -16,16 +15,16 @@
1615
sim_module_string = sys.argv[1].split('=')[-1]
1716

1817
sim_module_strings = sim_module_string.split('.')
19-
if len(sim_module_strings)!=2:
20-
raise(ValueError('\n\nsim_class must be given in the form: module.class.\nNested referencing not implemented.\n\n'))
21-
module_name = sim_module_strings[0]
22-
class_name = sim_module_strings[1]
23-
2418

25-
SimModule = __import__(module_name)
26-
SimClass = getattr(SimModule, class_name)
19+
# if len(sim_module_strings)!=2:
20+
# raise(ValueError('\n\nsim_class must be given in the form: module.class.\nNested referencing not implemented.\n\n'))
21+
module_name = '.'.join(sim_module_strings[:-1])
22+
class_name = sim_module_strings[-1]
23+
24+
SimModule = importlib.import_module(module_name)
25+
SimClass = getattr(SimModule, class_name)
2726

28-
from ring_of_CPUs import RingOfCPUs
27+
from PyPARIS.ring_of_CPUs import RingOfCPUs
2928
simulation_content = SimClass()
3029
myCPUring = RingOfCPUs(simulation_content, force_serial=True)
3130
myCPUring.run()

test_instability/000_instability_simulation/002_fully_serial_sim.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,8 @@
8080

8181
# setup transverse losses (to "protect" the ecloud)
8282
import PyHEADTAIL.aperture.aperture as aperture
83-
apt_xy = aperture.EllipticalApertureXY(x_aper=ecloud.impact_man.chamb.x_aper, y_aper=ecloud.impact_man.chamb.y_aper)
83+
apt_xy = aperture.EllipticalApertureXY(x_aper=ecloud.cloudsim.cloud_list[0].impact_man.chamb.x_aper,
84+
y_aper=ecloud.cloudsim.cloud_list[0].impact_man.chamb.y_aper)
8485
machine.one_turn_map.append(apt_xy)
8586

8687
# generate a bunch

test_instability/000_instability_simulation/003_plot_results.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
1+
import sys
2+
sys.path.append('../../../')
3+
14
import numpy as np
2-
#~ import bunchh5_to_obj as bh5o
3-
import myfilemanager as mfm
45
import mystyle as ms
56
import pylab as pl
67
from scipy.constants import c as ccc
78

9+
import PyPARIS.myfilemanager as mfm
810

911
pl.close('all')
10-
ob = mfm.bunchh5_to_obj('bunch_evolution.h5')
12+
ob = mfm.monitorh5_to_obj('bunch_evolution.h5')
1113

1214
pl.figure(1)
1315
pl.subplot(2,3,1)

test_instability/000_instability_simulation/004_run_with_python_multiprocess_nolounchscript.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import sys, os
22
BIN = os.path.expanduser("../../../")
33
sys.path.append(BIN)
4-
BIN = os.path.expanduser("../../")
5-
sys.path.append(BIN)
64

75
import multiprocessing as mp
86
import numpy as np
@@ -67,7 +65,7 @@ def todo(pid, N_proc, queue_list,
6765
comm = mpComm(pid, N_proc, queue_list,
6866
mutex, barriex, turnstile, turnstile2, cnt)
6967

70-
from ring_of_CPUs import RingOfCPUs
68+
from PyPARIS.ring_of_CPUs import RingOfCPUs
7169
from Simulation_with_eclouds import Simulation
7270
simulation_content = Simulation()
7371

0 commit comments

Comments
 (0)