/
Siemens Physiology - - UCLPrisma 3T A Human Brain Mapping
Siemens Physiology - - UCLPrisma 3T A Human Brain Mapping
There are two files create: 1) a DICOM file containing all information, and 2) hybrid binary-text files that include notepad-readable waveform values. The hybrid files are kept in separate folders. The DICOM files are included as a separate series, with a unique series number, but with the same name as the fMRI series. Typically, we get two fMRI series (one raw, one realigned), so the physio is a third series - see snapshot.
By FAR the best option is to read the DICOM file using this script.
See Recording physiological signals during fMRI scans
Script by CMRR https://github.com/CMRR-C2P/MB/blob/master/extractCMRRPhysio.m
function extractCMRRPhysio(varargin)
% -------------------------------------------------------------------------
% extractCMRRPhysio.m
% -------------------------------------------------------------------------
% Extract physiological log files from encoded "_PHYSIO" DICOM file
% generated by CMRR MB sequences (>=R015, >=VD13A)
% E. Auerbach, CMRR, 2016
%
% Usage:
% extractCMRRPhysio(DICOM_filename, [output_path]);
%
% This function expects to find a single encoded "_PHYSIO" DICOM file
% generated by the CMRR C2P sequences >=R015. It will extract and write
% individual log files (*_ECG.log, *_RESP.log, *_PULS.log, *_EXT.log,
% *_Info.log) compatible with the CMRR C2P sequences >=R013. Only log
% files with nonzero traces will be written.
%
% Inputs:
% DICOM_filename = 'XXX.dcm'
% output_path = '/path/to/output/' (optional; if not specified, will
% use path of input file)
% say hello
fprintf('\nextractCMRRPhysio: E. Auerbach, CMRR, 2016\n\n');
if (nargin < 1) || (nargin > 2)
error('Invalid number of inputs.');
end
fn = varargin{1};
if (nargin == 2)
outpath = varargin{2};
else
[outpath, ~, ~] = fileparts(fn);
end
% first, verify our input is a DICOM file
if (2 ~= exist(fn,'file'))
error('%s not found!', fn);
end
if (~isdicom(fn))
error('%s not a DICOM file!', fn);
end
% read in the DICOM
fprintf('Attempting to read CMRR Physio DICOM format file...\n');
warning('off','images:dicominfo:attrWithSameName');
dcmInfo = dicominfo(fn);
if (~isempty(dcmInfo) && isfield(dcmInfo,'ImageType') && strcmp(dcmInfo.ImageType,'ORIGINAL\PRIMARY\RAWDATA\PHYSIO') ...
&& isfield(dcmInfo,'Private_7fe1_10xx_Creator') && strcmp(deblank(char(dcmInfo.Private_7fe1_10xx_Creator)),'SIEMENS CSA NON-IMAGE'))
np = size(dcmInfo.Private_7fe1_1010,1);
rows = dcmInfo.AcquisitionNumber;
columns = np/rows;
numFiles = columns/1024;
if (rem(np,rows) || rem(columns,1024)), error('Invalid image size (%dx%d)!', columns, rows); end
dcmData = reshape(dcmInfo.Private_7fe1_1010,[],numFiles)';
% encoded DICOM format: columns = 1024*numFiles
% first row: uint32 datalen, uint32 filenamelen, char[filenamelen] filename
% remaining rows: char[datalen] data
[~,~,endian] = computer;
needswap = ~strcmp(endian,'L');
for idx=1:numFiles
datalen = typecast(dcmData(idx,1:4),'uint32');
if needswap, datalen = swapbytes(datalen); end
filenamelen = typecast(dcmData(idx,5:8),'uint32');
if needswap, filenamelen = swapbytes(filenamelen); end
filename = char(dcmData(idx,9:9+filenamelen-1));
logData = dcmData(idx,1025:1025+datalen-1);
outfn = fullfile(outpath, filename);
fprintf(' Writing: %s\n', outfn);
fp = fopen(outfn,'w');
fwrite(fp, char(logData));
fclose(fp);
end
fprintf('\nDone!\n');
else
error('%s is not a valid encoded physio DICOM format file!', fn);
end
, multiple selections available,
Related content
fMRI Invididual Vector & Physiology Load and Sync with Waveforms
fMRI Invididual Vector & Physiology Load and Sync with Waveforms
More like this
Converting BMC Dicom Files
Converting BMC Dicom Files
More like this
Physiology Format
Physiology Format
More like this
AD: File/Folder Setup and Preparation for Preprocessing
AD: File/Folder Setup and Preparation for Preprocessing
More like this
OSA 2017 BMC fMRI Sequences
OSA 2017 BMC fMRI Sequences
More like this
HCP Physiology
HCP Physiology
More like this