Skip to content

Commit 20b4b1c

Browse files
committed
rename parameters and fix ordering
1 parent 1d0886e commit 20b4b1c

File tree

3 files changed

+79
-79
lines changed

3 files changed

+79
-79
lines changed

src/mrinufft/io/nsp.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -293,8 +293,8 @@ def write_trajectory(
293293
"please set version to 5.1 or higher."
294294
)
295295
start_gradients = get_gradient_amplitudes_to_travel_for_set_time(
296-
ke=initial_positions,
297-
ge=gradients[:, 0],
296+
kspace_end_loc=initial_positions,
297+
end_gradients=gradients[:, 0],
298298
**scan_consts,
299299
)
300300
initial_positions = np.zeros_like(initial_positions)
@@ -311,9 +311,9 @@ def write_trajectory(
311311
# Always end at KMax, the spoilers can be handeled by the sequence.
312312
edge_locations[..., 0] = img_size[0] / FOV[0] / 2
313313
end_gradients = get_gradient_amplitudes_to_travel_for_set_time(
314-
ke=edge_locations,
315-
gs=gradients[:, -1],
316-
ks=final_positions,
314+
kspace_end_loc=edge_locations,
315+
start_gradients=gradients[:, -1],
316+
kspace_start_loc=final_positions,
317317
**scan_consts,
318318
)
319319
gradients = np.hstack([gradients, end_gradients])

src/mrinufft/trajectories/tools.py

Lines changed: 69 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -379,10 +379,10 @@ def unepify(trajectory: NDArray, Ns_readouts: int, Ns_transitions: int) -> NDArr
379379

380380

381381
def get_gradient_times_to_travel(
382-
ks: NDArray | None = None,
383-
ke: NDArray | None = None,
384-
gs: NDArray | None = None,
385-
ge: NDArray | None = None,
382+
kspace_end_loc: NDArray | None = None,
383+
kspace_start_loc: NDArray | None = None,
384+
end_gradients: NDArray | None = None,
385+
start_gradients: NDArray | None = None,
386386
gamma: float = Gammas.Hydrogen,
387387
raster_time: float = DEFAULT_RASTER_TIME,
388388
gmax: float = DEFAULT_GMAX,
@@ -400,14 +400,14 @@ def get_gradient_times_to_travel(
400400
401401
Parameters
402402
----------
403-
ks : NDArray
404-
Starting k-space positions, shape (nb_shots, nb_dimension).
405-
ke : NDArray, default None when it is 0
403+
kspace_end_loc : NDArray
406404
Ending k-space positions, shape (nb_shots, nb_dimension).
407-
gs : NDArray, default None when it is 0
408-
Starting gradient values, shape (nb_shots, nb_dimension).
409-
ge : NDArray, default None when it is 0
405+
kspace_start_loc : NDArray, default None when it is 0
406+
Starting k-space positions, shape (nb_shots, nb_dimension).
407+
end_gradients : NDArray, default None when it is 0
410408
Ending gradient values, shape (nb_shots, nb_dimension).
409+
start_gradients : NDArray, default None when it is 0
410+
Starting gradient values, shape (nb_shots, nb_dimension).
411411
gamma : float, optional
412412
Gyromagnetic ratio in Hz/T. Default is Gammas.Hydrogen.
413413
raster_time : float, optional
@@ -425,19 +425,19 @@ def get_gradient_times_to_travel(
425425
n_plateau: The timing values for the plateau phase.
426426
gi: The intermediate gradient values for trapezoidal or triangular waveforms.
427427
"""
428-
area_needed = (ke - ks) / gamma / raster_time
428+
area_needed = (kspace_end_loc - kspace_start_loc) / gamma / raster_time
429429

430430
# Direct ramp steps
431-
n_direct = np.ceil((ge - gs) / smax / raster_time).astype(int)
432-
area_direct = 0.5 * n_direct * (ge + gs)
431+
n_direct = np.ceil((end_gradients - start_gradients) / smax / raster_time).astype(int)
432+
area_direct = 0.5 * n_direct * (end_gradients + start_gradients)
433433

434434
i = np.sign(area_direct - area_needed)
435435

436-
n_ramp_down = np.ceil((gmax + i * gs) / smax / raster_time).astype(int)
437-
n_ramp_up = np.ceil((gmax + i * ge) / smax / raster_time).astype(int)
436+
n_ramp_down = np.ceil((gmax + i * start_gradients) / smax / raster_time).astype(int)
437+
n_ramp_up = np.ceil((gmax + i * end_gradients) / smax / raster_time).astype(int)
438438

439-
area_lowest = n_ramp_down * 0.5 * (gs - i * gmax) + n_ramp_up * 0.5 * (
440-
ge - i * gmax
439+
area_lowest = n_ramp_down * 0.5 * (start_gradients - i * gmax) + n_ramp_up * 0.5 * (
440+
end_gradients - i * gmax
441441
)
442442

443443
gi = np.zeros_like(n_ramp_down, dtype=np.float32)
@@ -447,8 +447,8 @@ def get_gradient_times_to_travel(
447447
ramp_only_mask = np.abs(area_lowest) >= np.abs(area_needed)
448448
gi[ramp_only_mask] = (
449449
2 * area_needed[ramp_only_mask]
450-
- (n_ramp_down[ramp_only_mask] + 1) * gs[ramp_only_mask]
451-
- (n_ramp_up[ramp_only_mask] - 1) * ge[ramp_only_mask]
450+
- (n_ramp_down[ramp_only_mask] + 1) * start_gradients[ramp_only_mask]
451+
- (n_ramp_up[ramp_only_mask] - 1) * end_gradients[ramp_only_mask]
452452
) / (n_ramp_down[ramp_only_mask] + n_ramp_up[ramp_only_mask])
453453

454454
# Else: need plateau
@@ -461,8 +461,8 @@ def get_gradient_times_to_travel(
461461

462462
gi[plateau_mask] = (
463463
2 * area_needed[plateau_mask]
464-
- (n_ramp_down[plateau_mask] + 1) * gs[plateau_mask]
465-
- (n_ramp_up[plateau_mask] - 1) * ge[plateau_mask]
464+
- (n_ramp_down[plateau_mask] + 1) * start_gradients[plateau_mask]
465+
- (n_ramp_up[plateau_mask] - 1) * end_gradients[plateau_mask]
466466
) / (
467467
n_ramp_down[plateau_mask]
468468
+ n_ramp_up[plateau_mask]
@@ -473,11 +473,11 @@ def get_gradient_times_to_travel(
473473

474474

475475
def get_gradient_amplitudes_to_travel_for_set_time(
476-
ke: NDArray,
477-
ks: NDArray | None = None,
478-
gs: NDArray | None = None,
479-
ge: NDArray | None = None,
480-
N: int | None = None,
476+
kspace_end_loc: NDArray,
477+
kspace_start_loc: NDArray | None = None,
478+
end_gradients: NDArray | None = None,
479+
start_gradients: NDArray | None = None,
480+
nb_raster_points: int | None = None,
481481
gamma: float = Gammas.Hydrogen,
482482
raster_time: float = DEFAULT_RASTER_TIME,
483483
gmax: float = DEFAULT_GMAX,
@@ -495,15 +495,15 @@ def get_gradient_amplitudes_to_travel_for_set_time(
495495
496496
Parameters
497497
----------
498-
ke : NDArray
498+
kspace_end_loc : NDArray
499499
Ending k-space positions, shape (nb_shots, nb_dimension).
500-
ks : NDArray, default None when it is 0
500+
kspace_start_loc : NDArray, default None when it is 0
501501
Starting k-space positions, shape (nb_shots, nb_dimension).
502-
gs : NDArray, default None when it is 0
503-
Starting gradient values, shape (nb_shots, nb_dimension).
504-
ge : NDArray, default None when it is 0
502+
end_gradients : NDArray, default None when it is 0
505503
Ending gradient values, shape (nb_shots, nb_dimension).
506-
N : int, default None
504+
start_gradients : NDArray, default None when it is 0
505+
Starting gradient values, shape (nb_shots, nb_dimension).
506+
nb_raster_points : int, default None
507507
Number of time steps (samples) for the gradient waveform.
508508
If None, timing is calculated based on the area needed and hardware limits.
509509
gamma : float, optional
@@ -517,7 +517,7 @@ def get_gradient_amplitudes_to_travel_for_set_time(
517517
518518
Returns
519519
-------
520-
G : NDArray
520+
NDArray
521521
Gradient waveforms, shape (nb_shots, nb_samples_per_shot, nb_dimension)
522522
, where each entry contains the gradient value at each time step
523523
for each shot and dimension.
@@ -529,46 +529,46 @@ def get_gradient_amplitudes_to_travel_for_set_time(
529529
- The returned gradients are suitable for use in MRI pulse sequence design,
530530
ensuring compliance with specified hardware constraints.
531531
"""
532-
ke = np.atleast_2d(ke)
533-
if ks is None:
534-
ks = np.zeros_like(ke)
535-
if gs is None:
536-
gs = np.zeros_like(ke)
537-
if ge is None:
538-
ge = np.zeros_like(ke)
539-
ks = np.atleast_2d(ks)
540-
gs = np.atleast_2d(gs)
541-
ge = np.atleast_2d(ge)
532+
kspace_end_loc = np.atleast_2d(kspace_end_loc)
533+
if kspace_start_loc is None:
534+
kspace_start_loc = np.zeros_like(kspace_end_loc)
535+
if start_gradients is None:
536+
start_gradients = np.zeros_like(kspace_end_loc)
537+
if end_gradients is None:
538+
end_gradients = np.zeros_like(kspace_end_loc)
539+
kspace_start_loc = np.atleast_2d(kspace_start_loc)
540+
start_gradients = np.atleast_2d(start_gradients)
541+
end_gradients = np.atleast_2d(end_gradients)
542542

543543
assert (
544-
ks.shape == ke.shape == gs.shape == ge.shape
544+
kspace_start_loc.shape == kspace_end_loc.shape == start_gradients.shape == end_gradients.shape
545545
), "All input arrays must have shape (nb_shots, nb_dimension)"
546-
if N is None:
546+
if nb_raster_points is None:
547547
# Calculate the number of time steps based on the area needed
548548
n_ramp_down, n_ramp_up, n_plateau, gi = get_gradient_times_to_travel(
549-
ks=ks,
550-
ke=ke,
551-
ge=ge,
552-
gs=gs,
549+
kspace_end_loc=kspace_end_loc,
550+
kspace_start_loc=kspace_start_loc,
551+
end_gradients=end_gradients,
552+
start_gradients=start_gradients,
553553
gamma=gamma,
554554
raster_time=raster_time,
555555
gmax=gmax,
556556
smax=smax,
557557
)
558558
# Extra 2 buffer samples
559-
N = np.max(n_ramp_down + n_ramp_up + n_plateau) + 2
559+
nb_raster_points = np.max(n_ramp_down + n_ramp_up + n_plateau) + 2
560560

561-
area_needed = (ke - ks) / gamma / raster_time
561+
area_needed = (kspace_end_loc - kspace_start_loc) / gamma / raster_time
562562
# Intermediate gradient values. This is value of plateau or triangle gradients
563-
gi = np.zeros_like(ks, dtype=np.float32)
563+
gi = np.zeros_like(kspace_start_loc, dtype=np.float32)
564564

565565
# Get the area for direct and estimate n_ramps
566-
area_direct = 0.5 * N * (ge + gs)
566+
area_direct = 0.5 * nb_raster_points * (end_gradients + start_gradients)
567567
i = np.sign(area_direct - area_needed)
568568

569-
n_ramp_down = np.ceil((gmax + i * gs) / smax / raster_time).astype(int)
570-
n_ramp_up = np.ceil((gmax + i * ge) / smax / raster_time).astype(int)
571-
n_plateau = N - n_ramp_up - n_ramp_down
569+
n_ramp_down = np.ceil((gmax + i * start_gradients) / smax / raster_time).astype(int)
570+
n_ramp_up = np.ceil((gmax + i * end_gradients) / smax / raster_time).astype(int)
571+
n_plateau = nb_raster_points - n_ramp_up - n_ramp_down
572572

573573
# Get intermediate gradients for triangle waveform, when n_plateau<0
574574
no_trapazoid = n_plateau <= 0
@@ -577,35 +577,35 @@ def get_gradient_amplitudes_to_travel_for_set_time(
577577
# Initial approximate calculation of gi
578578
gi[no_trapazoid] = (
579579
2 * area_needed[no_trapazoid]
580-
- N * ge[no_trapazoid] * smax
581-
- ge[no_trapazoid] * gs[no_trapazoid]
582-
+ ge[no_trapazoid] * smax
583-
- gs[no_trapazoid] * smax
584-
+ gs[no_trapazoid] * gs[no_trapazoid]
585-
) / (N * smax - ge[no_trapazoid] + gs[no_trapazoid])
580+
- nb_raster_points * end_gradients[no_trapazoid] * smax
581+
- end_gradients[no_trapazoid] * start_gradients[no_trapazoid]
582+
+ end_gradients[no_trapazoid] * smax
583+
- start_gradients[no_trapazoid] * smax
584+
+ start_gradients[no_trapazoid] * start_gradients[no_trapazoid]
585+
) / (nb_raster_points * smax - end_gradients[no_trapazoid] + start_gradients[no_trapazoid])
586586
n_ramp_down[no_trapazoid] = np.ceil(
587-
np.abs(gi[no_trapazoid] - gs[no_trapazoid]) / smax
587+
np.abs(gi[no_trapazoid] - start_gradients[no_trapazoid]) / smax
588588
)
589-
n_ramp_up[no_trapazoid] = N - n_ramp_down[no_trapazoid]
589+
n_ramp_up[no_trapazoid] = nb_raster_points - n_ramp_down[no_trapazoid]
590590

591591
# Get intermediate gradients for trapazoids
592-
gi = (2 * area_needed - (n_ramp_down + 1) * gs - (n_ramp_up - 1) * ge) / (
592+
gi = (2 * area_needed - (n_ramp_down + 1) * start_gradients - (n_ramp_up - 1) * end_gradients) / (
593593
n_ramp_down + n_ramp_up + 2 * n_plateau
594594
)
595-
nb_shots, nb_dimension = ke.shape
596-
G = np.zeros((nb_shots, N, nb_dimension), dtype=np.float32)
595+
nb_shots, nb_dimension = kspace_end_loc.shape
596+
G = np.zeros((nb_shots, nb_raster_points, nb_dimension), dtype=np.float32)
597597
for i in range(nb_shots):
598598
for d in range(nb_dimension):
599599
start = 0
600600
G[i, : n_ramp_down[i, d], d] = np.linspace(
601-
gs[i, d], gi[i, d], n_ramp_down[i, d], endpoint=False
601+
start_gradients[i, d], gi[i, d], n_ramp_down[i, d], endpoint=False
602602
)
603603
start += n_ramp_down[i, d]
604604
if n_plateau[i, d] > 0:
605605
G[i, start : start + n_plateau[i, d], d] = gi[i, d]
606606
start += n_plateau[i, d]
607607
G[i, start : start + n_ramp_up[i, d], d] = np.linspace(
608-
gi[i, d], ge[i, d], n_ramp_up[i, d], endpoint=False
608+
gi[i, d], end_gradients[i, d], n_ramp_up[i, d], endpoint=False
609609
)
610610
return G
611611

tests/test_io.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@ def test_trajectory_state_changer(kspace_loc, shape, gamma, raster_time, gmax, s
6363
trajectory = kspace_loc / resolution
6464
gradients = np.diff(trajectory, axis=1) / gamma / raster_time
6565
GS = get_gradient_amplitudes_to_travel_for_set_time(
66-
ke=trajectory[:, 0],
67-
ge=gradients[:, 0],
66+
kspace_end_loc=trajectory[:, 0],
67+
end_gradients=gradients[:, 0],
6868
gamma=gamma,
6969
raster_time=raster_time,
7070
gmax=gmax,
@@ -84,9 +84,9 @@ def test_trajectory_state_changer(kspace_loc, shape, gamma, raster_time, gmax, s
8484
np.testing.assert_allclose(GS[:, 0], 0, atol=1e-5)
8585

8686
GE = get_gradient_amplitudes_to_travel_for_set_time(
87-
ks=trajectory[:, -1],
88-
ke=np.zeros_like(trajectory[:, -1]),
89-
gs=gradients[:, -1],
87+
kspace_start_loc=trajectory[:, -1],
88+
kspace_end_loc=np.zeros_like(trajectory[:, -1]),
89+
start_gradients=gradients[:, -1],
9090
gamma=gamma,
9191
raster_time=raster_time,
9292
gmax=gmax,

0 commit comments

Comments
 (0)