; docformat = 'rst' ;+ ; ; This is an example of fitting an astronomical spectrum and should ; confirm that the AmesPAHdbIDLSuite has been correctly installed. The ; source code is annotated to guide users and developers in the inner ; workings of the suite. ; ; Updated versions of the NASA Ames PAH IR Spectroscopic Database and ; more information can be found at: `www.astrochemistry.org/pahdb <https://www.astrochemistry.org/pahdb>`. ; ; :Examples: ; Call the procedure directly:: ; ; IDL> fit_a_spectrum ; ; :Author: ; Dr. Christiaan Boersma ; ; :Copyright: ; BSD licensed ; ; :History: ; Changes:: ; ; 05-03-2022 ; Add plotting size distribution. Christiaan Boersma. ; 08-19-2019 ; Documentation added. Christiaan Boersma. ;- ;+ ; Procedure demonstrating fitting an astronomical spectrum using the ; AmesPAHdbIDLSuite. ; ; :Categories: ; Example ;- PRO FIT_A_SPECTRUM COMPILE_OPT IDL2 ; the Spitzer IRS/SL 10 - 15 micron spectrum of NGC7023 file = 'ngc7023.dat' ; read observations into AmesPAHdbIDLSuite_Observation observation = OBJ_NEW('AmesPAHdbIDLSuite_Observation', $ file, $ Units=AmesPAHdbIDLSuite_CREATE_OBSERVATION_UNITS_S(AUNIT=3, OUNIT=1)) ; turn wavelength into frequency observation->AbscissaUnitsTo,1 ; rebin to uniform frequency grid ;observation->Rebin,5D,/Uniform ; read in the default database defined by the environement variable ; !AMESPAHDEFAULTDB or the system variable AMESPAHDEFAULTDB. use ; the keyword FILENAME if these have not been set pahdb = OBJ_NEW('AmesPAHdbIDLSuite') ; retrieve the transitions from the database for a subset of PAHs transitions = pahdb->getTransitionsByUID( $ pahdb->Search("magnesium=0 oxygen=0 iron=0 silicium=0 chx=0 ch2=0 c>20 h>0")) ; shift data 15 wavenumber to the red transitions->Shift,-15D ; convolve the transitions into a spectrum spectrum = transitions->Convolve(Grid=observation->getGrid(), $ FWHM=15D, $ /Gaussian) ; fit the spectrum fit = spectrum->Fit(observation) ; clean up spectrum obj_destroy,[spectrum] ; display fit and breakdown fit->Plot,/Wavelength key = '' IF !D.NAME EQ 'X' THEN READ,key,PROMPT="Press <enter> to continue..." fit->Plot,/Wavelength,/Residual IF !D.NAME EQ 'X' THEN READ,key,PROMPT="Press <enter> to continue..." fit->Plot,/Wavelength,/Size IF !D.NAME EQ 'X' THEN READ,key,PROMPT="Press <enter> to continue..." fit->Plot,/Wavelength,/Charge IF !D.NAME EQ 'X' THEN READ,key,PROMPT="Press <enter> to continue..." fit->Plot,/Wavelength,/Composition IF !D.NAME EQ 'X' THEN READ,key,PROMPT="Press <enter> to continue..." fit->Plot,/DistributionSize,NBins=10L,Min=20,Max=200 IF !D.NAME EQ 'X' THEN READ,key,PROMPT="Press <enter> to continue..." ; predict 3 - 20 um spectrum transitions->Intersect, $ fit->getUIDs() xrange = 1D4 / [20D, 3D] spectrum = transitions->Convolve(FWHM=15D, $ /Gaussian, $ XRange=xrange) coadded = spectrum->Coadd(Weights=fit->getWeights()) coadded->Plot ; clean up objects OBJ_DESTROY,[coadded, spectrum, fit, transitions, pahdb, observation] END