From 44ea7a75da15d1e2abcfac49f3faf9843b00fff1 Mon Sep 17 00:00:00 2001 From: Dung Truong Date: Thu, 8 Aug 2024 13:36:04 -0400 Subject: [PATCH] update NFT --- ...=> Chapter-01-Getting-Started-with-NFT.md} | 6 +- ...hapter-02-Head-Modeling-from-MR-Images.md} | 38 +- ...=> Chapter-03-Forward-Model-Generation.md} | 6 +- ...Examples.md => Chapter-04-NFT-Examples.md} | 18 +- ... Chapter-05-NFT-Commands-and-Functions.md} | 6 +- ...NFM_Toolboox_UsersManual_html_28d79845.gif | Bin 0 -> 5565 bytes ...NFM_Toolboox_UsersManual_html_2aaa1b22.gif | Bin 0 -> 32150 bytes ...NFM_Toolboox_UsersManual_html_3bc436a3.gif | Bin 0 -> 3946 bytes ...NFM_Toolboox_UsersManual_html_56c540a1.gif | Bin 0 -> 5222 bytes ...NFM_Toolboox_UsersManual_html_7b73089f.gif | Bin 0 -> 4922 bytes ...FM_Toolboox_UsersManual_html_m350221ff.gif | Bin 0 -> 4089 bytes ...FM_Toolboox_UsersManual_html_m69f7a676.gif | Bin 0 -> 4458 bytes ...FM_Toolboox_UsersManual_html_m788a9795.gif | Bin 0 -> 3994 bytes .../{NFT_Appendix_A.md => NFT-Appendix-A.md} | 6 +- plugins/NFT/NFT-Appendix-B.md | 618 ++++++++++++++++++ .../{NFT_Appendix_C.md => NFT-Appendix-C.md} | 6 +- plugins/NFT/NFT_Appendix_B.md | 597 ----------------- plugins/NFT/index.md | 21 +- 18 files changed, 657 insertions(+), 665 deletions(-) rename plugins/NFT/{Chapter_01_Getting_Started_with_NFT.md => Chapter-01-Getting-Started-with-NFT.md} (97%) rename plugins/NFT/{Chapter_02_Head_Modeling_from_MR_Images.md => Chapter-02-Head-Modeling-from-MR-Images.md} (98%) rename plugins/NFT/{Chapter_03_Forward_Model_Generation.md => Chapter-03-Forward-Model-Generation.md} (98%) rename plugins/NFT/{Chapter_04_NFT_Examples.md => Chapter-04-NFT-Examples.md} (98%) rename plugins/NFT/{Chapter_05_NFT_Commands_and_Functions.md => Chapter-05-NFT-Commands-and-Functions.md} (98%) create mode 100644 plugins/NFT/NFM_Toolboox_UsersManual_html_28d79845.gif create mode 100644 plugins/NFT/NFM_Toolboox_UsersManual_html_2aaa1b22.gif create mode 100644 plugins/NFT/NFM_Toolboox_UsersManual_html_3bc436a3.gif create mode 100644 plugins/NFT/NFM_Toolboox_UsersManual_html_56c540a1.gif create mode 100644 plugins/NFT/NFM_Toolboox_UsersManual_html_7b73089f.gif create mode 100644 plugins/NFT/NFM_Toolboox_UsersManual_html_m350221ff.gif create mode 100644 plugins/NFT/NFM_Toolboox_UsersManual_html_m69f7a676.gif create mode 100644 plugins/NFT/NFM_Toolboox_UsersManual_html_m788a9795.gif rename plugins/NFT/{NFT_Appendix_A.md => NFT-Appendix-A.md} (97%) create mode 100644 plugins/NFT/NFT-Appendix-B.md rename plugins/NFT/{NFT_Appendix_C.md => NFT-Appendix-C.md} (97%) delete mode 100644 plugins/NFT/NFT_Appendix_B.md diff --git a/plugins/NFT/Chapter_01_Getting_Started_with_NFT.md b/plugins/NFT/Chapter-01-Getting-Started-with-NFT.md similarity index 97% rename from plugins/NFT/Chapter_01_Getting_Started_with_NFT.md rename to plugins/NFT/Chapter-01-Getting-Started-with-NFT.md index a0fd0dbf..3c5ede7e 100644 --- a/plugins/NFT/Chapter_01_Getting_Started_with_NFT.md +++ b/plugins/NFT/Chapter-01-Getting-Started-with-NFT.md @@ -1,9 +1,11 @@ --- layout: default -title: NFT -long_title: NFT parent: NFT grand_parent: Plugins +render_with_liquid: false + +title: Chapter-01-Getting-Started-with-NFT +long_title: Chapter-01-Getting-Started-with-NFT --- Introduction ------------ diff --git a/plugins/NFT/Chapter_02_Head_Modeling_from_MR_Images.md b/plugins/NFT/Chapter-02-Head-Modeling-from-MR-Images.md similarity index 98% rename from plugins/NFT/Chapter_02_Head_Modeling_from_MR_Images.md rename to plugins/NFT/Chapter-02-Head-Modeling-from-MR-Images.md index aa99119f..f0954d25 100644 --- a/plugins/NFT/Chapter_02_Head_Modeling_from_MR_Images.md +++ b/plugins/NFT/Chapter-02-Head-Modeling-from-MR-Images.md @@ -1,21 +1,19 @@ --- layout: default -title: NFT -long_title: NFT parent: NFT grand_parent: Plugins +render_with_liquid: false + +title: Chapter-02-Head-Modeling-from-MR-Images +long_title: Chapter-02-Head-Modeling-from-MR-Images --- The steps of head modeling are segmentation, mesh generation, and co-registration of electrode locations with scalp surface. User may also generate a source space to be used in the solution of the inverse problem. Figure 2 shows the steps of head modeling using MR images. -
- ![Figure 2: steps of head modeling using MR images](NFM_Toolboox_UsersManual_html_2aaa1b22.gif) -
- Each step in realistic head modeling is implemented as a separate GUI module reachable from the main menu. These modules are described in the following sub-sections. @@ -51,13 +49,9 @@ panel allows the user to select which image to display on the image panels. The available choices are the MR volume, the filtered volume or various stages of segmentation. -
- ![](NFT_from_MRI_segmentation.png) ..... ![Figure 3: Interface for segmentation](NFT_segmentation.png) -
- The panel on the right of the segmentation GUI shows the segmentation steps that will be performed on the volume in order: @@ -111,15 +105,11 @@ watershed segmentation algorithm, and the default values work for most images. The result of Brain segmentation can be seen by selecting “Brain Mask”. -
- ![Figure 4: Interface of segmentation during setting lowest point for cerebellum.](NFT_cerebellarlowpoint.png "wikilink") ...... ![Figure 5: Interface of segmentation during a seed point selection on WM.](NFT_WMpointselection.png "wikilink") -
- ### Outer skull segmentation For outer skull segmentation, seed points for the eye lobes are selected @@ -130,17 +120,11 @@ click on both eye lobes. Figure 7 shows the matlab figure that pops-up to click on eye lobes. Once the eyes are selected the outer skull is segmented and can be seen by “Outer skull mask”. -
- ![Figure 6: Interface of segmentation to select an axial slice where the eyes are clearly observed.](NFT_eyeselection.png "wikilink") -
-
![Figure 7: Matlab figure to click on eye lobes.](NFT_eyelobes.png "wikilink") -
- ### Inner skull segmentation Inner skull segmentation does not require any user input. After the @@ -188,13 +172,10 @@ mesh file is suitable to be used directly by the BEM solver. The format of the mesh file is given in [Appendix A](/NFT_Appendix_A "wikilink"). The mesh generation process is described below. -
- ![](NFT_from_MRI_mesh_gen.png "wikilink") ..... ![Figure 8: Interface for mesh generation.](NFT_meshgeneration_ui.png "wikilink") -
Mesh Generation module creates triangular meshes that fits the boundaries of the segmentation. The aim is to approximate the geometry @@ -246,13 +227,9 @@ A LFM using a regular grid source space can be used in single dipole parametric inverse problem solution to find a coarse estimate of the dipole position. -
- ![](NFT_from_MRI_source_space.png "wikilink") ..... ![Figure 9: Interface for source space generation.](NFT_sourcespacegen.png "wikilink") -
- Co-registration of electrode locations -------------------------------------- @@ -287,12 +264,9 @@ the electrode positions change. Therefore, the co-registration output is specific to a session. The result of electrode co-registration is saved as Session_Name_Subject_Name_headsensors.sens in ASCII format. -
- ![](NFT_from_MRI_coreg.png "wikilink") .... ![Figure 10: Interface for co-registration.](NFT_coregistration.png "wikilink") -
Head Modeling using Template Warping ------------------------------------ @@ -332,13 +306,9 @@ whole head model, and some electrodes may fall out of the template mesh. In Figure 11 the interface for warping module is shown. -
- ![](NFT_from_Warping.png "wikilink") ..... ![Figure 11: Interface warping of a template head model.](NFT_warping_ui.png "wikilink") -
- ------------------------------------------------------------------------ References diff --git a/plugins/NFT/Chapter_03_Forward_Model_Generation.md b/plugins/NFT/Chapter-03-Forward-Model-Generation.md similarity index 98% rename from plugins/NFT/Chapter_03_Forward_Model_Generation.md rename to plugins/NFT/Chapter-03-Forward-Model-Generation.md index 8ed4d3f1..eff8fcc6 100644 --- a/plugins/NFT/Chapter_03_Forward_Model_Generation.md +++ b/plugins/NFT/Chapter-03-Forward-Model-Generation.md @@ -1,9 +1,11 @@ --- layout: default -title: NFT -long_title: NFT parent: NFT grand_parent: Plugins +render_with_liquid: false + +title: Chapter-03-Forward-Model-Generation +long_title: Chapter-03-Forward-Model-Generation --- Forward Problem: Boundary Element Method ---------------------------------------- diff --git a/plugins/NFT/Chapter_04_NFT_Examples.md b/plugins/NFT/Chapter-04-NFT-Examples.md similarity index 98% rename from plugins/NFT/Chapter_04_NFT_Examples.md rename to plugins/NFT/Chapter-04-NFT-Examples.md index 221a2505..226f88b0 100644 --- a/plugins/NFT/Chapter_04_NFT_Examples.md +++ b/plugins/NFT/Chapter-04-NFT-Examples.md @@ -1,9 +1,11 @@ --- layout: default -title: NFT -long_title: NFT parent: NFT grand_parent: Plugins +render_with_liquid: false + +title: Chapter-04-NFT-Examples +long_title: Chapter-04-NFT-Examples --- In this section, two head modeling examples are presented. Both of these examples use the same subject. The first example generates a realistic @@ -21,8 +23,6 @@ through segmentation and mesh generation steps. The mesh consists of scalp, skull, csf, and brain layers for a total of 16016 nodes and 32024 elements. The individual layers can be seen in Figure 13. -
- (a) ![a](NFM_Toolboox_UsersManual_html_56c540a1.gif "wikilink") ... (b) @@ -32,8 +32,6 @@ elements. The individual layers can be seen in Figure 13. (d) ![d](NFM_Toolboox_UsersManual_html_m69f7a676.gif "wikilink") -
- Figure 13: BEM model of the scalp, skull, csf and the brain obtained from an MR image. (a) scalp mesh, (b) skull mesh, (c) CSF mesh, (d) brain mesh. @@ -41,20 +39,14 @@ brain mesh. After mesh generation, the electrodes and the realistic mesh is co-registered. The result of co-registration can be seed in Figure 14. -
- ![Figure 14: Registered electrode locations on the scalp mesh.](NFM_Toolboox_UsersManual_html_7b73089f.gif "wikilink") -
- The second example assumes that the only available subject data is the 141 digitized electrode locations. For warping the template MNI mesh is used, which has three layers and 3000 nodes and 5988 elements. This is the standard mesh that is also used by other BEM solvers in the literature. The results of warping can be seen in Figure 15. -
- (a) ![a](NFM_Toolboox_UsersManual_html_3bc436a3.gif "wikilink") ... (b) @@ -64,8 +56,6 @@ literature. The results of warping can be seen in Figure 15. (d) ![d](NFM_Toolboox_UsersManual_html_m788a9795.gif "wikilink") -
- Figure 15: BEM model of the scalp, skull, the brain obtained by warping a template head model to electrode locations. (a) scalp mesh, (b) skull mesh, (c) brain mesh, (d) electrode locations. diff --git a/plugins/NFT/Chapter_05_NFT_Commands_and_Functions.md b/plugins/NFT/Chapter-05-NFT-Commands-and-Functions.md similarity index 98% rename from plugins/NFT/Chapter_05_NFT_Commands_and_Functions.md rename to plugins/NFT/Chapter-05-NFT-Commands-and-Functions.md index f11ab5eb..03453fbe 100644 --- a/plugins/NFT/Chapter_05_NFT_Commands_and_Functions.md +++ b/plugins/NFT/Chapter-05-NFT-Commands-and-Functions.md @@ -1,9 +1,11 @@ --- layout: default -title: NFT -long_title: NFT parent: NFT grand_parent: Plugins +render_with_liquid: false + +title: Chapter-05-NFT-Commands-and-Functions +long_title: Chapter-05-NFT-Commands-and-Functions --- This section summarizes the MATLAB commands and data structures used for each stage of head modeling using the NFT toolbox. The function diff --git a/plugins/NFT/NFM_Toolboox_UsersManual_html_28d79845.gif b/plugins/NFT/NFM_Toolboox_UsersManual_html_28d79845.gif new file mode 100644 index 0000000000000000000000000000000000000000..b95ff362e0d3c0fab018e8d80083386c40e67c1c GIT binary patch literal 5565 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 eL6^kceO^gdmkn(_^4*4~$eE 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

MwV-|3icL(9<<<19B9Gp+vc*JId+)dIOD}bV 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 literal 0 HcmV?d00001 diff --git a/plugins/NFT/NFM_Toolboox_UsersManual_html_56c540a1.gif b/plugins/NFT/NFM_Toolboox_UsersManual_html_56c540a1.gif new file mode 100644 index 0000000000000000000000000000000000000000..f0f3a543b11cb0dad0c1210db6d238c9ecad0633 GIT binary patch literal 5222 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 literal 0 HcmV?d00001 diff --git a/plugins/NFT/NFM_Toolboox_UsersManual_html_7b73089f.gif b/plugins/NFT/NFM_Toolboox_UsersManual_html_7b73089f.gif new file mode 100644 index 0000000000000000000000000000000000000000..c7bd3d82f3dd8906878d69938899c1cd90dde639 GIT binary patch literal 4922 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 literal 0 HcmV?d00001 diff --git a/plugins/NFT/NFM_Toolboox_UsersManual_html_m350221ff.gif b/plugins/NFT/NFM_Toolboox_UsersManual_html_m350221ff.gif new file mode 100644 index 0000000000000000000000000000000000000000..d507daf66efab337acd07c9d532953ca9ff0f64b GIT binary patch literal 4089 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 literal 0 HcmV?d00001 diff --git a/plugins/NFT/NFT_Appendix_A.md b/plugins/NFT/NFT-Appendix-A.md similarity index 97% rename from plugins/NFT/NFT_Appendix_A.md rename to plugins/NFT/NFT-Appendix-A.md index 74ce0378..724df9c9 100644 --- a/plugins/NFT/NFT_Appendix_A.md +++ b/plugins/NFT/NFT-Appendix-A.md @@ -1,9 +1,11 @@ --- layout: default -title: NFT -long_title: NFT parent: NFT grand_parent: Plugins +render_with_liquid: false + +title: NFT-Appendix-A +long_title: NFT-Appendix-A --- BEM Mesh Format --------------- diff --git a/plugins/NFT/NFT-Appendix-B.md b/plugins/NFT/NFT-Appendix-B.md new file mode 100644 index 00000000..07f32515 --- /dev/null +++ b/plugins/NFT/NFT-Appendix-B.md @@ -0,0 +1,618 @@ +--- +layout: default +parent: NFT +grand_parent: Plugins +render_with_liquid: false + +title: NFT-Appendix-B +long_title: NFT-Appendix-B +--- +bem_create_model +---------------- +``` +bem_create_model() - Creates a model structure combining a mesh,   +                     conductivity information and BEM parameters.   + +Usage:   +  >> model = bem_create_model(name, mesh, cond, mod);   + +Inputs:   +  name - model name, used as a base filename for matrices   +  mesh - mesh structure obtained from BEM_LOAD_MESH   +  cond - conductivity values for mesh tissue classes   +         vector, starting from first tissue,   +         0 is reserved for air   +  mod  - index of the modified boundary, for use with IPA.  +         If mod <= 0, IPA is not used.   + +Outputs:   +  model - model structure with the following fields.   + +Model Structure:   +  name      - name of the model   +  mesh      - mesh structure   +  cond      - conductivity vector   +  mod       - modified boundary information   +  node_cond - Average conductivity around a node   + +Optional Fields:   +  ind_mod       - node indices of the modified boundary   +  ind_imesh     - node indices of the inner mesh   +  ind_imesh_mod - node indices of the modified boundary   +                  relative to the inner mesh +``` + +bem_create_session +------------------ +``` +bem_create_session() - Creates a session structure combining a model,   +      and sensor data. The session structure contains a model for a  +      complete head and electrode ’recording session’. Data recorded  +      using the same set of sensor locations is considered   +      to be in the same session.   + +Usage:   +      >> session = bem_create_session(name, model, Smatrix);   + +Inputs:   +  name    - session name, used as a base filename for matrices   +  model   - model structure obtained from bem_create_model().   +  Smatrix - matrix that defines EEG electrodes in terms of   +    the BEM mesh. Each electrode is a weighted sum of the nodes   +    of the element. The weights are determined by the element   +    shape functions. The format of the Smatrix is as follows:   +         [electrode_index node_index weight]   +    The rows of the matrix must be sorted by electrode_index   +    and there can be more than one row with a given electrode   +    index. The Smatrix can be constructed using one of these:   +    bem_smatrix_from_nodes() and bem_smatrix_from_points().   + +Outputs:   +  session - session structure with the fields defined in the next section   + +Session Structure:   +  name    - name of the session   +  model   - model structure   +  Smatrix - EEG sensor information matrix.   +  num_electrodes - number of EEG sensors +``` + +bem_generate_eeg_matrices +------------------------- +``` +bem_generate_eeg_matrices() - Generates BEM matrices for a BEM model.   + +Usage:   +      >> bem_generate_eeg_matrices(model);   + +Inputs:   +  model - model structure generated by BEM_CREATE_MODEL   + +Notes: The matrices are created using the name given in the model structure   +      The following matrices are created on disk, and can be read   +      using the bem_load_model_matrix() function   +      .cmt - BEM coefficient matrix   +      .dmt - band of Coefficient matrix used by IPA   +      .imt - inner Coefficient Matrix used by IPA + +bem_generate_eeg_transfer_matrix +-------------------------------- + +bem_generate_eeg_transfer_matrix() - Generates EEG transfer matrix.   + +Usage:   +  >> session = bem_generate_eeg_transfer_matrix(session);   + +Inputs:   +  session - session structure generated by BEM_CREATE_SESSION   + +Outputs:   +  session - session object; since it may be modified when   +            loading model matrices.   + +Notes: The matrix is created using the name given in the session structure   +      with "tmte" extension for the EEG transfer matrix. It can be loaded   +      using the bem_load_transfer_matrix(). +``` + +nft_get_config +-------------- +``` +nft_get_config() - Returns the toolbox configuration information   +      program path names, defaults, etc. Other toolbox functions call this m-file   +      to read their configuration.   + +Outputs:   +  conf - config structure.   + +Config Structures:   +  bem_matrix_program - name of the program that creates EEG matrices.   +  asc - name of adaptive skeleton climbing program.   +  qslim - name of the coarsening program.   +  showmesh - name of the correction and smoothing program. +``` + +bem_load_mesh +------------- +``` +bem_load_mesh() - Loads a BEM mesh.   + +Usage:   +  >> mesh = bem_load_mesh(name);   + +Inputs:   +  name - mesh name excluding the extension.   + +Outputs:   +  mesh - mesh structure.   + +Mesh Structure:   +  name  - mesh name   +  coord - node coordinates   +  elem  - elements (connectivity information)   +  num_nodes - number of nodes   +  num_elements - number of elements   +  num_boundaries - number of boundaries   +  num_node_elem - number of nodes per element   +  num_class - number of tissue classes   +  bnd - boundary information array   +       [num_elements inner_tissue_class outer_tissue_class] +``` + +bem_load_model_matrix +--------------------- +``` +bem_load_model_matrix() - Loads the BEM matrix with extension ’ext’.   +The matrix file name is defined by .   +Matrix is placed into the model with a field name ’ext’   + +Usage:   +  >> model = bem_load_model_matrix(model, ext);   + +Inputs:   +  model - model structure generated by bem_create_model().   +  ext - describes the matrix type. The following types are defined:   +    ’cmt’ - BEM Coefficient matrix   +    ’dmt’ - band of Coefficient matrix used by IPA   +    ’imt’ - inner Coefficient Matrix used by IPA   +    ’iinv’ - inverse of the inner coefficient matrix. This matrix is   +      computed from ’imt’ if the file does not exist.   + +Outputs:   +  model - model structure. +``` + +bem_load_transfer_matrix +------------------------ +``` +bem_load_transfer_matrix() Loads the BEM transfer matrix with extension ’ext’.   +      The matrix file name is defined by ..   +      Matrix is placed into the session with a field name ’ext’.   + +Usage:   +  >> session = bem_load_transfer_matrix(session, ext);   + +Inputs:   +  session - session structure generated by bem_create_session().   +  ext - describes the matrix type. The following type is defined   +    ’tmte’ - BEM Transfer matrix.   + +Outputs:   +  session - updated session structure. +``` + +bem_smatrix_from_nodes +---------------------- +``` +bem_smatrix_from_nodes() - Generates Smatrix from nodes of a mesh.   +      Smatrix is the sensor information matrix used in   +      bem_create_session(). See bem_create_session() for more information.   + +Usage:   +  >> Smatrix = bem_smatrix_from_nodes(mesh, nodes);   + +Inputs:   +  mesh - mesh structure   +  nodes - vector of node indices.   + +Outputs:   +  Smatrix - defines one electrode per node.  +``` + +bem_solve_dipoles_eeg +--------------------- +``` +bem_solve_dipoles_eeg() - Computes the potential arising from the given dipoles   +at the sensor locations defined by the session.   + +Usage:   +  >> [pot, session] = bem_solve_dipoles_eeg(session, dipoles);   + +Inputs:   +  session - session structure defining the model and the sensors.   +  dipoles - dipole matrix. Each row defines a dipole as follows:   +           [x y z px py pz]   + +Outputs:   +   pot - potentials at the sensors due to simultaneous activation of   +         the dipoles.   +   session - the updated session structure, in case any matrices are   +             loaded, modifying the underlying model. +``` + +bem_solve_lfm_eeg +----------------- +``` +bem_solve_lfm_eeg() - Computes the LFM arising from given dipoles   +at the sensor locations defined by the session.   + +Usage:   +  >> [pot, session] = bem_solve_lfm_eeg(session, dipoles);   + +Inputs:   +  session - session structure defining the model and the sensors   +  dipoles - dipole matrix. Each row defines a dipole as follows:   +           [x y z px py pz]   + +Outputs:   +  pot - the LFM at the sensors produced by activation of each dipole,   +  session - updated session structure in case any matrices are   +            loaded, modifying the underlying model. +``` + +Coregistration +-------------- +``` +Coregistration() - Produces the GUI for co-registration of electrode locations   + to the scalp mesh.   + +Usage:   +  >> Coregistration(varargin);   + +Optional Arguments:   +  ’subjectdir’ - (string) Output folder. The results will be saved   +   in this folder.   +  ’subject’ - (string) Subject name. The subject-specific output files will start   +   with this name.   +  ’session’ - (string) Session name. The file name for registered electrodes will   +   start with this name. +``` + +Forward_Problem_Solution +------------------------ +``` +Forward_Problem_Solution() - Produces the forward model generation GUI.   + +Usage:   +  >> Forward_Problem_Solution(varargin);   + +Optional Arguments:   +  ’subjectdir’ - (string) Output folder. The results will be saved in this folder.   +  ’subject’ - (string) Subject name. Subject-specific output files will be saved   +   starting with this name.   +  ’session’ - (string) Session name. Session-specific output files will be saved   +   starting with this name. +``` + +Mesh_generation +--------------- +``` +Mesh_generation() - Produces the mesh generation GUI.   + +Usage:   +  >> Mesh_generation(varargin);   + +Optional Arguments:   +  ’subjectdir’ - (string) Output folder. The results will be saved   +   in this folder.   +  ’subject’ - (string) Subject name. Output files will start with this name. +``` + +mesh_local_refinement +--------------------- +``` +mesh_local_refinement() - Refines the meshes in a given folder. Loads   +Scalp.smf, Skull.smf, Csf.smf, Brain.smf meshes in .smf format and saves   +them with the same names.   + +Usage:   +  >> mesh_local_refinement(of, nl, ratio_lmr);   + +Inputs:   +  of - mesh folder   +  nl - number of layers (3 or 4)   +  ratio_lmr - ratio of local edge length to local distance between meshes +``` + +mesh_final_correction +--------------------- +``` +mesh_final_correction() - Performs mesh correction for Scalp.smf,   +Skull.smf, Csf.smf, Brain.smf in a given folder. Saves the meshes with   +the same names in .smf format.   + +Usage:   +  >> mesh_final_correction(of, nl);   + +Inputs:   +  of - mesh folder   +  nl - number of layers (3 or 4) +``` + +mesh_read_write +--------------- +``` +mesh_read_write() - Reads Scalp, Skull, Csf and Brain meshes in .smf   +format in a given folder and writes the total head mesh  bec, bee, bei   +format.   + +Usage:   +  >> mesh_read_write(of, mesh_name, nl);   + +Inputs:   +  of - mesh folder   +  mesh_name - name of the mesh that will be saved in bec, bee, bei format   +  nl - number of layers (3 or 4) +``` + +Segmentation +------------ +``` +Segmentation() - Produces the GUI for running segmentation functions.   + +Usage:   +  >> Segmentation(varargin);   + +Optional Arguments:   +  ’subjectdir’ - (string) Output folder. The results will be saved   +   in this folder.   +  ’subject’ - (string) Subject name. The output files will start with this name. +``` + +segm_aniso_filtering +-------------------- +``` +segm_aniso_filtering() - Performs anisotropic filtering.   + +Usage:   +  >> [b] = segm_aniso_filtering(out, iter, ts, cond);   + +Inputs:   +  out - input image   +  iter - number of iterations   +  ts - sampling rate   +  cond - diffusion parameter   + +Outputs:   +  b - output image +``` + +segm_scalp +---------- +``` +segm_scalp() - Performs scalp segmentation   + +Usage:   +  >> [Sca] = segm_scalp(b);   + +Inputs:   +  b - input image (filtered MR image)   + +Outputs:   +  Sca - scalp mask +``` +segm_brain +---------- +``` +segm_brain() - Performs brain segmentation   + +Usage:   +  >> [Bra] = segm_brain(b,Sca, sli, WMp,sl, st);   + +Inputs:   +  b - input image (filtered MR image)   +  sli - lowest point for cerebellum   +  WMp - white matter point   +  sl,st - fill level and threshold for watershed segmentation   + +Outputs:   +  Bra - brain mask +``` +segm_outer_skull +---------------- +``` +segm_brain() - Performs outer skull segmentation   + +Usage:   +  >> [Sk_out, X_dark] = segm_outer_skull(b, Sca, Bra, sli_eyes);   + +Inputs:   +  b - input image (filtered MR image)   +  Sca - scalp mask +  Bra - brain mask +  sli_eyes - slice of the eyes + +Outputs:   +  Sk_out - outer skull mask +  X_dark - dark regions of b +``` +segm_inner_skull +---------------- +``` +segm_inner_skull() - Performs inner skull segmentation   + +Usage:   +  >> Sk_in = segm_inner_skull(b, Sk_out, X_dark, Bra);   + +Inputs:   +  b - imput image (filtered MR image)   +  Sk_out - outer skull mask   +  X_dark - dark regions of b   +  Bra - Brain mask   + +Outputs:   +  Sk_in - inner skull mask   +``` +segm_final_skull +---------------- +``` +segm_final_skull() - Corrects scalp and outer skull masks wrt inner   +                  skull mask   + +Usage:   +  >> [Sca, Sk_out] = segm_final_skull(Sca, Sk_out, Sk_in, WMp);   + +Inputs:   +  Sca    - scalp mask   +  Sk_out - outer skull mask   +  Sk_in  - inner skull mask   +  WMp    - white matter point   + +Outputs:   +  Sca    - scalp mask   +  Sk_out - outer skull mask +``` +utilbem_compute_cond +-------------------- +``` +utilbem_compute_cond() - Computes the average conductivity   +    around a node to be used in BEM computations.   + +Usage:   +  >> cond = utilbem_compute_cond(Coord, Elem, layers, sigma)   + +Inputs:   +   Coord  - node coordinate matrix   +   Elem   - element connectivity matrix   +   layers - mesh boundary information   +   sigma  - vector of element conductivities   + +Outputs:   +   cond - average conductivity for each node (vector)   + +Note: The average conductivity is normally the average of the inner and outer   +   conductivities of the layer that a node belongs to. However, for   +   meshes with intersecting boundaries there may be three or more tissues   +   around a node. This function also handles this general case. +``` +utilbem_compute_indices +----------------------- +``` +utilbem_compute_indices() - When the Isolated Problem Approach (IPA) is used,   +    the BEM equations are modified to reduce the numerical errors due to   +    the low conductivity skull layer.  For this purpose an "inner mesh"   +    is defined consisting of skull and the inner layers. This function   +    computes the node indices corresponding to these layers to be used   +    in BEM computations.   + +Usage:   +  >> [indMsh, indMod, indMshMod] = utilbem_compute_indices(Coord, Elem, layers, mod);   + +Inputs:   +   Coord  - node coordinate matrix   +   Elem   -  element connectivity matrix   +   layers - mesh boundary information   +   mod    - index of the boundary modified for IPA.   + +Outputs:   +   indMsh - coordinate indices of inner mesh nodes (vector).   +   indMod - coordinate indices of modified boundary nodes (vector).   +   indMshMod - Coordinate indices of modified boundary relative to inner   +               mesh. +``` +utilbem_multilayer_rhs +---------------------- +``` +utilbem_multilayer_rhs() - Computes the Right-Hand-Side of the   +    BEM matrix equation when IPA (Isolated Problem Approach) is   +    used. The RHS vector corrected by IPA reduces numerical errors   +    in computation due to the low conductivity skull layer.   + +Usage:   +  >> RHS = utilbem_multilayer_rhs(Coord, cond, indMod, indMsh, indMshMod,   +   iinv, dmt, s2, s3, dip);   + +Inputs:   +   Coord     - node coordinate matrix   +   cond      - average conductivity for each node (vector)   +               as computed by utilbem_compute_cond()   +   indMod    - coordinate indices of modified boundary nodes (vector).   +   indMsh    - coordinate indices of inner mesh nodes (vector).   +   indMshMod - coordinate indices of modified boundary relative to inner mesh.   +               The indices are computed by utilbem_compute_indices()   +   iinv      - inverse inner matrix.   +   dmt       - sub coefficient matrix (# of nodes) x (# of mod. boundary nodes).   +   s2        - outer conductivity of the modified layer.   +   s3        - inner conductivity of the modified layer   +   dip       - dipole parameters [x y z px py pz]   + +Outputs:   +   RHS - The right-hand-side of the BEM matrix equation for a given   +   dipole. +``` +utilbem_pot_unbound +------------------- +``` +utilbem_pot_unbound() - Computes the unbounded potential at the   +    given coordinates due to a single dipole. The result is   +    weighted by the average conductivity around the node.   + +Usage:   +  >> pot = utilbem_pot_unbound(Coord, cond, dip)   + +Inputs:   +   Coord - node coordinate matrix   +   cond  - average conductivity for each node (vector)   +          as computed by utilbem_compute_cond()   +   dip   - dipole [x y z px py pz]   + +Outputs:   +   pot - node potentials for the homogeneous model   + +Notes: When IPA is not used the weighted potential  +   is the  Right-Hand-Side of the BEM matrix equation. +``` +Warping_mesh +------------ +``` +Warping_mesh() - Produces the GUI for warping of a template head model   +        to measured electrode locations. + +Usage:   +  >> Warping_mesh(varargin);   + +Optional Arguments:   +  ’subjectdir’ - (string) Output folder. The results will be saved   +   in this folder.   +  ’subject’ - (string) Subject name. Subject-specific output files will be saved   +   starting with this name.   +  ’session’ - (string) Session name. Session-specific output files will be saved   +   starting with this name. +``` +warping_main_function +--------------------- +``` +warping_main_function() - Main warping function.   + +Usage:   +  >> [Ptm, ind, Cscalp_w,Cskull_w,CCSF_w,W,A,e,LMm2] =   +  warping_main_function(Cscalp, Escalp, Cskull, CCSF,LMm, Fm, Fd, pos);   + +Inputs:   +  Cscalp, Escalp - scalp mesh   +  Cskull         - coordinates of skull mesh   +  CCSF           - coordinates of CSF mesh   +  LMm            - landmarks on the template mesh   +  Fm             - fiducials of the template mesh   +  Fd             - fiducials from the digitizer data   +  pos            - electrode locations   + +Outputs:   +  Ptm      - electrode locations on the mesh   +  ind      - index of the electrodes on the mesh   +  Cscalp_w - warped scalp mesh coordinates   +  Cskull_w - warped skull mesh coordinates   +  CCSF_w   - warped CSF mesh coordinates   +  W, A, e  - warping transform parameters   +  LMm2     - warped landmarks   +``` \ No newline at end of file diff --git a/plugins/NFT/NFT_Appendix_C.md b/plugins/NFT/NFT-Appendix-C.md similarity index 97% rename from plugins/NFT/NFT_Appendix_C.md rename to plugins/NFT/NFT-Appendix-C.md index 8ad9a5ed..4ebeff72 100644 --- a/plugins/NFT/NFT_Appendix_C.md +++ b/plugins/NFT/NFT-Appendix-C.md @@ -1,9 +1,11 @@ --- layout: default -title: NFT -long_title: NFT parent: NFT grand_parent: Plugins +render_with_liquid: false + +title: NFT-Appendix-C +long_title: NFT-Appendix-C --- Effect of brain-to-skull conductivity ratio estimate on EEG source localization ------------------------------------------------------------------------------- diff --git a/plugins/NFT/NFT_Appendix_B.md b/plugins/NFT/NFT_Appendix_B.md deleted file mode 100644 index c78da53d..00000000 --- a/plugins/NFT/NFT_Appendix_B.md +++ /dev/null @@ -1,597 +0,0 @@ ---- -layout: default -title: NFT -long_title: NFT -parent: NFT -grand_parent: Plugins ---- -bem_create_model ----------------- - -`bem_create_model() - Creates a model structure combining a mesh,  ` -`                     conductivity information and BEM parameters.  ` - -`Usage:  ` -`  >> model = bem_create_model(name, mesh, cond, mod);  ` - -`Inputs:  ` -`  name - model name, used as a base filename for matrices  ` -`  mesh - mesh structure obtained from BEM_LOAD_MESH  ` -`  cond - conductivity values for mesh tissue classes  ` -`         vector, starting from first tissue,  ` -`         0 is reserved for air  ` -`  mod  - index of the modified boundary, for use with IPA. ` -`         If mod <= 0, IPA is not used.  ` - -`Outputs:  ` -`  model - model structure with the following fields.  ` - -`Model Structure:  ` -`  name      - name of the model  ` -`  mesh      - mesh structure  ` -`  cond      - conductivity vector  ` -`  mod       - modified boundary information  ` -`  node_cond - Average conductivity around a node  ` - -`Optional Fields:  ` -`  ind_mod       - node indices of the modified boundary  ` -`  ind_imesh     - node indices of the inner mesh  ` -`  ind_imesh_mod - node indices of the modified boundary  ` -`                  relative to the inner mesh` - -bem_create_session ------------------- - -`bem_create_session() - Creates a session structure combining a model,  ` -`      and sensor data. The session structure contains a model for a ` -`      complete head and electrode ’recording session’. Data recorded ` -`      using the same set of sensor locations is considered  ` -`      to be in the same session.  ` - -`Usage:  ` -`      >> session = bem_create_session(name, model, Smatrix);  ` - -`Inputs:  ` -`  name    - session name, used as a base filename for matrices  ` -`  model   - model structure obtained from bem_create_model().  ` -`  Smatrix - matrix that defines EEG electrodes in terms of  ` -`    the BEM mesh. Each electrode is a weighted sum of the nodes  ` -`    of the element. The weights are determined by the element  ` -`    shape functions. The format of the Smatrix is as follows:  ` -`         [electrode_index node_index weight]  ` -`    The rows of the matrix must be sorted by electrode_index  ` -`    and there can be more than one row with a given electrode  ` -`    index. The Smatrix can be constructed using one of these:  ` -`    bem_smatrix_from_nodes() and bem_smatrix_from_points().  ` - -`Outputs:  ` -`  session - session structure with the fields defined in the next section  ` - -`Session Structure:  ` -`  name    - name of the session  ` -`  model   - model structure  ` -`  Smatrix - EEG sensor information matrix.  ` -`  num_electrodes - number of EEG sensors` - -bem_generate_eeg_matrices -------------------------- - -`bem_generate_eeg_matrices() - Generates BEM matrices for a BEM model.  ` - -`Usage:  ` -`      >> bem_generate_eeg_matrices(model);  ` - -`Inputs:  ` -`  model - model structure generated by BEM_CREATE_MODEL  ` - -`Notes: The matrices are created using the name given in the model structure  ` -`      The following matrices are created on disk, and can be read  ` -`      using the bem_load_model_matrix() function  ` -`      .cmt - BEM coefficient matrix  ` -`      .dmt - band of Coefficient matrix used by IPA  ` -`      .imt - inner Coefficient Matrix used by IPA` - -bem_generate_eeg_transfer_matrix --------------------------------- - -`bem_generate_eeg_transfer_matrix() - Generates EEG transfer matrix.  ` - -`Usage:  ` -`  >> session = bem_generate_eeg_transfer_matrix(session);  ` - -`Inputs:  ` -`  session - session structure generated by BEM_CREATE_SESSION  ` - -`Outputs:  ` -`  session - session object; since it may be modified when  ` -`            loading model matrices.  ` - -`Notes: The matrix is created using the name given in the session structure  ` -`      with "tmte" extension for the EEG transfer matrix. It can be loaded  ` -`      using the bem_load_transfer_matrix().` - -nft_get_config --------------- - -`nft_get_config() - Returns the toolbox configuration information  ` -`      program path names, defaults, etc. Other toolbox functions call this m-file  ` -`      to read their configuration.  ` - -`Outputs:  ` -`  conf - config structure.  ` - -`Config Structures:  ` -`  bem_matrix_program - name of the program that creates EEG matrices.  ` -`  asc - name of adaptive skeleton climbing program.  ` -`  qslim - name of the coarsening program.  ` -`  showmesh - name of the correction and smoothing program.` - -bem_load_mesh -------------- - -`bem_load_mesh() - Loads a BEM mesh.  ` - -`Usage:  ` -`  >> mesh = bem_load_mesh(name);  ` - -`Inputs:  ` -`  name - mesh name excluding the extension.  ` - -`Outputs:  ` -`  mesh - mesh structure.  ` - -`Mesh Structure:  ` -`  name  - mesh name  ` -`  coord - node coordinates  ` -`  elem  - elements (connectivity information)  ` -`  num_nodes - number of nodes  ` -`  num_elements - number of elements  ` -`  num_boundaries - number of boundaries  ` -`  num_node_elem - number of nodes per element  ` -`  num_class - number of tissue classes  ` -`  bnd - boundary information array  ` -`       [num_elements inner_tissue_class outer_tissue_class]` - -bem_load_model_matrix ---------------------- - -`bem_load_model_matrix() - Loads the BEM matrix with extension ’ext’.  ` -`The matrix file name is defined by .``  ` -`Matrix is placed into the model with a field name ’ext’  ` - -`Usage:  ` -`  >> model = bem_load_model_matrix(model, ext);  ` - -`Inputs:  ` -`  model - model structure generated by bem_create_model().  ` -`  ext - describes the matrix type. The following types are defined:  ` -`    ’cmt’ - BEM Coefficient matrix  ` -`    ’dmt’ - band of Coefficient matrix used by IPA  ` -`    ’imt’ - inner Coefficient Matrix used by IPA  ` -`    ’iinv’ - inverse of the inner coefficient matrix. This matrix is  ` -`      computed from ’imt’ if the file does not exist.  ` - -`Outputs:  ` -`  model - model structure.` - -bem_load_transfer_matrix ------------------------- - -`bem_load_transfer_matrix() Loads the BEM transfer matrix with extension ’ext’.  ` -`      The matrix file name is defined by .``.  ` -`      Matrix is placed into the session with a field name ’ext’.  ` - -`Usage:  ` -`  >> session = bem_load_transfer_matrix(session, ext);  ` - -`Inputs:  ` -`  session - session structure generated by bem_create_session().  ` -`  ext - describes the matrix type. The following type is defined  ` -`    ’tmte’ - BEM Transfer matrix.  ` - -`Outputs:  ` -`  session - updated session structure.` - -bem_smatrix_from_nodes ----------------------- - -`bem_smatrix_from_nodes() - Generates Smatrix from nodes of a mesh.  ` -`      Smatrix is the sensor information matrix used in  ` -`      bem_create_session(). See bem_create_session() for more information.  ` - -`Usage:  ` -`  >> Smatrix = bem_smatrix_from_nodes(mesh, nodes);  ` - -`Inputs:  ` -`  mesh - mesh structure  ` -`  nodes - vector of node indices.  ` - -`Outputs:  ` -`  Smatrix - defines one electrode per node. ` - -bem_solve_dipoles_eeg ---------------------- - -`bem_solve_dipoles_eeg() - Computes the potential arising from the given dipoles  ` -`at the sensor locations defined by the session.  ` - -`Usage:  ` -`  >> [pot, session] = bem_solve_dipoles_eeg(session, dipoles);  ` - -`Inputs:  ` -`  session - session structure defining the model and the sensors.  ` -`  dipoles - dipole matrix. Each row defines a dipole as follows:  ` -`           [x y z px py pz]  ` - -`Outputs:  ` -`   pot - potentials at the sensors due to simultaneous activation of  ` -`         the dipoles.  ` -`   session - the updated session structure, in case any matrices are  ` -`             loaded, modifying the underlying model.` - -bem_solve_lfm_eeg ------------------ - -`bem_solve_lfm_eeg() - Computes the LFM arising from given dipoles  ` -`at the sensor locations defined by the session.  ` - -`Usage:  ` -`  >> [pot, session] = bem_solve_lfm_eeg(session, dipoles);  ` - -`Inputs:  ` -`  session - session structure defining the model and the sensors  ` -`  dipoles - dipole matrix. Each row defines a dipole as follows:  ` -`           [x y z px py pz]  ` - -`Outputs:  ` -`  pot - the LFM at the sensors produced by activation of each dipole,  ` -`  session - updated session structure in case any matrices are  ` -`            loaded, modifying the underlying model.` - -Coregistration --------------- - -`Coregistration() - Produces the GUI for co-registration of electrode locations  ` -` to the scalp mesh.  ` - -`Usage:  ` -`  >> Coregistration(varargin);  ` - -`Optional Arguments:  ` -`  ’subjectdir’ - (string) Output folder. The results will be saved  ` -`   in this folder.  ` -`  ’subject’ - (string) Subject name. The subject-specific output files will start  ` -`   with this name.  ` -`  ’session’ - (string) Session name. The file name for registered electrodes will  ` -`   start with this name.` - -Forward_Problem_Solution ------------------------- - -`Forward_Problem_Solution() - Produces the forward model generation GUI.  ` - -`Usage:  ` -`  >> Forward_Problem_Solution(varargin);  ` - -`Optional Arguments:  ` -`  ’subjectdir’ - (string) Output folder. The results will be saved in this folder.  ` -`  ’subject’ - (string) Subject name. Subject-specific output files will be saved  ` -`   starting with this name.  ` -`  ’session’ - (string) Session name. Session-specific output files will be saved  ` -`   starting with this name.` - -Mesh_generation ---------------- - -`Mesh_generation() - Produces the mesh generation GUI.  ` - -`Usage:  ` -`  >> Mesh_generation(varargin);  ` - -`Optional Arguments:  ` -`  ’subjectdir’ - (string) Output folder. The results will be saved  ` -`   in this folder.  ` -`  ’subject’ - (string) Subject name. Output files will start with this name.` - -mesh_local_refinement ---------------------- - -`mesh_local_refinement() - Refines the meshes in a given folder. Loads  ` -`Scalp.smf, Skull.smf, Csf.smf, Brain.smf meshes in .smf format and saves  ` -`them with the same names.  ` - -`Usage:  ` -`  >> mesh_local_refinement(of, nl, ratio_lmr);  ` - -`Inputs:  ` -`  of - mesh folder  ` -`  nl - number of layers (3 or 4)  ` -`  ratio_lmr - ratio of local edge length to local distance between meshes` - -mesh_final_correction ---------------------- - -`mesh_final_correction() - Performs mesh correction for Scalp.smf,  ` -`Skull.smf, Csf.smf, Brain.smf in a given folder. Saves the meshes with  ` -`the same names in .smf format.  ` - -`Usage:  ` -`  >> mesh_final_correction(of, nl);  ` - -`Inputs:  ` -`  of - mesh folder  ` -`  nl - number of layers (3 or 4)` - -mesh_read_write ---------------- - -`mesh_read_write() - Reads Scalp, Skull, Csf and Brain meshes in .smf  ` -`format in a given folder and writes the total head mesh  bec, bee, bei  ` -`format.  ` - -`Usage:  ` -`  >> mesh_read_write(of, mesh_name, nl);  ` - -`Inputs:  ` -`  of - mesh folder  ` -`  mesh_name - name of the mesh that will be saved in bec, bee, bei format  ` -`  nl - number of layers (3 or 4)` - -Segmentation ------------- - -`Segmentation() - Produces the GUI for running segmentation functions.  ` - -`Usage:  ` -`  >> Segmentation(varargin);  ` - -`Optional Arguments:  ` -`  ’subjectdir’ - (string) Output folder. The results will be saved  ` -`   in this folder.  ` -`  ’subject’ - (string) Subject name. The output files will start with this name.` - -segm_aniso_filtering --------------------- - -`segm_aniso_filtering() - Performs anisotropic filtering.  ` - -`Usage:  ` -`  >> [b] = segm_aniso_filtering(out, iter, ts, cond);  ` - -`Inputs:  ` -`  out - input image  ` -`  iter - number of iterations  ` -`  ts - sampling rate  ` -`  cond - diffusion parameter  ` - -`Outputs:  ` -`  b - output image` - -segm_scalp ----------- - -`segm_scalp() - Performs scalp segmentation  ` - -`Usage:  ` -`  >> [Sca] = segm_scalp(b);  ` - -`Inputs:  ` -`  b - input image (filtered MR image)  ` - -`Outputs:  ` -`  Sca - scalp mask` - -segm_brain ----------- - -`segm_brain() - Performs brain segmentation  ` - -`Usage:  ` -`  >> [Bra] = segm_brain(b,Sca, sli, WMp,sl, st);  ` - -`Inputs:  ` -`  b - input image (filtered MR image)  ` -`  sli - lowest point for cerebellum  ` -`  WMp - white matter point  ` -`  sl,st - fill level and threshold for watershed segmentation  ` - -`Outputs:  ` -`  Bra - brain mask` - -segm_outer_skull ----------------- - -`segm_brain() - Performs outer skull segmentation  ` - -`Usage:  ` -`  >> [Sk_out, X_dark] = segm_outer_skull(b, Sca, Bra, sli_eyes);  ` - -`Inputs:  ` -`  b - input image (filtered MR image)  ` -`  Sca - scalp mask` -`  Bra - brain mask` -`  sli_eyes - slice of the eyes` - -`Outputs:  ` -`  Sk_out - outer skull mask` -`  X_dark - dark regions of b` - -segm_inner_skull ----------------- - -`segm_inner_skull() - Performs inner skull segmentation  ` - -`Usage:  ` -`  >> Sk_in = segm_inner_skull(b, Sk_out, X_dark, Bra);  ` - -`Inputs:  ` -`  b - imput image (filtered MR image)  ` -`  Sk_out - outer skull mask  ` -`  X_dark - dark regions of b  ` -`  Bra - Brain mask  ` - -`Outputs:  ` -`  Sk_in - inner skull mask  ` - -segm_final_skull ----------------- - -`segm_final_skull() - Corrects scalp and outer skull masks wrt inner  ` -`                  skull mask  ` - -`Usage:  ` -`  >> [Sca, Sk_out] = segm_final_skull(Sca, Sk_out, Sk_in, WMp);  ` - -`Inputs:  ` -`  Sca    - scalp mask  ` -`  Sk_out - outer skull mask  ` -`  Sk_in  - inner skull mask  ` -`  WMp    - white matter point  ` - -`Outputs:  ` -`  Sca    - scalp mask  ` -`  Sk_out - outer skull mask` - -utilbem_compute_cond --------------------- - -`utilbem_compute_cond() - Computes the average conductivity  ` -`    around a node to be used in BEM computations.  ` - -`Usage:  ` -`  >> cond = utilbem_compute_cond(Coord, Elem, layers, sigma)  ` - -`Inputs:  ` -`   Coord  - node coordinate matrix  ` -`   Elem   - element connectivity matrix  ` -`   layers - mesh boundary information  ` -`   sigma  - vector of element conductivities  ` - -`Outputs:  ` -`   cond - average conductivity for each node (vector)  ` - -`Note: The average conductivity is normally the average of the inner and outer  ` -`   conductivities of the layer that a node belongs to. However, for  ` -`   meshes with intersecting boundaries there may be three or more tissues  ` -`   around a node. This function also handles this general case.` - -utilbem_compute_indices ------------------------ - -`utilbem_compute_indices() - When the Isolated Problem Approach (IPA) is used,  ` -`    the BEM equations are modified to reduce the numerical errors due to  ` -`    the low conductivity skull layer.  For this purpose an "inner mesh"  ` -`    is defined consisting of skull and the inner layers. This function  ` -`    computes the node indices corresponding to these layers to be used  ` -`    in BEM computations.  ` - -`Usage:  ` -`  >> [indMsh, indMod, indMshMod] = utilbem_compute_indices(Coord, Elem, layers, mod);  ` - -`Inputs:  ` -`   Coord  - node coordinate matrix  ` -`   Elem   -  element connectivity matrix  ` -`   layers - mesh boundary information  ` -`   mod    - index of the boundary modified for IPA.  ` - -`Outputs:  ` -`   indMsh - coordinate indices of inner mesh nodes (vector).  ` -`   indMod - coordinate indices of modified boundary nodes (vector).  ` -`   indMshMod - Coordinate indices of modified boundary relative to inner  ` -`               mesh.` - -utilbem_multilayer_rhs ----------------------- - -`utilbem_multilayer_rhs() - Computes the Right-Hand-Side of the  ` -`    BEM matrix equation when IPA (Isolated Problem Approach) is  ` -`    used. The RHS vector corrected by IPA reduces numerical errors  ` -`    in computation due to the low conductivity skull layer.  ` - -`Usage:  ` -`  >> RHS = utilbem_multilayer_rhs(Coord, cond, indMod, indMsh, indMshMod,  ` -`   iinv, dmt, s2, s3, dip);  ` - -`Inputs:  ` -`   Coord     - node coordinate matrix  ` -`   cond      - average conductivity for each node (vector)  ` -`               as computed by utilbem_compute_cond()  ` -`   indMod    - coordinate indices of modified boundary nodes (vector).  ` -`   indMsh    - coordinate indices of inner mesh nodes (vector).  ` -`   indMshMod - coordinate indices of modified boundary relative to inner mesh.  ` -`               The indices are computed by utilbem_compute_indices()  ` -`   iinv      - inverse inner matrix.  ` -`   dmt       - sub coefficient matrix (# of nodes) x (# of mod. boundary nodes).  ` -`   s2        - outer conductivity of the modified layer.  ` -`   s3        - inner conductivity of the modified layer  ` -`   dip       - dipole parameters [x y z px py pz]  ` - -`Outputs:  ` -`   RHS - The right-hand-side of the BEM matrix equation for a given  ` -`   dipole.` - -utilbem_pot_unbound -------------------- - -`utilbem_pot_unbound() - Computes the unbounded potential at the  ` -`    given coordinates due to a single dipole. The result is  ` -`    weighted by the average conductivity around the node.  ` - -`Usage:  ` -`  >> pot = utilbem_pot_unbound(Coord, cond, dip)  ` - -`Inputs:  ` -`   Coord - node coordinate matrix  ` -`   cond  - average conductivity for each node (vector)  ` -`          as computed by utilbem_compute_cond()  ` -`   dip   - dipole [x y z px py pz]  ` - -`Outputs:  ` -`   pot - node potentials for the homogeneous model  ` - -`Notes: When IPA is not used the weighted potential ` -`   is the  Right-Hand-Side of the BEM matrix equation.` - -Warping_mesh ------------- - -`Warping_mesh() - Produces the GUI for warping of a template head model  ` -`        to measured electrode locations.` - -`Usage:  ` -`  >> Warping_mesh(varargin);  ` - -`Optional Arguments:  ` -`  ’subjectdir’ - (string) Output folder. The results will be saved  ` -`   in this folder.  ` -`  ’subject’ - (string) Subject name. Subject-specific output files will be saved  ` -`   starting with this name.  ` -`  ’session’ - (string) Session name. Session-specific output files will be saved  ` -`   starting with this name.` - -warping_main_function ---------------------- - -`warping_main_function() - Main warping function.  ` - -`Usage:  ` -`  >> [Ptm, ind, Cscalp_w,Cskull_w,CCSF_w,W,A,e,LMm2] =  ` -`  warping_main_function(Cscalp, Escalp, Cskull, CCSF,LMm, Fm, Fd, pos);  ` - -`Inputs:  ` -`  Cscalp, Escalp - scalp mesh  ` -`  Cskull         - coordinates of skull mesh  ` -`  CCSF           - coordinates of CSF mesh  ` -`  LMm            - landmarks on the template mesh  ` -`  Fm             - fiducials of the template mesh  ` -`  Fd             - fiducials from the digitizer data  ` -`  pos            - electrode locations  ` - -`Outputs:  ` -`  Ptm      - electrode locations on the mesh  ` -`  ind      - index of the electrodes on the mesh  ` -`  Cscalp_w - warped scalp mesh coordinates  ` -`  Cskull_w - warped skull mesh coordinates  ` -`  CCSF_w   - warped CSF mesh coordinates  ` -`  W, A, e  - warping transform parameters  ` -`  LMm2     - warped landmarks  ` diff --git a/plugins/NFT/index.md b/plugins/NFT/index.md index e5036129..e875408a 100644 --- a/plugins/NFT/index.md +++ b/plugins/NFT/index.md @@ -3,8 +3,9 @@ layout: default title: NFT long_title: NFT parent: Plugins +render_with_liquid: false has_children: true -nav_order: 16 +nav_order: 18 --- To view the plugin source code, please visit the plugin's [GitHub repository](https://github.com/sccn/NFT). @@ -88,35 +89,35 @@ Please visit home-pages of individual programs for more information on usage, source-code and license information. ASC: Adaptive skeleton climbing -homepage: http://www.cse.cuhk.edu.hk/~ttwong/papers/asc/asc.html +homepage: [http://www.cse.cuhk.edu.hk/~ttwong/papers/asc/asc.html](http://www.cse.cuhk.edu.hk/~ttwong/papers/asc/asc.html) QSLIM: Quadric-based surface simplification -homepage: http://mgarland.org/software/qslim.html +homepage: [http://mgarland.org/software/qslim.html](http://mgarland.org/software/qslim.html) BEM_MATRIX: The METU-FP Toolkit -homepage: http://www.eee.metu.edu.tr/metu-fp/ +homepage: [http://www.eee.metu.edu.tr/metu-fp/](http://www.eee.metu.edu.tr/metu-fp/) PROCMESH: Mesh correction and processing. No web page yet. Please contact NFT developers for source code. MATITK: Matlab and ITK -homepage: http://www.sfu.ca/~vwchu/matitk.html +homepage: [http://www.sfu.ca/~vwchu/matitk.html](http://www.sfu.ca/~vwchu/matitk.html) Note: The MATITK shared libraries are installed in the 'mfiles' directory. # Download -To download the NFT, go to the [NFT download -page](http://sccn.ucsd.edu/nft/). +To download the NFT, use the EEGLAB plugin manager. # NFT User's Manual See the tutorial section for more information. [Click here to download the NFT User Manual as a PDF book](https://github.com/user-attachments/files/16383465/NFT_Tutorial.pdf) -Creation and documentation by: Zeynep Akalin Acar, Project Scientist, zeynep@sccn.ucsd.edu +Creation and documentation by: Zeynep Akalin Acar, zeynep@sccn.ucsd.edu + +Support: Limited support is available from Yayha Shirazi, syshirazi@ucsd.edu # NFT Reference Paper Zeynep Akalin Acar & Scott Makeig, [Neuroelectromagnetic Forward Head -Modeling -Toolbox](http://sccn.ucsd.edu/%7Escott/pdf/Zeynep_NFT_Toolbox10.pdf). +Modeling Toolbox](http://sccn.ucsd.edu/%7Escott/pdf/Zeynep_NFT_Toolbox10.pdf). Journal of Neuroscience Methods, 2010