# Adding VISTA near-IR bands to Monster

**URL:** <https://www.rubin.community/t/adding-vista-near-ir-bands-to-monster/11678>\
**Category:** Support\
**Tags:** refcat\
**Created:** [March 2, 2026, 11:19pm UTC](https://www.rubin.community/t/adding-vista-near-ir-bands-to-monster/11678 "2026-03-02T23:19:17Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Saremi-Elham](https://sea2.discourse-cdn.com/flex002/user_avatar/www.rubin.community/saremi-elham/32/2715_2.png) [@Saremi-Elham](https://www.rubin.community/u/Saremi-Elham)\
**Post date:** [March 2, 2026, 11:19pm UTC](https://www.rubin.community/t/adding-vista-near-ir-bands-to-monster/11678/1 "2026-03-02T23:19:17Z")

</div>

Hi all,

I’m working on the **LSST–VISTA fusion pipeline** (using LSST Science Pipelines via the obs\_vista package to combine LSST and VISTA data). As part of this, I’m building a LSST–VISTA calibration refcat. For VIRCAM Z/Y I’m following a Monster-style calibration approach (fits/splines between bandpasses), and for J/H/K I’m attaching VISTA photometry to Monster via crossmatch to build a combined **Monster–VISTA refcat** (keeping Monster coordinates).

The issue is cross-matching robustness in dense fields when the external VISTA catalogue **positions are not at the same epoch as Monster.** In my DP1 test case (VIDEO CDFS), I attempted a PM-aware matching scheme: I propagated Monster positions from the Gaia reference epoch to the VISTA catalogue epoch using Monster proper motions, did an initial loose crossmatch to estimate and remove a bulk offset, then re-matched with a tighter radius enforcing unique 1–1 pairs. I then propagated the matched VISTA positions back to the Monster epoch as a consistency check. Despite this, a residual mismatch remains, so I’m concerned about incorrect associations (wrong VISTA flux attached to a Monster source) rather than a simple global shift.

I suspect this is a known class of problem — e.g. when Monster was constructed, many input surveys such as DES/DECam are not at exactly the Gaia DR3 epoch either — so I’d like to understand the recommended DM approach.

What is the DM-recommended approach / existing pipeline pattern for reliably matching Monster to an external catalogue with different/unclear epoch handling, especially in dense fields? Is there an existing LSST Task/workflow for ingesting external photometry into a Monster-like refcat that already handles these matching/epoch pitfalls?

Thanks in advance for your help.

---

<div class="post-metadata">

**Author:** ![jeffcarlin](https://sea2.discourse-cdn.com/flex002/user_avatar/www.rubin.community/jeffcarlin/32/491_2.png) [@jeffcarlin](https://www.rubin.community/u/jeffcarlin)\
**Post date:** [March 5, 2026, 9:43pm UTC](https://www.rubin.community/t/adding-vista-near-ir-bands-to-monster/11678/2 "2026-03-05T21:43:12Z")

</div>

The Monster refcat was designed for our internal use to get initial calibrations. The way we handled “bad matches” was just to remove them, since all we need the catalog for is getting an initial guess at the photometric and astrometric calibration, and even after removing outliers we typically have plenty of reference stars in the Monster. Your use case certainly sounds like a more difficult problem, and not one that we plan to concern ourselves with. Apologies that we don’t have more advice to offer you, but I think that the problem you’re facing is not something that we have addressed.

It may be worth asking this as more of a science question in other channels of the Community Forum (rather than in “Support”) – I’m guessing there are people in the broader community who have thoughts on this!

---

<div class="post-metadata">

**Author:** ![Saremi-Elham](https://sea2.discourse-cdn.com/flex002/user_avatar/www.rubin.community/saremi-elham/32/2715_2.png) [@Saremi-Elham](https://www.rubin.community/u/Saremi-Elham)\
**Post date:** [March 6, 2026, 2:43pm UTC](https://www.rubin.community/t/adding-vista-near-ir-bands-to-monster/11678/3 "2026-03-06T14:43:43Z")

</div>

Thanks for your answer. Just to make sure I’m not reinventing your outlier-rejection step: when building Monster, how did you define and remove “bad matches” in practice (e.g. mutual nearest-neighbour + separation cut, sigma-clipping on ΔRA\*/ΔDec residuals after an initial fit, etc.)? Even a pointer to the relevant Task/config (if there is one) would be very useful.

---

<div class="post-metadata">

**Author:** ![psferguson](https://sea2.discourse-cdn.com/flex002/user_avatar/www.rubin.community/psferguson/32/2446_2.png) [@psferguson](https://www.rubin.community/u/psferguson)\
**Post date:** [March 11, 2026, 8:05pm UTC](https://www.rubin.community/t/adding-vista-near-ir-bands-to-monster/11678/4 "2026-03-11T20:05:46Z")

</div>

I agree with Jeff’s comment.  
It looks like we ran the [IsolatedStarAssociationTask](https://pipelines.lsst.io/modules/lsst.pipe.tasks/tasks/lsst.pipe.tasks.isolatedStarAssociation.IsolatedStarAssociationTask.html) to select gaia sources that had no other gaia sources within 1 arcsecond.  
Then our matching only kept stars from the source refcat within 0.5 arcsec of a isolated gaia source  
Look at the [isolate\_and\_transform](https://github.com/lsst-dm/the_monster/blob/0fe5f32a18eb443b8d6524323bd572c20351574f/python/lsst/the/monster/isolate_and_transform.py#L95-L101) step of the monster creation.

---

<div class="post-metadata">

**Author:** ![Saremi-Elham](https://sea2.discourse-cdn.com/flex002/user_avatar/www.rubin.community/saremi-elham/32/2715_2.png) [@Saremi-Elham](https://www.rubin.community/u/Saremi-Elham)\
**Post date:** [March 12, 2026, 2:40pm UTC](https://www.rubin.community/t/adding-vista-near-ir-bands-to-monster/11678/5 "2026-03-12T14:40:34Z")

</div>

Thank you so much for your answer.
