__author__ = 'Jonah Medoff <jmedoff@uchicago.edu>, Alice Jacques <alice.jacques@noirlab.edu>'
-__version__ = '20240603' # yyyymmdd
-__datasets__ = ['delve_dr2']
-__keywords__ = ['science example', 'dwarf galaxies']
+
+__author__ = 'Jonah Medoff <jmedoff@uchicago.edu>, Alice Jacques <alice.jacques@noirlab.edu>'
+__version__ = '20240620' # yyyymmdd
+__datasets__ = ['delve_dr2']
+__keywords__ = ['science example', 'dwarf galaxies']
-
-
Detecting the Centaurus I dwarf galaxy in DELVE DR2¶
Jonah Medoff
-Adapted from "Detecting the Hydra II dwarf galaxy in SMASH DR1" by Robert Nikutta, Stéphanie Juneau, Knut Olsen, David Nidever, & Astro Data Lab Team
- +Detecting the Centaurus I dwarf galaxy in DELVE DR2¶
Jonah Medoff
+Adapted from "Detecting the Hydra II dwarf galaxy in SMASH DR1" by Robert Nikutta, Stéphanie Juneau, Knut Olsen, David Nidever, & Astro Data Lab Team
Table of contents¶
-
+
Table of contents¶
- Goals & notebook summary
- Disclaimer & attribution
- Imports & setup @@ -15155,103 +7558,99 @@
- Resources
Table of contentsSave your results to a local file
Goals¶
We will use a dwarf galaxy detection algorithm using a spatial overdensity of blue stars to re-discover the Centaurus I dwarf galaxy in the DELVE DR2 dataset (Mau et al. 2020).
- +Goals¶
We will use a dwarf galaxy detection algorithm using a spatial overdensity of blue stars to re-discover the Centaurus I dwarf galaxy in the DELVE DR2 dataset (Mau et al. 2020).
Summary¶
Background +
Summary¶
Background Ultrafaint dwarf galaxies are crucial to understanding many aspects of the universe. For instance, they are dominated by dark matter; their localization in space can thus trace the large-scale structure of the dark matter distribution. Furthermore, dwarf galaxies are suspected to host intermediate-mass black holes (IMBH), which so far have eluded efforts to find them. IMBHs will naturally bridge the gap between the solar-mass black hole and super-massive blackholes that reside at the center of virtually every large galaxy.
Data retrieval We will retrieve data at RA=189.58 and Dec=-40.89 in the DELVE catalog (Drlica-Wagner et al. 2022) and look for overdensities of blue objects.
The required columns are RA, Dec, and the g, r, i magnitudes.
Detection We will convolve the spatial distribution of our dataset with a pair of Gaussian kernels and subtract the results, as done in e.g. Stanford et al. (2005, ApJ, 634, 2, L129) (galaxy clusters), or Koposov et al. (2008, ApJ, 686, 279) (MW satellites). This has the effect of convolving the spatial distribution with a Mexican hat filter, which is useful for detecting objects at a desired spatial scale.
-Disclaimer & attribution¶
Disclaimers¶
Note that using the Astro Data Lab constitutes your agreement with our minimal Disclaimers.
-Acknowledgments¶
If you use Astro Data Lab in your published research, please include the text in your paper's Acknowledgments section:
+Disclaimer & attribution¶
Disclaimers¶
Note that using the Astro Data Lab constitutes your agreement with our minimal Disclaimers.
+Acknowledgments¶
If you use Astro Data Lab in your published research, please include the text in your paper's Acknowledgments section:
This research uses services or data provided by the Astro Data Lab, which is part of the Community Science and Data Center (CSDC) Program of NSF NOIRLab. NOIRLab is operated by the Association of Universities for Research in Astronomy (AURA), Inc. under a cooperative agreement with the U.S. National Science Foundation.
If you use SPARCL jointly with the Astro Data Lab platform (via JupyterLab, command-line, or web interface) in your published research, please include this text below in your paper's Acknowledgments section:
This research uses services or data provided by the SPectra Analysis and Retrievable Catalog Lab (SPARCL) and the Astro Data Lab, which are both part of the Community Science and Data Center (CSDC) Program of NSF NOIRLab. NOIRLab is operated by the Association of Universities for Research in Astronomy (AURA), Inc. under a cooperative agreement with the U.S. National Science Foundation.
In either case please cite the following papers:
-
-
Data Lab concept paper: Fitzpatrick et al., "The NOAO Data Laboratory: a conceptual overview", SPIE, 9149, 2014, https://doi.org/10.1117/12.2057445
+Data Lab concept paper: Fitzpatrick et al., "The NOAO Data Laboratory: a conceptual overview", SPIE, 9149, 2014, https://doi.org/10.1117/12.2057445
-Astro Data Lab overview: Nikutta et al., "Data Lab - A Community Science Platform", Astronomy and Computing, 33, 2020, https://doi.org/10.1016/j.ascom.2020.100411
+Astro Data Lab overview: Nikutta et al., "Data Lab - A Community Science Platform", Astronomy and Computing, 33, 2020, https://doi.org/10.1016/j.ascom.2020.100411
If you are referring to the Data Lab JupyterLab / Jupyter Notebooks, cite:
-
-
- Juneau et al., "Jupyter-Enabled Astrophysical Analysis Using Data-Proximate Computing Platforms", CiSE, 23, 15, 2021, https://doi.org/10.1109/MCSE.2021.3057097 +
- Juneau et al., "Jupyter-Enabled Astrophysical Analysis Using Data-Proximate Computing Platforms", CiSE, 23, 15, 2021, https://doi.org/10.1109/MCSE.2021.3057097
If publishing in a AAS journal, also add the keyword: \facility{Astro Data Lab}
And if you are using SPARCL, please also add \software{SPARCL}
and cite:
-
-
- Juneau et al., "SPARCL: SPectra Analysis and Retrievable Catalog Lab", Conference Proceedings for ADASS XXXIII, 2024 +
- Juneau et al., "SPARCL: SPectra Analysis and Retrievable Catalog Lab", Conference Proceedings for ADASS XXXIII, 2024 +https://doi.org/10.48550/arXiv.2401.05576
https://doi.org/10.48550/arXiv.2401.05576
The NOIRLab Library maintains lists of proper acknowledgments to use when publishing papers using the Lab's facilities, data, or services.
For this notebook specifically, please acknowledge:
- DELVE papers: Mau et al. 2020, Drlica-Wagner et al. 2022
# std lib
+
+# std lib
from getpass import getpass
import warnings
-warnings.filterwarnings('ignore') # to suppress some astropy deprecation warnings
+warnings.filterwarnings('ignore') # to suppress some astropy deprecation warnings
# 3rd party
import numpy as np
@@ -15271,133 +7670,111 @@ Imports and setupfrom dl.helpers.utils import convert
# plots default setup
-plt.rcParams['font.size'] = 14
+plt.rcParams['font.size'] = 14
-
-
Query the DELVE catalog for blue stars (expected in metal-poor dwarfs)¶
We will query the photometry table from the DELVE DR2 catalog and select ra=189.58 and dec=-40.89. We will limit the query to pick blue objects (-0.4 < g-r < 0.4).
-Construct the query string¶
+Query the DELVE catalog for blue stars (expected in metal-poor dwarfs)¶
We will query the photometry table from the DELVE DR2 catalog and select ra=189.58 and dec=-40.89. We will limit the query to pick blue objects (-0.4 < g-r < 0.4).
+Construct the query string¶
ra = 189.58
+
+ra = 189.58
dec = -40.89
# Create the query string; SQL keyword capitalized for clarity
query =\
-"""SELECT ra,dec,mag_auto_g,mag_auto_r,mag_auto_i
+"""SELECT ra,dec,mag_auto_g,mag_auto_r,mag_auto_i
FROM delve_dr2.objects
WHERE q3c_radial_query(ra, dec, 189.58, -40.89, 0.5) AND
mag_auto_g BETWEEN 14 AND 25 AND
- (mag_auto_g - mag_auto_r) BETWEEN -0.4 AND 0.4""".format(ra, dec)
+ (mag_auto_g - mag_auto_r) BETWEEN -0.4 AND 0.4""".format(ra, dec)
-
-
%time
-R = qc.query(sql=query,fmt='pandas') # R is a pandas DataFrame
+
+%time
+R = qc.query(sql=query,fmt='pandas') # R is a pandas DataFrame
-
-
CPU times: user 1e+03 ns, sys: 3 µs, total: 4 µs Wall time: 9.54 µs
print("Number of objects:", R.shape[0])
+
+print("Number of objects:", R.shape[0])
print(R.head())
-
-
Number of objects: 2978 ra dec mag_auto_g mag_auto_r mag_auto_i 0 189.484941 -41.369037 20.421825 20.113430 20.205090 @@ -15408,94 +7785,73 @@Submit the query -
++ --++-In [6]:+In [6]:-- +-fig = plt.figure(figsize=(7,6)) -plt.hexbin(R['ra'], R['dec'],gridsize=200) -plt.xlabel('RA') -plt.ylabel('Dec') -plt.colorbar(label='number of objects per spatial bin'); ++- -fig = plt.figure(figsize=(7,6)) +plt.hexbin(R['ra'], R['dec'],gridsize=200) +plt.xlabel('RA') +plt.ylabel('Dec') +plt.colorbar(label='number of objects per spatial bin');-- --- - - - - - --- + +-+--++--+-Detect overdensities (differential Guassian kernels)¶
Here we define the dwarf filter as a differential convolution of a two-dimensional image using two Gaussian kernels; this has the effect of convolution with a Mexican hat filter. The default kernel shapes look for objects on the scale of a few arcmin. The output includes a clipped array of the convolved spatial distribution, which we will use for peak detection.
- +Detect overdensities (differential Guassian kernels)¶
Here we define the dwarf filter as a differential convolution of a two-dimensional image using two Gaussian kernels; this has the effect of convolution with a Mexican hat filter. The default kernel shapes look for objects on the scale of a few arcmin. The output includes a clipped array of the convolved spatial distribution, which we will use for peak detection.
-++--In [7]:+In [7]:---def dwarf_filter (ra,dec,fwhm_small=2.0,fwhm_big=20): ++- -def dwarf_filter (ra,dec,fwhm_small=2.0,fwhm_big=20): - """Differential convolution with 2D Gaussian kernels. + """Differential convolution with 2D Gaussian kernels. Based on Koposov et al. (2008). Code by Ken Mighell and Mike Fitzpatrick. @@ -15509,11 +7865,11 @@Detect overdensiti fwhm_small, fwhm_big : float Full-width half maximum sizes of the small and big Gaussian kernels to use in convolution, in arcminutes. - """ + """ x, y = ra, dec - print("Computing differential convolution .... ",) + print("Computing differential convolution .... ",) # Information about declination (y) [degrees] ymean = (y.min() + y.max()) / 2.0 @@ -15530,8 +7886,8 @@
Detect overdensiti xdiff_angular_arcmin = xdiff_angular * 60.0 # Get the number of one-arcmin pixels in the X and Y directions: - nx = np.rint(xdiff_angular_arcmin).astype('int') - ny = np.rint(ydiff_arcmin).astype('int') + nx = np.rint(xdiff_angular_arcmin).astype('int') + ny = np.rint(ydiff_arcmin).astype('int') # Create a two-dimensional histogram of the raw counts: Counts, xedges, yedges = np.histogram2d (x, y, (nx,ny) ) @@ -15550,13 +7906,13 @@
Detect overdensiti delta = conv_delta.copy() # Compute statistics and the floor - mean = np.mean(delta, dtype='float64') - sigma = np.std(delta, dtype='float64') - sigmaRaw = np.std(raw_hist,dtype='float64') + mean = np.mean(delta, dtype='float64') + sigma = np.std(delta, dtype='float64') + sigmaRaw = np.std(raw_hist,dtype='float64') median = np.median(delta) # not used floor = mean - print('dwarf_filter: mean = {:g} sigma = {:g} sigmaRaw = {:g}'.format(mean, sigma, sigmaRaw)) + print('dwarf_filter: mean = {:g} sigma = {:g} sigmaRaw = {:g}'.format(mean, sigma, sigmaRaw)) clipped = delta.copy() clipped[delta < floor] = floor @@ -15564,54 +7920,44 @@
Detect overdensiti # Return the computed fields. return raw_hist, extent, delta, clipped, sigma
-+++ --++-In [8]:+In [8]:-- +-%time ++- -%time small_k, big_k = 2., 20. # kernel sizes in arcminutes -raw, extent, delta, clipped, dsigma = dwarf_filter(R['ra'],R['dec'],fwhm_small=small_k,fwhm_big=big_k) +raw, extent, delta, clipped, dsigma = dwarf_filter(R['ra'],R['dec'],fwhm_small=small_k,fwhm_big=big_k)- -- - - - -+ +CPU times: user 1 µs, sys: 3 µs, total: 4 µs Wall time: 8.58 µs Computing differential convolution .... @@ -15619,102 +7965,81 @@Run the dwarf filter -
+-++-In [9]:+In [9]:-- +-fig, ax = plt.subplots(figsize=(7,6)) ++- -fig, ax = plt.subplots(figsize=(7,6)) im = plt.imshow(clipped) -plt.xlabel('pixel') -plt.ylabel('pixel') -plt.colorbar(label='relative spatial density after convolution'); +plt.xlabel('pixel') +plt.ylabel('pixel') +plt.colorbar(label='relative spatial density after convolution');-- --- - - - - - --- + +-+--++--+One dense peak is visible, let's locate it automatically...
--++ --++-In [10]:+In [10]:-- +-# find peaks ++- -# find peaks mean, median, std = stats.sigma_clipped_stats(clipped,sigma=3.0,maxiters=5) print(mean, median, std) tbl = find_peaks(clipped,median+3,box_size=small_k*2) @@ -15725,28 +8050,21 @@Identify peaksa, b = extent[2:] yvec = np.arange(a,b,(b-a)/clipped.shape[0]) -tbl['ra'] = xvec[tbl['x_peak']] -tbl['dec'] = yvec[-tbl['y_peak']-1] +tbl['ra'] = xvec[tbl['x_peak']] +tbl['dec'] = yvec[-tbl['y_peak']-1] print(tbl)
- -- - - - -+ +0.157117870232365 0.11619622055078048 0.08005803782621333 x_peak y_peak peak_value ra dec ------ ------ ----------------- ----------------- ------------------ @@ -15754,90 +8072,70 @@Identify peaks -
+-++-In [11]:+In [11]:-- +-ecs = ['w'] # color of box frame -ax.scatter(tbl['x_peak'],tbl['y_peak'],marker='s',s=tbl['peak_value']*50,c='none',edgecolors=ecs,lw=3) # keeps writing to previous ax ++- -ecs = ['w'] # color of box frame +ax.scatter(tbl['x_peak'],tbl['y_peak'],marker='s',s=tbl['peak_value']*50,c='none',edgecolors=ecs,lw=3) # keeps writing to previous ax fig # repeats (the updated) figure-- --- --Out[11]:- - - - -- +-Out[11]:++--++--+-Inspect the image cutouts around the peaks¶
Simple Image Access service¶
Data Lab comes with batteries included. Image cutout and download services are built in.
-We'll download images from the url "https://datalab.noirlab.edu/sia/nsa" at our specific ra and dec and store them in an image table, and we'll also write a function to plot several images side-by-side.
- +Inspect the image cutouts around the peaks¶
Simple Image Access service¶
Data Lab comes with batteries included. Image cutout and download services are built in.
+We'll download images from the url "https://datalab.noirlab.edu/sia/nsa" at our specific ra and dec and store them in an image table, and we'll also write a function to plot several images side-by-side.
-++--In [12]:+In [12]:---# set up SIA and image table -DEF_ACCESS_URL = "https://datalab.noirlab.edu/sia/nsa" ++- -# set up SIA and image table +DEF_ACCESS_URL = "https://datalab.noirlab.edu/sia/nsa" svc_nsa = sia.SIAService(DEF_ACCESS_URL) ra = 189.58 dec = -40.89 @@ -15846,69 +8144,64 @@Inspect the image cutouts ar imgTable = svc_nsa.search((ra,dec), (fov/np.cos(dec*np.pi/180), fov), verbosity=2).to_table() # multi panel image plotter -def plot_images(images,geo=None,panelsize=5,titles=list('gri'),cmap=plt.cm.gray_r): +def plot_images(images,geo=None,panelsize=5,titles=list('gri'),cmap=plt.cm.gray_r): if geo is None: geo = (len(images),1) # ncols, nrows fig = plt.figure(figsize=(geo[0]*panelsize,geo[1]*panelsize)) for j,img in enumerate(images): ax = fig.add_subplot(geo[1],geo[0],j+1) - ax.imshow(img,origin='lower',interpolation='none',cmap=cmap,norm=plt.mpl.colors.PowerNorm(0.1)) - ax.set_title('{:s}'.format(titles[j])) - plt.axis('off') + ax.imshow(img,origin='lower',interpolation='none',cmap=cmap,norm=plt.mpl.colors.PowerNorm(0.1)) + ax.set_title('{:s}'.format(titles[j])) + plt.axis('off')
-+++---Get images for the white box¶
Separately plot the g, r, and i images for the region in the white box.
++Get images for the white box¶
Separately plot the g, r, and i images for the region in the white box.
For each image, the sel condition is used to find the specific image within the image table. For aesthetic reasons, we normalize each image using the image exposure time and zeropoint. We take the zeropoints from the DELVE data processing but they can be approximated by hand (as we do for the i band).
--++-In [13]:+In [13]:-- --#There is an astrometric offset in the false-color image, so these constants are used to move the images around ++- -#There is an astrometric offset in the false-color image, so these constants are used to move the images around #Right now we have it set so that the g and i images are moved 8 pixels to the left a=0 b=8-+++-In [14]:+In [14]:-- --sel = (imgTable['proctype'].astype(str)=='InstCal') & (imgTable['prodtype'].astype(str)=='image') & (imgTable['access_estsize'].astype(str)=='311551') & \ - (startswith(imgTable['obs_bandpass'].astype(str),'g')) ++- -sel = (imgTable['proctype'].astype(str)=='InstCal') & (imgTable['prodtype'].astype(str)=='image') & (imgTable['access_estsize'].astype(str)=='311551') & \ + (startswith(imgTable['obs_bandpass'].astype(str),'g')) #print(imgTable[sel][0]) row = imgTable[sel][0] -url = row['access_url'] # get the download URL +url = row['access_url'] # get the download URL filename = download_file(url,cache=True,show_progress=False,timeout=120) hdu = fits.open(filename)[0] i1 = hdu.data @@ -15920,83 +8213,62 @@Get images for the white box#image1 *= (10.0**(0.4*(30.0 - zpt)))/exptime #from header, exptime=85, expnum=188187, ccdnum=16 zp=31.514652 -image1 *= (10.0**(0.4*(30.0-zp)))/hdr["EXPTIME"] +image1 *= (10.0**(0.4*(30.0-zp)))/hdr["EXPTIME"]
-+++-In [15]:+In [15]:-- +-print(image1.min(),image1.max(),image1.shape) ++- -print(image1.min(),image1.max(),image1.shape) ax = plt.subplot(projection=wcs) -ax.imshow(image1,cmap='gray',vmin=image1.min(),vmax=image1.min()+(image1.max()-image1.min())/150.) +ax.imshow(image1,cmap='gray',vmin=image1.min(),vmax=image1.min()+(image1.max()-image1.min())/150.) plt.show()- -- - - - -- -+ +0.0015444942 153.20056 (1362, 1225)- - - - - - --- + +-+--++-In [16]:+In [16]:-- --sel = (imgTable['proctype'].astype(str)=='InstCal') & (imgTable['prodtype'].astype(str)=='image') & (imgTable['access_estsize'].astype(str)=='313152') & \ - (startswith(imgTable['obs_bandpass'].astype(str),'r')) ++- -sel = (imgTable['proctype'].astype(str)=='InstCal') & (imgTable['prodtype'].astype(str)=='image') & (imgTable['access_estsize'].astype(str)=='313152') & \ + (startswith(imgTable['obs_bandpass'].astype(str),'r')) #print(imgTable[sel][0]) row = imgTable[sel][0] -url = row['access_url'] # get the download URL +url = row['access_url'] # get the download URL filename = download_file(url,cache=True,show_progress=False,timeout=120) hdu = fits.open(filename)[0] i2 = hdu.data @@ -16008,83 +8280,62 @@Get images for the white box#image2 *= (10.0**(0.4*(30.0 - zpt)))/exptime #from header, exptime=85, expnum=188186, ccdnum=16 zp=31.66765 -image2 *= (10.0**(0.4*(30.0-zp)))/hdr["EXPTIME"] +image2 *= (10.0**(0.4*(30.0-zp)))/hdr["EXPTIME"]
-+++-In [17]:+In [17]:-- +-print(image2.min(),image2.max(),image2.shape) ++- -print(image2.min(),image2.max(),image2.shape) ax = plt.subplot(projection=wcs) -ax.imshow(image2,cmap='gray',vmin=image2.min(),vmax=image2.min()+(image2.max()-image2.min())/70.) +ax.imshow(image2,cmap='gray',vmin=image2.min(),vmax=image2.min()+(image2.max()-image2.min())/70.) plt.show()- -- - - - -- -+ +0.04137251 131.84407 (1362, 1225)- - - - - - --- + +-+--++-In [18]:+In [18]:-- --sel = (imgTable['proctype'].astype(str)=='InstCal') & (imgTable['prodtype'].astype(str)=='image') & (imgTable['access_estsize'].astype(str)=='307960') & \ - (startswith(imgTable['obs_bandpass'].astype(str),'i')) ++- -sel = (imgTable['proctype'].astype(str)=='InstCal') & (imgTable['prodtype'].astype(str)=='image') & (imgTable['access_estsize'].astype(str)=='307960') & \ + (startswith(imgTable['obs_bandpass'].astype(str),'i')) #print(imgTable[sel][0]) row = imgTable[sel][0] -url = row['access_url'] # get the download URL +url = row['access_url'] # get the download URL filename = download_file(url,cache=True,show_progress=False,timeout=120) hdu = fits.open(filename)[0] i3 = hdu.data @@ -16098,193 +8349,145 @@Get images for the white box#Note: the expnum and ccdnum for the i image did not produce a zeropoint, #so we estimated a zeropoint of 31.0, which worked well to produce a proper false-color image. zp=31.0 -image3 *= (10.0**(0.4*(30.0-zp)))/hdr["EXPTIME"] +image3 *= (10.0**(0.4*(30.0-zp)))/hdr["EXPTIME"]
-+++-In [19]:+In [19]:-- +-print(image3.min(),image3.max(),image3.shape) ++- -print(image3.min(),image3.max(),image3.shape) ax = plt.subplot(projection=wcs) -ax.imshow(image3,cmap='gray',vmin=image3.min(),vmax=image3.min()+(image3.max()-image3.min())/100.) +ax.imshow(image3,cmap='gray',vmin=image3.min(),vmax=image3.min()+(image3.max()-image3.min())/100.) plt.show()- --- - - - --+ +10.76793 550.08356 (1362, 1225)- - - - - - --- + +-+--++ --++-In [20]:+In [20]:-- +-bands = list('gri') ++- -bands = list('gri') images=[image1, image2, image3] images = [im-np.median(im) for im in images] # subtract median from all images for better scaling images += [make_lupton_rgb(*images[::-1],stretch=1)] # add a 3-color composite image -plot_images(images,geo=(4,1),titles=bands+['False-color 3-band image']) +plot_images(images,geo=(4,1),titles=bands+['False-color 3-band image'])-- --- - - - - - --- + +-+--++ --++-In [21]:+In [21]:-- --def makequery(ra0,dec0,radius0): - query_template = """ ++- -def makequery(ra0,dec0,radius0): + query_template = """ SELECT ra,dec,mag_auto_g,mag_auto_r,mag_auto_i FROM delve_dr2.objects WHERE q3c_radial_query(ra, dec, {0}, {1}, {2}) - AND mag_auto_g BETWEEN 14 AND 25""" + AND mag_auto_g BETWEEN 14 AND 25""" query = query_template.format(ra0,dec0,radius0) return query-+++-In [22]:+In [22]:-- +-query0 = makequery(tbl['ra'][0],tbl['dec'][0], 5./60.) # center ra & dec -R0 = qc.query(sql=query0,fmt='pandas') ++- -query0 = makequery(tbl['ra'][0],tbl['dec'][0], 5./60.) # center ra & dec +R0 = qc.query(sql=query0,fmt='pandas') print(R0.head()) # a pandas method-- --- - - - --+ +-ra dec mag_auto_g mag_auto_r mag_auto_i 0 189.526334 -40.974901 23.137787 22.216522 22.119255 1 189.534045 -40.975292 23.097633 21.711887 21.064604 @@ -16294,51 +8497,41 @@Query the database for stars
-+-++-In [23]:+In [23]:-- +-R0['g_r'] = R0['mag_auto_g'] - R0['mag_auto_r'] ++- -R0['g_r'] = R0['mag_auto_g'] - R0['mag_auto_r'] print( R0.head())-- - --+-++-In [24]:+In [24]:-- --def plotpanel(axid,x,y,title='',xlim=(-1,2),ylim=(25.2,14)): ++- -def plotpanel(axid,x,y,title='',xlim=(-1,2),ylim=(25.2,14)): ax = fig.add_subplot(axid) - ax.scatter(x,y,marker='.',s=10, alpha=0.8) + ax.scatter(x,y,marker='.',s=10, alpha=0.8) ax.set_xlabel(x.name) ax.set_ylabel(y.name) ax.set_xlim(xlim) ax.set_ylim(ylim) ax.set_title(title)-+++-In [25]:+In [25]:-- +-fig = plt.figure(figsize=(12,5.5)) -plotpanel(121,R0['g_r'],R0['mag_auto_g'],'white box, {:d} objects'.format(len(R0))) ++- -fig = plt.figure(figsize=(12,5.5)) +plotpanel(121,R0['g_r'],R0['mag_auto_g'],'white box, {:d} objects'.format(len(R0)))-- --- - - - - - --- + +-+--++--++ --++--In [26]:+In [26]:---outfile = 'cen1.csv' ++- -outfile = 'cen1.csv' R0.to_csv(outfile,index=False)-+++--++--+++ - - - - - - - diff --git a/03_ScienceExamples/DwarfGalaxies/DwarfGalaxiesInDelveDr2.ipynb b/03_ScienceExamples/DwarfGalaxies/DwarfGalaxiesInDelveDr2.ipynb index 6da9eb88..b84e0da4 100644 --- a/03_ScienceExamples/DwarfGalaxies/DwarfGalaxiesInDelveDr2.ipynb +++ b/03_ScienceExamples/DwarfGalaxies/DwarfGalaxiesInDelveDr2.ipynb @@ -18,7 +18,7 @@ "outputs": [], "source": [ "__author__ = 'Jonah Medoff-+-Some resources¶
Mau et al. (2020, ApJ, 890, 136) "Two Ultra-Faint Milky Way Stellar Systems Discovered in Early Data from the DECam Local Volume Exploration Survey": https://ui.adsabs.harvard.edu/abs/2020ApJ...890..136M/abstract
-Drlica-Wagner et al. (2022) "The DECam Local Volume Exploration Survey Data Release 2": https://ui.adsabs.harvard.edu/abs/2022arXiv220316565D/abstract
-Stanford et al. (2005, ApJ, 634, 2, L129) "An IR-selected Galaxy Cluster at z = 1.41": http://adsabs.harvard.edu/abs/2005ApJ...634L.129S
-Koposov et al. (2008, ApJ, 686, 279) "The Luminosity Function of the Milky Way Satellites": http://adsabs.harvard.edu/abs/2008ApJ...686..279K
- +Some resources¶
Mau et al. (2020, ApJ, 890, 136) "Two Ultra-Faint Milky Way Stellar Systems Discovered in Early Data from the DECam Local Volume Exploration Survey": https://ui.adsabs.harvard.edu/abs/2020ApJ...890..136M/abstract
+Drlica-Wagner et al. (2022) "The DECam Local Volume Exploration Survey Data Release 2": https://ui.adsabs.harvard.edu/abs/2022arXiv220316565D/abstract
+Stanford et al. (2005, ApJ, 634, 2, L129) "An IR-selected Galaxy Cluster at z = 1.41": http://adsabs.harvard.edu/abs/2005ApJ...634L.129S
+Koposov et al. (2008, ApJ, 686, 279) "The Luminosity Function of the Milky Way Satellites": http://adsabs.harvard.edu/abs/2008ApJ...686..279K
, Alice Jacques '\n", - "__version__ = '20240603' # yyyymmdd\n", + "__version__ = '20240620' # yyyymmdd\n", "__datasets__ = ['delve_dr2']\n", "__keywords__ = ['science example', 'dwarf galaxies'] " ]