-
Notifications
You must be signed in to change notification settings - Fork 12
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Linear polarization #29
Comments
I think the doc is incorrect in this case. The 'polarisation' is either +1 or -1 depending on whether the beam is sigma_+ or sigma_- polarised. The We could add support for this - probably needs another field on the beam polarisation (the space for three polarisation components is 2D and so requires at least two numbers to describe all polarisation components, I think?) |
Could something like Jones vector be a solution to this ? If we have two vectors |
In the end I couldn't find a satisfactory way to do it as previously described. Therefore to implement arbitrary polarization I defined it as a normalized complex vector (polarization branch). With minor edits it passes the test, but it doesn't seem to be the most satisfactory solution because the user must ensure that the polarizatino is orthogonal to the wavector. Also it seems that at some point it might be worth it to promote the polarization to a component. Any suggestions about this ? |
you could define private fields with a method used to create the struct? that would be a way to safeguard that the struct is in a 'valid' state when being used Regarding polarization as a component, that could work. It seems like we may be moving towards a general consensus of working in the E-field domain, and then converting to intensities for calculations? |
Hi Damien, didn't notice you were here, that's super cool! Nice coincidence! As Elliot mentioned, I am currently trying to put together a treatment in the complex E-field regime, where I use Jones-vectors as well. I ensure that they're orthogonal to the Maybe another meeting on that to strategize would be nice? |
Ok, I see. What puzzled me at the time with Jones vectors is that you need to choose a reference frame somewhat arbitrarly. But indeed adding methods to create the frame from the beam seems to do the trick. Also I was wondering if you move to a E-field treatment, how would the polarization be handled when there are several beams intersecting, like in a MOT for example ? |
I think we probably need to distinguish between two regimes:
*although we consider the zeeman shift on the optical transitions, we don't really consider the zeeman sublevels for the purpose of atomic populations. |
I fully agree with the two regimes - especially since it would become hard to use our Rate Equation approach together with Intensity from superposed E-fields (We couldn't tell from which beam the photon comes). I talked with Ulrich about this very question (from a physics perspective only) and we came to the conclusion that it is probably easiest to explicitly tell AtomECS which beams interfere with each other. Do you think that would be suitable? |
Side note - Also worth bearing in mind the current approach, which is intensity based and does not have interference, has a 'one-to-N' concept in the sampler, because each atom must sample N beams. Allowing interference changes this - some beams must be combined, so an atom's sampler doesn't hold the values of N beams, but M fields? |
Absolutely, very important! I think either that (reducing from N laser to M "fields") could work or... Actually, why not still have N entries in Or... one could push it even another step further back and only add everything together at the |
@damienBloch : Just looking through your code, I have a few comments/questions, if that's okay:
One way to potentially solve this I came up with, is to introduce an extra component, that I called
|
@MauriceZeuner I think the current definition of polarisation in atomecs defines either sigma+ or sigma- with respect to the direction of propagation of the beam. To me that seems a sensible choice of frame. It means that for a 3D MOT you need two beams sigma+ (axial, outward field), and four beams sigma- (radial, inward field). The direction of the local B-field with respect to the beam propagation changes for these two cases, hence the need for a change in polarisation.
When deciding on how many components to have, consider: (i) is the data always going to be used together (if so, one component makes more sense), and (ii) whether splitting the components will allow easier parallel execution due to read/write conflicts. If the code were only laser cooling, polarisation would be best suited as a field on Two components ( |
(also @MauriceZeuner - please post code as snippets rather than images, it makes it easier to copy/paste and index :) ) |
So just to try to answer some of the points you raised @MauriceZeuner: 1: 2-3: With this the polarization is defined as a vector in 3D space and can be independant of the wavector. It's the reponsability of the instantiation to choose the convention for the polarization. For example it's possible to create circular right light with respect to the wavector or the magnetic field with 4: I've tried this method in the cooling and rate tests and it passes them. In this case I had to replace +1 by However, in the end, having a reference frame for the beam as you did might be a better way to do it. For example, in addition to the polarization, it can also probably be used to define gaussian beams with elliptical intensity profile (as in issue #33), where you would also need to define a long and a short axis perpendicular to the wavevector. |
Hi Damien, on a humorous note: It took me extremely long to notice that you (almost) consistently wrote "wavector" instead of "wavevector" and I wonder if we could make that the official spelling, please, it's a cool way to shorten things :D (Although I find it hard to pronounce that way ^^)
2-3. Is there really a realistic use-case for this? Otherwise, I'd probably go with safety and make the instantiation "fool-proof" and stick to the 2D Jones vector representation within a defined orthogonal plane, if that would be fine with you.
Absolutely! @ElliotB256, Tiffany and I discussed the reference frame issue briefly on Friday. I think we also concluded that it makes sense to have a general Since your implementation is similar in many ways to what I've been up to in the alternative-dipole-force, I think it makes sense to decide who does the compatible implementation of it that goes onto master later. I'm happy to do it since I will re-sort the laser module anyway (into separate laser, laser-cooling and dipole modules) but I'd leave that choice to you since it's also a nice way of getting started here. So feel free to decide if you want to spend some time on this, if you're interested :) (but absolutely no pressure, obviously) We can always have a chat over video, if you preferred that :) |
2-3: I like @damienBloch 's suggestion. Being able to define 'unphysical' polarisations is not a problem if we provide a clear API for people to use. Generally, the component data layout should prioritize speed, and we should provide constructor methods to create valid structs. 4: I really like the syntax Higher-level API?
This discussion could lead to a higher-level API for constructing laser beams. We could define a factory struct for creating laser beam entities, which exposes a fluent interface to configure the new beam before it is inserted into the world. e.g.:
The advantages of this are:
Disadvantages:
|
I think Damien was on this issue first :) Maurice would you like to look into fluent interface/builder components and a higher-level API? The time I can spare in the next few days will be spent upgrading us to the newest |
I like the idea of a higher-level API! I think it absolutely makes sense to have something like that, although I think it's nice to keep the nature of modularity and configurability at least as an option. As long as it does not undermine the original idea, I would love if one could also have a more custom syntax (rather than many, many function names) like this (just as an example):
Where, if I wanted it simpler, I could still insert a Gaussian(waist, power) (into line 3) that does have an infinite rayleigh range and and no ellipticity by default. |
Sure, when you say "look into", you mean coding a draft of it that we can then discuss? Or is there something preexisting in Rust/Specs that is commonly used for building APIs in a more general sense? |
@ElliotB256 is the API thing worth a new issue? |
I'm also happy to give it a try in the next days, but I wouldn't mind having a quick call at some point to get a few pointers. |
Sorry for the delay, got a bit sidetracked. I made small changes to upgrade polarization to a component, based on the same formalism as I used before (vector-polarization branch). It passes all the tests but I didn't correct the examples if clean up or further changes are needed. |
Hi,
I've been using AtomECS a bit lately and I just had a question on how it is possible to handle linear polarization. In the doc it's mentionned that it should be possible to have a linear polarization by combining sigma_+/- beams, but I don't understand how that can be.
For example I'd like to consider the following situation: a magnetic field along
e_z
and a cooling light with wavevector alonge_x
linearly polarized alonge_y
. This light can inducesigma_+/-
transition, but not pi.However, when I look at the calculation for
CalculateRateCoefficientsSystem
, the termscatter3
for the pi component will always be non zero whatever the configuration I set for the polarization of the cooling lights.What would be the correct way to handle this situation?
Thanks
The text was updated successfully, but these errors were encountered: