Project: datamanagement
Issue DM-7040: Stars selected by starSelector change when number of cores varies
Sogo Mineo writes in [HSC-1414|https://hsc-jira.astro.princeton.edu/jira/browse/HSC-1414]: {quote} See the following lines: meas_algorithms/HSC-4.0.0/python/lsst/meas/algorithms/objectSizeStarSelector.py:466 in ObjectSizeStarSelector.selectStars(): {code} if psfCandidate.getWidth() == 0: psfCandidate.setBorderWidth(self._borderWidth) psfCandidate.setWidth(self._kernelSize + 2*self._borderWidth) psfCandidate.setHeight(self._kernelSize + 2*self._borderWidth) {code} In reduceFrames, these lines set the width of psfCandidate to be 21 for the first time the execution reaches there. When the first CCD image has been processed, the worker process continues to process another CCD image, and the execution reaches here again. This time, psfCandidate.getWidth() is 41, because psfexPsfDeterminer has set it to be 41, and the value has been retained because the width is a static member. And so, for the second CCD image, the width of psfCandidate is not 21 but 41. Since psfCandidates are widened, stars positioned at edges of images are rejected. It results in a smaller number of PSF candidates than expected. Only CCD images that are initially given to the worker processes are processed with psfCandidate.getWidth() == 21. The other CCD images are processed with psfCandidate.getWidth() == 41. When the number of SMP cores changes, CCD images are processed with different parameters. The change in the number of PSF candidates results in different Psf, a different result of image repair, and different catalogs. {quote} The line numbers are different on the LSST side because of refactoring (objectSizeStarSelector.py:466 has moved to starSelector.py:148), but the bug is still present. The main problem appears to be that the {{PsfCandidate}} elements are {{static}}, are being set in both the star selector and the PSF determiner and one of those is conditional on what the value is. I will investigate moving the {{static}} class variables to instance variables --- the desired size appears to vary by context, so it shouldn't be a class variable.
Story points: 2