Skip to content

Commit 8da88c6

Browse files
committed
ENH: add cmdline arg to allow limiting number of particles
this should allow better performance of the server, and prevent failure of some image.get calls to the server that end up timing out.
1 parent 1952a68 commit 8da88c6

File tree

3 files changed

+24
-7
lines changed

3 files changed

+24
-7
lines changed

run.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import pprint
1111
FILEPATH= pathlib.Path(yaml_directory.__file__).parent.resolve()
1212
#FP= pathlib.Path(__file__).parent.resolve()
13-
def run_simulation_server(name, monitor_overview, measurement_noise_level):
13+
def run_simulation_server(name, monitor_overview, measurement_noise_level, number_of_particles):
1414
if name == "diag0":
1515
devices = load_relevant_controls(
1616
os.path.join( FILEPATH, "DIAG0.yaml")
@@ -25,7 +25,7 @@ def run_simulation_server(name, monitor_overview, measurement_noise_level):
2525
raise ValueError(f"Unknown virtual accelerator name: {name}")
2626

2727
PVDB = create_pvdb(devices)
28-
va = get_virtual_accelerator(name, monitor_overview, measurement_noise_level)
28+
va = get_virtual_accelerator(name, monitor_overview, measurement_noise_level, number_of_particles)
2929
server = SimServer(PVDB)
3030
driver = SimDriver(server=server, devices=devices, virtual_accelerator=va)
3131

@@ -54,7 +54,16 @@ def run_simulation_server(name, monitor_overview, measurement_noise_level):
5454
help="If provided, adds realistic noise to measurements. See `simulation_server.virtual_accelerator.utils.add_noise` for details.",
5555
)
5656

57+
parser.add_argument(
58+
"--number_of_particles",
59+
type=int,
60+
default=None,
61+
help="If provided, limits the number of particles to this amount.",
62+
)
63+
5764
args = parser.parse_args()
65+
66+
print("args.number_of_particles ", args.number_of_particles)
5867
run_simulation_server(
59-
args.name, args.monitor_overview, args.measurement_noise_level
60-
)
68+
args.name, args.monitor_overview, args.measurement_noise_level, args.number_of_particles
69+
)

simulation_server/factory.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
LCLS_LATTICE = pathlib.Path(os.environ.get("LCLS_LATTICE", "/sdf/group/ad/sw/scm/repos/optics/lcls-lattice/cheetah"))
1111

1212

13-
def get_virtual_accelerator(name, monitor_overview=False, measurement_noise_level=None):
13+
def get_virtual_accelerator(name, monitor_overview=False, measurement_noise_level=None, number_of_particles=0):
1414
"""
1515
Create an instance of VirtualAccelerator for a given beamline.
1616
@@ -26,6 +26,8 @@ def get_virtual_accelerator(name, monitor_overview=False, measurement_noise_leve
2626
measurement_noise_level: float, optional
2727
If provided, adds realistic noise to measurements.
2828
See `simulation_server.virtual_accelerator.utils.add_noise` for details.
29+
num_particles: int, optional
30+
If provided, limits the number of particles to this amount.
2931
3032
Returns
3133
-------
@@ -56,6 +58,10 @@ def get_virtual_accelerator(name, monitor_overview=False, measurement_noise_leve
5658
dtype=torch.float32,
5759
)
5860
incoming_beam.particle_charges = torch.tensor(1.0)
61+
print("num of particles: ", number_of_particles)
62+
if number_of_particles > 0:
63+
incoming_beam.particles = incoming_beam.particles[:number_of_particles]
64+
incoming_beam.survival_probabilities=incoming_beam.survival_probabilities[:number_of_particles]
5965

6066
mapping_file = os.path.join(FILEPATH, "mappings", "lcls_elements.csv")
6167
lattice_file = os.path.join(LCLS_LATTICE,"nc_hxr.json")

start.sh

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,13 @@ else
1212
export LCLS_LATTICE=$1
1313
fi
1414

15-
15+
1616
NAME="${2:-diag0}"
1717
OVERVIEW="${3:-False}"
1818
NOISE="${4:-0.0}"
19+
NUM_PARTICLES="${5:-0}"
1920

21+
echo $NUM_PARTICLES
2022
# Start the server
2123
echo "Starting server..."
22-
python3 run.py --name $NAME --monitor_overview $OVERVIEW --measurement_noise_level $NOISE
24+
python3 run.py --name $NAME --monitor_overview $OVERVIEW --measurement_noise_level $NOISE --number_of_particles $NUM_PARTICLES

0 commit comments

Comments
 (0)