Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Conversation

mzaiss
Copy link

@mzaiss mzaiss commented Sep 8, 2025

This PR makes seq.plot() more flexible for interactive use and debugging.

  1. Added "clear=True" Parameter

The new clear flag defaulting to True ensures behavior as previously, which is that during repeated calls the plots in figure 1 and 2 get overwritten. Now, you can set clear=False to intentionally overlay sequences in the existing plots for direct comparison, which is useful for debugging subtle differences, but also great for educational purposes.

See here for two seqs with slightly different gradients (flat_area and flat_time vs. area and duration) and a corresponding shift in the rf pulse timing in this example.

SEQPLOT
  1. Return Figure and Axes Objects

The function now returns its figure and axes objects (fig1, axes1, fig2, axes2), which allows for post-plot customization (e.g., adding titles, annotations, signal) or extracting axes.

Copy link

github-actions bot commented Sep 8, 2025

Coverage

Coverage Report
FileStmtsMissCoverMissing
/home/runner/.local/lib/python3.12/site-packages/pypulseq
   add_gradients.py1235159%44, 52, 58, 61, 75–86, 92, 120–123, 130–131, 150, 157, 162–241
   add_ramps.py36360%1–89
   align.py35489%41, 45, 69, 73
   calc_duration.py25196%37
   calc_ramp.py2182142%45–353
   calc_rf_bandwidth.py272026%37–59, 63–67
   check_timing.py872769%72, 76, 101, 194, 201, 211–255
   compress_shape.py30197%28
   convert.py40880%42, 48, 66, 72–73, 82, 88–89
   event_lib.py961485%6–9, 48–51, 70–71, 205–210
   make_adc.py921386%63, 72–76, 79, 128, 131, 135, 141, 145, 184, 186, 188, 196
   make_adiabatic_pulse.py1293970%196–200, 217–221, 229–230, 253, 259, 328–347, 451–460, 498–506
   make_arbitrary_grad.py37781%68, 71, 74, 77, 81, 83, 103
   make_arbitrary_rf.py665517%83–160
   make_block_pulse.py46393%112–116, 119
   make_delay.py9189%27
   make_digital_output_pulse.py16288%39, 47
   make_extended_trapezoid.py561279%67, 70, 76, 82, 85, 88, 91, 94, 116, 134, 136, 139
   make_extended_trapezoid_area.py93397%52, 227, 230
   make_gauss_pulse.py692071%127–131, 134–158, 165, 168
   make_label.py22482%64, 66, 68, 75
   make_sigpy_pulse.py1163173%12–13, 112, 115, 119, 154, 157–161, 165, 168–169, 172–173, 188, 195, 200, 212, 215, 240–250, 264, 267, 297–307
   make_sinc_pulse.py681085%94, 100, 127–131, 135, 138–139, 142–143, 165
   make_trapezoid.py111794%177, 190, 196, 214, 232, 237, 255
   make_trigger.py16288%44, 52
   opts.py66986%78, 83, 102, 142, 166–170
   points_to_waveform.py9189%27
   rotate.py691480%15, 55, 66–69, 85–90, 112, 119–120
   scale_grad.py14471%28–30, 33
   sigpy_pulse_opts.py26773%34–41
   split_gradient.py393121%46–103
   split_gradient_at.py702761%63–90, 110, 114, 118–120, 154–156
   traj_to_grad.py13931%26–40
/home/runner/.local/lib/python3.12/site-packages/pypulseq/SAR
   SAR_calc.py1139813%33–40, 55–62, 89–108, 129–132, 168–212, 242–246, 264–306
/home/runner/.local/lib/python3.12/site-packages/pypulseq/Sequence
   block.py3683291%59, 62, 70, 76, 91, 99, 105, 116, 119, 122, 130, 135, 144, 196, 245, 249, 265, 305–308, 337–338, 404, 410, 430, 499, 535, 541, 568, 606, 640
   calc_grad_spectrum.py81766%68–190
   calc_pns.py403122%45–96
   ext_test_report.py1401192%23, 58, 61, 135, 227–233
   install.py754244%31, 52, 69, 71, 112–131, 148, 181–184, 200–212, 254–278
   parula.py4250%19–86
   read_seq.py3126878%42–43, 90, 93, 105, 110, 116, 123, 132, 141, 146, 149, 157–159, 192, 197, 205–254, 284–287, 302–303, 332–349, 412, 415, 450, 458, 532, 574–578
   sequence.py75422970%11–14, 101–111, 132–145, 183, 248–251, 298, 325, 342, 390, 418, 445–450, 487, 503, 594, 616, 657–660, 714, 752, 763–764, 770, 781, 787, 789, 797, 830–838, 859–881, 927, 929, 932, 945, 948, 956–957, 960, 983–984, 987–990, 1026–1036, 1045–1047, 1091–1103, 1118–1119, 1155–1156, 1184, 1190, 1193, 1230, 1351–1364, 1387, 1415, 1437–1439, 1460, 1491, 1502–1515, 1527–1538, 1584–1585, 1594–1612, 1636, 1666–1674, 1706–1816, 1845, 1859–1869, 1881
   write_seq.py172895%41, 65, 68–75
/home/runner/.local/lib/python3.12/site-packages/pypulseq/utils
   cumsum.py14193%17
   safe_pns_prediction.py12611310%50–87, 102–189, 197–214, 222, 244–250, 279–286, 310–336, 344–383, 396–411, 415
   tracing.py16662%33–34, 42, 54–55, 75
/home/runner/.local/lib/python3.12/site-packages/pypulseq/utils/siemens
   asc_to_hw.py58539%21–28, 48–106
   readasc.py48456%25–100
TOTAL4392150266% 

Tests Skipped Failures Errors Time
1285 18 💤 0 ❌ 0 🔥 2m 55s ⏱️

@mcencini
Copy link
Contributor

mcencini commented Sep 8, 2025

Hi! I am not a maintainer, but just wanted to point out that v1.5.0_dev branch also has changes to plot.

@mzaiss
Copy link
Author

mzaiss commented Sep 10, 2025

Hi! I am not a maintainer, but just wanted to point out that v1.5.0_dev branch also has changes to plot.

i hope that the same reuse can be done there.
wil try to also make a PR

@mzaiss mzaiss changed the title Extend seq.plot() for reuse ability. Extend seq.plot() for reuse ability. (1.4) Sep 10, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants