Cartoon of photons arriving on a photon-counting detector
Matlab code
% Cartoon of a photon counter
close all
vid = VideoWriter('photonCounter.mp4','MPEG-4');
vid.Quality = 100;
vid.FrameRate = 60;
open(vid);
figure('units','pixels','position',[0 0 1920 1080],'ToolBar','none');
set(0,'defaultfigurecolor',[1 1 1]);
s2cam = 6.4;
camSize = 3;
sensThick = 0.16;
[x,y,z] = sphere(270);
[a,b,c] = cylinder(1,100);
myBlue = [0.4 0.44 0.73];
dkGrey = [0.1 0.1 0.1];
midGrey = [0.5 0.5 0.5];
myGold = [0.8 0.64 0]; % golden synchrotron radiation!
dtSize= 0.5*sqrt(3);
dtPos = 3;
pr = 0.025; % Photon radius
lp = [-1 -2 3];
noFrames = 1200;
probThresh = 0.05;
phPositions = zeros(noFrames,3);
phPositions(:,2) = -10;
phPositions(:,3) = -10;
phExists = zeros(noFrames,1);
detectedPhotons = 0;
for tt = 1:noFrames % 600 frames
hold off
newplot
axis off
axis equal
xlim([-0.05 3.55]);
ylim([-1.05 1.05]);
zlim([-1.05 1.05]);
light('Position',lp,'Style','infinite');
% Detector
[V,F] = platonic_solid(2,dtSize); % Cube,
V(:,1) = V(:,1)+dtPos;
patch('Faces',F,'Vertices',V,'FaceColor',midGrey,'FaceAlpha',1, ...
'EdgeColor','none','FaceLighting','flat','DiffuseStrength',1,'SpecularStrength',0);
hold on
[V,F] = platonic_solid(2,dtSize*0.9); % Cube
V(:,1) = V(:,1)+dtPos-0.1;
patch('Faces',F,'Vertices',V,'FaceColor',dkGrey,'FaceAlpha',1, ...
'EdgeColor','none','FaceLighting','flat','DiffuseStrength',1,'SpecularStrength',0);
probPh = rand;
if (probPh <= probThresh)
phExists(tt,1) = 1;
phPositions(tt,2) = 0.9*(rand-0.5);
phPositions(tt,3) = 0.9*(rand-0.5);
end
for ii = 1:tt
if (phExists(ii,1) == 1) && (phPositions(ii,1) <= dtPos)
phPositions(ii,1) = phPositions(ii,1)+0.02;
surf(phPositions(ii,1)+x*pr,phPositions(ii,2)+y*pr,phPositions(ii,3)+z*pr,'FaceColor',...
myGold,'LineStyle','none','FaceLighting','gouraud','DiffuseStrength',1);
if (phPositions(ii,1)>=dtPos-0.45-0.1) && (phPositions(ii,1)<dtPos-0.45-0.1+0.02)
detectedPhotons = detectedPhotons+1;
end
end
str = num2str(detectedPhotons,'% 5.0f');
hText = text(2.2, -0.8, -0.8, str, 'FontSize',28);
end
set(gca, 'Projection','perspective');
view(-44,20);
frame = getframe(gcf);
writeVideo(vid,frame);
hold off
end
% Output the movie as an mpg file
close(vid);