687 def fgcmMatchStars(self, visitCat, obsCat, lutDataRef=None):
689 Use FGCM code to match observations into unique stars.
693 visitCat: `afw.table.BaseCatalog`
694 Catalog with visit data for fgcm
695 obsCat: `afw.table.BaseCatalog`
696 Full catalog of star observations for fgcm
697 lutDataRef: `lsst.daf.persistence.ButlerDataRef` or
698 `lsst.daf.butler.DeferredDatasetHandle`, optional
699 Data reference to fgcm look-up table (used if matching reference stars).
703 fgcmStarIdCat: `afw.table.BaseCatalog`
704 Catalog of unique star identifiers and index keys
705 fgcmStarIndicesCat: `afwTable.BaseCatalog`
706 Catalog of unique star indices
707 fgcmRefCat: `afw.table.BaseCatalog`
708 Catalog of matched reference stars.
709 Will be None if `config.doReferenceMatches` is False.
713 visitFilterNames = np.zeros(len(visitCat), dtype=
'a30')
714 for i
in range(len(visitCat)):
715 visitFilterNames[i] = visitCat[i][
'physicalFilter']
718 visitIndex = np.searchsorted(visitCat[
'visit'],
721 obsFilterNames = visitFilterNames[visitIndex]
723 if self.config.doReferenceMatches:
725 lutCat = lutDataRef.get()
727 stdFilterDict = {filterName: stdFilter
for (filterName, stdFilter)
in
728 zip(lutCat[0][
'physicalFilters'].split(
','),
729 lutCat[0][
'stdPhysicalFilters'].split(
','))}
730 stdLambdaDict = {stdFilter: stdLambda
for (stdFilter, stdLambda)
in
731 zip(lutCat[0][
'stdPhysicalFilters'].split(
','),
732 lutCat[0][
'lambdaStdFilter'])}
736 referenceFilterNames = self._getReferenceFilterNames(visitCat,
739 self.log.
info(
"Using the following reference filters: %s" %
740 (
', '.join(referenceFilterNames)))
744 referenceFilterNames = []
747 starConfig = {
'logger': self.log,
748 'filterToBand': self.config.physicalFilterMap,
749 'requiredBands': self.config.requiredBands,
750 'minPerBand': self.config.minPerBand,
751 'matchRadius': self.config.matchRadius,
752 'isolationRadius': self.config.isolationRadius,
753 'matchNSide': self.config.matchNside,
754 'coarseNSide': self.config.coarseNside,
755 'densNSide': self.config.densityCutNside,
756 'densMaxPerPixel': self.config.densityCutMaxPerPixel,
757 'randomSeed': self.config.randomSeed,
758 'primaryBands': self.config.primaryBands,
759 'referenceFilterNames': referenceFilterNames}
762 fgcmMakeStars = fgcm.FgcmMakeStars(starConfig)
770 conv = obsCat[0][
'ra'].asDegrees() / float(obsCat[0][
'ra'])
771 fgcmMakeStars.makePrimaryStars(obsCat[
'ra'] * conv,
772 obsCat[
'dec'] * conv,
773 filterNameArray=obsFilterNames,
777 fgcmMakeStars.makeMatchedStars(obsCat[
'ra'] * conv,
778 obsCat[
'dec'] * conv,
781 if self.config.doReferenceMatches:
782 fgcmMakeStars.makeReferenceMatches(self.fgcmLoadReferenceCatalog)
786 objSchema = self._makeFgcmObjSchema()
790 fgcmStarIdCat.reserve(fgcmMakeStars.objIndexCat.size)
791 for i
in range(fgcmMakeStars.objIndexCat.size):
792 fgcmStarIdCat.addNew()
795 fgcmStarIdCat[
'fgcm_id'][:] = fgcmMakeStars.objIndexCat[
'fgcm_id']
796 fgcmStarIdCat[
'ra'][:] = fgcmMakeStars.objIndexCat[
'ra']
797 fgcmStarIdCat[
'dec'][:] = fgcmMakeStars.objIndexCat[
'dec']
798 fgcmStarIdCat[
'obsArrIndex'][:] = fgcmMakeStars.objIndexCat[
'obsarrindex']
799 fgcmStarIdCat[
'nObs'][:] = fgcmMakeStars.objIndexCat[
'nobs']
801 obsSchema = self._makeFgcmObsSchema()
804 fgcmStarIndicesCat.reserve(fgcmMakeStars.obsIndexCat.size)
805 for i
in range(fgcmMakeStars.obsIndexCat.size):
806 fgcmStarIndicesCat.addNew()
808 fgcmStarIndicesCat[
'obsIndex'][:] = fgcmMakeStars.obsIndexCat[
'obsindex']
810 if self.config.doReferenceMatches:
811 refSchema = self._makeFgcmRefSchema(len(referenceFilterNames))
814 fgcmRefCat.reserve(fgcmMakeStars.referenceCat.size)
816 for i
in range(fgcmMakeStars.referenceCat.size):
819 fgcmRefCat[
'fgcm_id'][:] = fgcmMakeStars.referenceCat[
'fgcm_id']
820 fgcmRefCat[
'refMag'][:, :] = fgcmMakeStars.referenceCat[
'refMag']
821 fgcmRefCat[
'refMagErr'][:, :] = fgcmMakeStars.referenceCat[
'refMagErr']
824 md.set(
"REFSTARS_FORMAT_VERSION", REFSTARS_FORMAT_VERSION)
825 md.set(
"FILTERNAMES", referenceFilterNames)
826 fgcmRefCat.setMetadata(md)
831 return fgcmStarIdCat, fgcmStarIndicesCat, fgcmRefCat