physio-support
physio-support > RE: No consistent volume Amplitude
Aug 10, 2017 10:08 PM | Lars Kasper - Translational Neuromodeling Unit, IBT, University of Zurich and ETH Zurich
RE: No consistent volume Amplitude
Dear Brunno,
my apologies for the late reply.
You are right, there is no consistent volume threshold in you log file - at least no positive one. It is an interesting idea to implement negative thresholds (or invert the gradient time course, for that purpose) that I can integrate into the toolbox in an upcoming version.
However, in your case, the solution is much simpler: If you run the toolbox with
thresh.zero = 1000
thresh.sli = 1300
thresh.vol = [] % i.e., without volume threshold
you will see in the lowest subplot of the Gradient Thresholding figure (see attached) that the volume start is indicated by a slightly smaller gap between the slice events: some 65 instead of 50 ms. So, if you set
thresh.vol_spacing = 0.06; % 60 ms = 0.06s
the toolbox finds the right events. I have pasted the corresponding SPM job-file below as well.
I hope that works for you as well.
Another thing you mentioned is that the toolbox did not count volume events correctly from the end of the time series. Could you show me such a case? In case there is no clear volume peak, this feature only works properly, if you set thresh.vol = [];
All the best,
Lars
%-----------------------------------------------------------------------
% Job saved on 10-Aug-2017 23:59:14 by cfg_util (rev $Rev: 6460 $)
% spm SPM - SPM12 (6906)
% cfg_basicio BasicIO - Unknown
%-----------------------------------------------------------------------
matlabbatch{1}.spm.tools.physio.save_dir = {''};
matlabbatch{1}.spm.tools.physio.log_files.vendor = 'Philips';
matlabbatch{1}.spm.tools.physio.log_files.cardiac = {'/Users/kasperla/Documents/Cooperations/physIO/BrunnoCampos/SCANPHYSLOG20170721130757.log'};
matlabbatch{1}.spm.tools.physio.log_files.respiration = {'/Users/kasperla/Documents/Cooperations/physIO/BrunnoCampos/SCANPHYSLOG20170721130757.log'};
matlabbatch{1}.spm.tools.physio.log_files.scan_timing = {''};
matlabbatch{1}.spm.tools.physio.log_files.sampling_interval = [];
matlabbatch{1}.spm.tools.physio.log_files.relative_start_acquisition = 0;
matlabbatch{1}.spm.tools.physio.log_files.align_scan = 'last';
matlabbatch{1}.spm.tools.physio.scan_timing.sqpar.Nslices = 40;
matlabbatch{1}.spm.tools.physio.scan_timing.sqpar.NslicesPerBeat = [];
matlabbatch{1}.spm.tools.physio.scan_timing.sqpar.TR = 2;
matlabbatch{1}.spm.tools.physio.scan_timing.sqpar.Ndummies = 5;
matlabbatch{1}.spm.tools.physio.scan_timing.sqpar.Nscans = 400;
matlabbatch{1}.spm.tools.physio.scan_timing.sqpar.onset_slice = 20;
matlabbatch{1}.spm.tools.physio.scan_timing.sqpar.time_slice_to_slice = [];
matlabbatch{1}.spm.tools.physio.scan_timing.sqpar.Nprep = [];
matlabbatch{1}.spm.tools.physio.scan_timing.sync.gradient_log.grad_direction = 'y';
matlabbatch{1}.spm.tools.physio.scan_timing.sync.gradient_log.zero = 1000;
matlabbatch{1}.spm.tools.physio.scan_timing.sync.gradient_log.slice = 1300;
matlabbatch{1}.spm.tools.physio.scan_timing.sync.gradient_log.vol = [];
matlabbatch{1}.spm.tools.physio.scan_timing.sync.gradient_log.vol_spacing = 0.06;
matlabbatch{1}.spm.tools.physio.preproc.cardiac.modality = 'PPU';
matlabbatch{1}.spm.tools.physio.preproc.cardiac.initial_cpulse_select.auto_matched.min = 0.4;
matlabbatch{1}.spm.tools.physio.preproc.cardiac.initial_cpulse_select.auto_matched.file = 'initial_cpulse_kRpeakfile.mat';
matlabbatch{1}.spm.tools.physio.preproc.cardiac.posthoc_cpulse_select.off = struct([]);
matlabbatch{1}.spm.tools.physio.model.output_multiple_regressors = 'multiple_regressors.txt';
matlabbatch{1}.spm.tools.physio.model.output_physio = 'physio.mat';
matlabbatch{1}.spm.tools.physio.model.orthogonalise = 'none';
matlabbatch{1}.spm.tools.physio.model.retroicor.yes.order.c = 3;
matlabbatch{1}.spm.tools.physio.model.retroicor.yes.order.r = 4;
matlabbatch{1}.spm.tools.physio.model.retroicor.yes.order.cr = 1;
matlabbatch{1}.spm.tools.physio.model.rvt.no = struct([]);
matlabbatch{1}.spm.tools.physio.model.hrv.no = struct([]);
matlabbatch{1}.spm.tools.physio.model.noise_rois.no = struct([]);
matlabbatch{1}.spm.tools.physio.model.movement.yes.file_realignment_parameters = {''};
matlabbatch{1}.spm.tools.physio.model.movement.yes.order = 6;
matlabbatch{1}.spm.tools.physio.model.movement.yes.outlier_translation_mm = Inf;
matlabbatch{1}.spm.tools.physio.model.movement.yes.outlier_rotation_deg = Inf;
matlabbatch{1}.spm.tools.physio.model.other.no = struct([]);
matlabbatch{1}.spm.tools.physio.verbose.level = 2;
matlabbatch{1}.spm.tools.physio.verbose.fig_output_file = '';
matlabbatch{1}.spm.tools.physio.verbose.use_tabs = false;
my apologies for the late reply.
You are right, there is no consistent volume threshold in you log file - at least no positive one. It is an interesting idea to implement negative thresholds (or invert the gradient time course, for that purpose) that I can integrate into the toolbox in an upcoming version.
However, in your case, the solution is much simpler: If you run the toolbox with
thresh.zero = 1000
thresh.sli = 1300
thresh.vol = [] % i.e., without volume threshold
you will see in the lowest subplot of the Gradient Thresholding figure (see attached) that the volume start is indicated by a slightly smaller gap between the slice events: some 65 instead of 50 ms. So, if you set
thresh.vol_spacing = 0.06; % 60 ms = 0.06s
the toolbox finds the right events. I have pasted the corresponding SPM job-file below as well.
I hope that works for you as well.
Another thing you mentioned is that the toolbox did not count volume events correctly from the end of the time series. Could you show me such a case? In case there is no clear volume peak, this feature only works properly, if you set thresh.vol = [];
All the best,
Lars
%-----------------------------------------------------------------------
% Job saved on 10-Aug-2017 23:59:14 by cfg_util (rev $Rev: 6460 $)
% spm SPM - SPM12 (6906)
% cfg_basicio BasicIO - Unknown
%-----------------------------------------------------------------------
matlabbatch{1}.spm.tools.physio.save_dir = {''};
matlabbatch{1}.spm.tools.physio.log_files.vendor = 'Philips';
matlabbatch{1}.spm.tools.physio.log_files.cardiac = {'/Users/kasperla/Documents/Cooperations/physIO/BrunnoCampos/SCANPHYSLOG20170721130757.log'};
matlabbatch{1}.spm.tools.physio.log_files.respiration = {'/Users/kasperla/Documents/Cooperations/physIO/BrunnoCampos/SCANPHYSLOG20170721130757.log'};
matlabbatch{1}.spm.tools.physio.log_files.scan_timing = {''};
matlabbatch{1}.spm.tools.physio.log_files.sampling_interval = [];
matlabbatch{1}.spm.tools.physio.log_files.relative_start_acquisition = 0;
matlabbatch{1}.spm.tools.physio.log_files.align_scan = 'last';
matlabbatch{1}.spm.tools.physio.scan_timing.sqpar.Nslices = 40;
matlabbatch{1}.spm.tools.physio.scan_timing.sqpar.NslicesPerBeat = [];
matlabbatch{1}.spm.tools.physio.scan_timing.sqpar.TR = 2;
matlabbatch{1}.spm.tools.physio.scan_timing.sqpar.Ndummies = 5;
matlabbatch{1}.spm.tools.physio.scan_timing.sqpar.Nscans = 400;
matlabbatch{1}.spm.tools.physio.scan_timing.sqpar.onset_slice = 20;
matlabbatch{1}.spm.tools.physio.scan_timing.sqpar.time_slice_to_slice = [];
matlabbatch{1}.spm.tools.physio.scan_timing.sqpar.Nprep = [];
matlabbatch{1}.spm.tools.physio.scan_timing.sync.gradient_log.grad_direction = 'y';
matlabbatch{1}.spm.tools.physio.scan_timing.sync.gradient_log.zero = 1000;
matlabbatch{1}.spm.tools.physio.scan_timing.sync.gradient_log.slice = 1300;
matlabbatch{1}.spm.tools.physio.scan_timing.sync.gradient_log.vol = [];
matlabbatch{1}.spm.tools.physio.scan_timing.sync.gradient_log.vol_spacing = 0.06;
matlabbatch{1}.spm.tools.physio.preproc.cardiac.modality = 'PPU';
matlabbatch{1}.spm.tools.physio.preproc.cardiac.initial_cpulse_select.auto_matched.min = 0.4;
matlabbatch{1}.spm.tools.physio.preproc.cardiac.initial_cpulse_select.auto_matched.file = 'initial_cpulse_kRpeakfile.mat';
matlabbatch{1}.spm.tools.physio.preproc.cardiac.posthoc_cpulse_select.off = struct([]);
matlabbatch{1}.spm.tools.physio.model.output_multiple_regressors = 'multiple_regressors.txt';
matlabbatch{1}.spm.tools.physio.model.output_physio = 'physio.mat';
matlabbatch{1}.spm.tools.physio.model.orthogonalise = 'none';
matlabbatch{1}.spm.tools.physio.model.retroicor.yes.order.c = 3;
matlabbatch{1}.spm.tools.physio.model.retroicor.yes.order.r = 4;
matlabbatch{1}.spm.tools.physio.model.retroicor.yes.order.cr = 1;
matlabbatch{1}.spm.tools.physio.model.rvt.no = struct([]);
matlabbatch{1}.spm.tools.physio.model.hrv.no = struct([]);
matlabbatch{1}.spm.tools.physio.model.noise_rois.no = struct([]);
matlabbatch{1}.spm.tools.physio.model.movement.yes.file_realignment_parameters = {''};
matlabbatch{1}.spm.tools.physio.model.movement.yes.order = 6;
matlabbatch{1}.spm.tools.physio.model.movement.yes.outlier_translation_mm = Inf;
matlabbatch{1}.spm.tools.physio.model.movement.yes.outlier_rotation_deg = Inf;
matlabbatch{1}.spm.tools.physio.model.other.no = struct([]);
matlabbatch{1}.spm.tools.physio.verbose.level = 2;
matlabbatch{1}.spm.tools.physio.verbose.fig_output_file = '';
matlabbatch{1}.spm.tools.physio.verbose.use_tabs = false;
Threaded View
Title | Author | Date |
---|---|---|
Brunno M. de Campos | Jul 20, 2017 | |
Brunno M. de Campos | Jul 21, 2017 | |
Lars Kasper | Aug 10, 2017 | |
Brunno M. de Campos | Aug 11, 2017 | |