diff options
Diffstat (limited to 'man/man1/funjoin.1')
-rw-r--r-- | man/man1/funjoin.1 | 326 |
1 files changed, 326 insertions, 0 deletions
diff --git a/man/man1/funjoin.1 b/man/man1/funjoin.1 new file mode 100644 index 0000000..6e7dd31 --- /dev/null +++ b/man/man1/funjoin.1 @@ -0,0 +1,326 @@ +.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sh \" Subsection heading +.br +.if t .Sp +.ne 5 +.PP +\fB\\$1\fR +.PP +.. +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. | will give a +.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to +.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' +.\" expand to `' in nroff, nothing in troff, for use with C<>. +.tr \(*W-|\(bv\*(Tr +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.\" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.hy 0 +.if n .na +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "funjoin 1" +.TH funjoin 1 "April 14, 2011" "version 1.4.5" "SAORD Documentation" +.SH "NAME" +funjoin \- join two or more FITS binary tables on specified columns +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBfunjoin\fR [switches] <ifile1> <ifile2> ... <ifilen> <ofile> +.SH "OPTIONS" +.IX Header "OPTIONS" +.Vb 11 +\& \-a cols # columns to activate in all files +\& \-a1 cols ... an cols # columns to activate in each file +\& \-b 'c1:bvl,c2:bv2' # blank values for common columns in all files +\& \-bn 'c1:bv1,c2:bv2' # blank values for columns in specific files +\& \-j col # column to join in all files +\& \-j1 col ... jn col # column to join in each file +\& \-m min # min matches to output a row +\& \-M max # max matches to output a row +\& \-s # add 'jfiles' status column +\& \-S col # add col as status column +\& \-t tol # tolerance for joining numeric cols [2 files only] +.Ve +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +\&\fBfunjoin\fR joins rows from two or more (up to 32) +\&\s-1FITS\s0 Binary Table files, based on the values +of specified join columns in each file. \s-1NB:\s0 the join columns must have +an index file associated with it. These files are generated using the +\&\fBfunindex\fR program. +.PP +The first argument to the program specifies the first input \s-1FITS\s0 table +or raw event file. If \*(L"stdin\*(R" is specified, data are read from the +standard input. Subsequent arguments specify additional event files +and tables to join. The last argument is the output \s-1FITS\s0 file. +.PP +\&\s-1NB:\s0 Do \fBnot\fR use Funtools Bracket +Notation to specify \s-1FITS\s0 extensions and row filters when running +funjoin or you will get wrong results. Rows are accessed and joined +using the index files directly, and this bypasses all filtering. +.PP +The join columns are specified using the \fB\-j col\fR switch (which +specifies a column name to use for all files) or with \fB\-j1 col1\fR, +\&\fB\-j2 col2\fR, ... \fB\-jn coln\fR switches (which specify a column +name to use for each file). A join column must be specified for each file. +If both \fB\-j col\fR and \fB\-jn coln\fR are specified for a given +file, then the latter is used. Join columns must either be of type +string or type numeric; it is illegal to mix numeric and string +columns in a given join. For example, to join three files using the +same key column for each file, use: +.PP +.Vb 1 +\& funjoin \-j key in1.fits in2.fits in3.fits out.fits +.Ve +.PP +A different key can be specified for the third file in this way: +.PP +.Vb 1 +\& funjoin \-j key \-j3 otherkey in1.fits in2.fits in3.fits out.fits +.Ve +.PP +The \fB\-a \*(L"cols\*(R"\fR switch (and \fB\-a1 \*(L"col1\*(R"\fR, +\&\fB\-a2 \*(L"cols2\*(R"\fR counterparts) can be used to specify columns to +activate (i.e. write to the output file) for each input file. By +default, all columns are output. +.PP +If two or more columns from separate files have the same name, the +second (and subsequent) columns are renamed to have an underscore +and a numeric value appended. +.PP +The \fB\-m min\fR and \fB\-M max\fR switches specify the minimum +and maximum number of joins required to write out a row. The default +minimum is 0 joins (i.e. all rows are written out) and the default maximum +is 63 (the maximum number of possible joins with a limit of 32 input files). +For example, to write out only those rows in which exactly two files +have columns that match (i.e. one join): +.PP +.Vb 1 +\& funjoin \-j key \-m 1 \-M 1 in1.fits in2.fits in3.fits ... out.fits +.Ve +.PP +A given row can have the requisite number of joins without all of the +files being joined (e.g. three files are being joined but only two +have a given join key value). In this case, all of the columns of the +non-joined file are written out, by default, using blanks (zeros or NULLs). +The \fB\-b c1:bv1,c2:bv2\fR and +\-b1 'c1:bv1,c2:bv2' \-b2 'c1:bv1,c2 - bv2' ... +switches can be used to set the blank value for columns common to all +files and/or columns in a specified file, respectively. Each blank value +string contains a comma-separated list of column:blank_val specifiers. +For floating point values (single or double), a case-insensitive string +value of \*(L"nan\*(R" means that the \s-1IEEE\s0 NaN (not\-a\-number) should be +used. Thus, for example: +.PP +.Vb 1 +\& funjoin \-b "AKEY:???" \-b1 "A:-1" \-b3 "G:NaN,E:-1,F:-100" ... +.Ve +.PP +means that a non-joined \s-1AKEY\s0 column in any file will contain the +string \*(L"???\*(R", the non-joined A column of file 1 will contain a value +of \-1, the non-joined G column of file 3 will contain \s-1IEEE\s0 NaNs, while +the non-joined E and F columns of the same file will contain values \-1 +and \-100, respectively. Of course, where common and specific blank values +are specified for the same column, the specific blank value is used. +.PP +To distinguish which files are non-blank components of a given row, +the \fB\-s\fR (status) switch can be used to add a bitmask column named +\&\*(L"\s-1JFILES\s0\*(R" to the output file. In this column, a bit is set for each +non-blank file composing the given row, with bit 0 corresponds to the +first file, bit 1 to the second file, and so on. The file names +themselves are stored in the \s-1FITS\s0 header as parameters named \s-1JFILE1\s0, +\&\s-1JFILE2\s0, etc. The \fB\-S col\fR switch allows you to change the name +of the status column from the default \*(L"\s-1JFILES\s0\*(R". +.PP +A join between rows is the Cartesian product of all rows in one file +having a given join column value with all rows in a second file having +the same value for its join column and so on. Thus, if file1 has 2 +rows with join column value 100, file2 has 3 rows with the same value, +and file3 has 4 rows, then the join results in 2*3*4=24 rows being output. +.PP +The join algorithm directly processes the index file associated with +the join column of each file. The smallest value of all the current +columns is selected as a base, and this value is used to join +equal-valued columns in the other files. In this way, the index files +are traversed exactly once. +.PP +The \fB\-t tol\fR switch specifies a tolerance value for numeric +columns. At present, a tolerance value can join only two files at a +time. (A completely different algorithm is required to join more than +two files using a tolerance, somethng we might consider implementing +in the future.) +.PP +The following example shows many of the features of funjoin. The input files +t1.fits, t2.fits, and t3.fits contain the following columns: +.PP +.Vb 11 +\& [sh] fundisp t1.fits +\& AKEY KEY A B +\& ----------- ------ ------ ------ +\& aaa 0 0 1 +\& bbb 1 3 4 +\& ccc 2 6 7 +\& ddd 3 9 10 +\& eee 4 12 13 +\& fff 5 15 16 +\& ggg 6 18 19 +\& hhh 7 21 22 +.Ve +.PP +fundisp t2.fits + \s-1AKEY\s0 \s-1KEY\s0 C D + \-\-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\- \-\-\-\-\-\- \-\-\-\-\-\- + iii 8 24 25 + ggg 6 18 19 + eee 4 12 13 + ccc 2 6 7 + aaa 0 0 1 +.PP +fundisp t3.fits + \s-1AKEY\s0 \s-1KEY\s0 E F G +\&\-\-\-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\- \-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\-\- + ggg 6 18 19 100.10 + jjj 9 27 28 200.20 + aaa 0 0 1 300.30 + ddd 3 9 10 400.40 +.PP +Given these input files, the following funjoin command: +.PP +.Vb 3 +\& funjoin \-s \-a1 "\-B" \-a2 "\-D" \-a3 "\-E" \-b \e +\& "AKEY:???" \-b1 "AKEY:XXX,A:255" \-b3 "G:NaN,E:-1,F:-100" \e +\& \-j key t1.fits t2.fits t3.fits foo.fits +.Ve +.PP +will join the files on the \s-1KEY\s0 column, outputting all columns except B +(in t1.fits), D (in t2.fits) and E (in t3.fits), and setting blank +values for \s-1AKEY\s0 (globally, but overridden for t1.fits) and A (in file +1) and G, E, and F (in file 3). A \s-1JFILES\s0 column will be output to +flag which files were used in each row: +.PP +.Vb 12 +\& AKEY KEY A AKEY_2 KEY_2 C AKEY_3 KEY_3 F G JFILES +\& ------------ ------ ------ ------------ ------ ------ ------------ ------ -------- ----------- -------- +\& aaa 0 0 aaa 0 0 aaa 0 1 300.30 7 +\& bbb 1 3 ??? 0 0 ??? 0 \-100 nan 1 +\& ccc 2 6 ccc 2 6 ??? 0 \-100 nan 3 +\& ddd 3 9 ??? 0 0 ddd 3 10 400.40 5 +\& eee 4 12 eee 4 12 ??? 0 \-100 nan 3 +\& fff 5 15 ??? 0 0 ??? 0 \-100 nan 1 +\& ggg 6 18 ggg 6 18 ggg 6 19 100.10 7 +\& hhh 7 21 ??? 0 0 ??? 0 \-100 nan 1 +\& XXX 0 255 iii 8 24 ??? 0 \-100 nan 2 +\& XXX 0 255 ??? 0 0 jjj 9 28 200.20 4 +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +See funtools(7) for a list of Funtools help pages |