.. _ConfigReference:
=============================
Configuration File Parameters
=============================
This section describes all the options that can be set in the YAML-format configuration file.
.. _InputMaps:
Input Maps and Masks
====================
unfilteredMaps
^^^^^^^^^^^^^^
This is a list of dictionaries, each of which contains information about a sky map
at a particular observing frequency. All maps given in this list must have the same
dimensions and World Coordinate System. Units should be ΔT (μK) with respect to the
CMB. Each map dictionary must have the following keys:
:mapFileName (str):
The path to a FITS-format map.
:weightsFileName (str):
The path to a FITS-format inverse-variance map. This may be set to ``null`` if
necessary.
:obsFreqGHz (float):
The frequency of the map. For cluster searches, this should be the SZ-weighted
effective frequency of the passband corresponding to the given map - this value
is used to convert from ΔT (μK) to Compton y. For sources, this value is used
to convert source amplitudes from ΔT (μK) to flux density (Jy).
:units (str):
Map pixel intensity units. At present, only 'uK' is accepted, but in principle
**Nemo** could be extended to use maps in surface brightness units (MJy/sr), for
example.
:beamFileName (str):
Path to a text file containing the beam profile, in the format used by ACT.
The beam solid angle must be present in the header of this file, in order
for :ref:`nemoCommand` to be able to output source flux densities in Jy.
(e.g., the ACT beam profile files contain lines such as
``# solid angle = 188.17 +/- 4.84 nsr`` as part of the header).
There are some optional keys that may also be supplied:
:calibFactor (float):
If given, the map pixel values are multiplied by this number at the start of
processing. This can be used re-scale/re-calibrate the maps without modifying
the map files themselves.
*Example:*
.. code-block:: yaml
unfilteredMaps:
- {mapFileName: "maps/Jun2020/act_s08_s18_cmb_f150_daynight_map.fits",
weightsFileName: "maps/Jun2020/act_s08_s18_cmb_f150_daynight_ivar.fits",
obsFreqGHz: 149.6, units: 'uK',
beamFileName: "maps/Jun2020/beams/s16_pa2_f150_nohwp_night_beam_profile_jitter.txt"}
- {mapFileName: "maps/Jun2020/act_s08_s18_cmb_f090_daynight_map.fits",
weightsFileName: "maps/Jun2020/act_s08_s18_cmb_f090_daynight_ivar.fits",
obsFreqGHz: 97.8, units: 'uK',
beamFileName: "maps/Jun2020/beams/s16_pa3_f090_nohwp_night_beam_profile_jitter.txt"}
surveyMask
^^^^^^^^^^
This is the path to a FITS format image, with the same dimensions and pixelization
as the input map file names (see unfilteredMaps above), with values of 1 taken to
indicate valid area, and values of 0 taken to indicate areas that should be ignored.
Objects found within pixels with value 0 in this map will not be included in the
output catalogs produced by :ref:`nemoCommand`. Maps which are compressed using the
``PLIO_1`` method (as implemented by `astropy.io.fits `_)
are supported.
*Example:*
.. code-block:: yaml
surveyMask: "maps/Jun2020/AdvACTSurveyMask_v7_galLatCut_S18-dust-artifacts-extended-post10mJy.fits"
maskPointSourcesFromCatalog
^^^^^^^^^^^^^^^^^^^^^^^^^^^
This is a list, each element of which points to a file containing an object catalog
(FITS format is guaranteed to work, but in principle any format that the
`astropy.table `_ module
understands can be used). The catalog should contain object coordinates in decimal
degrees in columns named ``RADeg``, ``decDeg``, and either a column specifying the
masking radius in arcmin to use (``rArcmin``), or shape information columns
(as produced by running :ref:`nemoCommand` with ``measureShapes: True`` set).
*Example:*
.. code-block:: yaml
maskPointSourcesFromCatalog:
- "PSCatalog_rArcmin/PS_S18_f150_auto_rArcmin.fits"
- "customPSMask_S18/customPSCatalog_S18.fits"
noiseMaskCatalog
^^^^^^^^^^^^^^^^
This is the path to a **Nemo** object catalog (containing either sources or clusters).
If this is given, a model image will be constructed from the catalog on-the-fly when
running the :ref:`nemoCommand` command, and subtracted from the maps used to create
the noise term in the matched filters. This mitigates potential bias and signal loss
from using the map itself to construct the filter noise term.
*Example:*
.. code-block:: yaml
noiseMaskCatalog: "S18d_202006/S18d_202006_optimalCatalog.fits"
RADecSection
^^^^^^^^^^^^
If given, cut all maps and masks to include only this rectangular section. This is
specified as a list in the form ``[RAMin, RAMax, decMin, decMax]``, with all
coordinates in decimal degrees. This option is useful for testing purposes, but it
should not be used for maps that are broken into tiles (see `Tiling`_).
*Example:*
.. code-block:: yaml
RADecSection: [330.0, 355.0, -10.0, 5.0]
.. _OutputOptions:
Output Options
==============
outputDir
^^^^^^^^^
Output from :ref:`nemoCommand` will be written into this directory. It is not
necessary to include this parameter in any config file - by default,
:ref:`nemoCommand` will set this to the name of the config file, minus the .yml
extension.
*Example:*
.. code-block:: yaml
outputDir: "nemoOutput"
stitchTiles
^^^^^^^^^^^
If True, and :ref:`nemoCommand` is set to break a large map into tiles (see
:ref:`Tiling` below), all of the output filtered tile maps will be combined together
to make a single,
monolithic map. These are placed in the ``nemoOutput/filteredMaps`` directory,
and have the prefix ``stitched_``.
*Example:*
.. code-block:: yaml
stitchTiles: True
.. _Tiling:
Tiling
======
useTiling:
^^^^^^^^^^
If True, break the map into tiles according to the settings specified in
`tileDefinitions`_.
*Example:*
.. code-block:: yaml
useTiling: True
tileDefinitions
^^^^^^^^^^^^^^^
This sets how the map is broken into tiles, which is how **Nemo** handles
parallel processing through MPI (dividing the tiles up as equally as
possible between processors). There are two ways in which this can be done.
The easiest way to define tiles is using the automatic tiling feature. Here,
a mask image must be supplied, and **Nemo** will use this mask to break maps
down into tiles with sizes as close as possible to the user-supplied
dimensions. To use this, a dictionary must be given containing the following
fields:
:mask (str):
The path to a FITS-format mask used to define the area to be tiled.
Pixels with value 1 denote valid area, and pixels with value 0
indicate regions that are not of interest. Masks which are compressed
using the ``PLIO_1`` method (as implemented by
`astropy.io.fits `_)
are supported.
:targetTileWidth (float):
The desired tile width, specified in degrees. The autotiling algorithm
will create tiles with at least this minimum size, but will increase
the size of the tiles if needed to ensure that all tiles at some
declination have the same width.
:targetTileHeight (float):
The desired tile height, specified in degrees. The autotiling algorithm
will create tiles with at least this minimum size, but will increase
the size of the tiles if needed to ensure that all tiles are the
same height.
*Example:*
.. code-block:: yaml
tileDefinitions: {mask: 'maps/Jun2020/AdvACTSurveyMask_v7_S18.fits',
targetTileWidthDeg: 10.0,
targetTileHeightDeg: 5.0}
It is also possible to set the tiling explicitly by providing a list of
dictionaries, each containing the following keys:
:tileName (str):
User-supplied name for the tile. This can be anything, but should be
unique to each tile.
:RADecSection (list):
This defines the coordinates of the tile, in the order minimum RA,
maximum RA, minimum declination, maximum declination (all given in
decimal degrees).
*Example:*
.. code-block:: yaml
tileDefinitions:
- {'tileName': 'tile_1',
'RADecSection': [354.8, 6.2, -33.4, -28.1]}
- {'tileName': 'tile_2',
'RADecSection': [343.5, 354.8, -33.4, -28.1]}
.. note:: Tiling in **Nemo** is handled such that each pixel within a tile
is uniquely mapped to a corresponding pixel in the monolithic,
input map.
tileOverlapDeg
^^^^^^^^^^^^^^
This sets the overlap region (specified in degrees) between tiles, i.e., a
buffer zone is added to all of the defined tiles (see `tileDefinitions`_),
increasing their width and height by the given amount. This overlap region
is accounted for in all processing by **Nemo**, and is only used
to ensure that filtered maps are constructed using valid data all the way
to the edge of each tile, without any apodization within the tile area
itself.
*Example:*
.. code-block:: yaml
tileOverlapDeg: 1.0
tileNameList
^^^^^^^^^^^^
If given, only the tiles named in this list will be processed. This is
particularly useful for testing purposes.
*Example:*
.. code-block:: yaml
tileNameList:
- '1_10_7'
- '1_10_8' # contains J2327 (next to a source)
- '1_11_7'
tileNoiseRegions
^^^^^^^^^^^^^^^^
To be added - this is only used by the ``RealSpaceMatchedFilter`` method.
.. _Detection:
Object Detection and Photometry
===============================
thresholdSigma
^^^^^^^^^^^^^^
This sets the minimum signal-to-noise (S/N) level for object detection. Only
objects with S/N greater than this threshold will be included in the output
catalog.
.. note:: This setting is ignored if running in forced photometry mode
(see `forcedPhotometryCatalog`_).
*Example:*
.. code-block:: yaml
thresholdSigma: 4.0
minObjPix
^^^^^^^^^
This sets the number of pixels above `thresholdSigma`_ that an object must
have in order to be included in the output catalog. Higher values will be less
susceptible to spurious noise fluctuations being detected as objects, at the
expense of completeness.
.. note:: This setting is ignored if running in forced photometry mode
(see `forcedPhotometryCatalog`_).
*Example:*
.. code-block:: yaml
minObjPix: 1.0
findCenterOfMass
^^^^^^^^^^^^^^^^
If True, object properties such as position and amplitude are reported for
the center-of-mass of the pixels above `thresholdSigma`_. Otherwise, the
maximum pixel value is used.
*Example:*
.. code-block:: yaml
findCenterOfMass: True
useInterpolator
^^^^^^^^^^^^^^^
If True, subpixel interpolation will be performed using a bicubic spline.
This affects reported source and cluster amplitudes and S/N values.
*Example:*
.. code-block:: yaml
useInterpolator: True
rejectBorder
^^^^^^^^^^^^
If set, a border with this width in pixels will be removed from the survey
area and the output survey area mask will be adjusted accordingly. This can
be used to remove "junk" at map edges, although it is better to supply a
`surveyMask`_ that makes this unnecessary.
*Example:*
.. code-block:: yaml
rejectBorder: 0
objIdent
^^^^^^^^
Identification string that will be used as a prefix for object names reported
in the output catalog. The rest of the name strings will be constructed from
the object coordinates following the IAU convention, in the format
JHHMM.m+/-DDMM, with coordinates being truncated, not rounded.
*Example:*
.. code-block:: yaml
objIdent: 'ACT-CL'
longNames
^^^^^^^^^
If True, object names in the output catalog (see `objIdent`_) will follow the
format JHHMMSS.s+/-DDMMSS (this may be appropriate for source rather than
cluster catalogs).
*Example:*
.. code-block:: yaml
longNames: False
measureShapes
^^^^^^^^^^^^^
If True, object shapes are estimated from the 2nd-order moments of the pixels
above `thresholdSigma`_, using the method employed by
`Source Extractor `_.
The shape parameters are recorded in columns with the prefix ``ellipse_`` in
the output catalog. The ellipse major and minor axis lengths, position angle,
center coordinates, and eccentricty are recorded.
This feature can be used to help identify and mask extended sources in the
maps.
.. note:: All size information is given in pixel units, i.e., there is no
correction applied here for distortion due to the map projection.
Objects must contain a minimum of 9 pixels with S/N > `thresholdSigma`_
in order for their shape measurements to be included in the catalog.
*Example:*
.. code-block:: yaml
measureShapes: True
removeRings
^^^^^^^^^^^
If True, **Nemo** will attempt to identify spurous ring-features in the map
that can occur in the vicinity of extremely bright sources (or even clusters
in some circumstances). This is done by performing object segmentation down
to the level set by `ringThresholdSigma`_, and testing whether the central
coordinates of the object are found within significant pixels. If this is
not the case, the object is deemed to be a ring-like feature and is excluded
from the output catalog.
*Example:*
.. code-block:: yaml
removeRings: True
ringThresholdSigma
^^^^^^^^^^^^^^^^^^
This sets the threshold used by the algorithm that finds and excludes
spurious ring-like features (see `removeRings`_).
*Example:*
.. code-block:: yaml
ringThresholdSigma: 3
undoPixelWindow
^^^^^^^^^^^^^^^
If True (the default), all signal amplitudes reported in the output catalog
will be corrected for the pixel window effect.
*Example:*
.. code-block:: yaml
undoPixelWindow: True
forcedPhotometryCatalog
^^^^^^^^^^^^^^^^^^^^^^^
Path to a file containing an object catalog. If this parameter is set,
:ref:`nemoCommand` will perform forced photometry at the object coordinates,
rather than detecting objects. The coordinates should be RA and declination
in decimal degrees, and contained in columns named ``ra``, ``RA``, or ``RADeg``,
and ``dec``, ``DEC``, ``decDeg``, or ``Dec``.
.. note:: If this mode is used, `thresholdSigma`_ and `minObjPix`_ will be
ignored.
.. note:: Forced photometry can be performed by both :ref:`nemoCommand`
and :ref:`nemoMassCommand` (see :ref:`AdvancedForcedPhotometry`).
*Example:*
.. code-block:: yaml
forcedPhotometryCatalog: "redMaPPer.fits"
catalogCuts
^^^^^^^^^^^
A list of constraints that can be used to filter output catalogs, where each
item is a string of the form "key < value", "key > value", etc., and "key"
can be any column name in the output catalog. Note that the spaces between
the key, operator (e.g. '<'), and value are essential.
.. note:: The constraints specified here are only applied to the final
output catalog, i.e., they are *not* applied to intermediate
catalogs that may be produced if using `filterSetOptions`_ to
implement multi-pass filtering and object finding.
*Example:*
.. code-block:: yaml
catalogCuts: ['fluxJy > 0.01']
.. _Filters:
Filters
=======
mapFilters
^^^^^^^^^^
This is a list of dictionaries, each of which contains the settings for a
filter that will be constructed and run over the maps listed in
`unfilteredMaps`_. Each dictionary has the following
keys:
:label (str):
This is a user-defined label (which can be anything, but avoid
using non-alphanumeric characters such as ``#`` or ``.``) that will
be used as a component in the filenames of output filtered maps,
and will appear in the ``template`` column of output catalogs.
:class (str):
The name of the filter class to use. The options are:
* ``BeamMatchedFilter``
* ``BeamRealSpaceMatchedFilter``
* ``ArnaudModelMatchedFilter``
* ``ArnaudModelRealSpaceMatchedFilter``
* ``BattagliaModelMatchedFilter``
* ``BattagliaModelRealSpaceMatchedFilter``
As reflected in the names above, there are two broad classes of
filters, and three classes of signal templates that are currently
supported.
The ``MatchedFilter`` class is a Fourier-space implementation
and supports multi-frequency filtering (see, e.g.,
`Williamson et al. 2011 `_;
the specific implementation used in **Nemo** is described in
`Hilton et al. 2021 `_).
This is done automatically if maps with multiple frequencies are
listed in `unfilteredMaps`_. To see an example of a cluster
search using this method, see :ref:`QuickStartPage` or
:ref:`DR5Tutorial`.
The ``RealSpaceMatchedFilter`` class is described in
`Hilton et al. (2018) `_.
Briefly, this uses a small section of the map to construct a
filter kernel that is applied in real space. To see an example of
a cluster search using this method, see the :ref:`DR3Tutorial`.
Point sources should be searched for by using the ``Beam`` signal
template, while for clusters the ``ArnaudModel`` signal template
is used. The latter implements the generalised Navarro-Frenk-White
(GNFW) profile, by default with the parameters given in
`Arnaud et al. (2010) `_.
See `Hasselfield et al. 2013 `_
for details of the specific implementation used in **Nemo**.
The GNFW parameters can optionally be set by the user (see
`GNFWParams`_).
:params (dict):
A dictionary that sets the filter parameters - see `params`_ below.
*Example:*
.. code-block:: yaml
mapFilters:
- {label: "Beam",
class: "BeamMatchedFilter",
params: {noiseParams: {method: "dataMap",
noiseGridArcmin: 40.0,
numNoiseBins: 8},
saveFilteredMaps: True,
outputUnits: 'uK',
edgeTrimArcmin: 0.0}}
params
^^^^^^
This is a dictionary within each `mapFilters`_ definition with the
following keys:
:noiseParams (dict):
A dictionary that sets the noise model used by the filter -
see `noiseParams`_ below.
:saveFilteredMaps (bool):
If True, writes the filtered map to disk.
:saveRMSMap (bool):
If True, write the noise map to disk. In this case it will be
stored in the ``nemoOutput/selFn`` directory.
:savePlots (bool):
If True, writes various plots (e.g., the filter profile in
real space) to the ``nemoOutput/diagnostics`` directory.
:saveDS9Regions (bool):
If True, save a DS9 region file for the catalog constructed
from this specific filtered map. This will be written to the
``nemoOutput/filteredMaps`` directory. Note that a DS9
region file for the "optimal" catalog, i.e., the merged
catalog constructed from all filtered maps, will always be
made, and is written to the ``nemoOutput`` directory.
:outputUnits (str):
This should be 'uK' when producing source catalogs (flux
densities in Jy will also be written to the output catalog,
if the beam solid angle is known), and 'yc' for cluster
catalogs.
:edgeTrimArcmin (float):
If given, the edges of the filtered map will be trimmed by
the given amount, and the output survey area mask will be
adjusted accordingly. This is sometimes useful to cut down
on "junk" in extremely noisy regions at map edgeds. It is
generally better to design the input `surveyMask`_ such
that this is unnecessary and to set `edgeTrimArcmin` to 0.
noiseParams
^^^^^^^^^^^
This is a dictionary within each filter `params`_ dictionary
that sets options related to the filter noise model.
:method (str):
Currently, two methods may be used to set the noise term in the matched
filter:
``dataMap``: The map itself is used as the noise term in the matched
filter. This will capture all noise sources and automatically account
for anisotropy in the noise, but may lead to a small amount of bias
in recovered source properties. This can be mitigated by running a
multi-pass pipeline (see `twoPass`_).
``model``: A simple CMB + white noise model is used as the noise term
in the matched filter.
:noiseGridArcmin (float):
Sets the size of the cells (in arcmin) in which the noise level is
estimated in the filtered maps.
:numNoiseBins (int):
The number of noise bins per cell (default: 1) in which the noise level
is estimated in the filtered maps (see `noiseGridArcmin`). The binning
is done according to the values in the weight map (see `unfilteredMaps`_).
Setting ``numNoiseBins: 8`` should be enough to remove artifacts that
otherwise may occur where there are sudden changes in the map depth.
:RMSEstimator (str):
The method used to estimate the noise in cells (see `noiseGridArcmin`).
If this is not given, the default 3σ clipping is used. Other options
are ``biweight`` (uses a biweight scale estimate of the noise) or
``percentile`` (uses the 68.3 percentile as the noise estimate).
.. note:: Additional options used by the ``RealSpaceMatchedFilter`` method
are not yet documented here. For now, please refer to the config
file used in :ref:`DR3Tutorial`.
allFilters
^^^^^^^^^^
This is a dictionary that contains filter settings that will be applied
to all the entries listed in `mapFilters`_. This allows one to define
common settings in `allFilters`_, and then only list parameters that change
between filters in `mapFilters`_. This makes the config file more
compact and readable, and is especially useful for defining different
filters to be used in a cluster search.
*Example:*
.. code-block:: yaml
allFilters: {class: "ArnaudModelMatchedFilter",
params: {noiseParams: {method: "dataMap",
noiseGridArcmin: 40.},
saveFilteredMaps: False,
saveRMSMap: False,
savePlots: False,
saveDS9Regions: False,
outputUnits: 'yc',
edgeTrimArcmin: 0.0}}
mapFilters:
- {label: "Arnaud_M2e14_z0p2",
params: {M500MSun: 2.0e+14, z: 0.2}}
- {label: "Arnaud_M2e14_z0p4",
params: {M500MSun: 2.0e+14, z: 0.4,
saveFilteredMaps: True,
savePlots: True}}
- {label: "Arnaud_M2e14_z0p8",
params: {M500MSun: 2.0e+14, z: 0.8}}
- {label: "Arnaud_M2e14_z1p2",
params: {M500MSun: 2.0e+14, z: 1.2}}
GNFWParams
^^^^^^^^^^
If given, these set the shape of the GNFW profile (see
`Nagai et al. 2007 `_)
used in cluster searches. This is a dictionary with the following keys (see Section 5 of
`Arnaud et al. 2010 `_
for more information - we follow their notation):
:P0 (float):
Central pressure.
:c500 (float):
Concentration parameter, equal to *R*\ :sub:`500` / *r*\ :sub:`s`,
where *r*\ :sub:`s` is the scale radius.
:gamma (float):
Central slope parameter.
:alpha (float):
Intermediate slope parameter.
:beta (float):
Outer slope parameter.
.. note:: If `GNFWParams`_ is not given in the config file, the parameters
for the Universal Pressure Profile (UPP) described by
`Arnaud et al. (2010) `_
are used.
*Example:*
.. code-block:: yaml
# Planck Pressure Profile
GNFWParams: {P0: 6.41, c500: 1.81, gamma: 0.31, alpha: 1.33, beta: 4.13}
.. _MultiPass:
Multi-pass Filtering and Object Detection
=========================================
Documentation for this will be added later.
filterSetOptions
^^^^^^^^^^^^^^^^
To be added later.
.. _ClusterMassEstimates:
Cluster Mass Estimates
======================
photFilter
^^^^^^^^^^
Sets the reference filter used for inferring mass estimates, which relies on
the calculation of the filter mismatch function, referred to as *Q* in
`Hasselfield et al. 2013 `_
(see `fitQ`_ below). This is a string that must match the `label` of a filter
specified in the `mapFilters`_ list.
*Example:*
.. code-block:: yaml
photFilter: 'Arnaud_M2e14_z0p4'
fitQ
^^^^
If True (the default), calculate the filter mismatch function, referred to as
*Q* in the ACT cluster papers (e.g.,
`Hasselfield et al. 2013 `_).
The result of this calculation is stored in the ``nemoOutput/selFn`` directory, and
is used by the :ref:`nemoMassCommand` command.
*Example:*
.. code-block:: yaml
fitQ: False
massOptions
^^^^^^^^^^^
This is a dictionary that specifies the relationship between cluster mass
and the Sunyaev-Zel'dovich signal, used when inferring mass estimates (refer
to Section 2.3 of `Hilton et al. 2021 `_
for details). It has the following keys:
:tenToA0 (float):
Normalization of the scaling relation (i.e., the SZ signal expected
for a cluster with mass `Mpivot`).
:B0 (float):
Deviation of the slope from unity (i.e., the actual slope is specified as
1 + *B*\ :sub:`0`).
:Mpivot (float):
The pivot mass corresponding to `tenToA0`.
:sigma_int (float):
Log-normal intrinsic scatter.
:relativisticCorrection (bool):
If True, apply relativistic corrections to the output masses. This uses the
formulae of `Itoh et al. (1998) `_,
and assumes the
`Arnaud et al. (2005) `_
mass--temperature relation.
:rescaleFactor (float):
If given, outputs masses that have been simply rescaled by this factor (these
are found in the `M500cCal` columns output by :ref:`nemoMassCommand`).
:rescaleFactorErr (float):
The uncertainty in `rescaleFactor`, which will be taken into account in the error
bars reported for `M500cCal` by :ref:`nemoMassCommand`.
.. note:: You can also set the cosmological parameters in the `massOptions`_ dictionary.
The parameters that are understood are ``H0``, ``Om0``, ``Ob0``, ``sigma8``,
and ``ns`` (flat cosmologies only).
.. note:: In a future version, `massOptions`_ will be revised to accept a list, allowing
the user to specify various different mass definitions to be output by
:ref:`nemoMassCommand`.
*Example:*
.. code-block:: yaml
massOptions: {tenToA0: 4.95e-5,
B0: 0.08,
Mpivot: 3.0e+14,
sigma_int: 0.2,
relativisticCorrection: True,
rescaleFactor: 0.71,
rescaleFactorErr: 0.07,
redshiftCatalog: "S18Clusters/AdvACT_confirmed.fits"}
Selection Function
==================
calcSelFn
^^^^^^^^^
If True, produce the files needed to estimate the mass completeness of a
cluster search. These are written into the ``nemoOutput/selFn`` directory.
*Example:*
.. code-block:: yaml
calcSelFn: True
selFnOptions
^^^^^^^^^^^^
A dictionary containing settings for cluster mass completeness estimates.
It has the following keys:
:fixedSNRCut (float):
The ``fixed_SNR`` threshold for which mass completeness statistics
will be reported (``fixed_SNR`` is the S/N at the reference filter
scale, chosen using `photFilter`_).
:method (str):
The method used for estimating completeness. The options are ``fast``
or ``montecarlo``.
:numIterations (int):
The number of iterations used by the ``montecarlo`` method for
estimating completeness.
:massLimitMaps (list):
A list of dictionaries, specifying the mass limit maps to output.
At the moment, the only key read from each dictionary is the
redshift for each mass limit map, ``z`` (see the example below).
*Example:*
.. code-block:: yaml
selFnOptions: {fixedSNRCut: 5.0,
method: 'montecarlo',
numIterations: 1000,
massLimitMaps: [{z: 0.5}]}
.. _selFnFootprints:
selFnFootprints
^^^^^^^^^^^^^^^
A list of dictionaries, each of which defines a survey footprint in which
mass completeness statistics will be estimated. Each dictionary has the
following keys:
:label (str):
User-defined label for this footprint. This can be anything, but
may be, e.g., the name of an overlapping optical survey.
:maskList (list):
A list of paths to FITS format images that contain mask images,
with values of 1 taken to indicate valid area, and values of 0
taken to indicate areas that should be ignored. The mask images
need not have the same pixelization as the maps in the
`unfilteredMaps`_ list - they just need to have a valid WCS and
will be resampled accordingly. Maps which are compressed using
the ``PLIO_1`` method (as implemented by
`astropy.io.fits `_)
are supported. If multiple masks are given, they will be combined
and treated as one footprint area when completeness statistics
are reported.
*Example:*
.. code-block:: yaml
selFnFootprints:
- {label: "HSC",
maskList: ["HSCCheckAndSelFn/s19a_fdfc_CAR_contarea_ziy-gt-5.fits"]}
- {label: "KiDS",
maskList: ["KiDSSelFn/mask_KiDSN.fits", "KiDSSelFn/mask_KiDSS.fits"]}
- {label: "DES",
maskList: ["DESY3/AdvACT_y3a2_footprint_griz_1exp_v2.0.fits"]}
Mock Catalogs
=============
makeMockCatalogs
^^^^^^^^^^^^^^^^
If present in the config file, this sets the number of mocks made by the
:ref:`nemoMockCommand` command.
.. note:: The number of mock catalogs to be generated can also be set from
a :ref:`nemoMockCommand` command line switch.
*Example:*
.. code-block:: yaml
makeMockCatalogs: 5
applyNoiseScatter
^^^^^^^^^^^^^^^^^
If True, apply scatter due to map noise to the SZ signals in the mock
catalog.
*Example:*
.. code-block:: yaml
applyNoiseScatter: True
applyPoissonScatter
^^^^^^^^^^^^^^^^^^^
If True, apply Poisson scatter to the number of clusters drawn from the
halo mass function, when generating a mock catalog.
*Example:*
.. code-block:: yaml
applyPoissonScatter: True
applyIntrinsicScatter
^^^^^^^^^^^^^^^^^^^^^
If True, apply log-normal intrinsic scatter (set by ``sigma_int`` in the
`massOptions`_ dictionary) to the SZ signals in the mock catalog.
*Example:*
.. code-block:: yaml
applyIntrinsicScatter: True
Source Injection Simulations
============================
sourceInjectionTest
^^^^^^^^^^^^^^^^^^^
If True, :ref:`nemoCommand` will perform a source injection test, which is
useful for testing position and flux recovery. This can be done for both
clusters and sources. The results will be written to a FITS-table format
catalog at ``nemoOutput/diagnostics/sourceInjectionData.fits``. At the
moment, source amplitudes, listed in the ``inFlux`` and ``outFlux``
columns, are ``deltaT_c`` (μK CMB) for sources and ``fixed_y_c``
(10\ :sup:`-4`) for clusters.
.. note:: A source injection test can also be set to run by using the
:ref:`nemoCommand` ``-I`` switch.
*Example:*
.. code-block:: yaml
sourceInjectionTest: True
sourceInjectionIterations
^^^^^^^^^^^^^^^^^^^^^^^^^
The number of times the `sourceInjectionTest`_ will be repeated. The
results from all runs will be concatenated.
*Example:*
.. code-block:: yaml
sourceInjectionIterations: 200
sourcesPerTile
^^^^^^^^^^^^^^
The maximum number of sources that :ref:`nemoCommand` will try to
insert into each tile in each iteration of a `sourceInjectionTest`_.
Sources are inserted at random locations, but no source may be
inserted within 20 arcmin of another (this is done to avoid
confusion by spurious cross matches).
*Example:*
.. code-block:: yaml
sourcesPerTile: 50
sourceInjectionAmplitudeRange
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Sets the minimum and maximum of the range of injected source or
cluster model amplitudes. For sources, the amplitudes are specified
as ΔT (μK), while for clusters the amplitudes are specified in terms
of the central Comptonization parameter, y\ :sub:`0`.
*Example:*
.. code-block:: yaml
sourceInjectionAmplitudeRange: [1, 1000]
sourceInjectionModels
^^^^^^^^^^^^^^^^^^^^^
For cluster injection tests. This is a list that specifies the shapes
of clusters to be inserted, with each run inserting cluster signals
of random amplitude but the same profile.
The `Arnaud et al. (2010) `_
universal pressure profile (UPP) is assumed, following the implementation
described in `Hasselfield et al. (2013) `_.
Each entry in the list is a dictionary with the following keys, which set the
scale of the cluster signal:
:redshift (float):
Redshift of the UPP-model cluster to be inserted.
:M500 (float):
Mass (M\ :sub:`500c`), in units of solar mass, of the
UPP-model cluster to be inserted.
*Example:*
.. code-block:: yaml
sourceInjectionModels:
- {redshift: 0.8, M500: 2.0e+14}
- {redshift: 0.4, M500: 2.0e+14}
- {redshift: 0.2, M500: 2.0e+14}
- {redshift: 0.1, M500: 2.0e+14}