Skip to content
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

Unassigned fibers should be placed at non-colliding locations #194

Open
sbailey opened this issue Mar 19, 2019 · 9 comments
Open

Unassigned fibers should be placed at non-colliding locations #194

sbailey opened this issue Mar 19, 2019 · 9 comments

Comments

@sbailey
Copy link
Contributor

sbailey commented Mar 19, 2019

Current default for unassigned fibers (either no targets, or broken fibers) is to assign the positioner to its home location, but that can cause collisions for neighboring science target assignments.

It would be better to do a search for some non-colliding location and use that instead.

Best is to have sufficient SKY and BAD_SKY density so that every non-broken fiber is assigned to something. Broken fibers could be placed anywhere, but at least shouldn't cause an unnecessary collision.

@tskisner
Copy link
Member

Revisiting this in Spring 2020. I think we now have sufficient density of sky, supp_sky, and bad_sky (safe) targets so that every positioner can be moved someplace. If not, we should improve that.

If we still need this logic in fiberassign, then I would suggest for each unassigned positioner:

  1. Start with the positioner arm fully closed (phi =~ 180)

  2. Sweep the theta angle from its minimum value across its range in steps

  3. At each theta step, check for collision. If none, stop.

This could be implemented as a small member function of fiberassign::Assignment and called from python just like the other methods.

@sbailey
Copy link
Contributor Author

sbailey commented Apr 28, 2020

A point of clarification:

  • broken positioners are stuck at a fixed location over which we have little or no control
    • if that position is known it can be defined via theta/phi limits in the desimodel hardware configuration
    • if that position isn't known we would need to use a larger exclusion zone, also defined in the desimodel hardware configuration
  • broken fibers are a different physical effect and I think it is useful to have a separate bit for them, but in practice they need to be treated the same as broken positioners, because we can't backlight them so we can't safely move them to know where they really are, and they need to be defined to be in fixed locations.
  • unusable fibers (new bit, see track unusable fibers that aren't broken fibers or stuck positioners #261) have working positioners and fibers that can be backlit, but they hit a hot CCD column or similar and can't be used for real targets. These we could move to non-colliding positions.
  • unassigned fibers should be flagged as an error from target selection not providing a sufficient density of backup targets, but at the same time we don't want to completely fall on our face and refuse to assign a tile just because "only" 4999/5000 fibers could be assigned. These could also be moved to a safe non-colliding location.

i.e. the first two cases we just have to live with wherever they are and not run into them; the second two cases give us flexibility for moving the positioner out of the way so that it doesn't unnecessarily collide with an otherwise good neighboring target.

@tskisner
Copy link
Member

tskisner commented Mar 5, 2021

@sbailey, a question since I am implementing support for the case of broken fibers and stuck positioners. In these cases, the new desimodel code will provide the current estimated fixed positioner location (POS_P and POS_T). These can be used internally to fiberassign to avoid collisions. However, when writing the outputs, there is no column currently for writing the positioner angles that were used (we just write out the X/Y locations of the assigned target). For stuck positioners the target ID will be -1 or some dummy value. Would it be useful to write out the assigned positioner angles in the FIBERASSIGN hdu? If so, we should note that in #271.

@sbailey
Copy link
Contributor Author

sbailey commented Mar 5, 2021

Thanks for working on this. I don't think that we need to write POS_P and POS_T quantities into the FIBERASSIGN HDU. i.e. we need them internally to avoid collisions, but I don't think we need them in the output.

@tskisner
Copy link
Member

tskisner commented Mar 5, 2021

Ok, sounds good. Thanks for confirming.

@tskisner
Copy link
Member

There has been some email discussion about parking unassigned positioners near a "fully folded" position. Not only does this place the location near the center where small discrepancies with the online system may reject the location, it is also not ideal to have a potentially large move.

For working positioners, we do not track the current location (so can't create a minimal move that is non-colliding), however we should try fixing the phi angle to something more like 120 degrees (not 180) before sweeping theta to find a non-colliding location.

@deisenstein
Copy link

deisenstein commented Apr 21, 2021 via email

@tskisner
Copy link
Member

Quoting an email from Joe on 4/21/21:

Regarding "parking", we typically put positioners at pos_T, posP = 0, 150 deg as our standard parking position. That would be a fine convention for fiber assign to adopt. 150 is a better value than 120. At 120, positioners with large magnitude offset_p might still be peeking out of the retracted zone.

@dstndstn
Copy link
Contributor

dstndstn commented May 5, 2021

150 deg was implemented in #340

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants