STILTS-CDSSKYMATCH(1)

✨ NAME ✨

stilts-cdsskymatch β€” Crossmatches table on sky position against VizieR/SIMBAD table πŸ’…

okay so bestie, quick context before we dive in: this is the STILTS-CDSSKYMATCH(1) page, one of the Stilts commands. It's a long one, so it comes in 2 parts, and this right here is part 1. Buckle up, hydrate, we're doing this 🫢


πŸ›°οΈ SYNOPSIS πŸ›°οΈ

stilts cdsskymatch [ifmt=<in-format>] [istream=true|false] [in=<table>]
                   [icmd=<cmds>] [ocmd=<cmds>]
                   [omode=out|meta|stats|count|checksum|cgi|discard|topcat|samp|tosql|gui]
                   [out=<out-table>] [ofmt=<out-format>] [ra=<expr>]
                   [dec=<expr>] [radius=<value/arcsec>]
                   [cdstable=<value>] [find=all|best|best-
                   remote|each|each-dist] [blocksize=<int-value>]
                   [maxrec=<int-value>] [compress=true|false]
                   [serviceurl=<url-value>] [usemoc=true|false]
                   [presort=true|false] [fixcols=none|dups|all]
                   [suffixin=<label>] [suffixremote=<label>]

πŸ’« DESCRIPTION πŸ’«

cdsskymatch uses the CDS X-Match service to join a local table to one of the tables hosted by the Centre de DonnΓ©es astronomiques de Strasbourg ✨ That's all of the VizieR tables and the SIMBAD database, no cap. The service is very fast, and in most cases it's literally the best way to match a local table against a large external table hosted by a service. It is almost certainly much better than using coneskymatch β€” though ngl it's less flexible than TAP (go peek at the tapquery task for flexible access to TAP services, and tapskymatch for positional matches) πŸ’β€β™€οΈ

The local table gets uploaded to the X-Match service in chunks, and the matches for each chunk are retrieved in turn and eventually stitched together to form the final result 🧡✨ The tool only uploads the sky position and an identifier for each row of the input table β€” that's it, that's the whole upload β€” but all columns of the input table are reinstated in the result for reference. iconic behaviour tbh πŸ‘‘

If you want a better understanding of how this service actually operates, including exactly what coordinates are matched against the uploaded positions (roughly: integrated to J2000 using proper motions if available) and what columns end up in the output (roughly: a subset of the most commonly used columns), please go consult the service documentation πŸ“š

Acknowledgement: CDS note that if the use of the X-Match service is useful to your research, they would appreciate the following acknowledgement: "This research made use of the cross-match service provided by CDS, Strasbourg." πŸ™

πŸŽ€ OPTIONS πŸŽ€

  • ifmt=<in-format> β€” Specifies the format of the input table as specified by parameter in. The known formats are listed in SUN/256. Use this flag when you already know what format your table is in 🧠 If it has the special value (auto) (the default), then an attempt will be made to detect the format of the table automatically. This cannot always be done correctly though, and in that case the program will exit with an error explaining which formats were attempted 😭 This parameter is ignored for scheme-specified tables.
  • istream=true|false β€” If set true, the input table specified by the in parameter will be read as a stream 🌊 You must give the ifmt parameter in this case. Depending on the required operations and processing mode, this may cause the read to fail (sometimes it is necessary to read the table more than once) πŸ’€ It's not normally necessary to set this flag; in most cases the data will be streamed automatically if that's the best thing to do. However it can sometimes result in less resource usage when processing large files in certain formats (such as VOTable). This parameter is ignored for scheme-specified tables.
  • in=<table> β€” The location of the input table πŸ“ This may take one of the following forms:
    • A filename.
    • A URL.
    • The special value -, meaning standard input. In this case the input format must be given explicitly using the ifmt parameter. Note that not all formats can be streamed in this way.
    • A scheme specification of the form :<scheme-name>:<scheme-args>.
    • A system command line with either a "<" character at the start, or a "|" character at the end ("<syscmd" or "syscmd|"). This executes the given pipeline and reads from its standard output. This will probably only work on unix-like systems 🐧

In any case, compressed data in one of the supported compression formats (gzip, Unix compress or bzip2) will be decompressed transparently ✨

  • icmd=<cmds> β€” Specifies processing to be performed on the input table as specified by parameter in, before any other processing has taken place πŸͺ„ The value of this parameter is one or more of the filter commands described in SUN/256. If more than one is given, they must be separated by semicolon characters (";"). This parameter can be repeated multiple times on the same command line to build up a list of processing steps. The sequence of commands given in this way defines the processing pipeline which is performed on the table πŸ”—
Commands may alternatively be supplied in an external file, by using the indirection character '@' πŸ‘€ Thus a value of "@filename" causes the file filename to be read for a list of filter commands to execute. The commands in the file may be separated by newline characters and/or semicolons, and lines which are blank or which start with a '#' character are ignored. A backslash character '\fR' at the end of a line joins it with the following line.
  • ocmd=<cmds> β€” Specifies processing to be performed on the output table, after all other processing has taken place πŸͺ„ The value of this parameter is one or more of the filter commands described in SUN/256. If more than one is given, they must be separated by semicolon characters (";"). This parameter can be repeated multiple times on the same command line to build up a list of processing steps. The sequence of commands given in this way defines the processing pipeline which is performed on the table πŸ”—
Commands may alternatively be supplied in an external file, by using the indirection character '@' πŸ‘€ Thus a value of "@filename" causes the file filename to be read for a list of filter commands to execute. The commands in the file may be separated by newline characters and/or semicolons, and lines which are blank or which start with a '#' character are ignored. A backslash character '\fR' at the end of a line joins it with the following line.
  • omode=out|meta|stats|count|checksum|cgi|discard|topcat|samp|tosql|gui β€” The mode in which the result table will be output 🎁 The default mode is out, which means the result will be written as a new table to disk or elsewhere, as determined by the out and ofmt parameters. But bestie, there are other possibilities β€” ones that correspond to uses a table can be put to other than outputting it, like displaying metadata, calculating statistics, or populating a table in an SQL database. For some values of this parameter, additional parameters (<mode-args>) are required to determine the exact behaviour πŸ‘€

Possible values are

  • out
  • meta
  • stats
  • count
  • checksum
  • cgi
  • discard
  • topcat
  • samp
  • tosql
  • gui

Use the help=omode flag or see SUN/256 for more information πŸ’‘

  • out=<out-table> β€” The location of the output table πŸ“ This is usually a filename to write to. If it is equal to the special value "-" (the default) the output table will be written to standard output.
Heads up: this parameter must only be given if omode has its default value of "out".
  • ofmt=<out-format> β€” Specifies the format in which the output table will be written (one of the ones in SUN/256 β€” matching is case-insensitive and you can use just the first few letters 😌). If it has the special value (auto) (the default), then the output filename will be examined to try to guess what sort of file is required, usually by looking at the extension. If it's not obvious from the filename what output format is intended, an error will result 😡
Heads up: this parameter must only be given if omode has its default value of "out".
  • ra=<expr> β€” Right ascension in degrees in the ICRS coordinate system for the position of each row of the input table 🌈 This may simply be a column name, or it may be an algebraic expression calculated from columns as explained in SUN/256. If left blank, an attempt is made to guess from UCDs, column names and unit annotations what expression to use πŸ”
  • dec=<expr> β€” Declination in degrees in the ICRS coordinate system for the position of each row of the input table 🌈 This may simply be a column name, or it may be an algebraic expression calculated from columns as explained in SUN/256. If left blank, an attempt is made to guess from UCDs, column names and unit annotations what expression to use πŸ”
  • radius=<value/arcsec> β€” Maximum distance from the local table (ra,dec) position at which counterparts from the remote table will be identified πŸ“ This is a fixed value given in arcseconds, and it must be in the range [0,180] (this limit is currently enforced by the CDS Xmatch service) 🚧
  • cdstable=<value> β€” Identifier of the table from the CDS crossmatch service that is to be matched against the local table 🎯 This identifier may be the standard VizieR identifier (e.g. "II/246/out" for the 2MASS Point Source Catalogue) or "simbad" to indicate SIMBAD data.

See for instance the TAPVizieR table searching facility at http://tapvizier.u-strasbg.fr/adql/ to find VizieR catalogue identifiers πŸ”­

  • find=all|best|best-remote|each|each-dist β€” Determines which pair matches are included in the result 🧐
    • all: All matches
    • best: Matched rows, best remote row for each input row
    • best-remote: Matched rows, best input row for each remote row
    • each: One row per input row, contains best remote match or blank
  • each-dist β€” one row per input row, column giving distance only for best match

Also lowkey important: only the all mode is symmetric between the two tables. The others? Not so much, bestie. πŸ’…

🚨 Bug alert! There's a bug in best-remote matching. If the match is done in multiple blocks, it's possible for a remote table row to appear matched against one local table row per uploaded block, rather than just once for the whole result. If that gives you the ick, set blocksize >= rowCount. This may be fixed in a future release.
  • blocksize=<int-value> β€” The CDS Xmatch service has limits on the maximum number of rows you can upload and the maximum number of rows it will return from a single query. So for big input tables, they get broken down into smaller blocks, and one request is sent to the external service for each block. This parameter controls the number of rows in each block. For an input table with fewer rows than this value, the whole thing is done as a single request.

At time of writing, the maximum upload size is 100Mb (about 3Mrow; this does not depend on the width of your table), and the maximum return size is 2Mrow.

Large blocksizes tend to be good (up to a point) for reducing the total amount of time a large xmatch operation takes, but they can make it harder to see the job progressing. There is also the danger (for ALL-type find modes) of exceeding the return size limit, which will result in truncation of the returned result.

  • maxrec=<int-value> β€” Limit to the number of rows resulting from this operation. If the value is negative (the default) no limit is imposed. Note however that there can be truncation of the result if the number of records returned from a single chunk exceeds the service hard limit (2,000,000 at time of writing).
  • compress=true|false β€” If true, the service is requested to provide HTTP-level compression for the response stream (the Accept-Encoding header is set to "gzip", see RFC 2616). This does not guarantee that compression will happen, but if the service honours this request it may result in a smaller amount of network traffic at the expense of more processing on the server and client.
  • serviceurl=<url-value> β€” The URL at which the CDS Xmatch service can be found. Normally this should not be altered from the default, but if other implementations of the same service are known, this parameter can be used to access them.
  • usemoc=true|false β€” If true, first acquire a MOC coverage map from CDS, and use that to pre-filter rows before uploading them for matching. This should improve efficiency, but have no effect on the result.
  • presort=true|false β€” If true, the rows are sorted by HEALPix index before they are uploaded to the CDS X-Match service. If the match is done in multiple blocks, this may improve efficiency, since when matching against a large remote catalogue the X-Match service likes to process requests in which sources are grouped into a small region rather than scattered all over the sky.

Note this will have a couple of other side effects that may be undesirable: it will read all the input rows into the task at once, which may make it harder to assess progress, and it will affect the order of the rows in the output table.

It is probably only worth setting true for rather large (multi-million-row?) multi-block matches, where both local and remote catalogues are spread over a significant fraction of the sky. But feel free to experiment.

  • fixcols=none|dups|all β€” Determines how input columns are renamed before use in the output table. The choices are:
    • none β€” columns are not renamed
    • dups β€” columns which would otherwise have duplicate names in the output will be renamed to indicate which table they came from
    • all β€” all columns will be renamed to indicate which table they came from

If columns are renamed, the new ones are determined by suffix* parameters.

  • suffixin=<label> β€” If the fixcols parameter is set so that input columns are renamed for insertion into the output table, this parameter determines how the renaming is done. It gives a suffix which is appended to all renamed columns from the input table.
  • suffixremote=<label> β€” If the fixcols parameter is set so that input columns are renamed for insertion into the output table, this parameter determines how the renaming is done. It gives a suffix which is appended to all renamed columns from the CDS result table.

✨ SEE ALSO ✨

If the package stilts-doc is installed, the full documentation SUN/256 is available in HTML format: file:///usr/share/doc/stilts/sun256/index.html

🌸 VERSION 🌸

STILTS version 3.5.4-debian

This is the Debian version of Stilts, which lack the support of some file formats and network protocols. For differences see file:///usr/share/doc/stilts/README.Debian

πŸ‘‘ AUTHOR πŸ‘‘

Mark Taylor (Bristol University)


That's the tea, bestie! This page is from Mar 2017, for STILTS-CDSSKYMATCH(1), version STILTS version 3.5.4-debian. Now go slay those crossmatches! πŸ’–βœ¨

πŸ“¦ where this page comes from