It also has two different datasets:
flux, as defined by the native wavelength set, which is constructed when combining the source spectrum and the bandpass.
binflux, as defined by the binned wavelength set.
Binned wavelength set uses the optimal binning for the detector, if applicable.
When optimal binning is not found (e.g., a non-HST filter system), it uses the
native wavelength set instead (see Reference Data). For IRAF STSDAS
SYNPHOT users, this is the same behavior as the
binwave can be explicitly overwritten using the
keyword at initialization. Note that the given array must contain the central
wavelength values of the bins.
binwave is established,
binflux is computed by integrating the
native flux over the width of each bin. Due to the nature of binned data,
binflux cannot be interpolated when sampled. To accurately represent binned
dataset in a plot, you should plot it as a histogram, with each
value at the mid-point of the horizontal step (see
In contrast, the native dataset is considered to be samples of a continuous function. Thus, it may be interpolated linearly and plotted without using a histogram.
An observation can be sampled using its
sample() method. By default, it samples
the binned dataset and does not allow interpolation; i.e., you must provide
a wavelength value that exactly match that in
binwave. It will sample the
native dataset and allows interpolation if the
binned=False option is used.
For for information, see Sampling.
The following operations are disabled because they do not make sense in the context of an observation, in which a photon has passed through the telescope optics:
- Some multiplication (see below)
When multiplication is performed, a new observation is created using its original source spectrum and a new bandpass from multiplying its original bandpass with the given bandpass or scalar number. An observation cannot be multiplied with another observation, source spectrum, or extinction curve.
Like a source spectrum, an observation can be written to a FITS table using its
writefits() method (also see
File I/O), which in this case, takes an additional
to indicate which dataset to write.
countrate() is probably the most often
used method for an observation. It computes the total counts of a source
spectrum, integrated over the passband defined by a
HST observing mode. For calculations, it
uses an optimal wavelength set (if available), which is constructed so that
one wavelength bin corresponds to one detector pixel.
It has two unique features below that are helpful when simulating a HST observation. Therefore, it is ideally suited for predicting exposure times (e.g., using HST ETC) when writing HST proposals:
- The input parameters were originally structured to mimic what is contained in the exposure logsheets found in HST observing proposals in Astronomer’s Proposal Tool (APT).
- For the spectroscopic instruments, it will automatically search for and use a wavelength table that is appropriate for the selected instrumental dispersion mode.
sample() is another useful method
for an observation. It allows the computation of the number of counts at a
particular reference wavelength (in Angstroms) for either binned or native
The example below computes the number of counts for Vega at 10000 Angstroms, as observed by HST/WFC3 IR detector using F105W filter:
>>> refwave = 10000 >>> obs = S.Observation(S.Vega, S.ObsBandpass('wfc3,ir,f105w')) >>> obs.sample(refwave) # Binned dataset 6427997.452742151 >>> obs.sample(refwave, binned=False) # Native dataset 32194062.511316653
>>> obs(refwave) 142.0874566775498
Simulate an observation of a 5000 K blackbody through the HST/ACS WFC1 F555W bandpass, and plot its binned dataset:
>>> obs = S.Observation(S.BlackBody(5000), S.ObsBandpass('acs,wfc1,f555w')) >>> plt.plot(obs.binwave, obs.binflux, drawstyle='steps-mid') >>> plt.xlim(4000, 7000) >>> plt.xlabel(obs.waveunits) >>> plt.ylabel(obs.fluxunits) >>> plt.title(obs.name)
Calculate the count rate of this observation in the unit of counts/s over the HST collecting area (i.e., the primary mirror) that is defined in :
>>> obs.primary_area 45238.93416 >>> obs.countrate() 10080.633086603169
Calculate the effective stimulus in
>>> obs.effstim('flam') 1.9951166916464598e-15
Calculate the effective wavelength in Angstroms:
>>> obs.efflam() 5406.9723492971034
Convert the flux unit to counts:
Plot observation data in both native and binned wavelength sets. Note that counts per wavelength bin depends on the size of the bin because it is not a flux density:
>>> plt.plot(obs.wave, obs.flux, marker='x', label='native') >>> plt.plot(obs.binwave, obs.binflux, drawstyle='steps-mid', label='binned') >>> plt.xlim(6010, 6040) >>> plt.ylim(2, 6) >>> plt.xlabel(obs.waveunits) >>> plt.ylabel(obs.fluxunits) >>> plt.title(obs.name) >>> plt.legend(loc='best')
Write the observation out to two FITS tables, one with native dataset and the other binned:
>>> obs.writefits('myobs_native.fits', binned=False) >>> obs.writefits('myobs_binned.fits')