Skip to main content
to_surf = TheSystem.LDE.NumberOfSurfaces-1;
Ex=0;Ey=1;phaX=0;phaY=90;waveNumber=2;Hx=0;Hy=0;Px=0;Py=1;
raytrace = TheSystem.Tools.OpenBatchRayTrace();
[success,errCode,exro,exio,eyro,eyio,ezro,ezio,intensity]=raytrace.SingleRayNormPol(ZOSAPI.Tools.RayTrace.RaysType.Real,Ex,Ey,phaX,phaY, to_surf, waveNumber,Hx,Hy,Px,Py,0,0,0,0,0,0);
  • Open the batch ray trace tool
  • Create polarized real raytracing in which a single ray with normalized pupil coordinates will be added
waveNumber=2;Hx=0;Hy=0.5;Px=0;Py=0.5;
raytrace = TheSystem.Tools.OpenBatchRayTrace();
[success,X,Y,Z,L,M,N]=raytrace.GetDirectFieldCoordinates(2,ZOSAPI.Tools.RayTrace.RaysType.Real,Hx,Hy,Px,Py)
  • Open the batch ray trace tool
  • Get direct field coordinates with input normalized field and pupil coordinates
raytrace = TheSystem.Tools.OpenBatchRayTrace();
max_rays = 4;
pwav = 0;
    for a = 1:TheSystem.SystemData.Wavelengths.NumberOfWavelengths
        if TheSystem.SystemData.Wavelengths.GetWavelength(a).IsPrimary == 1; pwav = a; end;
    end
to_surf = TheSystem.LDE.NumberOfSurfaces;
normUnPolData = raytrace.CreateNormUnpol(11,ZOSAPI.Tools.RayTrace.RaysType.Real, (to_surf)-1);
hx=0;
px=0;
hy_ary = [0, 0.707, 1];
fprintf('%6s %8s %8s %8s %8s %12s %12s%12s %12s%12s %12s\n','ray#','hx','hy','px','py','X','Y','L','M','l2','m2')
for i=1: length(hy_ary)
    normUnPolData.ClearData();
  
    for j=0:max_rays
        py(j+1)=-1+j/2;
        normUnPolData.AddRay(pwav, hx, hy_ary(i), px, py(j+1), ZOSAPI. Tools.RayTrace.OPDMode.None);
      
    end
 
    raytrace.RunAndWaitForCompletion();
    normUnPolData.StartReadingResults();
    [success, rayNumber, errCode, vigCode, x, y, ~, L, M, ~, l2, m2, ~, ~, ~] = normUnPolData.ReadNextResult();
while success
if ((errCode == 0 ) && (vigCode == 0))   fprintf('%6d %8.2f %8.2f %8.2f %8.2f %12.6f %12.6f%12.6f %12.6f%12.6f %12.6f\n',rayNumber,hx, hy_ary(i), px,py(rayNumber),x,y,L,M,l2,m2)
                end
                [success, rayNumber, errCode, vigCode, x, y, ~, L, M, ~,l2, m2, ~, ~, ~] = normUnPolData.ReadNextResult();
    end
end

In the above code:

  • Open the batch ray trace tool
  • Get primary wave number and number of surfaces
  • Create unpolarized real raytracing in which rays with normalized pupil coordinates will be added
  • Use for loop to add a batch of rays from different fields
  • Run the tool until it finished
  • Read results ray by ray if data is valid
  • Print data in command window

found the solution