scottprahl / miepython

Mie scattering of light by perfect spheres
MIT License
164 stars 56 forks source link

How to obtain a_n and b_n coefficients for whole blood #6

Closed mohanksriram closed 5 years ago

mohanksriram commented 5 years ago

I am working on a theoretical approach for modelling reflectance spectra in blood.

Using the following parameters:

x(size parameter) = 2pir/lambda

For erythrocytes, r = 2.8 um and lambda = 0.450 um, I obtained x as 39, which was used to compute the a_n and b_n coefficients.

To be exact, I am passing refractive index and x (size parameter) to the "mie_An_Bn" function to obtain a_n and b_n values

I have two questions:

  1. I see that the number of a_n, b_n coefficients varies as a function of size parameter(x). Since I am modelling a spectra(array of wavelengths in the range(450nm - 850nm)), do I need to compute the size parameter and subsequently a_n, and b_n for each of the wavelengths individually. Or Can I use a fixed wavelength (say 450nm).

  2. Is there a way or set of standard values using which I can verify that the computed a_n, b_n coefficients are valid and can be used to model whole blood?

scottprahl commented 5 years ago

1) Yes, you must recompute all the Mie coefficients (a_n & b_n) for each wavelength. If you're only interested in observables, e.g., Qext then the routines allow you to calculate those directly. See https://github.com/scottprahl/miepython/blob/master/doc/02_efficiencies.ipynb for examples.

2) there are tests for observables in https://github.com/scottprahl/miepython/blob/master/miepython/test/test.py but none for a_n and b_n. As I remember, these were super hard to find and were very useful. Unfortunately, I do not recall where I saw them --- I would start with the standard references: van de Hulst or Kerker, or Bohren & Huffman

mohanksriram commented 5 years ago

I tried computing Mie coefficients for each of the wavelengths, but a lot of unwanted oscillations began creeping into the calculated scattering coefficients.

As I understand, the size parameter(x) is used to calculate n_stop for obtaining the Mie coefficients. n_stop mainly indicates the minimum number of terms required to accurately obtain a_n & b_n. Given that we're using a spectra(450nm - 850nm), we can obtain the maximum possible n_stop by providing the minimum wavelength from our spectra. (450nm)

Is there anything wrong in calculating n_stop this way?

scottprahl commented 5 years ago

Sorry, missed your comment. Your suggestion seems quite reasonable.