686 def fgcmMatchStars(self, visitCat, obsCat, lutDataRef=None):
688 Use FGCM code to match observations into unique stars.
692 visitCat: `afw.table.BaseCatalog`
693 Catalog with visit data for fgcm
694 obsCat: `afw.table.BaseCatalog`
695 Full catalog of star observations for fgcm
696 lutDataRef: `lsst.daf.persistence.ButlerDataRef` or
697 `lsst.daf.butler.DeferredDatasetHandle`, optional
698 Data reference to fgcm look-up table (used if matching reference stars).
702 fgcmStarIdCat: `afw.table.BaseCatalog`
703 Catalog of unique star identifiers and index keys
704 fgcmStarIndicesCat: `afwTable.BaseCatalog`
705 Catalog of unique star indices
706 fgcmRefCat: `afw.table.BaseCatalog`
707 Catalog of matched reference stars.
708 Will be None if `config.doReferenceMatches` is False.
712 visitFilterNames = np.zeros(len(visitCat), dtype=
'a30')
713 for i
in range(len(visitCat)):
714 visitFilterNames[i] = visitCat[i][
'physicalFilter']
717 visitIndex = np.searchsorted(visitCat[
'visit'],
720 obsFilterNames = visitFilterNames[visitIndex]
722 if self.config.doReferenceMatches:
724 lutCat = lutDataRef.get()
726 stdFilterDict = {filterName: stdFilter
for (filterName, stdFilter)
in
727 zip(lutCat[0][
'physicalFilters'].split(
','),
728 lutCat[0][
'stdPhysicalFilters'].split(
','))}
729 stdLambdaDict = {stdFilter: stdLambda
for (stdFilter, stdLambda)
in
730 zip(lutCat[0][
'stdPhysicalFilters'].split(
','),
731 lutCat[0][
'lambdaStdFilter'])}
735 referenceFilterNames = self._getReferenceFilterNames(visitCat,
738 self.log.
info(
"Using the following reference filters: %s" %
739 (
', '.join(referenceFilterNames)))
743 referenceFilterNames = []
746 starConfig = {
'logger': self.log,
747 'filterToBand': self.config.physicalFilterMap,
748 'requiredBands': self.config.requiredBands,
749 'minPerBand': self.config.minPerBand,
750 'matchRadius': self.config.matchRadius,
751 'isolationRadius': self.config.isolationRadius,
752 'matchNSide': self.config.matchNside,
753 'coarseNSide': self.config.coarseNside,
754 'densNSide': self.config.densityCutNside,
755 'densMaxPerPixel': self.config.densityCutMaxPerPixel,
756 'randomSeed': self.config.randomSeed,
757 'primaryBands': self.config.primaryBands,
758 'referenceFilterNames': referenceFilterNames}
761 fgcmMakeStars = fgcm.FgcmMakeStars(starConfig)
769 conv = obsCat[0][
'ra'].asDegrees() / float(obsCat[0][
'ra'])
770 fgcmMakeStars.makePrimaryStars(obsCat[
'ra'] * conv,
771 obsCat[
'dec'] * conv,
772 filterNameArray=obsFilterNames,
776 fgcmMakeStars.makeMatchedStars(obsCat[
'ra'] * conv,
777 obsCat[
'dec'] * conv,
780 if self.config.doReferenceMatches:
781 fgcmMakeStars.makeReferenceMatches(self.fgcmLoadReferenceCatalog)
785 objSchema = self._makeFgcmObjSchema()
789 fgcmStarIdCat.reserve(fgcmMakeStars.objIndexCat.size)
790 for i
in range(fgcmMakeStars.objIndexCat.size):
791 fgcmStarIdCat.addNew()
794 fgcmStarIdCat[
'fgcm_id'][:] = fgcmMakeStars.objIndexCat[
'fgcm_id']
795 fgcmStarIdCat[
'ra'][:] = fgcmMakeStars.objIndexCat[
'ra']
796 fgcmStarIdCat[
'dec'][:] = fgcmMakeStars.objIndexCat[
'dec']
797 fgcmStarIdCat[
'obsArrIndex'][:] = fgcmMakeStars.objIndexCat[
'obsarrindex']
798 fgcmStarIdCat[
'nObs'][:] = fgcmMakeStars.objIndexCat[
'nobs']
800 obsSchema = self._makeFgcmObsSchema()
803 fgcmStarIndicesCat.reserve(fgcmMakeStars.obsIndexCat.size)
804 for i
in range(fgcmMakeStars.obsIndexCat.size):
805 fgcmStarIndicesCat.addNew()
807 fgcmStarIndicesCat[
'obsIndex'][:] = fgcmMakeStars.obsIndexCat[
'obsindex']
809 if self.config.doReferenceMatches:
810 refSchema = self._makeFgcmRefSchema(len(referenceFilterNames))
813 fgcmRefCat.reserve(fgcmMakeStars.referenceCat.size)
815 for i
in range(fgcmMakeStars.referenceCat.size):
818 fgcmRefCat[
'fgcm_id'][:] = fgcmMakeStars.referenceCat[
'fgcm_id']
819 fgcmRefCat[
'refMag'][:, :] = fgcmMakeStars.referenceCat[
'refMag']
820 fgcmRefCat[
'refMagErr'][:, :] = fgcmMakeStars.referenceCat[
'refMagErr']
823 md.set(
"REFSTARS_FORMAT_VERSION", REFSTARS_FORMAT_VERSION)
824 md.set(
"FILTERNAMES", referenceFilterNames)
825 fgcmRefCat.setMetadata(md)
830 return fgcmStarIdCat, fgcmStarIndicesCat, fgcmRefCat