TeamAtomECS / AtomECS

Cold atom simulation code
GNU General Public License v3.0
46 stars 12 forks source link

Ramping multiple components of an entity #44

Closed MauriceZeuner closed 3 years ago

MauriceZeuner commented 3 years ago

I just realized that the current implementation of the ramps does not allow for ramping two components of the same entity at the same time. This is difficult for me since I would like to replace my dipole::transition_switcher::RampMOTBeamsSystem with them to ramp detuning and power of MOT beams. I believe there is no simple way to allow for two Ramps to be associated with an entity, right?

One solution would be to make the wavelength an attribute of GaussianBeam, so only one component needs to be ramped or we need a different approach to ramping in general. Or I leave it roughly like it is currently. (Custom systems to ramp them)

Also, I find it a little unhandy that I have to re-initiate the entire Component for every keyframe, even if I only want to change one attribute of it. This happens, if you, for example, want to ramp the power of a GaussianBeam component. Just takes a lot of code, I think.

Any ideas?

ElliotB256 commented 3 years ago

Why can't you just add Ramp<A> and Ramp<B>? They are different types!

ElliotB256 commented 3 years ago

You might find the following interesting for further information: https://rustc-dev-guide.rust-lang.org/backend/monomorph.html

ElliotB256 commented 3 years ago

Also, I find it a little unhandy that I have to re-initiate the entire Component for every keyframe, even if I only want to change one attribute of it. This happens, if you, for example, want to ramp the power of a GaussianBeam component. Just takes a lot of code, I think.

You can define helper functions in your repo that uses atomecs to make life easier for your specific use cases. But the base API should be explicit, as it currently stands. In your particular case you want to ramp power, but someone else may want to ramp the waist, and to be less explicit would mean we have to start making assumptions about what people are using Ramps for.

MauriceZeuner commented 3 years ago

Ah, okay - thanks for the clarification!