function [val_UWattsPerCm2,limit_UWattsPerCm2] = ISO2007MPEComputeType1ContinuousRetIrradiancePCWeightedValue(... S,radiance_WattsPerSrM2,weightingA,stimulusDurationSecs,eyeLengthMm) % function [val_UWattsPerCm2,limit_UWattsPerCm2] = ISO2007MPEComputeType1ContinuousRetIrradiancePCWeightedValue(... % S,radiance_WattsPerSrM2,weightingA,stimulusDurationSecs,[eyeLengthMm]) % % Compute the weighted aphakic (photochemical) retinal irradiance for Type 1 instruments as given on page 8, Table 2, % 5.4.1.3.a. % % Input spectrum is radiance in units of Watts/[sr-m2-wlinterval]. % % Also return the exposure limit for this quantity. % % See page 6 for a definition of a Type 1 instrument. As far as I can tell, the key % criterion is that it doesn't put out more light that exceeds the Type 1 limits. % % If the exposure time is longer than 2 hours the specified limits should be reduced by % 1/exposureDuration in hours. This routine implements that adjustment for its returned % limit value. It does not implement a further reduction of of the limit (by a factor of 2) % specifed for microscopes and endoilluminators. % % The standard specifies that the passed radiance should be the highest averaged over % an aperture of a specified size, where the size depends on the instrument. This % routine does not worry about that aspect. The most conservative thing to do is % to pass the highest localized power that will be presented. % % The standard specifies a pupil diameter (7 mm) to use for the conversion from radiance % to retinal irradiance, but not an eye length. We use 17 mm here by default. You % can override this by passing a different length in mm. % % **************************************************************************** % IMPORTANT: Before using the ISO2007MPE routines, please see the notes on usage % and responsibility in PsychISO2007MPE/Contents.m (type "help PsychISO2007MPE" % at the Matlab prompt. % **************************************************************************** % % 6/26/13 dhb Wrote it. %% Default eye length if (nargin < 5 || isempty(eyeLengthMm)) eyeLengthMm = 17; end eyeLengthM = (10^-3)*eyeLengthMm; %% Specify the limit (from table) exposureDurationHours = stimulusDurationSecs/3600; if (exposureDurationHours <= 2) limit_UWattsPerCm2 = 220; else limit_UWattsPerCm2 = 220/(exposureDurationHours/2); end %% Convert radiance to retinal irradiance % % The standard says to do this with for a 7 mm pupil. It does % not give an eye length to assume. We assume 17 mm. pupilDiameterMm = 7; pupilAreaMm2 = pi*((pupilDiameterMm/2)^2); pupilAreaM2 = (10^-6)*pupilAreaMm2; retIrradiance_WattsPerM2 = RadianceAndPupilAreaEyeLengthToRetIrradiance(radiance_WattsPerSrM2,S,pupilAreaM2,eyeLengthM); retIrradiance_UWattsPerM2 = (10^6)*retIrradiance_WattsPerM2; retIrradiance_UWattsPerCm2 = (10^-4)*retIrradiance_UWattsPerM2; %% Get weighted sum. The weighting function is zero outside the % specified wavelength range, so we don't have to worry about the % wavelength limits in the standard. We do perform a sanity check % that something got passed in the wavelength region of interest. wls = SToWls(S); index = find(wls >= 305 & wls <= 700, 1); if (isempty(index)) error('Should not call this routine with no spectral sampling between 305 and 700'); end val_UWattsPerCm2 = sum(retIrradiance_UWattsPerCm2 .* weightingA);