Hello,
I am interested in studying the morphology of galaxies on the LSST, I have seen that the DP0.1 “reference” catalog has some columns associated with a Vaucouleur and exponential fit (“modelfit_CModel_dev_…” and “modelfit_CModel_exp_…”) but I haven’t found the relation between these and the common elliptical profile parameters (half-light radius, positional angle, axial ratio). How are these parameters related?
Hi @furcelay, thanks for your interest in DP0 and for this question.
I have looked for (but cannot yet find) a concise explanation of the modelfit_CModel paramters and their relation to more commonly-known galaxy profile parameters. I’ll bring this post to the attention of some Rubin staff who I think could better answer the question, and post some related information below.
I know the following doesn’t answer your question – and maybe you already know this – but the DP0.1 “reference” table available via the TAP service also has elliptical Gaussian adaptive moments in the “base_SdssShape_” columns (as does the “forced_photometry” table). So until I (or someone else) finds and posts relevant modelfit_CModel documentation, those common parameters are there and could be used.
I’m not sure if you’d be interested in more information on adaptive moment shape parameters, but just for completeness and for any other users reading this post: the LSST Data Products Definitions document references Bernstein & 2002, AJ, 123, 583, and TBH the place I typically return to for a reminder of how the adaptive moments relate to the half-light radii and position angle is the Source Extractor documentation – it won’t use the same column names but it’s a good general reference.
As a final note (more to myself and any others here to answer the question), I briefly looked at:
- The documentation for lsst.meas.modelfit, which computes these parameters, but it is not yet complete (lsst.meas.modelfit — LSST Science Pipelines).
- The doxygen site for this code but I didn’t see anything immediately relevant (LSST Applications: lsst::meas::modelfit; Source Measurement via Model Fitting).
- The two talks on Thursday 19 March during the Rubin Algorithms Workshop in 2020, on galaxy model fitting and shape measurement, by @jbosch, but the slides I looked at didn’t deal directly with output parameters
The _xx
, _yy
, _xy
columns that I think you found are the parameters of the half-light ellipses for the exponential and de Vaucouleurs models. You can find the mapping between those parameters and other ellipse parameters in Appendix 3 of the HSC Pipeline Paper. You may want to check out Appendix 2 as well for more information about CModel.
It’s also worth noting that there’s a pretty good chance that we’ll replace CModel with a Sersic or more-principled bulge+disk fit of some kind before DR1, but the replacement isn’t yet being run in production.
Hi @MelissaGraham and @jbosch , thank you both for your response.
With your help I’ve been able to get the parameters that I was looking for. For anyone who wants these parameters they can be obtained with python in the following way from the reference catalog:
obj_row = 0 # the object we want
xx, xy, yy = ref_cat[["modelfit_CModel_dev_ellipse_xx",
"modelfit_CModel_dev_ellipse_xy",
"modelfit_CModel_dev_ellipse_yy"]]
Q = np.array([[xx, xy],
[xy, yy]])
eig_val, eig_vec = np.linalg.eig(Q)
a = np.sqrt(np.max(eig_val)) # major axis
b = np.sqrt(np.min(eig_val)) # minor axis
a_indx = np.argmax(eig_val)
cos_t, sin_t = eig_vec[0, a_indx], -eig_vec[1, a_indx]
theta = np.rad2deg(np.arctan2(sin_t, cos_t)) # position angle
r_eff = np.sqrt(a * b) # effective radius
q = b / a # axial ratio
Hi @MelissaGraham and @jbosch, this post has been super helpful.
I am currently using DP0.2 to look at galaxy shape morphology and wondering if “modelfit_CModel_dev_ellipse_xx” can be replaced by “shape_xx” from the Object catalog. Is there a difference between “shape_xx” and “ixx” from the DiaSource catalog?
Hi @lluisa, thanks for posting, I can try and answer these questions.
Question 1: can ‘modelfit_CModel_dev_ellipse_xx’ be replaced by ‘shape_xx’ from the Object catalog.
I think not exactly, no.
From the DP0.1 Reference catalog schema:
modelfit_CModel_dev_ellipse_xx (unit=pixel^2, type=double): half-light ellipse of the de Vaucouleur fit
And from the DP0.2 Object catalog schema:
shape_xx (double, pixel^2) HSM moments. Reference band.
So the ‘shape_xx’ comes from the Hirata-Seljak-Mandelbaum (HSM) adaptive moments (Hirata & Seljak 2003, Mandelbaum et al. 2005).
Looking at the DP0.2 Object catalog schema, a matching description for ‘modelfit_CModel_dev_ellipse_xx’ can be found in column ‘[filter]_bdReB’, such as:
g_bdReB (double, pixel^2) Half-light ellipse of the de Vaucouleur fit. Measured on g-band.
Question 2: Is there a difference between ‘shape_xx’ and ‘ixx’ from the DiaSource catalog?
From the DP0.2 DiaSource catalog schema:
ixx (double, asec^2) Elliptical Gaussian adaptive moments
I think that ‘ixx’ does not come from the ‘shapeHSM’ package (like ‘shape_xx’) but from the ‘SimpleShape’ package, and that it is a non-adaptive elliptical Gaussian-weighted moments. (Side note another difference, that the units are arcseconds for ‘ixx’, and pixels for ‘shape_xx’).
Hi
Thank you for the quick response.
Following up for the first question, could the code provided by Felipe Urcelay be applied to the ‘[filter]_bdReB’ for example something similar to this:
g, r, i = res[["g_bdReB",
"r_bdReB",
"i_bdReB"]]
Q = np.array([[g, r],
[r, i]])
Or is there a better way to find the minor and major axis using the half-light ellipse of de Vaucouleur fit in the [filter]-band?
Thank you!
You cannot use the code above designed for moments (_xx
, _xy
, _yy
values) with per-filter-band values (g_
, r_
, and i_
).