/usr/share/psychtoolbox-3/PsychHardware/Daq/DaqCalibrateAIn.m is in psychtoolbox-3-common 3.0.11.20131230.dfsg1-1build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | function DaqCalibrateAIn(daq,channel)
% Syntax: DaqCalibrateAIn(DeviceID,AnalogChannel)
%
% Purpose: Measure output of calibration pin to provide calibration of the
% input "AnalogChannel" on the device "DeviceID".
%
% History: 1/10/08 mpr decided to calibrate good times come on!
% 3/5/08 mpr fixed bug exposed when preference file doesn't exist
%
% This function was written for the USB-1608FS. It could be easily modified for
% a 1208FS, but since there are only two levels of the output on that device it
% seems like it would be a bit less useful. If you want to modify this for such
% a device, please feel free. Since I don't have one, I'm not motivated...
% If you have a 1608FS, this function walks through the outputs of the
% calibration terminal and the gain settings of the analog channel and produces
% corrections that will affect the interpretation of numbers derived from other
% functions (e.g., DaqAIn and DaqAInScan). "AnalogChannel" can be a vector
% (values range from 0:7) if you want to calibrate multiple channels at once.
% Default channel is 0, and if no argument is passed for DeviceID, DaqFind will
% be run to see if you have only one device. -- mpr
%
% To calibrate a channel, connect the appropriate pin(s) to pin 17. For channel
% 0, you want pin 1 to pin 17, for channel 1, pin 3 to pin 17, for channel 2,
% pin 5 to... you probably see the pattern...
if nargin < 2 || isempty(channel)
channel = 0;
end
if nargin < 1 || isempty(daq)
daq=DaqFind;
end
% Flag to get DaqAIn to return raw digital responses
UnCal=1;
AllHIDDevices = PsychHIDDAQS;
if isempty(strfind(AllHIDDevices(daq).product,'1608'))
error(sprintf(['It appears that you are not using a USB-1608FS. If that is correct, then you \n' ...
'should modify DaqCalibrateAIn if you want to use the function for your device.\n']));
end
% in case user does something bizarre and passes the same value more than once
channel = unique(channel);
if any(~ismember(channel,0:7))
error('Channels should range from 0 through 7, and it looks like yours don''t.');
end
CalVs = [0 0.625 1.25 2.5 5];
VMaxs = [10 5 2.5 2 1.25 1 0.625 0.3125];
DaqPrefsDir = DaqtoolboxConfigDir;
PrefsExist = exist([DaqPrefsDir filesep 'DaqPrefs.mat'],'file');
CalData = [];
if PrefsExist
DaqVars=load([DaqPrefsDir filesep 'DaqPrefs']);
if isfield(DaqVars,'CalData')
CalData = DaqVars.CalData;
else
PrefsExist=0;
end
end
for k=1:length(channel)
for l=1:length(VMaxs)
VIns = [];
DOuts = [];
for m=1:length(CalVs)
if CalVs(m) <= VMaxs(l)
DaqSetCal(daq,m-1);
VIns(end+1) = CalVs(m);
for n=1:5
TmpD(n) = DaqAIn(daq,channel(k),l-1,UnCal);
end
DOuts(end+1) = mean(TmpD);
else
break;
end
end
if length(VIns) > 2
CalData(end+1,:) = [channel(k) l-1 polyfit(DOuts,VIns,2) datenum(date)];
elseif length(VIns) > 1
CalData(end+1,:) = [channel(k) l-1 0 polyfit(DOuts,VIns,1) datenum(date)];
else
CalData(end+1,:) = [channel(k) l-1 0 1 -DOuts datenum(date)];
end
end
end
DaqVars.CalData = CalData;
save([DaqPrefsDir filesep 'DaqPrefs'],'-Struct','DaqVars');
return;
|