Home » Source Code » mocaptoolbox » readC3dIDL.m

readC3dIDL.m ( File view )

From:mocaptoolbox
  • By mountain 2013-11-27
  • View(s):18
  • Download(s):0
  • Point(s): 1
			function [Markers,MLabels,VideoFrameRate,AnalogSignals,ALabels,AUnits,AnalogFrameRate,Event,ParameterGroup,CameraInfo, ResidualError]=...
    readc3dIDL(FullFileName, varargin)
% ReadC3D:	Read 3D video coordinate and analog (FP) data from a C3D file 
%
% Input:             FullFileName - file (including path) to be read
%       (optional)   force number of markers
%       (optional)   subtractAnalogOffset - indices of columns (in order of ALabels)
% Output:
% Markers            3D-marker data [NvideoFrames x Nmarkers*Ndim(=3)]
% MLabels            marker column identifiers
% VideoFrameRate     Frames/sec
% AnalogSignals      Analog signals [Nsignals x NanalogSamples ]
% ALabels            anolog column (signal) idenitifiers
% AnalogFrameRate    Samples/sec
% Event              Event(Nevents).time ..value  ..name
% ParameterGroup     ParameterGroup(Ngroups).Parameters(Nparameters).data ..etc.
% CameraInfo         MarkerRelated CameraInfo [Nmarkers x NvideoFrames]
% ResidualError      MarkerRelated ErrorInfo  [Nmarkers x NvideoFrames]
%
% AUTHOR(S) AND VERSION-HISTORY
% Ver. 1.0 Creation (Alan Morris, Toronto, October 1998) [originally named "getc3d.m"]
% Ver. 2.0 Revision (Jaap Harlaar, Amsterdam, april 2002)
% Ver. 3.0 Revision (Ajay Seth, Stanford University, August 2007)
%==========================================================================

Markers=[];
MLabels=[];
VideoFrameRate=0;
AnalogSignals=[];
ALabels=[];
AnalogFrameRate=0;
Event=[];
ParameterGroup=[];
CameraInfo=[];
ResidualError=[];

% ###############################################
% ##                                           ##
% ##    open the file                          ##
% ##                                           ##
% ###############################################

ind=findstr(FullFileName,'\');
if ind>0, FileName=FullFileName(ind(length(ind))+1:length(FullFileName)); else FileName=FullFileName; end

fid=fopen(FullFileName,'r','n'); % native format (PC-intel)

if fid==-1,
h=errordlg(['File: ',FileName,' could not be opened'],'application error');
uiwait(h)
return
end

NrecordFirstParameterblock=fread(fid,1,'int8');     % Reading record number of parameter section
key=fread(fid,1,'int8');                           % key = 80;

if key~=80,
h=errordlg(['File: ',FileName,' does not comply to the C3D format'],'application error');
uiwait(h)
fclose(fid)
return
end


fseek(fid,512*(NrecordFirstParameterblock-1)+3,'bof'); % jump to processortype - field
proctype=fread(fid,1,'int8')-83;                       % proctype: 1(INTEL-PC); 2(DEC-VAX); 3(MIPS-SUN/SGI)

if proctype==2,
    fclose(fid);
    fid=fopen(FullFileName,'r','d'); % DEC VAX D floating point and VAX ordering
end
    
% ###############################################
% ##                                           ##
% ##    read header                            ##
% ##                                           ##
% ###############################################

%NrecordFirstParameterblock=fread(fid,1,'int8');     % Reading record number of parameter section
%key1=fread(fid,1,'int8');                           % key = 80;

fseek(fid,2,'bof');


Nmarkers=fread(fid,1,'int16');			        %number of markers

if nargin > 1,
    if ~isempty(varargin{
1
}),
        Nmarkers = varargin{
1
};
    end
end

NanalogSamplesPerVideoFrame=fread(fid,1,'int16');			%number of analog channels x #analog frames per video frame
StartFrame=fread(fid,1,'int16');		        %# of first video frame

EndFrame=fread(fid,1,'int16');			        %# of last video frame

MaxInterpolationGap=fread(fid,1,'int16');		%maximum interpolation gap allowed (in frame)

Scale=fread(fid,1,'float32');			        %floating-point scale factor to convert 3D-integers to ref system units

NrecordDataBlock=fread(fid,1,'int16');			%starting record number for 3D point and analog data

NanalogFramesPerVideoFrame=fread(fid,1,'int16');
if NanalogFramesPerVideoFrame > 0,
    NanalogChannels=NanalogSamplesPerVideoFrame/NanalogFramesPerVideoFrame;	
else
    NanalogChannels=0;
end


VideoFrameRate=fread(fid,1,'float32');
AnalogFrameRate=VideoFrameRate*NanalogFramesPerVideoFrame;

% ###############################################
% ##                                           ##
% ##    read events                            ##
% ##                                           ##
% ###############################################

fseek(fid,298,'bof');
EventIndicator=fread(fid,1,'int16');	
if EventIndicator==12345,
    Nevents=fread(fid,1,'int16');	
    fseek(fid,2,'cof'); % skip one position/2 bytes
    if Nevents>0,
        for i=1:Nevents,
            Event(i).time=fread(fid,1,'float');
        end
        fseek(fid,188*2,'bof');
        for i=1:Nevents,
            Event(i).value=fread(fid,1,'int8');
        end
         fseek(fid,198*2,'bof');
        for i=1:Nevents,
            Event(i).name=cellstr(char(fread(fid,4,'char')'));
        end
    end
end


% ###############################################
% ##                                           ##
% ##    read 1st parameter block               ##
% ##                                           ##
% ###############################################

fseek(fid,512*(NrecordFirstParameterblock-1),'bof');

dat1=fread(fid,1,'int8'); 
key2=fread(fid,1,'int8');                   % key = 80;
NparameterRecords=fread(fid,1,'int8');
proctype=fread(fid,1,'int8')-83;            % proctype: 1(INTEL-PC); 2(DEC-VAX); 3(MIPS-SUN/SGI)


Ncharacters=fread(fid,1,'int8');   			% characters in group/parameter name
GroupNumber=fread(fid,1,'int8');				% id number -ve=group / +ve=parameter


while Ncharacters > 0 % The end of the parameter record is indicated by <0 characters for group/parameter name
    
    if GroupNumber<0 % Group data
        GroupNumber=abs(GroupNumber); 
        GroupName=fread(fid,[1,Ncharacters],'char');			
        ParameterGroup(GroupNumber).name=cellstr(char(GroupName));	%group name
        offset=fread(fid,1,'int16');							%offset in bytes
        deschars=fread(fid,1,'int8');							%description characters
        GroupDescription=fread(fid,[1,deschars],'char');
        ParameterGroup(GroupNumber).description=cellstr(char(GroupDescription)); %group description
        
        ParameterNumberIndex(GroupNumber)=0;
        fseek(fid,offset-3-deschars,'cof');
        
        
    else % parameter data
        clear dimension;
        ParameterNumberIndex(GroupNumber)=ParameterNumberIndex(GroupNumber)+1;
        ParameterNumber=ParameterNumberIndex(GroupNumber);              % index all parameters within a group
        
        ParameterName=fread(fid,[1,Ncharacters],'char');				% name of parameter
        
        % read parameter name
        if size(ParameterName)>0
            ParameterGroup(GroupNumber).Parameter(ParameterNumber).name=cellstr(char(ParameterName));	%save parameter name
        end
        
        % read offset 
        offset=fread(fid,1,'int16');							%offset of parameters in bytes
        filepos=ftell(fid);										%present file position
        nextrec=filepos+offset(1)-2;							%position of beginning of next record
        
        
        % read type
        type=fread(fid,1,'int8');     % type of data: -1=char/1=byte/2=integer*2/4=real*4
        ParameterGroup(GroupNumber).Parameter(ParameterNumber).datatype=type;
        
        
        % read number of dimensions
        dimnum=fread(fid,1,'int8');
        if dimnum==0 
            datalength=abs(type);								%length of data record
        else
            mult=1;
            for j=1:dimnum
                dimension(j)=fread(fid,1,'uint8');
                mult=mult*dimension(j);
                ParameterGroup(GroupNumber).Parameter(ParameterNumber).dim(j)=dimension(j);  %save parameter dimension data
            end
            datalength=abs(type)*mult;							%length of data record for multi-dimensional array
        end
        
        
        if type==-1 %datatype=='char'  
            
            wordlength=dimension(1);	%length of character word
            if dimnum==2 & datalength>0 %& parameter(idnumber,index,2).dim>0            
                for j=1:dimension(2)
                    data=fread(fid,[1,wordlength],'char');	%character word data record for 2-D array
                    ParameterGroup(GroupNumber).Parameter(ParameterNumber).data(j)=cellstr(char(data));
                end
                
            elseif dimnum==1 & datalength>0
                data=fread(fid,[1,wordlength],'char');		%numerical data record of 1-D array
                ParameterGroup(GroupNumber).Parameter(ParameterNumber).data=cellstr(char(data));
            end
            
        elseif type==1    %1-byte for boolean
            
            Nparameters=datalength/abs(type);		
            data=fread(fid,Nparameters,'int8');
            ParameterGroup(GroupNumber).Parameter(ParameterNumber).data=data;
            
        elseif type==2 & datalength>0			%integer
            
            Nparameters=datalength/abs(type);		
            data=fread(fid,Nparameters,'int16');
            if dimnum>1
                ParameterGroup(GroupNumber).Parameter(ParameterNumber).data=reshape(data,dimension);
            else
                ParameterGroup(GroupNumber).Parameter(ParameterNumber).data=data;
            end
            
        elseif type==4 & datalength>0
            
            Nparameters=datalength/abs(type);
            data=fread(fid,Nparameters,'float');
            if dimnum>1
                ParameterGroup(GroupNumber).Parameter(ParameterNumber).data=reshape(data,dimension);
            else
                ParameterGroup(GroupNumber).Parameter(ParameterNumber).data=data;
            end
        else
            % error
        end
        
        deschars=fread(fid,1,'int8');							%description characters
        if deschars>0
            description=fread(fid,[1,deschars],'char');
            ParameterGroup(GroupNumber).Parameter(ParameterNumber).description=cellstr(char
...
...
(Not finished, please download and read the complete file)
			
...
Expand> <Close

Want complete source code? Download it here

Point(s): 1

Download
0 lines left, continue to read
Sponsored links

File list

Tips: You can preview the content of files by clicking file names^_^
Name Size Date
01.97 kB
License.txt15.84 kB2013-02-12 03:05
01.97 kB
01.97 kB
._License.txt313.00 B2013-02-12 03:05
MCT_manual_v1.4.pdf1.92 MB2013-02-12 04:00
._MCT_manual_v1.4.pdf82.00 B2013-02-12 04:00
01.97 kB
.DS_Store15.00 kB2013-02-11 04:26
01.97 kB
._.DS_Store193.00 B2013-02-11 04:26
contents.m3.85 kB2013-02-12 03:20
._contents.m171.00 B2013-02-12 03:20
<Icon^M>0.00 B2008-03-04 19:13
._Icon^M43.58 kB2008-03-04 19:13
mc2frontal.m2.02 kB2011-10-18 09:23
._mc2frontal.m82.00 B2011-10-18 09:23
mcanimate.m1.33 kB2011-10-18 09:04
._mcanimate.m266.00 B2011-10-18 09:04
mcbandpass.m3.49 kB2011-10-18 09:01
._mcbandpass.m82.00 B2011-10-18 09:01
mcboundrect.m1.74 kB2011-10-19 08:03
._mcboundrect.m82.00 B2011-10-19 08:03
mcc3d2tsv.m2.70 kB2012-04-16 05:29
._mcc3d2tsv.m82.00 B2012-04-16 05:29
mccenter.m804.00 B2011-10-17 11:55
._mccenter.m82.00 B2011-10-17 11:55
mcconcatenate.m2.70 kB2013-02-12 03:01
._mcconcatenate.m82.00 B2013-02-12 03:01
mccreateconnmatrix.m1.89 kB2011-10-19 09:00
._mccreateconnmatrix.m82.00 B2011-10-19 09:00
mccumdist.m1.17 kB2011-10-19 08:54
._mccumdist.m82.00 B2011-10-19 08:54
mccut.m698.00 B2011-10-18 08:26
._mccut.m82.00 B2011-10-18 08:26
mcdecompose.m1.58 kB2011-10-18 08:20
._mcdecompose.m82.00 B2011-10-18 08:20
mcdemo.m1.82 kB2011-10-14 09:29
._mcdemo.m82.00 B2011-10-14 09:29
mcdemo1.m4.13 kB2012-04-12 05:37
._mcdemo1.m82.00 B2012-04-12 05:37
mcdemo10.m2.27 kB2013-01-29 07:56
._mcdemo10.m82.00 B2013-01-29 07:56
mcdemo11.m1.87 kB2012-04-12 08:04
._mcdemo11.m167.00 B2012-04-12 08:04
mcdemo2.m2.27 kB2008-05-21 00:26
._mcdemo2.m193.00 B2008-05-21 00:26
mcdemo3.m3.46 kB2013-02-11 13:20
._mcdemo3.m82.00 B2013-02-11 13:20
mcdemo4.m3.09 kB2008-05-27 15:53
._mcdemo4.m193.00 B2008-05-27 15:53
mcdemo5.m4.13 kB2013-01-29 07:45
._mcdemo5.m82.00 B2013-01-29 07:45
mcdemo6.m1.28 kB2008-05-21 00:20
._mcdemo6.m82.00 B2008-05-21 00:20
mcdemo7.m1.38 kB2008-05-21 00:20
._mcdemo7.m82.00 B2008-05-21 00:20
mcdemo8.m2.17 kB2010-05-21 10:42
._mcdemo8.m82.00 B2010-05-21 10:42
mcdemo9.m2.86 kB2013-01-29 07:56
._mcdemo9.m82.00 B2013-01-29 07:56
mcdemodata.mat1.27 MB2012-04-16 04:59
._mcdemodata.mat82.00 B2012-04-16 04:59
mceigenmovement.m1.66 kB2011-10-18 08:18
._mceigenmovement.m82.00 B2011-10-18 08:18
mcfillgaps.m5.57 kB2011-10-18 08:15
._mcfillgaps.m167.00 B2011-10-18 08:15
mcfilteremg.m1.32 kB2011-10-18 09:43
._mcfilteremg.m82.00 B2011-10-18 09:43
mcgetmarker.m1.29 kB2013-02-11 04:25
._mcgetmarker.m82.00 B2013-02-11 04:25
mcgetmarkername.m582.00 B2011-10-17 11:43
._mcgetmarkername.m82.00 B2011-10-17 11:43
mcgetsegmpar.m2.73 kB2011-10-18 08:00
._mcgetsegmpar.m82.00 B2011-10-18 08:00
mchilbert.m1.01 kB2011-10-17 11:48
._mchilbert.m82.00 B2011-10-17 11:48
mchilberthuang.m1.43 kB2011-10-18 07:57
._mchilberthuang.m82.00 B2011-10-18 07:57
mcicaproj.m1.59 kB2011-10-18 07:54
._mcicaproj.m82.00 B2011-10-18 07:54
mcinitanimpar.m2.73 kB2011-11-01 11:54
._mcinitanimpar.m266.00 B2011-11-01 11:54
mcinitj2spar.m675.00 B2011-10-17 10:24
._mcinitj2spar.m82.00 B2011-10-17 10:24
mcinitm2jpar.m643.00 B2011-10-17 10:24
._mcinitm2jpar.m82.00 B2011-10-17 10:24
mcinitstruct.m3.75 kB2011-10-18 09:28
._mcinitstruct.m82.00 B2011-10-18 09:28
mcj2s.m2.20 kB2011-10-17 12:28
._mcj2s.m82.00 B2011-10-17 12:28
mckinenergy.m2.08 kB2011-12-12 04:04
._mckinenergy.m82.00 B2011-12-12 04:04
mckurtosis.m791.00 B2011-10-17 12:24
._mckurtosis.m82.00 B2011-10-17 12:24
mcm2j.m1.08 kB2011-10-17 12:28
._mcm2j.m82.00 B2011-10-17 12:28
mcmakedemoparams.m2.39 kB2008-05-13 14:29
._mcmakedemoparams.m82.00 B2008-05-13 14:29
mcmarkerdist.m763.00 B2011-10-17 12:29
._mcmarkerdist.m82.00 B2011-10-17 12:29
mcmean.m623.00 B2011-10-19 08:52
._mcmean.m82.00 B2011-10-19 08:52
mcmerge.m14.48 kB2013-02-12 02:57
._mcmerge.m82.00 B2013-02-12 02:57
mcmissing.m936.00 B2011-10-18 07:41
._mcmissing.m82.00 B2011-10-18 07:41
mcmocapgram.m1.89 kB2013-02-01 16:12
._mcmocapgram.m338.00 B2013-02-01 16:12
mcnorm.m830.00 B2011-10-18 07:41
._mcnorm.m82.00 B2011-10-18 07:41
mcpcaproj.m2.76 kB2013-02-12 03:16
._mcpcaproj.m82.00 B2013-02-12 03:16
mcperiod.m3.21 kB2013-02-12 03:16
._mcperiod.m82.00 B2013-02-12 03:16
mcplotframe.m13.90 kB2013-02-10 11:58
._mcplotframe.m82.00 B2013-02-10 11:58
mcplotphaseplane.m3.38 kB2011-10-18 07:26
._mcplotphaseplane.m82.00 B2011-10-18 07:26
mcplottimeseries.m17.26 kB2013-01-29 08:36
._mcplottimeseries.m82.00 B2013-01-29 08:36
mcplottimeseries_dep.m6.72 kB2013-01-29 08:35
._mcplottimeseries_dep.m82.00 B2013-01-29 08:35
mcpotenergy.m1.69 kB2011-10-18 03:23
._mcpotenergy.m82.00 B2011-10-18 03:23
mcread.m2.44 kB2012-04-13 10:31
._mcread.m312.00 B2012-04-13 10:31
mcreademg.m1.71 kB2011-10-18 03:17
._mcreademg.m331.00 B2011-10-18 03:17
mcreorderdims.m678.00 B2011-10-18 03:04
._mcreorderdims.m82.00 B2011-10-18 03:04
mcresample.m951.00 B2011-10-17 13:01
._mcresample.m82.00 B2011-10-17 13:01
mcrotate.m2.50 kB2011-10-18 03:36
._mcrotate.m330.00 B2011-10-18 03:36
mcs2j.m1.41 kB2011-10-17 13:08
._mcs2j.m82.00 B2011-10-17 13:08
mcs2posture.m541.00 B2011-10-17 13:08
._mcs2posture.m82.00 B2011-10-17 13:08
mcsegmangle.m725.00 B2011-10-17 13:08
._mcsegmangle.m82.00 B2011-10-17 13:08
mcsethares.m3.93 kB2011-10-18 02:59
._mcsethares.m82.00 B2011-10-18 02:59
mcsetmarker.m3.03 kB2013-02-10 11:58
._mcsetmarker.m82.00 B2013-02-10 11:58
mcsimmat.m952.00 B2011-10-18 03:35
._mcsimmat.m82.00 B2011-10-18 03:35
mcskewness.m728.00 B2011-10-19 08:55
._mcskewness.m82.00 B2011-10-19 08:55
mcsmoothen.m3.43 kB2011-10-17 13:17
._mcsmoothen.m82.00 B2011-10-17 13:17
mcspectrum.m1.83 kB2011-10-18 02:53
._mcspectrum.m266.00 B2011-10-18 02:53
mcstatmoments.m707.00 B2011-10-19 08:56
._mcstatmoments.m82.00 B2011-10-19 08:56
mcstd.m649.00 B2011-10-19 08:55
._mcstd.m82.00 B2011-10-19 08:55
mctimeder.m6.67 kB2012-04-12 08:39
._mctimeder.m82.00 B2012-04-12 08:39
mctimeintegr.m1.59 kB2011-10-18 03:37
._mctimeintegr.m82.00 B2011-10-18 03:37
mctranslate.m761.00 B2011-10-17 13:24
._mctranslate.m82.00 B2011-10-17 13:24
mctrim.m2.00 kB2011-10-19 04:44
._mctrim.m82.00 B2011-10-19 04:44
mcvar.m629.00 B2011-10-19 08:56
._mcvar.m82.00 B2011-10-19 08:56
mcvect2grid.m1.38 kB2011-10-19 08:09
._mcvect2grid.m82.00 B2011-10-19 08:09
mcwindow.m3.32 kB2011-10-18 03:37
._mcwindow.m82.00 B2011-10-18 03:37
mcwritetsv.m2.27 kB2012-04-16 05:29
._mcwritetsv.m376.00 B2012-04-16 05:29
01.97 kB
.DS_Store6.00 kB2012-04-12 09:26
01.97 kB
._.DS_Store193.00 B2012-04-12 09:26
dir2quat.m568.00 B2008-01-17 18:16
._dir2quat.m193.00 B2008-01-17 18:16
initemptymc.mat127.62 kB2009-11-29 17:45
makecolumn.m257.00 B2007-09-11 13:58
mcica.m1.04 kB2010-05-07 03:59
._mcica.m193.00 B2010-05-07 03:59
mcpca.m829.00 B2008-12-10 13:09
._mcpca.m82.00 B2008-12-10 13:09
mcreadc3d.m1.21 kB2011-09-07 06:28
._mcreadc3d.m82.00 B2011-09-07 06:28
mcreadmat.m2.00 kB2011-09-07 06:26
._mcreadmat.m312.00 B2011-09-07 06:26
mcreadtsv.m3.50 kB2012-04-13 05:38
._mcreadtsv.m82.00 B2012-04-13 05:38
mcreadwii.m1.02 kB2011-09-07 06:26
._mcreadwii.m171.00 B2011-09-07 06:26
mypca.m507.00 B2008-10-21 15:46
._mypca.m82.00 B2008-10-21 15:46
qinv.m106.00 B2008-01-17 18:02
._qinv.m193.00 B2008-01-17 18:02
quatrot.m618.00 B2008-04-18 18:29
._quatrot.m193.00 B2008-04-18 18:29
readc3d.m12.15 kB2013-01-29 15:11
._readc3d.m341.00 B2013-01-29 15:11
readC3dIDL.m14.27 kB2009-11-30 03:02
smoothderiv.m390.00 B2006-05-21 13:26
._smoothderiv.m82.00 B2006-05-21 13:26
validfield.m464.00 B2007-04-30 11:04
._private193.00 B2013-01-31 03:26
._mocaptoolbox193.00 B2013-02-12 03:16
releasenotes_v1.4.txt5.74 kB2013-02-12 03:10
._releasenotes_v1.4.txt171.00 B2013-02-12 03:10
...
Sponsored links

readC3dIDL.m (3.10 MB)

Need 1 point
Your Point(s)

Your Point isn't enough.

Get point immediately by PayPal

More(Debit card / Credit card / PayPal Credit / Online Banking)

Submit your source codes. Get more point

LOGIN

Don't have an account? Register now
Need any help?
Mail to: support@codeforge.com

切换到中文版?

CodeForge Chinese Version
CodeForge English Version

Where are you going?

^_^"Oops ...

Sorry!This guy is mysterious, its blog hasn't been opened, try another, please!
OK

Warm tip!

CodeForge to FavoriteFavorite by Ctrl+D