User Tools

Site Tools


neuroelf:neuroelf_resources

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
neuroelf:neuroelf_resources [2014/12/05 21:13] – [Installation] igorkaganneuroelf:neuroelf_resources [2022/12/29 07:15] (current) – external edit 127.0.0.1
Line 1: Line 1:
 ====== NeuroElf Resources ====== ====== NeuroElf Resources ======
 +
 +===== Online resources =====
  
 http://neuroelf.net/ http://neuroelf.net/
Line 7: Line 9:
 https://www.youtube.com/channel/UC1sM-zqnmdcZOrRf-i0FLGg | NeuroElf youtube tutorials! https://www.youtube.com/channel/UC1sM-zqnmdcZOrRf-i0FLGg | NeuroElf youtube tutorials!
  
 +===== Help =====
 +For getting detailed help on each method of xff object (e.g. fmr), use:
 +<code matlab>
 +>> fmr.Help % to see all methods
 +>> fmr.Help('Method') % e.g. fmr.Help('Realign') to see details of each method 
 +</code>
 +See http://neuroelf.net/wiki/doku.php?id=obj.help
  
  
-----+=== NeuroElf-based ERA ===
  
-===== DAG notes ===== 
  
 +http://neuroelf.net/wiki/doku.php?id=neuroelf_gui_-_mdm_voi_condition_average_ui
  
-==== Installation ==== +http://neuroelf.net/wiki/doku.php?id=mdm.voicondaverage
-1) During installation, disable (remove from path) Chronux: conflict with linec.+
  
-2) Starting from NeuroElf_v09d, many useful auxiliary scripts/functions are "hidden" behind @neuroelf method,+===== DAG installation notes ===== 
 + 
 +1) During installation, disable (remove from path) Chronux (if present): conflict with linec.m  
 + 
 +2) NeuroElf functions use std.m and var.m as in newer versions of MATLAB, with 3 inputs: e.g. Y = STD(X,FLAG,DIM). 
 +Therefore, old NaN toolbox functions std.m and var.m were incompatible and sterr.m was updated. The old version of std.m is now available as ig_std.m in Igtools (corrcoef_eval.m has not been revised yet but is not needed for running the pipeline). 
 + 
 +3) Starting from NeuroElf_v09d, many useful auxiliary scripts/functions are "hidden" behind @neuroelf method,
 and reside in **..\@neuroelf\private**. They can be placed in the path (i.e. copied to the main NeuroElf folder, it is not possible to add to path this private folder directly), or accessed as described in [main installation folder] / README.html > Function library: and reside in **..\@neuroelf\private**. They can be placed in the path (i.e. copied to the main NeuroElf folder, it is not possible to add to path this private folder directly), or accessed as described in [main installation folder] / README.html > Function library:
 <code matlab> <code matlab>
Line 24: Line 39:
 </code> </code>
  
 +:-O The functions below should be in the NeuroElf base (root) folder (e.g. D:\Sources\NeuroElf_v10_4503). **Only** this folder should be on the path!
  
-Currently required functions for DAG NeuroElf-based functions (\Sources\MATLAB\bv_umg): +{{:neuroelf:neuroelf_base_folder_ikdag20150815.png?600|}}
-  * findfiles +
-  * checkstruct +
-  * renamefile +
-  * dicom_dict +
-Used by ne_pl_fmriqasheet.m: +
-  * psctrans +
-  * packmosaic +
-  * scaledata +
-  * minmaxmean +
-  * splittocell +
-==== Help ==== +
-For getting detailed help on each method of xff object (e.g. fmr), use: +
-<code matlab> +
->> fmr.Help % to see all methods +
->> fmr.Help('Method') % e.g. fmr.Help('Realign') to see details of each method  +
-</code> +
-See http://neuroelf.net/wiki/doku.php?id=obj.help+
  
----- +4)  There is a bug in NeuroElf v1.0 and v0.9d, to fix please replace the function dcm_Value.m in /xff/private with the function below. This function is used by createfmr.m
-NeuroElf-based ERA+
  
-http://neuroelf.net/wiki/doku.php?id=neuroelf_gui_-_mdm_voi_condition_average_ui+<code matlab dcm_Value.m> 
 +function dcmval = dcm_Value(hfile, vkey, varargin) 
 +% DCM::Value  - return a tag's value 
 +
 +% FORMAT:       dcmval = dcm.Value(key [, ...]); 
 +
 +% Input fields: 
 +
 +%       key         DICOM key (0008.0010) or tag (PatientsName) 
 +%       ...         default value if not found 
 +
 +% Output fields: 
 +
 +%       dcmval      value for given key/tag 
 +
 +% Using: makelabel, splittocell. 
 + 
 +% Version:  v0.9d 
 +% Build:    14082218 
 +% Date:     Aug-22 2014, 6:14 PM EST 
 +% Author:   Jochen Weber, SCAN Unit, Columbia University, NYC, NY, USA 
 +% URL/Info: http://neuroelf.net/ 
 +
 +% Copyright (c) 2010, 2011, 2014, Jochen Weber 
 +% All rights reserved. 
 +
 +% Redistribution and use in source and binary forms, with or without 
 +% modification, are permitted provided that the following conditions are met: 
 +%     * Redistributions of source code must retain the above copyright 
 +%       notice, this list of conditions and the following disclaimer. 
 +%     * Redistributions in binary form must reproduce the above copyright 
 +%       notice, this list of conditions and the following disclaimer in the 
 +%       documentation and/or other materials provided with the distribution. 
 +%     * Neither the name of Columbia University nor the 
 +%       names of its contributors may be used to endorse or promote products 
 +%       derived from this software without specific prior written permission. 
 +
 +% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
 +% ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
 +% WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
 +% DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY 
 +% DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
 +% (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
 +% LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 
 +% ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
 +% (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
 +% SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
 + 
 +% neuroelf library 
 +global ne_methods; 
 + 
 +% persistent dictionaries 
 +persistent dcmv_dicts 
 +if isempty(dcmv_dicts) 
 +    dcmv_dicts struct; 
 + 
 +    % load standard dict 
 +    dcmv_dicts.OFFIS = ne_methods.dicom_dic(); % IK added ne_methods and () 
 +     
 +end 
 + 
 +% only valid for single file 
 +if nargin < 2 || ... 
 +    numel(hfile) ~= 1 || ... 
 +   ~xffisobject(hfile, true, 'dcm'
 +    error( ... 
 +        'xff:BadArgument', ... 
 +        'Invalid call to %s.', ... 
 +        mfilename ... 
 +    ); 
 +end 
 + 
 +% dict 
 +bc = xffgetcont(hfile.L); 
 +dict = bc.DataDictionary; 
 + 
 +% check key 
 +if ischar(vkey) 
 +    vkey = vkey(:)'; 
 +    if length(vkey) == 9 && ... 
 +       ~isempty(regexpi(vkey, '^[0-9a-f]{4}[^0-9a-f][0-9a-f]{4}$')) 
 +        vkey = vkey([1:4,6:9]); 
 +    end 
 +    if length(vkey) == 8 && ... 
 +       ~isempty(regexpi(vkey, '^[0-9a-f]+$')) && ... 
 +       ~all(double(vkey) > 64) 
 +        vkey = ['k_' upper(vkey(1:4)) '_' upper(vkey(5:8))]; 
 +    elseif ~strcmp(vkey, ne_methods.makelabel(vkey)) 
 +        error( ... 
 +            'xff:BadArgument', ... 
 +            'Invalid DICOM tag number/key given.' ... 
 +        ); 
 +    else 
 +        if isempty(dict) 
 +            warning( ... 
 +                'xff:InternalWarning', ... 
 +                'Data dictionary not looked up.' ... 
 +            ); 
 +            dcm_DetectDictionary(hfile, 'auto'); 
 +            dict = bc.DataDictionary; 
 +        end 
 +        if ~isfield(dcmv_dicts, dict) 
 +            error( ... 
 +                'xff:BadSetting', ... 
 +                'Unknown DICOM dictionary set.' ... 
 +            ); 
 +        end 
 +        dict = dcmv_dicts.(dict); 
 +        if ~isfield(dict, vkey) 
 +            error( ... 
 +                'xff:BadArgument', ... 
 +                'Unknown DICOM tag key given.' ... 
 +            ); 
 +        end 
 +        vkey = dict.(vkey); 
 +        if isfield(bc.DataKeyLookup, vkey) 
 +            dcmval = bc.Data(bc.DataKeyLookup.(vkey)).Value; 
 +        elseif isfield(bc.MetaKeyLookup, vkey) 
 +            dcmval = bc.Meta(bc.MetaKeyLookup.(vkey)).Value; 
 +        elseif nargin > 2 
 +            dcmval = varargin{1}; 
 +        else 
 +            error( ... 
 +                'xff:BadArgument', ... 
 +                'Given DICOM tag key not present in file.' ... 
 +            ); 
 +        end 
 +        dcmval = interpret_dcmval(dcmval); 
 +        return; 
 +    end 
 +    if ~isfield(bc.DataKeyLookup, vkey) 
 +        if nargin < 3 
 +            error( ... 
 +                'xff:BadArgument', ... 
 +                'Given DICOM tag not present in file.' ... 
 +            ); 
 +        else 
 +            dcmval = varargin{1}; 
 +            dcmval = interpret_dcmval(dcmval); 
 +            return; 
 +        end 
 +    end 
 +    dcmval = bc.Data(bc.DataKeyLookup.(vkey)).Value; 
 +    dcmval = interpret_dcmval(dcmval); 
 + 
 +% numeric key format 
 +elseif isa(vkey, 'double'
 +    if numel(vkey) == 2 && ... 
 +       ~any(isinf(vkey) | isnan(vkey) | vkey < 0 | vkey > 65535) 
 +        try 
 +            dcmval = dcm_Value(hfile, sprintf('%04x%04x', vkey(1), vkey(2)), varargin{:}); 
 +        catch ne_eo; 
 +            rethrow(ne_eo); 
 +        end 
 +    elseif numel(vkey) == 1 && ... 
 +        nargin > 2 && ... 
 +        isa(varargin{1}, 'double') && ... 
 +       ~isinf(vkey) && ... 
 +       ~isnan(vkey) && ... 
 +        vkey >= 0 && ... 
 +        vkey < 65536 && ... 
 +        numel(varargin{1}) == 1 && ... 
 +       ~isinf(varargin{1}) && ... 
 +       ~isnan(varargin{1}) && ... 
 +        varargin{1} >= 0 && ... 
 +        varargin{1} < 65536 
 +        try 
 +            dcmval = dcm_Value(hfile, sprintf('%04x%04x', vkey, varargin{1}), varargin{2:end}); 
 +        catch ne_eo; 
 +            rethrow(ne_eo); 
 +        end 
 +    else 
 +        error( ... 
 +            'xff:BadArgument', ... 
 +            'Invalid DICOM tag (or key) given.' ... 
 +        ); 
 +    end 
 +    dcmval = interpret_dcmval(dcmval); 
 + 
 +else 
 +    error( ... 
 +        'xff:BadArgument', ... 
 +        'Invalid DICOM tag (or key) given.' ... 
 +    ); 
 +end 
 + 
 + 
 +% sub function 
 +function dcmval = interpret_dcmval(dcmval) 
 +    global ne_methods; 
 +    if ischar(dcmval) && ... 
 +       ~isempty(dcmval) 
 +        dcmval = dcmval(:)'; 
 +        if ~isempty(regexpi(dcmval, ... 
 +                '^\s*[\+\-]?\d+(\.\d+)?([eE][\+\-]?\d+)?(\s*\\\s*[\+\-]?\d+(\.\d+)?([eE][\+\-]?\d+)?)*\s*$')) 
 +            dcmvalc = ne_methods.splittocell(dcmval, '\'); 
 +            dcmvaln = zeros(1, numel(dcmvalc)); 
 +            try 
 +                for vc = 1:numel(dcmvalc) 
 +                    dcmvaln(vc) = str2double(dcmvalc{vc}); 
 +                end 
 +            catch ne_eo; 
 +                neuroelf_lasterr(ne_eo); 
 +                return; 
 +            end 
 +            dcmval = dcmvaln; 
 +        end 
 +    elseif isnumeric(dcmval) 
 +        dcmval = double(dcmval); 
 +    end 
 +% end of function dcmval = interpret_dcmval(dcmval) 
 +</code>
  
-http://neuroelf.net/wiki/doku.php?id=mdm.voicondaverage 
neuroelf/neuroelf_resources.1417814009.txt.gz · Last modified: 2022/12/29 07:15 (external edit)