aboutsummaryrefslogtreecommitdiff
path: root/noao/digiphot/apphot/doc/specs/Ap.doc
blob: 66744d582e76ba653d03fcecbb3469843b206cd2 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
APPHOT (Aug83)    Digital Aperture Photometry Package     APPHOT (Aug83)



1. Introduction

    The  APPHOT  package  will  provide a set of routines for performing
aperture photometry  on  uncrowded  or  moderately  crowded  fields,  in
either  interactive  or  batch  mode.   The  basic  photometry technique
employed  shall  be  fractional-pixel  aperture  integration;   no   PSF 
fitting  techniques  shall  be  employed,  and  no  knowledge of the PSF
shall be required.  This document presents the formal  requirements  and
specifications  for  the  package,  and  describes  the algorithms to be
used.



2. Requirements

    (1) The program shall take as input an IRAF imagefile  containing  a
        starfield  which  has  been  corrected  for  pixel to pixel gain
        variations,  high  frequency  fluctuations  in  the  background, 
        nonlinearity,  and  any other instrumental defects affecting the
        intensity value of a pixel.

    (2) Given as input the approximate coordinates of  a  single  object
        in   the   image,   the  program  shall  perform  the  following 
        operations:

            o   Determine a constant background  value  by  analysis  of
                an   annular   region   surrounding   the  object.   The 
                background is assumed to be flat in the  region  of  the
                object,   but   may  contain  contaminating  objects  or 
                defects which shall be detected and  eliminated  by  the
                fitting  algorithm.   It  shall  be  permissible for the
                background region to extend  beyond  the  boundaries  of
                the  image;  the  out  of  bounds  region of the annulus
                shall be excluded from the fit.

            o   Determine  the  center  of  the   object,   taking   the 
                approximate  object  coordinates  given  as  input  as a
                starting  point.   The  center  determination  shall  be 
                resistant   to   the  affects  of  nearby  contaminating 
                objects.  The centering algorithm may  assume  that  the
                object  is  circularly symmetric, or nearly so, and that
                the object flux is positive.

            o   Determine  the  integral  of  object  minus   background 
                within  one  or  more  circular  apertures centered upon
                the object.  The integration shall  be  performed  using
                partial  pixel  techniques,  to  minimize the effects of
                sampling.   If  the  aperture  contains  any  indefinite 
                pixels,  or  if the aperture extends beyond the boundary
                of the image, an indefinite result shall be returned.

    (3) The  following  options  shall  be  provided   to   modify   the 
        operation of the above functions:


                                  -1-
APPHOT (Aug83)    Digital Aperture Photometry Package     APPHOT (Aug83)



            o   Use  a  user  supplied  constant  background  value  and 
                background  noise  estimate  instead  of   fitting   the 
                background.

            o   Use  the  starting  center  as  the actual center in all
                cases.

            o   Use the starting center as  the  actual  center  if  the
                object  is  very  faint,  but tweak up the center if the
                signal to noise is above a certain threshold.

            o   Allow the object aperture to  extend  beyond  the  image
                boundary,  using  only  that  portion  of  the  aperture 
                which  is  in  bounds  when   computing   the   aperture 
                integral.

    (4) At  a  minimum, the following parameters shall be calculated and
        output for each object:

            o   The coordinates of the object, and the  estimated  error
                in these coordinates.

            o   The  mode  and standard deviation of the background; the
                number of pixels left in  the  background  region  after
                pixel rejection.

            o   The  magnitude  of  the  object,  to  within an arbitary
                zero-point,  and  the  statistical  uncertainty  of  the 
                magnitude.   If  multiple concentric apertures are used,
                a magnitude and uncertainty shall be given for each.

    (5) The program shall be usable  both  interactively  and  in  batch
        mode.   In  interactive  use, the user shall be able to mark the
        positions of the objects by interactively positioning  a  cursor
        on  a  2-dim  display device.  It shall be possible to enter the
        control parameters for the analysis routines  interactively  for
        each  object.   In  batch  mode, the control parameters shall be
        fixed, and  object  coordinates  shall  be  taken  from  a  user
        supplied  list.   The  display  device  shall not be required in
        batch mode.

    (6) The APPHOT package shall be  written  in  the  SPP  language  in
        conformance  with  the  standards  and conventions of IRAF.  The
        code shall be portable and device independent.



2.1 Summary of the Limitations of APPHOT

    The  APPHOT  package  is  designed  to   perform   simple   aperture 
photometry subject to the following restrictions:

    (1) Objects   must   be  circular  or  nearly  circular,  since  the 


                                  -2-
APPHOT (Aug83)    Digital Aperture Photometry Package     APPHOT (Aug83)



        aperture is circular.

    (2) All pixels within the  object  aperture  are  weighted  equally.
        All  pixels  in  the object aperture must be present; the object
        aperture may not normally extend outside the  image.   Defective
        pixels within the object aperture may not be detected.

    (3) The  background  must  be approximately flat in the neighborhood
        of the object  being  measured.   The  background  must  have  a
        unique  mode,  or the background fitting routine will reject the
        object.   Any  low  frequency  fluctuations  in  the  background 
        should be removed before using APPHOT.

    (4) The   object  aperture  must  be  kept  small  to  minimize  the 
        degradation of signal to noise caused by sky pixels  within  the
        aperture,  and  to minimize the effects of crowding.  Therefore,
        the wings of the object will extend beyond the  aperture.   Good
        photometric  results  will  be  obtained only if the aperture is
        consistently well centered, and if the  shape  and  diameter  of
        an  object  is  constant throughout the image and invariant with
        respect to magnitude.



3. Specifications

    The  APPHOT  package  performs  aperture  photometry  on   digitized 
starfields   maintained  as  IRAF  imagefiles.   Input  to  the  package 
consists of an imagefile, a list of  object  coordinates,  and  numerous
parameters  controlling  the  analysis  algorithms.   Output consists of
successive lines of text, where each  line  summarizes  the  results  of
the  analysis  for  a  particular  object.  The output may be saved in a
textfile, which may easily be printed  or  written  onto  a  card  image
tape   for   export.    The   package   routines   may  be  used  either 
interactively or in batch mode.

The CL callable part of the APPHOT package  consists  of  the  following
routines:

        apphot   -- the main aperture photometry routine.
        coordtr  -- translations and rotations of coord lists.
        fitsky   -- computes mode and sigma of a sky region.
        fitpsf   -- compute the FWHM of the PSF.
        imcursor -- reads the image cursor; used to make lists.
        immark   -- marks objects on the display device.
        radprof  -- computes the radial profile of an object.

Routines  for  general list manipulation, reading and writing card image
tapes,  reading  and  writing  images  to  FITS  tapes,   removing   the 
instrumental   signature   from  the  data,  and  so  on  are  available 
elsewhere in the  IRAF  system.   The  package  is  easily  extended  to
include  peak  finding,  matching of object lists from different images,
background fitting and removal, and so on.   The  APPHOT  package  shall


                                  -3-
APPHOT (Aug83)    Digital Aperture Photometry Package     APPHOT (Aug83)



eventually   supplant   both   the  KPNO  AUTOPHOT  and  KPNO  "Mountain 
Photometry Code" packages.



3.1 Standard Analysis Procedures

    Before performing aperture photometry one must determine the  radius
of  the  object  aperture  to  be used, the inner radius and size of the
annulus to be used to fit the background, the full  width  at  half  max
(FWHM)  of  the  point  spread  function  (PSF),  and so on.  Additional
parameters are required by the centering algorithm.  A  list  of  object
centers  must  be  prepared  if APPHOT is to be used in batch mode.  The
standard procedure is as follows:

    (1) Use RADPROF to determine values for the following parameters:

            - the object aperture radius or radii, in pixels
            - the inner radius of the annular (sky) region
            - the width of the annular region

    (2) Use FITPSF to fit gaussians to isolated, high  signal  to  noise
        data  objects,  to  determine  the  FWHM  of  the  point  spread 
        function.

    (3) Use FITSKY to determine  the  sky  sigma  (standard  deviation).
        APPHOT  assumes  that sigma is approximately constant throughout
        the image.

    (4) If one does not wish to  manually  mark  object  positions  with
        the  cursor  during  analysis,  i.e.  when the analysis is to be
        done in batch, a list of object coordinates  must  be  prepared.
        This may be done in many ways:

            o   By  running  RCURSOR with the standard output redirected
                into the list file.

            o   By transforming an existing list with  COORDTR,  OPSTRM,
                MATCH, SORT, WINDOW, the editor, or some other filter.

            o   By  an  automatic  object  finding  procedure, if one is
                available.

            o   By any other program which generates a  list  of  object
                coordinates,  where  each line of the list describes one
                object, and where x  and  y  in  pixel  coordinates  are
                given  in  columns  one and two.  Additional columns, if
                present, are ignored.

            o   APPHOT output may be  used  as  coordinate  input  in  a
                subsequent run.

    (5) Finally,  APPHOT  is  run  to  measure  the  objects.   The user


                                  -4-
APPHOT (Aug83)    Digital Aperture Photometry Package     APPHOT (Aug83)



        should  be  familiar  with  the  algorithms  used  to  fit   the 
        background,   measure   the   object  center,  and  compute  the 
        aperture integral, magnitude, and errors.   The  values  of  all
        visible   and  hidden  APPHOT  parameters  should  be  inspected 
        before doing any serious processing.

The general purpose IRAF list processing tools may be used  for  further
analysis  of  APPHOT  output.   Output  lists  may be filtered to select
objects based on the value of a  list  column,  i.e.,  all  the  objects
within   a  certain  magnitude  range  may  be  selected,  objects  with 
estimated errors larger than a certain value may be deleted, or  a  list
may  be  sorted using the value in any column.  Columns may be extracted
from a list to form new lists or to provide  input  to  a  plot  filter,
and  lists  may  be  merged.   Arithmetic  may  be performed on lists to
calculate colors, etc.

The remainder of this section presents detailed specifications  for  the
analysis procedures in the APPHOT package.



3.2 The APPHOT Program

    The  function  of  the  APPHOT  procedure  is  to  perform  aperture 
photometry on isolated objects within an  image.   The  principal  input
operands  are  the  name  of  the imagefile and the rough coordinates of
the objects to be processed.  The  principal  output  operands  are  the
coordinates and magnitudes of the objects.

In  order  to  perform  aperture  photometry  APPHOT  must  perform  the 
following  sequence  of  operations   (the   algorithms   employed   are 
explained in more detail later in this section):

    (1) The  mode  and sigma of an annular background region centered on
        the object is calculated.

    (2) The center of the object is determined.

    (3) The background is subracted  from  the  object,  and  the  total
        flux within the object aperture or apertures is calculated.

Steps  (1)  and (2) above are optional; the background and center may be
determined externally, rather than by APPHOT, if desired.


3.2.1 APPHOT parameters

    APPHOT has quite a few parameters  due  to  the  complexity  of  the
algorithms  employed.   All  data dependent parameters are query mode to
ensure that they get set properly when a new image  is  processed.   The
data  independent  algorithm control parameters are hidden mode, and are
given reasonable default values.   The  names,  datatypes,  and  default
values of the APPHOT parameters are shown below.


                                  -5-
APPHOT (Aug83)    Digital Aperture Photometry Package     APPHOT (Aug83)



Positional or query mode parameters:

        image           filename
        apertures       string
        annulus         real
        width_annulus   real
        fwhm_psf        real
        sky_sigma       real


List structured parameters (filename may be given on command line):

        sky_mode        *real
        coords          *imcur


Hidden parameters:

        spool           boolean         no
        output          filename        "apphot.out"
        fitsky          boolean         yes
        max_sky_iter    integer         50
        growing_radius  real            1.0 (fwhm_psf units)
        k1              real            5.0
        k2              real            2.0
        center          boolean         yes
        clean           boolean         yes
        cleaning_radius real            0.8 (fwhm_psf units)
        clipping_radius real            1.5 (fwhm_psf units)
        max_cen_shift   real            1.0 (fwhm_psf units)
        min_snratio     real            0.5
        zmag            real            26.0
        verbose         boolean         yes


The  function  and  format  of  each of these parameters is explained in
more detail below.


    image           The name  of  the  image  or  image  section  to  be
                    processed.

    output          The  name  of  the  output  textfile  used  to spool
                    APPHOT  output.   If  null,  output  will   not   be 
                    spooled.   Note  that  output  always appears on the
                    standard output,  whether  or  not  spooling  is  in
                    effect.

    apertures       The   radii  in  pixels  of  the  concentric  object 
                    apertures, given all on  the  same  line,  delimited
                    by  blanks.   At  least  one aperture must be given;
                    the maximum number of apertures is  limited  by  the
                    length  of  a  line.  A sample input string might be


                                  -6-
APPHOT (Aug83)    Digital Aperture Photometry Package     APPHOT (Aug83)



                    "5.0 5.5 6.0 6.5 7.0".  If only  a  single  aperture
                    is  to  be  used,  a  real  expression  may  be used
                    instead of a string type  argument.   The  apertures
                    need  not  be  given  in  any particular order.  The
                    average  radius  will  be  used   to   compute   the 
                    uncertainty in the object magnitude.

    annulus         The  inner  radius  of  the  annular  sky region, in
                    pixels.

    width_annulus   The width of the annular sky region, in pixels.

    fwhm_psf        The FWHM of the psf, in pixels.   Used  as  a  scale
                    factor to control the internal algorithms.

    sky_sigma       The  standard  deviation  (noise value) of a typical
                    region  of  sky  in  the  image.   Used  for   pixel 
                    rejection in the sky fitting algorithm.

    sky_mode        The  name  of a list file containing the mode of the
                    background  of   each   of   the   objects   to   be 
                    processed.   Required  only  if  FITSKY  is switched
                    off.  If sky fitting is disabled, and no  list  file
                    is given, APPHOT will query for the sky value.

    coords          The  name  of a list file containing the coordinates
                    of  the  objects  to  be  processed.    If   absent, 
                    objects   may   be  marked  interactively  with  the 
                    cursor.

    fitsky          A  switch  used  to  specify  whether  or  not   the 
                    background  will  be  fitted.  If background fitting
                    is disabled, the mode and sigma  of  the  background
                    will  be  read  from  the SKY_FILE list each time an
                    object is processed.

    max_sky_iter    The  maximum  number  of  iterations  for  the   sky 
                    fitting    algorithm.    Since   the   sky   fitting  
                    algorithm   is   guaranteed   to   converge,    this  
                    parameter  should  normally  have a large value.  If
                    the value is zero, the  median  of  the  sky  region
                    will be used instead of the mode.

    growing_radius  The  region  growing  radius  for pixel rejection in
                    the sky region, in units of FWHM_PSF.   When  a  bad
                    sky   pixel   is   detected,   all   pixels   within  
                    (growing_radius  *  fwhm_psf)  pixels  of  the   bad 
                    pixel  will  be rejected.  Used to exclude the wings
                    of contaminating objects from  the  sky  sample,  to
                    avoid biasing the mode.

    k1              The  k-sigma  clipping factor for the first phase of
                    the sky fitting algorithm.


                                  -7-
APPHOT (Aug83)    Digital Aperture Photometry Package     APPHOT (Aug83)



    k2              The  k-sigma  clipping  factor   for   the   second, 
                    iterative, phase of the sky fitting algorithm.

    center          A  switch  used  to specify whether or not centering
                    is to be performed.  If centering is  disabled,  the
                    initial center will be used as the object center.

    clean           A   switch  used  to  specify  whether  or  not  the 
                    symmetry-clean algorithm is to  be  employed  during
                    centering.

    cleaning_radius The   cleaning   radius   for   the   symmetry-clean  
                    algorithm, in units of FWHM_PSF.

    clipping_radius The   clipping   radius   for   the   symmetry-clean  
                    algorithm, in units of FWHM_PSF.

    max_cen_shift   The  maximum  permissible  shift of center, in units
                    of  FWHM_PSF.   If  the  shift   produced   by   the 
                    centering  algorithm  is larger than this value, the
                    fit  will  terminate  and  no  magnitude   will   be 
                    calculated.

    min_snratio     Centering  will  be  skipped  if the signal to noise
                    of  the  object,  as  calculated  from  the  initial 
                    center,  is  less  than  the  value  given  by  this 
                    parameter.

    zmag            Zero point for the output magnitude scale.

    verbose         If enabled, the output columns  are  labeled.   Note
                    that  the  presence  of  column labels in the output
                    may interfere with the use of  the  list  processing
                    tools.



3.2.2 The APPHOT Background Fitting Algorithm

    A  good background fit is essential to aperture photometry.  Fitting
the background is trivial in a sparse field, but difficult in a  crowded
field.   In  general  the  background  region will contain contaminating
objects which must be detected and excluded if  a  good  fit  is  to  be
obtained.

The  algorithm  employed  here  is  based  on the fact that contaminated
pixels are  almost  always  spatially  correlated.   Background  fitting
algorithms  which  work with a one dimensional sample (mode, median), or
with the  one  dimensional  histogram  (mode  of  hgm)  have  difficulty
rejecting  the  faint  wings of contaminated regions.  This is a serious
defect of one  dimensional  fitting  algorithms,  because  it  is  these
faint  wings,  not  the  bright central pixels, which are most likely to
bias the calculated background value.


                                  -8-
APPHOT (Aug83)    Digital Aperture Photometry Package     APPHOT (Aug83)



The algorithm used in APPHOT is as follows:


    algorithm fit_sky

    begin
            # Reject gross deviants.
            compute the median of the annular region
            detect pixels more than (k1*sky_sigma) from the median
            reject all such pixels, without region growing

            # Detect and reject contaminating objects.
            while (number of iterations <= max_sky_iter) {
                compute the histogram of the reduced sample
                compute the sigma and mode of the histogram
                detect pixels more than k2*sigma from the mode
                reject all such pixels, with region growing
                if (no pix rejected or all pix rejected)
                    terminate loop
            }

            return the final mode, sigma, and sample size
    end


The mode of the histogram  is  found  by  cross  correlating  the  noise
function  with  the  histogram.   The width of the the noise function is
given  by  the  standard  deviation  of  the  current   sample.    Pixel 
rejection  is  performed  by locating all pixels more than k2*sigma from
the mode, and blindly rejecting all pixels within a  certain  radius  of
each  deviant  pixel.   This  simple  algorithm  works  well because the
sample is large, and therefore there is little  penalty  for  discarding
pixels  that  might  not  be  deviant.   Region  growing  also  tends to
accelerate convergence significantly.

Very faint contaminating objects are difficult  to  detect  and  reject.
If  there  are enough such objects, they should not be rejected, because
there are probably a few in the object aperture as well.  A  higher  sky
sigma  will  be calculated and the computed uncertainty in the magnitude
will increase.  The best solution to this problem  may  be  to  increase
the  size of the annulus to minimize the bias and maximize the liklihood
of a detection.



3.2.3 The APPHOT Centering Algorithm

    The centering algorithm used in APPHOT  is  that  of  Auer  and  Van
Altena,  with  the addition of the symmetry-clean algorithm developed by
Barry Newell.  The main algorithm is as follows:





                                  -9-
APPHOT (Aug83)    Digital Aperture Photometry Package     APPHOT (Aug83)



    algorithm get_center

    begin
            if (centering is disabled) {
                return initial center, zero uncertainty estimate

            } else if (signal to noise of object < MIN_SNRATIO) {
                compute uncertainty using initial center
                return initial center, computed uncertainty

            } else {
                call measure_center
                return image center and estimated uncertainty
            }
    end


The  actual  center  determination  is  carried  out  by  the  following 
algorithm:


    algorithm measure_center

    begin
            extract subarray from the main data array

            # Perform symmetry-cleaning.
            if (cleaning is enabled) {
                for (each pair of pixels diametrically opposed about
                    the image center beyond the cleaning radius)
                        if (i2 > i1 + 2*sky_sigma)
                            replace i2 by i1
                        else if (i1 > i2 + 2*sky_sigma)
                            replace i1 by i2

                perform 2*sky_sigma noniterative clip of all pixels
                beyond the clipping radius, to remove any remaining
                radially symmetric structures
            }

            # Compute the image center and uncertainty.
            compute x and y marginals of the cleaned subarray
            fit a gaussian of width FWHM_PSF to each marginal
            compute the centering error from the covariance matrix

            return image center and estimated uncertainty
    end


The  effect  of  the  symmetry-clean  algorithm  is  to edit the raster,
removing any contaminating  objects  in  the  vicinity  of  the  primary
object.   This  simplifies  the  fitting  algorithm  and  increases  its 
reliability, since it does not have  to  deal  with  multipeak  marginal


                                 -10-
APPHOT (Aug83)    Digital Aperture Photometry Package     APPHOT (Aug83)



distributions.

A  gaussian  is  fitted  to  the  marginal  distributions  because it is
expected  to  yield  a  better  center  determination  for  undersampled 
data.    An   alternative   is   to   empirically  derive  the  marginal 
distributions of the psf and fit these to each data object.  This  is  a
better  approach  in some cases, but in the case of undersampled data it
is difficult to  derive  the  marginal  distributions  due  to  sampling
effects,  and  fitting is difficult due to interpolation error.  The use
of  a  gaussian  eliminates  interpolation  error.    Eventually,   both 
techniques should be made available.



3.2.4 The APPHOT Aperture Integration Algorithm

    The  integral  of the flux within a circular aperture is computed by
fractional pixel techniques.  Pixels are assumed to be square  apertures
arranged  in  a  rectangular  grid.   The fraction of a pixel which lies
within the circular APPHOT aperture is  computed  by  an  approximation,
and all such contributions are summed to produce the total integral.

The  simplicity  of aperture photometry limits the amount of information
available for error analysis.   Using  only  the  noise  value  for  the
background, the estimated error in the aperture integral is given by

        flux_error = sky_sigma * sqrt (aperture_area)

where  "sky_sigma"  is  either  the  sigma  calculated by the background
fitting algorithm or the parameter SKY_SIGMA, depending on  whether  sky
fitting  is  enabled,  and where "aperture_area" is the fractional pixel
area of the aperture.

It is possible, however, to produce a more useful error estimate  if  we
include  some  information  about  the  psf.   For  the  purposes  of an
improved error estimate, we assume that the PSF is  a  gaussian.   Given
the  object  center,  the  background,  and  the  FWHM of the PSF, it is
trivial to fit a two dimensional gaussian to the  object.   An  estimate
of  the  average noise value for the pixels within the aperture may then
be obtained by computing the standard deviation of the  residual  formed
by  subtracting  the  fitted  two-dimensional  gaussian  from  the data.
This value is used in place of SKY_SIGMA in the above  equation  for  an
improved estimate of the actual flux error.

In  the  limit  as the gaussian goes to zero, both uncertainty estimates
tend to the same  value,  as  they  should.   For  bright  objects,  the
uncertainty  produced  by  analysis  of  the  residual  will  tend to be
pessimistic, since it is unlikely that the PSF can actually  be  modeled
by  a  simple  gaussian.   Nonetheless,  a  plot  of  uncertainty versus
magnitude should reveal objects which are  blended,  which  contain  bad
pixels,  and  so  on.  The accuracy of the gaussian model will determine
how reliably deviant objects can be discriminated.



                                 -11-
APPHOT (Aug83)    Digital Aperture Photometry Package     APPHOT (Aug83)



3.2.5 APPHOT Output

    For each object processed, APPHOT prints a single line  of  text  on
the  standard  output.   If  desired,  APPHOT  will simultaneously spool
output into a user specified text file.  Each output line  will  contain
the following information (excluding the commas):


    x,y,cenerr,shift, mode,sigma,nskypix, mag1,...,magn,magerr

where

    x,y         object coordinates in pixels
    cenerr      estimated uncertainty in the object center
    shift       shift of center from initial coordinates
    mode        mode of the background
    sigma       sigma of the background
    nskypix     number of sky pixels left after rejection
    mag1        magnitude within the first annulus
    magn        magnitude within the Nth annulus
    magerr      estimated mag. uncertainty at the average radius


Note  that  the estimated uncertainty in the magnitude is given only for
the average object aperture  radius.   The  uncertainty  for  the  other
apertures  can  easily  be  calculated  given SIGMA and the area of each
aperture.  The zero point for  the  magnitude  scale  is  given  by  the
hidden parameter ZMAG.

Additional  information  could  be  calculated  and  output (such as the
moments of the object and the  skew  of  the  background),  but  in  our
experience  few people ever look at such information, and a more complex
output format would be required.  Probably the calculation  of  anything
but  object  centers,  magnitudes,  and  errors  should be left to other
programs.



3.3 The COORDTR Program

    The function of COORDTR is to effect  a  linear  translation  and/or
rotation  of  a  coordinate list.  COORDTR is a filter; coordinate lines
are read from the standard input and written  to  the  standard  output.
COORDTR  is  concerned  only  with coordinate transformations, and knows
nothing about image boundaries.  A transformed coordinate may no  longer
lie within an image.

        x y other_stuff

The  format  of a coordinate line is shown above.  COORDTR operates only
on the coordinate pair x,y.  Any additional information on the  line  is
passed on to the output without modification.



                                 -12-
APPHOT (Aug83)    Digital Aperture Photometry Package     APPHOT (Aug83)



COORDTR  is  actually  a  general  purpose list processing operator, and
belongs in  a  list  processing  package,  rather  than  in  the  APPHOT
package.   When  a list processing package is developed, COORDTR will be
moved to that package.

A COORDTR transformation consists of a linear  translation  followed  by
a  rotation.   Either  the  translation,  the  rotation,  or both may be
skipped.  The COORDTR parameters are summarized below.


positional arguments:

        xshift          real
        yshift          real
        xcenter         real
        ycenter         real
        theta           real


hidden parameters:

        translate       boolean         yes
        rotate          boolean         no


If more than two positional arguments  are  given,  COORDTR  knows  that
both  a  translation  and a rotation are desired.  Otherwise the boolean
parameters TRANSLATE and ROTATE are read to  determine  what  additional
parameters  are  needed.   Thus  a  simple  linear  translation  of +2.5
pixels in X and -0.2 pixels in Y would be specified by the command

        coordtr (2.5, -.2, < "input", > "output")

which transforms the list in file "input", writing the output  into  the
new file "output".

If  a  rotation  is  desired, XCENTER, YCENTER, and THETA must be given.
The first two parameters specify the  pixel  coordinates  of  the  point
about  which  the rotation is to be performed, while THETA specifies the
rotation angle in degrees.  Positive THETA produces  a  counterclockwise
rotation, if positive X is to the right and positive Y is up.



3.4 The FITSKY Program

    The  function  of  the  FITSKY  program is to determine the mode and
sigma of the specified annular  regions,  printing  the  results  (mode,
sigma,  and  npix)  on  the  standard  output.   FITSKY  is  similar  in 
operation to APPHOT, except  that  its  function  is  to  fit  sky,  not
perform aperture photometry.  The FITSKY parameters are the following:




                                 -13-
APPHOT (Aug83)    Digital Aperture Photometry Package     APPHOT (Aug83)



Positional or query mode parameters:

        image           filename
        annulus         real
        width_annulus   real
        fwhm_psf        real


List structured parameters (filename may be given on command line):

        coords          *imcur


Hidden parameters:

        spool           boolean         no
        output          filename        "fitsky.out"
        max_sky_iter    integer         50
        growing_radius  real            1.0 (fwhm_psf units)
        k1              real            5.0
        k2              real            2.0
        verbose         boolean         yes


The  names  and functions of the FITSKY parameters are the same as those
for APPHOT.  Note that ANNULUS  may  be  set  to  zero  to  measure  the
background   within   a   circular  aperture.   The  maximum  number  of 
iterations may be set to zero to measure the median of the  sky  sample.
FITSKY output may be spooled into a file and used as input to APPHOT.



3.5 The FITPSF Program

    The  function  of the FITPSF program is to determine the FWHM of the
point spread function.  This is done  by  selecting  an  isolated,  high
signal  to  noise  object,  computing the x and y marginal profiles, and
fitting a gaussian to each  profile.   Output  consists  of  the  object
center,  the  error in the center, and the FWHM of the fitted gaussians.
Note that the sigma of a gaussian may be obtained by dividing  the  FWHM
by 2.354.

        x y err x_fwhm y_fwhm

The input parameters for the FITPSF program are shown below.










                                 -14-
APPHOT (Aug83)    Digital Aperture Photometry Package     APPHOT (Aug83)



Positional parameters:

        image           filename
        aperture        real
        annulus         real
        width_annulus   real
        sky_mode        real
        coords          *imcur


Hidden parameters:

        fitsky          boolean         yes
        center          boolean         yes
        spool           boolean         no
        output          filename        "fitpsf.out"
        verbose         boolean         yes


If  background  fitting  is disabled, the parameter SKY_MODE defines the
sky  level.   The  background  fitting  algorithm  is  a  simple  median 
calculation  without  pixel  rejection  or  iteration.   This  should be
sufficient, since FITPSF is expected to  be  used  mainly  in  uncrowded
regions on high signal to noise objects.

Note  that  FITPSF  is  set  up to process a list of input objects.  The
list processing tools  (i.e.,  AVERAGE)  may  be  used  to  average  the
results to produce the final FWHM of the PSF for the image.



3.6 The IMCURSOR Program

    The  function  of  the  IMCURSOR  program  is  to  read the STDIMAGE
cursor, writing the cursor coordinates  on  the  standard  output.   The
cursor  is  read  until  the  EOF  character is entered to terminate the
loop.  The standard output may be redirected into a file to  generate  a
coordinate list.  IMCURSOR has no parameters.



3.7 The IMMARK Program

    The  function  of  IMMARK  is  to  draw  marks on the diplay device.
IMMARK is useful for verifying coordinate lists.


parameters:

        mark_type       string
        mark_size       real
        coords          *imcur



                                 -15-
APPHOT (Aug83)    Digital Aperture Photometry Package     APPHOT (Aug83)



Output is  the  current  frame  of  the  STDIMAGE  device.   Mark  types
include  "circle",  "box",  "cross", "plus", and "diamond".  The size of
a  mark  is  given  in  pixels.   The  third  parameter  is  a  standard 
coordinate  list.   If  no  list is given, the image cursor will be read
instead.



3.8 The RADPROF Program

    The function of  the  RADPROF  program  is  to  compute  the  radial
profile  of  an object.  The output of RADPROF consists of a sequence of
lines of text, each line  defining  the  profile  at  a  single  radius.
Since  RADPROF  may  generate  many  lines  of output for a single input
object, it is set up to process  only  a  single  input  object.   A  CL
while loop may be written to process multiple objects, if desired.


positional arguments:

        image           filename
        aperture        real
        step_size       real
        annulus         real
        width_annulus   real
        sky_mode        real


hidden parameters:

        fitsky          boolean         yes
        center          boolean         yes
        verbose         boolean         yes


The  radial  profile  is  calculated  from  the  image center out to the
radius specified by  the  parameter  APERTURE,  in  steps  of  STEP_SIZE
pixels.   The  remaining  RADPROF  parameters  are  similar  to those of
APPHOT and will not be discussed in detail.  If  background  fitting  is
disabled,   the   parameter   SKY_MODE   defines  the  sky  level.   The 
background fitting algorithm is  a  simple  median  calculation  without
pixel   rejection  or  iteration.   This  should  be  sufficient,  since 
RADPROF is expected to be used  mainly  in  uncrowded  regions  on  high
signal  to  noise  objects.   Centering  is  via  gaussian  fits  to the
marginal profiles, without cleaning.

RADPROF output lines contain the following fields:

        r, i(r), inorm(r), fraction(r)

where

        r               radius in pixels


                                 -16-
APPHOT (Aug83)    Digital Aperture Photometry Package     APPHOT (Aug83)



        i(r)            raw intensity at r
        inorm(r)        normalized intensity at r (range 0-1)
        fraction(r)     fraction of total integral at r


RADPROF does not  generate  any  plots.   If  one  wishes  to  plot  the
contents  of  an  output column, the column may be extracted with a list
processing filter and piped to a graphics task.



4.0 Example

    A brief  example  may  help  illustrate  the  use  of  the  package.
Suppose  we  want  to  process  a few hundred stars on images "blue" and
"red".  We start by analyzing the blue image.

        ap> radprof blue,15,0.5,20,10

This gives us a radial profile printout for one  of  the  "blue"  stars.
We  decide  that  an  aperture radius of 2.5 pixels is about right.  The
annulus will start at a  radius  of  10.0  pixels  and  extend  to  20.0
pixels.  The next step is to determine the FWHM of the PSF:

        ap> fitpsf blue,3,10,20 | tee spoolfile

By  default, the program will take coordinate input by reading the image
display cursor.  When the program is waiting for cursor input,  it  will
cause  the display cursor to blink rapidly; normally the cursor does not
blink.  One has to be aware of this, because no other prompt is  issued.
We  postion  the  cursor  on  several  stars,  and  tap the space bar to
measure each one.  When finished we type  the  EOF  character  (<ctrl/z>
on  our  systems)  to terminate the loop.  The screen will now look like
this (the output column labels are ommitted):

        ap> fitpsf blue,3,10,20 | tee spoolfile
         283.12  157.40 0.035  2.887  2.751
         546.08  213.45 0.023  2.833  2.902
         318.32  354.73 0.064  2.791  2.824

Since we elected to use TEE to spool the output, rather than  the  SPOOL
parameter  of  FITPSF,  we will not see the results until all stars have
been measured.  The next step is to average the  results,  to  determine
the  final  FWHM  (the  FITPSF  output could have been piped directly to
GETCOLS without using an intermediate spoolfile, if desired).

        ap> getcols spoolfile,"4-5" | getcols | average
        2.83133 0.0569725 6 

There are many ways this average could have been  computed,  of  course;
this  is  only  one  example.   Next,  to avoid having to write down the
FWHM value, we put it into the appropriate APPHOT parameter  (note  that
the parameter name is abbreviated).


                                 -17-
APPHOT (Aug83)    Digital Aperture Photometry Package     APPHOT (Aug83)



        ap> apphot.fwhm = 2.831

Finally,  we  must  determine a representative backround sigma value for
the image.  This is done by using FITSKY to measure several  sky  areas,
and  averaging column two of the output, much as we did for FITPSF.  The
final value may be saved in "apphot.sky_sigma".

By this point we have determined all the necessary  parameters,  and  it
is  time  to  do  some photometry.  The only APPHOT argument we are sure
of is the image name parameter,  so  that  is  all  we  include  on  the
command line:

        ap> apphot blue
        aperture radii, pixels: 2.4 2.5 2.75 3.0
        inner radius of sky annulus: 10
        width of sky annulus (1 - ): 10
        full width at half max of psf (2.831):
        standard deviation of the image noise function (23.733):

After  responding  to  the  prompts shown above, APPHOT will ask for the
first pair of object coordinates,  and  the  cursor  blink  prompt  will
again  be  given.  Several objects may be measured to verify that all is
working.

The last step is to prepare a list of  objects  to  be  processed.   The
simplest  way  to  do this is to interactively mark the objects with the
cursor.  Later, when we process the "red"  image,  the  same  coordinate
list may again be used, possibly after filtering with COORDTR.

        ap> imcursor > objlist

At  this  point,  all  of the APPHOT parameters have been set, we have a
list of objects to be processed, and we  are  ready  to  run  APPHOT  in
batch  mode.   We  decide to save the output in the file "blue.out".  To
ensure that we have a record of the parameters  used  for  the  fit,  we
first  print  the  APPHOT parameters into the output file, then we start
up the APPHOT batch run.

        ap> lparam apphot > blue.out
        ap> apphot >> blue.out &
        [1]

The batch job is  now  running,  appending  output  lines  to  the  file
"blue.out".   We  can  proceed  to  set up the job for the red image, in
much the same way that we set up the  job  for  the  blue  image.   When
both  jobs  finish,  we  can use the list processing tools to filter out
the good objects and calculate colors.