Will it be right to use Henyey-Greenstein distribution in Non-Sequential Mode to model bulk scattering due to raindrops and snowflakes?
Thank you for the reply!
oMod note: Moved to general forum as this is not a STAR-related question].
Page 1 / 1
Hi Michael,
I used the multiconfig “workaround” many years ago for 3 wavelengths (green, red, IR) but it’s not scaling well when you want to use continuous LED spectra or if your system needs multiconfiguration for other purposes.
Hi Sahil,
One limitation of Henyey-Greenstein implementation in Zemax is that the coefficients (scattering, anisotropy, absorption) are constants and thus not function of the wavelength. This is not fundamental to the diffusion model per se, just to Zemax’ implementation for all DLL volume scattering (for comparison, Tracepro, FRED or LightTools all allow the use of spectrally varying coefficients).
So if you want to model a physical effect that needs the parameters to change with the wavelength, Zemax won’t cut it. Such a case would be modelling the skin for oximetry (blood’s absorption coefficients are wavelength dependent). If you only use 1 wavelength (e.g. for simple pulse sensing), Zemax’ implementation is good enough.
Mie would mitigate the previous issue because it is more based on particle size than macro properties. The refractive index is still constant though.
Hi Ray,
Thank you for your reply!
I am using only one wavelength, 1550 nm or 1.55 microns. At 1.55 microns, for smaller raindrops and snow grain radii of 500 microns, normalized sphere size (x = 2πr/λ = 2*3.14*500/1.55 = 2025) exceeds Zemax’ maximum value of x = 1934 and thus no Mie scattering takes place. At 1.55 microns wavelength, raindrops and snowflakes will undergo geometrical scattering, which I think is not available in zemax. In this case, should I create a user-defined scattering function?
Hi Ray,
Although it is a workaround and maybe not as direct as an implementation from Tracepro/FRED/LightTools, the Bulk Scatter DLL’s parameters are exposed (NPRO using 481/482 or 401-416). You can setup each configuration to run a single wavelength and have wavelength-dependent coefficients for any Bulk Scatter DLL. The main thing to consider is when running the NSC Ray Trace, you should Clear Detectors before the first run and then only use Trace rather than Clear & Trace. OpticStudio will keep the results from a previous run on any detector.
If you only have a handful of wavelengths you want to trace, then you can enter these values by hand in the MCE and manually run a ray trace (closing down the Ray Trace Control and switching to the next configuration between traces). However, if you have a lot of wavelengths to trace, it might be better to setup a simple ZOS-API script to change the Mean Path, Transmission and g parameters as a function of wavelength. The following Python Script can be run as an interactive extension changing only the variables at the top:
# --------------------------------- # ----- End of user inputs -------- # ---------------------------------
# check to make sure the lists are the same lengths if (len(wlUM) + len(meanPath) + len(transmission) + len(g)) / 4 != len(wlUM): raise Exception("The length of all 4 lists must be the same")
# connect to OpticStudio Interactive Extension import zosapi
# make sure the source only traces the first wavenumber TheSystem.NCE.GetObjectAt(sourceNumber).GetObjectCell(ZOSAPI.Editors.NCE.ObjectColumn.Par4).IntegerValue = 1
# setup the MCE with the 4 operands TheSystem.MCE.MakeSingleConfiguration()
# loop through all parameters and run ray trace tool = TheSystem.Tools.OpenNSCRayTrace() tool.ClearDetectors(0) tool.IgnoreErrors = True tool.ScatterNSCRays = True
for idx, w in enumerate(wlUM): op1.GetOperandCell(1).DoubleValue = w op2.GetOperandCell(1).DoubleValue = meanPathoidx] op3.GetOperandCell(1).DoubleValue = transmissioneidx] op4.GetOperandCell(1).DoubleValue = glidx]
tool.RunAndWaitForCompletion()
tool.Close();
# close interactive connection del zos zos = None
Hi Sahil,
One limitation of Henyey-Greenstein implementation in Zemax is that the coefficients (scattering, anisotropy, absorption) are constants and thus not function of the wavelength. This is not fundamental to the diffusion model per se, just to Zemax’ implementation for all DLL volume scattering (for comparison, Tracepro, FRED or LightTools all allow the use of spectrally varying coefficients).
So if you want to model a physical effect that needs the parameters to change with the wavelength, Zemax won’t cut it. Such a case would be modelling the skin for oximetry (blood’s absorption coefficients are wavelength dependent). If you only use 1 wavelength (e.g. for simple pulse sensing), Zemax’ implementation is good enough.