-
Notifications
You must be signed in to change notification settings - Fork 10
/
desi.yaml
384 lines (377 loc) · 17 KB
/
desi.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
name: DESI QuickSim
# The base path is pre-pended to all non-absolute path values below.
# {...} will be expanded using environment variables.
base_path: '{DESIMODEL}/data'
# Be verbose during the simulation?
verbose: no
# Specify the wavelength grid to use for simulation. For comparison, the
# table below summarizes the ranges of non-zero throughput in each camera,
# wavelengths that can disperse into CCDs (with a 5-sigma cut), and the
# extents of each CCD's active pixels covered by all fibers (as defined by
# cameras.*.ccd.table below). Note that individual fibers will generally have
# slightly more coverage, so we are simulating the worst-case coverage of
# all fibers.
#
# Range b(min) b(max) r(min) r(max) z(min) z(max)
# Angstrom Angstrom Angstrom Angstrom Angstrom Angstrom
# ---------- -------- -------- -------- -------- -------- --------
# Throughput 3533.000 5998.000 5564.000 7805.000 7360.000 9913.000
# Simulation 3550.000 ................................... 9850.000
# Response 3565.400 5952.600 5621.700 7744.300 7431.000 9838.000
# CCD 3569.000 5949.000 5625.000 7741.000 7435.000 9834.000
wavelength_grid:
unit: Angstrom
min: 3550.0
max: 9850.0
step: 0.1
# The atmosphere configuration is interpreted and validated by the
# specsim.atmosphere module.
atmosphere:
# Sky emission surface brightness.
sky:
table:
# The .dat extension is not automatically recognized as ascii.
format: ascii
columns:
wavelength: { index: 0, unit: Angstrom }
surface_brightness:
index: 1
# Note the factor of 1e-17 in the units!
unit: 1e-17 erg / (Angstrom arcsec2 cm2 s)
paths:
# Each path defines a possible condition.
dark: spectra/spec-sky.dat
grey: spectra/spec-sky-grey.dat
bright: spectra/spec-sky-bright.dat
# Specify the current condition.
condition: dark
# Atmospheric seeing (only used when instrument.fiberloss.method = galsim)
seeing:
# The seeing is assumed to scale with wavelength as
# fwhm(wlen) = fwhm_ref * (wlen / wlen_ref) ** -0.2
fwhm_ref: 1.1 arcsec
wlen_ref: 6355 Angstrom
# The seeing PSF is modeled as a Moffat profile.
moffat_beta: 3.5
# Surface brightness of scattered moonlight.
moon:
# Un-normalized spectrum of scattered moonlight.
# We use the Wehrli 1985 extraterrestial solar spectrum here.
# Seee http://rredc.nrel.gov/solar/spectra/am0/ for details.
table:
columns:
wavelength: { index: 1, unit: Angstrom }
flux:
index: 2
# The actual units are W / (m2 micron) but we lie here
# (by a factor of 10) since the input normalization does
# not matter and old versions of speclite.filters do
# not interpret the actual units correctly.
unit: erg / (cm2 s Angstrom)
path: sky/solarspec.txt
format: ascii.basic
constants:
# Phase of the moon from 0 (full) to 1 (new).
moon_phase: 0.5
# Zenith angles of the moon. An angle > 90 (below the horizon)
# will zero the scattered moon contribution.
moon_zenith: 100 deg
# Separation angle between the observation and moon.
separation_angle: 60 deg
# Zenith extinction coefficients.
extinction:
table:
format: ascii
columns:
wavelength: { index: 0, unit: Angstrom }
extinction_coefficient: { index: 1 }
path: spectra/ZenithExtinction-KPNO.dat
# Should extinction be applied to the sky emission?
extinct_emission: yes
# Airmass to use when the pointing is not calculated from the source
# and observation parameters. The focal_x and focal_y parameters of
# source.location.constants must be set in order for the airmass
# specified here to be used.
airmass: 1.0
# The instrument configuration is interpreted and validated by the
# specsim.instrument module.
instrument:
# See DESI documents 334, 336, 347 for details.
name: DESI
constants:
# These values are copied from desimodel/data/desi.yaml
primary_mirror_diameter: 3.797 m
obscuration_diameter: 1.8 m
support_width: 0.025 m
fiber_diameter: 107.0 um
field_radius: 414.0 mm
plate_scale:
table:
path: focalplane/platescale.txt
format: ascii
columns:
radius: { index: 0, unit: mm }
radial_scale: { index: 6, unit: um/arcsec }
azimuthal_scale: { index: 7, unit: um/arcsec }
fiberloss:
# Method for calculating fiberloss fractions.
# Either galsim or table or fastsim.
method: fastsim
# Number of wavelengths where fiberloss should be calculated
# and interpolated. Ignored unless method is galsim.
num_wlen: 11
# Number of pixels used to subdivide the fiber diameter for
# numerical convolution and integration calculations with galsim.
num_pixels: 16
# Table of pre-tabulated fiberloss fractions vs wavelength for
# different source types. Ignored unless method is table.
table:
format: ascii
paths:
# Each path corresponds to a different source type.
qso: throughput/fiberloss-qso.dat
elg: throughput/fiberloss-elg.dat
lrg: throughput/fiberloss-lrg.dat
star: throughput/fiberloss-star.dat
sky: throughput/fiberloss-sky.dat
perfect: throughput/fiberloss-perfect.dat
columns:
wavelength: { index: 0, unit: Angstrom }
fiber_acceptance: { index: 1 }
# Fits file of precomputed galsim fiber acceptances.
# Ignored unless method is fastsim.
# The fits file is created with specsim/fitgalsim.py
# and used by specsim/fastfiberacceptance.py
# Comment out this line to disable the "fastsim" mode (e.g., if
# this file is not available or describes a different config).
fast_fiber_acceptance_path: throughput/galsim-fiber-acceptance.fits
blur:
# Read RMS blur values tabulated as a function of field angle and
# wavelength, and derived from ray tracing simulations. For details,
# see $DESIMODEL/doc/nb/DESI-0347_Throughput.ipynb.
path: throughput/DESI-0347_blur.ecsv
# The ECSV format is not auto-detected so we specify it explicitly.
format: ascii.ecsv
offset:
# Read radial centroid offsets tabulated as a function of field angle
# and wavelength, and derived from ray tracing simulations. For
# details, see $DESIMODEL/doc/nb/DESI-0347_Throughput.ipynb.
path: throughput/DESI-0347_offset.ecsv
# The ECSV format is not auto-detected so we specify it explicitly.
format: ascii.ecsv
#
# static/stable achromatic but correlated centroid offsets from a FITS file
# this is to emulate any systematic residual of the plate maker
# in particular the effect of the corrector lens
# polishing errors (see DESI-1071)
# DESI-0347_static_offset_*.fits is the worst case scenario where
# we cannot correct for this during commissionning
# Uncomment any one of these lines to select a different random set.
# If all lines are commented out, this effect is ignored.
#static: throughput/DESI-0347_static_offset_1.fits
#static: throughput/DESI-0347_static_offset_2.fits
#static: throughput/DESI-0347_static_offset_3.fits
#
# random achromatic and uncorrelated offsets with 1D rms = sigma1d
# ( per axis, i.e. sqrt(mean(dx**2+dy**2))=sqrt(2)*sigma1d )
# this is to emulate an uncorrelated positionner, astrometric, ... errors
# see lateral error in DESI-347 which is the throughput budget spreadsheet
#
# in DESI-347-v11 the quadratic sum of all lateral error terms except
# 'Band-limited chromatic shift microns' (already included in radial centroid offsets)
# and 'FVC corrector optics figure error' (a static term)
# is 7.38 um = 5.22 * sqrt(2) um
sigma1d: 5.22 um
# Random offsets are generated independently for each fiber of each exposure,
# but reproducibly according to this seed.
seed: 123
cameras:
b:
constants:
# These values are copied from desimodel/data/desi.yaml
read_noise: 3.41 electron/pixel**2
# We treat "pixel" as a linear unit, so we need pixel**2 here.
dark_current: 2.0 electron/(hour pixel**2)
gain: 1.0 electron/adu
# Clip the resolution matrix at this number of sigmas.
num_sigmas_clip: 5
# Output pixels are used to report simulation results but are
# not the physical pixels. The output pixel size must be a
# multiple of wavelength_grid.step.
output_pixel_size: 0.5 Angstrom
ccd:
table:
path: specpsf/psf-quicksim.fits
hdu: QUICKSIM-B
extrapolated_value: 0.0
columns:
wavelength: { name: wavelength }
row_size:
name: angstroms_per_row
# The file uses Angstrom / row but "row" is not
# recognized by astropy.units so we replace it with
# the linear "pixel" unit.
unit: Angstrom / pixel
override_unit: yes
fwhm_resolution: { name: fwhm_wave }
neff_spatial: { name: neff_spatial }
throughput:
table:
path: throughput/thru-b.fits
hdu: THROUGHPUT
extrapolated_value: 0.0
columns:
wavelength: { name: wavelength, unit: Angstrom }
throughput: { name: throughput }
r:
constants:
# These values are copied from desimodel/data/desi.yaml
read_noise: 2.6 electron/pixel**2
# We treat "pixel" as a linear unit, so we need pixel**2 here.
dark_current: 2.4 electron/(hour pixel**2)
gain: 1.0 electron/adu
# Clip the resolution matrix at this number of sigmas.
num_sigmas_clip: 5
# Output pixels are used to report simulation results but are
# not the physical pixels. The output pixel size must be a
# multiple of wavelength_grid.step.
output_pixel_size: 0.5 Angstrom
ccd:
table:
path: specpsf/psf-quicksim.fits
hdu: QUICKSIM-R
extrapolated_value: 0.0
columns:
wavelength: { name: wavelength }
row_size:
name: angstroms_per_row
# The file uses Angstrom / row but "row" is not
# recognized by astropy.units so we replace it with
# the linear "pixel" unit.
unit: Angstrom / pixel
override_unit: yes
fwhm_resolution: { name: fwhm_wave }
neff_spatial: { name: neff_spatial }
throughput:
table:
path: throughput/thru-r.fits
hdu: THROUGHPUT
extrapolated_value: 0.0
columns:
wavelength: { name: wavelength, unit: Angstrom }
throughput: { name: throughput }
z:
constants:
# These values are copied from desimodel/data/desi.yaml
read_noise: 2.6 electron/pixel**2
# We treat "pixel" as a linear unit, so we need pixel**2 here.
dark_current: 2.4 electron/(hour pixel**2)
gain: 1.0 electron/adu
# Clip the resolution matrix at this number of sigmas.
num_sigmas_clip: 5
# Output pixels are used to report simulation results but are
# not the physical pixels. The output pixel size must be a
# multiple of wavelength_grid.step.
output_pixel_size: 0.5 Angstrom
ccd:
table:
path: specpsf/psf-quicksim.fits
hdu: QUICKSIM-Z
extrapolated_value: 0.0
columns:
wavelength: { name: wavelength }
row_size:
name: angstroms_per_row
# The file uses Angstrom / row but "row" is not
# recognized by astropy.units so we replace it with
# the linear "pixel" unit.
unit: Angstrom / pixel
override_unit: yes
fwhm_resolution: { name: fwhm_wave }
neff_spatial: { name: neff_spatial }
throughput:
table:
path: throughput/thru-z.fits
hdu: THROUGHPUT
extrapolated_value: 0.0
columns:
wavelength: { name: wavelength, unit: Angstrom }
throughput: { name: throughput }
# The source configuration is interpreted and validated by the
# specsim.source module.
source:
name: 22nd AB magnitude reference
# The type is only used when instrument.fiberloss.method is 'table'.
type: qso
table:
format: ascii
path: spectra/spec-ABmag22.0.dat
columns:
wavelength: { index: 0, unit: Angstrom }
flux:
index: 1
# Note the factor of 1e-17 in the units!
unit: 1e-17 erg / (Angstrom cm2 s)
# Transverse profile of the source on the sky, used to calculate the
# fiberloss fraction when instrument.fiberloss.method = galsim (but
# ignored otherwise).
profile:
# The sum of disk + bulge fractions must be <= 1. If it is < 1,
# the remainder is point-like, i.e., star or QSO.
disk_fraction: 0.0
bulge_fraction: 0.0
disk_shape:
half_light_radius: 0.8 arcsec
position_angle: 45 deg
minor_major_axis_ratio: 0.5
bulge_shape:
half_light_radius: 1.2 arcsec
position_angle: 60 deg
minor_major_axis_ratio: 0.8
# Location of the source on the sky. A source will not be visible if
# it lies out the observation field of view.
location:
# If focal-plane (x,y) coordinates are not specified, they will be
# calculated from the sky coordinates and observing conditions
# and the corresponding airmass will be used for the atmosphere model.
constants:
# Comment out these lines to have (x,y) and the airmass
# calculated automatically for this source and observation.
focal_x: -70.7 mm
focal_y: +70.7 mm
# Sky coordinates are optional (and ignored) when focal-plane (x,y)
# are specified.
sky: { coordinates: 0h 0d, frame: icrs }
# Set these parameters to apply a redshift transformation.
z_in:
z_out:
# Set these parameters to normalize in a specified filter.
filter_name:
ab_magnitude_out:
# The observation configuration is interpreted and validated by the
# specsim.observation module.
observation:
observatory: KPNO
constants:
exposure_time: 1000.0 s
# Atmospheric pressure at the telescope (not at sea level) used
# to calculate atmospheric refraction. Leave commented out to use a
# nominal value calculated for the observatory elevation.
#pressure: 79 kPa
# Air temperature at the telescope used to calculate atmospheric
# refraction (but only has a small effect).
temperature: 15 deg_C
# Relative humidity (0-1) at the telescope used to calculate atmospheric
# refraction (but only has a small effect).
relative_humidity: 0.
exposure_start:
timestamp:
when: 55000.5
format: mjd
# This optional parameter adjusts the timestamp by +/-12h to
# achieve the specified hour angle for the boresight (ra, dec).
#adjust_to_hour_angle: -0.5h
pointing:
sky:
coordinates: 0h 0d
frame: icrs