-
Notifications
You must be signed in to change notification settings - Fork 107
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
numerical issue for some realizations of atmosphere #1280
Comments
I think I need more details to reproduce this. I tried to turn this set of kwargs into a unit test, but it doesn't fail yet. Can you try to adjust this based on other details of your run until it does fail? Then Josh or I can have a better shot at diagnosing and fixing it. My first attempt is on branch '#1280' here: |
Note: If the issue is just the rng, the repr isn't sufficient to serialize it, since the repr string is really long, and that usually gets annoying to see long rngs all over the place. You can get a full evalable string for the rng seed with |
I can't get this to fail even either, even with the full serialized rng. It's complex because the same atmosphere gets used for all the objects in the image, and there are many different star SEDs being used. I see the problems for some fraction of the objects. I could give you something that will reproduce using an imsim run. I would give you the input data. You would also need to use my hacked up imsim so it will printout offset statistics as well as when it hits a nan. |
Maybe you could print out the repr of the object whose drawImage call produces the nans? And also any other kwargs being sent to drawImage. That should have enough information to reproduce it I think. |
I'll try that. I'll also need to repr the photon_ops in that case, since that is how the PSF is implemented |
It is not easy to get a perfect reproduction. There must be some internal settings from the imsim run that affect the results. Also note I had to turn off sensor, which made the run too slow. It is not that slow in the imsim run so, again, there must be some settings I'm not aware of. Some objects from imsim do not have a full repr and cannot be pickled, so I tried to reconstruct things by hand when necessary. I've attached a tarball that has data as well as a file I wasn't sure what an acceptable range for offsets should be. In this example the max offset I saw was 600_000 pixels (120_000 arcseconds). I have a check right now at 10_000 pixels, but we should adjust it. |
I'm aware that this can't be incorporated into the galsim test suite due to use of imsim, but it wasn't obvious to me how to reconstruct the photon_ops without using imsim code |
Thanks. I'll work on minimizing the example to make a unit test from it. |
So the first thing I'm noticing here is that you have |
@jmeyers314 Josh, I tracked this down to a batoid function. Specifically,
After
More details:
So it looks like the diffraction sent one ray out past the edge of the focal plane. It has vv large x,y,z values and it's marked as vignetted. That should be fine, but something in here is turning vx,vy,vz into nans. Hopefully that will be enough for you to see what might be wrong. |
Thanks, I'll take a look. Note though that if it's marked vignetted, it shouldn't end up in the final image (flux should be set to 0 inside ImSim somewhere). |
Probably so. I think Erin was doing an empirical centroid with them just took the mean of the x and y values (which had gotten turned into NaNs subsequent to this step). So Erin, probably if you exclude the flux=0 photons, the centroids will be finite. But they still aren't doing what you want, since the centroid of the diffraction spikes are going to be quite noisy. |
Looks like this particular refraction is actually a case of total-internal-reflection, which I haven't properly addressed in batoid. In lieu of actually reversing the order of the trace, I'll add code to batoid to mark such cases as failed for now. |
All the |
Sorry, not all cases actually. A significant fraction. |
About 0.3% are not set to |
Does galsim set the flux to |
In the test script you sent, at least for the first object that fails the nan test, there is only one photon with NaNs (in x, y, dxdz, dydz, pupil_u, and pupil_v), and its flux is set to 0. There are other photons with 0 flux as well, so probably they are also vignetted, but didn't have the NaN problem. |
(sorry the units are pixels not arcsec) |
Did you use diffraction spikes with the Gaussian PSF? If not, then this is expected. |
Yes, the only difference between these two is replacing the atmosphere with a gaussian |
Are these the maximum offset of all the photons? Or just of the non-vignetted ones? (I.e. with flux > 0) |
These big offsets are vignetted, they have offsets of a thousand meters. |
OK. Then I don't think it's something we need to worry about. I don't think it's a bug. Just some photons going through the Rubin optics end up reflecting or diffracting to a place that ends up completely off the focal plane. I think it's probably not surprising that this is more likely when you have a realistic atmosphere than when you have a Gaussian for that part. |
What's the physics that connects the PSF of the atmosphere to deflection angle of the optical system? |
The pupil plane u,v values are set in the atmospheric code. Those positions impact what happens with the diffraction and subsequent Rubin optics. I'm not sure where they get set (if they do get set at all) when the PSF is just a Gaussian. But it seems plausible to me at least that having realistic pupil plan positions would trigger the kinds of optics that lead to scattered light more often than whatever the Gaussian does with them. Josh should weigh in on this, since he understands this code (much) better than I do. |
I guess I'm a little surprised that the atmospheric deflections are so
large. Though I can't remember the order of atmosphere, optics,
diffraction spikes photon ops now. The diffraction in particular I think
can throw photons on wildly different trajectories and if that happens
before the optics then I can imagine running into situations where the
photons end up with extreme angles. The 2nd kick might do that a bit too.
…On Tue, Mar 26, 2024 at 12:24 PM Mike Jarvis ***@***.***> wrote:
The pupil plane u,v values are set in the atmospheric code. Those
positions impact what happens with the diffraction and subsequent Rubin
optics. I'm not sure where they get set (if they do get set at all) when
the PSF is just a Gaussian. But it seems plausible to me at least that
having realistic pupil plan positions would trigger the kinds of optics
that lead to scattered light more often than whatever the Gaussian does
with them.
Josh should weigh in on this, since he understands this code (much) better
than I do.
—
Reply to this email directly, view it on GitHub
<#1280 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AA33HNO2Z6FORIA6ZF5HLBLY2HDP7AVCNFSM6AAAAABFETKG4WVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDAMRRGI4TGOJZGY>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
Surprised enough that it might be a bug? Either here in the AtmosphericPSF code or in imsim. |
I'm seeing large offsets in the photon
x, y
values, as well as the occasionalnan
, for some realizations of an atmosphere. The offsets can be very high, like 10 million pixels.Below are example atmospheric parameters that produce the problem.
Using robust statistics on the output photons indicates that most photons land in a reasonable location, with a set of outliers
I can also provide a full example imsim config that produces this set of atm parameters
The text was updated successfully, but these errors were encountered: