Color-magnitude diagram: narrowband filters

In this tutorial, we compute synthetic photometry for the VLT/SPHERE H2 and H3 filters from the SpeX Prism Spectral Library. Also, synthetic photometry is calculated from the AMES-Cond and AMES-Dusty isochrones and atmospheric model spectra. These are compared in a color-magnitude diagram with the photometric data of directly imaged planets.

Getting started

[1]:
import urllib.request
import numpy as np
import species

The isochrone will be extracted at an age of 20 Myr for 100 logarithmically spaced masses.

[2]:
age = 20.  # [Myr]
masses = np.logspace(0., 4., 100)  # [Mjup]

Next, species is initiated by reading the configuration file from the working folder.

[3]:
species.SpeciesInit()
Initiating species v0.1.4... [DONE]
Creating species_config.ini... [DONE]
Database: /Users/tomasstolker/applications/species/docs/tutorials/species_database.hdf5
Data folder: /Users/tomasstolker/applications/species/docs/tutorials/data
Working folder: /Users/tomasstolker/applications/species/docs/tutorials
Creating species_database.hdf5... [DONE]
Creating data folder... [DONE]
[3]:
<species.core.setup.SpeciesInit at 0x12bd67a58>

Adding data and models

A Database object is created which is used for adding data and models to the HDF5 database.

[4]:
database = species.Database()

The available photometric data of directly imaged companions is added. Alternative, add_object can be used to manually add the properties of an object.

[5]:
database.add_companion(name=None)
Adding filter: LCO/VisAO.Ys... [DONE]
Downloading Vega spectrum (270 kB)... [DONE]
Adding Vega spectrum... [DONE]
Adding filter: Paranal/NACO.J... [DONE]
Adding filter: Gemini/NICI.ED286... [DONE]
Adding filter: Paranal/NACO.H... [DONE]
Adding filter: Paranal/NACO.Ks... [DONE]
Adding filter: Paranal/NACO.NB374... [DONE]
Adding filter: Paranal/NACO.Lp... [DONE]
Adding filter: Paranal/NACO.NB405... [DONE]
Adding filter: Paranal/NACO.Mp... [DONE]
Adding object: beta Pic b... [DONE]
Adding filter: Paranal/SPHERE.IRDIS_D_H23_2... [DONE]
Adding filter: Paranal/SPHERE.IRDIS_D_H23_3... [DONE]
Adding filter: Paranal/SPHERE.IRDIS_D_K12_1... [DONE]
Adding filter: Paranal/SPHERE.IRDIS_D_K12_2... [DONE]
Adding object: HIP 65426 b... [DONE]
Adding filter: MKO/NSFCam.J... [DONE]
Adding filter: MKO/NSFCam.H... [DONE]
Adding filter: MKO/NSFCam.K... [DONE]
Adding filter: Keck/NIRC2.Lp... [DONE]
Adding filter: Keck/NIRC2.Ms... [DONE]
Adding object: 51 Eri b... [DONE]
Adding filter: Subaru/CIAO.z... [DONE]
Adding filter: Paranal/SPHERE.IRDIS_B_J... [DONE]
Adding filter: Keck/NIRC2.H... [DONE]
Adding filter: Keck/NIRC2.Ks... [DONE]
Adding object: HR 8799 b... [DONE]
Adding object: HR 8799 c... [DONE]
Adding object: HR 8799 d... [DONE]
Adding object: HR 8799 e... [DONE]
Adding filter: Gemini/GPI.H... [DONE]
Adding filter: Gemini/GPI.K1... [DONE]
Adding object: HD 95086 b... [DONE]
Adding object: PDS 70 b... [DONE]
Adding object: PDS 70 c... [DONE]
Adding filter: HST/NICMOS1.F090M... [DONE]
Adding filter: HST/NICMOS1.F110M... [DONE]
Adding filter: HST/NICMOS1.F145M... [DONE]
Adding filter: HST/NICMOS1.F160W... [DONE]
Adding object: 2M1207 b... [DONE]
Adding object: AB Pic B... [DONE]
Adding filter: Paranal/SPHERE.IRDIS_B_H... [DONE]
Adding object: HD 206893 B... [DONE]
Adding filter: HST/WFPC2.f606w... [DONE]
Adding filter: HST/WFPC2.f814w... [DONE]
Adding filter: HST/NICMOS2.F171M... [DONE]
Adding filter: HST/NICMOS2.F190N... [DONE]
Adding filter: HST/NICMOS2.F215N... [DONE]
Adding filter: Subaru/CIAO.CH4s... [DONE]
Adding filter: Subaru/CIAO.K... [DONE]
Adding filter: Subaru/CIAO.Lp... [DONE]
Adding object: GQ Lup B... [DONE]
Adding filter: Paranal/SPHERE.ZIMPOL_R_PRIM... [DONE]
Adding filter: Paranal/SPHERE.ZIMPOL_I_PRIM... [DONE]
Adding filter: Gemini/NIRI.H2S1v2-1-G0220... [DONE]
Adding object: PZ Tel B... [DONE]
Adding filter: Subaru/CIAO.J... [DONE]
Adding filter: Subaru/CIAO.H... [DONE]
Adding filter: Subaru/CIAO.Ks... [DONE]
Adding filter: Keck/NIRC2.NB_4.05...Adding filter: LBT/LMIRCam.M_77K... [DONE]
Adding object: kappa And b... [DONE]
Adding filter: Keck/NIRC2.J...
/Users/tomasstolker/applications/species/species/data/database.py:413: UserWarning: Filter 'Keck/NIRC2.NB_4.05' is not available on the SVO Filter Profile Service so a flux calibration can not be done. Please add the filter manually with the 'add_filter' function. For now, only the 'Keck/NIRC2.NB_4.05' magnitude of 'kappa And b' is stored.
  warnings.warn(f'Filter \'{item}\' is not available on the SVO Filter Profile '
 [DONE]
Adding filter: Keck/NIRC2.NB_4.05...Adding object: ROXs 42 Bb... [DONE]
Adding filter: Paranal/SPHERE.IRDIS_D_Y23_2... [DONE]
Adding filter: Paranal/SPHERE.IRDIS_D_Y23_3...
/Users/tomasstolker/applications/species/species/data/database.py:413: UserWarning: Filter 'Keck/NIRC2.NB_4.05' is not available on the SVO Filter Profile Service so a flux calibration can not be done. Please add the filter manually with the 'add_filter' function. For now, only the 'Keck/NIRC2.NB_4.05' magnitude of 'ROXs 42 Bb' is stored.
  warnings.warn(f'Filter \'{item}\' is not available on the SVO Filter Profile '
 [DONE]
Adding filter: Paranal/SPHERE.IRDIS_D_J23_3... [DONE]
Adding filter: Subaru/IRCS.Lp... [DONE]
Adding object: GJ 504 b... [DONE]
Adding filter: Gemini/GMOS-S.z... [DONE]
Adding filter: CFHT/Wircam.Y... [DONE]
Adding filter: CFHT/Wircam.J... [DONE]
Adding filter: CFHT/Wircam.H... [DONE]
Adding filter: CFHT/Wircam.Ks... [DONE]
Adding filter: WISE/WISE.W1... [DONE]
Adding filter: WISE/WISE.W2... [DONE]
Adding object: GU Psc b... [DONE]
Adding object: 2M0103 ABb... [DONE]
Adding filter: Gemini/NIRI.J-G0202w... [DONE]
Adding filter: Gemini/NIRI.H-G0203w... [DONE]
Adding filter: Gemini/NIRI.K-G0204w... [DONE]
Adding filter: Gemini/NIRI.Lprime-G0207w... [DONE]
Adding object: 1RXS 1609 B... [DONE]
Adding filter: MKO/NSFCam.Kp... [DONE]
Adding filter: MKO/NSFCam.Lp... [DONE]
Adding object: GSC 06214 B... [DONE]
Adding object: HD 72946 B... [DONE]

The spectra from the SpeX Prism Spectral Library are downloaded and added to the database. For each spectrum, the SIMBAD Astronomical Database is queried for the SIMBAD name and parallax of the object. If the parallax is not available then several VizieR cataloges with data of brown dwarfs are queried (see get_distance). A NaN value is stored for the distance if the parallax is not found. Therefore, these objects are not used in the color-magnitude diagram.

[6]:
database.add_spectrum('spex')
Downloading SpeX Prism Spectral Library... [DONE]
Adding filter: 2MASS/2MASS.H... [DONE]
Adding SpeX Prism Spectral Library... 2MASS J13272391+0946446
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J13184794+1736117 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
Adding SpeX Prism Spectral Library... 2MASS J15141384+1201451
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J21315444-0119374 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J09293364+3429527 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J14192618+5919047 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
Adding SpeX Prism Spectral Library... 2MASS J23174712-4838501
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J04062677-3812102 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J03280716+3022432 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
Adding SpeX Prism Spectral Library... 2MASS J04574903+3015195
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J04574903+3015195 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
Adding SpeX Prism Spectral Library... 2MASS J17561080+2815238
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J01414839-1601196 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
Adding SpeX Prism Spectral Library... 2MASS J16403197+1231068
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J12425052+2357231 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J03422594+3148496 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
Adding SpeX Prism Spectral Library... 2MASS J16382073+1327354
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J18131803+5101246 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J16382073+1327354 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J05460407-0003228 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
Adding SpeX Prism Spectral Library... 2MASS J12341814+0008359
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J01151621+3130061 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
Adding SpeX Prism Spectral Library... 2MASS J19495702+6222440
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J19495702+6222440 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
/Users/tomasstolker/.pyenv/versions/3.6.0/envs/general3.6/lib/python3.6/site-packages/astroquery/simbad/core.py:138: UserWarning: Warning: The script line number 3 raised an error (recorded in the `errors` attribute of the result table): Identifier not found in the database : 2MASS J14162394+1348363
  (error.line, error.msg))
Adding SpeX Prism Spectral Library... ULAS J141623.94+134836.3
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J14162394+1348363 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
Adding SpeX Prism Spectral Library... SDSS J074201.41+205520.5
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J03023398-1028223 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J13452562+5216337 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
Adding SpeX Prism Spectral Library... 2MASS J11145133-2618235
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J11181292-0856106 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J04382218+2553503 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
Adding SpeX Prism Spectral Library... SDSS J102109.69-030420.1
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J00150206+2959323 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
Adding SpeX Prism Spectral Library... 2MASS J23343177-1509294
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J01340281+0508125 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
Adding SpeX Prism Spectral Library... 2MASS J13571237+1428398
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J21555848+2345307 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
Adding SpeX Prism Spectral Library... 2MASS J12373919+6526148
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J15575011-2952431 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
Adding SpeX Prism Spectral Library... SSSPM 0829-1309
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J01191207+2403317 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
Adding SpeX Prism Spectral Library... 2MASS J23515044-2537367
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J18282794+1453337 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J02425693+2123204 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
Adding SpeX Prism Spectral Library... 2MASSW J1146345+223053
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J03431581+3210455 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J10595185+3042059 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
Adding SpeX Prism Spectral Library... 2MASS J05314149+6856293
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J12474944-1117551 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
Adding SpeX Prism Spectral Library... 2MASS J21513979+3402444
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J02055138-0759253 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J21513979+3402444 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
Adding SpeX Prism Spectral Library... LP 508-14
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J12373441+3028596 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
Adding SpeX Prism Spectral Library... 2MASS J15200224-4422419A
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J19163888-3700026 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
Adding SpeX Prism Spectral Library... 2MASS J00412179+3547133
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J01472702+4731142 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
Adding SpeX Prism Spectral Library... 2MASS J00115060-1523450
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J13023811+5650212 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
Adding SpeX Prism Spectral Library... SDSS J000250.98+245413.8
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J17451618-2903156 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J00025097+2454141 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J21210987+6557255 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
Adding SpeX Prism Spectral Library... VB 8
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J11582077+0435014 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
Adding SpeX Prism Spectral Library... SDSS J154849.02+172235.4
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J20342948+6727398 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J19415458+6826021 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
Adding SpeX Prism Spectral Library... 2MASS J11463232+0203414
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J05363776+1000232 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
Adding SpeX Prism Spectral Library... 2MASS J14343616+2202463
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J05341594-0631397 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J14343616+2202463 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
Adding SpeX Prism Spectral Library... 2MASP J0345432+254023
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J00360925+2413434 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
Adding SpeX Prism Spectral Library... 2MASS J09384022-2748184
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J15461461+4932114 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
Adding SpeX Prism Spectral Library... CFHT 3
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J03001631+2130205 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
Adding SpeX Prism Spectral Library... KPNO 12
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J04190126+2802487 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
Adding SpeX Prism Spectral Library... HN Peg B
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J10315064+3349595 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
Adding SpeX Prism Spectral Library... 2MASS J02271036-1624479
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J01481478+1202447 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J04394748+2601407 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
Adding SpeX Prism Spectral Library... DENIS J124514.1-442907
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J04480182-0557254 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
/Users/tomasstolker/applications/species/species/util/query_util.py:306: UserWarning: No parallax was found for 2MASS J22274034+1753215 so storing a NaN value.
  warnings.warn(f'No parallax was found for {target} so storing a NaN value.')
Adding SpeX Prism Spectral Library... [DONE]

The AMES-Cond en AMES-Dusty model spectra are also downloaded and included.

[7]:
database.add_model(model='ames-cond',
                   wavel_range=(0.5, 10.),
                   spec_res=1000.,
                   teff_range=(100., 4000.))
Downloading AMES-Cond model spectra (823 MB)... [DONE]
Unpacking AMES-Cond model spectra (823 MB)... [DONE]
Adding AMES-Cond model spectra... [DONE]
[8]:
database.add_model(model='ames-dusty',
                   wavel_range=(0.5, 10.),
                   spec_res=1000.,
                   teff_range=(100., 4000.))
Downloading AMES-Dusty model spectra [Fe/H]=0.0 (106 MB)... [DONE]
Unpacking AMES-Dusty model spectra [Fe/H]=0.0 (106 MB)... [DONE]
Adding AMES-Dusty model spectra... lte10-3.5-0.0.AMES-dusty.7.gz
/Users/tomasstolker/applications/species/species/data/ames_dusty.py:145: UserWarning: The wavelength range (0.50-10.00 micron) should fall within the range of the original wavelength sampling (1.62-971.00 micron). Storing zeros for the flux of Teff=900.0 and log(g)=6.0, which will be corrected by the 'write_data' function afterwards.
  warnings.warn(f'The wavelength range ({wavelength[0]:.2f}-{wavelength[-1]:.2f}'
Adding AMES-Dusty model spectra... lte13-3.5-0.0.AMES-dusty.7.gz
/Users/tomasstolker/applications/species/species/data/ames_dusty.py:145: UserWarning: The wavelength range (0.50-10.00 micron) should fall within the range of the original wavelength sampling (3.39-971.00 micron). Storing zeros for the flux of Teff=1200.0 and log(g)=5.5, which will be corrected by the 'write_data' function afterwards.
  warnings.warn(f'The wavelength range ({wavelength[0]:.2f}-{wavelength[-1]:.2f}'
Adding AMES-Dusty model spectra... lte22-4.0-0.0.AMES-dusty.7.gz
/Users/tomasstolker/applications/species/species/data/ames_dusty.py:145: UserWarning: The wavelength range (0.50-10.00 micron) should fall within the range of the original wavelength sampling (0.01-3.37 micron). Storing zeros for the flux of Teff=2200.0 and log(g)=3.5, which will be corrected by the 'write_data' function afterwards.
  warnings.warn(f'The wavelength range ({wavelength[0]:.2f}-{wavelength[-1]:.2f}'
Adding AMES-Dusty model spectra... [DONE]
/Users/tomasstolker/applications/species/species/util/data_util.py:277: UserWarning: Interpolation is not possible at the edge of the parameter grid. A NaN value is stored for Teff = 4000.0 K.
  warnings.warn(f'Interpolation is not possible at the edge of the '

The AMES-Cond and AMES-Dusty isochones are downloaded.

[9]:
urllib.request.urlretrieve('https://phoenix.ens-lyon.fr/Grids/AMES-Cond/ISOCHRONES/model.AMES-Cond-2000.M-0.0.NaCo.Vega',
                           'data/model.AMES-Cond-2000.M-0.0.NaCo.Vega')
[9]:
('data/model.AMES-Cond-2000.M-0.0.NaCo.Vega',
 <http.client.HTTPMessage at 0x12c64d550>)
[10]:
urllib.request.urlretrieve('https://phoenix.ens-lyon.fr/Grids/AMES-Dusty/ISOCHRONES/model.AMES-dusty.M-0.0.NaCo.Vega',
                           'data/model.AMES-dusty.M-0.0.NaCo.Vega')
[10]:
('data/model.AMES-dusty.M-0.0.NaCo.Vega',
 <http.client.HTTPMessage at 0x12c149630>)

And added to the database.

[11]:
database.add_isochrones(filename='data/model.AMES-Cond-2000.M-0.0.NaCo.Vega',
                        tag='iso_ames-cond')
Adding isochrones: iso_ames-cond... [DONE]
[12]:
database.add_isochrones(filename='data/model.AMES-dusty.M-0.0.NaCo.Vega',
                        tag='iso_ames-dusty')
Adding isochrones: iso_ames-dusty... [DONE]

Synthetic colors and magnitudes

For the narrowband filters of SPHERE, the synthetic colors and magnitudes are computed from the SpeX spectra. An object of ReadColorMagnitude is initiated.

[13]:
read_color = species.ReadColorMagnitude(library='spex',
                                        filters_color=('Paranal/SPHERE.IRDIS_D_H23_2', 'Paranal/SPHERE.IRDIS_D_H23_3'),
                                        filter_mag='Paranal/SPHERE.IRDIS_D_H23_2')

All spectra are used and the colors and magnitudes are stored in a ColorMagObject.

[14]:
colorbox = read_color.get_color_magnitude(object_type=None)

Next, the isochrone data is selected with the functionalities of ReadIsochrone.

[15]:
read_iso_cond = species.ReadIsochrone(tag='iso_ames-cond')
read_iso_dusty = species.ReadIsochrone(tag='iso_ames-dusty')

The atmospheric model for each of the isochrones is chosen together with an age and masses. The get_color_magnitude function will return a ColorMagBox object.

[16]:
modelcolor1 = read_iso_cond.get_color_magnitude(age=age,
                                                masses=masses,
                                                model='ames-cond',
                                                filters_color=('Paranal/SPHERE.IRDIS_D_H23_2', 'Paranal/SPHERE.IRDIS_D_H23_3'),
                                                filter_mag='Paranal/SPHERE.IRDIS_D_H23_2')
[17]:
modelcolor2 = read_iso_dusty.get_color_magnitude(age=age,
                                                 masses=masses,
                                                 model='ames-dusty',
                                                 filters_color=('Paranal/SPHERE.IRDIS_D_H23_2', 'Paranal/SPHERE.IRDIS_D_H23_3'),
                                                 filter_mag='Paranal/SPHERE.IRDIS_D_H23_2')

Selecting directly imaged planets

The directly imaged planets and brown dwarfs are selected by their database tag. The filters for the colors and magnitudes have to be present in the database.

[18]:
objects = [('HIP 65426 b', 'Paranal/SPHERE.IRDIS_D_H23_2', 'Paranal/SPHERE.IRDIS_D_H23_3', 'Paranal/SPHERE.IRDIS_D_H23_2'),
           ('HR 8799 b', 'Paranal/SPHERE.IRDIS_D_H23_2', 'Paranal/SPHERE.IRDIS_D_H23_3', 'Paranal/SPHERE.IRDIS_D_H23_2'),
           ('HR 8799 d', 'Paranal/SPHERE.IRDIS_D_H23_2', 'Paranal/SPHERE.IRDIS_D_H23_3', 'Paranal/SPHERE.IRDIS_D_H23_2'),
           ('PZ Tel B', 'Paranal/SPHERE.IRDIS_D_H23_2', 'Paranal/SPHERE.IRDIS_D_H23_3', 'Paranal/SPHERE.IRDIS_D_H23_2')]

Plotting a color-magnitude diagram

The color-magnitude diagram is now created by providing the ColorMagBox objects, which will be interpreted by plot_color_magnitude.

[19]:
species.plot_color_magnitude(boxes=[colorbox, modelcolor1, modelcolor2],
                             objects=objects,
                             mass_labels=[3., 5., 10., 20., 50., 100., 200., 500.],
                             companion_labels=True,
                             field_range=('late M', 'late T'),
                             label_x='H2 - H3 [mag]',
                             label_y='M$_\mathregular{H2}$ [mag]',
                             xlim=(-2.7, 1.8),
                             ylim=(17.3, 4),
                             offset=(-0.07, -0.1),
                             legend=(0.07, 0.82),
                             output='color_mag.png')
Plotting color-magnitude diagram: color_mag.png... [DONE]

Let’s have a look at the plot. As expected, towards later type objects, the colors becomes blue due to CH4 absorption across the H3 filter.

[20]:
from IPython.display import Image
Image('color_mag.png')
[20]:
../_images/tutorials_color_magnitude_narrowband_41_0.png