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
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414
4415
4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
4462
4463
4464
4465
4466
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481
4482
4483
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493
4494
4495
4496
4497
4498
4499
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520
4521
4522
4523
4524
4525
4526
4527
4528
4529
4530
4531
4532
4533
4534
4535
4536
4537
4538
4539
4540
4541
4542
4543
4544
4545
4546
4547
4548
4549
4550
4551
4552
4553
4554
4555
4556
4557
4558
4559
4560
4561
4562
4563
4564
4565
4566
4567
4568
4569
4570
4571
4572
4573
4574
4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585
4586
4587
4588
4589
4590
4591
4592
4593
4594
4595
4596
4597
4598
4599
4600
4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
4611
4612
4613
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623
4624
4625
4626
4627
4628
4629
4630
4631
4632
4633
4634
4635
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647
4648
4649
4650
4651
4652
4653
4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664
4665
4666
4667
4668
4669
4670
4671
4672
4673
4674
4675
4676
4677
4678
4679
4680
4681
4682
4683
4684
4685
4686
4687
4688
4689
4690
4691
4692
4693
4694
4695
4696
4697
4698
4699
4700
4701
4702
4703
4704
4705
4706
4707
4708
4709
4710
4711
4712
4713
4714
4715
4716
4717
4718
4719
4720
4721
4722
4723
4724
4725
4726
4727
4728
4729
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
4786
4787
4788
4789
4790
4791
4792
4793
4794
4795
4796
4797
4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
4811
4812
4813
4814
4815
4816
4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855
4856
4857
4858
4859
4860
4861
4862
4863
4864
4865
4866
4867
4868
4869
4870
4871
4872
4873
4874
4875
4876
4877
4878
4879
4880
4881
4882
4883
4884
4885
4886
4887
4888
4889
4890
4891
4892
4893
4894
4895
4896
4897
4898
4899
4900
4901
4902
4903
4904
4905
4906
4907
4908
4909
4910
4911
4912
4913
4914
4915
4916
4917
4918
4919
4920
4921
4922
4923
4924
4925
4926
4927
4928
4929
4930
4931
4932
4933
4934
4935
4936
4937
4938
4939
4940
4941
4942
4943
4944
4945
4946
4947
4948
4949
4950
4951
4952
4953
4954
4955
4956
4957
4958
4959
4960
4961
4962
4963
4964
4965
4966
4967
4968
4969
4970
4971
4972
4973
4974
4975
4976
4977
4978
4979
4980
4981
4982
4983
4984
4985
4986
4987
4988
4989
4990
4991
4992
4993
4994
4995
4996
4997
4998
4999
5000
5001
5002
5003
5004
5005
5006
5007
5008
5009
5010
5011
5012
5013
5014
5015
5016
5017
5018
5019
5020
5021
5022
5023
5024
5025
5026
5027
5028
5029
5030
5031
5032
5033
5034
5035
5036
5037
5038
5039
5040
5041
5042
5043
5044
5045
5046
5047
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057
5058
5059
5060
5061
5062
5063
5064
5065
5066
5067
5068
5069
5070
5071
5072
5073
5074
5075
5076
5077
5078
5079
5080
5081
5082
5083
5084
5085
5086
5087
5088
5089
5090
5091
5092
5093
5094
5095
5096
5097
5098
5099
5100
5101
5102
5103
5104
5105
5106
5107
5108
5109
5110
5111
5112
5113
5114
5115
5116
5117
5118
5119
5120
5121
5122
5123
5124
5125
5126
5127
5128
5129
5130
5131
5132
5133
5134
5135
5136
5137
5138
5139
5140
5141
5142
5143
5144
5145
5146
5147
5148
5149
5150
5151
5152
5153
5154
5155
5156
5157
5158
5159
5160
5161
5162
5163
5164
5165
5166
5167
5168
5169
5170
5171
5172
5173
5174
5175
5176
5177
5178
5179
5180
5181
5182
5183
5184
5185
5186
5187
5188
5189
5190
5191
5192
5193
5194
5195
5196
5197
5198
5199
5200
5201
5202
5203
5204
5205
5206
5207
5208
5209
5210
5211
5212
5213
5214
5215
5216
5217
5218
5219
5220
5221
5222
5223
5224
5225
5226
5227
5228
5229
5230
5231
5232
5233
5234
5235
5236
5237
5238
5239
5240
5241
5242
5243
5244
5245
5246
5247
5248
5249
5250
5251
5252
5253
5254
5255
5256
5257
5258
5259
5260
5261
5262
5263
5264
5265
5266
5267
5268
5269
5270
5271
5272
5273
5274
5275
5276
5277
5278
5279
5280
5281
5282
5283
5284
5285
5286
5287
5288
5289
5290
5291
5292
5293
5294
5295
5296
5297
5298
5299
5300
5301
5302
5303
5304
5305
5306
5307
5308
5309
5310
5311
5312
5313
5314
5315
5316
5317
5318
5319
5320
5321
5322
5323
5324
5325
5326
5327
5328
5329
5330
5331
5332
5333
5334
5335
5336
5337
5338
5339
5340
5341
5342
5343
5344
5345
5346
5347
5348
5349
5350
5351
5352
5353
5354
5355
5356
5357
5358
5359
5360
5361
5362
5363
5364
5365
5366
5367
5368
5369
5370
5371
5372
5373
5374
5375
5376
5377
5378
5379
5380
5381
5382
5383
5384
5385
5386
5387
5388
5389
5390
5391
5392
5393
5394
5395
5396
5397
5398
5399
5400
5401
5402
5403
5404
5405
5406
5407
5408
5409
5410
5411
5412
5413
5414
5415
5416
5417
5418
5419
5420
5421
5422
5423
5424
5425
5426
5427
5428
5429
5430
5431
5432
5433
5434
5435
5436
5437
5438
5439
5440
5441
5442
5443
5444
5445
5446
5447
5448
5449
5450
5451
5452
5453
5454
5455
5456
5457
5458
5459
5460
5461
5462
5463
5464
5465
5466
5467
5468
5469
5470
5471
5472
5473
5474
5475
5476
5477
5478
5479
5480
5481
5482
5483
5484
5485
5486
5487
5488
5489
5490
5491
5492
5493
5494
5495
5496
5497
5498
5499
5500
5501
5502
5503
5504
5505
5506
5507
5508
5509
5510
5511
5512
5513
5514
5515
5516
5517
5518
5519
5520
5521
5522
5523
5524
5525
5526
5527
5528
5529
5530
5531
5532
5533
5534
5535
5536
5537
5538
5539
5540
5541
5542
5543
5544
5545
5546
5547
5548
5549
5550
5551
5552
5553
5554
5555
5556
5557
5558
5559
5560
5561
5562
5563
5564
5565
5566
5567
5568
5569
5570
5571
5572
5573
5574
5575
5576
5577
5578
5579
5580
5581
5582
5583
5584
5585
5586
5587
5588
5589
5590
5591
5592
5593
5594
5595
5596
5597
5598
5599
5600
5601
5602
5603
5604
5605
5606
5607
5608
5609
5610
5611
5612
5613
5614
5615
5616
5617
5618
5619
5620
5621
5622
5623
5624
5625
5626
5627
5628
5629
5630
5631
5632
5633
5634
5635
5636
5637
5638
5639
5640
5641
5642
5643
5644
5645
5646
5647
5648
5649
5650
5651
5652
5653
5654
5655
5656
5657
5658
5659
5660
5661
5662
5663
5664
5665
5666
5667
5668
5669
5670
5671
5672
5673
5674
5675
5676
5677
5678
5679
5680
5681
5682
5683
5684
5685
5686
5687
5688
5689
5690
5691
5692
5693
5694
5695
5696
5697
5698
5699
5700
5701
5702
5703
5704
5705
5706
5707
5708
5709
5710
5711
5712
5713
5714
5715
5716
5717
5718
5719
5720
5721
5722
5723
5724
5725
5726
5727
5728
5729
5730
5731
5732
5733
5734
5735
5736
5737
5738
5739
5740
5741
5742
5743
5744
5745
5746
5747
5748
5749
5750
5751
5752
5753
5754
5755
5756
5757
5758
5759
5760
5761
5762
5763
5764
5765
5766
5767
5768
5769
5770
5771
5772
5773
5774
5775
5776
5777
5778
5779
5780
5781
5782
5783
5784
5785
5786
5787
5788
5789
5790
5791
5792
5793
5794
5795
5796
5797
5798
5799
5800
5801
5802
5803
5804
5805
5806
5807
5808
5809
5810
5811
5812
5813
5814
5815
5816
5817
5818
5819
5820
5821
5822
5823
5824
5825
5826
5827
5828
5829
5830
5831
5832
5833
5834
5835
5836
5837
5838
5839
5840
5841
5842
5843
5844
5845
5846
5847
5848
5849
5850
5851
5852
5853
5854
5855
5856
5857
5858
5859
5860
5861
5862
5863
5864
5865
5866
5867
5868
5869
5870
5871
5872
5873
5874
5875
5876
5877
5878
5879
5880
5881
5882
5883
5884
5885
5886
5887
5888
5889
5890
5891
5892
5893
5894
5895
5896
5897
5898
5899
5900
5901
5902
5903
5904
5905
5906
5907
5908
5909
5910
5911
5912
5913
5914
5915
5916
5917
5918
5919
5920
5921
5922
5923
5924
5925
5926
5927
5928
5929
5930
5931
5932
5933
5934
5935
5936
5937
5938
5939
5940
5941
5942
5943
5944
5945
5946
5947
5948
5949
5950
5951
5952
5953
5954
5955
5956
5957
5958
5959
5960
5961
5962
5963
5964
5965
5966
5967
5968
5969
5970
5971
5972
5973
5974
5975
5976
5977
5978
5979
5980
5981
5982
5983
5984
5985
5986
5987
5988
5989
5990
5991
5992
5993
5994
5995
5996
5997
5998
5999
6000
6001
6002
6003
6004
6005
6006
6007
6008
6009
6010
6011
6012
6013
6014
6015
6016
6017
6018
6019
6020
6021
6022
6023
6024
6025
6026
6027
6028
6029
6030
6031
6032
6033
6034
6035
6036
6037
6038
6039
6040
6041
6042
6043
6044
6045
6046
6047
6048
6049
6050
6051
6052
6053
6054
6055
6056
6057
6058
6059
6060
6061
6062
6063
6064
6065
6066
6067
6068
6069
6070
6071
6072
6073
6074
6075
6076
6077
6078
6079
6080
6081
6082
6083
6084
6085
6086
6087
6088
6089
6090
6091
6092
6093
6094
6095
6096
6097
6098
6099
6100
6101
6102
6103
6104
6105
6106
6107
6108
6109
6110
6111
6112
6113
6114
6115
6116
6117
6118
6119
6120
6121
6122
6123
6124
6125
6126
6127
6128
6129
6130
6131
6132
6133
6134
6135
6136
6137
6138
6139
6140
6141
6142
6143
6144
6145
6146
6147
6148
6149
6150
6151
6152
6153
6154
6155
6156
6157
6158
6159
6160
6161
6162
6163
6164
6165
6166
6167
6168
6169
6170
6171
6172
6173
6174
6175
6176
6177
6178
6179
6180
6181
6182
6183
6184
6185
6186
6187
6188
6189
6190
6191
6192
6193
6194
6195
6196
6197
6198
6199
6200
6201
6202
6203
6204
6205
6206
6207
6208
6209
6210
6211
6212
6213
6214
6215
6216
6217
6218
6219
6220
6221
6222
6223
6224
6225
6226
6227
6228
6229
6230
6231
6232
6233
6234
6235
6236
6237
6238
6239
6240
6241
6242
6243
6244
6245
6246
6247
6248
6249
6250
6251
6252
6253
6254
6255
6256
6257
6258
6259
6260
6261
6262
6263
6264
6265
6266
6267
6268
6269
6270
6271
6272
6273
6274
6275
6276
6277
6278
6279
6280
6281
6282
6283
6284
6285
6286
6287
6288
6289
6290
6291
6292
6293
6294
6295
6296
6297
6298
6299
6300
6301
6302
6303
6304
6305
6306
6307
6308
6309
6310
6311
6312
6313
6314
6315
6316
6317
6318
6319
6320
6321
6322
6323
6324
6325
6326
6327
6328
6329
6330
6331
6332
6333
6334
6335
6336
6337
6338
6339
6340
6341
6342
6343
6344
6345
6346
6347
6348
6349
6350
6351
6352
6353
6354
6355
6356
6357
6358
6359
6360
6361
6362
6363
6364
6365
6366
6367
6368
6369
6370
6371
6372
6373
6374
6375
6376
6377
6378
6379
6380
6381
6382
6383
6384
6385
6386
6387
6388
6389
6390
6391
6392
6393
6394
6395
6396
6397
6398
6399
6400
6401
6402
6403
6404
6405
6406
6407
6408
6409
6410
6411
6412
6413
6414
6415
6416
6417
6418
6419
6420
6421
6422
6423
6424
6425
6426
6427
6428
6429
6430
6431
6432
6433
6434
6435
6436
6437
6438
6439
6440
6441
6442
6443
6444
6445
6446
6447
6448
6449
6450
6451
6452
6453
6454
6455
6456
6457
6458
6459
6460
6461
6462
6463
6464
6465
6466
6467
6468
6469
6470
6471
6472
6473
6474
6475
6476
6477
6478
6479
6480
6481
6482
6483
6484
6485
6486
6487
6488
6489
6490
6491
6492
6493
6494
6495
6496
6497
6498
6499
6500
6501
6502
6503
6504
6505
6506
6507
6508
6509
6510
6511
6512
6513
6514
6515
6516
6517
6518
6519
6520
6521
6522
6523
6524
6525
6526
6527
6528
6529
6530
6531
6532
6533
6534
6535
6536
6537
6538
6539
6540
6541
6542
6543
6544
6545
6546
6547
6548
6549
6550
6551
6552
6553
6554
6555
6556
6557
6558
6559
6560
6561
6562
6563
6564
6565
6566
6567
6568
6569
6570
6571
6572
6573
6574
6575
6576
6577
6578
6579
6580
6581
6582
6583
6584
6585
6586
6587
6588
6589
6590
6591
6592
6593
6594
6595
6596
6597
6598
6599
6600
6601
6602
6603
6604
6605
6606
6607
6608
6609
6610
6611
6612
6613
6614
6615
6616
6617
6618
6619
6620
6621
6622
6623
6624
6625
6626
6627
6628
6629
6630
6631
6632
6633
6634
6635
6636
6637
6638
6639
6640
6641
6642
6643
6644
6645
6646
6647
6648
6649
6650
6651
6652
6653
6654
6655
6656
6657
6658
6659
6660
6661
6662
6663
6664
6665
6666
6667
6668
6669
6670
6671
6672
6673
6674
6675
6676
6677
6678
6679
6680
6681
6682
6683
6684
6685
6686
6687
6688
6689
6690
6691
6692
6693
6694
6695
6696
6697
6698
6699
6700
6701
6702
6703
6704
6705
6706
6707
6708
6709
6710
6711
6712
6713
6714
6715
6716
6717
6718
6719
6720
6721
6722
6723
6724
6725
6726
6727
6728
6729
6730
6731
6732
6733
6734
6735
6736
6737
6738
6739
6740
6741
6742
6743
6744
6745
6746
6747
6748
6749
6750
6751
6752
6753
6754
6755
6756
6757
6758
6759
6760
6761
6762
6763
6764
6765
6766
6767
6768
6769
6770
6771
6772
6773
6774
6775
6776
6777
6778
6779
6780
6781
6782
6783
6784
6785
6786
6787
6788
6789
6790
6791
6792
6793
6794
6795
6796
6797
6798
6799
6800
6801
6802
6803
6804
6805
6806
6807
6808
6809
6810
6811
6812
6813
6814
6815
6816
6817
6818
6819
6820
6821
6822
6823
6824
6825
6826
6827
6828
6829
6830
6831
6832
6833
6834
6835
6836
6837
6838
6839
6840
6841
6842
6843
6844
6845
6846
6847
6848
6849
6850
6851
6852
6853
6854
6855
6856
6857
6858
6859
6860
6861
6862
6863
6864
6865
6866
6867
6868
6869
6870
6871
6872
6873
6874
6875
6876
6877
6878
6879
6880
6881
6882
6883
6884
6885
6886
6887
6888
6889
6890
6891
6892
6893
6894
6895
6896
6897
6898
6899
6900
6901
6902
6903
6904
6905
6906
6907
6908
6909
6910
6911
6912
6913
6914
6915
6916
6917
6918
6919
6920
6921
6922
6923
6924
6925
6926
6927
6928
6929
6930
6931
6932
6933
6934
6935
6936
6937
6938
6939
6940
6941
6942
6943
6944
6945
6946
6947
6948
6949
6950
6951
6952
6953
6954
6955
6956
6957
6958
6959
6960
6961
6962
6963
6964
6965
6966
6967
6968
6969
6970
6971
6972
6973
6974
6975
6976
6977
6978
6979
6980
6981
6982
6983
6984
6985
6986
6987
6988
6989
6990
6991
6992
6993
6994
6995
6996
6997
6998
6999
7000
7001
7002
7003
7004
7005
7006
7007
7008
7009
7010
7011
7012
7013
7014
7015
7016
7017
7018
7019
7020
7021
7022
7023
7024
7025
7026
7027
7028
7029
7030
7031
7032
7033
7034
7035
7036
7037
7038
7039
7040
7041
7042
7043
7044
7045
7046
7047
7048
7049
7050
7051
7052
7053
7054
7055
7056
7057
7058
7059
7060
7061
7062
7063
7064
7065
7066
7067
7068
7069
7070
7071
7072
7073
7074
7075
7076
7077
7078
7079
7080
7081
7082
7083
7084
7085
7086
7087
7088
7089
7090
7091
7092
7093
7094
7095
7096
7097
7098
7099
7100
7101
7102
7103
7104
7105
7106
7107
7108
7109
7110
7111
7112
7113
7114
7115
7116
7117
7118
7119
7120
7121
7122
7123
7124
7125
7126
7127
7128
7129
7130
7131
7132
7133
7134
7135
7136
7137
7138
7139
7140
7141
7142
7143
7144
7145
7146
7147
7148
7149
7150
7151
7152
7153
7154
7155
7156
7157
7158
7159
7160
7161
7162
7163
7164
7165
7166
7167
7168
7169
7170
7171
7172
7173
7174
7175
7176
7177
7178
7179
7180
7181
7182
7183
7184
7185
7186
7187
7188
7189
7190
7191
7192
7193
7194
7195
7196
7197
7198
7199
7200
7201
7202
7203
7204
7205
7206
7207
7208
7209
7210
7211
7212
7213
7214
7215
7216
7217
7218
7219
7220
7221
7222
7223
7224
7225
7226
7227
7228
7229
7230
7231
7232
7233
7234
7235
7236
7237
7238
7239
7240
7241
7242
7243
7244
7245
7246
7247
7248
7249
7250
7251
7252
7253
7254
7255
7256
7257
7258
7259
7260
7261
7262
7263
7264
7265
7266
7267
7268
7269
7270
7271
7272
7273
7274
7275
7276
7277
7278
7279
7280
7281
7282
7283
7284
7285
7286
7287
7288
7289
7290
7291
7292
7293
7294
7295
7296
7297
7298
7299
7300
7301
7302
7303
7304
7305
7306
7307
7308
7309
7310
7311
7312
7313
7314
7315
7316
7317
7318
7319
7320
7321
7322
7323
7324
7325
7326
7327
7328
7329
7330
7331
7332
7333
7334
7335
7336
7337
7338
7339
7340
7341
7342
7343
7344
7345
7346
7347
7348
7349
7350
7351
7352
7353
7354
7355
7356
7357
7358
7359
7360
7361
7362
7363
7364
7365
7366
7367
7368
7369
7370
7371
7372
7373
7374
7375
7376
7377
7378
7379
7380
7381
7382
7383
7384
7385
7386
7387
7388
7389
7390
7391
7392
7393
7394
7395
7396
7397
7398
7399
7400
7401
7402
7403
7404
7405
7406
7407
7408
7409
7410
7411
7412
7413
7414
7415
7416
7417
7418
7419
7420
7421
7422
7423
7424
7425
7426
7427
7428
7429
7430
7431
7432
7433
7434
7435
7436
7437
7438
7439
7440
7441
7442
7443
7444
7445
7446
7447
7448
7449
7450
7451
7452
7453
7454
7455
7456
7457
7458
7459
7460
7461
7462
7463
7464
7465
7466
7467
7468
7469
7470
7471
7472
7473
7474
7475
7476
7477
7478
7479
7480
7481
7482
7483
7484
7485
7486
7487
7488
7489
7490
7491
7492
7493
7494
7495
7496
7497
7498
7499
7500
7501
7502
7503
7504
7505
7506
7507
7508
7509
7510
7511
7512
7513
7514
7515
7516
7517
7518
7519
7520
7521
7522
7523
7524
7525
7526
7527
7528
7529
7530
7531
7532
7533
7534
7535
7536
7537
7538
7539
7540
7541
7542
7543
7544
7545
7546
7547
7548
7549
7550
7551
7552
7553
7554
7555
7556
7557
7558
7559
7560
7561
7562
7563
7564
7565
7566
7567
7568
7569
7570
7571
7572
7573
7574
7575
7576
7577
7578
7579
7580
7581
7582
7583
7584
7585
7586
7587
7588
7589
7590
7591
7592
7593
7594
7595
7596
7597
7598
7599
7600
7601
7602
7603
7604
7605
7606
7607
7608
7609
7610
7611
7612
7613
7614
7615
7616
7617
7618
7619
7620
7621
7622
7623
7624
7625
7626
7627
7628
7629
7630
7631
7632
7633
7634
7635
7636
7637
7638
7639
7640
7641
7642
7643
7644
7645
7646
7647
7648
7649
7650
7651
7652
7653
7654
7655
7656
7657
7658
7659
7660
7661
7662
7663
7664
7665
7666
7667
7668
7669
7670
7671
7672
7673
7674
7675
7676
7677
7678
7679
7680
7681
7682
7683
7684
7685
7686
7687
7688
7689
7690
7691
7692
7693
7694
7695
7696
7697
7698
7699
7700
7701
7702
7703
7704
7705
7706
7707
7708
7709
7710
7711
7712
7713
7714
7715
7716
7717
7718
7719
7720
7721
7722
7723
7724
7725
7726
7727
7728
7729
7730
7731
7732
7733
7734
7735
7736
7737
7738
7739
7740
7741
7742
7743
7744
7745
7746
7747
7748
7749
7750
7751
7752
7753
7754
7755
7756
7757
7758
7759
7760
7761
7762
7763
7764
7765
7766
7767
7768
7769
7770
7771
7772
7773
7774
7775
7776
7777
7778
7779
7780
7781
7782
7783
7784
7785
7786
7787
7788
7789
7790
7791
7792
7793
7794
7795
7796
7797
7798
7799
7800
7801
7802
7803
7804
7805
7806
7807
7808
7809
7810
7811
7812
7813
7814
7815
7816
7817
7818
7819
7820
7821
7822
7823
7824
7825
7826
7827
7828
7829
7830
7831
7832
7833
7834
7835
7836
7837
7838
7839
7840
7841
7842
7843
7844
7845
7846
7847
7848
7849
7850
7851
7852
7853
7854
7855
7856
7857
7858
7859
7860
7861
7862
7863
7864
7865
7866
7867
7868
7869
7870
7871
7872
7873
7874
7875
7876
7877
7878
7879
7880
7881
7882
7883
7884
7885
7886
7887
7888
7889
7890
7891
7892
7893
7894
7895
7896
7897
7898
7899
7900
7901
7902
7903
7904
7905
7906
7907
7908
7909
7910
7911
7912
7913
7914
7915
7916
7917
7918
7919
7920
7921
7922
7923
7924
7925
7926
7927
7928
7929
7930
7931
7932
7933
7934
7935
7936
7937
7938
7939
7940
7941
7942
7943
7944
7945
7946
7947
7948
7949
7950
7951
7952
7953
7954
7955
7956
7957
7958
7959
7960
7961
7962
7963
7964
7965
7966
7967
7968
7969
7970
7971
7972
7973
7974
7975
7976
7977
7978
7979
7980
7981
7982
7983
7984
7985
7986
7987
7988
7989
7990
7991
7992
7993
7994
7995
7996
7997
7998
7999
8000
8001
8002
8003
8004
8005
8006
8007
8008
|
IRAF (Mar02) V2.12EXPORT Release Notes IRAF (Mar02)
IRAF V2.12EXPORT Release Notes
January 25, 2002
Updated: March 25, 2002
These release notes provide a summary of the major changes in V2.12.
This is a major release of IRAF and will be available for all supported
platforms. More detailed technical documentation of all system changes
will be found in the 'notes.v211' and 'notes.v212' files in the
iraf$doc and iraf$local directories. Detailed revisions notes for each
application package are in the package directories in a file called
Revisions, e.g. apphot$Revisions.
1. Highlights of This Release
2. IRAF System Revisions Summary
3. Core IRAF Revisions Summary
3.1 New Tasks
3.2 Existing tasks with new parameters/defaults
3.3 Existing tasks with new capabilities
4. NOAO Package Revisions Summary
4.1 New NOAO Packages
4.2 New NOAO Package Tasks
4.3 Existing tasks with new parameters/defaults
4.4 Existing tasks with new capabilities
5. General Package Changes
6. General Task Changes
7. Parameter File Changes
8. Details of Major System Changes
8.1 FITS Kernel Changes
8.2 Large Image Support
8.3 Virtual Memory Cache
8.4 New Developer libraries
9. System Changes Which May Affect You
9.1 Shared Library Version Incremented
9.2 External Package Recompilation
9.3 Parameter File Changes
9.4 Installation Script Changes
9.5 Help System Changes
9.6 Image Display Changes
9.7 PLIO Changes
9.8 New Environment Variables Changes
1. Highlights of This Release
o Pixel Mask Support Added to FITS Kernel
The FITS kernel was modified to add support for storing images in
extensions as compressed pixel masks using the binary table extension.
These masks may be accessed like any other image and allow for tasks
to more easily store bad-pixel masks, regions masks, or error arrays
in the same image file as the science data.
o New Pixel Mask Tasks
Several new tasks have been added to the system PROTO package for
manipulating pixel masks:
o MIMSTATISTICS allows image statistics to be computed while
rejecting pixels specified by an input mask.
o MSKEXPR task is a general-purpose mask expression evaluator
similar to IMEXPR for images, but has builtin boolean region
functions which can be used to set values inside or outside
of certain geometric shapes.
o MSKREGIONS creates an output mask based on an input text de-
scription. Region descriptions can be composed of geometric
shapes and logical operation on mask regions.
o OBJMASKS in the NPROTO package is a new task for detecting objects
in an image and creating an output catalog or pixel mask of
found objects.
o Shared Memory Limitations Eased
The IMAGES and DAOPHOT packages executables are now linked statically
to remove per-process memory limitations imposed by the IRAF shared
library on Sun and Dec Alpha systems. Previously tasks such as
DAOFIND and IMCOMBINE were limited to 268Mb on Sun systems, these
tasks can now use up to the machine memory limits.
o Image I/O Buffer Sizes Increased
Support for large image I/O was improved by changes to the internal
buffer sizes. These buffers may automatically adjust to optimal
values for the image being accessed, however new environment variables
may be set to further tune the buffers at the user level. Where
needed applications tasks were modified to take advantage of these
buffer size changes to force the imio buffer to be the size of the
input image.
o Simplified Installation Script
The install script was rewritten to clarify the output and provide
some basic checking of the IRAF system setup prior to installation,
and to do some of the most common post-install configuration. The
script will print an explanation of any errors it finds and suggest
corrective action, the hope is this will lead the user past some of
the most common installation errors.
In addition, the SYSINFO diagnostic script which does more extensive
checking of the system is also now part of the distribution. This
script can be used to verify the system once the install is complete,
or to generate a report of the system configuration if needed by
site support. An UNINSTALL script to remove iraf command links and
files created by the INSTALL script is also available to remove IRAF
from a machine. All scripts are now installed in the hlib$ directory.
o New HELP GUI and Output Options
The HELP task was enhanced to have a new GUI option for XGterm
users. This is essentially the XHELP task which has been available
in the GUIAPPS external package for some time, however the task is
fully backwards compatible and the text-mode output is still the
default. As part of this work, help pages may also now be formatted
as either HTML or Postscript for web presentation or pretty-printing
to a hardcopy device. The LROFF task was similarly modified to
provide direct conversion of lroff text sources.
o DISPLAY Task Changes
As part of the recent X11IRAF enhancements, the DISPLAY task and
others such as IMEXAMINE which interact with the display server were
modified to take advantage of the new features in XImtool V1.3.
These include support for 16 frame buffers (increased from 4 in
previous versions), and enhanced WCS readout capabilities. The
changes are fully backwards compatible for use with older XImtool
versions or display servers such as SAOimage, SAOtng, or DS9 which
have not yet been updated.
X11IRAF V1.3 is being released simultaneously (but still separately)
with IRAF V2.12. While V2.12 is fully compatible with older versions
of X11IRAF, however users will need to upgrade both systems to take
full advantage of all the new features. Users should consult the
X11IRAF Release Notes for details on what has changed there.
o New Packages
Several new packages are available in this release (see the NOAO
package change notes below for details):
- A new ASTCAT package for extracting astrometric and photometric
calibration data from remote or local catalogs was added to NOAO.
- A new CRUTIL package for doing cosmic ray detection and removal
package was installed in the IMRED package.
- A new QUADRED reduction package for QUAD format data was installed
in the IMRED package. This is a generalized replacement for the
ARED.QUAD and XCCDRED external packages for processing CTIO and
ESO FORS1 multi-amplifier data.
- A new OBSUTIL package was installed in NOAO. This is a collection
of tasks from various external packages which are useful to plan or
carry out observations.
o New Developer Libraries.
Several new libraries are available for SPP developers:
- PSIO is a new Postscript text generation library installed in
sys$psio.
- CATQUERY is a remote astrometric/photometric catalog access lib
installed in the XTOOLS utility library.
- SKYWCS is a sky coordinate transformation library installed in
the XTOOLS utility library.
2. IRAF System Revisions Summary
o The IRAF shared library version number was incremented for SunOS
and Solaris systems. See below for details on how this change
will affect external packages and locally-compiled software.
o The maximum number of nodes in a local iraf network was increased
from 320 to 512.
o The max number of open files in FIO, FIO_MAXFD, was increased from
256 to 4096. This is the "hard limit" on the maximum number of
open files in an IRAF process.
o The maximum number of host level open files, MAXOFILES, was increased
from 64 to 256. This is the maximum number of files that can be
simultaneously open at the host level. It determines the maximum
number of files that can be simultaneously open by an IRAF process
in the usual case.
o The number of keywords in a group header block for STF images (i.e.
the MAX_PCOUNT) was increased from 50 to 99 in the STF image kernel.
o Added support for the bitwise boolean operators: '&' (and), '|' (or),
'^' (xor), and '~' (not/complement), to vectory expression evaluator
fmtio$evvexpr.gy. The IMEXPR task was modified to allow these new
bitwise operations.
o Added new vector operators to VOPS library: alan, alank (logical AND)
and alor, alork (logical OR). These take any integer data as input
(short, int, long) and return a logical (expressed as int) result.
o The 'imextn' environment variable will now accept upper-case extensions
to specify image types.
o Host Command Execution: The way command line arguments are parsed
was modified to make it easier to set the value of a string parameter
to the null string. Whitespace is still skipped in @par files
as before, however null strings are valid parameter values and will
no longer cause a parameter prompt.
o The MKPKG special file list link support was enhanced to allow replacing
LFLAGS (the link flags variable) as well as the entire link line.
This makes is possible to write special-file list entries for packages
which need e.g. to be compiled nonshared on certain platforms without
creating a platform specific mkpkg file for the package itself.
o The HSI zawset.c routine which controls a process working set size was
modified to automatically detect the physical size of system memory
(with a maximum return value of 2Gb). The hard upper limit on memory
utilization defined by the unix kernel can be limited either by the
value return by the IRAF kernel (up to 90% of physical memory), or by
the value set in the user environment variable MAXWORKSET (given in
units of Mb).
o New stdimage display devices were added to support the display of Gemini
GMOS CCD data. These devices are named 'imt45' thru 'imt49' and
correspond to the following frame buffer sizes:
imt45 2080 x 4644 # imt45|imtgmosccd
imt46 6400 x 4644 # imt46|imtgmos
imt47 3200 x 2322 # imt47|imtgmos2
imt48 1600 x 1161 # imt48|imtgmos4
imt49 800 x 581 # imt49|imtgmos8
3. CORE IRAF REVISIONS SUMMARY
3.1 New Tasks
imcoords.ccget - extract objects from a test file catalog
imcoords.ccstd - transform to and from standard astrometric coordinates
proto.mimstatistics - do image statistics through a mask
proto.rskysub - sky subtract images using running mean or median
proto.mskexpr - general mask expression evaluator
proto.mskregions - create a mask from a list of region specifications
3.2 Existing Tasks with New Parameters or New Parameter Defaults
immatch.imcentroid - new parameter maxshift
immatch.imalign - new parameter maxshift
immatch.geomap - new parameter maxiter, default reject = 3.0 not INDEF
imcoords.ccmap - new parameter maxiter, default reject = 3.0 not INDEF
imcoords.imcctran - new parameter longpole
imutil.hedit - new parameter addonly
imutil.imstatistics - new parameters nclip, lsigma, usigma, cache
3.3 Existing Tasks with New Capabilities
immatch.imcentroid - optionally rejects objects whose centers wander too much
immatch.imalign - optionally rejects objects whose centers wander too much
immatch.geomap - iterative rejection capability added
imcoords.ccmap - iterative rejection capability added
imcoords.imcctran - support for non-zenithal projections added
imutil.hedit - support for add keyword only if new option
imutil.imstatistics - support for iterative rejection and memory caching added
imutil.imexpr - support for bitwise operators or, and, xor, and not added
4. NOAO PACKAGE REVISIONS SUMMARY
4.1 New NOAO Packages
astcat - Astronomical catalog and surveys access package
crutil - Cosmic ray detection and removal package
obsutil - Observing utilities package
4.2 New NOAO Package Tasks
apphot.pcalc - Do arithmetic operations on a list of apphot databases
apphot.pconvert - Convert a text database to a tables database
apphot.pdump - Print selected fields from a list of apphot databases
apphot.pexamine - Interactively examine and edit an apphot database
apphot.prenumber - Renumber stars in an apphot database
apphot.pselect - Select records from an apphot database
apphot.psort - Sort an apphot database
astcat.aclist - List the supported astrometric catalogs
astcat.agetcat - Extract astrometry files from astrometric catalogs
astcat.afiltcat - Filter astrometry files derived from astrometric catalogs
astcat.adumpcat - Catalog access debugging task
astcat.aslist - List the supported image surveys
astcat.agetim - Extract FITS images from image surveys
astcat.ahedit - Initialize the image wcs and set standard keywords
astcat.aimfind - Select images containing catalog objects
astcat.adumpim - Image survey access debugging task
astcat.aregpars - Default region parameter set
astcat.acatpars - Default astrometry file format parameter set
astcat.afiltpars - Default astrometry file filtering parameters
astcat.aimpars - Default image data parameters
astcat.awcspars - Default image wcs parameters
crutil.cosmicrays - Remove cosmic rays using flux ratio algorithm
crutil.craverage - Detect CRs against average and avoid objects
crutil.crcombine - Combine multiple exposures to eliminate cosmic rays
crutil.credit - Interactively edit cosmic rays using an image display
crutil.crfix - Fix cosmic rays in images using cosmic ray masks
crutil.crgrow - Grow cosmic rays in cosmic ray masks
crutil.crmedian - Detect and replace cosmic rays with median filter
crutil.crnebula - Detect and replace cosmic rays in nebular data
obsutil.psfmeasure - Measure PSF sizes from stellar images
obsutil.specfocus - Determine spectral focus and alignment variations
obsutil.starfocus - Determine direct focus variations from stellar images
obsutil.ccdtime - CCD photometry exposure time calculator
obsutil.pairmass - Plot airmass vs time for a given coordinate
obsutil.sptime - Spectroscopic exposure time calculator
obsutil.specpars - Spectrograph instrument parameters for sptime
obsutil.bitcount - Accumulate the bit statistics for a list of images
obsutil.findgain - Estimate the gain and readnoise of a CCD
obsutil.shutcor - Shutter correction from images of varying exposure times
nproto.objmasks - detect and catalog objects in image
4.3 Existing Packages and Tasks with New Parameters or New Parameter Defaults
apphot - new package parameters wcsin, wcsout, and cache
apphot.center - new parameters wcsin, wcsout, cache
apphot.daofind - new parameters wcsout, cache
apphot.fitpsf - new parameters wcsin, wcsout, cache
apphot.fitsky - new parameters wcsin, wcsout, cache
apphot.phot - new parameters wcsin, wcsout, cache
apphot.polymark - new parameters wcsin, wcsout, cache
apphot.polyphot - new parameters wcsin, wcsout, cache
apphot.qphot - new parameters wcsin, wcsout, cache
apphot.radprof - new parameters wcsin, wcsout, cache
apphot.wphot - new parameters wcsin, wcsout, cache
apphot.txdump - replaced by pdump, available as a hidden task
astutil.setairmass - new parameters ra, dec, equinox, st, ut, scale
daophot - new package parameters wcsin, wcsout, wcspsf, and cache
daophot.addstar - new parameters wcsin, wcsout, wcspsf, and cache
daophot.allstar - new parameters wcsin, wcsout, and wcspsf
daophot.daoedit - new parameters cache
daophot.daofind - new parameters wcsout, and cache
daophot.group - new parameters wcsin, wcsout, wcspsf, and cache
daophot.nstar - new parameters wcsin, wcsout, wcspsf, and cache
daophot.peak - new parameters wcsin, wcsout, wcspsf, and cache
daophot.phot - new parameters wcsin, wcsout, and cache
daophot.psf - new parameters wcsin, wcsout, and cache
daophot.substar - new parameters wcsin, wcsout, and cache
4.4 Existing Tasks with New Capabilities
apphot.center - coordinate system support, optional image cacheing
apphot.daofind - coordinate system support, optional image cacheing
apphot.fitpsf - coordinate system support, optional image cacheing
apphot.fitsky - coordinate system support, optional image cacheing
apphot.phot - coordinate system support, optional image cacheing
apphot.polymark - coordinate system support, optional image cacheing
apphot.polyphot - coordinate system support, optional image cacheing
apphot.qphot - coordinate system support, optional image cacheing
apphot.radprof - coordinate system support, optional image cacheing
apphot.wphot - coordinate system support, optional image cacheing
astutil.setairmass - ra, dec, equinox, st, ut, scale are no longer hardwired
astutil.rvcorrect - more flexibility in setting ut
daophot.addstar - coordinate system support, optional image cacheing
daophot.allstar - coordinate system support
daophot.daoedit - optional image cacheing
daophot.daofind - coordinate system support, optional image cacheing
daophot.group - coordinate system support, optional image cacheing
daophot.nstar - coordinate system support, optional image cacheing
daophot.peak - coordinate system support, optional image cacheing
daophot.phot - coordinate system support, optional image cacheing
daophot.psf - coordinate system support, optional image cacheing
daophot.substar - coordinate system support, optional image cacheing
5. General Package Changes
NOAO
ONEDSPEC
More than 999 apertures are now allowed.
APPHOT
Coordinate Support:
All the apphot tasks have been modified to accept input coordinates
in the logical, tv, physical, or world systems, and to write output
coordinates in the logical, tv, or physical coordinate systems. One
consequence of this is that the apphot tasks will now work correctly
on image sections in interactive mode. Another is that users can now
work directly on image sections while preserving the coordinate
system of the parent image.
Image Cacheing Support:
All the apphot tasks which accept image pixel input have been mod-
ified to optional cache the entire input image in memory. Cacheing
may significantly improve the performance of tasks where many random
access operations are performed.
File and image name directory information removed from output files
All the apphot tasks have been modified to strip directory infor-
mation from the image and coordinate file names written to the output
files, to the terminal, and to the plot headers. The colon commands
will still read and write full image and coordinate file path names.
New PTOOLS Tasks Added
The ptools package tasks pcalc, pconvert, pdump, prenumber, pselect
and psort were added to the apphot package. The functionality of the
old txdump task as been replaced by the pdump. TXDUMP is still avail-
able as a hidden task.
ASTCAT
The astcat package is a set of tasks for extracting astrometric and
photometric calibration data from remote or local catalogs, filtering
the data, extracting FITS images from remote or local surveys, and adding
standard keywords to the extracted images. There is also a task for
selecting images which contain catalog objects and locating the catalog
objects in the image.
IMRED.CRUTIL
Cosmic ray detection and removal package. This package includes new
tasks and links to tasks from other package. It replaces the CRUTIL
external package.
IMRED.QUADRED
Reduction package for QUAD format data. This replaces the ARED.QUAD
and XCCDRED external packages for processing CTIO and ESO FORS1 multi-
amplifier data.
DAOPHOT
Coordinate Support
All the daophot tasks have been modified to accept input coordinates
in the logical, tv, physical, or world systems, and to write the output
coordinates in the logical, tv, or physical coordinate systems. One
consequence of this is that the daophot tasks will now work correctly
on image sections in interactive mode. Another is that users can now
work directly on image sections while preserving the coordinate
system of the parent image.
Image Cacheing Support
All the daophot tasks which accept image pixel input have been modified
to optionally cache the entire input image in memory. Cacheing signif-
icantly improves the performance of the tasks when many random access
operations are performed. The cacheing already performed by the
ALLSTAR task is unchanged.
File and image name directory information removed from output files
All the daophot tasks have been modified to strip directory information
from the image and coordinate file names written to the output files,
to the terminal, and to the plot headers. The colon commands will still
read and write full image and coordinate file path names.
OBSUTIL
New observing utilities package. This collects tasks from the NMISC,
SPECTIME, PROTO, and NLOCAL external package which are useful to
plan or carry out observations. The new tasks are:
PSFMEASURE STARFOCUS SPECFOCUS CCDTIME
PAIRMASS SPTIME BITCOUNT FINDGAIN
SHUTCOR
OBSOLETE
o Added tasks OIMCOMBINE and OIMSTATISTICS which are the previous
versions from V2.113b system
o Deleted the ODISPLAY task
6. General Task Changes
NOAO
ONEDSPEC.SPLOT
Rather than refusing to evaluate errors when there is negative data,
negative data is treated as zero.
ASTUTIL.SETAIRMASS
Modified to have greater flexibility in selecting the keyword defining
the universal time. New parameters define the keywords for RA, dec,
equinox, siderial time, universal time, and astrospheric scale height.
ASTUTIL.RVCORRECT
Modified to have greater flexibility in selecting the keyword defining
the universal time.
IMRED.ECHELLE.ECIDENTIFY
Help page describes how to externally evaluate the dispersion fcns.
IMRED.CCREDRED.COSMISRAYS
Task was removed (see CRUTIL)
NPROTO.FINDGAIN
Task was removed (see OBSUTIL)
NPROTO.OBJMASKS
This is a new task for detecting objects in an image and creating
an output catalog or pixel mask of found objects.
TWODSPEC.LONGSLIT.FITCOORDS
- Help page describes the contents of the database and how to ext-
ernally evaluate the fits.
- The RMS is shown in the graph title and in the :show output.
TWODSPEC.APEXTRACT.APEDIT
When there is just one aperture the background regions are shown
on the graph without needing to enter the 'b' background mode.
IMAGES
TV.DISPLAY
- The mask overlay feature when the displayed image is a reduction of
mask (e.g. a block average) now uses the maximum of all mask pixels
within the display pixel.
- The task will now allow up to 16 frame buffers to be used for the
display if allowed by the server. (Currently requires XIMtool V1.3).
TV.IMEXAMINE
- A new key 't' allows output of a region centered on the cursor as an
image for further analysis by other programs.
- The task will now allow up to 16 frame buffers to be used for the
display if allowed by the server. (Currently requires XIMtool V1.3).
- Cursor readback will now properly detect the correct image when more
than one image is displayed per frame, e.g. in a mosaic. (Currently
requires XIMtool V1.3).
IMMATCH.IMCOMBINE
- New parameters "headers", "bpmasks", "rejmasks", "nrejmasks", and
"expmasks" provide additional types of output. The old parameters
"rejmask" and "plfile" were removed. The new "nrejmasks" parameter
corresponds to the old "plfile" and the new "rejmasks" parameter
corresponds to the old "rejmask".
- There is a new "combine" type "sum" for summing instead of averaging
the final set of offset, scaled, and weighted pixels.
- There is a new parameter "outlimits" to allow output of a subregion
of the full output. This is useful for raster surveys with large
numbers of images.
- Additional keywords may appear in the output headers.
- Scaling is now done relative to the first image rather than an average
over the images. This is done so that flux related keywords such as
exposure time and airmass remain representative.
- A median calculation was made faster.
- The previous version is available in the OBSOLETE package.
IMMATCH.IMCENTROID
IMMATCH.IMALIGN
A new parameter maxshift has been added to the imcentroid and imalign
tasks. Maxshift defines the maximum permitted difference between the
predicted and computed shifts. It is used to reject objects whose
positions have wandered too far from the predicted positions.
IMMATCH.GEOMAP
IMCOORDS.CCMAP
An iterative rejection capability has been added to the geomap and
ccmap tasks. The new parameter maxiter in combination with the existing
parameter reject define the rejection parameter. The default value of
the reject parameter has been changed from INDEF to 3.0.
The colon command ":order <value>" has been added to the geomap and ccmap
tasks. The new command enables the user to change all the order parameters
simultaneously when experimenting with different fitting functions.
IMCOORDS.STARFIND
The starfind task background estimation algorithm has been modified so
that it no longer depends on the value and density of the central pixel.
IMCOORDS.IMCCTRAN
Support for non-zenithal projections has been added to the imcctran task.
The previous technique of rotating the cd matrix does not work properly
for these functions. The new parameter longpole was added to imcctran.
Longpole enables the user to select either the cd matrix or longpole /
latpole method for transforming zenithal projections.
IMCOORDS.CCGET
The new task ccget was added to the imcoords package. Ccget extracts
objects in a user specified region from a a simple text file catalog.
IMCOORDS.CCSTD
The task ccstd was added to the imcoords package. Ccstd transforms pixel
and celestial coordinates to standard coordinates and vice versa.
IMUTIL.HEDIT
The new parameter addonly was added to hedit task. The addonly switch
is used to add a parameter to the image header only if it does not
already exist. The addonly switch has a precedence intermediate between
the add and delete switches.
IMUTIL.IMSTATISTICS
An interative rejection capability has been added to the imstatistics
task. The new parameters nclip, lsigma, and usigma define the rejection
parameters. A memory cacheing option was also added to imstatistics in
order to optionally speed up performance if iterative rejection is en-
abled or the midpt/mode is computed.
IMUTIL.IMEXPR
Support for the bitwise operators or (|), and (&), exclusive or (^), and
not (~) has been added to the imexpr task. The logical operators or (||)
and and (&&) have ben made truly logical i.e. they return 0's or 1's,
rather than results of a bitwise or and and.
PROTO
MIMSTATISTICS
The new task mimstatistics has been added to the proto package.
Mimstatistics does image statistics through a mask.
RSKYSUB
The new task rskysub was added to the proto package. Rskysub does a
running mean or median sky subtraction on an ordered list of images
using optional background scaling and object masking.
MSKEXPR
The new task mskexpr has been added to the proto package. Mskexpr
creates a new mask from a user supplied expression, an optional
reference image, and an optional reference mask.
MSKREGIONS
The new task mskregions has been added to the proto package. Mskregions
creates a new mask or modifies an existing mask using a list of region
definitions or region expressions.
XTOOLS
SKYWCS
A new library skywcs has been added to the xtools package. The skywcs
library is a set of routines for managing image and catalog celestial
coordinate systems and for transforming from one celestial coordinate
system to another. Skywcs is layered on the Starlink Positional
Astronomy library slalib which is installed in the iraf math package.
CATQUERY
A new library catquery was added to the xtools package. The catquery
library is a set of routines for doing local and remote catalog and
image survey access.
SYSTEM
HELP
Task was modified to call the XHELP code to run the GUI version of
the task if requested. Task output is the same if the device
remains the default 'terminal' value, however resetting the 'device'
parameter to one of 'gui', 'html', or 'ps' will either spawn the GUI
task under xgterm or print the converted help page to the stdout.
LROFF
The task was enhanced with a new 'format' parameter that allows the
text to be formatted as one of: plain-text, HTML, or Postscript.
7. Parameter File Changes
In the tables below each parameter change is identified with one of the
following codes followed by task name and the description of the change.
* n = new parameter
* c = changed/modified parameter
* d = deleted parameter
CL
n cl Added the new CL parameter "release". This
is a string valued parameter with values such
as "2.11.3a", "2.12", "3.0" etc. This differs
from "version" which is a descriptive string
such as "NOAO/IRAF V2.11.3 EXPORT". There can
be multiple releases of one version of the
software, and "release" specifies exactly what
build the software is. The release strings are
composed in such a way that they can be used
in expressions, e.g. (release >= 2.11.3) would
be true for IRAF V2.11.3 and all subsequent
releases.
DATAIO
c dataio.export Made the 'format' parameter automatic mode
c dataio.import Made the 'format' parameter automatic mode
IMAGES
n imcoords.imcctran Added a new parameter longpole to the imcctran
task. If longpole=yes then coordinate transfor-
mations with zenithal projections will be rot-
ated using longpole rather than the CD matrix.
c immatch.wregister Fixed boundary option typo, "refect" to "reflect".
c immatch.sregister Fixed boundary option typo, "refect" to "reflect".
n immatch.imcentroid Added a new parameter maxshift to the imcentroid
immatch.imalign and imalign tasks. Maxshift is the maximum perm-
itted difference between the computed and predicted
shifts. Maxshift can be used to reject objects whose
centers have wandered too far from the expected
center. By default maxshift is undefined.
n immatch.geomap Added a new parameter maxiter to the geomap and
immatch.ccmap ccmap tasks. Maxiter defines the maximum number of
rejection iterations and has a default value of 0
for no rejection.
c immatch.geomap Changed the default value of the ccmap and geomap
c immatch.ccmap parameter reject from INDEF to 3.0.
c immatch.imcombine Numerous changes, see details above
c imgeom.imlintran Changed the nrows argument names to nlines
n imutil.hedit Added a new addonly parameter to the hedit task. If
addonly is set a new field will only be added to
the image header if it does not already exist.
n tv.imexamine Added new parameters 'output', 'ncoutput', and
'nloutput' used by the new 't' keystroke when
outputting an image section centered on the cursor.
SYSTEM
n help New parameters required for GUI options, output
formats for HTML/PS, printer, etc.
n lroff Added new 'format' parameter for HTML/PS output
UTILITIES
c utilities.surfit Added support for the half cross-terms option to
the surfit task. This involved changing the type
of the xterms parameter from boolen (yes/no) to
string (none,half,full).
NOAO
ASTUTIL
n astutil.setairmass new parameters ra, dec, equinox, st, ut, scale
DIGIPHOT
n apphot new package parameters wcsin, wcsout, and cache
n apphot.center new parameters wcsin, wcsout, cache
n apphot.daofind new parameters wcsout, cache
n apphot.fitpsf new parameters wcsin, wcsout, cache
n apphot.fitsky new parameters wcsin, wcsout, cache
n apphot.phot new parameters wcsin, wcsout, cache
n apphot.polymark new parameters wcsin, wcsout, cache
n apphot.polyphot new parameters wcsin, wcsout, cache
n apphot.qphot new parameters wcsin, wcsout, cache
n apphot.radprof new parameters wcsin, wcsout, cache
n apphot.wphot new parameters wcsin, wcsout, cache
n daophot new package params wcsin, wcsout, wcspsf, and cache
n daophot.addstar new parameters wcsin, wcsout, wcspsf, and cache
n daophot.allstar new parameters wcsin, wcsout, and wcspsf
n daophot.daoedit new parameters cache
n daophot.daofind new parameters wcsout, and cache
n daophot.group new parameters wcsin, wcsout, wcspsf, and cache
n daophot.nstar new parameters wcsin, wcsout, wcspsf, and cache
n daophot.peak new parameters wcsin, wcsout, wcspsf, and cache
n daophot.phot new parameters wcsin, wcsout, and cache
n daophot.psf new parameters wcsin, wcsout, and cache
n daophot.substar new parameters wcsin, wcsout, and cache
ONEDSPEC
n standard new parameter mag, magband, and teff. These
n splot params can be use to specify calibration files
n lcalib as blackbody curves scale to a specified magnitude
TWODSPEC
c apextract.apall1 Reduced the 'polysep' parameter.
c apextract.apdebug Reduced the 'polysep' parameter.
c apextract.apfit1 Reduced the 'polysep' parameter.
c apextract.apnoise1 Reduced the 'polysep' parameter.
c apextract.apnorm1 Reduced the 'polysep' parameter.
c apextract.apparams Reduced the 'polysep' parameter.
8. Details of Major System Changes
8.1 FITS kernel changes
The FITS kernel was modified to add support for storing images in
extensions as compressed pixel masks. The mask is stored as a binary
table using the "ZIMAGE" (compressed image) convention proposed by White,
Greenfield, Pence, and Tody in 1999:
http://heasarc.gsfc.nasa.gov
/docs/software/fitsio/compression/compress_image.html
In the current implementation only the "PLIO_1" compression
algorithm is implemented. Mask extensions may be read or written directly
by the kernel. When writing a new extension it will be appended to the
MEF file. To append an image to a MEF file as a mask, include "type=mask"
in the image kernel section when the output image is opened.
Masks are interfaced to the system as images and may be read and
written like any other image via IMIO. They have a normal image header
and can be manipulated with any program that deals with images. The pixel
type is INT.
It is also possible to access a mask image as a PLIO mask. An
IMSTATI query for IM_PLDES parameter will return the PLIO mask descriptor.
While a mask extension is opened under IMIO it is represented as a PLIO
mask and may be accessed in this form like any other mask.
The mask image is stored in the FITS binary table (BINTABLE)
extension when the image is closed, and is loaded from the extension when
the image is opened. The compression representation used to store the
mask in the binary table is the same as is used within PLIO. The new
(V2.12) encoding is used, allowing very large masks to be stored.
Currently masks up to 3D are supported. Data on each 2D mask plane
will be compressed in both X and Y as with PLIO. The depth of the mask
is preserved.
Although a mask is stored as a binary table the format of the
table is not completely general. In the current implementation there
can be only one column in the table (COMPRESSED_DATA). This is an
integer-valued variable length array column containing, for each line of
the N-dimensional image, the PLIO compressed version of that image line.
The actual compressed data is stored in the heap area of the table.
Multiple image lines may point to the same compressed line list, e.g.,
to store the empty line or to compression in Y.
8.2 Large Image Support
The following changes were made to enable IMIO to use larger
buffer sizes to optimize i/o for large images:
The default file buffer size set by IMIO is unchanged: it is still
about 512 MB, the value set for V2.11.2. However, a new parameter
IM_BUFFRAC was added. Both IM_BUFSIZE and IM_BUFFRAC are used to help
determine the FIO buffer size set when an image is opened. The logic
for this is implemented in imsetbuf.x.
Backwards compatibility. If you do nothing about IMIO/FIO buffers
in your program, the system may transparently use a larger buffer for
larger images. If you set BUFSIZE in your program, the system will
by default use the value you give, or possibly a larger value, if the
image you are accessing is very large. If you set BUFSIZE and you want
to guarantee that the value you set is used (even for very large images)
then you should also set BUFFRAC=0 to ensure that only BUFSIZE is used.
How it works. BUFFRAC specifies the default FIO buffer size used to
access an image, expressed as a percentage of the size of the image.
For example, the builtin default value of BUFFRAC=10 will try to make a
FIO buffer 10% of the size of the image. The actual value used will be
given by BUFFRAC, but will be at least BUFSIZE, and no more than a builtin
default maximum value, currently 32 MB. Given the builtin defaults,
the buffer size will range from 0.5 to 32 MB depending upon the size of
the image being accessed. As noted above, BUFSIZE and BUFFRAC can be
set to force the buffer size to a specific value if desired.
Environment variables for both parameters are provided. The names
are "IMIO_BUFSIZE" (specified as bytes) and "IMIO_BUFFRAC" (specified
as a decimal fraction). If defined, these override (at image open time)
the builtin default values for both parameters. An IMSET call by the
application will override all such defaults.
The FIO buffer allocated will not be larger than the size of the
image. The FIO buffer will also not exceed the maximum size set by
the file driver being accessed. For example, for PLIO images the file
buffer will not exceed about 2KB, even for a very large mask. This is
because the "pixel file" for a PLIO image is dev$null, the driver for
which specifies a maximum i/o buffer size of 2K (the real file to load
or save the mask will use a different descriptor).
The intent here is to provide an adaptive mechanism for setting the
FIO buffer size used to access an image, which automatically adapts to
the size of the image being accessed. If you access a lot of small
images you will get smaller buffers - everything will be as before.
If you access very large images, you may get large buffers up to the
builtin maximum value of (currently) 32 MB.
Using large buffers could cause a machine to run out of memory.
However, it is likely that if someone is working on 300 MB images
that they are using a machine which has a memory at least that large
- probably larger. If there are problems, the environment variable
overrides can be used to tune IMIO.
The reason for large file buffers is to limit the number of disk
data transfers, and hence the number of disk seeks. Using buffers larger
than a certain amount (32 MB is generous) is probably counterproductive.
If the i/o system provides 20 MB/sec i/o transfers, 32 MB will take
1.6 seconds. This should be more than a large enough granularity to
provide efficient i/o, hence is a reasonable limit (at this point paging
effects are likely to dominate).
8.3 Virtual Memory Cache
The VMcache client interface and daemon provide a method by
which data-intensive IRAF tasks (or non-IRAF tasks for that matter) can
manage how files/images are maintained in virtual memory to avoid
excessive system paging. In essence it's a way to "lock" a specific
image in memory to improve performance. As of this release no tasks in
the system have been modified to make use of the VMcache daemon,
however installing it in the system at this point provides a framework
for future applications and systems development.
The following notes summarize the changes made for this feature
and describe it's function in more detail. A more complete description
of the interface, environment variables which control it, etc can be
found in the main systems revisions file iraf$local/notes.v211.
The source for the developmental version of the VMcache library
and the VMcache daemon (vmcached) have been installed in the
unix$boot tree and the HSI binary file driver was modified to add VMcache
client support. This adds two new capabilities to the driver: 1)
built-in support for direct i/o (on systems that support it), and 2)
a client interface to the VMcache daemon to permit the daemon to
optimally manage binary file i/o if a VMcache daemon is present.
The vmcached code is complete but only enough debug/testing was done to
support development of the VMcache client interface for IRAF (the vmcached
code is debugged but the new version of the vmcache library code has
not been tested). Since the daemon can be utilized outside the normal
IRAF release we do not have to fully develop it for the release.
It should be stressed that VMcache is only useful or warranted for
systems that are very data intensive. The standard host operating
system file access heuristics are best for "normal" processing where
either the system is not really busy, or the datafiles are not
excessively large. On systems with very large physical memories
where massive amounts of data are being processed, VMcache can make
a significant difference in overall system performance.
VMcache is too complex to document here. Without going into the
details, its function is to manage a cache of files in system
virtual memory. Files can be explicitly cached or uncached, or they
can be "accessed", and VMcache will decide whether or not to cache
the file in virtual memory. This is what the VMcache client
interface does: every time it accesses (opens or extends) a file
larger then the VM threshold it sends an "access" directive to the
VMcache daemon. The daemon sends back a response of 0 (file not
cached; use direct i/o to access the file), or 1 (file cached in VM;
use normal VM-buffered i/o to access the file). Even if a file is
not cached the daemon keeps track of all accesses. Files which are
frequently accessed will have a higher prority and are more likely
to be cached in memory.
The VMcache daemon is a separate system-level program outside of
IRAF. This is necessary to provide a central system-wide cache
controller. It also provides flexibility, allowing multiple
versions of the daemon to exist, e.g., to allow experimentation with
different types of caching algorithms. It also allows easy
customization of the daemon independently of the IRAF applications
using the VMcache client interface.
8.4 New Developer Libraries
o Several new libraries are now available for developers:
PSIO New Postscript text generation library installed in the
sys$psio. The PSIO interface is used to format a block of
text as Postscript output on a page of a given size (Letter,
Legal, A4 or B5). See the psio$README file for details.
CATQUERY Remote astrometric/photometric catalog access lib installed
in the XTOOLS utility library.
The catquery package provides a set of routines for local
and remote catalog and image survey server access. The sup-
ported catalogs and image surveys are described in records
stored in a catalog and image survey configuration file
respectively. The catalog and image survey records specify
the network address, the query format, and the output format
for each supported catalog or image display server. See
"help catalogs" and "help surveys" for details.
SKYWCS Sky coordinate transformation library installed in the XTOOLS
utility library.
The skywcs package contains a simple set of routines for
managing sky coordinate information and for transforming from
one sky coordinate system to another. The sky coordinate
system is defined either by a system name, e.g. "J2000",
"galactic", etc., or by an image system name, e.g. "dev$ypix"
or "dev$ypix world".
9. System Changes Which May Affect You
* SHARED LIBRARY VERSION INCREMENTED (Sun/IRAF only)
The IRAF shared library for SunOS and Solaris platforms has been
incremented with this release due to the nature of various system
changes. Existing IRAF binaries (e.g. locally written software
or external packages) will continue to run using the old shared
image, however they will need to be recompiled against V2.12 in order
to pick up the numerous system bug fixes and features in this release.
In particular, pixel masks produced by V2.12 IRAF tasks may be
incompatible with external packages which have not been recompiled.
* EXTERNAL PACKAGE RECOMPILATION
The V2.12 release contains changes to the FIO and PLIO/PMIO interface
header files used by numerous applications. Relinking of an external
package may fail to pick up these changes and not recompile a source
file which uses one of these header files if the mkpkg file doesn't
correctly list all of the dependencies (nearly all packages have one
or more mkpkg files which have this problem). In the worst cases
this could lead to a runtime error due to the incompatibilities.
For this reason we recommend that all packages and local tasks be
recompiled (completely from source* (rather than simply relinked
against the new version) to assure that all changes and new features
will be included. Recompilation also guarantees that packages can
take advantage of some of the larger buffer sizes and optimizations
in this release. Site support can supply a list of missing mkpkg
dependencies for most external packages being developed outside NOAO
that wish to fix these files for a future release.
* PARAMETER FILE CHANGES
As with all major releases, we recommend that you do a MKIRAF and
delete all your old parameter files after the IRAF upgrade. You may
choose not to do this if you are in the midst of a project and have
setups that may be difficult to reproduce.
The automatic parameter file update/merge mechanism, which is used
if you do not initialize your parameters with MKIRAF, is based on
file date comparisons. If you run IRAF V2.11 after V2.12 has been
installed, the file dates on your uparm parameter files will be
more recent than the V2.12 installation date. If you then try to
run V2.12, the automatic parameter file merge/update will fail due
to the file dates. The system only updates personal parameter
files which are older than the update date of the system. A
MKIRAF avoids the problem if you delete your parameter files,
causing them to be updated from the system default versions.
* INSTALLATION SCRIPT CHANGES
As the first step of an ongoing effort to simplify the installation
and system configuration, the IRAF install script was rewritten to
do some error-checking of the iraf setup, present a simplified and
easier to read output, and do some common post-install configuration
of the system. Additionally, the SYSINFO diagnostic script for
finding system errors and reporting on the configuration, and a new
UNINSTALL script for removing IRAF files/links from the system have
also been installed. The old install script is still available as
a fallback in case problems with the new script are found.
* HELP SYSTEM CHANGES
The HELP task was modified with several new parameters controlling
the display and formatting of the help pages. Help may now be
presented as formatted text (as before), HTML, or fully formatted
Postscript. Additionally, users running under an XGterm window can
use the task in a new GUI mode. The help GUI allows users to browse
the help system and easily search for tasks/topics using a familiar
web-like interface. The GUI mode is not the default, but can be
enabled easily using the 'device' parameter.
* IMAGE DISPLAY CHANGES
Tasks which display images or interact with the image display were
modified to take advantage of new features added to XImtool V1.3
(e.g. the multiple WCS and pixel-value readouts and 16 display frame
buffers). These changes were done in a backwards compatible way so
interaction with display servers such as SAOimage, SAOtng, DS9, or
older XImtool versions should be unaffected. If problems are dis-
covered a CL environment variable 'disable_wcs_maps' can be defined
to force all of the old behaviors. These changes do not add any new
functionality to the tasks themselves, only the underlying display
protocols.
* PLIO Changes
The LEN and BLEN fields of the encoded line list (LL) descriptor
would limit the length of a pixel area (and hence the size of a
pixel mask) to the max size of a signed short, 32768. This was due
to the use of a simple array of type short to encode the line list
(which simplifies handling considerably). Nonetheless the limit to
32K was unacceptable. The fix adopted was to increase the LL header
from 3 to 7 words. Two 16 bit words are now used to encode each of
LEN and BLEN. A "version" word was added to allow the old, new, and
future encodings to be distinguished. A "hdrlen" word was added to
parameterize the length of the LL header, rather than fix it at
compile time as in the initial version. With this change, the
maximum length of an image line under PLIO is increased from 32768
to 1073741824 (32768*32768). All the higher level PLIO code is
integer, so should already support larger masks.
This was done in such a way that old line lists can still be read,
although PLIO will always write out new format line lists (pixel
mask files and images, QPOE, and MWCS all store encoded line lists
in external storage, so backwards compatibility is important; also
existing complied programs will continue to generate the old
format). The cost is 8 bytes per encoded line list. For most masks
this should only increase the size of the mask by a few percent at
most.
* NEW ENVIRONMENT VARIABLES
The following new environment variables may be defined to tune the
size of the system file i/o buffers used by the image i/o system.
The system will automatically adjust to use larger buffers when
accessing larger images, these variables may be set to further
optimize the buffers
IMIO_BUFSIZE Size of the FIO buffer size in bytes.
IMIO_BUFFRAC FIO buffer size expressed as a percentage of
the image size. Actual value will be at least
BUFSIZE and no more than BUFMAX.
IMIO_BUFMAX Max size of FIO buffer which will override the
32Mb default.
Other miscellaneous environment variables:
disable_wcs_maps If defined or set to 'yes', this variable will
force any tasks which interact with the image
display to use the old protocols.
pspage Variable which is used by the PSIO interface to
set the default page size. Acceptable values
include "letter" (the default) for US Letter,
"legal" for US Legal, and "a4" and "b5" for the
most common European sizes. Pspage can be used
by the new HELP and LROFF tasks to automatically
set the desired Postscript page size.
IRAF (Aug97) V2.11 Revisions Summary IRAF (Aug97)
IRAF V2.11 Revisions Summary
August 27, 1997
Introduction
Modifications and additions to IRAF V2.11EXPORT, compiled since the last
documented release of IRAF, V2.10.3, are summarized below. V2.11EXPORT is
a major release of IRAF and will be available for all supported
platforms. These release notes provide a summary of the major changes in
V2.11. More detailed technical documentation of all system changes will
be found in the "notes.v210" and "notes.v211" files in the iraf$doc and
iraf$local directories.
1. Things to be aware of or watch out for
1.1. Parameter file changes
1.2. Networking change
1.3. Image format change
1.4. FITS kernel
1.5. RFITS/wfits changes
1.6. Merged SunOS and Solaris IRAF systems
1.7. Tape access
1.8. Default magnitude zero changed
2. IMAGES package changes
3. Major system changes
3.1. New FITS image kernel (FXF)
3.2. Changes to the IRAF native image format (OIF)
3.3. IMFORT changes
3.4. Environment variables
3.5. New intrinsic functions
3.6. System default modifications
3.7. Libraries added
3.8. Graphics changes
3.9. FITS-related core-level task changes
3.10. General changes
4. New tasks, or old tasks moved to new packages
5. Task and package deletions
6. Modifications to old tasks
7. Parameter file changes
The IRAF V2.11 release notes can also be found online on the Internet at
the URL http://iraf.noao.edu/v211revs.html.
1. Things to be aware of or watch out for
1.1 Parameter file changes
Since this is a major release we recommend that you do a mkiraf and
delete all your old parameter files. You may choose not to do this if
you are in the midst of a project and have setups that may be difficult
to reproduce. Old IMAGES package parameter files will no longer be
recognized, however, because of the package reorganization mentioned
below. Generally, old parameter files are merged automatically with
any new parameter files if there have been any changes, but if you do
have problems you will need to unlearn the task before you can proceed.
A list of the parameter file changes appears below and you may wish to
check this list to see how this will affect your setups.
The automatic parameter file update/merge mechanism, which is used if
you do not initialize your parameters with mkiraf, is based on file date
comparisons. If you run IRAF V2.10 after V2.11 has been installed, the
file dates on your uparm parameter files will be more recent than the
V2.11 installation date. If you then try to run V2.11, the automatic
parameter file merge/update will fail due to the file dates. The system
only updates personal parameter files which are older than the update
date of the system. A mkiraf avoids the problem if you delete your
parameter files, causing them to be updated from the system default
versions.
1.2 Networking change
The "set node = foo" syntax, used to enable remote image display under
IRAF networking, has changed. The new syntax requires that an
exclamation be appended to the node name as in the example below (this
dates back to V2.10.4 so many users will already be familiar with the
feature).
cl> set node = "orion!"
1.3 Image format change
The internal IRAF image format (.imh images) has changed. V2.11EXPORT
can read the old image format but the new image format is not readable
by V2.10.4 or earlier versions. This means that you can not easily go
from the new IRAF system (V2.11) to an old one (V2.10.4 or earlier)
unless you first convert the V2.11 IRAF images to FITS files. All your
old V2.10.4 or earlier images are readable by V2.11EXPORT. The benefit
is that the new image format is machine independent, slightly more
storage efficient, and supports long file pathnames. If it is
necessary to be able to read images written by V2.11 with older
software, V2.11 can be made to write the old IRAF image format by
setting the oifversion environment variable, e.g., "set oifversion = 1"
(the default is version 2). See below for details.
1.4 FITS kernel
A FITS image kernel is available in V2.11, allowing runtime read and
write access to FITS files on disk. There are many related changes to
IRAF image i/o and FITS support. More information on the new image
kernel, and on the expanded FITS support available in V2.11, is given
below.
1.5 RFITS/WFITS changes
rfits and wfits have been modified to support multi-extension FITS
files. The extension numbering convention used is the same as in the
FITS image kernel. As a result, users who read simple FITS files on
disk with a command such as "rfits diskfilename 1 foo" will find that
this no longer works - instead use "rfits diskfilename 0 foo". See
below for details.
1.6 Merged SunOS and Solaris IRAF systems
A single installation of Sun/IRAF will now simultaneously support both
SunOS and Solaris (previously separate IRAF distributions were required
for each).
1.7 Tape access
The "tapecap" mechanism has changed. The system now looks for the
filename "tapecap.<node>" followed by the default "tapecap". <node>:
should be the hostname (as used by IRAF networking) of the server
hosting the tape drives described by the tapecap file. For example if
host "gemini" serves up some tape drives it's tapecap file is named
"tapecap.gemini". If a server-specific tapecap file is not found the
default "tapecap" (on the possibly remote server node) is used. This
feature allows a single IRAF installation to be shared by multiple
servers.
1.8 Default magnitude zero changed
The default APPHOT magnitude zero point has been changed from 26.0 to
25.0 to bring it into agreement with the DAOPHOT package default value
and thereby avoid confusion for users who switch back and forth between
packages. The affected APPHOT tasks are phot, photpars, polypars,
polyphot, qphot, radprof, and wphot. The APPHOTX package in the addon
DIGIPHOTX package will retain the old zero point values until IRAF 2.11
is released after which they will be updated.
The default value of the magzero parameter in imexamine was changed
from 30.0 to 25.0 for consistency with the DIGIPHOT package.
2. IMAGES package changes
The IMAGES package has been reorganized by function into the 7
subpackages listed below.
imcoords - Image coordinates package
imfilter - Image filtering package
imfit - Image fitting package
imgeom - Image geometric transformation package
immatch - Image matching and combining package
imutil - Image utilities package
tv - Image display utilities package
The new IMAGES package contains a total of 82 tasks, including 26 new
tasks from the IMMATCH and VOL external addon packages, 6 existing
PROTO package tasks, and 1 existing NOAO.PROTO package task. The
undocumented IMAGES package IMDEBUG and its 6 tasks have been deleted
from the IMAGES package. User should use the tasks in the ARTDATA
package instead.
This reorganization of the IMAGES package should be mostly transparent
to the user and not affect any existing scripts, unless you were using
any of the 6 deleted tasks. By default, the IMAGES subpackages are
automatically loaded when you log in to the CL. Old parameter files
will not be recognized since the package names have changed.
3. Major system changes
3.1 New FITS image kernel (FXF)
V2.11 introduces a new image kernel providing runtime access to FITS
multi-extension image datafiles. What this means is that IRAF tasks
can now read and write FITS images directly at runtime. The native IRAF
image format (used by images with the .imh extension), remains the
default as it is the most efficient and well-tested format. IMH, FITS,
and the other types of images supported by IRAF can be used
interchangeably in most IRAF tasks. Although we have extensively tested
the new FITS image kernel, it is still evolving, is complex, and still
has some bugs. Users should use it with caution. Please let us know of
any problems.
Besides support for classical FITS images, the new FITS kernel also
supports multi-extension FITS files: several FITS files packed into one
large file with a PHU (Primary Header Unit) that contains global header
information shared by the other files. Multi-extension FITS files are
0-indexed, with the PHU being 0 and the first image extension (or other
data extension) at index 1. If there is no PHU then the first FITS
image is 0 and there is no global header.
For further details about the FITS kernel please see the new FITS Kernel
User's Guide by Nelson Zarate.
3.2 Changes to the IRAF native image format (OIF)
o It was necessary to change the IRAF image format to increase the
maximum path length for header and pixel files. This made it necessary
to change the disk image format, since the old format only allowed 80
characters for the pixel file pathname. The path lengths can now be up
to 255 characters.
Support for two versions of the image and pixel file headers was added.
V2.11 will read both the old image format (V1) and the new image format
(V2). But the new image format is not readable by older versions of IRAF.
o Native format IRAF images (OIF type or extension ".imh") are now machine
independent, for example, a PC and a Sun can now access the same images.
o Support was added for byte swapping pixels. With the machine independent
image header, this allows .imh images to be read on any node (integer)
or any IEEE-compatible node (floating).
o Some pointers: "strings foo.imh" (or other tools like the "less" file
viewer) can be used at the Unix level to look at the text contained in
the new V2 OIF image headers.
3.3 IMFORT changes
o IMFORT was brought up to date to read and write the new V2 ".imh" images.
The old V1 format is still supported but new images are written using
the new machine independent V2 format by default.
o Image headers can now be any size (the old IMFORT had a fixed, relatively
low, limit on the image header size).
o The "min_lenuserarea" variable is now supported by IMFORT (since IMFORT
is host level the variable must be defined in the host environment).
The builtin default header buffer is 64000 chars, which is about 800
card images.
3.4 Environment variables
Several new environment variable have been added to the system.
o The new environment variable imextn determines the image kernels
(image file formats) recognized by IRAF and defines the mapping of
imagefile extensions to these image formats. A file that does not have
an extension listed in imextn may not be recognized as an image by all
IRAF tasks. The default value of imextn is as follows:
imextn = "oif:imh fxf:fits,fit plf:pl qpf:qp stf:hhh,??h"
IRAF tasks will not recognize a file as an image unless it has an
extension (except rfits which will read FITS files on disk that
have no extensions). The rename task can be used to add
extensions to image files if needed. "imextn" can be redefined (use
reset imextn = "new-value") to modify the mapping of extensions to
image types.
The meaning of the fields of the default "imextn" are as follows. Each
substring corresponds to a single kernel. The "xxx:" is the internal
name of the image kernel, i.e. "oif", "fxf", "plf", etc. A comma
delimited list of the extensions, or extension patterns, associated with
that image format follows the colon. For example, for the FITS image
kernel, the internal kernel name is "fxf" and the system default file
extensions are ".fits" and ".fit".
- oif:imh - The original (native) IRAF image format.
- fxf:fits,fit - The FITS image extension format, which supports
classical FITS images as well as multi-extension FITS files.
- plf:pl - The pixel list format used for compressed pixel masks.
- qpf:qp - The QPOE image format for event list data (typically
X-ray or other high energy data).
- stf:hhh,??h - The Space Telescope runtime GEIS image format.
Users can define extensions for the fxf and stf kernels. For example,
if you have FITS files on disk that have a .ft extension then you can
reset imextn so that IRAF will recognize these image extensions:
cl> reset imextn="fxf:ft"
The new .ft extension for the FITS kernel images will now override the
default values - the other kernels remain unchanged. ".fits" will no
longer be recognized as a FITS file unless you include it in the list
of extensions for the "fxf" kernel.
The first extension given for a kernel defines the default file
extension for new images of that type (rather than e.g. the value of
imtype, or a builtin default).
The value of "imextn" is only read once when a process starts up. Hence
it is advisable to do a "flpr" (flush process cache) after changing
this variable, to force all processes to re-read it.
o The environment variable imtype defines the default image type for
new images created by IRAF. If a file extension is given explicitly
when creating a new image then this file extension, in combination with
the "imextn" mappings, determines the type of the new image. Otherwise
the type is determined by the value of "imtype". Typical values are
"imh" for native IRAF images, or "fits" for FITS images. The internal
kernel name documented above for "imextn" can be used instead of a file
extension to ensure that the desired image format is used regardless of
what extensions are assigned to that type by imextn.
The default value of imtype is "oif,noinherit" which means that the
IRAF native format is the default for all new images, regardless of the
type of the input image (i.e. do not "inherit" the input image type).
"inherit" was the default in V2.10 and earlier versions of IRAF.
For example, if you wish to use FITS as the default for new images you
can set imtype=fits as follows:
cl> reset imtype="fits"
cl> flpr % needed before the next task execution
Assuming "imextn" defines ".fits" as a valid file extension for FITS
imagefiles (kernel "fxf"), all new images produced by IRAF will be FITS
files with the extension .fits unless some other extension is given
explicitly when creating a new image.
cl> reset imtype = "imh,inherit"
This example sets the default type for new images to ".imh" for native
format images, but enables image type inheritance. By default new
images will be of the same type as the input image. For example if a
FITS image is being read another FITS image will be output, or if a
pixel mask is being read a pixel mask will be created.
You can override the default output image type specified by imtype by
giving an image extension (as defined by imextn) explicitly in the image
name, e.g. "pix.imh", "pix.fits", "pix.pl" and so on.
o A new environment variable called imclobber has been added.
The default value is set to no. If imclobber is set to yes, images
can and will be overwritten, without warning, when you create new
images.
o The original IRAF image format (OIF) kernel now supports an environment
variable oifversion which, if defined, specifies the file
version for new OIF images (for example, oifversion=2 produces the
new format, or version 2 images). By default the variable is undefined,
the builtin OIF default will be in effect, and new-format images will
be generated. This variable is provided only for backwards
compatibility, e.g., when using V2.11 IRAF with old software which
cannot easily be updated.
3.5 New intrinsic functions
Two new intrinsic functions were added to the CL, imaccess and defvar.
imaccess tests whether an image exists, e.g., (imaccess("dev$pix")) or
(imaccess(foo.fits[3])). defvar tests whether an environment variable
exists, e.g. (defvar("imextn")).
3.6 System default modifications
o The default size of the user area (min_lenuserarea) was increased
to 64000 (about 800 80 character cards). There was some ambiguity about
units for min_lenuserarea; it should be consistently characters now.
o The maximum number of open IRAF logical files was increased from 128 to
256. This is good news for imcombine users.
o Various buffer limits were increased:
- The IRAF line length was increased from 161 to 1023 characters.
One often ran into this lower limit when entering a long list of
input image names, for example.
- CL commands can now be 2047 characters long (the old limit was
1024) - this is particularly useful for scripts.
- IRAF file names can now be up to 255 characters long.
- Expanded file names (pathnames) can be up to 511 characters long.
3.7 Libraries added
The Starlink positional astronomy library SLALIB was added to the math
package.
3.8 Graphics changes
o SGI Translator change: Modified the header ID string produced by
sgi2uapl to be "%!PS", this is required by certain models of printers.
o Installed graphcap support for the STSDAS PostScript graphics kernel.
o The SGI graphics kernel was upgraded with a better roman font, and a
new greek font was added. To use the new high-quality greek fonts use
the "\fG" escape sequence when you use the "T" keystroke to mark text
in a plot, e.g., \fGa Hydra would produce " Hydra". The greek font
may also be used in label parameters for tasks like GRAPH, for example
cl> graph dev$pix xlabel="Wavelength\\fG(A)"
would produce an Angstrom symbol in parenthesis. The double backslash
is necessary to pass the escape string thru the CL. A file containing
the mappings for the greek fonts and other special characters can be
found at http://iraf.noao.edu/greek.ps.
3.9 FITS-related core-level task changes
3.9.1 IMHEADER
The behavior of imheader has changed a bit - typed with no arguments it
will list all the images in the current directory, as in the following
example:
cl> imhead
pix4.imh[512,512][short]: m51 B 600s
boc.fits: FXF: must specify which FITS extension (boc.fits)
fits.fits[512,512][short]: m51 B 600s
pix.fits[512,512][short]: m51 B 600s
pix3.fits[512,512][short]: m51 B 600s
pix5.fits: FXF: must specify which FITS extension (pix5.fits)
zero.fits: FXF: must specify which FITS extension (zero.fits)
mask.pl[512,512][int]: m51 B 600s
foo.qp[1024,811][int]:
The multi-extensions FITS files show up in the list with the message
"FXF: must specify which FITS extension", since these files contain
multiple images and the task does not know which image to open to get
header information.
At present imheader does not use "imextn" to determine what is and is
not an image. The parameter "imlist" defines the valid imagefile
extensions. If imextn is modified "imlist" may need to be modified as
well.
3.9.2 RENAME
The rename task was modified to allow a destination directory to be
specified without changing the filename. A new "field" parameter option
"all" was added and made the default so the entire filename is changed
(or moved in the case of a destination directory). When field is set
to "extn" filenames without an extension will not have the new extension
appended so a filename isn't generated which can get overwritten.
3.9.3 rfits/wfits
Some changes were also implemented in rfits and wfits to add support
for multi-extension FITS files.
o The default action of wfits when writing to tape is unchanged for
single image files.
wfits now has a new parameter called "fextn" and it is set to
"fits". This parameter only affects FITS files written by wfits
to disk - the extension .fits will automatically be added to the
filenames, so that the files will be automatically recognized by
the FITS image kernel.
wfits also has two additional parameters called "extensions" and
"global_hdr" that deal with writing multi-extension FITS files.
o The default action of rfits from tape to disk remains unchanged.
If rfits is used to read FITS files on disk then users need to
be aware of a change to the behavior of the "file-list" parameter.
File-list is now used to define the list of files on the tape as
well as the list of extensions in a multi-extension FITS image.
To read single FITS images on disk use "" as the value for
"file-list". Some users have been using "1" for this value but now
that value will try to read the first extension which doesn't
exist - use "0" if you wish to put something there.
rfits will unpack multi-extension FITS files upon a read. If you
wish to retain the multi-extension FITS format then use T2D and
RENAME.
The help pages have been updated to reflect these changes.
wfits now writes ushort (16 bit unsigned short) images to FITS images
with bitpix=16, bscale=1.0, and bzero=32768.0 by default. rfits will
read these images back as type ushort.
3.10 General changes
o The GSURFIT package has been updated to include support for the "half"
cross terms option useful in computing plate solutions. Tasks that can
make use of this feature have been updated although their default
behaviors have not changed.
o The code which computes the CD matrix from CDELT/CROTA was modified.
The old code computed the diagonal (scale) terms correctly but the
rotation terms were evidently incorrect. The old code was based on
the 1988 Hanisch and Wells WCS paper and the new code is based on a
more recent paper by Mark Calabretta et al, which supercedes the
1988 representation. The affect of this change should be limited
as it only affects rotated images for which CDELT is given but no
CD matrix is defined. (V2.10.4p2)
o Several new celestial coordinate projection functions have been added.
Users with IPAC data that use the CAR projection function should now be
able to read the image coordinates directly with LISTPIXELS, etc.
4. New tasks, or old tasks moved to new packages
Task Name Package Function
CCXYMATCH IMCOORDS Four new tasks for computing and evaluating
CCMAP simple astrometric plate solutions and storing
CCSETWC them in the image headers in fits-compatible
CCTRAN format.
CCFIND IMCOORDS CCFIND locate objects in an image given a
celestial coordinate list and the image wcs.
IMCCTRAN IMCOORDS Two new tasks for transforming celestial
SKYCTRAN coordinate lists and image celestial
coordinate systems from one celestial
coordinate system to another.
STARFIND IMCOORDS STARFIND automatically detects stellar objects
in a list of images.
WCSCTRAN IMCOORDS A new task for transforming between IRAF image
coordinate systems.
WCSEDIT IMCOORDS Two unaltered former PROTO package tasks for
WCSRESET editing IRAF image coordinate systems.
FRMEDIAN IMFILTER Four new tasks for doing circular/elliptical/
FRMODE ring image median filtering.
RMEDIAN
RMODE
IM3DTRAN IMGEOM The former addon VOL package task IM3DTRAN for
doing 3D image transposes.
GEOXYTRAN IMMATCH A new task for transforming coordinate lists
using the results of the GEOMAP task.
IMCENTROID IMMATCH Four new tasks for computing matched pixel
SKYXYMATCH lists. IMCENTROID is a modified version of the
WCSXYMATCH PROTO package task of the same name.
XYXYMATCH
SKYMAP IMMATCH Two new tasks for computing geometric
WCSMAP transforms using the image coordinate system
information.
IMALIGN IMMATCH Three new tasks for doing automated image
SREGISTER registration. IMALIGN is a modified version
WREGISTER of the PROTO package task of the same name.
WCSCOPY IMMATCH A new task for copying the coordinate system
of a reference image to a set of input images.
PSFMATCH IMMATCH A new task for matching the PSFs of a set of
input images to the PSF of a reference image
using Fourier techniques.
LINMATCH IMMATCH A new task for matching the linear intensity a
scale of a set of input images to the
intensity scale of a reference image.
IMFUNCTION IMUTIL The former PROTO package task for applying a
single argument function to an image.
IMJOIN IMUTIL The former addon VOL package task for joining
same-dimensioned images along a specified
dimension.
IMREPLACE IMUTIL The former PROTO package task IMREPLACE for
replacing bad pixels based on their value.
IMTILE IMUTIL A modified version of the NOAO.PROTO IRMOSAIC
task for tiling same sized 2D images into a
single mosaiced image.
EXPORT DATAIO Two new tasks from the external IMCNV package
IMPORT for exporting IRAF images to binary formats
and for importing binary files into IRAF
images.
TEXT2MASK PROTO This new task appears in conjunction with a
new pixel mask based version of FIXPIX.
IMEXTENSIONS PROTO This task selects and lists image extensions
in files. Image extensions currently occur
in multi-extension FITS files and multi-group
Geiss (STF format) files.
CCDMASK CCDRED This new task creates a pixel mask from a
CCD image.
AIDPAR ONEDSPEC New parameter set for automatic line
identification for the tasks AUTOIDENTIFY,
IDENTIFY and REIDENTIFY.
AUTOIDENTIFY ONEDSPEC A new task to automatically identify lines
and fit the dispersion function.
SKYTWEAK ONEDSPEC Sky spectra are shifted and scaled to best
subtract sky features from data spectra.
TELLURIC ONEDSPEC Telluric calibration spectra are shifted and
scaled to best divide out telluric features
from data spectra.
ASTCALC ASTUTIL An astronomical calculator.
ASTRADIUS ASTUTIL Finds images within a circle on the sky.
5. Task and package deletions
CUBE, DUMP, GSUBRAS, MAXMIN, MKIMAGE, MKTEST: These tasks have been
superseded by the equivalent tasks in the IMAGES or ARTDATA packages.
The functionality of these tasks still exists in the
iraf$pkg/images/lib/zzdebug.x file.
REGISTER: This task has been renamed to GREGISTER.
IMALIGN, IMCENTROID, IMFUNCTION, IMREPLACE, WCSEDIT, WCSRESET: Moved to
the IMAGES package.
6. Modifications to old tasks
Grouped by package, a list of modifications to old tasks in IRAF are
summarized below. We have included modifications since the V2.10.3
release.
IMFILTER:
FMEDIAN, FMODE, MEDIAN, MODE
Minimum and maximum good data value parameters zloreject and zhireject
and a verbose option parameter were added.
MEDIAN, MODE
The 64 x 64 maximum kernel size limit was removed from these tasks.
IMMATCH:
GEOMAP
Renamed the output parameter to database for the sake of consistency
with other new images tasks.
Changed the default value of the reject parameter from 0.0 to INDEF.
Added the transforms parameter. Transforms permits the user to specify
the names of the output database records explicitly.
Added the parameter results. Results permits the user to save a summary
of the results including a description of the transform geometry, and a
listing of the input coordinates, the fitted coordinates, and the fit
residuals.
Added the fitgeometry parameter. Fitgeometry permits the user to
constrain the linear part of the fit to: 1) x and y shifts only, 2) x
and y shifts and rotation only, 3) x and y shifts and x and y scale
changes only, 4) x and y shifts, rotation, and a scale change only, 5)
x and y shifts, rotation, x and y scale changes only, and 5) x and
shifts, rotation, skew, and x and y scale changes.
GREGISTER
Renamed the register task gregister to emphasize that it is paired with
the geomap task and to avoid confusion with the new registration tasks.
GEOTRAN, GREGISTER
Renamed the transform parameter to transforms.
Added the verbose parameter.
GEOTRAN
Added the ability to write to a section of an existing image.
IMCOMBINE
The limit of the number of images that may be combined has been
removed. If the number of images exceeds the maximum number of
open images permitted then the images are stacked in a single
temporary image and then combined with the project option.
Note that this will double the amount of diskspace
temporarily. There is also a limitation in this case that the
bad pixel mask from the first image in the list will be applied
to all the images.
Integer offsets may be determined from the image world
coordinate system.
A combination of ushort and short images now defaults to
integer.
Added support for type ushort images.
Added a new options for computing offsets using the image wcs.
Removed the limit on the maximum number of images that can be combined.
IMALIGN, IMCENTROID
Renamed the images parameter to input, changed the reference parameter
mode from hidden to automatic, and reversed the order of the reference
and coords parameters.
IMUTILS:
IMEXPR
Modified the task so that it will accept an image name that looks like
a number in the first few characters, but which is really an image
name. For example, "123.imh" or "../foo.imh". The previous version
of imexpr was treating any string which looked like a number in the
first few characters as a numeric constant. (V2.10.4p2)
IMREPLACE
The lower value is now rounded up for integer images so that a
range like 5.1-9.9 affects pixels 6-9 instead of 5-9.
IMSUM
Now allows "ushort" data types.
TV:
DISPLAY
The bad pixel mask, overlay mask, sample mask, and overlay
colors parameters and functionality have been added. The
"nsample_lines" parameter is now an "nsample" parameter.
Bugs in the coordinate system sent to the image display for
cursor readback were fixed.
IMEDIT
If xorder or yorder are zero then a median background is
computed for the 'a' and 'b' keys.
IMEXAMINE
('a' and 'r'): The fit to the radial profile points now
includes both a Gaussian and a Moffat profile. The Moffat
profile exponent parameter, beta, may be fixed or left free to
be fit.
('a' and 'r'): New estimates fo the FWHM were added to the 'a'
and 'r' keys. These include the Moffat profile fit noted
above, a direct measurement of the FWHM from the radially
binned profile, and a Gaussian or Moffat fit to the radial
enclosed flux profile. The output from these keys was modified
to include the new information.
('a' and 'r'): The direct FWHM may be used to iteratively
adjust the fitting radius to lessen the dependence on the
initial fitting radius value.
('k'): Added a kimexam parameter set.
The default value of rimexam.magzero parameter was changed from
30.0 to 25.0 for consistency with the digiphot package.
PROTO:
FIELDS
The default value for the lines parameter was changed to an open
upper limit.
Changed the default value of the lines parameter from "1-999" to
"1-" so that the upper bound would be open ended.
FIXPIX
This task replaces the old task (now obsolete.ofixpix) and
works with the more general pixel mask facilities. It also
provides greater flexibility in chosing the interpolation
direction.
ICFIT used in various tasks:
ICFIT
The :xyshow output was modified to 1) not include colon labels,
2) print (X, Y, Y fit, Weight) instead of (X, Y fit, Y), and 3)
the printed values are those actually used in the fit when using
composite points (naverage not 1).
ARTDATA:
MK1DSPEC
Lorentzian and Voigt profiles were added and the parameters and
input line list format were changed. The widths are now FWHM
instead of gaussian sigmas.
MKOBJECTS, MKNOISE
The default value of "ranbuf" was changed to zero.
GALLIST
The default value for the minimum elliptical galaxy axial ratio
was changed to 0.3 to cover the range E0-E7 uniformly.
MKPATTERN
Now allows ndim=0 to make an dataless header.
Now allows ushort pixel type.
ASTUTIL:
SETJD
The checking of the epoch keyword value was improved.
Previously if there was a problem with the keyword value
(missing or malformed) the task would use the epoch of the
observation. Now it is an error if an epoch keyword is
specified but the epoch value can't be determined. Also a
leading 'B' or 'J' is allowed and a warning will be given if
the epoch value is unlikely.
ASTHEDIT
There are new astronomical functions and input/output functions.
The command syntax may now use "=" as a delimiter as well as
the whitespace.
A new parameter "update" allows protecting images and accessing
read-only images for the purpose of calculating and printing
quantities.
The special variable name "$I" has the value of the image name,
$D the current date, and $T the current time.
The case of no image name creates and deletes a temporary image
so the task can be used purely as a calculator (but see
astcalc).
CCDRED:
CCDPROC
The bad pixel fixing was modified to allow use of pixel masks,
images, or the text file description. Bad pixel masks are the
desired description and use of text files is only supported for
backward compatibility. Note that support for the trimmed or
untrimmed conversion from text files has been eliminated.
Line-by-line overscan/prescan subtraction is now provided with
three simple algorithms.
COMBINE
The limit of the number of images that may be combined has been
removed. If the number of images exceeds the maximum number of
open images permitted then the images are stacked in a single
temporary image and then combined with the project option.
Note that this will double the amount of diskspace
temporarily. There is also a limitation in this case that the
bad pixel mask from the first image in the list will be applied
to all the images.
Integer offsets may be determined from the image world
coordinate system.
Fixed a bug where a variable was improperly used for two different
purposes causing the algorithm to fail. This also affected IMCOMBINE
and SCOMBINE. See bug 316 for details. (V2.10.4p2)
COSMICRAYS
The output bad pixel data accidentally included some extra fields
making it incorrect to use the file directly with BADPIXIMAGE.
The extra diagnostic fields were removed. For details, see bug 311
in the buglog. (V2.10.4p2)
ECHELLE:
ECIDENTIFY
The dispersion units are now determined from a user parameter,
the coordinate list, or the database entry.
IMRED Spectral Packages:
DOARGUS, DOFIBERS, DOHYDRA
A sky alignment option was added.
The aperture identification can new be taken from image header
keywords.
The initial arc line identifications is done with the automatic
line identification algorithm.
DOSLIT, DO3FIBER
The initial arc line identifications is done with the automatic
line identification algorithm.
ONEDSPEC:
Support for the Sloan Sky Survey was added by allowing multifiber
reductions with up to 500 fibers with non-linear dispersions. (V2.10.4p2)
BPLOT
Fixed a general problem in BPLOT and SLIST that caused a segmentation
violation error. See buglog 312 for details. (V2.10.4p2)
FITPROFS
Modified to include lorentzian and voigt profiles. The
parameters and positions file format have changed in this
version. A new parameter controls the number of Monte-Carlo
samples used in the error estimates.
IDENTIFY
The dispersion units are now determined from a user parameter,
the coordinate list, or the database entry.
A new key, 'e', has been added to add features from a line list
without doing any fits. This is like the 'l' but without the
automatic fitting before and after adding new features.
A new key, 'b', has been added to apply an automatic line
identification algorithm.
The 'x' key has been changed to use the automatic line
identification algorithm. The allows finding much larger
shifts.
The match parameter may now be specified either in user
coordinates or in pixels. The default is now 3 pixels.
The default threshold value has been changed to 0.
REIDENTIFY
A new parameter, "search", was added to specify a search radius
for the automatic line identification algorithm.
The "nlost" parameter now also applies when not tracing; i.e. it
will issue a warning and not record a solution if the specified
number of features is lost when reidentifying against a specific
reference spectrum as is done with multispec data.
The task will now work with only a warning if the reference
image is absent; i.e. it is possible to reidentify given only
the database.
The addfeatures function will now add features before a fit if
there are no reference database features. Previously features
could only be added after an initial fit using the reference
features and, so, required the reference database to contain
features for reidentification. This new feature is useful if
one wants to uses a dispersion function from one type of
calibration but wants to add features for a different kind of
calibration.
SAPERTURES
This task has been modified to allow use of image header
keywords as done in the APEXTRACT package.
SARITH
Previously both w1 and w2 had to be specified to select a range
to be used. Now if only one is specified the second endpoint
defaults to the first or last pixel.
The noise band in multispec data is only copied from the primary
spectrum and not modified. This is a kludge until the noise is
handled properly.
Fixed a problem in SARITH and SCOPY where a segmentation error
occurred when a wavelength range was specified in the reverse sense
of the data and without rebinning. See buglog 323 for details.
(V2.10.4p2)
SBANDS
Fixed a problem in SBANDS that caused a segmentation violation when
the number of input bandpasses was greater than 10. See buglog 298
for details. (V2.10.4p2)
SCOPY
Previously both w1 and w2 had to be specified to select a range
to copy. Now if only one is specified the second endpoint
defaults to the first or last pixel.
SPECPLOT
The scale and offset parameters may now be a value, a filename,
or and image header keyword.
The 'f' key was added to toggle between world and logical pixel
coordinates.
SPLOT
The profile fitting and deblending was expanded to include
lorentzian and voigt profiles. A new parameter controls the
number of Monte-Carlo samples used in the error estimates.
RSPECTEXT
The task now automatically senses the presence of a header.
APEXTRACT:
APALL, APSUM, APNOISE, APNORMALIZE, APSCATTER, APTRACE,
APRECENTER, APRESIZE, APMASK, APFIND, APFLATTEN
The "apertures" parameter can be used to select apertures for
resizing, recentering, tracing, and extraction. This parameter
name was previously used for selecting apertures in the
recentering algorithm. The new parameter name for this is now
"aprecenter".
APALL, APSUM
The "nsubaps" parameter now allows onedspec and echelle output
formats. The echelle format is appropriate for treating each
subaperture as a full echelle extraction.
APALL
The aperture ID table information may now be contained in the
image header under the keywords SLFIBnnn.
APSUM
The dispersion axis parameter was moved to purely a package
parameter.
As a final step when computing a weighted/cleaned spectrum the
total fluxes from the weighted spectrum and the simple
unweighted spectrum (excluding any deviant and saturated
pixels) are computed and a "bias" factor of the ratio of the
two fluxes is multiplied into the weighted spectrum and the
sigma estimate. This makes the total fluxes the same. In this
version the bias factor is recorded in the logfile if one is
kept. Also a check is made for unusual bias factors. If the
two fluxes disagree by more than a factor of two a warning is
given on the standard output and the logfile with the individual
total fluxes as well as the bias factor. If the bias factor is
negative a warning is also given and no bias factor is applied.
In the previous version a negative (inverted) spectrum would
result.
RV:
RVIDLINES, RVREIDLINES
These tasks now work in the units of the input spectra.
FXCOR
The input spectra are converted to Angstroms for the
crosscorrelation and analysis. Thus the velocities will
be correctly computed regardless of the units of the
input spectra.
DAOPHOT:
DAOFIND
A major bug in the DAOFIND task centering code that affects the
computed x and y positions was fixed. Users should refer to bug
log entry number 332 for details. (V2.10.4p2)
A new roundness statistic was added to the DAOFIND output to
bring the task into conformance with standalone DAOPHOT II. The new
statistic is sensitive to and tries to eliminate detected objects
which are significantly elongated in directions other than 0, 90,
180, and 270 degrees. The original roundness statistic is stored in
the ground column, the new one in the sround column. The same
default roundness limits apply to both statistics. (V2.10.4p2)
DAOPARS
Added a new parameter "mergerad" to the DAOPARS parameter set.
Mergerad permits the user to control the merging process. If
mergerad is INDEF (the default setting) the default merging radius
is used. If mergerad is 0 object merging is turned off altogether.
Otherwise the user can set the merging radius to a specific value.
Mergerad is used by the nstar and allstar tasks, but their default
behavior is unchanged. (V2.10.4p2)
Changed the name of the "critovlap" parameter to "critsnratio" to
avoid confusion with the the meaning of the parameter especially
with regard the mergerad parameter. The behavior of the parameter is
unchanged. (V2.10.4p2)
7. Parameter file changes
The parameter file changes below are for modifications between V2.10.4
and V2.11. For a list of parameter file changes between V2.10.3 and
V2.10.4 see the file iraf/v210/params.v2104.Z in the IRAF FTP archives.
In the tables below each parameter change is identified with one of the
following codes followed by task_name.parameter_name and the
description of the change.
n = new parameter
c = changed/modified parameter
d = deleted parameter
TV:
n display.nsample: replaces nsample_lines
d display.nsample_lines: replaced by nsample
n display.bpmask: specify a bad pixel mask
n display.bpdisplay: specify display mode for bad pixel mask
n display.bpcolors: specify overlay colors for bad pixel mask
n display.overlay: specify an overlay mask
n display.ocolors: specify overlay colors for overlay mask
n display.zmask: specify a sample mask for the zscale calculation
c imedit.xorder: now allows a value of zero for median background
c imedit.yorder: now allows a value of zero for median background
n rimexam.fittype: specify a profile type to fit - default is now moffat
n rimexam.iterations: specify number of iterations to adjust fitting radius
n rimexam.beta: specify beta value for moffat fitting
c rimexam.buffer: default value changed from 1 to 5
c rimexam.width: default value changed from 2 to 5
c rimexam.magzero: default value changed from 30 to 25
n wcslab.overplot: specify overplotting
DATAIO:
n wfits.fextn: extension to append to output disk FITS filename - default is
fits
n wfits.extensions: write all images to a single FITS file ? - default is no
n wfits.global_hdr: prepend a global header to the FITS extensions - default
is yes
IMAGES:
n fmedian.zloreject: good data minimum
n fmedian.zhireject: good data maximum
n fmedian.verbose: verbose option
n fmode.zloreject: good data minimum
n fmode.zhireject: good data maximum
n fmode.verbose: verbose option
n median.zloreject: good data minimum
n median.zhireject: good data maximum
n median.verbose: verbose option
n mode.zloreject: good data minimum
n mode.zhireject: good data maximum
n mode.verbose: verbose option
n geomap.transforms: list of record names
n geomap.results: results summary file
n geomap.fitgeometry: fitting geometry
d geomap.output: renamed to database
c geomap.reject: changed from 0.0 to INDEF
n [g]register.verbose: verbose option
d [g]register.transform: renamed to transfo
n geotran.verbose: verbose option
d geotran.transform: renamed to transforms
c imcombine.offsets: now allows specifying "wcs" to compute offsets from WCS
d imalign.images: renamed to input
c imalign.reference: went from hidden to auto
c imalign.coords: reversed places with reference
d imcentroid.images: renamed to input
c imcentroid.reference: went from hidden to auto
c imcentroid.coords: reversed places with reference
n imheader.imlist: default image names
PLOT:
n graph.ltypes: specify the line types
n graph.colors: specify the colors
PROTO:
n fixpix.masks: new version specifies bad pixel masks
n fixpix.linterp: specify mask values for line interpolation
n fixpix.cinterp: specify mask values for column interpolation
n fixpix.pixels: list pixels that are modified
d fixpix.badpixels: new version does not use bad pixel region description
c fields.lines: default value changed from "1-9999" to "1-"
ARTDATA:
n mk1dspec.profile: define the profile type
n mk1dspec.gfwhm: replaces sigma for gaussian profile width
n mk1dspec.lfwhm: width for lorentzian profile
c artdata.randbuf: default value changed from 1000 to 0.
c mkpattern.ndim: allows a value of 0 for a dataless header.
c mkpattern.pixtype: allows ushort.
c gallist.ar: default value changed to 0.3.
d mk1dspec.sigma: replaced by gfwhm
ASTUTIL:
n rvcorrect.keywpars: added to define keywords used
n asthedit.prompt: used for new calculator option
n asthedit.update: update the header
n asthedit.oldstyle: to allow backward compatibility
APEXTRACT, IMRED spectral packages:
n apnoise.apertures: select apertures to be used
n apfit.apertures: select apertures to be used
n apedit.apertures: select apertures to be used
n apfind.apertures: select apertures to be used
n apnormalize.apertures: select apertures to be used
n apscatter.apertures: select apertures to be used
n apsum.apertures: select apertures to be used
n aptrace.apertures: select apertures to be used
n apresize.apertures: select apertures to be used
n apmask.apertures: select apertures to be used
n apflatten.apertures: select apertures to be used
n aprecenter.apertures: select apertures to be used
n aprecenter.aprecenter: was what was previously the apertures parameter
n apall.apertures: select apertures to be used
n apall.aprecenter: was what was previously the apertures parameter
ARGUS, HYDRA, SPECRED:
n doargus.crval: for automatic line identifications
n doargus.crdelt: for automatic line identifications
n doargus.skyalign: night sky alignment option
n dohydra.crval: for automatic line identifications
n dohydra.crdelt: for automatic line identifications
n dohydra.skyalign: night sky alignment option
n dofibers.crval: for automatic line identifications
n dofibers.crdelt: for automatic line identifications
n dofibers.skyalign: night sky alignment option
n do3fiber.crval: for automatic line identifications
n do3fiber.crdelt: for automatic line identifications
ARGUS, HYDRA, KPNOCOUDE, KPNOSLIT, SPECRED:
c params.match: default value changed to -3 (3 pixels instead of Angstroms)
c sparams.match: default value changed to to -3 (3 pixels instead of Angs)
ONEDSPEC, IMRED spectral packages:
d fitprofs.sigma: replaced by gfwhm
d fitprofs.function: replaced by profile
d fitprofs.fitsigmas: replaced by fitgfwhm
d rspectext.header: removed since the task now senses the header information
ONEDSPEC, LONGSLIT, IMRED spectral packages:
n identify.units: specify the desired units for the dispersion function
n identify.crval: for automatic line identifications
n identify.crdelt: for automatic line identifications
n identify.aidpars: parameter set for automatic line identifications
c identify.match: default value changed to -3 (3 pixels instead of Angstroms)
c identify.threshold: default value changed from 10 to 0.
c reidentify.match: default value changed to -3 (3 pixels instead of Angs)
c reidentify.threshold: default value changed from 10 to 0.
n reidentify.crval: for automatic line identifications
n reidentify.crdelt: for automatic line identifications
n reidentify.aidpars: parameter set for automatic line identifications
n reidentify.search: specify a search radius for the automatic line
identification algorithm
n ecidentify.units: specify the desired units for the dispersion function
n fitprofs.profile: define the profile type
n fitprofs.gfwhm: replaces sigma for gaussian profile width
n fitprofs.lfwhm: width for lorentzian profile
n fitprofs.fitgfwhm: replaces fitsigmas
n fitprofs.fitlfwhm: select whether to fit lorentzian profile widths
n fitprofs.nerrsample: allows control of the error calculation accuracy
n splot.nerrsample: allows control of the error calculation accuracy
CCDRED:
c ccdproc.fixfile: this now specifies a bad pixel mask
c combine.offsets: now allows specifying "wcs" to compute from WCS
RV:
n rvcorrect.par: Added the KEYWPARS pset declaration
DAOPHOT:
c daopars.critsnratio: critical S/N ratio for group membership - changed
the name only from critovlap (V2.10.4p2)
n daopars.mergerad: critical object merging radius in scale units
(V2.10.4p2)
IRAF (Jul92) V2.10 Revisions Summary IRAF (Jul92)
IRAF Version 2.10 Revisions Summary
July 1992
1. Introduction
This document summarizes the changes made to IRAF in version 2.10.
V2.10 is a major release of IRAF, meaning that there were significant
changes to both the system and applications software, and the release
will eventually be made available on all supported platforms.
By IRAF version 2.10 we refer only to the core IRAF system and NOAO
packages. Numerous external or "layered" packages are also available
for IRAF, for example the NSO package (solar astronomy), the ICE
package (data acquisition), the STSDAS package from STScI (HST data
reduction and analysis), the TABLES package from STScI (tabular data),
the XRAY package from SAO (X-ray data analysis), and so on. These
packages are layered upon the IRAF core system, and once installed, are
indistinguishable from the rest of IRAF. Layered packages are
developed and maintained separately from the core IRAF release and
follow independent release schedules, hence we will not discuss them
further here. Contact the IRAF project or any of the outside groups
supporting IRAF layered packages for additional information on what is
available.
This document is intended only as an overview of what is new in version
2.10 IRAF. More detailed documentation will be found in the systems and
applications notes files (files sysnotes.v210.Z and pkgnotes.v210.Z in
the network archive), in the online help pages, and in any reference
papers or user's manuals distributed with the software. The IRAF
Newsletter is a good source of information for new IRAF software.
This revisions summary is organized as follows:
1. Introduction
2. IRAF System Revisions
3. IRAF and NOAO Package Revisions
3.1. Changes to the System Packages
3.2. Changes to the NOAO Packages
4. Programming Environment Revisions
4.1. Compatibility Issues
4.2. Portability Issues
4.3. Software Tools
4.4. Programming Interface Changes
5. Getting Copies of this Revisions Summary
The reader is assumed to already be familiar with the basic concepts and
operation of the IRAF system. In particular, familiarity with V2.9
IRAF is assumed.
2. IRAF System Revisions
2.1 Starting up V2.10 IRAF
Before attempting to start V2.10 IRAF each user should run the
mkiraf command in their IRAF login directory. This will create a new
login.cl file and uparm (user parameter) directory. mkiraf should be
allowed to delete any existing parameter files, as there have been many
changes to task parameter sets in the new version of IRAF.
2.1.1 LOGIN.CL changes
The login.cl file is read by the CL during startup to perform some
runtime initialization and to customize IRAF for each user. A standard
login.cl file is created and initialized by the mkiraf command when the
user's IRAF login directory is configured. For V2.10 IRAF the login.cl
file has undergone the following changes.
o The IRAF version number is now checked automatically whenever
you login, and a warning message will be printed if your
login.cl file is out of date. If you see this message it means
that important changes have been made to the login.cl file and
you need to rerun mkiraf to update this file.
o Most of core IRAF system packages are now loaded automatically
at login time by the login.cl file. If you use a personal
loginuser.cl file and you previously loaded any core system
packages in this file, you should edit the file and remove
those entries.
o A "quiet" login option is now provided. If a file named
.hushiraf exists in the login directory when you start up the
CL, printing of the usual login messages will be disabled (the
only output seen will be the "cl>" prompt).
o On UNIX/IRAF systems the login script now looks at the host
system environment variable TERM and checks for the common
terminal types "sun" and "xterm", configuring the IRAF stty
accordingly if either terminal type is seen (note that the
default number of lines set for an xterm terminal window may
need to be modified). The logic used to do this is not
foolproof however, and is provided only as an example
illustrating how to make use of the host system terminal
definitions. You may need to customize this portion of the
script, or override it in your loginuser.cl file.
o The CL hidden parameter showtype is now set to "yes" by default.
This will cause a character to be printed after the name of
each package or named pset in CL package menus to allow these
objects to be easily distinguished from ordinary tasks.
Packages are marked with a trailing period (".") and psets with
an ampersand ("@"). This feature can be disabled with a
"showtype=no" statement.
o The V2.10 login script contains a call to a new internal
(non-user) IRAF task mtclean. Be sure to leave this alone, it
is required for the correct operation of the new magtape i/o
system.
The USER package defined in the template login.cl has been
extensively revised, adding many new tasks. These are mainly used
to make common UNIX commands available from within the IRAF
environment. Type "?user" in the CL to see what is available, e.g.:
cl> ?user
adb cp fc lpq mv rlogin spell top
bc csh find ls nbugs rsh sps touch
buglog date finger mail nm rtar strings vi
cal df ftp make od ruptime su w
cat diff generic man ps rusers sync wc
cls du grep mkpkg pwd rwho telnet wtar
comm emacs less mon rcp sh tip xc
Note that since the USER package is defined in the user's login
file it is easily customized to add new tasks. Refer to the
existing package for examples illustrating how to do this.
2.1.2 Compatibility Issues
Version 2.10 IRAF requires the new login.cl file; if the CL does not
start up correctly, it may be because the user has not done a mkiraf,
or because they have some construct in their loginuser.cl file which is
incompatible with V2.10 IRAF. The V2.10 login file is usable with V2.9
IRAF, however this is not recommended.
There have been many task parameter changes between V2.9 and V2.10. If
"parameter not found" messages are seen, most likely the user has an old
uparm directory, or has been switching back and forth between IRAF
versions. An unlearn or mkiraf should fix the problem.
The V2.10 IRAF networking system is not fully compatible with earlier
versions of IRAF. This can cause problems when, e.g., a newly installed
V2.10 system is used to communicate with an older version of IRAF on
another system. The best solution is to update to V2.10 on all
systems, but if this is not convenient it is possible to configure the
networking system to avoid the problems. See the discussion of the new
networking system given below.
Accessing a remote magtape device via IRAF networking will not work
between V2.10 and older versions of IRAF (the remote procedure calls
have changed). To remotely access magtape devices you will need to
install V2.10 IRAF on both the client and server nodes.
In most respects installing V2.10 IRAF will be very similar to
installing earlier versions of IRAF. The main difference is the
tapecap file required to use the new magtape system. The old
dev$devices file is no longer used. See the discussion of the new
magtape system given below for more details.
Due to name changes in certain low level system routines (made to avoid
name clashes when linking with host level libraries) the V2.10
libraries are incompatible with older versions of IRAF. Any IRAF
programs or external packages relinked under V2.10 will have to be
fully recompiled or the linker will complain about unresolved
externals. Note that so long as the old program is not relinked there
should be no problem, even if the program uses the IRAF shared image,
since the V2.9 shared image is included in V2.10 (this applies to
Sun/IRAF systems only).
Starting with V2.10, many IRAF applications now fully support
generalized world coordinates (WCS). While in principle this should
not pose any compatibility problems, the image headers do contain more
information in V2.10 than previously, and there can be problems if, for
example, an input image contains an illegal WCS. Previous versions of
IRAF would ignore this but in V2.10 such an image could result in an
error or warning message. If WCS related problems are encountered it
is probably best to contact the IRAF group for help.
2.2 CL Enhancements
2.2.1 Formatted scans and prints, scan from a pipe
New in the V2.10 CL (command language) are formatted scan and print
routines, and the ability to scan from a pipe or other form of
redirected input. These new facilities will prove most useful in CL
scripts.
The old unformatted scan and print routines are the following. These
are still available and are the simplest routines to use where they are
adequate.
scan (arglist) # scan standard input
fscan (list, arglist) # scan a list
print (expr, exprlist) # print to standard output
fprint (param, exprlist) # print to a string buffer
For example,
list = "filename"
while (fscan (list, x, y) != EOF)
print ("x=", x, "y=", y)
In the above, arglist is a comma delimited list of output arguments
(parameter or parameter field names) and exprlist is a comma delimited
list of expressions to be printed. list is the name of a
list-structured parameter to be scanned, and param is the name of a
parameter, the value field of which is to receive the output string.
The unformatted scan routines will automatically convert output data
values to match the types of the output arguments.
The new formatted routines are as follows. These take an extra format
argument which tells how to parse the input string in the case of the
scanf routines, or how to format the output in the case of the printf
routines.
scanf (format, arglist) # formatted scan from stdin
fscanf (list, format, arglist) # formatted scan from a list
printf (format, exprlist) # formatted print to standard output
Currently there is no fprintf routine. For the printf routine the
format argument is similar to that for the SPP/VOS printf (which is
similar to the C printf). The format argument for the scanf routines
is the same as the VOS LIBC scanf, which is patterned after the C scanf
(in fact the UNIX manual page for scanf can be used as a guide to the
CL scanf with only minor deviations).
The following examples illustrate the new routines.
cl> printf ("%d foo %7.3f\n", 5, 12.123) | scanf ("%d foo %g", i, x)
cl> printf ("new values are i=%d, x=%g\n", i, x)
new values are i=5, x=12.123
or,
while (fscanf (list, " %*d size=%d name=%s", i, s1) != EOF)
printf ("size=%05o, name=`%s'\n", i, s1)
Note in the first example the use of scanf to scan from a pipe. There
are actually two different versions of scan and scanf in V2.10 IRAF, an
intrinsic function version and a procedure version. When called as an
intrinsic function, a scan routine returns as its function value the
number of operands successfully scanned, or EOF. When called as a
procedure, the function value of a scan routine is discarded.
Here is another example illustrating scan from a pipe, in this case
using an unformatted scan since the hselect output is in a simple
tabular format (hselect prints selected fields of the image header).
cl> hselect dev$pix naxis,naxis1,naxis2 yes | scan (i, j, k)
cl> printf ("naxis=%d, axlen=[%d,%d]\n", i, j, k)
naxis=2, axlen=[512,512]
When using the formatted scan routines, care must be taken to ensure
that the data types implied by the format argument match the actual data
types of the output parameters. The scanf routines are implemented
using an internal call to the C (LIBC) scanf, with the output parameter
value fields referenced directly via a pointer. If the data type is
incorrect the output value may be meaningless.
2.2.2 Unlearning package parameters
The unlearn task now works for package parameters as well as task
parameters. In a command such as "unlearn pkgname" the package
parameters for the named package will be unlearned, as well as the
parameters for all the tasks in the package. This works whether or not
the package is loaded.
2.2.3 Loading packages at login time
A bug has been fixed which affected packages with package
parameters loaded at login time. It is now permissible to load any
package at login time regardless of whether it has package parameters
(V2.9 users will recognize this bug as one which prevented loading
CCDRED in the login script).
2.2.4 Environment variables
The environment variables imtype, cmbuflen, and min_lenuserarea are
now defined at login time. Previously, explicit values for these
variables were not defined, and the system would use the builtin
internal defaults. Explicit definitions were added so that the user
can query the current value, e.g.
cl> show cmbuflen
128000
A show or set with no arguments will print the full environment list.
New values for these and other common environment variables may be set
in the user login.cl file.
2.3 System Management Related Changes
2.3.1 Install script
The UNIX/IRAF install script underwent minor changes to make it more
robust. Problems are still possible if the IRAF root pathname is set to
different values in the various system dependent files modified by the
script. The system as shipped from NOAO has the same initial root
pathname set in all such files, but problems can occur if the files are
manually edited during or after installation. To avoid problems always
use the install script to make system changes such as installing at a
different root directory.
2.3.2 Caching of termcap entries
User caching of termcap or graphcap entries with the old mkttydata
task is no longer recommended. The most common entries (e.g. sun,
xterm, vt100) are already cached. Modern workstations are so fast that
there is no longer much point in caching termcap entries; it is
sufficient to merely place local additions near the top of the file.
Most programs that repeatedly access the terminal cache the entries
internally during execution. Custom caching of termcap or graphcap
device entries requires that the system be relinked, and the risk
inherent in relinking the system (hence giving up the prebuilt,
pretested binaries) is not worth the small performance gain achieved.
2.3.3 Sorting of UNIX directories
The UNIX-based versions of IRAF now sort UNIX directories whenever a
directory is accessed to expand a file or image template. This will
fix the problem sometimes seen in earlier versions of IRAF, in which an
image template could appear to be expanded in a seemingly random
fashion.
2.3.4 UMASK support
The UNIX-based versions of IRAF now support the host level umask
file creation mask correctly. If files or directories created by V2.10
IRAF do not have the desired permissions, it is because you do not have
umask set correctly at the UNIX level (most people set umask to 022).
2.4 Networking Enhancements
2.4.1 New networking driver
The UNIX/IRAF networking driver has been completely rewritten for
version 2.10 IRAF, with the goals of eliminating redundant password
prompts, improving efficiency, and enhancing system security. For the
most part the changes will be transparent to the user. Once the IRAF
system manager has configured the dev$hosts file for the local site the
networking system should function automatically; in the default
configuration a password prompt should be seen only when connecting to
a server for which rhosts ("trusted" hosts) permission is not granted.
The following information is provided mainly for IRAF system managers.
In normal use the user does not need to understand how the networking
system functions.
2.4.1.1 How it works
The IRAF networking system is an RPC (remote procedure call)
mechanism for the IRAF kernel; all kernel procedures may execute either
locally or remotely, and the client and server nodes do not even need
to run the same operating system. IRAF applications may be
distributed, and may access resources which reside anywhere on the
network. IRAF networking is layered upon standard low level networking
protocols such as TCP/IP and DECNET.
The IRAF networking system defines one or more connection protocols
which are used by a client to connect to the IRAF kernel server on a
remote machine. The old networking driver supported only one
connection protocol, the rexec protocol, which requires a login name
and password. The new driver adds support for an rsh based protocol.
This is the default connection protocol for V2.10 IRAF; automatic
fallback to the rexec protocol is provided in the event that the rsh
connect fails. The rsh connection protocol bootstraps off the
suid-root rsh command found in most BSD derived UNIX systems (most
System V systems provide the equivalent command remsh).
The connection protocol is used to start the in.irafksd IRAF networking
daemon on the remote server node. This daemon executes with the same
uid and permissions as the account which initiated the connection, and
there is one such daemon per user per server node. Once the daemon has
been started via the rsh or rexec connection protocol, new client
connections are made very quickly, by merely forking the daemon to
create the IRAF kernel server process, and setting up a direct socket
connection between the IRAF client process and the server. The daemon
process runs indefinitely, shutting down if idle for longer than a
certain interval (the current default is one hour). When connecting to
the daemon a client must supply an authentication key to gain access to
the daemon. If authentication fails the daemon shuts down and it is
necessary to reestablish the connection.
2.4.1.2 The .irafhosts file
The new networking driver retains the old irafhosts file, used to
store information telling how to connect to various IRAF hosts (the
irafhosts file is the file .irafhosts in the user's login directory).
The networking system will automatically create this file for the user
if the file is not found; if an old-style file is found, it will be
edited by the system to make it compatible with the new networking
system. While it is no longer necessary for the irafhosts file to
contain password information to avoid password prompts, the file is
used to store the user authentication key, hence the file should be
read protected. The networking system will automatically read protect
the file if it is not already protected.
To avoid authentication failures when clients on different nodes
attempt to connect to the same server, the same authentication code
should be used on all server nodes. Unfortunately there is no way that
the networking system can do this automatically (without going to some
much more complicated authentication scheme, such as a key server), so
users who make heavy use of the networking system should install a copy
of their irafhosts file in their login directory on all server nodes.
If this is not done the networking system will still work, but will be
less efficient than it could be, when simultaneously accessing the same
server from IRAF sessions running on multiple client nodes.
The truly paranoid may not be happy with even the unique user
authentication code used in the current networking system. If this is
the case the port parameter (see below) may be set to zero to force rsh
to be used for every connection (in effect the in.irafksd daemon has to
be restarted for every connection). This imposes an overhead of as
much as several seconds on every server connect. Alternatively, KSAUTH
can be defined in the user environment at login time, setting the value
string to some random integer value selected at login time. If defined
in the user environment, KSAUTH will override the value of auth given in
the irafhosts file. This approach would at least allow efficient
connects for a single login process tree.
The irafhosts file consists of two sections. The first section defines
several networking parameters: port, auth, hiport, and timeout. The
second section is a list of server nodes, with login and password
information describing how to connect to each node.
port = default
auth = 1234567890
hiport = default
timeout = default
ursa : <user> ?
* : <user> <user>
The example above illustrates a typical irafhosts file. Typically a
unique authentication code is allocated automatically by the system
when the file is first created, and the other parameters retain their
default values as shown (i.e., the string "default"). In the example
the host list consists of an entry for the node "ursa", and an entry
for everything else. The format of a host entry is "host-name :
login-name password". If login-name is the reserved string "<user>"
the user name on the client node is used for login authentication on
the remote node. Setting the password to "<user>" as well causes the
rsh connect protocol to be used; anything else causes the rexec
protocol to be used. If the rexec protocol is used the password field
may be set to the actual password or to the string "?", in which case
the system will prompt for the password whenever a connection attempt
is made. The "*" entry should always be the last entry in the list,
since it matches all nodes. The default host list contains only the
"*" entry.
Additional information on the irafhosts file is provided in the
comments in the file dev$irafhosts, and in the system notes file.
2.4.1.3 Compatibility
By default the new networking system will try to use the rsh
protocol to connect to the server node. If the server is running an
older version of IRAF the connection attempt will hang and eventually
time out. If this occurs the networking system will fall back on the
rexec protocol and issue a password prompt, but by then the user will
probably have interrupted the connect. The best way to avoid this
problem is to update the server node to V2.10, but if this is not
possible, an explicit entry for the node can be made in the irafhosts
file, setting the password field so that the rexec protocol will be
used.
An older, e.g. V2.9 client connecting to a V2.10 server should not be a
problem. In this case the V2.10 server will see an attempt to connect
with the rexec protocol, which should be processed as in the past.
Aside from the problem of making a connection the pre-V2.10 and V2.10
networking systems are compatible, except for the magtape i/o calls.
Since the magtape driver calling sequences were changed in V2.10, remote
magtape access between V2.10 and older systems is not supported.
2.4.2 The hosts file
The file dev$hosts is used to interface new host machines to the
IRAF networking system. This file defines, for each host, the primary
host name, any aliases, and the command to be executed remotely to start
up the IRAF kernel server on a remote node.
The format and role of the hosts file is unchanged in V2.10. Two
changes were made which affect the use of this file.
o A user can now have a private copy of the hosts file. To enable
this feature, the variable irafhnt (IRAF host name table) should be
defined in the user's IRAF or host level environment, with the
string value giving the file pathname of the user's private host
name table file.
o The maximum number of entries in the host name table has been
increased from 64 to 128. In the current implementation these
entries are statically buffered, so it is necessary to keep the
maximum number of entries to a reasonable value.
The hosts file must be configured to enable IRAF networking. IRAF
networking is disabled if there is no entry for the local host in
this file. The netstatus command may be used to examine the state
of the host name table after it has been loaded by the networking
system.
There is another file dev$uhosts which often confuses people. This
file is not used by UNIX/IRAF and can be ignored; it is there for
VMS/IRAF and other IRAF implementations which do not provide the
equivalent of the UNIX system routine gethostbyname. On host
machines which implement name server facilities IRAF will use the
name server, allowing any machine on the internet to be accessed
via IRAF networking, so long as there is an entry in the system
wide or user IRAF hosts file.
2.5 Magtape System Enhancements
The magtape subsystem underwent a major revision in V2.10. The VOS
level MTIO interface was extensively revised, and the host-level IRAF
magtape driver ZFIOMT is completely new. A new device configuration
facility called tapecap was introduced. Together with the new
"programmable" magtape driver, this makes it possible to interface
almost any removable media mass storage device to the magtape
subsystem. The DATAIO applications, in particular the FITS programs,
underwent minor, but important revisions.
A full specification of the new magtape subsystem, particularly the
tapecap facility, is beyond the scope of this document. Our intention
here is merely to introduce the new facilities. A reference paper is
planned, time permitting, which will fully document the new magtape
system and tapecap.
2.5.1 Basic usage
In most respects basic usage of the magtape system is unchanged from
previous releases. Many new capabilities have been added, but these are
upwards compatible with earlier releases.
2.5.1.1 Logical device names
Magtape devices are still referred to in IRAF applications much as
they have been in the past. Whether or not the logical device names
are the same before and after the V2.10 upgrade depends upon how the
IRAF system manager configures the tapecap file. The new magtape
system is much more flexible than previously regarding device names,
but to avoid user confusion it is recommended that the old names be
supported as aliases regardless of whatever the full device name may be.
As in earlier versions of IRAF, a simple magtape reference might be
cl> mtexamine mta
where "mta" is the device name. To examine only file 3 on the tape one
might enter
cl> mtex mta[3]
If the device is on the remote node "ursa" the command would be
cl> mtex ursa!mta[3]
If the device is a 9 track tape supporting multiple densities we might
specify the density explicitly, e.g.
cl> mtex mta1600[3]
Device names can be more complex. For example,
cl> mtex mtwd
might refer to a WangDAT drive, and
cl> mtex mtwdc
to the same drive, but with data compression enabled.
Devices can have multiple names, possibly with slightly different
behavior or characteristics. Device names such as "mta" are usually
only host specific aliases for the lower level, host independent device
names. The names "mta" and "mtb" might be aliases for the actual device
names "mthp0" and "mtxt1". This can be useful in networked systems
where IRAF and the tapecap file reside on a server node, but the user
is running IRAF on their workstation with a local tape drive attached.
In this case there may be no entry for the local drive in the installed
tapecap file, but the user can still access the local drive using the
lower level, host independent device entry (it is also possible to have
a private tapecap file as we shall see later).
To see what logical devices are known to the magtape system you can
enter the following command (the task gdevices was intended for
graphics devices but can be pressed into service to list a tapecap file
as well). Just because a device is listed does not mean that the
physical device actually exists on a particular host system.
cl> gdev devices='^mt' graphcap=dev$tapecap
In IRAF V2.10 it is possible to include tapecap parameters in the device
specification to do clever things, as in the following example.
cl> mtex "mta[:so=lepus:se:nb]"
This is discussed further below in the section describing the tapecap
facility.
2.5.1.2 Device allocation
Device allocation operates much the same in V2.10 as in earlier
versions of IRAF. The main change is that it is no longer necessary to
allocate a device in order to be able to access it. It is strongly
recommended however that you always allocate a device before accessing
it in IRAF. If the device is not allocated anyone can access the
drive, e.g., changing the tape position, and this can cause data to be
lost or improperly read back. The only reason to access the drive
without allocating it is if there is some problem with device
allocation on your system.
A device is allocated with the allocate command, e.g.
cl> alloc mta
A device is deallocated with deallocate. If the tape has already been
unmounted use the rewind=no option to avoid accessing the drive. By
default the tape will be rewound when it is deallocated. Deallocating
and reallocating a drive initializes the magtape system, i.e., all
cached knowledge of the status of the drive is discarded.
2.5.1.3 Device status
The device status can be examined at any time that the magtape
device is idle (not being actively accessed by an IRAF task) using the
devstatus task.
cl> devs mtc
# Magtape unit mtc status Thu 12:54:02 04-Jun-92 user v14
file = 4
record = 1
nfiles = 0
tapeused = 405
pflags = 0
Of particular interest are the tapeused and nfiles fields. nfiles
refers to the total number of files on the tape (if a file is appended
to the tape it will be file nfiles+1). If nfiles is given as zero that
means that the magtape system does not yet know how many files are on
the tape (it has not seen the end of tape).
tapeused reports the amount of tape used in units of kilobytes. This
is intended to refer to the amount of tape used up to and including the
end of tape (EOT). However, the magtape system only knows about data
that it has seen, i.e. physically read or written, so whether or not
tapeused is accurate depends upon how you have accessed the tape.
For example, if you started out with a fresh tape and appended a number
of files the number should be accurate. If you just completed a full
scan of the tape with mtexamine the number should be accurate, since
all the data was read. If you just put on a new tape and did a scan of
the FITS headers with "rfits make-", the number may or may not be
accurate, depending upon the device and how file skipping forward was
done. In most cases only the header area of each file will have been
read and tapeused will not reflect the full contents of the tape. If
however, "rfits make-" is done immediately after writing to a new tape,
the number will be accurate, since all the data was written before the
tape was rescanned to print the FITS headers.
Be advised that by default an explicit rewind will clear the nfiles and
tapeused fields, since by default rewind initializes the magtape
system. See the discussion of rewind below.
In summary tapeused can be useful for monitoring how much space is left
on a tape, but you have to know what you are doing. When writing to a
new tape the number will be accurate so long as you avoid doing an
explicit rewind. A simple procedure which will always work when
mounting a non-empty tape and appending files to it, is to do an
mtexamine of the tape and then append the new files. This can be time
consuming for large tapes but does provide a safe and
device-independent method for getting the maximum amount of data on a
tape.
2.5.1.4 File positioning
File positioning when accessing magtape files in IRAF is
straightforward in the sense that you can simply specify the file
number to read an existing file, or "append" (as in wfits new-) to
append a file to an existing tape. Most tasks accept range lists to
access existing files, e.g.
cl> mtexamine mta file="3,5,9-11"
It is even possible to position a tape to a specific record within a
file. Opening a tape with file zero (as in "mta[0]") disables file
positioning, allowing the tape to be positioned with host level
utilities to workaround media problems.
There can be problems with this simple scheme however, with modern tape
devices such as DAT and Exabyte which have capacities in the gigabyte
range and which may be used to store thousands of files. It is beyond
the scope of a revisions summary to go into this in detail here, but a
simple example will help illustrate the problem.
Assume we have a tape mounted on device "mtwd" containing 900 files. We
want to append image "pix" as a FITS file. The obvious thing to do is
enter the following command.
cl> wfits pix mtwd new-
This will certainly work. The only problem is that if the tape is
freshly mounted the magtape system will not know how many files there
are on the tape, and it will have to skip forward one file at a time to
count the files and determine where EOT is. In the worst case of a
tape containing several thousand files this could literally take hours.
If we know apriori the number of files on the tape, e.g., 900 in our
example, the following command would be much faster (something like
10-40 seconds on most DAT drives, assuming a decent host level driver).
cl> wfits pix mtwd[901]
Of course, if there were actually 930 files on the tape, the last 30
files would be overwritten.
There is a useful trick which works in some cases if we don't care
exactly how many files are on the tape (whether this works depends upon
the specific device and the host driver). Assume that we know there
are several hundred files on the tape, but less than 1000. We enter
the following command to append a file to the tape.
cl> wfits pix mtwd[1000]
If this works, after the operation the magtape system will think there
are 1000 files on the tape. A subsequent "wfits new-" would be very
fast regardless of the tape position, since so long as the magtape
system knows where the end of tape is relative to the current position,
it can get there very fast.
If the trick doesn't work for your particular device or driver you will
probably get a positioning error when attempting to position to a
nonexistent file beyond the EOT.
More automated techniques for rapid positioning with very high capacity
tapes are still a matter for study. One promising technique would be to
formalize the above approach by supporting EOT-relative positioning. A
tape catalog based approach is also possible. The best approach may
simply be to not write so many small files on large tapes, by grouping
images or other data system files into a single large tape file (as
with UNIX tar). None of these approaches are implemented in V2.10.
2.5.1.5 Rewind
In IRAF a magtape device is rewound with the rewind command, as in
the following example.
cl> rewind mta
By default this will not only rewind the tape but also initialize the
magtape system, in the sense that all cached information regarding the
named device is erased (e.g., nfiles and tapeused in the cached device
status). This is necessary when changing tapes without deallocating the
drive; always do an explicit rewind (or deallocate) of the device before
removing a tape or mounting a new one. Having rewind initialize things
is also useful if error recovery should fail following an interrupt or
program abort.
In some cases it may be useful to be able to do a rewind without
erasing the cached device status. This is done by specifying the init-
option on the command line.
2.5.2 New magtape driver
The IRAF magtape driver is new for V2.10. The chief feature of the
new driver is that it is programmable, via the tapecap device entry,
making it possible to interface new devices or host drivers without
having to make any binary code changes to IRAF. All one has to do is
add a device entry in the tapecap file.
2.5.2.1 Software structure
The IRAF magtape system has enough layers that it may be confusing
exactly what the magtape driver is and what role it plays. A brief
review of the software structure may help clarify things.
Starting at the top we have applications, such as the DATAIO and MTLOCAL
tasks, which can access magtape files. These use the IRAF/VOS
interfaces FIO (file i/o) and MTIO (magtape i/o) to do i/o to tape
devices. For the most part i/o is done with FIO and is device
independent, but a call to the magtape system is required to open a
magtape device. The tapecap file is read by the GTY interface, which
is called by MTIO. MTIO passes the tapecap device entry as a string to
ZFIOMT, the IRAF magtape device driver, when a tape file is opened.
All magtape positioning and i/o is done by ZFIOMT driver under the
control of the MTIO interface. Device allocation is done prior to
accessing the device by the CL and is handled by the allocation
routines in the ETC interface, with kernel support (this is largely
independent of the magtape system).
All of the code listed above is part of the portable IRAF system (i.e.,
is OS independent and shared by all host versions of IRAF) until we get
to the ZFIOMT driver. This is in the IRAF kernel and is host system
dependent. At present the only version of ZFIOMT is the UNIX version;
other versions, e.g., for VMS will follow as IRAF is updated to V2.10
on these systems. The UNIX version of ZFIOMT uses only generic UNIX
ioctls and should compile on most UNIX systems without change. All of
the system and device dependence has been concentrated in the tapecap
file. The ioctls used to communicate with a UNIX tape device are
fairly standard, but the semantics are often poorly defined and are
certainly not standardized.
Beneath the IRAF driver are the host level magtape device drivers. A
given host system may have more than one of these, typically one for
each class of magtape device. Some systems, notably Sun with their ST
(SCSI tape) driver, try to control more than one type of device with a
single host driver. The host driver may come with the OS or may be
supplied by a third party vendor.
Beneath the host driver is the actual tape device. Often these days
this is a SCSI tape device such as a DAT or Exabyte. These devices are
intelligent peripherals; control of the physical tape hardware resides
in the tape unit. There is a small computer in each tape drive which
communicates with the host computer via the SCSI interface, passing
commands and data back and forth. The drive will buffer 256K to 512K
of data passed in bursts over the SCSI bus, and then copied to or from
the physical media at a much slower rate. These drives emulate
variable size records by blocking and deblocking within the drive unit,
and writing fixed size blocks to the media. Features such as error
correction and data compression are also handled within the drive.
Although we usually speak of tape devices, the "magtape" device does not
have to be a tape device at all. The IRAF magtape system can also make
use of, e.g., a floppy disk, or anything that looks like a raw disk
partition. The problem with the latter devices is that they usually
don't support files and file positioning, hence can only be used to
store one "file".
2.5.2.2 Driver features
A detailed description of the magtape driver is beyond the scope of
this document. Briefly, the driver supports two main classes of
devices, variable record size devices and fixed block devices. All
file positioning is handled by the driver, and while the driver has the
device open it is responsible for keeping track of the device position
(the saved device position is passed in at open time and saved by the
high level code at close time). A couple of dozen tapecap parameters
are defined which describe the characteristics of each device, such as
whether it supports variable records, the maximum record size, whether
it can backspace, and so on. A socket or file based status logging
feature is provided which allows detailed monitoring of the tape status
during execution (see below).
In the simplest case the new magtape system, coupled with the UNIX
version of the magtape driver, will emulate simple UNIX commands such
as tar and mt insofar as the requests made to the host system and
magtape device are concerned. That is, if one writes a series of files
the only system requests made for each file will be open, write, and
close. When reading a series of files in sequence the only requests
made will be open, read, and close. Providing no file positioning is
attempted it is possible to get by with no file positioning requests
other than rewind. The driver provides extensive facilities for file
positioning, using tapecap parameters to work around any shortcomings
of the host system or device, but in case of trouble it is possible to
operate with only open, close, read, and write requests, which should
work for any device (unless it is truly broken).
2.5.3 Tapecap
The tapecap file, or magtape device capabilities file, defines the
magtape devices known to the system and how to access these devices.
While large portions of this file depend only upon the host operating
system and device type and hence are fairly site independent, it will
typically be necessary to customize the tapecap file to configure the
IRAF magtape system for a site. In normal use the tapecap file is
invisible to the user, but users with special problems may wish to
learn more about tapecap to gain more control over the behavior of the
magtape system.
2.5.3.1 Using tapecap
The standard tapecap file is the file dev$tapecap. A system
environment variable tapecap is defined which by default points to this
file.
Users can customize or manipulate tapecap entries in either of two ways.
The user can have their own private copy of the tapecap file (much as is
currently done with the termcap and graphcap files), by resetting the
value of the tapecap environment variable to point to their local copy
of the file. For example,
cl> reset tapecap = home$tapecap
This may be necessary to customize a device entry, or add support for a
local device not supported by the system wide tapecap file.
It is also possible to modify a tapecap device entry "on the fly", by
overriding the values of specific tapecap parameters on the command line
when the device is accessed. For example,
cl> mtex "mta[:so=/dev/tty]"
would override the default value of the tapecap parameter "so" for
device mta (in this case enabling status output logging and directing
this output to the user terminal).
Specifying tapecap parameters on the command line is useful for
experimentation but rapidly becomes tiresome if many commands are
entered. In this case it becomes simpler to redefine tapecap to include
the desired tapecap parameter overrides.
cl> reset tapecap = ":so=/dev/tty"
As we see, the tapecap environment variable can be used to either
specify the tapecap file name, or globally override specific tapecap
parameters (all device entries are affected). The full form of the
value string for tapecap is
cl> reset tapecap = [tapecap-file] [`:' capabilities-list]
Any number of colon-delimited tapecap capabilities or parameters may be
given.
It is beyond the scope of this document to detail all the tapecap
parameters here. A reference paper for the magtape system is planned.
For the present, there is a summary of the tapecap parameters in the
ZFIOMT driver source file, os$zfiomt.c. For examples of actual usage
refer to the tapecap file in the distributed system.
2.5.3.2 Configuring tapecap
The tapecap file uses the standard "termcap" file format,
originally developed for BSD UNIX and adopted long ago for IRAF. Any
UNIX system will probably have a manual page defining the termcap file
format, if not this can be obtained from the IRAF group.
The distributed tapecap file is divided into three sections: the host
machine specific device aliases (names like "mta" etc.), the site
logical devices, and the generic device entries. To customize the
tapecap file for a site you modify the first and second sections. To
configure the tapecap file for a particular host machine you uncomment
the entries for that host in the first section of the file. Sites
which don't have a large network of hosts may prefer to combine the
first two sections to simplify things. Site specific changes should
never be made to the bottom, or generic, part of the tapecap file, as
you will want to update this portion of the file when new versions of
IRAF are released.
Don't be intimidated by the apparent complexity of some of the tapecap
device entries. In most cases the generic device entry will already
exist for the device you need to interface, and all you need to do is
add a site entry which references the generic entry. In some cases the
generic entry itself may be sufficient (for example, in the distributed
SunOS version of tapecap, logical device "mtxb0" would provide access
to Exabyte unit 0 interfaced with the Sun ST driver, "mtxb1" would be
the same but unit 1, "mthp0" the HP 9 track tape on unit 0, and so on).
For example to interface Exabyte unit 2, using the Sun ST driver, as
local device "mta", the following entry would suffice.
mta| :tc=mtst2-exb:
If the generic device entry provided doesn't quite work and minor
modifications are needed, these should be made to the local entry and
not the standard generic entry. This is easily done with termcap
parameter redefinitions. For example, in SunOS 4.1.2 (but not earlier
versions of SunOS) there is a bug in the Sun ST driver which
necessitates rewinding the tape after a tape scan is made to position
to EOT (!). The capabilities ":se:nb" can be added to the tapecap
entry for the device to workaround this bug, as in the following
example.
mta| :se:nb:tc=mtst2-exb:
The parameters mean that the device spaces past EOT in a read (se) and
cannot backspace (nb). Neither of these things is actually true, but
the effect is that the tape is rewound and spaced forward to get back
to the desired file, working around the host level driver bug. Access
will be less efficient than it should be, but the interface will work
properly and the user does not have to be concerned with the problem.
As a final example, suppose we need to write a new tapecap entry from
scratch because there is no generic entry for the device in the
distributed tapecap file. To simplify things we assume that no special
tapecap parameters are needed, i.e., that the standard UNIX defaults
builtin to the driver will work for the device. We are upgrading from
an old version of IRAF so we already have an old dev$devices file to
work with. For the purposes of our example we use an old HP 88780 1/2
tape drive entry, but pretend that the device is something which is not
already supported.
The old devices file entry was as follows.
mta nrst20 nrst4 nrst12 nrst28 rst4 rst12 rst20 rst28
mta.6250 nrst20 nrst4 nrst12 nrst28 rst4 rst12 rst20 rst28
The minimal tapecap entry required to duplicate this is the following.
mta|mta6250|HP 88780 1/2 inch tape drive:\
:al=nrst4 nrst12 nrst20 nrst28 rst4 rst12 rst20 rst28:\
:dv=nrst20:lk=st4:tc=9tk-6250:
Here, the "al" parameter lists the device files to be allocated, the
"dv" parameter is the device file to be used for i/o at the desired
density (6250bpi in this case), and "lk" is the root file name to be
used for the ".lok", or device status file. The "tc=" picks up the
standard parameters for a 9 track 1/2 inch tape drive operating at 6250
bpi. Two device aliases are defined, "mta" and "mta6250".
2.5.3.3 Supported devices
The IRAF magtape system itself should support almost any magtape
device if properly configured. What devices are actually supported at
a site depends upon the tapecap file, and in particular upon the host
system (different host systems have different tapecap files).
Device Driver
QIC-11 cartridge tape Sun st
QIC-24 cartridge tape Sun st
QIC-150 cartridge tape Sun st
Pertec compatible 1/2 inch drives Xylogics
HP 88780 1/2 inch drive Sun st
WangDAT 1300, 2000 ApUNIX
HP DAT ApUNIX
Exabyte 8200, 8500 ApUNIX, Sun st, Ciprico
DC2000 cartridge tape A/UX tc
FDHD floppy disk A/UX fd
As an example, the tapecap file distributed in the V2.10.0 release of
Sun/IRAF supported the devices listed in the table above. New devices
are constantly being added. As V2.10 IRAF propagates to the various
platforms on which IRAF is supported, similar tapecap files will be
configured for those systems.
2.5.4 Status output
The new magtape driver has a facility known as status output
logging which can be used to monitor interactively lengthy tape jobs
while i/o is in progress. The status output facility can also be
useful for debugging magtape problems.
In its simplest form, the status output may be directed to a file,
e.g., an actual text file, or a terminal device. Status output is
enabled by setting the "so" option in tapecap. For example,
cl> mtex "mta[:so=/tmp/mta.out]"
would enable status output logging and direct the output text to the
file /tmp/mta.out. Likewise,
cl> mtex "mta[:so=/dev/ttyp7]"
would enable status output and direct the output to a pseudoterminal,
e.g., an xterm window. When this form of status output logging is used
one sees the raw, driver level status messages, as in the following
example.
cl> mtex "mta[:so=/dev/tty]"
open device tc2n\n
devtype = Apple Tape 40SC
tapetype = DC2000
tapesize = 38500
density = na
blksize = 8192
acmode = read
file = -1
record = -1
nfiles = 0
tapeused = 0
device tc2n opened on descriptor 4\n
rewinding...
done\n
position to file 1\n
file = 1
record = 1
reading...\n
recsize = 65536
record = 9
tapeused = 64
(etc.)
The UNIX version of the new magtape driver also has an option to direct
status output to a TCP/IP socket, which can be anywhere on the network.
For this option to be useful one must have a program which will listen
on the designated socket, accept the connection when the magtape driver
tries to open a connection, and then read and process the status
messages (which are still text, exactly as in the example above).
Status output to a socket is enabled by giving a host name instead of a
file name in the "so" directive:
cl> mtex "mta[3:so=lepus]"
to examine file 3, directing status messages to a socket on node
"lepus".
An X11 client application called xtapemon has been developed to listen
on a socket, read messages from the tape driver, and provide a real-time
display of the status of the tape device. While not included in the
V2.10 IRAF distribution, this utility will be available later in 1992
as part of the X11 support package currently under development.
2.5.5 Error recovery
Considerable effort went into "bullet proofing" the new magtape
system to make it recover gracefully from ctrl/c interrupts or other
program aborts. In practice it can be very difficult to reliably catch
and recover from interrupts in a multiprocess, distributed system such
as IRAF. No doubt there are still conditions under which an interrupt
will leave the magtape system in a bad state, but in most circumstances
the system should now be able to successfully recover gracefully from
an interrupt.
If it is necessary to interrupt a tape operation, it is important to
understand that the host system will not deliver the interrupt signal
to the IRAF process until any pending i/o operation or other driver
request completes. For example, in a read operation the interrupt will
not be acted upon until the read operation completes, or in a tape
positioning operation such as a rewind or file skip forward, the
interrupt will not be acted upon until the tape gets to the requested
position. For a device such as a disk you rarely notice the delay to
complete a driver request, but for a magtape device these operations
will take anywhere from a few seconds to a few tens of seconds to
complete. Type ctrl/c once, and wait until the operation completes and
the system responds.
If a magtape operation is interrupted, the IRAF error recovery code will
mark the tape position as undefined (devstatus will report a file
number of -1). This will automatically cause a rewind and space forward
the next time the tape is accessed. The rewind is necessary to return
the tape to a known position.
2.5.6 Device optimization
In addition to making it possible to characterize the behavior of a
magtape device to permit the device to be accessed reliably, the
tapecap facility is used to optimize i/o to the device. The parameter
"fb" may be specified for a device to define the "optimum" FITS
blocking factor for the device. Unless the user explicitly specifies
the blocking factor, this is the value that the V2.10 wfits task will
use when writing FITS files to a tape. Note that for cartridge devices
a FITS blocking factor of 22 is used for some devices; at first this
may seem non-standard FITS, but it is perfectly legal, since for a
fixed block size device the FITS blocking factor serves only to
determine how the program buffers the data (for a fixed block device
you get exactly the same tape regardless of the logical blocking
factor). For non-FITS device access the magtape system defines an
optimum record size which is used to do things like buffer data for
cartridge tape devices to allow streaming.
Some devices, i.e., some DAT and Exabyte devices, are slow to switch
between read and skip mode, and for files smaller than a certain size,
when skipping forward to the next file, it will be faster to read the
remainder of the file than to close the file and do a file skip
forward. The "fe" parameter is provided for such devices, to define
the "file equivalent" in kilobytes of file data, which can be read in
the time that it takes to complete a short file positioning operation
and resume reading. Use of this device parameter in a tape scanning
application such as rfits can make a factor of 5-10 difference in the
time required to execute a tape scan of a tape containing many small
files.
On most cartridge tape devices backspacing, if permitted at all, is very
slow. On such devices it may be best to set the "nf" parameter to tell
the driver to rewind and space forward when backspacing to a file.
2.5.7 MTIO interface changes
A number of new routines were added to the MTIO (magtape i/o)
programming interface. These are documented in the summary of
programming environment revisions given below. Existing magtape
applications may benefit from being modified to make use of these new
routines.
2.6 Graphics and Imaging Subsystem Enhancements
2.6.1 New graphics applications
New tasks for histogram plotting, radial profile plotting, and
producing lists of the available graphics devices have been added to
the PLOT package. All of the tasks in this package were revised to add
support for world coordinates. A related task for drawing world
coordinate grid overlays on images or plots was added to the IMAGES.TV
package. See the appropriate sections of IRAF and NOAO package
revisions below for further information on these changes.
2.6.2 Graphics system changes
2.6.2.1 Encapsulated postscript SGI kernel
A new encapsulated postscript SGI kernel has been added. Graphics
output may be directed to any of the logical graphics devices eps, epsl,
epshalf, etc. to render a plot in encapsulated postscript, e.g., for
inclusion as a figure in a document. For example,
cl> prow dev$pix 101 dev=eps; gflush
will leave a ".eps" file containing the plot in the current directory.
The command "gdev dev=eps" will produce a list of the available EPS
logical graphics devices.
2.6.2.2 Graphics output to the default printer
Graphics output (SGI postscript) can now be directed to the UNIX
default printer device by directing output to any of the logical
devices "lpr", "lp", or "lw".
cl> prow dev$pix 101 dev=lpr
Output will be sent to the default device for the UNIX lpr command (set
by defining "PRINTER" in your UNIX environment). This makes it
possible to make immediate use the distributed IRAF graphcap without
having to add entries for specific local devices (although you may
still wish to do so).
2.6.2.3 Tick spacing algorithm improved
The algorithm used to draw the minor ticks on IRAF plots was
replaced by an improved algorithm contributed by the STScI STSDAS group
(Jonathan Eisenhamer in particular). This was derived from similar
code in Mongo.
2.6.2.4 Graphics metacode buffer
The default maximum size of the graphics metacode buffer in the CL,
used to buffer graphics output for cursor mode interaction, was
increased from 64K to 128K graphics metacode words (256Kb). The
cmbuflen environment variable may be used to change this value.
2.6.2.5 IMTOOL changes
The imtool display server (SunView) was enhanced to add additional
builtin color tables, support for user color tables, and setup panel
control over the screen capture facilities. A version supporting
encapsulated postscript output is in testing. This will be the final
version of the SunView based version of imtool (the new display servers
are all X window system based).
2.6.2.6 IMTOOLRC changes
The imtoolrc file, used by display servers such as imtool and
saoimage to define the available image frame buffer configurations, has
been relocated to the DEV directory to make it easier for local site
managers to customize. The IRAF install script now uses a link to
point to this file, rather than copying it to /usr/local/lib. The
maximum number of frame buffer configurations was increased from 64 to
128.
2.6.2.7 X11 support
The released version of V2.10 does not contain any changes insofar
as X11 support is concerned. Since our X11 support code is host level
stuff, with minimal ties to IRAF per se, it is being developed
independently of the V2.10 release and will be distributed and
installed as a separate product.
2.7 Image Structures
2.7.1 Image I/O (IMIO)
The image i/o interface (IMIO) is that part of the IRAF system
responsible for imagefile access and management. The changes to IMIO
for V2.10 included the following.
2.7.1.1 Null images
Null images are now supported for image output, much like the null
files long supported by the file i/o system. For example,
cl> imcopy pix dev$null
would copy the image "pix" to the null image. This exercises the
software but produces no actual output image. Unlike null files, null
images do not work for input since images have some minimal required
structure, whereas files can be zero length.
2.7.1.2 Preallocating pixel file storage
In the UNIX versions of IRAF, when a new image is created storage
is not physically allocated for the output image until the data is
written. This is because most UNIX systems do not provide any means to
preallocate file system storage. The UNIX/IRAF file creation primitive
zfaloc, used by IMIO to create pixel files, now provides an option
which can be used to force storage to be physically allocated at file
creation time. This feature is enabled by defining the environment
variable ZFALOC in the UNIX environment. For example,
% setenv ZFALOC
can be entered before starting IRAF to cause space for all pixel files
to be preallocated as images are created. If it is not desired to
preallocate all image storage (there is a significant runtime overhead
associated with preallocating large images) then a value string can be
given to specify which types of images to preallocate storage for. For
example,
% setenv ZFALOC /scr5
would preallocate only those pixel files stored on the /scr5 disk, and
% setenv ZFALOC "/scr5,zero"
would preallocate only images on /scr5, or images containing the
substring "zero" in the image name. In general, the string value of
ZFALOC may be the null string, which matches all images, or a list of
simple pattern substrings identifying the images to be matched.
In most cases the default behavior of the system, which is to not
physically allocate storage until the data is written, is preferable
since it is more efficient. The preallocation option is provided for
users who, for example might have an application which spends a lot of
time computing an image, and they want to ensure that the disk space
will be available to finish writing out the image.
2.7.1.3 Image templates now sorted
As mentioned earlier in the System Management section, UNIX/IRAF now
sorts UNIX directories. One result of this is that the sections of
image templates which are expanded via pattern matching against a
directory will now be sorted, or at least logically ordered (the final
output list will not necessarily be fully sorted if string substitution
is being performed - this is the reason the output list itself is not
sorted).
2.7.1.4 The dev$pix test image
Minor changes were made to clean up the image header of the
standard test image dev$pix. A second test image dev$wpix has been
added. This is the same image, but with a different header containing a
test world coordinate system (actually the image is just a second image
header pointing to the dev$pix pixel file, now shared by both images).
2.7.2 Image kernels (IKI)
The IMIO image kernels are the data format specific part of the
IRAF image i/o subsystem. Each kernel supports a different image
format. Existing disk image formats range from the conventional image
raster formats (OIF and STF) to the photon image format (QPF and QPOE)
and the pixel mask image format (PLF and PMIO/PLIO). There also exist
special image kernels which allow IMIO to be used to access non-disk
storage devices such as image display frame buffers.
2.7.2.1 New PLF image kernel
A new image kernel, the PLF image kernel, has been added which
allows IRAF PMIO/PLIO pixel masks to be stored as images. This kernel
first appeared as a patch to version 2.9 IRAF but was actually
developed within V2.10.
Pixel mask images may be created, deleted, read, written, etc. like
other IRAF images, but the image is stored in a special compressed
format designed specially for image masks. An image mask is an
N-dimensional raster-like object wherein typically there are regions of
constant value but arbitrary shape. Masks are used by applications
involving image decomposition. The image is decomposed into regions of
different types, the type of region being very dependent upon the type
of image analysis being performed. A special type of mask image is the
bad pixel mask, used to flag the bad pixels in an image. Other
applications use masks for data quality, to identify the region or
regions to be used for analysis, and so on.
A PMIO image mask is a special case of a PLIO pixel list. Masks can
exist and be accessed independently of the image i/o system, but the
PLF image kernel allows a mask to be stored and accessed as an IRAF
image. Any IRAF application which operates upon images can operated
upon a mask image. For example, the imcalc (image calculator) program
in the SAO XRAY package can be used to combine images and masks, or
compute new masks by evaluating an algebraic expression over an image.
Mask images have the reserved image extension ".pl". Some of the
features of mask images are illustrated by the following example.
cl> imcopy dev$pix pix.pl
dev$pix -> pix.pl
cl> imstat dev$pix,pix.pl
# IMAGE NPIX MEAN STDDEV MIN MAX
dev$pix 262144 108.3 131.3 -1. 19936.
pix.pl 262144 108.3 131.3 6. 19936.
This is a sort of worst case test of the mask encoding algorithm, since
our test image is not a mask but a noisy image (and hence not very
compressible). Note that masks must be positive valued, hence the MIN
value is different for the two images. Storing dev$pix as a mask does
not result in any significant compression, but for a real mask very
high compression factors are possible. The compression algorithm used
in PLIO is simple and fast, combining 2D run length encoding and a
differencing technique in a data structure allowing random access of
multidimensional masks (masks are not limited to one or two dimensions).
For further information on pixel lists and pixel masks, see the document
plio$PLIO.hlp in the online system. This is also available as
plio.txt.Z in the IRAF network archive.
2.7.2.2 OIF image kernel changes
The OIF image kernel is the kernel for the old IRAF image format -
this is still the default IRAF image format. Revisions to the OIF
kernel for V2.10 included the following items.
o A valid image header is now written even if an application which
writes to a new image is aborted. Previously, the pixel file would
be written but the image header would be zero length until the
image was closed. If an image creation task aborts the image will
likely be incomplete in some way, e.g., part of the pixels may not
have been written to, or the header may be missing application
specific keywords. By valid image header we mean that the header
will be valid to IMIO, allowing the image to be accessed to try to
recover the data, or to delete the image.
o The image header file of a new image is now written to and closed
at image create time, then reopened at image close time to update
the header. This frees one file descriptor, an important
consideration for applications which for some reason need to write
to dozens of output images simultaneously.
o The OIF image kernel uses file protection to prevent inadvertent
deletion of the image header file. In UNIX/IRAF systems file
delete protection is simulated by creating a ".." prefixed hard
link to the file. This could cause problems with images if the
user deleted the image header file outside of IRAF, leaving the
".." prefixed link to the file behind. A subsequent image create
operation with the same image name would fail due to the existence
of the hidden ".." prefixed file. It is unlikely that such a file
(with a ".." prefix and a ".imh" extension) could ever be anything
but an old IRAF image header file, so the system will now silently
replace such files when creating a new image.
A couple of related system changes were made which, while not
implemented in the OIF kernel, do involve the OIF or ".imh" image
format. The default template login.cl now defines the environment
variable imtype and sets it to "imh". The environment variable
min_lenuserarea is also defined now at login time, with a default
value of 20000, allowing image headers with up to about 250 header
parameters.
2.7.2.3 STF image kernel changes
The STF image kernel is the kernel for the online HST (Hubble Space
Telescope) image format. This format allows multiple images to be
grouped together in a single "group format" image. There is a common
image header stored in a FITS-like format, as well as a small fixed
format binary header associated with each image in the group.
o A check was added for a group index out of range. This yields a
more meaningful error message about no such group, rather than
having IMIO complain about a reference out of bounds on the pixel
file.
o Support was added for non-group STF images (GROUPS=F in the header).
At first glance a non-group group format image might seem a little
silly, but it turns out that a non-group STF image with a zero
length group parameter block is very close to "FITS on disk", since
the header is FITS-like and the image matrix is simple. It is
still not true FITS since the header and pixels are stored in
separate files and the pixels are not encoded in a machine
independent form, but on UNIX hosts which are IEEE standard and not
byte swapped, it comes close enough to be useful for communicating
with external applications in some cases.
A true FITS image kernel is planned for IRAF. This will probably
appear in one of the V2.10 patches, sometime during 1992.
2.7.2.4 QPF image kernel changes
The QPF image kernel is the interface between the QPOE (position
ordered event file) interface and IMIO, allowing QPOE event files to be
accessed as images by general IRAF applications. Photon "images" are
unique in that the image raster is generated at runtime as the image is
accessed, optionally passing the photon list through event attribute
and spatial filters, and sampling the photons to produce a raster
image. For example,
cl> imcopy "snr[time=@snr.tf,bl=4]" snr.imh
would filter the event list stored in the file "snr.qp" by the time
filter stored in file "snr.tf", sample the image space blocking by a
factor of 4, and store the resultant image raster in the OIF image file
"snr.imh".
cl> display "snr[time=@snr.tf,bl=4]" 1
would display the same image raster without creating an intermediate
disk image.
The changes to the QPF interface for V2.10 included the following.
o A bug was fixed which would prevent very long filter expressions
from being correctly recorded in the IMIO image header. The
current version of IMIO stores applications header parameters in
FITS format, hence multiple FITS cards are required to store long
filter expressions. The bug would cause only one such card to be
output.
o A new facility was added which allows general expressions to be
computed for the input event list and stored as keywords in the
output image header. The header of the input QPOE file can contain
one or more parameters named defattr1, defattr2, and so on. If
present, the string value of each such parameter should be a
statement such as
exptime = integral time:d
which will cause a keyword named "exptime" to be added to the
output image header, the scalar value of the keyword being the
value of the expression on the right. Currently, only the integral
function is provided. This computes the included area of a range
list field of the event attribute expression, such as a time
filter. In the example, "time" is the name of the event attribute
to be integrated, and the ":d" means use a range list of type
double for the computation. The data types currently supported are
integer, real and double.
Other minor changes to QPF included improvements to the error
recovery, and other changes to support very large filters.
2.7.3 World coordinate system support (MWCS)
MWCS is the IRAF world coordinate system package, one of the major
new system interfaces developed for the new image structures project.
A full description of the MWCS interface is given in the file
mwcs$MWCS.hlp in the online system, and in the file mwcs.txt.Z in the
IRAF network archive.
2.7.3.1 Applications support
MWCS was first released in V2.9 IRAF and at the time the interface
was new and few applications were yet using it. In V2.10 IRAF most
(but not all) applications which deal with coordinates now use MWCS.
These include all of the system plotting tasks, and the spectral
reduction packages. Details of the MWCS support added to the system
and science applications in V2.10 are given in the IRAF and NOAO
package revisions section of this revisions summary.
2.7.3.2 New function drivers
Function drivers for the arc, sin, and gls nonlinear sky
projections were added, as well as a special function driver for the
multispec image format. The latter allows general programs which don't
know anything about spectra to access and display spectra in world
coordinates, e.g., for plotting.
2.7.3.3 WCS attributes
The maximum number of "attributes" per WCS was increased from 64 to
256, mainly to support the multispec function driver, which makes heavy
use of attributes. A limit on the size of a single attribute value
string was removed, allowing arbitrarily large attribute values to be
stored.
2.7.3.4 Axis mapping
Axis mapping is now fully implemented. Axis mapping is used when,
for example, you extract a 2 dimensional section from a 3 dimensional
image and write the result to a new image. Axis mapping allows the 2
dimensions of the new image to be mapped backed into the original 3
dimensional WCS, making it possible to get the full physical
coordinates (which are 3 dimensional) for any point in the extracted
image. A new header keyword WAXMAPnn was added to store the axis map
in image headers.
2.7.3.5 MWCS save format
The newer IRAF image formats such as QPOE are capable of storing
arbitrarily complex objects such as a MWCS in an image header keyword.
In the case of a stored MWCS object, the MWCS interface is responsible
for encoding the object in its external storage format, and restoring
it to a MWCS descriptor when the MWCS is accessed. The code which does
this was revised to add a new version number for the stored V2.10 MWCS,
to make it possible to differentiate between the MWCS save formats used
in V2.9 and V2.10 and allow recovery of MWCS objects from data files
written under V2.9.
2.7.3.6 Bug fixes
Since MWCS is a new interface and V2.10 saw its first real use in
applications, a number of interface bugs were discovered and fixed.
Most of the bugs turned out to be in the part of MWCS which converts
between the internal MWCS WCS representation, and the FITS WCS
representation, used for those image formats that still use FITS-like
headers. Bug fixes included a problem with the treatment of CROTA2, a
problem with the FITS CD matrix, an axis mapping problem that caused
"dimension mismatch" errors, and a problem with support for the
old-style CDELT/CROTA which could result in a singular matrix during
WCS inversion when compiling a transformation.
2.7.4 Event files (QPOE)
The QPOE interface is the interface responsible for creating and
accessing event files, the main data format produced by event counting
detectors. We summarize here the main enhancements to QPOE made during
the preparation of V2.10. Some of these features appeared earlier in
the patches made to V2.9 IRAF but these revisions have never been
formally documented so we summarize both the old and new revisions
here. See also the discussion of the QPF image kernel given earlier.
2.7.4.1 Blocking factors
The builtin default blocking factor, when sampling the event list
to make an image raster, is one. This may be changed on a per-datafile
basis by defining the parameter defblock in the QPOE file header.
2.7.4.2 Parameter defaults
Since parameters such as the blocking factor can be set at a number
of levels, a parameter defaulting scheme was defined to determine the
precedence of parameter overrides. The lowest level of precedence is
the builtin default. Next is any datafile specific value such as
defblock. A value such as blockfactor set in the QPDEFS file will
override the datafile default value if any. Specifying the parameter
value in a runtime filter expression or qpseti call is the highest
order of precedence and will override any other setting.
Another way to think of this is the more recently the parameter was
set, the higher the precedence. The oldest value is the default
builtin to the code. Next is the datafile value, usually set when the
datafile was created. Next is the QPDEFS macro file, usually set by
the user or for a site. Last (highest precedence) is the value set by
the user when the data is accessed.
2.7.4.3 Referencing the current datafile in macros
A special symbol $DFN is now recognized during macro expansion and
if present is replaced by the filename of the current QPOE file. This
allows macros to be written which automatically perform some operation
involving the datafile to which they applied, e.g., computing an
attribute list from aspect or data quality information stored in the
datafile header.
2.7.4.4 Bitmask expressions
Bitmask expressions may now be negated, e.g., "%3B" is the mask 03
octal, "!%3B" or "!(%3B)" is the complement of 03 octal.
2.7.4.5 Large time filters
A number of changes and bug fixes were made to QPOE for V2.10 to
support large time filters. These are lists of "good time" intervals
used to filter the event list. These large time filters may contain
several hundred double precision time intervals spanning the exposure
period. Often a large time filter is combined with a complex spatial
filter (PLIO mask) to filter an event list consisting of from several
hundred thousand to several million events. QPOE can handle this
efficiently regardless of whether the data is temporarily or spatially
sorted and regardless of the complexity of the temporal or spatial
filters.
A number of minor bugs were fixed caused by the large filter expressions
overflowing various buffers. The default sizes of the program and data
buffers used to compile filter expressions were increased to allow all
but very large filters to be compiled without having to change the
defaults. If the buffers overflow more space can be allocated by
setting the progbuflen and databuflen parameters in QPDEFS (these
buffers are not dynamically resized at runtime for efficiency reasons).
During testing with large time filters it was discovered that a routine
used to test floating point equality was being used inefficiently, and
compilation of large time filters was taking a surprisingly long time.
A change was made which reduced the time to compile large filters by a
factor of 10 to 15.
2.7.4.6 Default filters
QPOE now fully supports default event attribute and spatial
filtering of data at runtime. The idea is that the full data set (all
events) is stored in the QPOE file, along with default event attribute
and spatial filters. When the data is accessed these filters are, by
default, automatically applied. Any user specified event attribute or
spatial filters are "added" to the builtin default filters to produce
the combined filter used when the event list is accessed. The point of
all this is to make it easy for the user to modify or replace the
default filters and "reprocess" the raw event list. In effect the raw
and processed event list are available in the same file.
The default filter and mask, if any, are stored in the datafile header
parameters deffilt and defmask. If the datafile contains multiple
event lists a default filter or mask may be associated with each list
by adding a period and the name of the event list parameter, e.g.,
"deffilt.foo" would be the default filter for the event list "foo".
By default, if a default filter or mask exists for an event list it is
automatically applied when the event list is accessed. Use of the
default filter or mask can be disabled in QPDEFS with either of the
following statements:
set nodeffilt
set nodefmask
The default filter and mask can also be disabled in a filter expression
by adding a "!" before the expression, as in the following example.
display "snr[!time=@times.lst,pha=(3,8:11)]"
There are actually several variants on the "=" assignment operator used
in filter expressions such as that above. The operator "=" is
equivalent to "+=", meaning the expression term on the right adds to
any existing filter specified for the event attribute on the left. The
operator ":=" on the other hand, means replace any existing filter by
the new filter expression.
2.7.4.7 Alternate coordinate systems
The event structure used to represent each event in an event list
may contain multiple coordinate systems if desired, for example,
detector and sky coordinates. One coordinate system should be defined
as the default when the event list is created, and if the event list is
to be indexed it must be sorted using the coordinate system specified
as the default. Any coordinate system may be used when the data is
accessed however; this can result in quite different views of the same
data set. For example,
cl> display snr.qp 1
would display the QPOE file "snr.qp" in display frame 1, using all
defaults for the event list, blocking factor, filter, mask, and so on.
The default event coordinate system would probably be sky coordinates.
To display the same event list in detector coordinates, one could enter
the following command.
cl> display "snr.qp[key=(dx,dy)]" 1
This assumes that the event structure fields "dx" and "dy" are defined
somewhere, either in the datafile header or in QPDEFS (otherwise the
actual field datatype-offset codes must be given).
Currently if the QPOE datafile has a WCS associated with it this WCS can
only refer to one coordinate system, normally the default event
coordinate system. Additional WCS can be stored in the QPOE file,
either in the stored MWCS object or as separate MWCS objects, but at
present there is no mechanism for selecting which will be used (if the
parameter qpwcs exists in the QPOE file header, this is assumed to be a
stored MWCS object and this is the WCS which will be used).
2.8 System Specific Changes
2.8.1 Sun/IRAF
Since V2.10 has only just been completed and at this stage has only
been released on Sun platforms, there are few system specific revisions
to report. For SunOS there were several system specific revisions
worth noting here.
o The HSI binaries for the sparc architecture are now statically
linked. This makes them considerably larger, but avoids problems
with SunOS complaining about shared library version mismatches
(note that we refer here to to Sun shared libraries - this is not a
problem with the IRAF shared library facility since we control the
version numbers).
o The HSI binaries for the Motorola architectures (f68881 and ffpa)
are not statically linked since they cannot be without running into
linker problems warning about f68881_used etc. To avoid or at least
minimize warnings about SunOS shared library versions the system was
linked on 4.1.1 instead of 4.1.2. SunOS 4.0.3 versions of the
Motorola HSI binaries are also available upon request.
o The system as distributed was linked with the name server library,
-lresolv. This means that if the local host is configured to use
the name server, IRAF will be able to access almost any host on the
Internet without an entry in the /etc/hosts file on the local host.
Additional system specific changes will be reported in the
documentation distributed with each release, as V2.10 is moved to
the various platforms for which IRAF is supported.
3. IRAF and NOAO package revisions
The revisions for the various packages in the IRAF core system and
in the NOAO packages are summarized below. There have been many changes
with this release. Users are encouraged to refer to the help pages,
user's guides provided with some packages, revisions notes, and more
recent issues of IRAF Newsletters for more details. Comprehensive
notes on systems and applications modifications are in the files
pkgnotes.v210.Z and sysnotes.v210.Z in the directory iraf/v210 in the
network archive. This summary can be read online by typing news.
Revisions notes for the various packages can also be accessed online as
in the following example.
cl> phelp dataio.revisions opt=sys
One of the system changes that affects many tasks in the IMAGES, PLOT,
and LISTS packages as well as most tasks in the spectroscopic packages
in NOAO is the full implementation of the world coordinate system
(WCS), introduced in V2.9 but not fully integrated into the IRAF and
NOAO tasks at that time. There are currently three classes of
coordinate systems: the logical system is in pixel units of the current
image section; the physical system is in pixel units of the parent
image (for a WCS associated with a raster image); the world system can
be any system defined by the application, e.g. RA and DEC or
wavelength. In general, this should be transparent to the user since
most defaults have been chosen carefully so that tasks perform the same
as in V2.9. The NOAO spectroscopic tasks also use the WCS extensively,
but again, this should be transparent to the user, although it can
cause some problems with backward compatibility. Users will notice the
biggest difference in the image headers with additional keywords added
by the interface. Two tasks in the PROTO package may help the
interested user understand more about the WCS - see wcsedit and
wcsreset. Technical notes on the WCS are available in a paper in the
iraf$sys/mwcs directory. Type the following to read more about the
MWCS interface.
cl> phelp mwcs$MWCS.hlp fi+
3.1 Changes to the IRAF system packages
3.1.1 DATAIO package modifications
o The output defaults for wfits have been modified. If the pixel
type on disk is real or double precision the output will be IEEE
format (FITS bitpix = -32 or -64, respectively). If the pixel type
on disk is short integer then the output will be integer format
(bitpix = 16) as before. These defaults can of course be changed
by modifying the parameters for wfits.
o The wfits "blocking_factor" parameter can accept values up to and
including 10 for variable blocked devices, i.e. 1/2" tape drives,
Exabytes, and DATs. If the "blocking_factor" parameter is set to
"0", as in the default, the value is read from the "fb" parameter
in the tapecap file (usually 10 for variable blocked devices). For
fixed blocked devices such as cartridge tape drives the default
value for the "fb" parameter in the tapecap file is 22 (used to
determine a buffer size) and the block size of the device is given
by the "bs" parameter.
o All tasks were modified to accept tapecap parameters as part of the
magtape file name syntax. Tapecap parameters can now be appended
to the magtape file name to add to or override values in the
tapecap file. For example, "mta6250[:se]" is a valid magtape file
name (the "" are important when tapecap parameters are specified at
execution time). See the file os$zfiomt.c for more details about
the tapecap parameters.
o The rfits task has been modified to permit a short last record,
i.e. a last record that has not been padded out to 2880 bytes. No
warning messages are issued.
o rfits was modified to map ASCII control characters in the header to
blanks.
o The sequence number appended to disk file names by rfits and wfits
was modified to 4 digits, i.e. 0001 - 9999.
3.1.2 IMAGES package modifications
o WCS (world coordinate system) support was added to all tasks in the
IMAGES package that could introduce a coordinate transformation.
Some tasks had already been modified for the V2.9 release. These
tasks (blkavg, blkrep, geotran, imcopy, imlintran, imshift,
imslice, imstack, imtranspose, magnify, register, rotate, and
shiftlines), upon execution, will update the image header to
reflect any transformation.
o The listpixels task was modified to list the pixel coordinates in
either logical, physical, or world coordinates. A format parameter
was added to the task for formatting the output pixel coordinates
taking precedence over the WCS in the image header, if used.
o A new imcombine task was added to the package. This new task
supports image masks and offsets, and has an assortment of new
combining algorithms. See the help pages for complete details on
this powerful new task.
o The imhistogram task has a new "binwidth" parameter for setting
histogram resolution in intensity units.
o The default values for the parameters "xscale" and "yscale" in the
register and geotran tasks were changed from INDEF to 1.0, to
preserve the scale of the reference image.
3.1.3 IMAGES.TV package reorganization and modifications
o The TV package has been reorganized. The IIS dependent tasks have
been moved into a subpackage, TV.IIS. The imedit, imexamine, and
tvmark tasks that were previously in PROTO have been moved to TV.
o A new task wcslab developed at STScI by Jonathan Eisenhamer was
added to the package. wcslab overlays a labeled world coordinate
grid on an image using WCS information stored in the header of the
image or in parameters of the task.
o imexamine was modified to use WCS information in axis labels and
coordinate readback, if selected by the user. Two new parameters,
"xformat" and "yformat", were added to specify the format of the
WCS if it is not present in the header of the image.
o A new option was added to imexamine to allow for fitting 1D
gaussians to lines or columns.
o tvmark had two cursor key changes. The "d" keystroke command that
marked an object with a dot was changed to "."; the "u" keystroke
command that deleted a point was changed to "d".
3.1.4 LISTS package modifications
o Two new parameters were added to the rimcursor task, "wxformat" and
"wyformat". These parameters allow the user to specify the
coordinate formats for the output of the task and override any
values stored in the WCS in the image header.
3.1.5 OBSOLETE package added
o An new package called OBSOLETE was added. Tasks will be moved to
this package as they are replaced by newer tasks in the system.
OBSOLETE tasks will then be removed at the time of the next release.
o mkhistogram, imtitle, radplt, and the old imcombine task have been
moved to the OBSOLETE package. Users should become familiar with
phistogram, hedit, pradprof, and the new imcombine and use them
instead since mkhistogram, imtitle, radplt, and oimcombine will be
retired with the next release.
3.1.6 PLOT package modifications
o A new task called phistogram was added to the PLOT package. This
task takes input from an image or from a list and allows full
control over the plotting parameters. This task replaces the
obsolete.mkhistogram task.
o A new task pradprof was added to the PLOT package. This task plots
or lists the radial profile of a stellar object. This task
replaces the obsolete.radplt task.
o A new task called gdevices was added to the package. gdevices
prints available information known about a particular class of
device. The default parameters are set up to print a list of the
available stdimage devices in the standard graphcap file.
o WCS support was added to the tasks graph, pcol(s), and prow(s). A
new parameter called "wcs" was added to define the coordinate
system to be used on the axis, either logical, physical or world.
Two additional parameters, "xformat" and "yformat", were also added
to allow the user to set the format for axis labels overriding any
values in the image header. The "xlabel" parameter values were
extended to include the special word "wcslabel" to select the WCS
label for the x axis from the image header.
o WCS support was added to the task implot. A new parameter called
"wcs" was added to define the coordinate system for plotting,
either logical, physical, or world. Two new ":" commands were also
added: ":w" allows the user to set a new WCS type interactively;
":f" allows the user to change the axis format, for instance, ":f
%H" would change the axis to read h:m:s, if the world coordinate RA
had been defined in the image header. The "space" key now prints
out the coordinate and pixel value information.
o graph has a another new parameter "overplot" that allows the user
to overplot multiple plots with different axes.
o The default parameters for "floor" and "ceiling" in contour and
surface were changed to INDEF.
3.1.7 PROTO package reorganization and modifications
This package has been reorganized. The PROTO package now resides
in the core system. Tasks in the old PROTO package that were general
image processing tools were kept in this new PROTO package. Tasks that
were more data reduction specific were moved to the new NPROTO package
in the NOAO package. The current PROTO package now contains the tasks
binfil, bscale, epix, fields, fixpix, hfix, imalign, imcentroid,
incntr, imfunction, imreplace, imscale, interp, irafil, joinlines,
suntoiraf, wcsedit, and wcsreset.
o The new task hfix was added to the package. This task allows the
user to extract the image headers into a text file, view or modify
this file with a specified command, and then update the image
header with the modified file.
o A new task called suntoiraf was added to this package. This is a
host dependent task that will most likely be useful only on Sun's.
This task converts a Sun raster file into an IRAF image.
o Two new tasks dealing with the WCS were added to this package,
wcsreset and wcsedit. wcsreset resets the coordinate systems in
the image header to the logical coordinate system. wcsedit allows
the user to modify the existing WCS or to create a new WCS and then
update the image header.
o A new version of bscale was added to the package. The task now
takes a list of input images and output images.
o A new version of imfunction was added to the package. The task
supports many more functions, for example log10, alog10, ln, aln,
sqrt, square, cbrt, cube, abs, neg, cos, sin, tan, acos, asin,
atan, hcos, hsin, htan, and reciprocal.
o imreplace was modified to support the "ushort" pixel type.
o The task join has been renamed joinlines.
3.1.8 Additions to XTOOLS and MATH
Programmers may be interested in the following new additions to the
XTOOLS and MATH libraries.
o The interactive non-linear least squares fitting package INLFIT,
developed by Pedro Gigoux at CTIO, was added to XTOOLS.
o The 1D image interpolation routines in the MATH library were
modified to support sinc interpolation.
3.1.9 Glossary of new tasks in the IRAF core system
Task Package Description
gdevices plot List imaging or other graphics devices
hfix proto Fix image headers
imcombine images Combine images pixel-by-pixel
phistogram plot Plot or print the histogram of an image or list
pradprof plot Plot or list the radial profile of an object
suntoiraf proto Convert Sun rasters into IRAF images
wcsedit proto Edit the image coordinate system
wcslab tv Overlay an image with a world coordinate grid
wcsreset proto Reset the image coordinate system
3.2 Changes to the NOAO Packages
An updated version of the observatory task has been installed at the
NOAO level. The task sets observatory parameters from a database of
observatories or from the parameters in the task itself. Many packages
and tasks within the NOAO packages that need information about where
the data was observed use information supplied by the observatory task.
3.2.1 ARTDATA package modifications
A new version of the ARTDATA package was released with IRAF version
2.9.1. A summary of those changes plus modifications since that update
are listed below. A more comprehensive list of the changes included in
V2.9.1 are discussed in IRAF Newsletter Number 10.
o A new task mkechelle has been added that creates artificial 2D
echelle images.
o A new task mkexamples has been added. The task is intended to
generate a variety of artificial images to be used in testing or
demonstrations.
o A new task mkheader adds or modifies image headers using a header
keyword data file.
o The mk1dspec task was modified to create multispec and echelle
format images, line by line.
o A parameter "header" was added to mkobjects, mknoise, mk1dspec, and
mk2dspec so that a header data file could be added to the output
image. Other header parameters are also added to the image header
such as gain, rdnoise, and exptime.
o A "comments" parameter was added to various tasks to
include/exclude comments in the header of the output image that
describe the data parameters.
3.2.2 ASTUTIL package modifications
o A new task gratings has been added to the package. This task
computes grating parameters; five of the seven parameters must be
specified at one time.
o A new task setjd has been added to the package. setjd computes the
geocentric, heliocentric, and integer local Julian dates from
information given in the headers of the input list of images. This
information is then listed or added to the image headers.
o A few changes were made to setairmass. The default value for
"update" was changed to "yes"; an update field was added to the
"show" messages; a warning is printed if both "show" and "update"
are set to "no" indicating that nothing was done.
3.2.3 DIGIPHOT package modifications
A new version of the DIGIPHOT package was installed. Some changes
were made to the existing APPHOT package used for aperture photometry,
and those are mentioned below. But three new packages have also been
installed, DAOPHOT, PHOTCAL, and PTOOLS.
DAOPHOT has been available for the past two years as an add-on package
known as TESTPHOT. It is now part of the distributed system. The IRAF
version of DAOPHOT, used to do photometry in crowded fields, has been a
collaborative effort with Peter Stetson and Dennis Crabtree of the
DAO. For the convenience of the many TESTPHOT users, changes to the
package since the last release of TESTPHOT are summarized below.
PHOTCAL is the photometric calibration package for computing the
transformations of the instrumental magnitudes output from APPHOT and
DAOPHOT to the standard photometric system. This package has been a
collaborative effort with Pedro Gigoux at CTIO.
PTOOLS is a package containing an assortment of tools for manipulating
the data files produced from APPHOT and DAOPHOT. If users are using
STSDAS TABLES format data files then they must first install the TABLES
layered package. This package can be obtained from either STScI or
NOAO (see iraf/contrib in the IRAF network archive).
3.2.4 DIGIPHOT.APPHOT package modifications
o The apselect task was replaced with the functionally equivalent
txdump task. txdump allows the user to select fields of data from
the output data files produced from APPHOT tasks and either simply
list the extracted data or save it in another file.
o A new task called pexamine has been added to the package. pexamine
is a general purpose tool for interactively examining and editing
the data files produced from tasks in either APPHOT or DAOPHOT.
This task is intended to complement the batch oriented task txdump.
o All of the APPHOT tasks will now query to verify the "datamin" and
"datamax" values, if these values are used by the tasks.
o The time of the observation, i.e. UT, can now be carried over into
the output data files, if a keyword in the image header contains
this information.
o If there is bad data within the photometry aperture a value of
INDEF will be stored in the data file for that magnitude.
3.2.5 DIGIPHOT.DAOPHOT (TESTPHOT) package modifications
This is a new package but for the convenience of the many users of
the TESTPHOT add-on package, the changes to TESTPHOT between its last
release and its installation into the DIGIPHOT package as DAOPHOT are
summarized below.
o The append, convert, dump, renumber, select, and sort tasks were
renamed to pappend, pconvert, pdump, prenumber, pselect, and psort.
o The "text" parameter was moved from daopars to the DAOPHOT package
parameters.
o All the DAOPHOT routines were modified so that "psfrad", "fitrad",
and "matchrad" are defined in terms of scale.
o The tasks allstar, group, nstar, peak, psf, and substar were all
modified to include "datamin" and "datamax" in their verify
routines.
o Support was added for a time of observation parameter to all the
appropriate DAOPHOT tasks. If present, this time will be carried
over into the output data files.
o All the DAOPHOT tasks except psf have been modified to accept lists
of input and output files.
o The new pexamine task was added to this package. pexamine is a
general purpose tool for interactively examining and editing the
data files produced from tasks in either APPHOT or DAOPHOT. This
task is intended to complement the batch oriented task txdump.
o Several changes were made to psf: the default PSF image header will
now hold up to 66 stars (but it is still dependent on the
environment variable min_lenuserarea); a check was added so that
the same star can not be added to the PSF twice; potential PSF
stars are now rejected if their sky or magnitude values are INDEF;
a check was added so that stars with INDEF valued positions are
treated as stars that were not found.
o group was modified so that the groups are output in y order instead
of in order of the size of the group.
o Both group and peak were modified so that stars with INDEF centers
are not written to the output file.
3.2.6 IMRED package modifications
The spectroscopic packages within the IMRED package have undergone
quite a bit of work and reorganization. The spectroscopic packages are
now ARGUS, CTIOSLIT, ECHELLE, HYDRA, IIDS, IRS, KPNOCOUDE, KPNOSLIT,
and SPECRED. These packages are a collection of tasks from APEXTRACT
and ONEDSPEC that are appropriate for the specific applications. All
these packages use the new versions of the APEXTRACT and ONEDSPEC
packages; the changes for APEXTRACT and ONEDSPEC are summarized below.
Earlier versions of all these packages were released as the NEWIMRED
add-on package. The NEWIMRED package is now defunct and the
distributed system contains the latest versions of these packages.
The spectroscopic packages now contain "DO" tasks that are scripts that
streamline the reduction process for the user. The "DO" tasks have been
modified for each particular application.
The ARGUS package is for the reduction of data taken with the CTIO argus
instrument. Its corresponding script task is doargus.
The CTIOSLIT package is similar to the ARGUS package except that is a
collection of spectroscopic tasks used for general CTIO slit
reductions. The doslit task allows for streamlined reductions.
The ECHELLE package has the addition of the doecslit task for simplied
echelle reductions. The dofoe task has been added for the reduction of
Fiber Optic Echelle (FOE) spectra.
The HYDRA package is used for the reduction of multifiber data taken at
KPNO. The dohydra task has been customized for streamlining nessie and
hydra reductions.
The KPNOCOUDE package has been customized for the KPNO Coude. The
doslit task allows the user to go through the reduction process with as
few keystrokes as possible. The do3fiber task is specialized for the 3
fiber (two arc and one object) instrument.
The KPNOSLIT package can be used for general slit reductions at KPNO.
The doslit task in this package is similar to that in the other
packages.
The SPECRED package is the old MSRED package, used for general
multispectral reductions. This is a generic package that can be used
for slit and multifiber/ aperture data. General doslit and dofibers
tasks are available.
Several of the spectroscopic packages has a special task called msresp1d
for creating 1d aperture response corrections from flat and throughput
data. This task is specialized for multiaperture or multifiber data.
All of the "DO" tasks have reference manuals that are available in the
network archive in the iraf/docs directory.
3.2.7 IMRED.CCDRED package modifications
o A new task ccdinstrument was added to the package. The purpose of
this task is to help users create new CCD instrument translation
files to use with the package.
o The combine task (as well as darkcombine, flatcombine, and
zerocombine) is the same task as the new imcombine task in IMAGES.
A few parameters were added for compatibility with the CCDRED tasks.
o A new parameter was added to ccdproc called "minreplace". Pixel
values in flat fields below the value for "minreplace" are replaced
by the same value (after overscan, zero, and dark corrections).
This avoids dividing by zero problems.
o The default computation and output "pixeltype" in the package
parameter for CCDRED are both real. Note that both can now be
specified separately.
o The default parameters for darkcombine and flatcombine have been
changed.
3.2.8 NOBSOLETE package added
This new package has been defined but currently no tasks reside in
it. This package will be used as a repository for tasks that have been
replaced by newer tasks in the NOAO packages. The NOBSOLETE tasks will
then be removed at the time of the next release.
3.2.9 NPROTO package modifications
The old PROTO package was divided into two separate packages, one
called PROTO that now resides in the IRAF core system and the other
called NPROTO that resides in the NOAO package. The current NPROTO
tasks are binpairs, findgain, findthresh, iralign, irmatch1d,
irmatch2d, irmosaic, linpol, and slitpic. The imedit, imexamine, and
tvmark tasks were moved to the IMAGES.TV package. The ndprep task was
moved to ONEDSPEC. All other tasks were moved to the PROTO package at
the core level.
o Two new tasks called findgain and findthresh were added to this
package. findgain determines the gain and read noise of a CCD from
a pair of dome flats and from a pair of bias/zero frames using the
Janesick method. findthresh estimates the background noise level
of the CCD using a sky frame and the gain and readnoise of the CCD.
o A new task called linpol has been added to the PROTO package. This
task calculates the pixel-by-pixel fractional linear polarization
and polarization angle for three or four images. The polarizer
must be set at even multiples of a 45 degree position angle.
o The task ndprep used for CTIO 2DFRUTTI reductions was moved to the
ONEDSPEC package.
o The task toonedspec was removed since its function can now be
performed by the onedspec.scopy task.
3.2.10 ONEDSPEC package reductions
There have been significant changes to the ONEDSPEC package. A
more detailed revisions summary is available in the IRAF network
archive as file onedv210.ps.Z in the subdirectory iraf/docs.
The new package supports a variety of spectral image formats. The older
formats can still be read. In particular the one dimensional
"onedspec" and the two dimensional "multispec" format will still be
acceptable as input. Note that the image naming syntax for the
"onedspec" format using record number extensions is a separate issue
and is still provided but only in the IMRED.IIDS and IMRED.IRS
packages. Any new spectra created are either a one dimensional format
using relatively simple keywords and a two or three dimensional format
which treats each line of the image as a separate spectrum and uses a
more complex world coordinate system and keywords. For the sake of
discussion the two formats are still called "onedspec" and "multispec"
though they are not equivalent to the earlier formats.
In addition, the one dimensional spectral tasks may also operate on two
dimensional images. This is done by using the "dispaxis" keyword in the
image header or a package dispaxis parameter if the keyword is missing
to define the dispersion axis. In addition there is a summing
parameter in the package to allow summing a number of lines or
columns. If the spectra are wavelength calibrated long slit spectra,
the product of the longslit.transform task, the wavelength information
will also be properly handled. Thus, one may use splot or specplot for
plotting such data without having to extract them to another format.
If one wants to extract one dimensional spectra by summing columns or
lines, as opposed to using the more complex APEXTRACT package, then one
can simply use scopy (this effectively replaces proto.toonedspec)
Another major change to the package is that spectra no longer need to
be interpolated to a uniform sampling in wavelength. The dispersion
functions determined by identify/reidentify can now be carried along
with the spectra in the image headers and recognized throughout the
package and the IRAF core system. Thus the WCS has been fully
implemented in the ONEDSPEC tasks and although much is to be gained by
this it can cause problems with earlier IRAF systems as well as making
it difficult to import data into non-IRAF software. But it is now
possible to use imcopy with an image section on a spectrum, for
instance, and have the wavelength information retained correctly.
A sinc interpolator is now available for those tasks doing geometric
corrections or interpolations. This option can be selected by setting
the "interp" parameter in the ONEDSPEC package parameters.
Other changes are summarized:
o The new task deredden corrects input spectra for interstellar
extinction, or reddening.
o The new task dopcor corrects input spectra by removing a specified
doppler velocity. The opposite sign can be used to add a doppler
shift to a spectrum.
o The new task fitprofs fits 1D gaussian profiles to spectral lines or
features in an image line or column. This is done noninteractively
and driven by an input list of feature positions.
o The task ndprep was moved to this package from the PROTO package.
ndprep is used for CTIO 2DFRUTTI reductions.
o The new task sapertures adds or modifies beam numbers and aperture
titles for selected apertures based on an aperture identification
file.
o The new task sarith does spectral arithmetic and includes unary
operators. The arithmetic can be performed on separate input
spectra or on apertures within a multispec format image.
o The task scombine has been added to the package. This new task is
similar to the new imcombine task in the IMAGES package but is
specialized for spectral data.
o The new task scopy copies subsets of apertures and does format
conversions between the different spectrum formats.
o The new task sfit fits spectra and outputs the fits in various ways.
This includes a new feature to replace deviant points by the fit.
Apertures in multispec and echelle format are fit independently.
o The tasks addsets, batchred, bswitch, coincor, flatdiv, flatfit,
subsets and sums were moved to the IIDS and IRS packages.
o The task combine was removed with the all new scombine suggested in
its place.
o The tasks rebin, sflip and shedit were removed from the package.
Rebinning of spectra can now be done with scopy or dispcor. scopy
and imcopy can now be used in place of sflip. And hedit is an
alternative for shedit.
o bplot and slist have been modified to support the multispec format.
o The task continuum now does independent fits for multispec and
echelle format spectra.
o There is now only one dispcor task doing the work of the three
previous tasks dispcor, msdispcor and ecdispcor. Several of the
parameters for this task have been changed. The old "recformat"
and "records" parameters for supporting the old onedspec format
have been removed except in the IIDS/IRS packages. A "linearize"
parameter has been added for setting the interpolation to yes or no
on output. The "interpolation" parameter was removed since this
information is now read from the package parameter "interp". The
"ignoreaps" parameter has been changed to "samedisp".
o identify and reidentify now treat multispec format spectra and two
dimensional images as a unit allowing easy movement between
different image lines or columns. The database is only updated upon
exiting the image. The "j", "k", and "o" keys have been added to
the interactive sessions to allow for scrolling through the
different lines in a two dimensional image. The database format
now uses aperture numbers rather than image sections for multispec
format spectra.
o The task specplot has new parameters "apertures" and "bands" to
select spectra for plotting in the multispec format.
o splot now allows deblending of any number of components and allows
simultaneous fitting of a linear background. Several cursor keys
have been redefined and colon commands have been added to fully
support the new multispec format and to add even more flexibility
to the task than before! Please see the help pages for details.
o The reidentify task is essentially a new task. The important
changes are an interactive review option, the ability to add
features from a line list, using the same reference spectrum for
all other spectra in a 2D reference image rather than "tracing"
(using the results of the last reidentification as the initial
guess for the next one) across the image, and matching image
lines/columns/apertures from a 2D reference image to other 2D
images rather than "tracing" again.
3.2.11 RV package added
This is a new package installed with IRAF version 2.10. A version
of this package, RV0, has been available as an add-on for the past year
or so. The package contains one main task fxcor that performs a Fourier
cross-correlation on the input list of spectra. The package supports
the multispec format.
3.2.12 TWODSPEC package modifications
The old MULTISPEC package that has resided in the TWODSPEC package
for years has been disabled. The code is still there for browsing,
however, and the package can be resurrected easily if needed.
The observatory task was moved to the NOAO package itself. The
setairmass task was moved to LONGSLIT. And the setdisp task is no
longer needed; task or package parameters are used in its place.
Changes to the APEXTRACT and LONGSLIT packages are summarized below.
3.2.13 TWODSPEC.APEXTRACT package modifications
A new version, version 3, of the IRAF APEXTRACT package has been
completed. A detailed revisions summary is available in the IRAF
network archive (file apexv210.ps.Z in iraf/docs).
There were three goals for the new package: new and improved cleaning
and variance weighting (optimal extraction) algorithms, the addition of
recommended or desirable new tasks and algorithms (particularly to
support large numbers of spectra from fiber and aperture mask
instruments), and special support for the new image reduction scripts in
the various IMRED packages.
The multispec format, the default image format for all spectroscopic
packages except IIDS and IRS, is either 2D or 3D (the 3D format is new
with this release). The 3D format is produced when the parameter
"extras" is set to yes in the extraction tasks. The basic 2D format,
which applies to the first plane of the 3D format, has each 1D aperture
spectra extracted in a line. Thus, the first coordinate is the pixel
coordinate along the spectra. The second coordinate refers to the
separate apertures. The third coordinate contains extra information
associated with the spectrum in the first plane. The extra planes are:
1: Primary spectra which are variance and/or cosmic ray cleaned
2: Spectra which are not weighted or cleaned
3: Sky spectra when using background subtraction
4: Estimated sigma of the extracted spectra
If background subtraction is not done then 4 moves down to plane 3.
Thus:
output.ms[*,*,1] = all primary spectra
output.ms[*,5,1] = 5th aperture spectrum which is cleaned
output.ms[*,5,2] = raw/uncleaned 5th aperture spectrum
output.ms[*,5,3] = sky for 5th spectrum
output.ms[*,5,4] = sigma of 5th spectrum
The following summarizes the major new features and changes.
o New techniques for cleaning and variance weighting extracted
spectra have been implemented.
o Special features for automatically numbering and identifying large
numbers of apertures have been added.
o There is no longer a limit to the number of apertures that can be
extracted.
o The new task apall integrates all the parameters used for one
dimensional extraction of spectra.
o The new task apfit provides various types of fitting for two
dimensional multiobject spectra.
o The new task apflatten creates flat fields from fiber and slitlet
spectra.
o The new task apmask creates mask images from aperture definitions
using the new pixel list image format. No tasks have yet been
written, however, to use this new mask image format.
o The new tasks and algorithms, aprecenter and apresize, will
automatically recenter and resize aperture definitions.
o The task apio is defunct. Its functionality has been replaced by
the APEXTRACT package parameters.
o The task apstrip has been removed.
o Minor changes have been made to the old "AP" tasks to accommodate
these new changes in the package; in some cases new parameters have
been added to the task and in other cases new cursor options have
been implemented. See the help pages for details.
3.2.14 TWODSPEC.LONGSLIT package modifications
o The "dispaxis" parameter was added to the package parameters. This
value is used unless DISPAXIS is in the image header.
3.2.15 Glossary of new tasks in the NOAO packages
Task Package Description
addstar daophot Add artificial stars to an image
allstar daophot Group and fit psf to multiple stars
apall apextract Extract 1D spectra
apfit apextract Fit 2D spectra
apflatten apextract Remove shapes from flat fields
apmask apextract Create an IRAF pixel mask from apertures
aprecenter apextract Recenter apertures
apresize apextract Resize apertures
ccdinstrument ccdred Review instrument translation files
centerpars daophot Edit the centering algorithm parameters
chkconfig photcal Check the configuration file
continpars rv Edit continuum subtraction parameters
daofind daophot Find stars using the DAO algorithm
daopars daophot Edit the daophot algorithms parameter set
datapars daophot Edit the data dependent parameters
deredden onedspec Apply interstellar extinction correction
do3fiber kpnocoude Process KPNO coude three fiber spectra
doargus argus Process ARGUS spectra
doecslit echelle Process Echelle slit spectra
dofibers specred Process fiber spectra
dofoe echelle Process Fiber Optic Echelle (FOE) spectra
dohydra hydra Process HYDRA spectra
dopcor onedspec Apply doppler corrections
doslit ctioslit Process CTIO slit spectra
doslit kpnocoude Process KPNO coude slit spectra
doslit kpnoslit Process slit spectra
doslit specred Process slit spectra
evalfit photcal Compute standard indices
filtpars rv Edit the filter function parameters
findgain nproto Estimate the gain and readnoise of a CCD
findthresh nproto Estimate a CCD's sky noise
fitparams photcal Compute transformation equations
fitprofs onedspec Fit gaussian profiles
fitskypars daophot Edit the sky fitting parameters
fxcor rv Radial velocities via cross correlation
gratings astutil Compute and print grating parameters
group daophot Group stars
grpselect daophot Select groups from a daophot database
invertfit photcal Compute the standard indices by inversion
istable ptools Is a file a table or text database file?
linpol nproto Polarization and Stoke's parameters
keywpars rv Translate image header keywords
mkcatalog photcal Type in a standard star catalog
mkconfig photcal Prepare a configuration file
mkechelle artdata Make artificial 1D and 2D echelle spectra
mkexamples artdata Make artificial data examples
mkheader artdata Append/replace header parameters
mkimsets photcal Prepare an image set file for mkNobsfile
mk(n)obsfile photcal Make a starfield observations file
mkphotcors photcal Check photometric corrections files
msresp1d argus Create 1D response spectra
msresp1d hydra Create 1D response spectra
msresp1d kpnocoude Create fiber response spectra
msresp1d specred Create 1D response spectra
nstar daophot Fit the psf to groups of stars
obsfile photcal Make a starfield observations file
pappend daophot Concatenate daophot databases
pappend ptools Concatenate apphot/daophot databases
pconvert daophot Convert text database to tables database
pconvert ptools Convert text database to tables database
pdump daophot Print fields from daophot databases
pdump ptools Print columns of daophot/apphot databases
peak daophot Fit the psf to single stars
pexamine apphot Examine or edit an apphot output file
pexamine daophot Examine and edit a daophot database
pexamine ptools Examine and edit an apphot/daophot database
phot daophot Compute sky values and initial magnitudes
photpars daophot Edit the photometry parameters
prenumber daophot Renumber stars in a daophot database
prenumber ptools Renumber a list of apphot/daophot databases
pselect daophot Select records from daophot database
pselect ptools Select records from apphot/daophot databases
psf daophot Fit the point spread function
psort daophot Sort a daophot database
psort ptools Sort a list of apphot/daophot databases
sapertures onedspec Set or change aperture header information
sarith onedspec Spectrum arithmetic
scombine onedspec Combine spectra
scopy onedspec Select and copy apertures
seepsf daophot Compute an image of the PSF
setjd astutil Compute and set Julian dates in images
sfit onedspec Fit spectra
substar daophot Subtract the fitted stars
tbappend ptools Concatenate apphot/daophot tables databases
tbdump ptools Print columns of tables databases
tbrenumber ptools Renumber apphot/daophot tables databases
tbselect ptools Select records from apphot/daophot databases
tbsort ptools Sort apphot/daophot tables databases
txappend ptools Concatenate apphot/daophot text databases
txdump apphot Dump selected fields of apphot output file
txdump ptools Print columns of text databases
txrenumber ptools Renumber apphot/daophot text databases
txselect ptools Select records from text databases
txsort ptools Sort apphot/daophot text databases
4. Programming Environment Revisions
4.1 Compatibility Issues
V2.10 IRAF requires that any local IRAF programs external to the
V2.10 system (such as layered packages or locally written tasks) be
fully recompiled if they are relinked against V2.10. The problem
arises only if the programs are relinked; external programs will
continue to run after V2.10 is installed, but linker errors will be
seen if the programs are relinked without being fully recompiled. This
is because the internal names of some important system routines were
changed in V2.10 to avoid name clashes with host system routines. For
example, the SPP procedure "rename" is now translated to "xfrnam" when
the SPP code it appears in is compiled.
As always, actual interface changes affecting existing source code were
very few. The macro "E" in <math.h> was renamed to "BASE_E" to minimize
the chance of an accidental name collision. The calling sequence for
the onentry procedure (ETC) was changed, but since this is a little used
system procedure very few tasks should be affected. A number of new
procedures were added to MTIO and the syntax of a magtape device has
changed; old applications should be modified to use the MTIO procedures
to operate upon magtape device names.
These and other revisions affecting the programming environment are
discussed in more detail below.
4.2 Portability Issues
The V2.10 UNIX/IRAF kernel now includes "#ifdef SYSV" support for
System V UNIX, making it easier to port IRAF to SysV based systems.
The UNIX/IRAF HSI (host system interface) is still not as portable to
UNIX variants as it could be, but at this point it is easier for us to
make the minor revisions required for a new port than to further refine
the HSI. The disadvantage is that it is harder than it should be for
people in the community to do their own IRAF ports, due to the level of
IRAF expertise required to tune the code. Someday we plan to generate
a generic-UNIX HSI. Note that these comments pertain only to the few
thousand lines of code in the HSI - the bulk of the IRAF code is 100%
portable (identical on all IRAF systems) as it has always been.
The recent port of IRAF to A/UX (the Apple Macintosh UNIX) is
interesting from a portability standpoint because we used the
publically available Fortran to C translator f2c plus the GNU C
compiler gcc to compile all the SPP and Fortran code in IRAF. This was
remarkably successful and means that the IRAF code is now portable to
any system with a C compiler. In the process of performing these
compilations a few dozen minor bugs were found by the static compile
time checking performed by f2c and gcc. The IRAF C code was run
through gcc with ANSI mode enabled, and hence should now be ANSI-C
compatible. The GNU debugger gdb proved to be an effective tool for
debugging of IRAF code compiled with gcc.
4.3 Software Tools
4.3.1 LOGIPC feature
A new facility has been added to UNIX/IRAF (all systems) for
debugging interprocess communication (IPC). This feature will also be
useful for debugging tasks standalone, particularly in cases where a
bug seen when running a task from the CL is difficult to reproduce when
the task is run standalone. The new facility allows one to carry out a
normal IRAF session while transparently logging all interprocess
communications. Each process can then be rerun individually using the
logged IPC to exactly duplicate the functioning of the process to,
e.g., examine the program operation in detail under a debugger.
The facility is this: if LOGIPC is defined in the host environment when
an iraf process is started, the process will create two files pid.in
and pid.out, where pid is the process id. Everything read from the IPC
input file is copied to the .in file, and everything written to the IPC
output (i.e., sent back to the CL) is copied to the .out file. This is
done only for connected subprocesses. It will work for any connected
subprocess, e.g., normal cached processes and graphics subkernels in
both foreground and background CLs, but not the i/o of the CL itself
since the CL is not driven by IPC.
The IPC streams saved are an exact binary copy of whatever was sent via
IPC, including the binary IPC packet headers, and binary graphics data,
and so on. All the IPC communications used to start up the process,
run zero or more tasks, and close the process down will be logged.
Most IPC traffic is textual in nature so it will usually be possible to
examine the IPC files with a file pager, although the results may be
less than satisfactory if binary data such as a graphics metacode
stream is logged. It is not necessary to examine the IPC files to use
them for process execution or debugging.
A particularly interesting use of this feature is to allow a process to
be run under the CL in the normal fashion, then rerun under a host level
debugger using the saved IPC input to duplicate the input and actions
of the process when run under the CL. For example,
% setenv LOGIPC
% cl
cl> dir
cl> logout
% unsetenv LOGIPC
will run the CL, saving the IPC of all subprocesses, e.g. x_system.e.
We can then run the system process manually, using the saved IPC input:
% $iraf/bin/x_system.e -c < pid.in
To run the process under adb or dbx, using the saved input:
% adb $iraf/bin/x_system.e
:r <pid.in -c
or
% dbx $iraf/bin/x_system.e
dbx> r -c < pid.in
Note that the redirection has to be given first for adb, and last for
dbx. This also works for gdb using the run command. Some
implementations of adb are picky about syntax and will not allow a
space between the "<" and the process id in the :r command.
Running a task in this way is not identical to running the task
standalone, e.g. using a dparam file for parameter input, because the
full runtime context of the process as run under the CL is reproduced
by LOGIPC but not when the task is run standalone. The differences are
subtle but can be important when trying to reproduce a bug seen when
the process is run under the CL. It is often the case that a bug seen
when a task is run from the CL will disappear when the task is run
standalone, but in most cases LOGIPC will duplicate the bug.
4.3.2 XC changes
The xc program (IRAF compiler-linker) underwent the following
changes for V2.10, in addition to the usual host-system specific
changes required to support new host compiler versions.
Multiple "-p pkgname" arguments are now supported. These are used when
compiling a module which uses multiple package environments, e.g.,
cl> xc -p noao -p tables foo.x
Each package environment may define package environment variables,
directories to be searched for include files and libraries, and so on.
Package environments are used by the IRAF layered packages.
Host libraries named on the command line using the -l switch (e.g.,
"-lresolv") are now searched after the IRAF system libraries, rather
than before as in previous versions of xc. If the host library is
referenced by absolute pathname it is still searched before the IRAF
libraries, since the command line order determines the search order.
4.3.3 SPPLINT code checker
A static code checker utility spplint has been developed for
checking SPP programs. This uses the SPP translation utilities in IRAF
to convert SPP to Fortran, f2c to generate C code, and lint to check
the C code. The code is checked in various ways at all phases of
translation. Some of the most useful checking are performed by f2c,
which checks the number and type of arguments in all calls to IRAF VOS
library procedures. In other words, spplint will determine if an IRAF
library procedure is called incorrectly, as well as perform a variety
of other checks.
The spplint utility is not included in the main IRAF release, but is
available separately. Contact the IRAF project for information on the
availability of this and other optional code development utilities.
4.3.4 Multiple architecture support
Multiple architecture support is a way of using multiple sets of
compiled program binaries within a single copy of IRAF. Multiple sets
of binaries are used to support different machine architectures (e.g.
sparc and Motorola), different compiler options (floating point
options, vectorization options, profiling options), different
compilers, and so on.
The command for checking the architecture of the IRAF core system or a
layered package has been changed from showfloat to arch to reflect the
fact that multiple architecture support is no longer used merely to
select the floating point option.
cl> mkpkg arch
sparc
The default architecture of the distributed system is "generic", meaning
no specific architecture has been set (the source tree is generic, not
configured for any particular architecture).
It is suggested that developers of layered software for IRAF adopt this
same convention in their root mkpkg files.
4.3.5 Package environments
All the HSI software utilities now permit multiple "-p pkgname"
package environment references. The host PKGENV environment variable
now also permits multiple package environments to be referenced, e.g.
% setenv PKGENV "noao tables xray"
The package names should be whitespace delimited (PKGENV is used to
avoid having to give the "-p" flags on the mkpkg or xc command line).
To successfully load a package enironment, the package root directory
must be defined in hlib$extern.pkg or in the user's host environment.
A host environment definition will override the value given in
extern.pkg.
4.3.6 Finding module sources
IRAF V2.10 includes a "tags" file in the IRAF root directory to aid
software development. This file contains an index to all procedures in
the IRAF VOS and HSI and can be used with host editors such as vi to
rapidly find and display the source for IRAF system procedures. Note
that the names of the kernel procedures are given in upper case, e.g.,
"ZOPNBF", whereas the names of the VOS procedures are given in lower
case. To use the tags file with vi, start the editor at the IRAF root
directory and while in the editor, type a command such as ":ta foo" to
view the source for procedure foo.
4.4 Programming Interface Changes
4.4.1 IEEE floating support
Modifications were made to the IEEE floating conversion routines in
the OSB package to support NaN mapping. This is a low level package
used by, e.g., the MII package in ETC. The interface as it currently
stands is summarized below.
ieepak[rd] (datum) # pack scalar value
ieeupk[rd] (datum) # unpack scalar value
ieevpak[rd] (native, ieee, nelem) # pack vector
ieevupk[rd] (ieee, native, nelem) # unpack vector
iee[sg]nan[rd] (NaN) # set/get NaN value
ieemap[rd] (mapin, mapout) # enable/disable NaN mapping
ieestat[rd] (nin, nout) # get count of NaN values
ieezstat[rd] () # zero NaN counters
The new or modified routines are ieesnan, ieegnan, ieemap, ieestat, and
ieezstat. By NaN (not-a-number) we refer collectively to all IEEE
non-arithmetic values, not just IEEE NaN. The routines ieesnan and
ieegnan set or get the native floating value used to replace NaNs or
overflows occurring when converting IEEE to the native floating format
(any floating value will do, e.g., zero or INDEF). If NaN mapping is
enabled, the ieestat routines may be used to determine the number of
input or output NaN conversions occurring since the last call to
ieezstat. Both real and double versions of all routines are provided.
The NaN mapping enable switch and statistics counters are undefined at
process startup; programs which use the IEEE conversion package should
call ieemap to enable or disable NaN mapping, and ieezstat to
initialize the statistics counters.
4.4.2 MATH libraries
The following changes were made to the MATH libraries in the IRAF
core system. Refer to the online help pages of the affected routines
for detailed information.
o The one-dimensional image interpolation library iminterp was
modified to add support for sinc interpolation.
o A new library nlfit was added for non-linear function fitting. An
interactive graphics front end to this was also added in XTOOLS.
o The name of the symbol E in <math.h> was changed to BASE_E to
minimize the chance of name clashes.
4.4.3 CLIO interface
The CLIO (command language i/o) interface underwent the following
changes for version 2.10 IRAF.
o A README file was added to the source directory containing an up to
date interface summary.
o The routines clgpset and clppset (get/put string valued parameter)
were renamed clgpseta and clppseta. The old procedures were
retained for compatibility but are now obsolete and may at some
point in the future disappear or be reused for some other function.
o Two new routines cllpset and clepset were added for listing and
editing psets (parameter sets).
The calling sequences for the new pset routines are as follows.
cllpset (pp, fd, format) # list pset
clepset (pp) # edit pset
These new routines are still considered experimental and should be
avoided or used with caution (they could change).
Internal to the CLIO code, the CLIO parameter caching package
underwent minor changes to add a new clc_compress routine and
improve pset handling, as part of the minilanguage support effort.
4.4.4 ETC interface
The ETC interface contains miscellaneous system interface routines.
The ETC interface underwent the following changes for V2.10 IRAF.
4.4.4.1 Calling sequence for onentry changed
The calling sequence for the onentry routine was changed. The new
calling sequence is as follows.
action = onentry (prtype, bkgfile, cmd)
The onentry procedure is an optional procedure which is called when an
IRAF process starts up. Normally the onentry procedure is a no-op,
passing control to the IRAF main in-task interpreter. Custom IRAF
applications, e.g., the CL, have a special onentry procedure which
replaces the default in-task interpreter.
The change made to the onentry calling sequence was the addition of the
additional argument cmd. This argument receives the command line used
to invoke the IRAF process at the host level. The application can
parse this command line to extract arguments, allowing the IRAF process
to operate as a host program (it is already possible to call any IRAF
task from the host level, but use of an onentry procedure allows the
in-task interpreter to be bypassed and gives the application control
over parsing the command line).
See etc$onentry.x for additional information on how to use this
procedure.
4.4.4.2 New onerror and onexit procedures
Two new procedures onerror_remove and onexit_remove were added.
These have the following calling sequences.
onerror_remove (proc) # remove posted onerror procedure
onexit_remove (proc) # remove posted onexit procedure
The new routines are used to remove onerror or onexit procedures posted
by a task during task execution. Such user procedures are called if
the task aborts (onerror procedures) or during normal task exit (onexit
procedures). Formerly there was no way to "unpost" the procedures
other than by the normal cleanup occurring during task termination.
4.4.4.3 New gqsort routine
A new quick-sort routine gqsort (generalized quick sort) was added.
This has the following calling sequence.
gqsort (x, nelem, compare, client_data)
gqsort is identical to the old qsort routine except for the addition of
the fourth argument client_data. This is an integer value which is
passed on to the compare procedure during sorting to compare two data
values. The compare routine is called as follows.
result = compare (client_data, x1, x2)
The new routine eliminates the need to use a common area to pass
information to the compare routine, as was often necessary with qsort.
4.4.5 FIO interface
The FIO interface (file i/o) underwent minor changes to fix some
bugs affecting pushed back data. The F_UNREAD file status parameter
will now correctly report pushed back data as well as any buffered
input file data. The F_CANCEL file set option will now cancel any
pushed back data.
4.4.5.1 Nonblocking terminal i/o
A new nonblocking form of raw mode terminal input has been added.
This permits polling the terminal for input without blocking
(suspending process execution) if no input is available. In a
character read, EOF is returned if no input is available otherwise the
character value is returned. An example illustrating the use of
nonblocking terminal i/o follows.
include <fset.h>
task foo
procedure foo()
int fd, ch
int getci()
begin
fd = STDIN
call fseti (fd, F_IOMODE, IO_RAW+IO_NDELAY)
repeat {
if (getci(fd,ch) == EOF)
call printf ("no pending input\r\n")
else {
call printf ("ch = %03o\r\n")
call pargi (ch)
}
call sleep (1)
} until (ch == '\004' || ch == 'q')
call fseti (fd, F_IOMODE, IO_NORMAL)
end
This sample program sets the terminal i/o mode to nonblocking raw mode
and polls the terminal once per second, printing the character value in
octal if a character is typed on the terminal, exiting when ctrl/d or
'q' is typed. Note that in raw mode characters such as ctrl/d or
ctrl/c are passed through as data and do not get mapped to EOF,
generate an interrupt, and so on. Raw mode i/o such as this will work
both when running a task under the CL and standalone, and in
combination with IRAF networking (e.g. to access a remote device).
Nonblocking terminal input is used in applications which run
continuously but which we wish to be able to control interactively.
4.4.6 FMTIO interface
The FMTIO interface (formatted i/o) is used to format output text
or decode input text. The V2.10 release adds two new printf output
formats, %H and %M. These are used to print numbers in
hours-minutes-seconds or minutes-seconds format and are equivalent to
the older output formats %h and %m except that the number is first
divided by 15. This converts degrees to hours allowing values given in
units of degrees to be printed as hours with just a change of the output
format. In other words, given a number N in units of degrees, %H would
print the number in hours-minutes-seconds, i.e., "hh:mm:ss.ss", whereas
%h would print the same number as degrees-minutes-seconds,
"dd:mm:ss.ss". The %m formats are similar except that only two of the
three fields are printed.
4.4.7 GTY interface
The GTY interface is a generalized version of that portion of the
older TTY interface dealing with termcap format files. The TTY code
which accesses termcap format files has been extracted to form the new
GTY interface, allowing arbitrary termcap format files to be accessed
by filename, unlike TTY which returns TTY descriptors given the termcap
or graphcap device name. GTY was contributed by Skip Schaller of
Steward Observatory.
gty = gtyopen (termcap_file, device, ufields)
gtyclose (gty)
cp = gtycaps (gty)
pval = gtyget[bir] (gty, cap)
nchars = gtygets (gty, cap, outstr, maxch)
The gtyopen call returns the GTY descriptor for the named device from
the file termcap_file. The ufields string may be either NULL or a list
of colon-delimited device capabilities, which will override the
corresponding capabilities in the device entry given in the termcap
file. If termcap_file is the null string ufields is taken to be the
device entry for the named device. The gtycaps routine may be used to
get the entire device entry as a string, whereas the gtyget and gtygets
routines are used to get the values of individual capabilities or
parameters.
4.4.8 MTIO interface
MTIO is the magtape i/o interface. The magtape i/o subsystem was
extensively revised for V2.10 IRAF, as documented earlier in this
revisions summary. The VOS level MTIO interface itself was not changed
other than to add a few new routines. The tapecap facility is new in
V2.10. The revisions to the host level magtape driver ZFIOMT required
that the calling sequences of some of the interface routines be changed.
4.4.8.1 MTIO applications programming interface
The current MTIO applications programming interface is summarized
below. Most of these routines are new: the old routines are mtfile,
mtopen, mtrewind and mtposition.
yes|no = mtfile (fname)
yes|no = mtneedfileno (mtname)
gty = mtcap (mtname)
mtfname (mtname, file, outstr, maxch)
mtparse (mtname, device, fileno, recno, attrl, maxch)
mtencode (mtname, maxch, device, fileno, recno, attrl)
fd = mtopen (mtname, acmode, bufsize)
mtrewind (mtname, initcache)
mtposition (mtname, file, record)
The mtfile routine is used to test whether the given filename is a
magtape file or something else, i.e., a disk file. mtneedfileno tests
whether a file number has been specified in mtname (e.g., to determine
whether or not to query for a file number parameter). mtfname takes
mtname and a file number and constructs a new magtape device name in
the output string. mtparse parses a magtape device name into its
component parts, and mtencode does the reverse. mtcap returns the GTY
descriptor of the tapecap entry for the device. gtyclose should be
used to free this descriptor when it is no longer needed.
Some older magtape applications programs parse the magtape device name
directly, looking for characters like `['. These old programs are
making assumptions about the form of a magtape device name which are
probably no longer true. Such old applications should be rewritten to
use the new MTIO procedures for all magtape device name operations.
4.4.8.2 MTIO system procedures
The MTIO interface also includes a number of procedures intended
for use in systems code. These are summarized in the table below.
mtallocate (mtname)
mtdeallocate (mtname, rewind_tape)
mtstatus (out, mtname)
mtclean (level, stale, out)
The only new routine here is mtclean. This is called by the mtclean
task in the V2.10 SYSTEM package and is used to scan the magtape status
file storage area to delete old magtape position status files. Prior
to V2.10 these files were stored in the user's UPARM directory, but in
V2.10 the files are stored in /tmp so that multiple IRAF sessions will
share the same tape position information. A special task is needed to
delete old position files in order to protect against, e.g., one user
deleting another user's device position file while the device is
actively in use.
4.4.8.3 Magtape driver procedures
All access to the physical magtape device is via the host level
IRAF magtape device driver ZFIOMT. The driver procedures had to be
revised for V2.10 to add support for the tapecap facility and to
accommodate changes in the way the device position is maintained. The
new driver procedures are summarized below.
zzopmt (device, acmode, devcap, devpos, newfile, chan)
zzrdmt (chan, buf, maxbytes, offset)
zzwrmt (chan, buf, nbytes, offset)
zzwtmt (chan, devpos, status)
zzstmt (chan, param, value)
zzclmt (chan, devpos, status)
zzrwmt (device, devcap, status)
The corresponding KI (kernel interface) routines were also modified to
reflect the new calling sequences. A result of this is that IRAF
networking for magtape devices is incompatible between V2.10 and
earlier versions of IRAF.
The host level device driver procedures are not normally called directly
in applications code (applications use mtopen). Refer to the comments
in the source file os$zfiomt.c for additional details.
4.4.9 MWCS interface
The MWCS interface provides world coordinate system support for the
IRAF system and applications. The main changes in the MWCS interface
for V2.10 were bug fixes and semantic changes, e.g. various
restrictions having to do with WCS attributes were removed, new
function drivers were added, and so on. These changes are documented
elsewhere in this revisions summary.
The only interface change affecting MWCS was the addition of the new
MWCS procedure mw_show.
mw_show (mw, fd, what)
This is used to dump a MWCS descriptor to the given output file, and is
useful for examining MWCS descriptors while debugging applications.
5. Getting Copies of this Revisions Summary
Additional copies of this revisions summary are available via
anonymous ftp from node iraf.noao.edu in the directory iraf/v210, or via
email from iraf@noao.edu.
IRAF (Mar90) V2.9 Revisions Summary IRAF (Mar90)
IRAF Version 2.9 Revisions Summary
April 10, 1990
1. Introduction
This document summarizes the changes in IRAF version 2.9. This was
primarily a development release intended to support applications
software development, hence the major changes were in the programming
environment, although there are important new features of interest to
general users too. Since IRAF V2.9 is primarily a development release,
it is not being released on all platforms, and it is expected that many
sites will not need to upgrade until IRAF V2.10 is available. Sites
interested in obtaining IRAF V2.9 should contact the IRAF project to
determine if the release is available for a particular host system. At
the present time, the release is being made available for all Sun
systems, for VAX/VMS, and for the DECstation running Ultrix.
What follows is a brief description of some of the new features
available in IRAF Version 2.9. This is not intended to be an
exhaustive list, but rather a brief summary of the major changes since
the last release of IRAF, Version 2.8, released in July 1989. More
detailed revisions notes are available in the system notes file,
iraf$local/notes.v29, as well as in the online revisions notes for the
various packages.
Users looking for information on a particular new package should note
that if the package is not mentioned in these release notes and
therefore is not included in IRAF V2.9, that does not necessarily mean
that it is not available. Most major reduction and analysis packages
are now made available for testing as user installable layered packages
before they are included in the standard distribution. For information
on the available add-on packages, contact the IRAF group, or check the
latest IRAF Newsletter.
This revisions summary is organized as follows:
1. Introduction
2. IRAF System Revisions
3. IRAF Package Revisions
3.1. Changes to the System Packages
3.2. Glossary of New Tasks in the IRAF System Packages
3.3. Changes to the NOAO Packages
3.4. Modifications and Additions to Calibration Data
3.5. Glossary of New Tasks in the NOAO Packages
4. Programming Environment Revisions
4.1. Changes to the Programming Utilities
4.2. Programming Interface Changes
2. IRAF System Revisions
2.1 IEEE to native floating point conversions
Support has been added to the programming interfaces (section
4.2.3) for converting between the IEEE floating point and native
floating point data formats, including both single and double
precision. The FITS programs in DATAIO (section 3.1.1) make use of
this, allowing floating point data to be exchanged in FITS format
without having to convert to type integer.
2.2 World coordinate system support
A major new VOS interface MWCS has been added to support general
world coordinate systems (WCS) and transformations thereon (section
4.2.1). This includes support for linear, piecewise linear or sampled
WCS, and general nonlinear WCS such as the tangent plane or gnomonic
projection.
If a FITS image is read into the system which has WCS information in the
header, the WCS will be retained in the IRAF image header and can be
used in coordinate transformations. The IMAGES tasks which move pixels
around have been modified to edit the WCS to reflect the transformation
(section 3.1.2). The image i/o system will automatically propagate the
WCS of an image to a new copy of the image, and will edit the WCS as
necessary if an image section is copied (this applies to all IRAF tasks
which operate upon images). The task RIMCURSOR in the LISTS package
has been rewritten to add support for coordinate transformations
(section 3.1.3), and can be used, e.g., to read out the RA and DEC of
objects on the image display using the image cursor, if the image has
the necessary WCS information in the image header.
Full integration of the new world coordinate facilities into all the
IRAF applications, e.g., the graphics tasks and the spectral reduction
packages, will take a year or longer due to the amount of software
involved. In V2.9 the IRAF spectral packages have not yet been
converted to use MWCS, and if MWCS is enabled it could alter the normal
behavior of these packages. IRAF V2.9 is therefore shipped with MWCS
disabled. What "disabled" means is that WCS information in the image
headers is not edited to reflect operations involving image sections,
or geometric transformations of images. Tasks such as RIMCURSOR which
use an already existing WCS will still work whether or not header
editing is disabled. If the spectral tasks will not be used and it is
desired that world coordinates be propagated correctly in image
transformations, MWCS header editing can be enabled in either of the
following ways.
The MWCS transformations are disabled by defining the variable "nomwcs"
in the IRAF environment. To globally enable MWCS by default for
everyone using the system, edit the file "hlib$zzsetenv.def" and
comment out the following line as shown (you want to add the leading #,
which will be missing in the distributed version):
#set nomwcs = yes
To enable MWCS header editing temporarily, for the current IRAF run:
cl> reset nomwcs = no
Detailed information on the coordinate systems defined by MWCS can be
obtained in the online system with the command
cl> phelp mwcs$MWCS.hlp fi+
Additional information is also given in the help page for RIMCURSOR.
2.3 IMFORT changes
The IMFORT interface (host level Fortran or C interface to the IRAF
image format) has undergone the following bug fixes and enhancements:
o A couple of bugs associated with the IMDIR (image pixel-file
directory) feature introduced in IRAF V2.8 have been fixed.
o Image clobber checking has been added. By default, if you create a
new image and another image with the same name already exists, the
image create will now return an error code leaving the existing
image unchanged. To override clobber checking in IMFORT programs,
restoring the previous behavior of the interface, define "clobber"
in your host environment.
o IMFORT will now perform a limited filename translation service
using the IRAF VOS filename translation code. This should allow
most IRAF filenames to be used as input to host level IMFORT
programs. Full VOS filename mapping is not provided, but filenames
containing upper case characters and multiple "." delimited fields
should be translated as in IRAF programs.
o On systems with multiple architecture support (e.g., Sun, Convex)
the FC task, used to compile and link IMFORT programs from within
the IRAF environment, is now a script rather than a simple foreign
task front end to XC. The purpose of the script is to see that all
the necessary IRAF and host level command line switches and
environment definitions (IRAFARCH, FLOAT_OPTION, etc.) are used.
Previously, users had to make these environment definitions
manually, and if they forgot the IMFORT program could fail to link
or execute.
o On most UNIX/IRAF systems, the host library -lU77 is now searched
automatically by FC when an IMFORT program is linked. This library
is not used by any of the IRAF code, but is required to link some
Fortran programs that might want to use IMFORT.
Users are encouraged to use FC to link their IMFORT programs. It is
possible to manually link against the IRAF libraries if you know what
you are doing, but the location of the libraries and the required host
level command line switches vary for different systems and for
different architectures of a single system, and it is easy to make
mistakes.
2.4 MKIRAF now copies login.cl to login.cl.OLD
On UNIX/IRAF systems, the MKIRAF command will now copy any existing
login.cl file to login.cl.OLD, so that, for example, you can more
easily merge any custom changes back in after running MKIRAF. On
VMS/IRAF systems a new file version is created, as before.
2.5 Local additions to termcap/graphcap
The termcap and graphcap device capability files have been
reorganized with a section at the top for local additions. It is
recommended that any locally added entries be made in this area, to
simplify future system updates. The local additions can then be simply
transferred to the new version of the file when a new version of IRAF
is installed (any entries which are modified versions of standard
entries should always be checked to see if anything has changed in the
distributed version).
2.6 BIN directories now smaller
On systems with multiple architecture support, the architecture
save file OBJS.arc stored in the BIN directory for each architecture is
now maintained as a compressed file. In a typical case this reduces
the size of the file by about a factor of two, saving 1-2 Mb of disk
space in each BIN directory.
2.7 Various system buffers increased in size
The layered software support in IRAF V2.8 (extern.pkg and all that)
had a problem with very long helpdb environment strings, limiting the
number of external packages which could be defined. To fix this
problem, various buffers were increased in size all over the system.
The maximum length of an environment variable such as helpdb is now 960
characters (12 80 character lines of text). String parameters to tasks
can also be larger, and the system is more resistant to problems when
size limits are exceeded. Foreign task commands, OS escapes, etc., can
all be larger now. The current limit on such strings is about 1024
characters, and is defined at sysgen time by the new system parameter
SZ_COMMAND in hlib$iraf.h.
2.8 Shared library versions
The Sun/IRAF shared library mechanism was modified to add support
for shared library versions. The result is that when you install IRAF
V2.9, which has a different shared library than V2.8, any local
programs or other layered software linked under V2.8 will continue to
run, because both the old V2.8 shared library and the new V2.9 shared
library are included in V2.9 (with different version numbers).
Although old programs will continue to run with V2.9, it is recommended
that they be relinked eventually to take advantage of the many features
and bug fixes provided by V2.9. In the case of very large packages,
e.g., STSDAS 1.0, it may be wise to wait until the latest release can
be obtained and installed before relinking, as the old version will not
have been tested under IRAF V2.9 (which of course, didn't exist back
then).
2.9 File pager enhancements
The system file pager, used in the PAGE task, the new PHELP task,
and other places, has undergone the following enhancements.
o The N and P keys, used to move to the next or previous file when
paging a list of files, now have a dual meaning: when paging a
single file containing multiple formfeed delimited pages, the keys
will move to the next or previous page in the file. This feature
is used in the new PHELP task to page a large file containing,
e.g., all the HELP pages for a package.
o A limited upscrolling capability is now supported, e.g., if you hit
the 'k' key while in the pager, the screen will be scrolled up one
line in the file being paged. This feature may not be supported
for some terminals, in which case the entire screen is redrawn at
the new file location.
2.10 STF image kernel enhancements
Extensive work has been done on the STF image kernel in this
release (the STF kernel allows IRAF to access the Space Telescope image
format directly). The changes included the following.
o Header file caching. STF images often have quite large FITS
headers which can be time consuming to read. A header file caching
scheme is now used to optimize the kernel in cases where the same
imagefile is repeatedly accessed, e.g., when successively reading
each element of a large group format image. By default up to 3
header files will be cached; this default should be fine for most
applications. If necessary the number of cache slots can be
changed by defining the integer variable "stfcache" in the IRAF
environment (the builtin maximum is 5 cached headers per process).
o The semantics of the kernel regarding header updates have changed.
STF images differ from other IRAF images in that they may consist
of a group of images all in the same file, with each individual
image having its own header (the group header), plus a single
global FITS header shared by all images in the group. This is no
problem in a read operation, but in a write or update operation
there can be problems since parameters cannot be added to or
deleted from the individual group headers. The new semantics
regarding STF image header updates are as follows: 1) when updating
the header of a multigroup image (not recommended) only the group
header is updated, and attempts to add new parameters are ignored;
2) when updating the header of an image containing a single group,
both the group header and the FITS header are updated.
As a result of these changes, the behavior of a single group STF
image is now identical to that of a regular IRAF image. It is
recommended that multigroup STF images be treated as read only if
possible, creating only single group images during interactive
processing (except when running a program that is explicitly
designed to create multigroup images).
o The kernel was modified to work with the new MWCS (world coordinate
system) interface. The image section transformation is now
performed by MWCS rather than by the STF kernel.
o A number of minor changes were made to the way the group parameter
block (GPB) cards are maintained in the IRAF image descriptor. The
comments on GPB definition cards are now preserved. Restrictions
on the grouping of GPB cards in the header have been removed.
o A number of bugs were fixed and restrictions removed, e.g., the
size of a header is no longer limited to 32767 characters (404
lines).
The IRAF core system and NOAO science applications were extensively
tested with both single and multigroup STF images using the new
kernel, and we now feel that it is safe to use the STF image format
with these tasks, although the regular format is preferred if there
is no special reason to use the STF format (the regular format is
more efficient).
2.11 QPOE (event list image format) enhancements
The QPOE image kernel, used for event list data (photon counting
detectors, e.g., X-ray satellites such as ROSAT) underwent the
following changes.
o MWCS (world coordinate system) support has been added (section
4.2.2). This provides a consistent coordinate system despite,
e.g., the blocking factor, rect, or image section used to construct
an image matrix from an event list.
o When opening a QPOE file as an IRAF image, the runtime filter
expression used to create the image matrix is now saved in the
parameter QPFILTn in the image header (multiple cards are used for
long expressions).
o Region masks of arbitrary complexity and size can now be used to
mask the event list when reading time-ordered or unordered
(unindexed) event lists. This is done using the new PLRIO package
(section 4.2.5) which provides the capability to efficiently random
access large image masks of arbitrary complexity.
o Unmatched brackets, braces, or parentheses are now reported as an
error by the filter expression parser (this can occur even with a
valid expression, e.g., due to truncation of the expression
string). A reference to an undefined keyword, e.g., due to a
spelling error, is now detected and reported as an error. Any
errors occurring during expression parsing will now result in
termination of the calling task, unless caught in an error handler.
o A number of bugs were fixed.
2.12 Changes affecting image display in VMS/IRAF
A new version of Nigel Sharp's UISDISPLAY program, for image
display on VMS systems running UIS, has been installed in
"iraf$vms/uis". An executable for an early version of the SAOIMAGE
display program for the X window system, written by Mike VanHilst
(SAO), and ported to VMS by Jay Travisano (STScI) has been placed in
the directory "iraf$vms/x11". An executable for a VMS version of XTERM
(the X window terminal emulator, ported to VMS by Stephan Jansen), is
also in this directory. We wanted our VMS users to have access to
these programs, although more development work and testing is needed
before we can offer good support for X window based image display and
graphics on VMS. A more comprehensive package providing enhanced
capabilities should be available as an add-on later this year.
3. IRAF Package Revisions
The most notable changes to the tasks in the IRAF packages are
summarized below. Further information may be obtained by reading the
help page for each task, or by paging the revisions file for a
particular package. For example, to page the revisions for the DATAIO
package:
cl> phelp dataio.revisions op=sys
3.1 Changes to the System Packages
3.1.1 Modifications to tasks in the DATAIO package
o The RFITS and WFITS tasks have been modified to add support for the
IEEE floating point format. The "bitpix" parameter in WFITS can be
set to -32 or -64 to specify real or double precision IEEE floating
numbers on output. RFITS recognizes these same values in the
bitpix keyword in the FITS header on input and converts the data
accordingly. Note that this option must be selected by the user as
the defaults for writing a FITS tape have not changed. The user is
cautioned that support for the IEEE floating formats is a new
feature of FITS and may not be supported by all FITS readers.
o RFITS was modified so that the "iraf_file" parameter can be a list
of output images or a image root name.
3.1.2 Modifications to tasks in the IMAGES package
o MWCS (world coordinate system) support was added to those tasks in
the IMAGES package which change the geometry of an image, i.e.,
IMSHIFT, SHIFTLINES, MAGNIFY, IMTRANSPOSE, IMCOPY, BLKREP, BLKAVG,
ROTATE, IMLINTRAN, REGISTER, and GEOTRAN (REGISTER and GEOTRAN only
support simple linear transformations). If one of these tasks is
used to linearly transform an image, the world coordinate system
(WCS) in the image header will be updated to reflect the
transformation. Note that MWCS is disabled by default in IRAF
V2.9, and must be explicitly enabled to allow these tasks to edit
the image header to update the WCS (see section 2.2).
o The IMSTATISTICS task was modified. The "verbose" parameter was
renamed "format" with the default being set to "yes" (fixed format
with column labels). Otherwise the fields are printed in free
format with 2 blanks separating the fields. The name of the median
field has been changed to "midpt".
o The IMHISTOGRAM task has a new parameter called "hist_type" that
gives the user the option of plotting the integral, first
derivative, or second derivative of the histogram instead of the
normal histogram.
3.1.3 Modifications to tasks in the LISTS package
o The RIMCURSOR task in the LISTS package was completely rewritten to
add MWCS support, so that coordinates may be output in any user
specified coordinate system defined by the WCS information in the
image header of the reference image. For example, if an image with
a TAN projection WCS is loaded into the image display, RIMCURSOR
may be used to print the right ascension and declination at the
location defined by the image cursor. Refer to the help page for
details.
3.1.4 Modifications to tasks in the PLOT package
o A new graphics kernel task IMDKERN (written by Zolt Levay at STScI)
has been added to the PLOT package. The new graphics kernel allows
the graphics output of any task to be plotted as a graphics overlay
on the image display. As with the other graphics kernels, this may
be done by calling the IMDKERN task directly, but is more often
done by specifying the image display (e.g., device "imd") as the
output device when running a graphics task. Refer to the help page
for details.
o The CONTOUR task was modified so that it could be used with IMDKERN
to overlay contour plots on the image display. If the parameters
fill=yes and perimeter=no are set the contour plot is scaled to
fill the entire device viewport and all axis and plot labeling is
disabled. If the image being displayed also fills the entire
device viewport (display frame) then the contour plot will be drawn
to the same scale as the displayed image. Refer to the help page
for details.
o Several tasks in the PLOT package were modified to allow use with
image specifications containing brackets, e.g., group format
images, QPOE filter expressions, and image sections. The tasks
modified were PROW, PROWS, PCOL, PCOLS, SURFACE, and CONTOUR.
o An option was added to the PVECTOR task to output the vector (cut
through the image at an arbitrary angle and center) as a text file
or image, rather than plotting the vector.
3.1.5 Modifications to tasks in the SYSTEM package
o A new task PHELP (paged help) was added to the SYSTEM package.
PHELP is a script task front end to HELP which collects the output
of HELP in a scratch file and pages it with the system pager,
allowing one to randomly skip around to read the help text. Note
that paging of all the help pages in a package is supported, e.g.,
cl> phelp images.*
would page all the help files for the IMAGES package.
o The NEWS task was completely rewritten, and is now used to page the
revisions summary for the current and previous releases. In other
words, one can now type NEWS to find out what is new in the current
release.
o The GRIPES task was modified to send mail to iraf@noao.edu or
5355::iraf. The IRAF site administrator may want to check this
script for compatibility with the local mail system.
3.2 Glossary of New Tasks in the IRAF System Packages
Task Package Description
imdkern plot Image display device (IMD) graphics kernel
news system Summarize what is new in the current release
phelp system Paged HELP: collects and pages the output of HELP
rimcursor lists Read image cursor position in world coordinates
3.3 Changes to the NOAO Packages
3.3.1 New NOAO Packages
A new package ARTDATA, used to generate artificial data, has been
added to the NOAO packages. ARTDATA includes tasks for the generation
of star fields, optionally containing galaxies, and one and two
dimensional spectra as well as simple test pattern images. The tasks
GALLIST and STARLIST provide many options for producing lists of
galaxies or stars that can then be used by the task MKOBJECTS to produce
output images. The tasks MK1DSPEC and MK2DSPEC provide tools for making
artificial spectral data. The task MKNOISE allows the user to add
readout noise, poisson noise and/or cosmic ray events to new or already
existing images. The task MKPATTERN allows the user to make images
from a choice of patterns.
3.3.2 Modifications to Existing NOAO Packages
3.3.2.1 The ASTUTIL package
o The task SETAIRMASS in the ASTUTIL package was modified so that it
now precesses the coordinates to the epoch of the observation.
3.3.2.2 The DIGIPHOT.APPHOT package
o A new task APTEST was added to the DIGIPHOT.APPHOT package that
tests the execution of the package. Output files are generated that
the user can review.
o Two new parameters were added to DATAPARS, "datamin" and "datamax".
Pixels outside this range are rejected from the sky fitting
algorithms and from the non-linear least square fits in FITPSF and
RADPROF.
o An "update" parameter was added to all of the APPHOT tasks. If the
"verify" parameter is set to "yes" and the task is run in
noninteractive mode update=yes will update the critical parameters
in their respective parameter sets.
o Four new parameters, "airmass", "xairmass", "filter", and "ifilter",
were added to the DATAPARS task. These parameters provide the user
the option of having the filter and airmass quantities from the
image headers to be carried over into the APPHOT database files for
later transmission to calibration programs.
o A new algorithm "mean" was added to the sky fitting options.
o A setup menu mode was added to all the APPHOT tasks. When the user
types "i" in interactive mode a setup menu is presented rather than
a fixed set of predefined commands.
3.3.2.3 The IMRED.IRRED package
o The APSELECT task (from the APPHOT package) has been made visible.
o The image i/o for IRMOSAIC, IRALIGN, IRMATCH1D, and IRMATCH2D has
been optimized so things should run much faster. There is now an
option to trim each section before insertion into the output
image. The actions of these tasks can now optionally be output to
the terminal.
3.3.2.4 The IMRED.MSRED package
o A task called MSBPLOT was added to the IMRED.MSRED package. This
task allows the user to plot a range of lines in multispec images
in batch mode.
3.3.2.5 The ONEDSPEC package
o Several modifications were made to the ONEDSPEC package. These
changes affect all of the IMRED packages that include these tasks
as well.
o The equivalent width measurement using the "e" keystroke in SPLOT
is now computed using the ratio of the spectrum to the continuum.
The previous approximation is included in the logfile for
comparison.
o The DISPERSION task will now add CDi_j (CD matrix) keywords to the
image header as an alternative way of expressing the dispersion
function. If the keywords W0 and WPC or CRVALn and CDELTn are not
in the image header the tasks reading this information for setting
the wavelength (IDENTIFY, SENSFUNC, SPLOT, and SPECPLOT) will look
for the CDi_j keywords. This change should have no affect on the
NOAO applications but provides compatibility with STSDAS
applications using the new MWCS interface provided with IRAF
version 2.9.
o The call to the CALIBRATE task in the script task BATCHRED was
modified so that the "extinct" parameter is always set to "yes".
Since CALIBRATE checks to be sure the data has not been previously
extinction corrected this simple change provides more flexibility.
3.3.2.6 The PROTO package
o Two new tasks, IMALIGN and IMCENTROID, were added to the package.
IMCENTROID computes a set of relative shifts required to register a
set of images. The task IMALIGN both computes the shifts and
aligns the images.
o The JOIN task (previously a simple script) has been replaced by a
compiled version which removes many of the restrictions of the
previous version.
o The IR tasks have been modified as mentioned above under the
IMRED.IRRED section (section 3.3.2.3).
o The TVMARK task was modified to permit deletion (the "u" key) as
well as addition of objects to the coordinate file. Another cursor
keystroke, the "f" key, was added allowing the user to draw a
filled rectangle.
3.3.2.7 The TWODSPEC.LONGSLIT package
o Tasks in the TWODSPEC.LONGSLIT package that are used for setting
wavelength information (EXTINCTION, FLUXCALIB, and TRANSFORM) were
modified for the CDi_j keywords as outlined above for ONEDSPEC.
3.4 Modifications and Additions to Calibration Data
The calibration data used by some of the tasks in the TWODSPEC,
ONEDSPEC, and many of the IMRED packages are kept in a directory called
ONEDSTDS in noao$lib. The current contents of this directory are best
summarized by paging through its README file, e.g.,
cl> page noao$lib/onedstds/README
A new directory spec50redcal in "noao$lib/onedstds" has been added
containing flux information for standard stars. The data in this list
are from Massey and Gronwall, Ap. J., July 20, 1990.
3.5 Glossary of New Tasks in the NOAO Packages
Task Package Description
aptest apphot Run basic tests on the apphot package tasks
gallist artdata Make an artificial galaxies list
imalign proto Register and shift a list of images
imcentroid proto Compute relative shifts for a list of images
mk1dspec artdata Make/add artificial 1D spectra
mk2dspec artdata Make/add artificial 2D spectra
mknoise artdata Make/add noise and cosmic rays to 1D/2D images
mkobjects artdata Make/add artificial stars and galaxies to 2D images
mkpattern artdata Make/add patterns to images
msbplot msred Batch plots of multispec spectra using SPLOT
starlist artdata Make an artificial star list
4. Programming Environment Revisions
4.1 Changes to the Programming Utilities
4.1.1 MKPKG changes
The MKPKG utility can now substitute the contents of a file back
into the input stream, as a special case of the macro replacement
syntax. For example, the sequence
abc$(@file)def
would be translated as
abc10def
if the file "file" contained the string "10". The replacement is
performed by inserting the contents of the file back into the input
stream, replacing sequences of newlines, spaces, or tabs by a single
space, and omitting any trailing whitespace.
The "-p <pkg>" argument to MKPKG, XC, and so on loads the environment
of the named package pkg, to define the package environment variables,
load the mkpkg special file list, define the directories to be searched
for global include files and libraries, and so on. Multiple "-p"
arguments may be given to load multiple package environments. What is
new is that if pkglibs is defined in the environment of a package to
list the package library directories to be searched (the usual case),
and multiple package environments are loaded, successive redefinitions
of pkglibs will add to the list of directories to be searched, rather
than redefining the old list as each new package environment is
loaded. For example, if two package environments are loaded, and each
defines its own library, both libraries will be searched.
4.1.2 Generic preprocessor
A minor change was made to the generic preprocessor which affects
how strings such as "FOO_PIXEL" are translated. In the usual case, the
preprocessor replaces all occurrences of "PIXEL" by "int", "real", or
whatever the actual datatype is. The translation is now context
sensitive. Rather than translating "FOO_PIXEL" as "FOO_int" (e.g.,
"MII_PIXEL" -> "MII_int"), the type name will now be output in upper
case if the rest of the name in which it occurs is upper case. Hence,
a string such as "MII_PIXEL" will now be translated as "MII_INT". This
allows the use of generic constructs to symbolize SPP macros.
4.1.3 SPP changes
The language constant ARB, formerly defined as 32767, is now treated
differently depending upon how it is used. In a declaration of an array
argument, ARB is replaced in the output Fortran by a "*", e.g., "int
data[ARB]" becomes "INTEGER DATA(*)". In an executable statement, ARB
is replaced by a very large ("arbitrarily" large) integer value, e.g.,
to define a DO-loop which is to loop an arbitrary number of times. If
ARB is mistakenly used to dimension an array which is a local variable
rather than an argument, the SPP translator will now detect and report
the error.
4.1.4 Interactive development and the process cache
Whenever a CL task is run and the process containing the task is
already idling in the CL process cache, the CL will now check to see if
the modify date on the process executable has changed, and restart the
process if the executable has been modified. For example, when doing
software development from within the CL and a process is alternately
relinked and tested, the CL will now automatically detect that the
process has been relinked and will run the new process, without any
need to manually flush the process cache.
4.2 Programming Interface Changes
4.2.1 New MWCS interface (world coordinate system support)
A major new VOS interface MWCS, providing general facilities for
linear and nonlinear world coordinate systems, has been added to the
programming environment and is used in IRAF V2.9 in IMIO, IMAGES, and
other parts of the system. MWCS is intended for use in scientific
applications as well as in system code such as IMIO, hence is of
potential interest to anyone developing software within the IRAF
environment. The source directory is "mwcs" and the interface is
documented in the file "mwcs$MWCS.hlp". Users should be aware that,
although the new interface addresses the general WCS problem and has
been carefully designed, a second version of the interface is planned
and the current interface is not yet a "frozen" interface.
4.2.2 QPOE interface changes
The QPOE (event list image) interface has been extended to add
routines to store MWCS objects in the QPOE header. By default, there
is one MWCS per QPOE file, stored encoded in a machine independent
binary format in a variable length array qpwcs of type opaque. The new
routines are as follows:
mw = qp_loadwcs (qp)
qp_savewcs (qp, mw)
mw = qpio_loadwcs (io)
The routines qp_savewcs and qp_loadwcs merely save a MWCS in the QPOE
header, or load a previously saved one. The QPIO (event i/o) routine
qpio_loadwcs is like qp_loadwcs, except that it will also modify the
Lterm of the MWCS to reflect any blocking factor or "rect" specified in
the filtering expression when the event list was opened. The new
routine is called automatically by QPF and IMIO whenever a QPOE event
list is opened under image i/o, making the physical coordinate system
of the image matrix the same as physical event coordinates.
The calling sequences of the qp_add and qp_astr routines, used to
conditionally add or update header parameters, have been changed (so far
as we could determine very few programs exist yet which use these
routines, so we decided to risk an interface change). The change made
was to add a comment argument. This change was motivated by the
observation that people would not use the routines but would instead
use lower level routines, in order to be able to set the comment field
if the parameter has to be added to the header.
4.2.3 IEEE support routines added
Routines for IEEE floating to native floating conversions have been
added to the MII and OSB interfaces. The new MII routines are as
follows:
nelem = miiread[rd] (fd, spp, maxelem)
miiwrite[rd] (fd, spp, nelem)
miipak[rd] (spp, mii, nelems, spp_datatype)
miiupk[rd] (mii, spp, nelems, spp_datatype)
The miiread and miiwrite routines are like their FIO counterparts,
except that they are used only with data of the indicated type, and
perform the IEEE to native floating conversion (or vice versa) as part
of the i/o operation. The miipak and miiupk routines pack
(native->IEEE) and unpack (IEEE->native) arrays of the indicated type.
The lowest level conversion routines are the OSB routines, which are
what the MII routines use to perform the lowest level translation.
ieepak[rd] (datum)
ieeupk[rd] (datum)
ieevpak[rd] (native, ieee, nelem)
ieevupk[rd] (ieee, native, nelem)
iee[sg]nan[rd] (NaN)
The ieepak and ieeupk routines transform a single scalar value in
place, while the ieevpak and ieevupk routines transform vectors (note
that the package prefix is "iee", not "ieee"). In-place vector
conversions are permitted. Since IRAF does not support the IEEE
not-a-number formats, NaN, Inf etc. values are converted to a legal
native floating value on input. The native floating value to which
NaNs are mapped (default zero) may be globally set with ieesnan.
On some systems, e.g., the VAX, the low level conversion routines may be
written in assembler or machine dependent C. If so, the source file
actually used by the system will be found in the "host$as" directory.
4.2.4 New routine GETLLINE added to FIO
A new routine getlline (get long line) has been added to FIO. This
is similar to getline, except that it will reconstruct arbitrarily long
newline delimited lines of text, whereas getline returns at most
SZ_LINE characters.
nchars = getlline (fd, outstr, maxch)
The new routine should not be confused with the old routine getlongline,
a higher level routine which performs a similar function, but which
also ignores comment lines and help blocks, and maintains a line
counter.
4.2.5 Modifications to PLIO/PMIO
A new routine p[lm]_sectnotconst has been added to PLIO and PMIO
(the pixel list and image mask interfaces). As the name suggests, the
routine tests whether a given rectangular section of the mask is all at
the same value, and if so returns the mask value as an output argument.
bool = pl_sectnotconst (pl_src, v1, v2, ndim, mval)
A new subpackage PLRIO has been added. This is used to efficiently
random access any 2D plane of an existing pixel list or image mask.
plr = plr_open (pl, plane, buflimit)
plr_setrect (plr, x1,y1, x2,y2)
mval = plr_getpix (plr, x, y)
plr_getlut (plr, bufp, xsize,ysize, xblock,yblock)
plr_close (plr)
The mask is opened for random access on a special descriptor which
incorporates a scaled, active 2D lookup table. Most subsequent
plr_getpix calls will return the given mask value directly from the
table with very little overhead; only if the referenced pixel occurs in
a region too complex to be described by a single table entry is the
value computed by direct evaluation of the mask. A special 2D binary
recursive algorithm (using pl_sectnotconst above) with log2(N)
performance is used to calculate the scaled lookup table. These
algorithms provide efficient table generation and random mask pixel
access even for very large masks.
IRAF (Mar90) V2.8 Revisions IRAF (Mar90)
IRAF Version 2.8 Revisions Summary
June 30, 1989
1. Introduction
This revisions notice coincides with the release of version 2.8 of
IRAF. The V2.8 release is a general release for all supported IRAF
hosts.
The following is a brief description of some of the new features
available in IRAF Version 2.8. This is not intended to be an
exhaustive list, but rather a brief summary of the major changes since
the last major release of IRAF Version 2.5 in July 1987 and subsequent
intermediate releases primarily to support Sun/IRAF: IRAF Version 2.6
(February 1988), IRAF Version 2.6+ (March 1988), and IRAF Version 2.7
(December 1988).
More detailed revisions notes are available in the system notes files in
the iraf$doc and iraf$local directories, as well as in the online
revisions notes for the various packages.
2. IRAF System Revisions
This document highlights the most notable revisions made to the
IRAF core system software for Version 2.8. This is only a revisions
summary; no attempt is made to provide detailed technical documentation
for each revision, nor is there any attempt to exhaustively summarize
all revisions. A complete record of all core system revisions will be
found in the System Notes for V2.8. Additional information on some of
the topics covered below will be found in the various Installation
Guides and Site Manager's Guides, and in the IRAF User and Technical
Documentation manual sets.
2.1 Copyright notice
Subject to AURA and NSF approval, the IRAF software will be
copyrighted sometime during 1989. As a first step in this process, a
copyright notice has been added to all core system source files. The
notice reads as follows: "Copyright(c) 1986 Association of Universities
for Research in Astronomy Inc". We will also be adding a file called
COPYRIGHT to the distribution stating the terms of the copyright and
associated licensing agreement for the software.
The intent of this action is solely to protect the software from
unauthorized commercial exploitation, and the copyright grants, or will
grant, the right to copy, modify, and redistribute the IRAF software
provided the original copyright notice remains intact, the software is
made available in source form, and the rights we grant are passed on
with the software. We wish to prevent others, especially commercial
firms, from copyrighting IRAF software in their own name and possibly
taking away the rights we grant with the software. Granting the right
to modify and redistribute IRAF software does not mean we want to
encourage people to do so, we merely want them to have the legal right
to do so if they feel they need to.
2.2 Major system enhancements
The information in this section is provided primarily for the
benefit of IRAF site managers and programmers. The reader interested
primarily in science applications may wish to skip ahead. Some systems
level familiarity with the current IRAF system is assumed.
2.2.1 Layered software enhancements
A given IRAF installation consists of the core IRAF system, and any
number of layered software products or external packages. The goal of
the layered software enhancements introduced in V2.8 is to make layered
software products self contained and hence independent of the core
system and of other layered software. Examples of layered software
products are the NOAO packages, LOCAL, STSDAS, PROS, and so on.
The layered software enhancements make it possible to install or
deinstall a layered product by modifying only a single file in the core
IRAF system. The core system may be updated without affecting layered
software, and vice versa. Since layered products are independent and
are simple to install, IRAF can easily be configured with only those
packages needed at a particular site. Software developers benefit from
the layered software enhancements because the facilities provided for
development and maintenance of layered software are equivalent to those
provided for development of the core IRAF system and the NOAO
packages. User sites benefit because it is easy to extend the system
with LOCAL packages of their own making.
Each layered product (usually this refers to a tree of packages) is a
system in itself, similar in structure to the core IRAF system. Hence,
there is a LIB (global system library), one or more BINs (binary file
directories), a Help database, a set of global environment definitions,
and all the sources and runtime files, all contained within the same
directory tree. Layered software products, in their source only form,
are portable without change to any computer which runs IRAF.
2.2.1.1 The hlib$extern.pkg file
This is the file which is modified to install or deinstall layered
software products. To install a layered product, one creates a
directory to hold the software, restores the files to disk, and edits
the extern.pkg file to tell IRAF the name of the root package of the
layered product, and where the root directory is located. If the
layered software is distributed in source only form it will also be
necessary to recompile the software, but this is a completely automated
process.
2.2.1.2 NOAO and LOCAL packages reorganized
As part of the project to better support layered software, the NOAO
and LOCAL packages have been reorganized as layered products. These
packages are now structurally equivalent to third party (non-NOAO)
packages, except that the directory trees are rooted in IRAF. Both
packages are now self contained, with their own LIB, BINs, Help
database, etc., and with an entry in extern.pkg, like other layered
products. The NOAO package serves as a working example of how to
configure a layered package. The reorganization of these packages
should be transparent to anyone merely using the system.
2.2.1.3 The template LOCAL
The LOCAL package included with the distributed system has been
stripped of all NOAO site-local tasks and restructured as a layered
product, the template local. The template local contains only two
sample tasks and is not intended as an end-user package, but rather as
a template to be copied and modified by sites to construct their own
site dependent LOCAL package. The desire to be able to easily develop
and maintain locally added packages was one of the major motivations
for the layered software enhancements project, and we hope that sites
will realize the significance of this new capability and take advantage
of it.
2.2.1.4 CL now supports package level BIN directories
Rather than assuming a global BIN directory for all tasks and
packages, the CL now permits multiple BIN directories, each BIN
directory being associated with the package of definition and all
subpackages of that package (unless they have their own BIN). A new
BIN directory is declared with the optional argument bindir=path in the
package statement, e.g., in a package script task.
2.2.1.5 MKPKG support for package environments
Layered packages now have their own private LIB, including an
environment definitions file (zzsetenv.def), mkpkg global include file
(mkpkg.inc), and, optionally, a mkpkg special file list file for each
supported host system, listing files requiring special compilation to
work around host compiler bugs or whatever. The full mkpkg environment
is formed by reading the IRAF core system environment and mkpkg
definitions and include files, followed by the package definitions and
include files. Reading of the package environment occurs only if mkpkg
is called with the "-p" flag, or if the variable PKGENV is defined in
the user's environment.
Another way of expressing this is, when using mkpkg within a layered
package, one must now specify the name of the layered package in order
to pick up the package environment definitions. For example, to update
the MTLOCAL package in NOAO, one would type "mkpkg -p noao update" in
the mtlocal directory. If this is not done compilation errors may
result, or the exectable may not be successfully installed in the
package BIN directory.
2.2.2 Multiple architecture support
A single IRAF system (or layered package) can now simultaneously
support any number of machine architectures using multiple BIN
directories sharing a single machine independent copy of IRAF. Each
BIN directory contains all the object modules, object libraries, and
executables for a particular architecture. An architecture can
represent either a type of hardware, e.g., sparc, mc68020+f68881,
mc68020+ffpa, vax, etc., or a software distinction, e.g., systems
compiled with different sets of compiler flags, or different versions
of a system. Multiple architectures are now supported both for IRAF
execution, and for IRAF based software development, e.g., a single
version of IRAF can now be used to develop and run IMFORT programs on
both Sun-3 and Sun-4 nodes.
The only case where multiple architecture support is used at the present
time is in Sun/IRAF, which is often installed on a heterogeneous
network of workstations, e.g., Sun-3s with various hardware floating
point options, and Sun-4s. A single copy of IRAF will be configured
with several BIN directories, one for each supported architecture, and
NFS mounted on all the network nodes which will be using IRAF. There
is no reason that this feature need be restricted to use with Sun/IRAF,
however.
2.2.2.1 IRAFBIN and IRAFARCH
Starting with IRAF V2.8, the old environment variable IRAFBIN has
been obsoleted and replaced by IRAFARCH. On machines which support
multiple architectures, the latter defines the architecture to be used
for both IRAF execution and software development. If only IRAF
execution is needed the variable is optional, with the best
architecture being selected automatically when the CL is started. If
one will be doing software development (including IMFORT) it is best to
define the variable in the host environment before starting IRAF or
doing any host level software development. Typical values of IRAFARCH
for a Sun workstation are "sparc", "i386", "f68881", and "ffpa".
2.2.2.2 System libraries moved to the BIN directory
As part of the revisions required for multiple architecture support
for software development, all object libraries have been moved from the
global, architecture independent LIB to the architecture dependent BIN,
with the LIB entries being replaced by symbolic links (in the case of
Sun/IRAF). This should be transparent to both end users and
programmers.
2.2.2.3 New bin.generic architecture
On Sun/IRAF systems, which are distributed configured for multiple
architecture support, the system architecture is set to generic in the
distributed system. What this means is that all architecture dependent
files (objects and object libraries) have been removed from the system
directories and archived in the file OBJS.arc in the BIN directory for
each architecture. Rebuilding any of the packages in a system would
require restoring the binaries for a particular architecture, e.g.,
typing "mkpkg sparc" at the IRAF root would restore the sparc binaries
for the core system on a Sun/IRAF installation. Note that this only
affects software development for the system in question; software
development for external packages or private user software is not
affected.
2.2.3 Shared library facility
IRAF version 2.8 adds support for a general shared library facility
for UNIX based systems. Although currently only used with Sun/IRAF,
this facility is potentially useful for other UNIX based IRAF systems
as well (VMS/IRAF already has its own shared library facility).
What the shared library facility does is take most of the IRAF system
software (currently the contents of the ex, sys, vops, and os
libraries) and link it together into a special sharable image, the file
S.e in each core system BIN directory. This file is mapped into the
virtual memory of each IRAF process at process startup time. Since the
shared image is shared by all IRAF processes, each process uses less
physical memory, and the process pagein time is reduced, speeding
process execution. Likewise, since the subroutines forming the shared
image are no longer linked into each individual process executable,
substantial disk space is saved for the BIN directories. Link time is
correspondingly reduced, speeding software development.
With the introduction of the shared library facility, the disk space
required for Sun/IRAF is substantially reduced. Due to the increased
memory sharing and reduced process pagein times performance is
substantially improved, especially on systems like the Sun/386i which
has a relatively slow SCSI disk and often limited memory. The disk
size of small programs is reduced by up to a factor of ten in some
cases, e.g., an executable for a small program that was formerly 250 Kb
in size might be as small as 25 Kb if the shared library is used and
the shared image symbols are omitted at link time.
2.3 User interface changes
2.3.1 Calling IRAF tasks from the host environment
The IRAF main and zmain were modified to make it easier to call
IRAF tasks as host level tasks, i.e., without having to set up a
command file and run the process with the standard input redirected.
In the new scheme, any extra arguments given on the process command
line are passed into the IRAF main as a command buffer containing the
IRAF command or commands to be run. For example,
cl> x_system.e netstatus
would run the command netstatus in process x_system.e.
cl> x_system.e count "files=*.x"
would run the count task, counting all ".x" files in the current
directory.
cl> x_system.e count "files=*.x 4>_o"
would do the same, redirecting the output at the IRAF main level to the
file _o.
cl> x_system.e 'directory @pars $nargs=0'
would run the directory task with the given parameter set, with $nargs
set to 0. If any of the parameters to a task are omitted the task will
query the terminal for them in the usual way, so for example
cl> alias count "$iraf/bin/x_system.e count files="
would make the IRAF task count available in UNIX, allowing the IRAF
template specifying the files to be counted to be either given on the
UNIX command line, or prompted for if omitted. Given the above alias,
one could enter a UNIX command such as
cl> count 'cl$*.h'
This feature is available in all UNIX based versions of IRAF V2.8, but
did not make it into VMS/IRAF version 2.8.
2.3.2 Image packing density control (impkden)
Some users have complained about images taking up more disk space
than they have to, due to the IMIO feature which conditionally blocks
image lines to fill an integral number of disk blocks. This can result
in more efficient image i/o but can also make a significant difference
in the amount of disk space consumed by an image in some cases.
IMIO can actually support both block-aligned and fully packed images.
The decision is made at image creation time and is based on the image
packing density if image lines are block aligned. If the packing
density is too low for a block-aligned image, a fully packed image is
created to avoid wasting disk space. The default minimum packing
density is 0.6, i.e., up to 40% wasted space before IMIO switches to
full packing (no wasted space).
For finer control over the packing density, the user can now specify the
optional environment variable impkden, the numeric value being the
mininum packing density. For example,
cl> set impkden = 1.0
would completely disable block-alignment of image lines in IMIO.
2.3.3 User libraries (IRAFULIB)
It is now possible for the programmer (SPP or IMFORT) to specify a
private directory to be searched at compile or link time when
developing IRAF or IMFORT programs. This is done by defining the path
to the directory in the user environment as the variable IRAFULIB.
When locating a particular file, this directory will be searched before
the IRAF system libraries are searched, hence this feature may be used
to substitute custom versions of files in the IRAF system libraries,
e.g., for debugging purposes.
2.3.4 New logical printer device LPR
A new logical line printer or plotter device lpr is now supported on
all UNIX/IRAF systems. This treats the UNIX task lpr as a kind of
pseudo-device, leaving it up to UNIX to decide what physical device to
dispose of the output to. This default is system dependent, but on
some systems can be controlled by defining the variable PRINTER in the
user environment.
2.3.5 Machine independent help database
The IRAF help task uses a precompiled binary database to speed help
keyword searching. This file is now machine independent, allowing it
to be generated on one system and included in software distributions
without having to be recompiled. In addition, as part of the layered
software support, help now allows each external package to have its own
private help database. The first time help is run, all such databases
are read and linked to produce a database containing entries for all
help modules in the core system and all installed external packages.
The help database file is the file helpdb.mip in the LIB directory of
the core system and each external package.
2.3.6 Set terminal type will no longer hangup
On systems, e.g., workstations, which provide virtual terminal
windows which can change in size, IRAF may query the terminal at run
time to determine the screen size. This query is performed, for
example, at login time if the terminal type is set to gterm or sun.
Formerly this could cause the login process to hang indefinitely (i.e.,
until the user typed return or interrupt) if the terminal did not
respond to the size query, as would happen when the terminal type was
set improperly and the actual terminal ignored the query. Thanks to
the addition of non-blocking raw terminal i/o in V2.8 IRAF, the
terminal screen size query will now time out with a warning message to
reset the terminal type, if the terminal does not respond to the query
within several seconds.
2.3.7 Installing a new version of IRAF obsoletes old user parameter files
The problem of old, obsolete user (uparm) parameter files being
used with a newly installed version of IRAF, which could lead to
"parameter not found" error aborts, has been fixed. The CL now checks
the date of the file utime in HLIB, and refuses to use the user pfile
if it is older than either utime or the package pfile provided with the
new system. The contents of old user pfiles are merged into the new
system pfile, as before, preserving learned parameter values even when
the user pfile is obsolete.
2.3.8 @file list bug fixed
The problem of the "@file" (at-file-list) syntax not working when
the file in question was not in the current directory has been fixed.
2.4 Programming interface changes
2.4.1 IMFORT pixel directory control
IMFORT has been modified to permit specification of the pixel file
directory by the calling program. The modifications are completely
upwards compatible, i.e., existing programs linked with the new
interface will still create pixel files in the same directory as the
header file, with "HDR$" in the image header.
The Fortran programmer may set or query the pixel file directory using
the following routines:
imsdir (dir) # set pixel directory pathname
imgdir (dir) # get pixel directory pathname
where dir is a Fortran character variable. The value should be either
"HDR$" (the default) or a concatenatable host directory pathname (i.e.,
trailing / required for unix). Once set, the pixel directory will be
used for all subsequent image create or rename operations by the
calling process.
For example,
call imsdir ("/tmp3/pixels/")
call imcrea (image1, axlen, naxis, dtype, ier)
call imcrea (image2, axlen, naxis, dtype, ier)
If desired the default pixel directory may be specified in the host
environment as imdir or IMDIR before running the program. IMFORT will
check the host environment for this environment variable then use
"HDR$" as the default if no host definition is found.
Note that although this is similar to setting the value of imdir in the
IRAF environment, IMFORT programs are not part of the IRAF environment
and are not affected by changes to the IRAF imdir. Also, since IMFORT
is a host level facility and IRAF networking is not supported, the
network prefix (e.g., "node!") is omitted from the pixelfile pathname,
and since IMFORT programs are not necessarily used in conjunction with
IRAF, the ".." (hidden file protection) files are not used to protect
against image deletion.
2.4.2 Image display interface: IMD
A new interface IMD has been added to provide a rudimentary
facility for interactive image display device control. This is an
interim prototype interface which will be replaced by the new display
interfaces when the latter become available.
The IMD interface operates by mapping an image display device frame
buffer onto an IMIO image descriptor. The display frame buffer may
then be randomly edited by normal image i/o operations, e.g., to modify
subrasters of the displayed image, or overlay the image with color
graphics. The image pixel to display frame buffer coordinate
transformation is supported, allowing applications to work in image
pixel coordinates if desired. This interim interface is what is used
by the new display oriented tasks imexamine, imedit, and tvmark.
2.4.3 Image masks: PLIO, PMIO, MIO
The following new VOS interfaces have been added in V2.8 to provide
a general boolean or integer image mask facility.
PLIO pixel list i/o
PMIO pixel (image) mask i/o
MIO masked image i/o (image i/o through a mask)
PLIO is a general interface for storing and manipulating
multidimensional integer valued rasters containing regions of constant
value (i.e., masks). The masks are stored in a highly compressed form,
the size of the compressed mask being a function of the information
content of the mask. Both pixel array and range list i/o facilities
are provided, as well as a set of general boolean raster operators,
e.g., to extract or insert subrasters, AND or OR a source with a
destination, do the same through a stencil, draw regions of various
kinds (point, line, box, circle, polygon), and so on. See the PLIO.hlp
file in the PLIO source directory for further information.
An interactive debug program (plio$zzdebug.x) is provided for
experimenting with masks. Note that PLIO is a stand alone interface
and is not tied in any way to IMIO, even though the data structure
operated upon is similar to an image matrix.
PMIO is very similar to PLIO except that it is used to associate a
masks with an IMIO maintained reference image. Currently, the PMIO
mask must be the same resolution as the physical reference image. All
coordinates input to PMIO are in the image section coordinates of the
reference image. Hence, given a physical image and associated mask,
one can operate upon both through a user specified image section
transparently to the applications program. This includes all PLIO
style boolean rasterop operations, as well as mask pixel and range list
i/o. The PMIO interface is layered upon PLIO and IMIO, and the calling
sequences are identical with PLIO except for the package prefix, and
the addition of several new PMIO specific routines.
MIO is essentially an extension of image i/o for pixel i/o through a
mask. The central routines are the following:
mio_setrange (mp, vs, ve, ndim)
n|EOF = mio_[gp]lseg[silrdx] (mp, ptr, mval, v, npix)
One defines a rectangular region of the image with mio_setrange, and
then sequentially reads or writes line segments until all pixels
visible through the mask have been accessed. This type of i/o should
be ideal for most image processing applications which need to operate
upon only those pixels visible through a region mask (e.g., a surface
fitting task), upon all pixels except those on a bad pixel mask (e.g.,
any analysis program), and so on.
PLIO (or PMIO) masks may be stored in binary files on disk, the files
having the extension ".pl". The V2.8 version of IMIO has the
capability to treat such masks as if they were images, allowing masks
to be easily displayed, used in image expressions, converted to image
matrices and vice versa, etc. Applications may do either pixel or
range list i/o to a mask image via IMIO, if MIO is not suitable for
some reason.
2.4.4 Photon images: QPOE, QPIO, QPEX
A new set of VOS interfaces supporting photon or event list data
are now available. The QPOE interface implements the Position Ordered
Event list object, which consists of a general header mechanism plus an
event list, wherein the events are little data structures, e.g., the
attributes required to describe a photon detection (position, energy,
time, etc.). QPOE is designed to efficiently access very large event
lists, e.g., several hundred thousand or several million events in size.
Builtin event attribute filtering and region filtering capabilities are
provided for selecting photons from the event list. These filtering
capabilities may be combined with the sampling capability to produce
filtered, block averaged image matrices from event lists.
The QPOE interfaces are the following:
QPOE header and file access and management facilities
QPIO raw and filtered event i/o
QPEX event attribute filter mechanism
QPF IMIO/IKI kernel for image interface to QPOE files
QPOE and QPF add a new image type to the system, with .qp file
extension. Hence, event list data can be used as input to any of the
image processing tasks in standard IRAF, in addition to being analyzed
by tasks which deal with the individual photon events. A QPOE image is
contained in a single file. When a QPOE file is accessed as an image
the interface filters and samples the event list in real time, using a
user defined filter, block averaging factor, region mask, and so on,
producing the image matrix seen by applications at the IMIO level. The
QPOE object may be repeatedly examined with different event filters to
view the data in different ways.
The QPOE interface, in addition to providing an event list capability
for IRAF, serves as a prototype for the "flex-header" portion of the
new image structures project. Many of the capabilities to be provided
for image storage under the new image structures are already present in
QPOE.
Further information is given in the QPOE.hlp file in the QPOE source
directory.
2.4.5 File manager: FMIO
A new VOS library FMIO has been installed. FMIO is "File Manager
I/O", and is used to implement a simple binary file manager which
maintains the file data of so-called "lfiles" (lightweight files)
inside a single host binary file. The system overhead for accessing
lfiles is much less than that of host files, and many lfiles can be
used to store a complex data structure without cluttering a host
directory or incurring the inefficiency of accessing host files. FMIO
is part of the DFIO project and will serve as the lowest level
interface within DFIO; it is also used currently in the QPOE
interface. Additional information is given in the README file in the
source directory for the interface.
2.4.6 IMIO changes
IMIO is the image i/o interface, the standard IRAF VOS interface
for managing all varieties of image data.
2.4.6.1 Mask image support
IMIO now supports a new type of image, the mask image, stored as a
highly compressed binary (PLIO) file with the extension ".pl". Image
masks are most commonly used to store information describing selected
pixels in an associated data image. An image mask is logically a
boolean or integer image, up to 28 bits deep, containing information
only on selected pixels or regions of pixels. Masks are stored in
highly compressed format, e.g., a simple mask may be stored in only a
few hundred bytes of space. Mask images are readable, writable, and
randomly modifiable, like ordinary raster images. See \(sc2.4.3 for
more information.
2.4.6.2 Photon image support
Support has also been added to IMIO for event list images, stored
as position ordered event list datafiles using the QPOE interfaces.
This new image type has the extension ".qp". QPOE images are read-only
under IMIO. Subject to that restriction, they may be accessed like any
other image by any IRAF image analysis program. Accessing an event
list image as a raster image necessarily involves a runtime sampling
operation, wherein the events in the region of interest are accumulated
into an initially zero image matrix; in the process the event list may
optionally be filtered by event attribute or event position, e.g.,
cl> display "xray.qp[t=(30:40),pha=10,block=4]"
would display the QPOE image xray.qp with a blocking factor of 4,
selecting only those events with t (time) in the range 30 to 40 and for
which pha (energy) has the value 10. The event attributes and their
names are user definable and may vary for different types of data. See
\(sc2.4.4 for more information.
2.4.6.3 IMPUTH
A new procedure imputh has been added to the IMIO header access
library. The new procedure is used to append FITS like HISTORY or
COMMENT cards to the image header.
2.4.6.4 IMPARSE
The calling sequence of the internal IMIO procedure imparse has
changed. Although this procedure is internal to the IMIO interface and
is not supposed to be used within applications, there may be
applications which make use of this procedure. Any such applications
must be modified to reflect the new procedure calling sequence or
runtime problems are guaranteed.
2.4.7 Null string environment variables
The semantics of the VOS procedures envgets and envfind have
changed. This could affect existing programs and any programs which
use these functions should be checked to make certain they will still
work properly.
These procedures, used to fetch the string values of environment
variables, return the length of the output string as the function value.
Formerly, a value of zero would be returned both when the named
variable existed but had a null string value, and when the variable was
not found. This made it impossible to discriminate between the case of
a variable not being defined, and one which is defined but has a null
value. The routines have been changed to return the value ERR (a
negative integer) if the variable is not defined. Programs which do not
wish to make the distinction between undefined and null-valued should
check for a function value less than or equal to zero. Programs which
check for a function value equal to zero will fail if the named
variable is not defined.
2.4.8 Environment substitution in filenames
The VOS filename mapping code has been modified to add support a
powerful new environment substitution syntax. Previously the only
environment substitution mechanism available was the logical directory
facility, which could only be used to parameterize the directory
field. The new facility may be used to perform environment
substitution anywhere in a filename. This is used in IRAF version 2.8
to implement multiple architecture support, e.g.,
cl> set bin = "iraf$bin(arch)/"
is how the core system BIN is defined in V2.8 IRAF. The syntax
"(arch)" tells the filename mapping code to substitute the string value
of the environment variable arch, if defined. If the variable is not
defined the null string is substituted. Hence, if the host system does
not implement multiple architecture support and arch is not defined,
BIN is defined as "iraf$bin/", which is the backwards compatible
definition. If arch is defined as, e.g., ".vax", then BIN is defined
as "iraf$bin.vax/". The new feature allows use of a single environment
variable to define the architecture, not only to form filenames, but
for other purposes as well, e.g., to generate compiler switches or to
control library searching in mkpkg.
2.4.9 Nonblocking raw terminal i/o
The VOS file i/o interfaces have been modified to add support for
nonblocking terminal i/o. This facility makes it possible to, in
effect, "poll" the terminal to see if there is any input waiting to be
read, to allow interaction without having a program block if the user
has not typed anything.
The immediate application of this in version 2.8 was the modification
of the stty (set-terminal) facility to implement a time out for the
terminal size query. Formerly, stty would hang up indefinitely when
the terminal type was set to "gterm" but the actual terminal was
something different, causing the screen size query to be ignored.
In the more general case, nonblocking terminal i/o makes possible a new
class of user interface, which is not only interactive, but event
driven. Nonblocking i/o makes it possible for an application to be
continually processing, while checking the terminal occasionally to see
if the user has input any commands.
At present, nonblocking i/o is always used in conjunction with raw mode
input from a terminal. A new flag F_NDELAY, defined in <fset.h>, is
used to enable or disable nonblocking i/o. For example,
call fseti (fd, F_RAW, YES)
enables conventional blocking, single character raw mode reads, and
call fseti (fd, F_RAW, YES + F_NDELAY)
enables nonblocking raw mode input (YES, NO, and F_NDELAY are bit
flags). These modes are mutually exclusive, e.g., the first call may
be issued while nonblocking raw mode is in effect to make the reads
block, and vice versa. A call to fset(fd,F_RAW,NO) disables both raw
mode and nonblocking mode. Once nonblocking raw mode is in effect one
merely reads characters from the terminal in the usual way, using
getc. EOF is returned if a read is performed when no data is available
for input, otherwise the next character is returned from the input
queue. Further information on nonblocking i/o is given in the system
notes file.
2.4.10 Function call tables (ZFUNC)
IRAF has always had the ability to compute the integer valued
address of a procedure, store that address in a table, and later use
the address as an argument to one of the zcall kernel primitives to
call the addressed procedure. This facility has been extended by the
addition of a set of zfunc primitives, used to call integer valued
functions. Only integer valued functions are supported (in order to
simplify the kernel support required), but in the systems oriented
applications where procedure call tables are used, this is unlikely to
be a serious limitation.
2.5 Sun/IRAF specific revisions
2.5.1 IEEE exception handling
By default the IEEE hardware is now configured, on all Sun systems,
with the invalid, overflow, and divide by zero IEEE exceptions enabled,
and with the default rounding direction and precision modes (nearest,
extended) in effect. This configuration should ensure that all
questionable floating point operations are detected, and that no IEEE
"funny numbers" (NaN, Inf, etc.) get into the data. These values,
since they don't behave like ordinary numbers, can cause programs to
misbehave, e.g., go into an infinite loop. In Sun/IRAF V2.8, if a
computation results in an IEEE funny number being generated, an
exception abort will result. The most common example is divide by zero.
The IRAF/IEEE interface offers a special debug feature that may be of
interest to programmers developing numerically sensitive software. If
desired, one can change the default rounding direction and precision
(e.g., to test the numerical stability of applications) by using the
debugger to set a nonzero value of the variable debug_ieee before
running an executable. The procedure for doing this is documented in
the system notes file.
2.5.2 IMTOOL enhancements
A number of enhancements and bug fixes have been made for V2.8 to
the SunView based IMTOOL image display server. The most notable
changes are summarized here; refer to the IMTOOL manual page for a more
complete description of the new features.
2.5.2.1 Software ZOOM added
IMTOOL, which has had for some time the ability to pan about on a
large image, now has the ability to zoom as well. Both pan and zoom
are controlled very conveniently by the middle mouse button: place the
mouse on an object and tape the middle button once to pan the object to
the center of the display window; tap it again and the image will be
zoomed. Zoom, currently implemented by writing directly into the
hardware frame buffer, is very fast, almost as fast as a normal
unzoomed window refresh. The default set of zoom factors is 1,2,4,8
after which the sequence wraps around to 1. The zoom factors are user
configurable via the IMTOOL setup panel; very large zoom factors, e.g.,
x64, are possible. Dezoom (making a large image smaller) is not
currently supported.
2.5.2.2 WCSDIR eliminated
The host level WCSDIR environment variable, and the text file used
to communicate image coordinate (WCS) information between the display
task and the display server, have been eliminated. All WCS information
is now passed via the datastream used to pass commands and data between
the client and the display server. This eliminates the need for users
to have to remember to define WCSDIR in order to get coordinates in
image units, and some subtle process synchronization problems are
eliminated as well.
In a related change, the frame buffer configuration index is no longer
passed in during a frame erase, hence it is no longer necessary to
erase a frame before displaying an image to ensure that a frame buffer
configuration change is passed to the server. The configuration index
is now passed when the WCS information for a frame is set.
2.5.2.3 Graphics colors
IMTOOL now allocates a range of pixel values for use as graphics
overlay colors. Setting a frame buffer pixel to one of these values
causes it to always be displayed with the assigned color. The graphics
color values are not affected by windowing the display. The most
common use of graphics colors with V2.8 IRAF is for drawing graphics
into a displayed frame with the new tvmark task, available in PROTO.
See the IMTOOL manpage for a table listing the color index assignments.
2.5.2.4 New imtoolrc entries
Several new predefined frame buffer configurations have been added
to the default imtoolrc. These include an 128 pixel square frame
buffer (imt128), a 256 pixel square frame buffer (imt256), and a full
screen display with the same aspect ratio as a 35 mm slide (imtfs35).
2.5.2.5 System crash (FIFO) bug fixed
Versions of SunOS through at least 4.0.1 have a bug in the FIFO
driver code which can cause the internal kernel FIFO data buffer to be
deallocated while it is still in use. This will result in a bad kernel
which will eventually panic and reboot the system. This is the cause
of the IMTOOL crash problem which some sites may have experienced.
IMTOOL has been modified to avoid the circumstances (repeated 4096 byte
transfers) which cause the bug to surface. So far as we know, the real
bug (in SunOS) has not yet been fixed, but at least on the NOAO
systems, the frequency of occurrence of the system crashes is greatly
reduced with the new version of IMTOOL which incorporates the
workaround for the SunOS bug.
2.5.2.6 Cursor marking now disabled by default
When the interactive image cursor read facility was first added to
IMTOOL, the default response to each cursor read was to draw a small
white dot at the position of the cursor. This is convenient when
marking a series of objects to make a list, but with the increasing
number of IRAF programs making user of the interactive image cursor, it
has been necessary to change the default to disable automatic marking
of each cursor read. The cursor mark feature is still available as an
option and can be enabled via the setup panel.
2.5.2.7 Ctrl/b may be used for manual blinking
In addition to the list of blink frames and the timed blink feature
IMTOOL has provided for some time, it is now possible to manually cycle
through the blink frames with the <ctrl/b> key. Typing <ctrl/b> while
the mouse is in the image window will cause the display to display the
next blink frame in sequence.
2.5.2.8 F4 key will now toggle setup panel
The F4 function key on the Sun keyboard may now be used to toggle
whether or not the setup panel is displayed. This provides a single
keystroke alternative to calling up the setup panel with the frame menu.
2.6 VMS/IRAF specific revisions
2.6.1 NEWUISDISP added to VMS/IRAF
Nigel Sharp's NEWUISDISP display program, used for image display
under UIS on microvaxes with bitmapped displays, is now available in the
standard VMS/IRAF release, in the directory [IRAF.VMS.UIS].
2.6.2 New INSTALL.COM script
A new INSTALL.COM script (also written by Nigel Sharp) has been
added to VMS/IRAF. This script, run by the system manager to install
selected IRAF executable images, will now automatically check for and
deinstall any old versions of the executables before installing the new
ones.
2.6.3 VMS 4.7/5.0
Testing of the standard V2.8 VMS/IRAF release, which was prepared
on VMS 4.7, on a VMS 5.0 system has thus far not revealed any problems
(NOAO is still running VMS 4.7 as our standard system). Hence it
appears that the standard V2.8 VMS/IRAF will run under VMS 5. It is
likely, however, that any attempt to recompile VMS/IRAF under VMS 5
would cause problems, since we have not yet tried to rebuild IRAF under
VMS 5, and such a major operating system upgrade will often require
changes to the IRAF code. The system may be relinked under VMS 5 if
desired, and this does not appear to cause any problems, but neither
does there appear to be any benefit to be gained from doing so.
2.7 Summary of IRAF System Packages Revisions
o The tasks RFITS and WFITS in the DATAIO package now support the
reading and writing of arbitrary sized data blocks (IRAF version 2.7
and later).
o Several new tasks were added to the IMAGES package. IMCOMBINE (IRAF
version 2.6 and later) provides for the combining of images by a
number of algorithms. The new task CHPIXTYPE (IRAF version 2.7 and
later) changes the pixel types of a list of input images. The task
IMSLICE slices images into images of one less dimension (IRAF
version 2.8). The task IMSTACK has been moved into the IMAGES
package (although it still resides in PROTO as well).
The IMSTATISTICS task has been rewritten and now allows the user to
select which statistical parameters to compute and print (IRAF
version 2.8). The IMRENAME task has been modified to allow "in
place" image renames, used chiefly for moving the pixel files to a
new IMDIR.
Several other tasks in the IMAGES package were modified (IRAF
version 2.8). IMSHIFT was modified to accept a list of shifts from
a file. REGISTER and GEOTRAN were modified to accept a list of
transforms instead of only a single one. IMHISTOGRAM has undergone
extensive revision including support for "box" type plots, support
for linear or log scaling in the y coordinate, as well as support
for antialiasing of the histogram bins.
o All the tasks in the IMAGES.TV package were modified (IRAF version
2.8) so that if a task is used with an unsupported display device a
message is printed to that effect.
o The STTY task in the LANGUAGE package has been improved (IRAF
version 2.6 and later) to better facilitate its "playback" feature.
These changes have been documented in the online help for the
task. This feature is little used by external sites but can be a
very useful instructional aid if users are aware of its capability.
o A new task PVECTOR was added to the PLOT package that allows one to
plot an arbitrary vector in a two dimensional image (IRAF version
2.6 and later).
The task STDPLOT was modified (IRAF version 2.8) so that it uses
the more popular SGI kernel rather than the NSPP (NCAR) kernel
(STDPLOT is now equivalent to the SGIKERN task). A new task
NSPPKERN was added that uses the NSPP kernel.
o Two new tasks were added to the SYSTEM package (IRAF version 2.8).
The task DEVICES simply prints the dev$devices.hlp file as edited
by the site manager listing available devices on the local host or
network. The REFERENCES task is used to search the help database
for all tasks or other help modules pertaining to a given topic,
e.g., references vector will list all tasks that have the string
"vector" in their one line description.
2.8 Glossary of New Tasks in the IRAF System Packages
Task Package Description
chpixtype images Change the pixel type of a list of images
devices system Print information on the locally available devices
imcombine images Combine images pixel-by-pixel using various algorithms
imslice images Slice images into images of lower dimension
imstack images Stack images into a single image of higher dimension
nsppkern plot Plot metacode on a NSPP (NCAR) plotter device
pvector plot Plot an arbitrary vector in a 2D image
references system Find all help database references for a given topic
In addition, there are new image display oriented tasks imexamine,
imedit, and tvmark in the PROTO package in NOAO (used to interactively
examine and edit images, or draw graphics into image display frames).
These really belong in the core system but have been placed in
noao.proto since they are prototype tasks.
3. NOAO Package Revisions
Some of the major revisions to the NOAO packages are listed below.
3.1 Summary of NOAO Packages Revisions
3.1.1 New NOAO Packages
Several new packages have been added to the NOAO suite of packages.
o The APPHOT package is a set of tasks for performing aperture
photometry on uncrowded or moderately crowded stellar fields in
either interactive or batch mode. This package is now installed in
the DIGIPHOT package (IRAF version 2.7 and later). The APPHOT
package was available as an add-on package to IRAF version 2.5 and
later while it was undergoing alpha testing. Many new features
have been added to the package since it first became available
including the new task QPHOT (quick aperture photometry) and
interaction with the image display cursor for supported image
displays (Sun workstation, IIS model 70).
o The CCDRED package provides tools for the easy and efficient
reduction of CCD images. This package has been installed in the
IMRED package (IRAF version 2.6 and later). The CCDRED package was
also available as an add-on to IRAF version 2.5.
A short demonstration of many of the tasks in the CCDRED package is
provided with the DEMO task in the CCDRED.CCDTEST package.
o The IMRED.ECHELLE package has been replaced with a more
sophisticated collection of tasks for reducing echelle type data
(IRAF version 2.7 and later). The new ECHELLE package recognizes a
new image format in which each extracted echelle order becomes a
line in a two dimensional image rather than having a separate one
dimensional spectrum for each order, although this old output
format is still available as an option. Several new tasks exist
for computing and applying a wavelength calibration to the data
using the echelle relationship between the orders (ECIDENTIFY,
ECREIDENTIFY, and ECDISPCOR) as well as for manipulating the new
echelle format (ECSELECT, ECCONTINUUM, and ECBPLOT).
o The IRRED package has been added to the IMRED package. The IRRED
package collects together in one place those tasks used most
frequently by users reducing IR data such as that taken with the IR
imager at KPNO. The IRMOSAIC and IRALIGN tasks were available with
IRAF version 2.6 and later. IRMOSAIC takes an ordered list of
input images and places them on a grid in an output image. IRALIGN
uses this grid and a coordinate list of overlapping objects from
the individual subrasters to produce an aligned output image. The
tasks IRMATCH1D and IRMATCH2D were available with IRAF version 2.7
and later. These tasks are similar to IRALIGN expect that the
intensities of adjacent subrasters can be matched as well. A
script called MOSPROC (IRAF version 2.8) has also been added that
prepares a list of images for a quick look mosaic.
o The MSRED package has been added to the IMRED package. The MSRED
package is a collection of tasks used for reducing multispectral
types of data, e.g. fiber arrays, where the individual spectra are
for different objects. Like the ECHELLE package, it also has its
own multispectral image format (a two dimensional image in which
each line is an extracted spectrum). Several new tasks have been
added to the package for wavelength calibration of multispectral
data.
3.1.2 Modifications to Existing NOAO Packages
o The ASTUTIL package was reorganized (IRAF version 2.6 and later -
see IRAF Newsletter No. 3 for details) and several tasks were added
and/or modified. A new task ASTTIMES computes and prints
astronomical dates and times given a local date and time. A new
task RVCORRECT computes and prints radial velocity corrections for
an observation. The tasks PRECESS and GALACTIC were modified
slightly using different but more accurate algorithms.
The new task SETAIRMASS (IRAF version 2.8) computes the effective
airmass and middle UT of an exposure. This task was also made
available in the TWODSPEC and IMRED packages.
o The two tasks in the IMRED.BIAS package, COLBIAS and LINEBIAS, were
modified slightly (IRAF version 2.7 and later) so that the fitting
parameters for the overscan region can be set by the user as hidden
parameters to the tasks.
o The task COSMICRAYS (from the CCDRED package) was made available in
the IMRED.GENERIC package (IRAF version 2.6 and later).
o A new task called SYNDICO has been added to the IMRED.VTEL package
(IRAF version 2.6 and later). SYNDICO makes glossy prints on the
NOAO Dicomed printer of the synoptic, full disk, magnetograms and
spectroheliograms taken at the vacuum telescope at Kitt Peak.
o Modifications were made to the IMRED.DTOI package. These changes
have been documented in IRAF Newsletter No. 4.
o Three new tasks in the ONEDSPEC package, REFSPECTRA, SEXTRACT, and
SPECPLOT, were made available in the IMRED.COUDE, IMRED.IIDS,
IMRED.IRS, and IMRED.SPECPHOT packages.
o Many new tasks and features have been added to the ONEDSPEC package.
The SENSFUNC task was completely rewritten (IRAF version 2.6 and
later) to allow determination of extinction, display of flux
calibrated spectra, and many new features for displaying and
manipulating the data.
IDENTIFY, REIDENTIFY and DISPCOR were modified (IRAF version 2.6
and later) so that a dispersion solution from IDENTIFY could be
shifted without changing the original shape of the coordinate
function (see IRAF Newsletter No. 3 for details).
A new deblending algorithm was added to SPLOT (IRAF version 2.7 and
later). See the online help for SPLOT as well as the article in
IRAF Newsletter No. 4.
The tasks in the ONEDSPEC.ONEDUTIL package were absorbed into the
ONEDSPEC package (IRAF version 2.7 and later).
The EXTINCT task disappeared with its functionality being taken
over by a rewritten CALIBRATE (IRAF version 2.7 and later).
The COEFS task was moved to the IMRED.IIDS and IMRED.IRS packages
since this is a very instrument specific task (IRAF version 2.7 and
later).
Three new tasks were added to the package. SEXTRACT (IRAF version
2.6 and later) extracts subspectra from one dimensional input
spectra. REFSPECTRA (IRAF version 2.7 and later) takes over part
of the functionality of the old DISPCOR task and allows the user to
define which arc spectra are to be used in the calculation of the
dispersion solution of object spectra. SPECPLOT (IRAF version 2.8)
is a new plotting task that allows the compression of many spectra
to a page (see IRAF Newsletter No. 6).
o Several new tasks have been added to the PROTO package.
Four tasks were added to IRAF version 2.6 and later. BSCALE is a
task that can be used to linearly scale images by the mean,
average, or mode of the image. IRMOSAIC and IRALIGN can be used to
combine many frames into one large image. These three tasks are
also available in the IMRED.IRRED package. MKHISTOGRAM calculates
the histogram of the data in a text file.
Three new tasks were added to IRAF version 2.7 and later. IMSLICE
is a task that slices an image into images of lower dimension.
IRMATCH1D and IRMATCH2D are two tasks that allow combining of many
overlapping images while matching the background intensities in two
different ways.
Three new tasks have been added to IRAF version 2.8 that allow the
user to interact with the image display (for supported display
devices, ie Sun workstation, IIS model 70). IMEXAMINE allows the
user to interactively examine portions of the displayed image.
TVMARK allows the user to mark objects on the image display.
IMEDIT allows the user to interactively edit an image.
o The APEXTRACT package in the TWODSPEC package has ungone several
rounds of modifications, as discussed in the IRAF Newsletters, No.
3 and 4. These changes included improved techniques and additional
options for the extraction of data.
A new task, APSCATTER, has been added to the package (IRAF version
2.8). This task determines and subtracts scattered light from two
dimensional aperture or echelle spectra. The task was also made
available from within the ECHELLE package. This task was discussed
in IRAF Newsletter No. 6.
3.2 Modifications and Additions to Calibration Data
The calibration data used by some of the tasks in the TWODSPEC,
ONEDSPEC, and many of the IMRED packages are kept in a directory called
ONEDSTDS in noao$lib. The current contents of this directory are best
summarized by paging through its README file, e.g.,
cl> page noao$lib/onedstds/README
Two additional line lists (used by IDENTIFY) have been added to this
directory (IRAF version 2.8). These lists, vacidhenear.dat and
vacthorium.dat, are simply the standard .dat files in air wavelengths
converted to vacuum wavelengths. The equation used for the conversion
as well as the appropriate reference in the literature are contained in
the README file.
The thorium.dat file has been updated to contain thorium lines from
3180 Angstroms to 9540 Angstroms (IRAF version 2.6 and later). Please
see the README file for the source.
Two new directories have been added containing flux information for
standard stars (IRAF version 2.6 and later): SPECHAYESCAL and SPEC50CAL.
Both of these lists are from Massey et al., 1988, Ap. J., Vol. 328, p.
315.
3.3 Glossary of New Tasks in the NOAO Packages
Task Package Description
apscatter(1) apextract Fit and subtract scattered light
apselect apphot Extract select fields from apphot output files
asttimes astutil Compute UT, Julian day, epoch, and sidereal time
badpiximage ccdred Create a bad pixel mask image from a bad pixel file
bscale(3) proto Brightness scale images: new = (old-bzero) / bscale
ccdgeometry ccdred Discussion of CCD coordinate/geometry keywords
ccdgroups ccdred Group CCD images into image lists
ccdhedit ccdred CCD image header editor
ccdlist ccdred List CCD processing information
ccdproc ccdred Process CCD images
ccdred ccdred CCD image reduction package
ccdtypes ccdred Description of the CCD image types
center(3) apphot Compute accurate centers for a list of objects
centerpars(3) apphot Edit the centering parameters
combine ccdred Combine CCD images
cosmicrays(4) ccdred Detect and replace cosmic rays
daofind apphot Find stars in an image using the DAO algorithm
darkcombine ccdred Combine and process dark count images
datapars(3) apphot Edit the data dependent parameters
demo ccdtest Run a demonstration of the CCD reduction package
ecbplot echelle Batch plots of echelle spectra
eccontinuum echelle Fit the continuum of echelle spectra
ecdispcor echelle Dispersion correct spectra
ecidentify echelle Identify features in spectrum for dispersion solution
ecreidentify echelle Automatically reidentify features in spectra
ecselect echelle Select and extract apertures from echelle spectra
fitpsf apphot Model the stellar psf with an analytic function
fitsky apphot Compute sky values in a list of regions
fitskypars apphot Edit the sky fitting parameters
flatcombine ccdred Combine and process flat field images
flatfields ccdred Discussion of CCD flat field calibrations
guide ccdred Introductory guide to using the CCDRED package
imedit proto Examine and edit pixels in images
imexamine proto Examine images using image display, graphics, and text
imslice proto Slice images into images of lower dimension
instruments ccdred Instrument specific data files
iralign(3) proto Align the mosaiced image produced by irmosaic
irmatch1d(3) proto Align and intensity match image produced by irmosaic
irmatch2d(3) proto Align and intensity match image produced by irmosaic
irmosaic(3) proto Mosaic an ordered list of images onto a grid
mkfringecor ccdred Make fringe correction images from sky images
mkhistogram proto List or plot the histogram of a data stream
mkillumcor ccdred Make flat field illumination correction images
mkillumflat ccdred Make illumination corrected flat fields
mkimage ccdtest Make or modify an image with simple values
mkskycor ccdred Make sky illumination correction images
mkskyflat ccdred Make sky corrected flat field images
mosproc irred Prepare images for quick look mosaicing
msdispcor msred Dispersion correct spectra
msreidentify msred Reidentify features from/to a multispec image
msselect msred Select and extract apertures from spectra
observe ccdtest Create an artificial CCD observation
phot apphot Measure magnitudes for a list of stars
photpars apphot Edit the photometry parameters
polymark apphot Create polygon lists for polyphot
polypars apphot Edit the polyphot parameters
polyphot apphot Measure magnitudes inside a list of polygonal regions
qphot apphot Measure quick magnitudes for a list of stars
radprof apphot Compute the stellar radial profile of a list of stars
refspectra(5) onedspec Assign wavelength reference spectra to other spectra
rvcorrect astutil Compute radial velocity corrections
setairmass(6) astutil Compute effective airmass for an exposure
setinstrument ccdred Set instrument parameters
sextract(2) onedspec Extract subspectra from dispersion corrected spectra
specplot(5) onedspec Stack and plot multiple spectra
subsection ccdtest Create an artificial subsection CCD observation
subsets ccdred Description of CCD subsets
syndico vtel Make dicomed print of daily grams 18 cm across
tvmark proto Mark objects on the image display
wphot apphot Measure magnitudes for a list of stars with weighting
zerocombine ccdred Combine and process zero level images
Notes:
(1) Tasks also in echelle and msred packages.
(2) Tasks also in coude, iids, irs, and specphot packages.
(3) Tasks also in irred package.
(4) Tasks also in generic package.
(5) Tasks also in coude, echelle, iids, irs, msred, and specphot
packages.
(6) Tasks also in imred and twodspec packages.
NEWS (Jul86) Ancient News NEWS (Jul86)
30 July 86 IMIO Modifications
-------------------------------------------------------------------------------
The new IMIO interface, used by all IRAF tasks to access bulk image data
on disk, is now capabable of operating upon both the old IRAF format (OIF)
images as well as STScI SDAS/GEIS format images. The default image type is
the OIF format. Any existing OIF format images are readable by the new system
without change. Although IRAF can read either OIF or STF format images,
SDAS can read only STF format images, so serious SDAS users should configure
IRAF to work with STF format images as the default. All other users should
continue to use the OIF format images as image access is more efficient,
and the IRAF software has been extensively tested only for OIF format images.
Users of the OIF format should note that they can read a VMS BACKUP tape
(or UNIX TAR tape) containing STF format images directly to disk and immediately
access the images, without changing the default configuration of IRAF.
The image type is specified by a filename extension; extensions for the
OIF format images are new in this release of the system. The recognized
extensions are shown below.
image type header file extensions
OIF .imh
STF .??h (? stands for any character)
In most cases when operating upon an image with an IRAF task the extension
can be omitted. The most important exception occurs in image templates.
THE PATTERN GIVEN IN AN IMAGE TEMPLATE MUST FULLY MATCH THE IMAGE HEADER
FILE NAMES AS THEY APPEAR IN A DIRECTORY LISTING, i.e., the header filename
extension must be matched by the image template. The image type extension
must also be specified to access an image which is not of the default image
type (OIF or STF), or when changing the type of an image. For example,
cl> imcopy dev$pix.imh pix.hhh
will make an STF format copy in the current directory of the OIF format image
"dev$pix".
The default image type is controlled by the new environment variable IMTYPE.
The string value of IMTYPE is the desired image header file extension, e.g.,
"imh" (omit the dot) for an OIF format image. If IMTYPE is not defined the
default image type is "imh". For STF format images there are many possible
image header extensions, and IMTYPE specifies the default type IMIO should
look for when the extension is not explicitly given, or the default extension
to use when a completely new image is to be created. When making a new copy
of some existing image, IMIO will make a new image of the same type as the
existing input image unless an extension is given to force some other type
of image to be created.
environment variable description
IMTYPE the default image type (extension)
IMDIR pixel storage directory for OIF images
The IMDIR environment variable defines the directory in which the pixel file
is to be placed when creating a new OIF format image. In V2.2 and older
versions of IRAF, IMDIR could only be a logical or machine dependent directory
pathname. The new system also recognizes the special "builtin" logical
directory name "HDR$" (must be upper case). If the value of IMDIR is "HDR$",
IMIO will create the pixel file in the SAME directory as the header file,
rather than in some other directory. It is also possible to place the pixel
file in some subdirectory of the header directory, e.g., "HDR$pixels/" will
cause the pixel files to go into the subdirectory "pixels".
set imdir = "/tmp/user/" # pixel files -> specified directory
set imdir = "HDR$" # pixel files -> header file directory
set imdir = "HDR$pixels/" # pixel files -> subdirectory of HDR$
The root filename of OIF pixel files is now the same as that of the header
file, rather than a computer generated name. The filename extension of an
OIF pixel file is ".pix".
The STF format images support group format, a format very similar to that
used for group format FITS tapes. IRAF users accessing an STF group format
image can specify the `group' (subimage) to be accessed by appending a
subscript to the image name, e.g.,
cl> imstat pix.aah[3] # access group 3
or
cl> imstat pix.aah[3][*,100] # line 100 of group 3
A new group format image can be created in a similar fashion, specifing the
number of groups to preallocate space for, e.g.,
cl> imcopy dev$pix testimage[1/10]
would create a new group format image "testimage" with space for 10 groups
(subimages), and initialize group 1. The remaining groups would then be
initialized by specifying only the group subscript "[N]". Note that all
groups must be the same size, new groups cannot be allocated, old groups
cannot be deleted, the set of possible group parameters is fixed at creation
time, and all groups share the same FITS header.
15 June 86 System Tasks
-------------------------------------------------------------------------------
The DIRECTORY, HELP, and PAGE system tasks have all undergone important
revisions. The directory task has been completely rewritten and now handles
directory pathnames, etc., correctly, and in addition it has a more concise
syntax. The HELP and PAGE tasks have been modified to replace the old "more"
boolean query mechanism (used to pause between pages of output) with a nicer
keystroke driven mechanism which offers more options and is faster. Read the
manual pages for additional details. The old parameter files should be
unlearned.
28 April 86 Package Reorganization
-------------------------------------------------------------------------------
The basic package structure of IRAF has been modified to make a distinction
between the system packages and the NOAO optical astronomy packages. The basic
directory structure of the system was also changed to reflect the new package
organization, and the printed documentation will be changed as well when time
permits. These changes were necessary to better isolate science software such
as the NOAO and STScI/SDAS packages from the system software, for a more logical
package structure, and to make it easier to install and maintain the science
packages.
The new root menu of IRAF is as follows:
dataio images lists noao sdas system
dbms language local plot softools utilities
The NOAO menu is as follows:
artdata astutil focas mtlocal proto twodspec
astrometry digiphot imred onedspec surfphot
Three new packages were added and three old packages were extensively revised.
The NOAO mountain tape readers were moved from the DATAIO package into the new
MTLOCAL package. The astronomically oriented utility tasks were moved from
the UTILITIES package to the new ASTUTIL package. The old LOCAL package was
renamed PROTO, and a new LOCAL package was added in the directory
"iraf$local/tasks".
The concept of the new PROTO package is appropriate for what the old LOCAL
package was used for, i.e., prototype, temporary, or contributed tasks which
are part of the NOAO package and which are exported with the system, but which
are expected to eventually disappear or be replaced by planned system
facilities. The new LOCAL package is a place to put tasks of strictly local
interest, or tasks which are not portable, e.g., foreign tasks and the Peritek
package. The LOCAL package should be particularly useful for outside sites
as it gives them a place to put locally added tasks which will not be affected
by future updates of the system. Also, the framework (mkpkg, local.cl, etc.)
is all set up, making it easier for outside sites to add their own software
without having to figure out how to set up an IRAF package.
20 Feb 85 Recovery from Interrupts
-------------------------------------------------------------------------------
Tests today (unfortunately only shortly before the first IRAF release)
have shown that VMS/IRAF has higher failure rate than expected for recovery
from a ctrl/c interrupt of a running subprocess, especially if the process
is actively doing i/o. It is probably much safer to interrupt a compute
bound process than a process which is doing heavy i/o, e.g., reading a tape
or doing many file opens, or probably large numbers of any type of system
calls. The failure rate for i/o intensive processes was as high as 1 failure
to recover in 4 interrupts in some of the cases tested. Testing of UNIX/IRAF
turned up some of the same problems, but the failure rate was considerably
lower, probably because the kernel and i/o system are so much simpler.
Interrupting a process at the wrong time can cause many problems, e.g.,
[1] subprocess memory can be corrupted, resulting in unpredictable behaviour
and possibly deadlock when the CL later tries to talk the the process,
[2] a VMS forced exit of the process can occur, e.g., when trying to deliver
an AST to an invalid address, [3] corruption of the CL/subprocess communications
protocol can occur, resulting in deadlock or the loss of sync (the output of
a task will come out when the next command is entered), and various other
problems as well.
Tests on the old version of VMS/IRAF, which dates back to last fall, show
that the problem has existed all along. The fact that we did not fully
appreciate the problem until now indicates that the problem is not a serious
hindrance provided one is conservative about the use of interrupts. It also
appears that this will not be an easy problem to solve, hence it is likely
to be with us for a while. Probably nothing at all will be done about it
for some months since other projects are likely to have a higher priority
if this problem is understood and can be worked around.
In summary, try to minimize the use of interrupts, and in particular, avoid
interrupting processes which are doing heavy i/o. When in doubt, type
"flpr" after interrupting a process to force it to be restarted. If a
subprocess becomes hung it may be necessary to restart the CL itself.
20 Feb 85 Process connect failure during ":.snap" in cursor mode
----------------------------------------------------------------------------
We are still ocasionally having problems when trying to spawn a graphics
subkernel in response to a ":.snap" command in cursor mode. This happens
infrequently (which is why it is so hard to find the bug), and will usually
go away after exiting and reentering cursor mode and trying again. It might
also help to do a ":.gflush" while in cursor mode.
|