From: Michael Sholl

To: SNAP Calibration Team

Date: 20 October 2004

Re: LED interpixel variation at focal plane during flat field test

Revision history:

3 January 2005: Corrected R^2^ error in irradiance calculation (thank
you N. Mostek & S. Mufson, Indiana)

This memo addresses interpixel light level variations introduced by
discrete LEDs used for flat-fielding. LEDs direct light within the
passive cold stop (PCS), and illuminate a 1cm thick frustum of diffuse
white material (such as Spectralon) located at the upper, inner rim of
the PCS. The white strip is known as the ring of fire (ROF) (See Figures
1 and 2).

Initially, an ASAP model of the LED and illumination pattern was
generated, and used to study interpixel variation, both on the pixel
scale, and on the scale of the entire focal plane. The time required for
tracing sufficient rays for statistical certainty was prohibitive, and
the raytracing approach was set aside in favor of an integral technique.

In an email sent 10 September 2004, Stu Mufson described the irradiance
profile measured from the Roithner Lasertechnik ELD-700-54 LED to be
roughly:

  ------------------------------------ ----------------------------------
  Range                                Value (normalized)

  On-axis to 5º                        1

  5º to 10º                            0.2

  10º to 15º                           0.4

  \>15º                                0
  ------------------------------------ ----------------------------------

Table 1: LED irradiance profile

In the integral model, LED light enters the passive cold stop via
infinitesimal holes in the ROF. Light is collected on the far sides of
the ROF, and is shown in Figure 3 (ROF is unwrapped, and displayed in
local coordinates). The computation domain on the ROF consists of 1000
points in azimuth, and 100 points along the cone wall in the axial
direction.

The irradiance at a given pixel is the integral of the light scattered
from each element on the ROF (100,000 total). The power arriving at a
given pixel may be written:

$$P_{p} = \sum_{j}^{\text{100},\text{000}}P_{j}\text{cos}(\theta_{1j})\text{BRDF}\text{cos}(\theta_{2j})\frac{A_{p}}{D_{j}^{2}}$$

in which *j* denotes a given ROF element, *P~j~* is the integrated power
from all LEDs, measured at a ROF element, *cos(θ~1j~)* is the angle
between the *j*^th^ ROF element normal and the vector oriented in the
direction from the *j*^th^ element to the pixel, BRDF is the
bidirectional reflectance distribution function of spectralon, \~*1/π*,
*cos(θ~2j~)* is the angle between the pixel and the vector oriented in
the direction from the pixel to the *j*^th^ element. *A~p~* is the area
of the pixel, and *D~j~* is the distance from the *j*^th^ element to the
pixel.

![](media/image1.wmf){width="5.995833333333334in"
height="6.198611111111111in"}

Figure 1: PCS and ROF geometry

![](media/image2.png){width="5.997222222222222in"
height="7.315277777777778in"}Figure 2: LED models are oriented behind
holes in the ROF

![](media/image3.wmf){width="5.85in" height="0.9013888888888889in"}

Figure 3: Intensity of light on "unwrapped" ROF (white is brightest,
black is dark).

ROF elements light were integrated at a given pixel location, and are
plotted for a radial distribution of pixels in Figure 4.

![](media/image4.wmf){width="5.833333333333333in" height="4.375in"}

Figure 4, Radial variation in ROF illumination, as seen at pixel

Figures 4 shows radial variations in pixel irradiance levels on the
focal plane due to a distribution of seven LEDs illuminating the ROF.
Figure 5 shows Azimuthal variations at various radii on the focal plane
(from R=13-29cm). Figure 6 shows the same 7-LED ROF, but reports focal
plane pixel irradiances when one of the seven LEDs is turned off. Local
(pixel neighborhood) variations are also of interest, so pixel
variations in the immediate vicinity of R=20cm on the focal plane are
reported in Figure 7.

![](media/image5.wmf){width="5.998611111111111in"
height="4.446527777777778in"}

Figure 5, Azimuthal variations in ROF illumination, as seen at pixel.
Variations are maximum ±2x10^-11^ at R=29cm.

![](media/image6.wmf){width="5.257638888888889in"
height="3.897222222222222in"}

Figure 6, Azimuthal variations in ROF illumination, as seen at pixel. A
seven-LED arrangement is used, with one LED turned off. Lower curve is
at R=0.13m (focal plane) and upper curve is at R=0.29m.

![](media/image7.wmf){width="5.833333333333333in" height="4.375in"}

Figure 7: Variation of irradiance in the neighborhood of a pixel. Recall
pixels are \~10microns across.

**PIXEL ABSOLUTE IRRADIANCE**

The majority of light from the LED falls within ±5º of the optical axis.
As oriented on the ROF, LEDs are 9cm from from the diffuse strip. The
strip is 1cm wide, so the area of the strip is:
*(2)(tan(5))(9cm)\*1cm=1.6cm^2^*. If directed to a flat plate, the LED
spot size is roughly 2cm^2^, so we may assume that \~50% of the light
from each LED reaches the diffuse scattering strip. If each LED has a
power of 0.1mW, the total power from seven LEDs shining on the ROF is
0.1mW(7)(0.5)=0.35mW, or (0.633μm)(0.35mW)(5x10^18^)=1x10^15^ photons/s.

The ROF patches are roughly 80cm from the focal plane. The angle from
the ROF normal to the ROF-pixel vector is \~60º, while the angle from
the pixel normal to the ROF-pixel vector is \~14º. If the BRDF of
Spectralon is roughly constant at 1/π, and the pixel length is 10μm, the
photons/s at a pixel are:
10^15^photons/s\*cos(60)(1/π/sr)cos(14)\*(10x10^-6^/0.8)^2^=2.4x10^4^
photons/s. With a quantum efficiency of 0.6, the electron rate per pixel
is 1.4x10^4^e/s. To fill a well ¾ full requires 1.5x10^4^e, so
integration time is roughly 1s.

**CONCLUSIONS:**

This document and analysis are intended to show variations in the
irradiance measured at the focal plane caused by discrete LEDs
illuminating the ROF. Seven LEDs were modeled, delivered light to a
white, 1cm tall ring (ROF) near the top interior of the passive cold
stop, and scattered downward to pixels on the focal plane. (Roughly one
second is required to fill each well to ¾ electron capacity.) A constant
BRDF of 1/π was assumed for the diffuse white Spectralon strip which
comprises the ROF. The ROF was modeled with a resolution of 1000 in
azimuth, and 100 along the length of the strip. Scattered light from
these 100,000 ROF resels was integrated at the focal plane, and
presented in Figures 4 and 5 (large scale), and smaller scales presented
in Figure 6. For a pixel step size of ten microns, the worst case
difference in irradiance is found at the very edge of the working field
and amounts to 0\<0.05% variation between pixels (edge pixels are
farther from the ROF than pixels near the inner radius of the focal
plane).

**APPENDIX: MATLAB SOURCE CODE**

\% Dome flat integral calculation

\% M. Sholl

\% 18 October 2004

\% Using surface irradiance relations, determine flux to a pixel,
integrated

\% illumination distributions at the Ring Of Fire (ROF).

nLEDs=7;

nEta=nLEDs\*100; nXsi=100;

X=zeros(nXsi\*nEta,3); nX=X;

for Eta=1:nEta,

theta=Eta/nEta\*2\*pi;

for Xsi=1:nXsi,

num=Xsi+(Eta-1)\*nXsi;

X(num,1)=0.795+0.01/nXsi\*Xsi; % ROF element positions

X(num,2)=(0.293-X(num,1)\*tan(17.2\*pi/180))\*cos(theta);

X(num,3)=(0.293-X(num,1)\*tan(17.2\*pi/180))\*sin(theta);

nX(num,1)=-sin(17.2\*pi/180); % ROF element normals

nX(num,2)= cos(17.2\*pi/180)\*( -cos(theta));

nX(num,3)= cos(17.2\*pi/180)\*( -sin(theta));

end

end

\% quiver3(X(:,1),X(:,2),X(:,3),nX(:,1),nX(:,2),nX(:,3));

\% trimesh(delaunay(X(:,2),X(:,3)),X(:,2),X(:,3),X(:,1));

\% to make a column vector of the xLED coords, ones(1000,1)\*xLED;

\% LED to ROF vectors

xLED=\[0.795+0.01/2 0.293-(0.795+0.02/2)\*tan(17.2\*pi/180) 0\];

nLED=\[0 -1 0\];

LED_ROF=X-ones(nEta\*nXsi,1)\*xLED;

LED_ROF_DIST=sqrt(LED_ROF(:,1).\^2+LED_ROF(:,2).\^2+LED_ROF(:,3).\^2);

LED_ROF=LED_ROF./(LED_ROF_DIST\*ones(1,3));

%%% Set up LED irradiance pattern on wall of ROF

%100% to 5deg, 20% to 10deg, 40% to 15deg

\% P=rand(nXsi\*nEta,1);

P=zeros(nXsi\*nEta,1);

LED_dots=dot(LED_ROF\',(ones(nEta\*nXsi,1)\*nLED)\')\';

P(find( LED_dots \>=cos(5\*pi/180)))=1.;

P(find( (LED_dots \<= cos(5\*pi/180)) & (LED_dots\>cos(10\*pi/180))
))=0.2;

P(find( (LED_dots \<=cos(10\*pi/180)) & (LED_dots\>cos(15\*pi/180))
))=0.4;

P=reshape(P,nXsi,nEta); % imagesc(P);

\% P=ones(nXsi,nEta); % HARDWIRED TO 1

PP=zeros(nXsi,nEta);

for j=1:nLEDs, %%%%%%%%%%%%%%%%%%%%%%% HARDWIRED to nLEDs-1!!!!!1

disp(round((j-1)\*nEta/nLEDs));

PP=PP+circshift(P,\[0 floor((j-1)\*nEta/(nLEDs))\]);

end

\% PP=circshift(PP,\[0 10\]);

pcount=0; % azimuth sweep line

for RD=0.13:.01:.29, %.13 .01 .29 % azimuth sweep line

\% for RD=0.2-100e-6:10e-6:0.2+100e-6,

pcount=pcount+1; % azimuth sweep line

\% pixel to ROF vectors

ncount=0;

\% for xj=0.2-10\*10e-6:1e-6:0.2+10\*10e-6, % neighborhood sweep line

thinc=10;

for TH=0.:thinc:360, % azimuth sweep line

ncount=ncount+1;

\% xPIXEL=\[0 0 xj\]; % radial sweep line

xPIXEL=ones(nEta\*nXsi,1)\*\[0 cos(TH\*pi/180)\*RD
sin(TH\*pi/180)\*RD\];

\% azimuth sweep line

nPIXEL=\[1 0 0\];

PIXEL_ROF=X-xPIXEL;

PIXEL_ROF_DIST=
sqrt(PIXEL_ROF(:,1).\^2+PIXEL_ROF(:,2).\^2+PIXEL_ROF(:,3).\^2);

PIXEL_ROF=PIXEL_ROF./(sqrt(PIXEL_ROF(:,1).\^2+PIXEL_ROF(:,2).\^2+PIXEL_ROF(:,3).\^2)\*ones(1,3));

\% PIXEL_ROF_DIST=
sqrt(PIXEL_ROF(:,1).\^2+PIXEL_ROF(:,2).\^2+PIXEL_ROF(:,3).\^2);

\% PIXEL_ROF=PIXEL_ROF./(PIXEL_ROF_DIST\*ones(1,3));

\% ROF to pixel vectors

ROF_PIXEL=-PIXEL_ROF;

aROFe=2.\*pi\*0.8\*0.01/(nEta\*nXsi); % mean area of ROF differential
element

\% Pcollector=Psource cos(theta1) BRDF Apixel/D\^2 cos(theta2)

CT1=dot(nX\',ROF_PIXEL\')\'; % cos(theta1) % ROF normal to pixel

CT2=dot(PIXEL_ROF\',(ones(nEta\*nXsi,1)\*nPIXEL)\')\'; % cos(theta2) %
pixel to ROF

aPixel=(10.e-6)\^2;

\% recall, distance from pixel to ROF is PIXEL_ROF_DIST

BRDF=1./pi;

P_ROF_PIXEL=reshape(PP,nEta\*nXsi,1).\*CT1.\*CT2./(PIXEL_ROF_DIST.\^2)\*aPixel\*BRDF;

\% imagesc(reshape(P_ROF_PIXEL,nXsi,nEta))

\%
GCF=dot(-nX\',LED_ROF\')\'./(PIXEL_ROF_DIST.\^2).\*dot(-nPIXEL\',PIXEL_ROF\')\';

\%
oof(ncount)=sum(reshape(PP,nEta\*nXsi,1).\*CT1.\*CT2./PIXEL_ROF_DIST);

oops(pcount,ncount)=sum(reshape(PP,nEta\*nXsi,1).\*CT1);

\% oops(ncount)=sum(reshape(PP,nEta\*nXsi,1));

PLOT_P(ncount,pcount)= sum(P_ROF_PIXEL);

PLOT_TH(ncount,pcount)=TH; % azimuth sweep line

\% PLOT_R(ncount)=xj; % radial sweep line

\% hold on;

\% plot(CT1);

\% pause(0.05);

end % this line goes with both azimuth sweep, neighborhood, and radial

%plot(oops);

end % azimuth sweep line

\% radial sweep lines

\% plot(PLOT_R\*1e6-.2\*1e6,PLOT_P);

\% xlabel(\'Radial position on focal plane (microns), referenced from
R=20cm\');

\% ylabel(\'Pixel normalized irradiance\');

\% title(\'Radial variations in pixel irradiance\');

keyboard

pcount=0;

for RD=0.13:.01:.29,

pcount=pcount+1;

plot(PLOT_TH(:,pcount),PLOT_P(:,pcount));

if(pcount==1)

hold on;

end

disp(std(PLOT_P)/mean(PLOT_P));

end

hold off

\% axis (\[0 360 1e-8 1e-6\]);

\% axis (\[0 360 6.5e-9 8e-9\])

xlabel(\'Azimuth angle on focal plane (deg)\');

ylabel(\'Pixel normalized irradiance\');

title(\'Azimuthal variations in pixel irradiance\');

keyboard

\%
plot(PLOT_TH(:,17),(PLOT_P(:,17)-mean(PLOT_P(:,17)))/mean(PLOT_P(:,17)))