diff --git a/BLOCHUS/BLOCHUS.m b/BLOCHUS/BLOCHUS.m index 4aee16d..140ba1e 100644 --- a/BLOCHUS/BLOCHUS.m +++ b/BLOCHUS/BLOCHUS.m @@ -33,8 +33,8 @@ %------------- BEGIN CODE -------------- %% GUI 'header' info and default GUI settings -myui.version = '0.1.1'; -myui.date = '16.05.2020'; +myui.version = '0.1.2'; +myui.date = '17.05.2020'; myui.author = 'Thomas Hiller'; myui.email = 'thomas.hiller[at]leibniz-liag.de'; diff --git a/CHANGELOG.md b/CHANGELOG.md index f930f9b..be506bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,13 +1,29 @@ -#### Changelog +# Changelog -##### Version v.0.1.1 +## [0.1.2] - 2020-05-17 -1. bug fix: in `onPushRun.m` the adiabatic quality p was incorrectly calculated when the total simulation time exceeded the actual switch-off ramp time -2. bug fix: both axes for the pulse frequency and current modulation are now show correctly when exporting the *Current View* figure from the menu -3. new feature: an animation of the latest result can be played for all parameter combinations (e.g. *Pulse + Relaxation* or *Pre-polarization switch-off + Pulse + Relaxation*, etc.) -4. typo fixing within comments and `README.md` +### Changed +- Updated `README.md` and `CHANGELOG.md`. +### Fixed -##### Version v.0.1.0 +- When switching the *Pulse* panel on/off, the quality factor settings did not behave as expected. + +## [0.1.1] - 2020-05-16 + +### Added +- An animation of the latest result can be played for all parameter combinations (e.g. *Pulse + Relaxation* or *Pre-polarization switch-off + Pulse + Relaxation*, etc.). + +### Fixed + +- The adiabatic quality p was incorrectly calculated in `onPushRun.m` when the total simulation time exceeded the actual switch-off ramp time. +- When exporting the *Current View* figure from the menu, both axes for the pulse setup (frequency and current modulation) are now correctly shown. +- Fixed typos in comments and `README.md`. + +## [0.1.0] - 2020-05-15 Initial Version + +[0.1.2]: https://github.com/ThoHiller/nmr-blochus/compare/v.0.1.1...v0.1.2 +[0.1.1]: https://github.com/ThoHiller/nmr-blochus/compare/v.0.1.0...v.0.1.1 +[0.1.0]: https://github.com/ThoHiller/nmr-blochus/releases/tag/v.0.1.0 diff --git a/README.md b/README.md index 8e3a367..66673f0 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,25 @@ ## BLOCHUS +BLOCHUS icon + **BLOCH** **U**niversal **S**imulator [![release](https://img.shields.io/github/release/ThoHiller/nmr-blochus.svg)](https://github.com/ThoHiller/nmr-blochus/releases/latest) [![DOI](https://zenodo.org/badge/264257175.svg)](https://zenodo.org/badge/latestdoi/264257175) - - - +### Table of Contents +1. [About](#about) +2. [Requirements](#requirements) +3. [Installation](#installation) +4. [Usage](#usage) +5. [Documentation](#documentation) +6. [ToDo](#todo) +7. [Cite as & References](#references) +8. [Changelog](CHANGELOG.md) + +- - - + ### About **BLOCHUS** is a set of MATLABTM tools, that allow some basic simulations of (S)NMR spin dynamics based on the Bloch equations. The Bloch equations are solved in the laboratory frame of reference with MATLABs built-in `ode45` solver. Because it was developed within the scope of a near surface SNMR project, its main features are the simulation of (1) pre-polarization switch-off ramps and (2) excitation pulses. The main front-end to the underlying simulation tools is a graphical user interface (GUI) that allows playing around with the different features and helps to understand the basic concepts of (S)NMR spin dynamics. @@ -15,31 +29,35 @@ 2. Choose between different pre-polarization switch-off ramp shapes (e.g. *exponential*, *linear*, *half cosine*, etc.) with arbitrary ramp time 3. Choose between different excitation pulses (*pi/2*, *pi*, *adiabatic half passage*, etc.) with arbitrary off-resonance frequency, or in case of the adiabatic pulses, arbitrary frequency and current modulation. -- - - +Adiabatic half passage pulse +Pre-polarization switch-off ramp + +- - - + ### Requirements In order to work properly you need to meet the following requirements: -1. The [Mathworks](https://www.mathworks.com) MATLABTM software development environment (tested with R2017b and newer) +1. The [Mathworks](https://www.mathworks.com) MATLABTM software development environment (tested with R2017a and newer) 2. The GUI Layout Toolbox (get it from [FEX](https://de.mathworks.com/matlabcentral/fileexchange/47982-gui-layout-toolbox)) (required) 3. `findjobj` (get it from [FEX](https://de.mathworks.com/matlabcentral/fileexchange/14317-findjobj-find-java-handles-of-matlab-graphic-objects)) (required) #### Operating System -I tested it successfully under Windows 7 (64bit) and 10 (64bit) with Matlab R2018a. +I tested it successfully under Windows 7 (64bit) and 10 (64bit) with Matlab R2017a and newer. Always with the latest version of the GUI Layout Toolbox (current version is v2.3.4) **NOTE:** So far I did not test anything on Linux or a Mac. If you get it to work on either of the two systems (which it basically should I guess) please let me know. - - - - + ### Installation 1. It is recommended to install the GUI Layout Toolbox directly into MATLABTM via the mltbx-file (but it should also work via the old-school way of adding the toolbox folders to the MATLABTM path) 2. To use **BLOCHUS** you just need to place the `blochus` folder from the git repository on your hard drive and use the start script `startBLOCHUS` (within this script all necessary **BLOCHUS** folders are added to the MATLABTM path) - - - - + ### Usage 1. By executing the start scripts (see above) @@ -47,14 +65,14 @@ I tested it successfully under Windows 7 (64bit) and 10 (64bit) with Matlab R201 3. Check the example scripts for the usage of the core functions without the GUI (inside the `scripts` folder) - - - - + ### Documentation A basic documentation to **BLOCHUS** can be found in the `blochus\doc` folder. Just open the `index.html` in the web browser of your choice. The documentation was created with [m2html](https://www.artefact.tk/software/matlab/m2html/) by Guillaume Flandin. - - - - -### TODO + +### ToDo In no particular order and without guarantee that it will ever happen :-) : @@ -63,6 +81,14 @@ In no particular order and without guarantee that it will ever happen :-) : 3. ... - - - + +### Cite as +If you use BLOCHUS for your research, please cite it as: + +Thomas Hiller. (2020, May 17). ThoHiller/nmr-blochus: v0.1.2 (Version v0.1.2). Zenodo. [https://doi.org/10.5281/zenodo.3829464] + +Note: Even though the version number might change due to updates, this DOI is permanent (represents all versions) and always links to the latest version. + ### References diff --git a/blochus_gui_ahp.png b/blochus_gui_ahp.png new file mode 100644 index 0000000..2db9379 Binary files /dev/null and b/blochus_gui_ahp.png differ diff --git a/blochus_gui_linexp.png b/blochus_gui_linexp.png new file mode 100644 index 0000000..9db16be Binary files /dev/null and b/blochus_gui_linexp.png differ diff --git a/blochus_logo_small.png b/blochus_logo_small.png new file mode 100644 index 0000000..0b65e06 Binary files /dev/null and b/blochus_logo_small.png differ diff --git a/callbacks/checkbox/onCheckPrePolPulse.m b/callbacks/checkbox/onCheckPrePolPulse.m index bee76f5..60739c8 100644 --- a/callbacks/checkbox/onCheckPrePolPulse.m +++ b/callbacks/checkbox/onCheckPrePolPulse.m @@ -97,6 +97,9 @@ function onCheckPrePolPulse(src,~) set(gui.edit_handles.PulseIend,'Enable','off'); set(gui.edit_handles.PulseIA,'Enable','off'); set(gui.edit_handles.PulseIB,'Enable','off'); + set(gui.check_handles.PulseQ,'Enable','off'); + set(gui.edit_handles.PulseQ,'Enable','off'); + set(gui.edit_handles.PulseQdf,'Enable','off'); % clear Pulse axes clearSingleAxis(gui.axes_handles.PulseB); @@ -156,6 +159,9 @@ function onCheckPrePolPulse(src,~) set(gui.edit_handles.PulseIend,'Enable','off'); set(gui.edit_handles.PulseIA,'Enable','off'); set(gui.edit_handles.PulseIB,'Enable','off'); + set(gui.check_handles.PulseQ,'Enable','off'); + set(gui.edit_handles.PulseQ,'Enable','off'); + set(gui.edit_handles.PulseQdf,'Enable','off'); % clear Pulse axes clearSingleAxis(gui.axes_handles.PulseB); diff --git a/callbacks/checkbox/onCheckPulseQ.m b/callbacks/checkbox/onCheckPulseQ.m index 0590785..6a3bab1 100644 --- a/callbacks/checkbox/onCheckPulseQ.m +++ b/callbacks/checkbox/onCheckPulseQ.m @@ -39,9 +39,13 @@ function onCheckPulseQ(src,~) switch get(src,'Value') case 0 + data.pulse.Istart = 0; + set(gui.edit_handles.PulseIstart,'String',num2str(data.pulse.Istart)); set(gui.edit_handles.PulseQ,'Enable','off'); set(gui.edit_handles.PulseQdf,'Enable','off'); - case 1 + case 1 + data.pulse.Istart = 1; + set(gui.edit_handles.PulseIstart,'String',num2str(data.pulse.Istart)); set(gui.edit_handles.PulseQ,'Enable','on'); set(gui.edit_handles.PulseQdf,'Enable','on'); end diff --git a/callbacks/popup/onPopupPulseDFmode.m b/callbacks/popup/onPopupPulseDFmode.m index 14d1ef1..0ab2058 100644 --- a/callbacks/popup/onPopupPulseDFmode.m +++ b/callbacks/popup/onPopupPulseDFmode.m @@ -59,14 +59,14 @@ function onPopupPulseDFmode(src,~) case 3 % tanh GMR data.pulse.DFmode = 'tanhGMR'; - data.pulse.DFstart = -300; + data.pulse.DFstart = -200; set(gui.edit_handles.PulseDFstart,'String',num2str(data.pulse.DFstart)); set(gui.edit_handles.PulseDFA,'Enable','off'); set(gui.edit_handles.PulseDFB,'Enable','off'); case 4 % exp data.pulse.DFmode = 'exp'; - data.pulse.DFstart = -300; + data.pulse.DFstart = -200; data.pulse.DFA = 10; set(gui.edit_handles.PulseDFstart,'String',num2str(data.pulse.DFstart)); set(gui.edit_handles.PulseDFA,'String',num2str(data.pulse.DFA)); diff --git a/callbacks/popup/onPopupPulseImode.m b/callbacks/popup/onPopupPulseImode.m index 5806b9c..000924b 100644 --- a/callbacks/popup/onPopupPulseImode.m +++ b/callbacks/popup/onPopupPulseImode.m @@ -50,10 +50,8 @@ function onPopupPulseImode(src,~) case 2 % tanh MIDI data.pulse.Imode = 'tanhMIDI'; - data.pulse.Istart = 0; data.pulse.IA = 0.5; data.pulse.IB = 1; - set(gui.edit_handles.PulseIstart,'String',num2str(data.pulse.Istart)); set(gui.edit_handles.PulseIA,'String',num2str(data.pulse.IA)); set(gui.edit_handles.PulseIA,'Enable','on'); set(gui.edit_handles.PulseIB,'String',num2str(data.pulse.IB)); @@ -61,16 +59,12 @@ function onPopupPulseImode(src,~) case 3 % tanh GMR data.pulse.Imode = 'tanhGMR'; - data.pulse.Istart = 0; - set(gui.edit_handles.PulseIstart,'String',num2str(data.pulse.Istart)); set(gui.edit_handles.PulseIA,'Enable','off'); set(gui.edit_handles.PulseIB,'Enable','off'); case 4 % exp data.pulse.Imode = 'exp'; - data.pulse.Istart = 0; data.pulse.IA = 10; - set(gui.edit_handles.PulseIstart,'String',num2str(data.pulse.Istart)); set(gui.edit_handles.PulseIA,'String',num2str(data.pulse.IA)); set(gui.edit_handles.PulseIA,'Enable','on'); set(gui.edit_handles.PulseIB,'Enable','off'); diff --git a/callbacks/popup/onPopupPulseType.m b/callbacks/popup/onPopupPulseType.m index 7b26288..1d815c5 100644 --- a/callbacks/popup/onPopupPulseType.m +++ b/callbacks/popup/onPopupPulseType.m @@ -69,6 +69,8 @@ function onPopupPulseType(src,~) set(gui.edit_handles.PulseIA,'Enable','off'); set(gui.edit_handles.PulseIB,'Enable','off'); set(gui.check_handles.PulseQ,'Enable','off'); + set(gui.edit_handles.PulseQ,'Enable','off'); + set(gui.edit_handles.PulseQdf,'Enable','off'); case 2 % pi data.pulse.Type = 'pi'; @@ -96,6 +98,8 @@ function onPopupPulseType(src,~) set(gui.edit_handles.PulseIA,'Enable','off'); set(gui.edit_handles.PulseIB,'Enable','off'); set(gui.check_handles.PulseQ,'Enable','off'); + set(gui.edit_handles.PulseQ,'Enable','off'); + set(gui.edit_handles.PulseQdf,'Enable','off'); case 3 % free data.pulse.Type = 'free'; @@ -120,6 +124,8 @@ function onPopupPulseType(src,~) set(gui.edit_handles.PulseIA,'Enable','off'); set(gui.edit_handles.PulseIB,'Enable','off'); set(gui.check_handles.PulseQ,'Enable','off'); + set(gui.edit_handles.PulseQ,'Enable','off'); + set(gui.edit_handles.PulseQdf,'Enable','off'); case 4 % AHP data.pulse.Type = 'AHP'; @@ -133,7 +139,11 @@ function onPopupPulseType(src,~) set(gui.edit_handles.PulseDFA,'Enable','off'); set(gui.edit_handles.PulseDFB,'Enable','off'); - data.pulse.Istart = 0; + if get(gui.check_handles.PulseQ,'Value') == 0 + data.pulse.Istart = 0; + else + data.pulse.Istart = 1; + end data.pulse.Iend = 1; set(gui.popup_handles.PulseImode,'Enable','on'); set(gui.edit_handles.PulseIstart,'Enable','on','String',num2str(data.pulse.Istart)); @@ -142,6 +152,9 @@ function onPopupPulseType(src,~) set(gui.edit_handles.PulseIB,'Enable','off'); set(gui.check_handles.PulseQ,'Enable','on'); + setappdata(fig,'data',data); + onCheckPulseQ(gui.check_handles.PulseQ); + data = getappdata(fig,'data'); setappdata(fig,'data',data); onPopupPulseDFmode(gui.popup_handles.PulseDFmode); data = getappdata(fig,'data'); @@ -173,6 +186,8 @@ function onPopupPulseType(src,~) set(gui.edit_handles.PulseIA,'Enable','off'); set(gui.edit_handles.PulseIB,'Enable','off'); set(gui.check_handles.PulseQ,'Enable','off'); + set(gui.edit_handles.PulseQ,'Enable','off'); + set(gui.edit_handles.PulseQdf,'Enable','off'); % update the GUI as if the number of periods would have been % changed manually @@ -209,6 +224,8 @@ function onPopupPulseType(src,~) set(gui.edit_handles.PulseIA,'Enable','on','String',num2str(data.pulse.IA)); set(gui.edit_handles.PulseIB,'Enable','on','String',num2str(data.pulse.IB)); set(gui.check_handles.PulseQ,'Enable','off'); + set(gui.edit_handles.PulseQ,'Enable','off'); + set(gui.edit_handles.PulseQdf,'Enable','off'); % update the GUI as if the number of periods would have been % changed manually diff --git a/doc/blochus/BLOCHUS/BLOCHUS.html b/doc/blochus/BLOCHUS/BLOCHUS.html index cc1f0b7..f677553 100644 --- a/doc/blochus/BLOCHUS/BLOCHUS.html +++ b/doc/blochus/BLOCHUS/BLOCHUS.html @@ -105,8 +105,8 @@

SOURCE CODE ^%------------- BEGIN CODE -------------- 0034 0035 %% GUI 'header' info and default GUI settings -0036 myui.version = '0.1.1'; -0037 myui.date = '16.05.2020'; +0036 myui.version = '0.1.2'; +0037 myui.date = '17.05.2020'; 0038 myui.author = 'Thomas Hiller'; 0039 myui.email = 'thomas.hiller[at]leibniz-liag.de'; 0040 diff --git a/doc/blochus/callbacks/checkbox/onCheckPrePolPulse.html b/doc/blochus/callbacks/checkbox/onCheckPrePolPulse.html index dbc219c..1f0d3b1 100644 --- a/doc/blochus/callbacks/checkbox/onCheckPrePolPulse.html +++ b/doc/blochus/callbacks/checkbox/onCheckPrePolPulse.html @@ -168,204 +168,210 @@

SOURCE CODE ^'Enable','off'); 0098 set(gui.edit_handles.PulseIA,'Enable','off'); 0099 set(gui.edit_handles.PulseIB,'Enable','off'); -0100 -0101 % clear Pulse axes -0102 clearSingleAxis(gui.axes_handles.PulseB); -0103 clearSingleAxis(gui.axes_handles.PulseSetupF); -0104 clearSingleAxis(gui.axes_handles.PulseSetupI); -0105 clearSingleAxis(gui.axes_handles.PulseFFT); -0106 -0107 elseif isPrePol == 1 && isPulse == 0 % only pre-polarization switch-off -0108 data.basic.type = 'prepol'; +0100 set(gui.check_handles.PulseQ,'Enable','off'); +0101 set(gui.edit_handles.PulseQ,'Enable','off'); +0102 set(gui.edit_handles.PulseQdf,'Enable','off'); +0103 +0104 % clear Pulse axes +0105 clearSingleAxis(gui.axes_handles.PulseB); +0106 clearSingleAxis(gui.axes_handles.PulseSetupF); +0107 clearSingleAxis(gui.axes_handles.PulseSetupI); +0108 clearSingleAxis(gui.axes_handles.PulseFFT); 0109 -0110 % menu settings -0111 set(gui.menu.view_figures_ramp,'Enable','on'); -0112 set(gui.menu.view_figures_pulse,'Enable','off'); -0113 -0114 % std settings -0115 data.basic.Tsim = data.prepol.Tramp; -0116 set(gui.edit_handles.Tsim,'String',num2str(data.basic.Tsim)); -0117 data.basic.Minit = [1 0 0]; -0118 set(gui.edit_handles.Minitx,'String',num2str(data.basic.Minit(1))); -0119 set(gui.edit_handles.Minity,'String',num2str(data.basic.Minit(2))); -0120 set(gui.edit_handles.Minitz,'String',num2str(data.basic.Minit(3))); -0121 set(gui.edit_handles.Minitx,'Enable','off'); -0122 set(gui.edit_handles.Minity,'Enable','off'); -0123 set(gui.edit_handles.Minitz,'Enable','off'); -0124 -0125 % clear magnetization FFT axis -0126 clearSingleAxis(gui.axes_handles.MagFFT); +0110 elseif isPrePol == 1 && isPulse == 0 % only pre-polarization switch-off +0111 data.basic.type = 'prepol'; +0112 +0113 % menu settings +0114 set(gui.menu.view_figures_ramp,'Enable','on'); +0115 set(gui.menu.view_figures_pulse,'Enable','off'); +0116 +0117 % std settings +0118 data.basic.Tsim = data.prepol.Tramp; +0119 set(gui.edit_handles.Tsim,'String',num2str(data.basic.Tsim)); +0120 data.basic.Minit = [1 0 0]; +0121 set(gui.edit_handles.Minitx,'String',num2str(data.basic.Minit(1))); +0122 set(gui.edit_handles.Minity,'String',num2str(data.basic.Minit(2))); +0123 set(gui.edit_handles.Minitz,'String',num2str(data.basic.Minit(3))); +0124 set(gui.edit_handles.Minitx,'Enable','off'); +0125 set(gui.edit_handles.Minity,'Enable','off'); +0126 set(gui.edit_handles.Minitz,'Enable','off'); 0127 -0128 % activate PrePol settings -0129 set(gui.check_handles.PrePolRDS,'Enable','on'); -0130 set(gui.popup_handles.PrePolRamp,'Enable','on'); -0131 set(gui.edit_handles.PrePolFactor,'Enable','on'); -0132 set(gui.edit_handles.PrePolTheta,'Enable','on'); -0133 set(gui.edit_handles.PrePolPhi,'Enable','on'); -0134 set(gui.edit_handles.PrePolSwitchFactor,'Enable','on'); -0135 set(gui.edit_handles.PrePolTramp,'Enable','on'); -0136 set(gui.edit_handles.PrePolTslope,'Enable','on'); -0137 setappdata(fig,'data',data); -0138 onPopupPrePolRamp(gui.popup_handles.PrePolRamp); -0139 data = getappdata(fig,'data'); -0140 -0141 % deactivate Pulse settings -0142 set(gui.check_handles.PulseRDP,'Enable','off'); -0143 set(gui.popup_handles.PulseType,'Enable','off'); -0144 set(gui.popup_handles.PulseAxis,'Enable','off'); -0145 set(gui.popup_handles.PulsePolarization,'Enable','off'); -0146 set(gui.edit_handles.PulseB1Factor,'Enable','off'); -0147 set(gui.edit_handles.PulseTtau,'Enable','off'); -0148 set(gui.edit_handles.PulseTwait,'Enable','off'); -0149 set(gui.popup_handles.PulseDFmode,'Enable','off'); -0150 set(gui.edit_handles.PulseDFstart,'Enable','off'); -0151 set(gui.edit_handles.PulseDFend,'Enable','off'); -0152 set(gui.edit_handles.PulseDFA,'Enable','off'); -0153 set(gui.edit_handles.PulseDFB,'Enable','off'); -0154 set(gui.popup_handles.PulseImode,'Enable','off'); -0155 set(gui.edit_handles.PulseIstart,'Enable','off'); -0156 set(gui.edit_handles.PulseIend,'Enable','off'); -0157 set(gui.edit_handles.PulseIA,'Enable','off'); -0158 set(gui.edit_handles.PulseIB,'Enable','off'); -0159 -0160 % clear Pulse axes -0161 clearSingleAxis(gui.axes_handles.PulseB); -0162 clearSingleAxis(gui.axes_handles.PulseSetupF); -0163 clearSingleAxis(gui.axes_handles.PulseSetupI); -0164 clearSingleAxis(gui.axes_handles.PulseFFT); +0128 % clear magnetization FFT axis +0129 clearSingleAxis(gui.axes_handles.MagFFT); +0130 +0131 % activate PrePol settings +0132 set(gui.check_handles.PrePolRDS,'Enable','on'); +0133 set(gui.popup_handles.PrePolRamp,'Enable','on'); +0134 set(gui.edit_handles.PrePolFactor,'Enable','on'); +0135 set(gui.edit_handles.PrePolTheta,'Enable','on'); +0136 set(gui.edit_handles.PrePolPhi,'Enable','on'); +0137 set(gui.edit_handles.PrePolSwitchFactor,'Enable','on'); +0138 set(gui.edit_handles.PrePolTramp,'Enable','on'); +0139 set(gui.edit_handles.PrePolTslope,'Enable','on'); +0140 setappdata(fig,'data',data); +0141 onPopupPrePolRamp(gui.popup_handles.PrePolRamp); +0142 data = getappdata(fig,'data'); +0143 +0144 % deactivate Pulse settings +0145 set(gui.check_handles.PulseRDP,'Enable','off'); +0146 set(gui.popup_handles.PulseType,'Enable','off'); +0147 set(gui.popup_handles.PulseAxis,'Enable','off'); +0148 set(gui.popup_handles.PulsePolarization,'Enable','off'); +0149 set(gui.edit_handles.PulseB1Factor,'Enable','off'); +0150 set(gui.edit_handles.PulseTtau,'Enable','off'); +0151 set(gui.edit_handles.PulseTwait,'Enable','off'); +0152 set(gui.popup_handles.PulseDFmode,'Enable','off'); +0153 set(gui.edit_handles.PulseDFstart,'Enable','off'); +0154 set(gui.edit_handles.PulseDFend,'Enable','off'); +0155 set(gui.edit_handles.PulseDFA,'Enable','off'); +0156 set(gui.edit_handles.PulseDFB,'Enable','off'); +0157 set(gui.popup_handles.PulseImode,'Enable','off'); +0158 set(gui.edit_handles.PulseIstart,'Enable','off'); +0159 set(gui.edit_handles.PulseIend,'Enable','off'); +0160 set(gui.edit_handles.PulseIA,'Enable','off'); +0161 set(gui.edit_handles.PulseIB,'Enable','off'); +0162 set(gui.check_handles.PulseQ,'Enable','off'); +0163 set(gui.edit_handles.PulseQ,'Enable','off'); +0164 set(gui.edit_handles.PulseQdf,'Enable','off'); 0165 -0166 elseif isPrePol == 0 && isPulse == 1 % only Pulse -0167 data.basic.type = 'pulse'; -0168 -0169 % menu settings -0170 set(gui.menu.view_figures_ramp,'Enable','off'); -0171 set(gui.menu.view_figures_pulse,'Enable','on'); -0172 -0173 % std settings -0174 data.basic.Tsim = data.pulse.Ttau; -0175 set(gui.edit_handles.Tsim,'String',num2str(data.basic.Tsim)); -0176 data.basic.Minit = [0 0 1]; -0177 set(gui.edit_handles.Minitx,'String',num2str(data.basic.Minit(1))); -0178 set(gui.edit_handles.Minity,'String',num2str(data.basic.Minit(2))); -0179 set(gui.edit_handles.Minitz,'String',num2str(data.basic.Minit(3))); -0180 set(gui.edit_handles.Minitx,'Enable','on'); -0181 set(gui.edit_handles.Minity,'Enable','on'); -0182 set(gui.edit_handles.Minitz,'Enable','on'); -0183 setappdata(fig,'data',data); -0184 -0185 % clear magnetization FFT axis -0186 clearSingleAxis(gui.axes_handles.MagFFT); -0187 -0188 % deactivate PrePol settings -0189 set(gui.check_handles.PrePolRDS,'Enable','off'); -0190 set(gui.popup_handles.PrePolRamp,'Enable','off'); -0191 set(gui.edit_handles.PrePolFactor,'Enable','off'); -0192 set(gui.edit_handles.PrePolTheta,'Enable','off'); -0193 set(gui.edit_handles.PrePolPhi,'Enable','off'); -0194 set(gui.edit_handles.PrePolSwitchFactor,'Enable','off'); -0195 set(gui.edit_handles.PrePolTramp,'Enable','off'); -0196 set(gui.edit_handles.PrePolTslope,'Enable','off'); -0197 -0198 % clear PrePol axes -0199 clearSingleAxis(gui.axes_handles.Bpre); -0200 clearSingleAxis(gui.axes_handles.alpha); -0201 clearSingleAxis(gui.axes_handles.dadt); -0202 clearSingleAxis(gui.axes_handles.wda); +0166 % clear Pulse axes +0167 clearSingleAxis(gui.axes_handles.PulseB); +0168 clearSingleAxis(gui.axes_handles.PulseSetupF); +0169 clearSingleAxis(gui.axes_handles.PulseSetupI); +0170 clearSingleAxis(gui.axes_handles.PulseFFT); +0171 +0172 elseif isPrePol == 0 && isPulse == 1 % only Pulse +0173 data.basic.type = 'pulse'; +0174 +0175 % menu settings +0176 set(gui.menu.view_figures_ramp,'Enable','off'); +0177 set(gui.menu.view_figures_pulse,'Enable','on'); +0178 +0179 % std settings +0180 data.basic.Tsim = data.pulse.Ttau; +0181 set(gui.edit_handles.Tsim,'String',num2str(data.basic.Tsim)); +0182 data.basic.Minit = [0 0 1]; +0183 set(gui.edit_handles.Minitx,'String',num2str(data.basic.Minit(1))); +0184 set(gui.edit_handles.Minity,'String',num2str(data.basic.Minit(2))); +0185 set(gui.edit_handles.Minitz,'String',num2str(data.basic.Minit(3))); +0186 set(gui.edit_handles.Minitx,'Enable','on'); +0187 set(gui.edit_handles.Minity,'Enable','on'); +0188 set(gui.edit_handles.Minitz,'Enable','on'); +0189 setappdata(fig,'data',data); +0190 +0191 % clear magnetization FFT axis +0192 clearSingleAxis(gui.axes_handles.MagFFT); +0193 +0194 % deactivate PrePol settings +0195 set(gui.check_handles.PrePolRDS,'Enable','off'); +0196 set(gui.popup_handles.PrePolRamp,'Enable','off'); +0197 set(gui.edit_handles.PrePolFactor,'Enable','off'); +0198 set(gui.edit_handles.PrePolTheta,'Enable','off'); +0199 set(gui.edit_handles.PrePolPhi,'Enable','off'); +0200 set(gui.edit_handles.PrePolSwitchFactor,'Enable','off'); +0201 set(gui.edit_handles.PrePolTramp,'Enable','off'); +0202 set(gui.edit_handles.PrePolTslope,'Enable','off'); 0203 -0204 % activate Pulse settings -0205 set(gui.check_handles.PulseRDP,'Enable','on'); -0206 set(gui.popup_handles.PulseType,'Enable','on'); -0207 set(gui.popup_handles.PulseAxis,'Enable','on'); -0208 set(gui.popup_handles.PulsePolarization,'Enable','on'); -0209 set(gui.edit_handles.PulseB1Factor,'Enable','on'); -0210 set(gui.edit_handles.PulseTtau,'Enable','on'); -0211 set(gui.edit_handles.PulseDFstart,'Enable','on'); -0212 set(gui.edit_handles.PulseTwait,'Enable','off'); -0213 onPopupPulseType(gui.popup_handles.PulseType); -0214 data = getappdata(fig,'data'); -0215 -0216 elseif isPrePol == 1 && isPulse == 1 % pre-polarization + pulse -0217 data.basic.type = 'prepolpulse'; -0218 -0219 % menu settings -0220 set(gui.menu.view_figures_ramp,'Enable','on'); -0221 set(gui.menu.view_figures_pulse,'Enable','on'); -0222 -0223 % std settings -0224 data.basic.Minit = [1 0 0]; -0225 set(gui.edit_handles.Minitx,'String',num2str(data.basic.Minit(1))); -0226 set(gui.edit_handles.Minity,'String',num2str(data.basic.Minit(2))); -0227 set(gui.edit_handles.Minitz,'String',num2str(data.basic.Minit(3))); -0228 set(gui.edit_handles.Minitx,'Enable','off'); -0229 set(gui.edit_handles.Minity,'Enable','off'); -0230 set(gui.edit_handles.Minitz,'Enable','off'); -0231 setappdata(fig,'data',data); -0232 -0233 % clear magnetization FFT axis -0234 clearSingleAxis(gui.axes_handles.MagFFT); -0235 clearSingleAxis(gui.axes_handles.MagR); -0236 clearSingleAxis(gui.axes_handles.SphereR); -0237 -0238 % activate PrePol settings -0239 set(gui.check_handles.PrePolRDS,'Enable','on'); -0240 set(gui.popup_handles.PrePolRamp,'Enable','on'); -0241 set(gui.edit_handles.PrePolFactor,'Enable','on'); -0242 set(gui.edit_handles.PrePolTheta,'Enable','on'); -0243 set(gui.edit_handles.PrePolPhi,'Enable','on'); -0244 set(gui.edit_handles.PrePolSwitchFactor,'Enable','on'); -0245 set(gui.edit_handles.PrePolTramp,'Enable','on'); -0246 set(gui.edit_handles.PrePolTslope,'Enable','on'); -0247 setappdata(fig,'data',data); -0248 onPopupPrePolRamp(gui.popup_handles.PrePolRamp); -0249 data = getappdata(fig,'data'); -0250 -0251 % activate Pulse settings -0252 set(gui.check_handles.PulseRDP,'Enable','on'); -0253 set(gui.popup_handles.PulseType,'Enable','on'); -0254 set(gui.popup_handles.PulseAxis,'Enable','on'); -0255 set(gui.popup_handles.PulsePolarization,'Enable','on'); -0256 set(gui.edit_handles.PulseB1Factor,'Enable','on'); -0257 set(gui.edit_handles.PulseTtau,'Enable','on'); -0258 set(gui.edit_handles.PulseDFstart,'Enable','on'); -0259 set(gui.edit_handles.PulseTwait,'Enable','on'); -0260 setappdata(fig,'data',data); -0261 onPopupPulseType(gui.popup_handles.PulseType); -0262 data = getappdata(fig,'data'); -0263 end -0264 -0265 % because the settings changed, deactivate the "Animate" button -0266 set(gui.push_handles.Animate,'Enable','off'); -0267 % update all data inside the GUI -0268 setappdata(fig,'data',data); -0269 % update status bar -0270 updateStatusInformation(fig); -0271 else -0272 warndlg({'onCheckPrePolPulse:','There is no figure with the BLOCHUS Tag open.'},... -0273 'BLOCHUS error'); -0274 end -0275 -0276 end -0277 -0278 %------------- END OF CODE -------------- -0279 -0280 %% License: -0281 % GNU GPLv3 -0282 % -0283 % BLOCHUS -0284 % Copyright (C) 2019 Thomas Hiller -0285 % -0286 % This program is free software: you can redistribute it and/or modify -0287 % it under the terms of the GNU General Public License as published by -0288 % the Free Software Foundation, either version 3 of the License, or -0289 % (at your option) any later version. -0290 % -0291 % This program is distributed in the hope that it will be useful, -0292 % but WITHOUT ANY WARRANTY; without even the implied warranty of -0293 % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -0294 % GNU General Public License for more details. -0295 % -0296 % You should have received a copy of the GNU General Public License -0297 % along with this program. If not, see <https://www.gnu.org/licenses/>. +0204 % clear PrePol axes +0205 clearSingleAxis(gui.axes_handles.Bpre); +0206 clearSingleAxis(gui.axes_handles.alpha); +0207 clearSingleAxis(gui.axes_handles.dadt); +0208 clearSingleAxis(gui.axes_handles.wda); +0209 +0210 % activate Pulse settings +0211 set(gui.check_handles.PulseRDP,'Enable','on'); +0212 set(gui.popup_handles.PulseType,'Enable','on'); +0213 set(gui.popup_handles.PulseAxis,'Enable','on'); +0214 set(gui.popup_handles.PulsePolarization,'Enable','on'); +0215 set(gui.edit_handles.PulseB1Factor,'Enable','on'); +0216 set(gui.edit_handles.PulseTtau,'Enable','on'); +0217 set(gui.edit_handles.PulseDFstart,'Enable','on'); +0218 set(gui.edit_handles.PulseTwait,'Enable','off'); +0219 onPopupPulseType(gui.popup_handles.PulseType); +0220 data = getappdata(fig,'data'); +0221 +0222 elseif isPrePol == 1 && isPulse == 1 % pre-polarization + pulse +0223 data.basic.type = 'prepolpulse'; +0224 +0225 % menu settings +0226 set(gui.menu.view_figures_ramp,'Enable','on'); +0227 set(gui.menu.view_figures_pulse,'Enable','on'); +0228 +0229 % std settings +0230 data.basic.Minit = [1 0 0]; +0231 set(gui.edit_handles.Minitx,'String',num2str(data.basic.Minit(1))); +0232 set(gui.edit_handles.Minity,'String',num2str(data.basic.Minit(2))); +0233 set(gui.edit_handles.Minitz,'String',num2str(data.basic.Minit(3))); +0234 set(gui.edit_handles.Minitx,'Enable','off'); +0235 set(gui.edit_handles.Minity,'Enable','off'); +0236 set(gui.edit_handles.Minitz,'Enable','off'); +0237 setappdata(fig,'data',data); +0238 +0239 % clear magnetization FFT axis +0240 clearSingleAxis(gui.axes_handles.MagFFT); +0241 clearSingleAxis(gui.axes_handles.MagR); +0242 clearSingleAxis(gui.axes_handles.SphereR); +0243 +0244 % activate PrePol settings +0245 set(gui.check_handles.PrePolRDS,'Enable','on'); +0246 set(gui.popup_handles.PrePolRamp,'Enable','on'); +0247 set(gui.edit_handles.PrePolFactor,'Enable','on'); +0248 set(gui.edit_handles.PrePolTheta,'Enable','on'); +0249 set(gui.edit_handles.PrePolPhi,'Enable','on'); +0250 set(gui.edit_handles.PrePolSwitchFactor,'Enable','on'); +0251 set(gui.edit_handles.PrePolTramp,'Enable','on'); +0252 set(gui.edit_handles.PrePolTslope,'Enable','on'); +0253 setappdata(fig,'data',data); +0254 onPopupPrePolRamp(gui.popup_handles.PrePolRamp); +0255 data = getappdata(fig,'data'); +0256 +0257 % activate Pulse settings +0258 set(gui.check_handles.PulseRDP,'Enable','on'); +0259 set(gui.popup_handles.PulseType,'Enable','on'); +0260 set(gui.popup_handles.PulseAxis,'Enable','on'); +0261 set(gui.popup_handles.PulsePolarization,'Enable','on'); +0262 set(gui.edit_handles.PulseB1Factor,'Enable','on'); +0263 set(gui.edit_handles.PulseTtau,'Enable','on'); +0264 set(gui.edit_handles.PulseDFstart,'Enable','on'); +0265 set(gui.edit_handles.PulseTwait,'Enable','on'); +0266 setappdata(fig,'data',data); +0267 onPopupPulseType(gui.popup_handles.PulseType); +0268 data = getappdata(fig,'data'); +0269 end +0270 +0271 % because the settings changed, deactivate the "Animate" button +0272 set(gui.push_handles.Animate,'Enable','off'); +0273 % update all data inside the GUI +0274 setappdata(fig,'data',data); +0275 % update status bar +0276 updateStatusInformation(fig); +0277 else +0278 warndlg({'onCheckPrePolPulse:','There is no figure with the BLOCHUS Tag open.'},... +0279 'BLOCHUS error'); +0280 end +0281 +0282 end +0283 +0284 %------------- END OF CODE -------------- +0285 +0286 %% License: +0287 % GNU GPLv3 +0288 % +0289 % BLOCHUS +0290 % Copyright (C) 2019 Thomas Hiller +0291 % +0292 % This program is free software: you can redistribute it and/or modify +0293 % it under the terms of the GNU General Public License as published by +0294 % the Free Software Foundation, either version 3 of the License, or +0295 % (at your option) any later version. +0296 % +0297 % This program is distributed in the hope that it will be useful, +0298 % but WITHOUT ANY WARRANTY; without even the implied warranty of +0299 % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +0300 % GNU General Public License for more details. +0301 % +0302 % You should have received a copy of the GNU General Public License +0303 % along with this program. If not, see <https://www.gnu.org/licenses/>.
Generated by m2html © 2005
\ No newline at end of file diff --git a/doc/blochus/callbacks/checkbox/onCheckPulseQ.html b/doc/blochus/callbacks/checkbox/onCheckPulseQ.html index c8af8c8..356e7ba 100644 --- a/doc/blochus/callbacks/checkbox/onCheckPulseQ.html +++ b/doc/blochus/callbacks/checkbox/onCheckPulseQ.html @@ -61,7 +61,7 @@

CROSS-REFERENCE INFORMATION ^
 <li><a href=getPulseParameters updates all relevant pulse settings
  • plotPulse plots different pulse parameter
  • This function is called by: +
  • BLOCHUS_createPanelPulse creates "Pulse" settings panel
  • onMenuImport handles the extra menu entries
  • onPopupPulseType selects the pulse type
  • @@ -108,49 +108,53 @@

    SOURCE CODE ^switch get(src,'Value') 0041 case 0 -0042 set(gui.edit_handles.PulseQ,'Enable','off'); -0043 set(gui.edit_handles.PulseQdf,'Enable','off'); -0044 case 1 -0045 set(gui.edit_handles.PulseQ,'Enable','on'); -0046 set(gui.edit_handles.PulseQdf,'Enable','on'); -0047 end -0048 -0049 % update GUI data -0050 setappdata(fig,'data',data); -0051 % update pulse settings -0052 getPulseParameters(gui.figh); -0053 % get GUI data -0054 data = getappdata(fig,'data'); -0055 % plot pulse -0056 plotPulse(gui.figh); -0057 -0058 else -0059 warndlg({'onCheckPulseQ:','There is no figure with the BLOCHUS Tag open.'},... -0060 'BLOCHUS error'); -0061 end -0062 -0063 end -0064 -0065 %------------- END OF CODE -------------- +0042 data.pulse.Istart = 0; +0043 set(gui.edit_handles.PulseIstart,'String',num2str(data.pulse.Istart)); +0044 set(gui.edit_handles.PulseQ,'Enable','off'); +0045 set(gui.edit_handles.PulseQdf,'Enable','off'); +0046 case 1 +0047 data.pulse.Istart = 1; +0048 set(gui.edit_handles.PulseIstart,'String',num2str(data.pulse.Istart)); +0049 set(gui.edit_handles.PulseQ,'Enable','on'); +0050 set(gui.edit_handles.PulseQdf,'Enable','on'); +0051 end +0052 +0053 % update GUI data +0054 setappdata(fig,'data',data); +0055 % update pulse settings +0056 getPulseParameters(gui.figh); +0057 % get GUI data +0058 data = getappdata(fig,'data'); +0059 % plot pulse +0060 plotPulse(gui.figh); +0061 +0062 else +0063 warndlg({'onCheckPulseQ:','There is no figure with the BLOCHUS Tag open.'},... +0064 'BLOCHUS error'); +0065 end 0066 -0067 %% License: -0068 % GNU GPLv3 -0069 % -0070 % BLOCHUS -0071 % Copyright (C) 2019 Thomas Hiller -0072 % -0073 % This program is free software: you can redistribute it and/or modify -0074 % it under the terms of the GNU General Public License as published by -0075 % the Free Software Foundation, either version 3 of the License, or -0076 % (at your option) any later version. -0077 % -0078 % This program is distributed in the hope that it will be useful, -0079 % but WITHOUT ANY WARRANTY; without even the implied warranty of -0080 % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -0081 % GNU General Public License for more details. -0082 % -0083 % You should have received a copy of the GNU General Public License -0084 % along with this program. If not, see <https://www.gnu.org/licenses/>. +0067 end +0068 +0069 %------------- END OF CODE -------------- +0070 +0071 %% License: +0072 % GNU GPLv3 +0073 % +0074 % BLOCHUS +0075 % Copyright (C) 2019 Thomas Hiller +0076 % +0077 % This program is free software: you can redistribute it and/or modify +0078 % it under the terms of the GNU General Public License as published by +0079 % the Free Software Foundation, either version 3 of the License, or +0080 % (at your option) any later version. +0081 % +0082 % This program is distributed in the hope that it will be useful, +0083 % but WITHOUT ANY WARRANTY; without even the implied warranty of +0084 % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +0085 % GNU General Public License for more details. +0086 % +0087 % You should have received a copy of the GNU General Public License +0088 % along with this program. If not, see <https://www.gnu.org/licenses/>.
    Generated by m2html © 2005
    \ No newline at end of file diff --git a/doc/blochus/callbacks/popup/onPopupPulseDFmode.html b/doc/blochus/callbacks/popup/onPopupPulseDFmode.html index dd31982..68a4db9 100644 --- a/doc/blochus/callbacks/popup/onPopupPulseDFmode.html +++ b/doc/blochus/callbacks/popup/onPopupPulseDFmode.html @@ -129,14 +129,14 @@

    SOURCE CODE ^case 3 % tanh GMR 0061 data.pulse.DFmode = 'tanhGMR'; -0062 data.pulse.DFstart = -300; +0062 data.pulse.DFstart = -200; 0063 set(gui.edit_handles.PulseDFstart,'String',num2str(data.pulse.DFstart)); 0064 set(gui.edit_handles.PulseDFA,'Enable','off'); 0065 set(gui.edit_handles.PulseDFB,'Enable','off'); 0066 0067 case 4 % exp 0068 data.pulse.DFmode = 'exp'; -0069 data.pulse.DFstart = -300; +0069 data.pulse.DFstart = -200; 0070 data.pulse.DFA = 10; 0071 set(gui.edit_handles.PulseDFstart,'String',num2str(data.pulse.DFstart)); 0072 set(gui.edit_handles.PulseDFA,'String',num2str(data.pulse.DFA)); diff --git a/doc/blochus/callbacks/popup/onPopupPulseImode.html b/doc/blochus/callbacks/popup/onPopupPulseImode.html index 99e93de..4d9958d 100644 --- a/doc/blochus/callbacks/popup/onPopupPulseImode.html +++ b/doc/blochus/callbacks/popup/onPopupPulseImode.html @@ -120,70 +120,64 @@

    SOURCE CODE ^case 2 % tanh MIDI 0052 data.pulse.Imode = 'tanhMIDI'; -0053 data.pulse.Istart = 0; -0054 data.pulse.IA = 0.5; -0055 data.pulse.IB = 1; -0056 set(gui.edit_handles.PulseIstart,'String',num2str(data.pulse.Istart)); -0057 set(gui.edit_handles.PulseIA,'String',num2str(data.pulse.IA)); -0058 set(gui.edit_handles.PulseIA,'Enable','on'); -0059 set(gui.edit_handles.PulseIB,'String',num2str(data.pulse.IB)); -0060 set(gui.edit_handles.PulseIB,'Enable','on'); -0061 -0062 case 3 % tanh GMR -0063 data.pulse.Imode = 'tanhGMR'; -0064 data.pulse.Istart = 0; -0065 set(gui.edit_handles.PulseIstart,'String',num2str(data.pulse.Istart)); -0066 set(gui.edit_handles.PulseIA,'Enable','off'); -0067 set(gui.edit_handles.PulseIB,'Enable','off'); -0068 -0069 case 4 % exp -0070 data.pulse.Imode = 'exp'; -0071 data.pulse.Istart = 0; -0072 data.pulse.IA = 10; -0073 set(gui.edit_handles.PulseIstart,'String',num2str(data.pulse.Istart)); -0074 set(gui.edit_handles.PulseIA,'String',num2str(data.pulse.IA)); -0075 set(gui.edit_handles.PulseIA,'Enable','on'); -0076 set(gui.edit_handles.PulseIB,'Enable','off'); -0077 end -0078 +0053 data.pulse.IA = 0.5; +0054 data.pulse.IB = 1; +0055 set(gui.edit_handles.PulseIA,'String',num2str(data.pulse.IA)); +0056 set(gui.edit_handles.PulseIA,'Enable','on'); +0057 set(gui.edit_handles.PulseIB,'String',num2str(data.pulse.IB)); +0058 set(gui.edit_handles.PulseIB,'Enable','on'); +0059 +0060 case 3 % tanh GMR +0061 data.pulse.Imode = 'tanhGMR'; +0062 set(gui.edit_handles.PulseIA,'Enable','off'); +0063 set(gui.edit_handles.PulseIB,'Enable','off'); +0064 +0065 case 4 % exp +0066 data.pulse.Imode = 'exp'; +0067 data.pulse.IA = 10; +0068 set(gui.edit_handles.PulseIA,'String',num2str(data.pulse.IA)); +0069 set(gui.edit_handles.PulseIA,'Enable','on'); +0070 set(gui.edit_handles.PulseIB,'Enable','off'); +0071 end +0072 +0073 % update GUI data +0074 setappdata(fig,'data',data); +0075 % update pulse settings +0076 getPulseParameters(gui.figh); +0077 % get GUI data +0078 data = getappdata(fig,'data'); 0079 % update GUI data 0080 setappdata(fig,'data',data); -0081 % update pulse settings -0082 getPulseParameters(gui.figh); -0083 % get GUI data -0084 data = getappdata(fig,'data'); -0085 % update GUI data -0086 setappdata(fig,'data',data); -0087 % plot pulse -0088 plotPulse(gui.figh); -0089 -0090 else -0091 warndlg({'onPopupPulseDFmode:','There is no figure with the BLOCHUS Tag open.'},... -0092 'BLOCHUS error'); -0093 end -0094 -0095 end -0096 -0097 %------------- END OF CODE -------------- -0098 -0099 %% License: -0100 % GNU GPLv3 -0101 % -0102 % BLOCHUS -0103 % Copyright (C) 2019 Thomas Hiller -0104 % -0105 % This program is free software: you can redistribute it and/or modify -0106 % it under the terms of the GNU General Public License as published by -0107 % the Free Software Foundation, either version 3 of the License, or -0108 % (at your option) any later version. -0109 % -0110 % This program is distributed in the hope that it will be useful, -0111 % but WITHOUT ANY WARRANTY; without even the implied warranty of -0112 % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -0113 % GNU General Public License for more details. -0114 % -0115 % You should have received a copy of the GNU General Public License -0116 % along with this program. If not, see <https://www.gnu.org/licenses/>. +0081 % plot pulse +0082 plotPulse(gui.figh); +0083 +0084 else +0085 warndlg({'onPopupPulseDFmode:','There is no figure with the BLOCHUS Tag open.'},... +0086 'BLOCHUS error'); +0087 end +0088 +0089 end +0090 +0091 %------------- END OF CODE -------------- +0092 +0093 %% License: +0094 % GNU GPLv3 +0095 % +0096 % BLOCHUS +0097 % Copyright (C) 2019 Thomas Hiller +0098 % +0099 % This program is free software: you can redistribute it and/or modify +0100 % it under the terms of the GNU General Public License as published by +0101 % the Free Software Foundation, either version 3 of the License, or +0102 % (at your option) any later version. +0103 % +0104 % This program is distributed in the hope that it will be useful, +0105 % but WITHOUT ANY WARRANTY; without even the implied warranty of +0106 % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +0107 % GNU General Public License for more details. +0108 % +0109 % You should have received a copy of the GNU General Public License +0110 % along with this program. If not, see <https://www.gnu.org/licenses/>.
    Generated by m2html © 2005
    \ No newline at end of file diff --git a/doc/blochus/callbacks/popup/onPopupPulseType.html b/doc/blochus/callbacks/popup/onPopupPulseType.html index d39daaf..2ae6a0d 100644 --- a/doc/blochus/callbacks/popup/onPopupPulseType.html +++ b/doc/blochus/callbacks/popup/onPopupPulseType.html @@ -59,7 +59,7 @@

    DESCRIPTION ^CROSS-REFERENCE INFORMATION ^

    This function calls: +
  • onCheckPulseQ updates the checkbox that activates quality factor tuning
  • onEditValue updates all edit field values, checks for wrong inputs and
  • onPopupPulseDFmode selects the frequency modulation for an adiabatic pulse
  • onPopupPulseImode selects the current modulation for an adiabatic pulse
  • getPulseParameters updates all relevant pulse settings
  • plotPulse plots different pulse parameter
  • updateStatusInformation updates all fields inside the bottom status bar
  • This function is called by: @@ -139,193 +139,210 @@

    SOURCE CODE ^'Enable','off'); 0070 set(gui.edit_handles.PulseIB,'Enable','off'); 0071 set(gui.check_handles.PulseQ,'Enable','off'); -0072 -0073 case 2 % pi -0074 data.pulse.Type = 'pi'; -0075 set(gui.text_handles.PulseTtau,'String',['Pulse length ',char(hex2dec('3C4')),' [ms]']); -0076 set(gui.edit_handles.PulseTtau,'String',num2str(data.pulse.Ttau)); -0077 % adjust B1 amplitude -0078 data.pulse.B1Factor = abs(1e3*(pi/(data.basic.gamma*data.basic.B0*data.pulse.Ttau))); -0079 set(gui.edit_handles.PulseB1Factor,'String',num2str(data.pulse.B1Factor)); -0080 % set offset frequency -0081 data.pulse.DFstart = 0; -0082 data.pulse.DFend = 0; -0083 set(gui.text_handles.PulseDF,'String','Offset [Hz]'); -0084 set(gui.edit_handles.PulseDFstart,'String',num2str(data.pulse.DFstart),'Enable','on'); -0085 set(gui.edit_handles.PulseDFend,'String',num2str(data.pulse.DFend),'Enable','off'); -0086 % disable all other frequency stuff -0087 set(gui.popup_handles.PulseDFmode,'Enable','off'); -0088 set(gui.edit_handles.PulseDFA,'Enable','off'); -0089 set(gui.edit_handles.PulseDFB,'Enable','off'); -0090 % set current -0091 data.pulse.Istart = 1; -0092 data.pulse.Iend = 1; -0093 set(gui.edit_handles.PulseIstart,'String',num2str(data.pulse.Istart),'Enable','off'); -0094 set(gui.edit_handles.PulseIend,'String',num2str(data.pulse.Iend),'Enable','off'); -0095 set(gui.popup_handles.PulseImode,'Enable','off'); -0096 set(gui.edit_handles.PulseIA,'Enable','off'); -0097 set(gui.edit_handles.PulseIB,'Enable','off'); -0098 set(gui.check_handles.PulseQ,'Enable','off'); -0099 -0100 case 3 % free -0101 data.pulse.Type = 'free'; -0102 set(gui.text_handles.PulseTtau,'String',['Pulse length ',char(hex2dec('3C4')),' [ms]']); -0103 set(gui.edit_handles.PulseTtau,'String',num2str(data.pulse.Ttau)); -0104 % set offset frequency -0105 data.pulse.DFstart = 0; -0106 data.pulse.DFend = 0; -0107 set(gui.text_handles.PulseDF,'String','Offset [Hz]'); -0108 set(gui.edit_handles.PulseDFstart,'String',num2str(data.pulse.DFstart),'Enable','on'); -0109 set(gui.edit_handles.PulseDFend,'String',num2str(data.pulse.DFend),'Enable','off'); -0110 % disable all other frequency stuff -0111 set(gui.popup_handles.PulseDFmode,'Enable','off'); -0112 set(gui.edit_handles.PulseDFA,'Enable','off'); -0113 set(gui.edit_handles.PulseDFB,'Enable','off'); -0114 % set current -0115 data.pulse.Istart = 1; -0116 data.pulse.Iend = 1; -0117 set(gui.edit_handles.PulseIstart,'String',num2str(data.pulse.Istart),'Enable','off'); -0118 set(gui.edit_handles.PulseIend,'String',num2str(data.pulse.Iend),'Enable','off'); -0119 set(gui.popup_handles.PulseImode,'Enable','off'); -0120 set(gui.edit_handles.PulseIA,'Enable','off'); -0121 set(gui.edit_handles.PulseIB,'Enable','off'); -0122 set(gui.check_handles.PulseQ,'Enable','off'); -0123 -0124 case 4 % AHP -0125 data.pulse.Type = 'AHP'; -0126 set(gui.text_handles.PulseTtau,'String',['Pulse length ',char(hex2dec('3C4')),' [ms]']); -0127 set(gui.edit_handles.PulseTtau,'String',num2str(data.pulse.Ttau)); -0128 -0129 set(gui.text_handles.PulseDF,'String','start [Hz] end [Hz] A B'); -0130 set(gui.popup_handles.PulseDFmode,'Enable','on'); -0131 set(gui.edit_handles.PulseDFstart,'Enable','on'); -0132 set(gui.edit_handles.PulseDFend,'Enable','on'); -0133 set(gui.edit_handles.PulseDFA,'Enable','off'); -0134 set(gui.edit_handles.PulseDFB,'Enable','off'); -0135 -0136 data.pulse.Istart = 0; -0137 data.pulse.Iend = 1; -0138 set(gui.popup_handles.PulseImode,'Enable','on'); -0139 set(gui.edit_handles.PulseIstart,'Enable','on','String',num2str(data.pulse.Istart)); -0140 set(gui.edit_handles.PulseIend,'Enable','on','String',num2str(data.pulse.Iend)); -0141 set(gui.edit_handles.PulseIA,'Enable','off'); -0142 set(gui.edit_handles.PulseIB,'Enable','off'); -0143 set(gui.check_handles.PulseQ,'Enable','on'); -0144 -0145 setappdata(fig,'data',data); -0146 onPopupPulseDFmode(gui.popup_handles.PulseDFmode); -0147 data = getappdata(fig,'data'); -0148 setappdata(fig,'data',data); -0149 onPopupPulseImode(gui.popup_handles.PulseImode); -0150 data = getappdata(fig,'data'); -0151 -0152 case 5 % MIDI OR -0153 data.pulse.Type = 'MIDI_OR'; -0154 % calculate number of periods based on current pulse time and fL -0155 data.pulse.MIDINP = ceil(abs(data.pulse.Ttau/1000 * data.basic.Omega0)); -0156 set(gui.edit_handles.PulseTtau,'String',num2str(data.pulse.MIDINP)); -0157 set(gui.text_handles.PulseTtau,'String','Number of periods'); -0158 set(gui.text_handles.PulseDF,'String','Offset [Hz]'); -0159 set(gui.popup_handles.PulseDFmode,'Enable','off'); -0160 data.pulse.DFstart = 0; -0161 data.pulse.DFend = 0; -0162 set(gui.edit_handles.PulseDFstart,'Enable','off','String',num2str(data.pulse.DFstart)); -0163 set(gui.edit_handles.PulseDFend,'Enable','off','String',num2str(data.pulse.DFend)); -0164 set(gui.edit_handles.PulseDFA,'Enable','off'); -0165 set(gui.edit_handles.PulseDFB,'Enable','off'); -0166 -0167 set(gui.popup_handles.PulseImode,'Enable','off'); -0168 set(gui.edit_handles.PulseIstart,'Enable','on'); -0169 data.pulse.Istart = 0.6; -0170 data.pulse.Iend = 0.6; -0171 set(gui.edit_handles.PulseIstart,'String',num2str(data.pulse.Istart)); -0172 set(gui.edit_handles.PulseIend,'Enable','off'); -0173 set(gui.edit_handles.PulseIA,'Enable','off'); -0174 set(gui.edit_handles.PulseIB,'Enable','off'); -0175 set(gui.check_handles.PulseQ,'Enable','off'); -0176 -0177 % update the GUI as if the number of periods would have been -0178 % changed manually -0179 setappdata(fig,'data',data); -0180 onEditValue(gui.edit_handles.PulseTtau); -0181 data = getappdata(fig,'data'); -0182 -0183 case 6 % MIDI AP -0184 data.pulse.Type = 'MIDI_AP'; -0185 % calculate number of periods based on current pulse time and fL -0186 data.pulse.MIDINP = ceil(abs(data.pulse.Ttau/1000 * data.basic.Omega0)); -0187 set(gui.edit_handles.PulseTtau,'String',num2str(data.pulse.MIDINP)); -0188 set(gui.text_handles.PulseTtau,'String','Number of periods'); -0189 set(gui.text_handles.PulseDF,'String','start [Hz] end [Hz] A B'); -0190 data.pulse.DFmode = 'tanhMIDI'; -0191 set(gui.popup_handles.PulseDFmode,'Enable','on','Value',2); -0192 data.pulse.DFstart = -200; -0193 data.pulse.DFend = 0; -0194 set(gui.edit_handles.PulseDFstart,'Enable','on','String',num2str(data.pulse.DFstart)); -0195 set(gui.edit_handles.PulseDFend,'Enable','on','String',num2str(data.pulse.DFend)); -0196 data.pulse.DFA = 0.7; -0197 data.pulse.DFB = 0; -0198 set(gui.edit_handles.PulseDFA,'Enable','on','String',num2str(data.pulse.DFA)); -0199 set(gui.edit_handles.PulseDFB,'Enable','on','String',num2str(data.pulse.DFB)); -0200 -0201 data.pulse.Imode = 'tanhMIDI'; -0202 set(gui.popup_handles.PulseImode,'Enable','on','Value',2); -0203 data.pulse.Istart = 0.15; -0204 data.pulse.Iend = 0.6; -0205 set(gui.edit_handles.PulseIstart,'Enable','on','String',num2str(data.pulse.Istart)); -0206 set(gui.edit_handles.PulseIend,'Enable','on','String',num2str(data.pulse.Iend)); -0207 data.pulse.IA = 0.5; -0208 data.pulse.IB = 1; -0209 set(gui.edit_handles.PulseIA,'Enable','on','String',num2str(data.pulse.IA)); -0210 set(gui.edit_handles.PulseIB,'Enable','on','String',num2str(data.pulse.IB)); -0211 set(gui.check_handles.PulseQ,'Enable','off'); -0212 -0213 % update the GUI as if the number of periods would have been -0214 % changed manually -0215 setappdata(fig,'data',data); -0216 onEditValue(gui.edit_handles.PulseTtau); -0217 data = getappdata(fig,'data'); -0218 end -0219 -0220 % update GUI data -0221 setappdata(fig,'data',data); -0222 % update pulse settings -0223 getPulseParameters(fig); -0224 % get GUI data -0225 data = getappdata(fig,'data'); -0226 % update GUI data -0227 setappdata(fig,'data',data); -0228 % plot pulse -0229 plotPulse(fig); -0230 % update status bar -0231 updateStatusInformation(fig); -0232 else -0233 warndlg({'onPopupPulseType:','There is no figure with the BLOCHUS Tag open.'},... -0234 'BLOCHUS error'); -0235 end -0236 -0237 end -0238 -0239 %------------- END OF CODE -------------- -0240 -0241 %% License: -0242 % GNU GPLv3 -0243 % -0244 % BLOCHUS -0245 % Copyright (C) 2019 Thomas Hiller -0246 % -0247 % This program is free software: you can redistribute it and/or modify -0248 % it under the terms of the GNU General Public License as published by -0249 % the Free Software Foundation, either version 3 of the License, or -0250 % (at your option) any later version. -0251 % -0252 % This program is distributed in the hope that it will be useful, -0253 % but WITHOUT ANY WARRANTY; without even the implied warranty of -0254 % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -0255 % GNU General Public License for more details. -0256 % -0257 % You should have received a copy of the GNU General Public License -0258 % along with this program. If not, see <https://www.gnu.org/licenses/>. +0072 set(gui.edit_handles.PulseQ,'Enable','off'); +0073 set(gui.edit_handles.PulseQdf,'Enable','off'); +0074 +0075 case 2 % pi +0076 data.pulse.Type = 'pi'; +0077 set(gui.text_handles.PulseTtau,'String',['Pulse length ',char(hex2dec('3C4')),' [ms]']); +0078 set(gui.edit_handles.PulseTtau,'String',num2str(data.pulse.Ttau)); +0079 % adjust B1 amplitude +0080 data.pulse.B1Factor = abs(1e3*(pi/(data.basic.gamma*data.basic.B0*data.pulse.Ttau))); +0081 set(gui.edit_handles.PulseB1Factor,'String',num2str(data.pulse.B1Factor)); +0082 % set offset frequency +0083 data.pulse.DFstart = 0; +0084 data.pulse.DFend = 0; +0085 set(gui.text_handles.PulseDF,'String','Offset [Hz]'); +0086 set(gui.edit_handles.PulseDFstart,'String',num2str(data.pulse.DFstart),'Enable','on'); +0087 set(gui.edit_handles.PulseDFend,'String',num2str(data.pulse.DFend),'Enable','off'); +0088 % disable all other frequency stuff +0089 set(gui.popup_handles.PulseDFmode,'Enable','off'); +0090 set(gui.edit_handles.PulseDFA,'Enable','off'); +0091 set(gui.edit_handles.PulseDFB,'Enable','off'); +0092 % set current +0093 data.pulse.Istart = 1; +0094 data.pulse.Iend = 1; +0095 set(gui.edit_handles.PulseIstart,'String',num2str(data.pulse.Istart),'Enable','off'); +0096 set(gui.edit_handles.PulseIend,'String',num2str(data.pulse.Iend),'Enable','off'); +0097 set(gui.popup_handles.PulseImode,'Enable','off'); +0098 set(gui.edit_handles.PulseIA,'Enable','off'); +0099 set(gui.edit_handles.PulseIB,'Enable','off'); +0100 set(gui.check_handles.PulseQ,'Enable','off'); +0101 set(gui.edit_handles.PulseQ,'Enable','off'); +0102 set(gui.edit_handles.PulseQdf,'Enable','off'); +0103 +0104 case 3 % free +0105 data.pulse.Type = 'free'; +0106 set(gui.text_handles.PulseTtau,'String',['Pulse length ',char(hex2dec('3C4')),' [ms]']); +0107 set(gui.edit_handles.PulseTtau,'String',num2str(data.pulse.Ttau)); +0108 % set offset frequency +0109 data.pulse.DFstart = 0; +0110 data.pulse.DFend = 0; +0111 set(gui.text_handles.PulseDF,'String','Offset [Hz]'); +0112 set(gui.edit_handles.PulseDFstart,'String',num2str(data.pulse.DFstart),'Enable','on'); +0113 set(gui.edit_handles.PulseDFend,'String',num2str(data.pulse.DFend),'Enable','off'); +0114 % disable all other frequency stuff +0115 set(gui.popup_handles.PulseDFmode,'Enable','off'); +0116 set(gui.edit_handles.PulseDFA,'Enable','off'); +0117 set(gui.edit_handles.PulseDFB,'Enable','off'); +0118 % set current +0119 data.pulse.Istart = 1; +0120 data.pulse.Iend = 1; +0121 set(gui.edit_handles.PulseIstart,'String',num2str(data.pulse.Istart),'Enable','off'); +0122 set(gui.edit_handles.PulseIend,'String',num2str(data.pulse.Iend),'Enable','off'); +0123 set(gui.popup_handles.PulseImode,'Enable','off'); +0124 set(gui.edit_handles.PulseIA,'Enable','off'); +0125 set(gui.edit_handles.PulseIB,'Enable','off'); +0126 set(gui.check_handles.PulseQ,'Enable','off'); +0127 set(gui.edit_handles.PulseQ,'Enable','off'); +0128 set(gui.edit_handles.PulseQdf,'Enable','off'); +0129 +0130 case 4 % AHP +0131 data.pulse.Type = 'AHP'; +0132 set(gui.text_handles.PulseTtau,'String',['Pulse length ',char(hex2dec('3C4')),' [ms]']); +0133 set(gui.edit_handles.PulseTtau,'String',num2str(data.pulse.Ttau)); +0134 +0135 set(gui.text_handles.PulseDF,'String','start [Hz] end [Hz] A B'); +0136 set(gui.popup_handles.PulseDFmode,'Enable','on'); +0137 set(gui.edit_handles.PulseDFstart,'Enable','on'); +0138 set(gui.edit_handles.PulseDFend,'Enable','on'); +0139 set(gui.edit_handles.PulseDFA,'Enable','off'); +0140 set(gui.edit_handles.PulseDFB,'Enable','off'); +0141 +0142 if get(gui.check_handles.PulseQ,'Value') == 0 +0143 data.pulse.Istart = 0; +0144 else +0145 data.pulse.Istart = 1; +0146 end +0147 data.pulse.Iend = 1; +0148 set(gui.popup_handles.PulseImode,'Enable','on'); +0149 set(gui.edit_handles.PulseIstart,'Enable','on','String',num2str(data.pulse.Istart)); +0150 set(gui.edit_handles.PulseIend,'Enable','on','String',num2str(data.pulse.Iend)); +0151 set(gui.edit_handles.PulseIA,'Enable','off'); +0152 set(gui.edit_handles.PulseIB,'Enable','off'); +0153 set(gui.check_handles.PulseQ,'Enable','on'); +0154 +0155 setappdata(fig,'data',data); +0156 onCheckPulseQ(gui.check_handles.PulseQ); +0157 data = getappdata(fig,'data'); +0158 setappdata(fig,'data',data); +0159 onPopupPulseDFmode(gui.popup_handles.PulseDFmode); +0160 data = getappdata(fig,'data'); +0161 setappdata(fig,'data',data); +0162 onPopupPulseImode(gui.popup_handles.PulseImode); +0163 data = getappdata(fig,'data'); +0164 +0165 case 5 % MIDI OR +0166 data.pulse.Type = 'MIDI_OR'; +0167 % calculate number of periods based on current pulse time and fL +0168 data.pulse.MIDINP = ceil(abs(data.pulse.Ttau/1000 * data.basic.Omega0)); +0169 set(gui.edit_handles.PulseTtau,'String',num2str(data.pulse.MIDINP)); +0170 set(gui.text_handles.PulseTtau,'String','Number of periods'); +0171 set(gui.text_handles.PulseDF,'String','Offset [Hz]'); +0172 set(gui.popup_handles.PulseDFmode,'Enable','off'); +0173 data.pulse.DFstart = 0; +0174 data.pulse.DFend = 0; +0175 set(gui.edit_handles.PulseDFstart,'Enable','off','String',num2str(data.pulse.DFstart)); +0176 set(gui.edit_handles.PulseDFend,'Enable','off','String',num2str(data.pulse.DFend)); +0177 set(gui.edit_handles.PulseDFA,'Enable','off'); +0178 set(gui.edit_handles.PulseDFB,'Enable','off'); +0179 +0180 set(gui.popup_handles.PulseImode,'Enable','off'); +0181 set(gui.edit_handles.PulseIstart,'Enable','on'); +0182 data.pulse.Istart = 0.6; +0183 data.pulse.Iend = 0.6; +0184 set(gui.edit_handles.PulseIstart,'String',num2str(data.pulse.Istart)); +0185 set(gui.edit_handles.PulseIend,'Enable','off'); +0186 set(gui.edit_handles.PulseIA,'Enable','off'); +0187 set(gui.edit_handles.PulseIB,'Enable','off'); +0188 set(gui.check_handles.PulseQ,'Enable','off'); +0189 set(gui.edit_handles.PulseQ,'Enable','off'); +0190 set(gui.edit_handles.PulseQdf,'Enable','off'); +0191 +0192 % update the GUI as if the number of periods would have been +0193 % changed manually +0194 setappdata(fig,'data',data); +0195 onEditValue(gui.edit_handles.PulseTtau); +0196 data = getappdata(fig,'data'); +0197 +0198 case 6 % MIDI AP +0199 data.pulse.Type = 'MIDI_AP'; +0200 % calculate number of periods based on current pulse time and fL +0201 data.pulse.MIDINP = ceil(abs(data.pulse.Ttau/1000 * data.basic.Omega0)); +0202 set(gui.edit_handles.PulseTtau,'String',num2str(data.pulse.MIDINP)); +0203 set(gui.text_handles.PulseTtau,'String','Number of periods'); +0204 set(gui.text_handles.PulseDF,'String','start [Hz] end [Hz] A B'); +0205 data.pulse.DFmode = 'tanhMIDI'; +0206 set(gui.popup_handles.PulseDFmode,'Enable','on','Value',2); +0207 data.pulse.DFstart = -200; +0208 data.pulse.DFend = 0; +0209 set(gui.edit_handles.PulseDFstart,'Enable','on','String',num2str(data.pulse.DFstart)); +0210 set(gui.edit_handles.PulseDFend,'Enable','on','String',num2str(data.pulse.DFend)); +0211 data.pulse.DFA = 0.7; +0212 data.pulse.DFB = 0; +0213 set(gui.edit_handles.PulseDFA,'Enable','on','String',num2str(data.pulse.DFA)); +0214 set(gui.edit_handles.PulseDFB,'Enable','on','String',num2str(data.pulse.DFB)); +0215 +0216 data.pulse.Imode = 'tanhMIDI'; +0217 set(gui.popup_handles.PulseImode,'Enable','on','Value',2); +0218 data.pulse.Istart = 0.15; +0219 data.pulse.Iend = 0.6; +0220 set(gui.edit_handles.PulseIstart,'Enable','on','String',num2str(data.pulse.Istart)); +0221 set(gui.edit_handles.PulseIend,'Enable','on','String',num2str(data.pulse.Iend)); +0222 data.pulse.IA = 0.5; +0223 data.pulse.IB = 1; +0224 set(gui.edit_handles.PulseIA,'Enable','on','String',num2str(data.pulse.IA)); +0225 set(gui.edit_handles.PulseIB,'Enable','on','String',num2str(data.pulse.IB)); +0226 set(gui.check_handles.PulseQ,'Enable','off'); +0227 set(gui.edit_handles.PulseQ,'Enable','off'); +0228 set(gui.edit_handles.PulseQdf,'Enable','off'); +0229 +0230 % update the GUI as if the number of periods would have been +0231 % changed manually +0232 setappdata(fig,'data',data); +0233 onEditValue(gui.edit_handles.PulseTtau); +0234 data = getappdata(fig,'data'); +0235 end +0236 +0237 % update GUI data +0238 setappdata(fig,'data',data); +0239 % update pulse settings +0240 getPulseParameters(fig); +0241 % get GUI data +0242 data = getappdata(fig,'data'); +0243 % update GUI data +0244 setappdata(fig,'data',data); +0245 % plot pulse +0246 plotPulse(fig); +0247 % update status bar +0248 updateStatusInformation(fig); +0249 else +0250 warndlg({'onPopupPulseType:','There is no figure with the BLOCHUS Tag open.'},... +0251 'BLOCHUS error'); +0252 end +0253 +0254 end +0255 +0256 %------------- END OF CODE -------------- +0257 +0258 %% License: +0259 % GNU GPLv3 +0260 % +0261 % BLOCHUS +0262 % Copyright (C) 2019 Thomas Hiller +0263 % +0264 % This program is free software: you can redistribute it and/or modify +0265 % it under the terms of the GNU General Public License as published by +0266 % the Free Software Foundation, either version 3 of the License, or +0267 % (at your option) any later version. +0268 % +0269 % This program is distributed in the hope that it will be useful, +0270 % but WITHOUT ANY WARRANTY; without even the implied warranty of +0271 % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +0272 % GNU General Public License for more details. +0273 % +0274 % You should have received a copy of the GNU General Public License +0275 % along with this program. If not, see <https://www.gnu.org/licenses/>.
    Generated by m2html © 2005
    \ No newline at end of file diff --git a/doc/blochus/functions/interface/menu.html b/doc/blochus/functions/interface/menu.html index 53c5991..0bddce3 100644 --- a/doc/blochus/functions/interface/menu.html +++ b/doc/blochus/functions/interface/menu.html @@ -18,7 +18,7 @@

    Index for blochus\functions\interface

    Matlab files in this directory:

    +
  • clearSingleAxis
  • findParentOfType
  • getAngleBetweenVectors
  • getPulseParameters
  • getRampParameters
  • minimizePanel
  • onFigureSizeChange
  • plotBSphere
  • plotPulse
  • plotRamp
  • plotResults
  • switchToolTips
  • updateStatusInformation
  • Other Matlab-specific files in this directory: