Electric field in the Z direction using Mie theory

Asked by DanHickstein

I have enjoyed playing with holopy today, it is very cool. Thanks for making it available.

I am interested in calculating the electric field around ~50 nm particles illuminated with a variety of visible and UV lasers using Mie theory. I would like to be able to see the electric field magnitude in the direction of laser propagation (the "z" coordinate). In other words, I am interested if the electric field is higher on the front (illuminated) side of the particle or on the back side. I have calculated the electric field around the particle using the mie_theory.calc_field function and it seems to work well. But, it looks like I have calculated a slice of the E-field in the XY directions. Is there a way to rotate my view 90 degrees so that I can get a slice of the E-field in the XZ or YZ directions?

Many thanks,

Dan Hickstein, University of Colorado

Question information

Language:
English Edit question
Status:
Answered
For:
HoloPy Edit question
Assignee:
Tom Dimiduk Edit question
Last query:
Last reply:
Revision history for this message
Tom Dimiduk (tdimiduk) said :
#1

Hi Bill,

I happy to hear that people outside our group are finding holopy useful. Just out of curiosity, how did you find us?

Sorry about taking a few days to get back to you, I was not subscribed to questions on launchpad, but I have changed that.

We have not needed to do that exact calculation yet, so there is not an completely simple way of doing it. It is something holopy should be able to do in a straightforward manner (https://blueprints.launchpad.net/holopy/+spec/theory-volume-schema) which I will look at improving shortly.

In the meantime, you should be able to do your calculations by computing Image lines and stacking them manually, something like this code:
-- Code --
r = 50
width = 100
height = 100
spacing = .5
offset = -height / 2
field = np.zeros((width, height, 3), dtype='complex')
for i in range(offset, height+offset):
    field[:, i-offset] = Mie.calc_field(Sphere(n = 1.59, r = r, center = (width/2 * spacing, 0, i*spacing)), ImageSchema((100, 1), spacing, Optics(400, 1)))[:,0,:]
#You will want to set the field to 0 inside the particle, because the Mie expansions are divergent inside the sphere
field[(x-50)**2 + (y-50)**2 < (r*spacing)**2] = 0
-- End Code --

I hope that helps, and please feel free to get in touch with us again if you have more questions.

Tom Dimiduk, Harvard University

Revision history for this message
Tom Dimiduk (tdimiduk) said :
#2

I should also point out a slight subtlety I just remembered. We do not compute the the nonradiative (falls of faster than 1/r) term parallel to k r in the Mie solution since it cannot contribute to holograms (it will be perpendicular to the detector).

Thus, if you are looking in the near field, and interested in the z component of the e field, you will not get a correct answer. If that matters to you, we can look at adding that component (https://blueprints.launchpad.net/holopy/+spec/radial-component-scattering) when we get a chance. If you want to take a look writing a patch to add that, we would be happy to help you out.

Revision history for this message
DanHickstein (danhickstein) said :
#3

Hi Tom,

Thanks for the sample code and the information. Just to make sure that I understand correctly, increasing columns in the final array correspond to the Z direction, right? I made a few modifications to your code to make is display a nice animation of the electric field intensity with increasing particle size, and I will paste it below in case anybody wants to try it.

I am looking in the near field and I suspect that I would like to look at the Z component of the E-field. Our experiment is looking at the electrons that photo-ionized from nanoparticles and we are seeing an asymmetry in the electrons in the direction of laser propagation. We think this can be explained by using Mie theory to calculate the electric field near the surface of the particle. The experiment and result are somewhat similar to this paper: http://pubs.acs.org/doi/abs/10.1021/nl070834g and we would like to do a similar calculation to Fig. 6 in that paper. Does this seem like something holopy can do?

Many thanks for your help,

Dan

--Code:
import matplotlib.pyplot as plt
import numpy as np
import holopy

fig1 = plt.figure()
ax1 = fig1.add_subplot(111)

plt.ion()
plt.show()

for r in np.arange(10,100,2):
    wavelength = 400
    width = 200
    height = 200
    spacing = .5
    offset = -height / 2
    field = np.zeros((width, height, 3), dtype='complex')
    for i in range(offset, height+offset):
        field[:, i-offset] = holopy.scattering.theory.mie.Mie.calc_field(holopy.scattering.scatterer.Sphere(n = 1.59,
        r = r, center = (width/2 * spacing, 0, i*spacing)), holopy.core.ImageSchema((200, 1), spacing, holopy.core.Optics(wavelength, 1)))[:,0,:]

    x,y = np.meshgrid(range(0,width),range(0,height))
    field[(x-width/2)**2 + (y-height/2.0)**2 < (r*spacing)**2] = 0
    ax1.clear()
    ax1.set_title('Particle size: %i nm, wavelength = %i nm'%(r,wavelength))
    ax1.imshow(np.abs(field[:,:,2]))
    plt.draw()

Revision history for this message
Tom Dimiduk (tdimiduk) said :
#4

Hi Dan,

I looked at your visualization, it is quite nice. That sounds like an interesting experiment you are doing, I will be interested to hear what you learn.

Holopy should be able to do the calculations you want. We have targeted getting the r component for the Mie theory for our 2.0 release which we are hoping to have out by the end of the month. I will let you know as soon as that code lands in our trunk.

Internal fields are on our radar, but may not make it into the release. I couldn't tell if they are important to you, the paper you sent showed internal fields, but the other stuff you are showing does not. If near internal fields are important to you, let us know and I will see about bumping them up on our priority stack, or help you with adding them. We have the right Mie coefficients, it is just a matter of coding up the correct internal expansions.

Revision history for this message
DanHickstein (danhickstein) said :
#5

Hi Tom,

Ideally I think that we are interested in the internal fields of the nanoparticle. Intuitively, it should be the electric field that the atoms near the surface experience that should dictate the level and direction of the ionization. So, if holopy could deal with the internal fields that would be extremely useful for us.

I am willing to help add this code, but I am not a tremendously experienced programmer. Maybe you can give me a better idea of what would be involved.

Thanks so much,

Dan

Revision history for this message
DanHickstein (danhickstein) said :
#6

Hi Tom,

Have you made any progress on calculating the field inside of the scatterers? We are still very interested in performing this calculation for a paper that we are putting together. If you would like to get in touch via e-mail, I'm at danhickstein at gmail dot com.

Cheers,

Dan

Revision history for this message
Tom Dimiduk (tdimiduk) said :
#7

Hi Dan,

Sorry about the delay, I had to finish up some experiments the past couple of weeks and wanted to get some code in order for you. I have written up a blueprint in more detail, and will be contacting you by email for further work (launchpad is a little flaky about notifying me about these messages).

Can you help with this problem?

Provide an answer of your own, or ask DanHickstein for more information if necessary.

To post a message you must log in.