1funcnts(1)                    SAORD Documentation                   funcnts(1)
2
3
4

NAME

6       funcnts - count photons in specified regions, with bkgd subtraction
7

SYNOPSIS

9       funcnts  [switches] <source_file> [source_region] [bkgd_file]
10       [bkgd_region⎪bkgd_value]
11

OPTIONS

13         -e "source_exposure[;bkgd_exposure]"
14                       # source (bkgd) FITS exposure image using matching files
15         -w "source_exposure[;bkgd_exposure]"
16                       # source (bkgd) FITS exposure image using WCS transform
17         -t "source_timecorr[;bkgd_timecorr]"
18                       # source (bkgd) time correction value or header parameter name
19         -g            # output using nice g format
20         -G            # output using %.14g format (maximum precision)
21         -i "[column;]int1;int2..." # column-based intervals
22         -m            # match individual source and bkgd regions
23         -p            # output in pixels, even if wcs is present
24         -r            # output inner/outer radii (and angles) for annuli (and pandas)
25         -s            # output summed values
26         -v "scol[;bcol]" # src and bkgd value columns for tables
27         -T            # output in starbase/rdb format
28         -z            # output regions with zero area
29

DESCRIPTION

31       funcnts counts photons in the specified source regions and reports the
32       results for each region. Regions are specified using the Spatial Region
33       Filtering mechanism.  Photons are also counted in the specified bkgd
34       regions applied to the same data file or a different data file. (Alter‐
35       natively, a constant background value in counts/pixel**2 can be speci‐
36       fied.)  The bkgd regions are either paired one-to-one with source
37       regions or pooled and normalized by area, and then subtracted from the
38       source counts in each region.  Displayed results include the bkgd-sub‐
39       tracted counts in each region, as well as the error on the counts, the
40       area in each region, and the surface brightness (cnts/area**2) calcu‐
41       lated for each region.
42
43       The first argument to the program specifies the FITS input image,
44       array, or raw event file to process.  If "stdin" is specified, data are
45       read from the standard input. Use Funtools Bracket Notation to specify
46       FITS extensions, image sections, and filters.
47
48       The optional second argument is the source region descriptor.  If no
49       region is specified, the entire field is used.
50
51       The background arguments can take one of two forms, depending on
52       whether a separate background file is specified. If the source file is
53       to be used for background as well, the third argument can be either the
54       background region, or a constant value denoting background cnts/pixel.
55       Alternatively, the third argument can be a background data file, in
56       which case the fourth argument is the background region.  If no third
57       argument is specified, a constant value of 0 is used (i.e., no back‐
58       ground).
59
60       In summary, the following command arguments are valid:
61
62         [sh] funcnts sfile                        # counts in source file
63         [sh] funcnts sfile sregion                # counts in source region
64         [sh] funcnts sfile sregion bregion        # bkgd reg. is from source file
65         [sh] funcnts sfile sregion bvalue         # bkgd reg. is constant
66         [sh] funcnts sfile sregion bfile bregion  # bkgd reg. is from separate file
67
68       NB: unlike other Funtools programs, source and background regions are
69       specified as separate arguments on the command line, rather than being
70       placed inside brackets as part of the source and background filenames.
71       This is because regions in funcnts are not simply used as data filters,
72       but also are used to calculate areas, exposure, etc. If you put the
73       source region inside the brackets (i.e. use it simply as a filter)
74       rather than specifying it as argument two, the program still will only
75       count photons that pass the region filter. However, the area calcula‐
76       tion will be performed on the whole field, since field() is the default
77       source region. This rarely is the desired behavior. On the other hand,
78       with FITS binary tables, it often is useful to put a column filter in
79       the filename brackets, so that only events matching the column filter
80       are counted inside the region.
81
82       For example, to extract the counts within a radius of 22 pixels from
83       the center of the FITS binary table snr.ev and subtract the background
84       determined from the same image within an annulus of radii 50-100 pix‐
85       els:
86
87         [sh] funcnts snr.ev "circle(502,512,22)" "annulus(502,512,50,100)"
88         # source
89         #   data file:        snr.ev
90         #   degrees/pix:      0.00222222
91         # background
92         #   data file:        snr.ev
93         # column units
94         #   area:             arcsec**2
95         #   surf_bri:         cnts/arcsec**2
96         #   surf_err:         cnts/arcsec**2
97
98         # background-subtracted results
99          reg   net_counts     error   background    berror      area  surf_bri  surf_err
100         ---- ------------ --------- ------------ --------- --------- --------- ---------
101            1     3826.403    66.465      555.597     5.972  96831.98     0.040     0.001
102
103         # the following source and background components were used:
104         source region(s)
105         ----------------
106         circle(502,512,22)
107
108          reg       counts    pixels
109         ---- ------------ ---------
110            1     4382.000      1513
111
112         background region(s)
113         --------------------
114         annulus(502,512,50,100)
115
116          reg       counts    pixels
117         ---- ------------ ---------
118         all      8656.000     23572
119
120       The area units for the output columns labeled "area", "surf_bri" (sur‐
121       face brightness) and "surf_err" will be given either in arc-seconds (if
122       appropriate WCS information is in the data file header(s)) or in pix‐
123       els. If the data file has WCS info, but you do not want arc-second
124       units, use the -p switch to force output in pixels.  Also, regions hav‐
125       ing zero area are not normally included in the primary (background-sub‐
126       tracted) table, but are included in the secondary source and bkgd
127       tables. If you want these regions to be included in the primary table,
128       use the -z switch.
129
130       Note that a simple sed command will extract the background-subtracted
131       results for further analysis:
132
133         [sh] cat funcnts.sed
134         1,/---- .*/d
135         /^$/,$d
136
137         [sh] sed -f funcnts.sed funcnts.out
138         1     3826.403    66.465      555.597     5.972  96831.98     0.040     0.001
139
140       If separate source and background files are specified, funcnts will
141       attempt to normalize the the background area so that the background
142       pixel size is the same as the source pixel size. This normalization can
143       only take place if the appropriate WCS information is contained in both
144       files (e.g. degrees/pixel values in CDELT). If either file does not
145       contain the requisite size information, the normalization is not per‐
146       formed. In this case, it is the user's responsibility to ensure that
147       the pixel sizes are the same for the two files.
148
149       Normally, if more than one background region is specified, funcnts will
150       combine them all into a single region and use this background region to
151       produce the background-subtracted results for each source region. The
152       -m (match multiple backgrounds) switch tells funcnts to make a one to
153       one correspondence between background and source regions, instead of
154       using a single combined background region.  For example, the default
155       case is to combine 2 background regions into a single region and then
156       apply that region to each of the source regions:
157
158         [sh] funcnts snr.ev "annulus(502,512,0,22,n=2)" "annulus(502,512,50,100,n=2)"
159         # source
160         #   data file:        snr.ev
161         #   degrees/pix:      0.00222222
162         # background
163         #   data file:        snr.ev
164         # column units
165         #   area:             arcsec**2
166         #   surf_bri:         cnts/arcsec**2
167         #   surf_err:         cnts/arcsec**2
168
169         # background-subtracted results
170          reg   net_counts     error   background    berror      area  surf_bri  surf_err
171         ---- ------------ --------- ------------ --------- --------- --------- ---------
172            1     3101.029    56.922      136.971     1.472  23872.00     0.130     0.002
173            2      725.375    34.121      418.625     4.500  72959.99     0.010     0.000
174
175         # the following source and background components were used:
176         source region(s)
177         ----------------
178         annulus(502,512,0,22,n=2)
179
180          reg       counts    pixels
181         ---- ------------ ---------
182            1     3238.000       373
183            2     1144.000      1140
184
185         background region(s)
186         --------------------
187         annulus(502,512,50,100,n=2)
188
189          reg       counts    pixels
190         ---- ------------ ---------
191         all      8656.000     23572
192
193       Note that the basic region filter rule "each photon is counted once and
194       no photon is counted more than once" still applies when using The -m to
195       match background regions. That is, if two background regions overlap,
196       the overlapping pixels will be counted in only one of them. In a worst-
197       case scenario, if two background regions are the same region, the first
198       will get all the counts and area and the second will get none.
199
200       Using the -m switch causes funcnts to use each of the two background
201       regions independently with each of the two source regions:
202
203         [sh] funcnts -m snr.ev "annulus(502,512,0,22,n=2)" "ann(502,512,50,100,n=2)"
204         # source
205         #   data file:        snr.ev
206         #   degrees/pix:      0.00222222
207         # background
208         #   data file:        snr.ev
209         # column units
210         #   area:             arcsec**2
211         #   surf_bri:         cnts/arcsec**2
212         #   surf_err:         cnts/arcsec**2
213
214         # background-subtracted results
215          reg   net_counts     error   background    berror      area  surf_bri  surf_err
216         ---- ------------ --------- ------------ --------- --------- --------- ---------
217            1     3087.015    56.954      150.985     2.395  23872.00     0.129     0.002
218            2      755.959    34.295      388.041     5.672  72959.99     0.010     0.000
219
220         # the following source and background components were used:
221         source region(s)
222         ----------------
223         annulus(502,512,0,22,n=2)
224
225          reg       counts    pixels
226         ---- ------------ ---------
227            1     3238.000       373
228            2     1144.000      1140
229
230         background region(s)
231         --------------------
232         ann(502,512,50,100,n=2)
233
234          reg       counts    pixels
235         ---- ------------ ---------
236            1     3975.000      9820
237            2     4681.000     13752
238
239       Note that most floating point quantities are displayed using "f" for‐
240       mat. You can change this to "g" format using the -g switch.  This can
241       be useful when the counts in each pixel is very small or very large. If
242       you want maximum precision and don't care about the columns lining up
243       nicely, use -G, which outputs all floating values as %.14g.
244
245       When counting photons using the annulus and panda (pie and annuli)
246       shapes, it often is useful to have access to the radii (and panda
247       angles) for each separate region. The -r switch will add radii and
248       angle columns to the output table:
249
250         [sh] funcnts -r snr.ev "annulus(502,512,0,22,n=2)" "ann(502,512,50,100,n=2)"
251         # source
252         #   data file:        snr.ev
253         #   degrees/pix:      0.00222222
254         # background
255         #   data file:        snr.ev
256         # column units
257         #   area:             arcsec**2
258         #   surf_bri:         cnts/arcsec**2
259         #   surf_err:         cnts/arcsec**2
260         #   radii:            arcsecs
261         #   angles:           degrees
262
263         # background-subtracted results
264          reg   net_counts     error   background    berror      area  surf_bri  surf_err   radius1   radius2    angle1    angle2
265         ---- ------------ --------- ------------ --------- --------- --------- --------- --------- --------- --------- ---------
266            1     3101.029    56.922      136.971     1.472  23872.00     0.130     0.002      0.00     88.00        NA        NA
267            2      725.375    34.121      418.625     4.500  72959.99     0.010     0.000     88.00    176.00        NA        NA
268
269         # the following source and background components were used:
270         source region(s)
271         ----------------
272         annulus(502,512,0,22,n=2)
273
274          reg       counts    pixels
275         ---- ------------ ---------
276            1     3238.000       373
277            2     1144.000      1140
278
279         background region(s)
280         --------------------
281         ann(502,512,50,100,n=2)
282
283          reg       counts    pixels
284         ---- ------------ ---------
285         all      8656.000     23572
286
287       Radii are given in units of pixels or arc-seconds (depending on the
288       presence of WCS info), while the angle values (when present) are in
289       degrees.  These columns can be used to plot radial profiles. For exam‐
290       ple, the script funcnts.plot in the funtools distribution) will plot a
291       radial profile using gnuplot (version 3.7 or above). A simplified ver‐
292       sion of this script is shown below:
293
294         #!/bin/sh
295
296         if [ x"$1" = xgnuplot ]; then
297           if [ x`which gnuplot 2>/dev/null` = x ]; then
298             echo "ERROR: gnuplot not available"
299             exit 1
300           fi
301           awk '
302           BEGIN{HEADER=1; DATA=0; FILES=""; XLABEL="unknown"; YLABEL="unknown"}
303           HEADER==1{
304             if( $1 == "#" && $2 == "data" && $3 == "file:" ){
305               if( FILES != "" ) FILES = FILES ","
306               FILES = FILES $4
307             }
308             else if( $1 == "#" && $2 == "radii:" ){
309               XLABEL = $3
310             }
311             else if( $1 == "#" && $2 == "surf_bri:" ){
312               YLABEL = $3
313             }
314             else if( $1 == "----" ){
315               printf "set nokey; set title \"funcnts(%s)\"\n", FILES
316               printf "set xlabel \" radius(%s)\"\n", XLABEL
317               printf "set ylabel \"surf_bri(%s)\"\n", YLABEL
318               print  "plot \"-\" using 3:4:6:7:8 with boxerrorbars"
319               HEADER = 0
320               DATA = 1
321               next
322             }
323           }
324           DATA==1{
325             if( NF == 12 ){
326               print $9, $10, ($9+$10)/2, $7, $8, $7-$8, $7+$8, $10-$9
327             }
328             else{
329               exit
330             }
331           }
332           ' ⎪ gnuplot -persist - 1>/dev/null 2>&1
333
334         elif [ x"$1" = xds9 ]; then
335           awk '
336           BEGIN{HEADER=1; DATA=0; XLABEL="unknown"; YLABEL="unknown"}
337           HEADER==1{
338             if( $1 == "#" && $2 == "data" && $3 == "file:" ){
339               if( FILES != "" ) FILES = FILES ","
340               FILES = FILES $4
341             }
342             else if( $1 == "#" && $2 == "radii:" ){
343               XLABEL = $3
344             }
345             else if( $1 == "#" && $2 == "surf_bri:" ){
346               YLABEL = $3
347             }
348             else if( $1 == "----" ){
349               printf "funcnts(%s) radius(%s) surf_bri(%s) 3\n", FILES, XLABEL, YLABEL
350               HEADER = 0
351               DATA = 1
352               next
353             }
354           }
355           DATA==1{
356             if( NF == 12 ){
357               print $9, $7, $8
358             }
359             else{
360               exit
361             }
362           }
363           '
364         else
365           echo "funcnts -r ... ⎪ funcnts.plot [ds9⎪gnuplot]"
366           exit 1
367         fi
368
369       Thus, to run funcnts and plot the results using gnuplot (version 3.7 or
370       above), use:
371
372         funcnts -r snr.ev "annulus(502,512,0,50,n=5)" ...  ⎪ funcnts.plot gnuplot
373
374       The -s (sum) switch causes funcnts to produce an additional table of
375       summed (integrated) background subtracted values, along with the
376       default table of individual values:
377
378         [sh] funcnts -s snr.ev "annulus(502,512,0,50,n=5)" "annulus(502,512,50,100)"
379         # source
380         #   data file:        snr.ev
381         #   degrees/pix:      0.00222222
382         # background
383         #   data file:        snr.ev
384         # column units
385         #   area:             arcsec**2
386         #   surf_bri:         cnts/arcsec**2
387         #   surf_err:         cnts/arcsec**2
388
389         # summed background-subtracted results
390         upto   net_counts     error   background    berror      area  surf_bri  surf_err
391         ---- ------------ --------- ------------ --------- --------- --------- ---------
392            1     2880.999    54.722      112.001     1.204  19520.00     0.148     0.003
393            2     3776.817    65.254      457.183     4.914  79679.98     0.047     0.001
394            3     4025.492    71.972     1031.508    11.087 179775.96     0.022     0.000
395            4     4185.149    80.109     1840.851    19.786 320831.94     0.013     0.000
396            5     4415.540    90.790     2873.460    30.885 500799.90     0.009     0.000
397
398         # background-subtracted results
399          reg       counts     error   background    berror      area  surf_bri  surf_err
400         ---- ------------ --------- ------------ --------- --------- --------- ---------
401            1     2880.999    54.722      112.001     1.204  19520.00     0.148     0.003
402            2      895.818    35.423      345.182     3.710  60159.99     0.015     0.001
403            3      248.675    29.345      574.325     6.173 100095.98     0.002     0.000
404            4      159.657    32.321      809.343     8.699 141055.97     0.001     0.000
405            5      230.390    37.231     1032.610    11.099 179967.96     0.001     0.000
406
407         # the following source and background components were used:
408         source region(s)
409         ----------------
410         annulus(502,512,0,50,n=5)
411
412          reg       counts    pixels      sumcnts    sumpix
413         ---- ------------ --------- ------------ ---------
414            1     2993.000       305     2993.000       305
415            2     1241.000       940     4234.000      1245
416            3      823.000      1564     5057.000      2809
417            4      969.000      2204     6026.000      5013
418            5     1263.000      2812     7289.000      7825
419
420         background region(s)
421         --------------------
422         annulus(502,512,50,100)
423
424          reg       counts    pixels
425         ---- ------------ ---------
426         all      8656.000     23572
427
428       The -t and -e switches can be used to apply timing and exposure correc‐
429       tions, respectively, to the data. Please note that these corrections
430       are meant to be used qualitatively, since application of more accurate
431       correction factors is a complex and mission-dependent effort. The algo‐
432       rithm for applying these simple corrections is as follows:
433
434         C =  Raw Counts in Source Region
435         Ac=  Area of Source Region
436         Tc=  Exposure time for Source Data
437         Ec=  Average exposure in Source Region, from exposure map
438
439         B=   Raw Counts in Background Region
440         Ab=  Area of Background Region
441         Tb=  (Exposure) time for Background Data
442         Eb=  Average exposure in Background Region, from exposure map
443
444       Then, Net Counts in Source region is
445
446         Net=  C - B * (Ac*Tc*Ec)/(Ab*Tb*Eb)
447
448       with the standard propagation of errors for the Error on Net.  The net
449       rate would then be
450
451         Net Rate = Net/(Ac*Tc*Ec)
452
453       The average exposure in each region is calculated by summing up the
454       pixel values in the exposure map for the given region and then dividing
455       by the number of pixels in that region. Exposure maps often are gener‐
456       ated at a block factor > 1 (e.g., block 4 means that each exposure
457       pixel contains 4x4 pixels at full resolution) and funcnts will deal
458       with the blocking automatically. Using the -e switch, you can supply
459       both source and background exposure files (separated by ";"), if you
460       have separate source and background data files. If you do not supply a
461       background exposure file to go with a separate background data file,
462       funcnts assumes that exposure already has been applied to the back‐
463       ground data file. In addition, it assumes that the error on the pixels
464       in the background data file is zero.
465
466       NB: The -e switch assumes that the exposure map overlays the image file
467       exactly, except for the block factor.  Each pixel in the image is
468       scaled by the block factor to access the corresponding pixel in the
469       exposure map. If your exposure map does not line up exactly with the
470       image, do not use the -e exposure correction.  In this case, it still
471       is possible to perform exposure correction if both the image and the
472       exposure map have valid WCS information: use the -w switch so that the
473       transformation from image pixel to exposure pixel uses the WCS informa‐
474       tion. That is, each pixel in the image region will be transformed first
475       from image coordinates to sky coordinates, then from sky coordinates to
476       exposure coordinates. Please note that using -w can increase the time
477       required to process the exposure correction considerably.
478
479       A time correction can be applied to both source and background data
480       using the -t switch. The value for the correction can either be a
481       numeric constant or the name of a header parameter in the source (or
482       background) file:
483
484         [sh] funcnts -t 23.4 ...            # number for source
485         [sh] funcnts -t "LIVETIME;23.4" ... # param for source, numeric for bkgd
486
487       When a time correction is specified, it is applied to the net counts as
488       well (see algorithm above), so that the units of surface brightness
489       become cnts/area**2/sec.
490
491       The -i (interval) switch is used to run funcnts on multiple column-
492       based intervals with only a single pass through the data. It is equiva‐
493       lent to running funcnts several times with a different column filter
494       added to the source and background data each time. For each interval,
495       the full funcnts output is generated, with a linefeed character (^L)
496       inserted between each run.  In addition, the output for each interval
497       will contain the interval specification in its header.  Intervals are
498       very useful for generating X-ray hardness ratios efficiently.  Of
499       course, they are only supported when the input data are contained in a
500       table.
501
502       Two formats are supported for interval specification. The most general
503       format is semi-colon-delimited list of filters to be used as intervals:
504
505         funcnts -i "pha=1:5;pha=6:10;pha=11:15" snr.ev "circle(502,512,22)" ...
506
507       Conceptually, this will be equivalent to running funcnts three times:
508
509         funcnts snr.ev'[pha=1:5]' "circle(502,512,22)"
510         funcnts snr.ev'[pha=6:10]' "circle(502,512,22)"
511         funcnts snr.ev'[pha=11:15]' "circle(502,512,22)"
512
513       However, using the -i switch will require only one pass through the
514       data.
515
516       Note that complex filters can be used to specify intervals:
517
518         funcnts -i "pha=1:5&&pi=4;pha=6:10&&pi=5;pha=11:15&&pi=6" snr.ev ...
519
520       The program simply runs the data through each filter in turn and gener‐
521       ates three funcnts outputs, separated by the line-feed character.
522
523       In fact, although the intent is to support intervals for hardness
524       ratios, the specified filters do not have to be intervals at all. Nor
525       does one "interval" filter have to be related to another. For example:
526
527         funcnts -i "pha=1:5;pi=6:10;energy=11:15" snr.ev "circle(502,512,22)" ...
528
529       is equivalent to running funcnts three times with unrelated filter
530       specifications.
531
532       A second interval format is supported for the simple case in which a
533       single column is used to specify multiple homogeneous intervals for
534       that column. In this format, a column name is specified first, followed
535       by intervals:
536
537         funcnts -i "pha;1:5;6:10;11:15" snr.ev "circle(502,512,22)" ...
538
539       This is equivalent to the first example, but requires less typing. The
540       funcnts program will simply prepend "pha=" before each of the specified
541       intervals. (Note that this format does not contain the "=" character in
542       the column argument.)
543
544       Ordinarily, when funcnts is run on a FITS binary table (or a raw event
545       table), one integral count is accumulated for each row (event) con‐
546       tained within a given region. The -v "scol[;bcol]" (value column)
547       switch will accumulate counts using the value from the specified column
548       for the given event. If only a single column is specified, it is used
549       for both the source and background regions. Two separate columns, sepa‐
550       rated by a semi-colon, can be specified for source and background. The
551       special token '$none' can be used to specify that a value column is to
552       be used for one but not the other. For example, 'pha;$none' will use
553       the pha column for the source but use integral counts for the back‐
554       ground, while '$none;pha' will do the converse.  If the value column is
555       of type logical, then the value used will be 1 for T and 0 for F.
556       Value columns are used, for example, to integrate probabilities instead
557       of integral counts.
558
559       If the -T (rdb table) switch is used, the output will conform to star‐
560       base/rdb data base format: tabs will be inserted between columns rather
561       than spaces and line-feed will be inserted between tables.
562
563       Finally, note that funcnts is an image program, even though it can be
564       run directly on FITS binary tables. This means that image filtering is
565       applied to the rows in order to ensure that the same results are
566       obtained regardless of whether a table or the equivalent binned image
567       is used. Because of this, however, the number of counts found using
568       funcnts can differ from the number of events found using row-filter
569       programs such as fundisp or funtable For more information about these
570       difference, see the discussion of Region Boundaries.
571

SEE ALSO

573       See funtools(n) for a list of Funtools help pages
574
575
576
577version 1.4.0                   August 15, 2007                     funcnts(1)
Impressum