% file: rg_setup.i % % Setup and fill structures for defining regions in spectra % and "bumps" to be fit; and related things... % % Also define "list_rg", "fit_rg", "plot_rg", "list_bp" as simple evalfiles % of rg_list.i rg_fit.i rg_plot.i and bp_list.i % % - - - % Define a Region List structure array % typedef struct { id, lo, hi, desc } Region_Type; % variable rgl = Region_Type [25]; % % - - - % - - - % Fill the Regions by hand here... variable rgid, rglo, rghi, rgdesc, rgsel, rgbprange; variable ii; rglo=[1.0, 24.0,18.0, 21.40, 11.3,13.2, 9.7, 8.9, 7.5, 8.1, 5.9, 6.4, 14.5, 16.5, 6.0, 8.0]; rghi=[5.5, 26.0,20.0, 22.30, 13.0,14.5, 10.7, 9.6, 8.1, 8.7, 6.4, 7.0, 16.5, 17.5, 23.0, 20.0]; rgdesc=["Hi-Z Elements", "N VI 24A","O Lyman Alpha","O triplet", "Ne X and Fe XVII", "Ne triplet", "Ne Lyman Beta", "Mg Triplet", "Mg XI", "Mg Lyman Alpha", "Si La", "Si Triplet", "14.5 - 16.5 A", "16.5 - 17.5 A", "6 - 23 A", "8 - 20 A"]; % Set id to zero for all... ii=0; while (ii < length(rgl)) { rgl[ii].id = 0; rgl[ii].lo = 0.0; rgl[ii].hi = 0.0; rgl[ii].desc = ""; ii=ii+1; } % fill the valid info % in sorted order rgsel = array_sort(rglo); ii=0; while (ii < length(rglo)) { rgl[ii].id = ii+1; rgl[ii].lo = rglo[rgsel[ii]]; rgl[ii].hi = rghi[rgsel[ii]]; rgl[ii].desc = rgdesc[rgsel[ii]]; ii=ii+1; } % point to region 1 rgsel = 1; % and set nominal bump range rgbprange = 10.0*0.01; % - - - % - - - % Define a Bump List structure array % % There is a line for each to-be-studied line in the spectrum. % % l = lambda; a = area; w = width (FWHM); chi = reduced chi-squared typedef struct { id, ignore, lam, grp, desc, lfit, lclo, lchi, afit, aclo, achi, wfit, wclo, wchi, cfit, cclo, cchi, chifit, rgfit } Bump_Type; % variable bpl = Bump_Type [50]; % % - - - % - - - % Fill the Bumps by hand here... variable bplam, bpgrp, bpdesc, bpig; variable bpsel; bplam = [24.7794, 1.89672e+01, 2.16015e+01, 2.18036e+01, 2.20977e+01, 1.60056e+01, 18.6270, 12.1322,13.4473,13.5531,13.6990, 10.2386, 11.5600, 9.7081, 8.41930,9.16875,9.23121,9.31434,7.10580, 7.8500, 6.18050,6.64795,6.68819,6.74029, 1.22661e+01, 1.50140e+01, 1.52610e+01, 1.67800e+01, 1.70510e+01, 1.70960e+01, 14.2100,15.6230,16.0730, 17.6179, 13.5200, 12.8200, 12.8349, 12.8542, 1.77810, 1.85040, 1.85541, 1.86819 ]; bpgrp = [g_NLyAlpha, g_OLyAlpha, g_OHeTripR, g_OHeTripI, g_OHeTripF, g_OLyBeta, g_OVII_18p6A, g_NeLyAlpha, g_NeHeTripR, g_NeHeTripI, g_NeHeTripF, g_NeLyBeta, g_NeIX_11p5A, g_NeX_9p7A, g_MgLyAlpha, g_MgHeTripR, g_MgHeTripI, g_MgHeTripF, g_MgLyBeta, g_MgXI_7p8A, g_SiLyAlpha, g_SiHeTripR, g_SiHeTripI, g_SiHeTripF, g_FeXVII_12p2A, g_FeXVII_15A, g_FeXVII_15p2A, g_FeXVII_16p7A, g_FeXVII_17A, g_FeXVII_17p1A, g_FeXVIII_14p2A, g_FeXVIII_15p6A, g_FeXVIII_16A, g_FeXVIII_17p6A, g_FeXIX_13p5A, g_FeXX_12p82A, g_FeXX_12p83A, g_FeXX_12p85A, g_FeLyAlpha, g_FeHeTripR, g_FeHeTripI, g_FeHeTripF ]; bpdesc = ["NLyAlpha", "OLyAlpha","OHeTripR","OHeTripI","OHeTripF","OLyBeta", "O_VII_18p6A", "NeLyAlpha","NeHeTripR","NeHeTripI","NeHeTripF","NeLyBeta", "NeIX_11p5A", "NeX_9p7A", "MgLyAlpha","MgHeTripR","MgHeTripI","MgHeTripF","MgLyBeta", "MgXI_7p8A", "SiLyAlpha","SiHeTripR","SiHeTripI","SiHeTripF", "FeXVII_12p2A", "FeXVII_15A", "FeXVII_15p2A", "FeXVII_16p7A", "FeXVII_17A","FeXVII_17p1A", "FeXVIII_14p2A", "FeXVIII_15p6A", "FeXVIII_16A", "FeXVIII_17p6A", "FeXIX_13p5A", "FeXX_12p82A", "FeXX_12p83A", "FeXX_12p85A", "FeLyAlpha", "FeHeTripR","FeHeTripI","FeHeTripF" ]; bpig = [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0,1,1 ]; % Set id to zero for all... ii=0; while (ii < length(bpl)) { bpl[ii].id = 0; bpl[ii].ignore = 0; bpl[ii].lam = 0.0; bpl[ii].grp = 0; bpl[ii].desc = ""; bpl[ii].lfit = 0.0; bpl[ii].lclo = 0.0; bpl[ii].lchi = 0.0; bpl[ii].afit = 0.0; bpl[ii].aclo = 0.0; bpl[ii].achi = 0.0; bpl[ii].wfit = 0.0; bpl[ii].wclo = 0.0; bpl[ii].cfit = 0.0; bpl[ii].cclo = 0.0; bpl[ii].cchi = 0.0; bpl[ii].wchi = 0.0; bpl[ii].chifit = 0.0; bpl[ii].rgfit = ""; ii=ii+1; } % fill the valid info in wavelength sorted order: % use bpsel for sort order: bpsel = array_sort(bplam); ii=0; while (ii < length(bplam)) { bpl[ii].id = ii+1; bpl[ii].ignore = bpig[bpsel[ii]]; bpl[ii].lam = bplam[bpsel[ii]]; bpl[ii].grp = bpgrp[bpsel[ii]]; bpl[ii].desc = bpdesc[bpsel[ii]]; ii=ii+1; } % point to bump 1 bpsel = 1; % - - - % - - - % and make little wrappers for some routines: % rg_list.i, bp_list.i, rg_fit.i, rg_plot.i % define list_rg() { ()=evalfile("rg_list.i"); } define list_bp() { ()=evalfile("bp_list.i"); } define fit_rg() { ()=evalfile("rg_fit.i"); } define plot_rg() { ()=evalfile("rg_plot.i"); } % - - - % and compile the bp_*_fits routines () = evalfile("bp_write_fits.i"); () = evalfile("bp_read_fits.i");