/
sun253.xml
20708 lines (18344 loc) · 818 KB
/
sun253.xml
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
<?xml version='1.0'?>
<!DOCTYPE sun SYSTEM "docs.dtd" [
<!-- Import entity definitions for icons used by the TOPCAT application. -->
<!ENTITY % image-defs SYSTEM "image.defs">
%image-defs;
<!-- Define automatically generated text entities. -->
<!ENTITY general.runtime.method.docs SYSTEM "general-javadocs.xml">
<!ENTITY activation.runtime.method.docs SYSTEM "activation-javadocs.xml">
<!ENTITY general.runtime.class.docs SYSTEM "general-classes-javadocs.xml">
<!ENTITY activation.runtime.class.docs SYSTEM
"activation-classes-javadocs.xml">
<!ENTITY topcat.usage SYSTEM "topcat.usage">
<!-- Import entity definitions from other packages including customisation -->
<!ENTITY gbin.stil.intro SYSTEM "gbin-stil-intro.xdoc">
<!ENTITY gbin.stil.appexample SYSTEM "gbin-stil-appexample.xdoc">
<!ENTITY gbin.stil.notes SYSTEM "gbin-stil-notes.xdoc">
<!ENTITY gbin-package-name 'TOPCAT'>
<!ENTITY gbin-package-cmdline 'topcat'>
<!ENTITY gbin-package-classpath 'topcat-full.jar'>
<!ENTITY gbin-package-mainclass 'uk.ac.starlink.topcat.Driver'>
<!-- Define some character constants. -->
<!ENTITY column.id.char '$'>
<!ENTITY subset.id.char '_'>
<!ENTITY ucd.prefix 'ucd$'>
<!ENTITY utype.prefix 'utype$'>
<!ENTITY param.prefix 'param$'>
<!-- Define illustrations -->
<!-- Note screenshots have mostly been taken using J2SE1.4, which uses
! a different visual theme from the 1.5 default.
! Use -Dswing.metalTheme=steel when taking screenshots for visual
! consistency. -->
<!ENTITY figs '../figures/'>
<!ENTITY FIG.ControlWindow '&figs;ControlWindow.gif'>
<!ENTITY FIG.ColumnInfoWindow '&figs;ColumnInfoWindow.gif'>
<!ENTITY FIG.JTable '&figs;JTable.gif'>
<!ENTITY FIG.ParameterWindow '&figs;ParameterWindow.gif'>
<!ENTITY FIG.TableViewerWindow '&figs;TableViewerWindow.gif'>
<!ENTITY FIG.SubsetWindow '&figs;SubsetWindow.gif'>
<!ENTITY FIG.StatsWindow '&figs;StatsWindow.gif'>
<!ENTITY FIG.LoadWindow '&figs;LoadWindow.gif'>
<!ENTITY FIG.FilestoreTableLoadDialog '&figs;FilestoreTableLoadDialog.gif'>
<!ENTITY FIG.TreeTableLoadDialog '&figs;TreeTableLoadDialog.gif'>
<!ENTITY FIG.SQLTableLoadDialog '&figs;SQLTableLoadDialog.gif'>
<!ENTITY FIG.ConeSearchDialog '&figs;ConeSearchDialog.gif'>
<!ENTITY FIG.GavoTableLoadDialog '&figs;GavoTableLoadDialog.gif'>
<!ENTITY FIG.SaveQueryWindow '&figs;SaveQueryWindow.gif'>
<!ENTITY FIG.FilestoreTableSaveDialog '&figs;FilestoreTableSaveDialog.gif'>
<!ENTITY FIG.SQLWriteDialog '&figs;SQLWriteDialog.gif'>
<!ENTITY FIG.ConcatWindow '&figs;ConcatWindow.gif'>
<!ENTITY FIG.MatchWindow '&figs;MatchWindow.gif'>
<!ENTITY FIG.MatchWindow1 '&figs;MatchWindow1.gif'>
<!ENTITY FIG.MatchWindowN '&figs;MatchWindowN.gif'>
<!ENTITY FIG.ActivationQueryWindow '&figs;ActivationQueryWindow.gif'>
<!ENTITY FIG.SoG '&figs;SoG.gif'>
<!ENTITY FIG.ImageWindow '&figs;ImageWindow.gif'>
<!ENTITY FIG.Splat '&figs;Splat.gif'>
<!ENTITY FIG.HelpWindow '&figs;HelpWindow.gif'>
<!ENTITY FIG.ParameterQueryWindow '&figs;ParameterQueryWindow.gif'>
<!ENTITY FIG.SyntheticColumnQueryWindow
'&figs;SyntheticColumnQueryWindow.gif'>
<!ENTITY FIG.SkyColumnQueryWindow '&figs;SkyColumnQueryWindow.gif'>
<!ENTITY FIG.SyntheticSubsetQueryWindow
'&figs;SyntheticSubsetQueryWindow.gif'>
<!ENTITY FIG.MethodWindow '&figs;MethodWindow.gif'>
<!ENTITY FIG.HtmlWindow '&figs;HtmlWindow.gif'>
<!ENTITY FIG.LogWindow '&figs;LogWindow.gif'>
<!ENTITY FIG.PointSelector '&figs;PointSelector.gif'>
<!ENTITY FIG.AxisWindow '&figs;AxisWindow.gif'>
<!ENTITY FIG.HistogramWindow '&figs;HistogramWindow.gif'>
<!ENTITY FIG.PlotWindow '&figs;PlotWindow.gif'>
<!ENTITY FIG.PlotWindow_blob '&figs;PlotWindow_blob.gif'>
<!ENTITY FIG.Cartesian3DWindow '&figs;Cartesian3DWindow.gif'>
<!ENTITY FIG.SphereWindow '&figs;SphereWindow.gif'>
<!ENTITY FIG.DensityWindow '&figs;DensityWindow.gif'>
<!ENTITY FIG.LinesWindow '&figs;LinesWindow.gif'>
<!ENTITY FIG.MarkStyleEditor '&figs;MarkStyleEditor.gif'>
<!ENTITY FIG.MarkStyleEditorNoLines '&figs;MarkStyleEditorNoLines.gif'>
<!ENTITY FIG.BarStyleEditor '&figs;BarStyleEditor.gif'>
<!ENTITY FIG.DensityStyleEditor '&figs;DensityStyleEditor.gif'>
<!ENTITY FIG.LinesStyleEditor '&figs;LinesStyleEditor.gif'>
<!ENTITY FIG.Cartesian3DWindow_aux '&figs;Cartesian3DWindow_aux.gif'>
<!ENTITY FIG.PlotWindow_err '&figs;PlotWindow_err.gif'>
<!ENTITY FIG.SphereWindow_labels '&figs;SphereWindow_labels.gif'>
<!ENTITY FIG.sampPanel '&figs;sampPanel.gif'>
<!ENTITY FIG.SampWindow_clients '&figs;SampWindow_clients.gif'>
<!ENTITY FIG.SampWindow_msgs '&figs;SampWindow_msgs.gif'>
<!ENTITY FIG.SiapTableLoadDialog '&figs;SiapTableLoadDialog.gif'>
<!ENTITY FIG.SsapTableLoadDialog '&figs;SsapTableLoadDialog.gif'>
<!ENTITY FIG.TapTableLoadDialog '&figs;TapTableLoadDialog.gif'>
<!ENTITY FIG.TapTableLoadDialog_service
'&figs;TapTableLoadDialog_service.gif'>
<!ENTITY FIG.TapTableLoadDialog_query '&figs;TapTableLoadDialog_query.gif'>
<!ENTITY FIG.TapTableLoadDialog_jobs '&figs;TapTableLoadDialog_jobs.gif'>
<!ENTITY FIG.TapTableLoadDialog_resume '&figs;TapTableLoadDialog_resume.gif'>
<!ENTITY FIG.columnSelector '&figs;columnSelector.gif'>
<!ENTITY FIG.RegistryPanel '&figs;RegistryPanel.gif'>
<!ENTITY FIG.DalTableLoadDialog '&figs;DalTableLoadDialog.gif'>
<!ENTITY FIG.DalMultiPanel '&figs;DalMultiPanel.gif'>
<!ENTITY FIG.ConeMultiWindow '&figs;ConeMultiWindow.gif'>
<!ENTITY FIG.SiaMultiWindow '&figs;SiaMultiWindow.gif'>
<!ENTITY FIG.SsaMultiWindow '&figs;SsaMultiWindow.gif'>
<!ENTITY FIG.VizierTableLoadDialog '&figs;VizierTableLoadDialog.gif'>
<!ENTITY FIG.MemoryMonitor '&figs;MemoryMonitor.gif'>
<!ENTITY FIG.ParameterPanel '&figs;ParameterPanel.gif'>
<!ENTITY FIG.TupleSelector '&figs;TupleSelector.gif'>
<!ENTITY FIG.IntraMatchSpec '&figs;IntraMatchSpec.gif'>
<!ENTITY FIG.PairMatchSpec '&figs;PairMatchSpec.gif'>
<!ENTITY FIG.InterMatchSpec '&figs;InterMatchSpec.gif'>
<!ENTITY FIG.BaSTITableLoadDialog '&figs;BaSTITableLoadDialog.gif'>
<!ENTITY FIG.StackPlotWindow '&figs;StackPlotWindow.gif'>
<!ENTITY FIG.StackPlotWindow_float '&figs;StackPlotWindow_float.gif'>
<!ENTITY FIG.NavigationHelpPanel '&figs;NavigationHelpPanel.gif'>
<!ENTITY FIG.StackPlotWindow_blob '&figs;StackPlotWindow_blob.gif'>
<!ENTITY FIG.ControlStack_fixed '&figs;ControlStack_fixed.gif'>
<!ENTITY FIG.form-style '&figs;form-style.gif'>
<!ENTITY FIG.PlotExporter '&figs;PlotExporter.gif'>
<!ENTITY FIG.LegendControl_style '&figs;LegendControl_style.gif'>
<!ENTITY FIG.LegendControl_position '&figs;LegendControl_position.gif'>
<!ENTITY FIG.ShaderControl_map '&figs;ShaderControl_map.gif'>
<!ENTITY FIG.ShaderControl_ramp '&figs;ShaderControl_ramp.gif'>
<!ENTITY FIG.ShaderControl_range '&figs;ShaderControl_range.gif'>
<!ENTITY FIG.FunctionLayerControl '&figs;FunctionLayerControl.gif'>
<!ENTITY FIG.FunctionLayerControl_function
'&figs;FunctionLayerControl_function.gif'>
<!ENTITY FIG.FunctionLayerControl_style
'&figs;FunctionLayerControl_style.gif'>
<!ENTITY FIG.FunctionLayerControl_label
'&figs;FunctionLayerControl_label.gif'>
<!ENTITY FIG.SpectrogramLayerControl '&figs;SpectrogramLayerControl.gif'>
<!ENTITY FIG.SpectrogramLayerControl_data
'&figs;SpectrogramLayerControl_data.gif'>
<!ENTITY FIG.SpectrogramLayerControl_style
'&figs;SpectrogramLayerControl_style.gif'>
<!ENTITY FIG.GangLayerControl_position '&figs;GangLayerControl_position.gif'>
<!ENTITY FIG.GangLayerControl_subsets '&figs;GangLayerControl_subsets.gif'>
<!ENTITY FIG.GangLayerControl_form '&figs;GangLayerControl_form.gif'>
<!ENTITY FIG.GangLayerControl_pair_position
'&figs;GangLayerControl_pair_position.gif'>
<!ENTITY FIG.GangLayerControl_pair_subsets
'&figs;GangLayerControl_pair_subsets.gif'>
<!ENTITY FIG.GangLayerControl_pair_form
'&figs;GangLayerControl_pair_form.gif'>
<!ENTITY FIG.HistogramLayerControl_position
'&figs;HistogramLayerControl_position.gif'>
<!ENTITY FIG.HistogramLayerControl_subsets
'&figs;HistogramLayerControl_subsets.gif'>
<!ENTITY FIG.HistogramLayerControl_form
'&figs;HistogramLayerControl_form.gif'>
<!ENTITY FIG.mode_flat '&figs;mode_flat.gif'>
<!ENTITY FIG.mode_translucent '&figs;mode_translucent.gif'>
<!ENTITY FIG.mode_transparent '&figs;mode_transparent.gif'>
<!ENTITY FIG.mode_auto '&figs;mode_auto.gif'>
<!ENTITY FIG.mode_density '&figs;mode_density.gif'>
<!ENTITY FIG.mode_aux '&figs;mode_aux.gif'>
<!ENTITY FIG.form_mark '&figs;form_mark.gif'>
<!ENTITY FIG.form_size '&figs;form_size.gif'>
<!ENTITY FIG.form_vector '&figs;form_vector.gif'>
<!ENTITY FIG.form_error '&figs;form_error.gif'>
<!ENTITY FIG.form_ellipse '&figs;form_ellipse.gif'>
<!ENTITY FIG.form_line '&figs;form_line.gif'>
<!ENTITY FIG.form_linearfit '&figs;form_linearfit.gif'>
<!ENTITY FIG.form_label '&figs;form_label.gif'>
<!ENTITY FIG.form_contour '&figs;form_contour.gif'>
<!ENTITY FIG.form_marks2 '&figs;form_marks2.gif'>
<!ENTITY FIG.form_link2 '&figs;form_link2.gif'>
<!ENTITY FIG.font_tab '&figs;font_tab.gif'>
<!ENTITY FIG.size_tab_insets '&figs;size_tab_insets.gif'>
<!ENTITY FIG.size_tab_noinsets '&figs;size_tab_noinsets.gif'>
<!ENTITY FIG.ConfigControl_histobars '&figs;ConfigControl_histobars.gif'>
<!ENTITY FIG.PlaneAxisControl_coords '&figs;PlaneAxisControl_coords.gif'>
<!ENTITY FIG.PlaneAxisControl_navigation
'&figs;PlaneAxisControl_navigation.gif'>
<!ENTITY FIG.PlaneAxisControl_range '&figs;PlaneAxisControl_range.gif'>
<!ENTITY FIG.PlaneAxisControl_grid '&figs;PlaneAxisControl_grid.gif'>
<!ENTITY FIG.PlaneAxisControl_labels '&figs;PlaneAxisControl_labels.gif'>
<!ENTITY FIG.SkyAxisControl_projection '&figs;SkyAxisControl_projection.gif'>
<!ENTITY FIG.SkyAxisControl_navigation '&figs;SkyAxisControl_navigation.gif'>
<!ENTITY FIG.SkyAxisControl_fov '&figs;SkyAxisControl_fov.gif'>
<!ENTITY FIG.SkyAxisControl_grid '&figs;SkyAxisControl_grid.gif'>
<!ENTITY FIG.CubeAxisControl_coords '&figs;CubeAxisControl_coords.gif'>
<!ENTITY FIG.CubeAxisControl_navigation
'&figs;CubeAxisControl_navigation.gif'>
<!ENTITY FIG.CubeAxisControl_range '&figs;CubeAxisControl_range.gif'>
<!ENTITY FIG.CubeAxisControl_view '&figs;CubeAxisControl_view.gif'>
<!ENTITY FIG.CubeAxisControl_grid '&figs;CubeAxisControl_grid.gif'>
<!ENTITY FIG.CubeAxisControl_labels '&figs;CubeAxisControl_labels.gif'>
<!ENTITY FIG.SphereAxisControl_navigation
'&figs;SphereAxisControl_navigation.gif'>
<!ENTITY FIG.SphereAxisControl_range '&figs;SphereAxisControl_range.gif'>
<!ENTITY FIG.SphereAxisControl_view '&figs;SphereAxisControl_view.gif'>
<!ENTITY FIG.SphereAxisControl_grid '&figs;SphereAxisControl_grid.gif'>
<!ENTITY FIG.TimeAxisControl_coords '&figs;TimeAxisControl_coords.gif'>
<!ENTITY FIG.TimeAxisControl_navigation
'&figs;TimeAxisControl_navigation.gif'>
<!ENTITY FIG.TimeAxisControl_range '&figs;TimeAxisControl_range.gif'>
<!ENTITY FIG.TimeAxisControl_grid '&figs;TimeAxisControl_grid.gif'>
<!ENTITY FIG.TimeAxisControl_labels '&figs;TimeAxisControl_labels.gif'>
<!ENTITY FIG.HistogramPlotWindow '&figs;HistogramPlotWindow.gif'>
<!ENTITY FIG.PlanePlotWindow '&figs;PlanePlotWindow.gif'>
<!ENTITY FIG.SkyPlotWindow '&figs;SkyPlotWindow.gif'>
<!ENTITY FIG.CubePlotWindow '&figs;CubePlotWindow.gif'>
<!ENTITY FIG.SpherePlotWindow '&figs;SpherePlotWindow.gif'>
<!ENTITY FIG.TimePlotWindow '&figs;TimePlotWindow.gif'>
<!ENTITY FIG.plotmatch_dialog '&figs;plotmatch_dialog.gif'>
<!ENTITY FIG.SkyPlotWindow_plotmatch '&figs;SkyPlotWindow_plotmatch.gif'>
<!ENTITY FIG.CdsUploadMatchWindow '&figs;CdsUploadMatchWindow.gif'>
<!-- Define external URLs. -->
<!ENTITY URL.VOTABLE "http://www.ivoa.net/Documents/latest/VOT.html">
<!ENTITY URL.J2SE_DOCS "http://java.sun.com/j2se/1.5.0/docs/">
<!-- Plot2 control references. -->
<!ENTITY CONTROL.single
'&IMG.PLOT_DATA;
<ref id="GangLayerControl_single">Position Layer Control</ref>'>
<!ENTITY CONTROL.pair
'&IMG.PLOT_PAIR;
<ref id="GangLayerControl_pair">Pair Layer Control</ref>'>
<!ENTITY CONTROL.function
'&IMG.PLOT_FUNCTION;
<ref id="FunctionLayerControl">Function Layer Control</ref>'>
<!ENTITY CONTROL.histogram
'&IMG.PLOT_HISTO;
<ref id="HistogramLayerControl">Histogram Layer Control</ref>'>
<!ENTITY CONTROL.spectrogram
'&IMG.PLOT_SPECTRO;
<ref id="SpectrogramLayerControl">Spectrogram Layer Control</ref>'>
<!ENTITY FORM.mark '&IMG.FORM_MARK; <ref id="form-mark">Mark</ref>'>
<!ENTITY FORM.size '&IMG.FORM_SIZE; <ref id="form-size">Size</ref>'>
<!ENTITY FORM.vector '&IMG.FORM_VECTOR; <ref id="form-vector">Vector</ref>'>
<!ENTITY FORM.error '&IMG.FORM_ERROR; <ref id="form-error">Error Bars</ref>'>
<!ENTITY FORM.ellipse '&IMG.FORM_ELLIPSE;
<ref id="form-ellipse">Ellipse</ref>'>
<!ENTITY FORM.line '&IMG.PLOT_LINE; <ref id="form-line">Line</ref>'>
<!ENTITY FORM.linearfit '&IMG.FORM_LINEARFIT;
<ref id="form-linearfit">Linear Fit</ref>'>
<!ENTITY FORM.label '&IMG.PLOT_LABEL; <ref id="form-label">Text Label</ref>'>
<!ENTITY FORM.contour '&IMG.PLOT_CONTOUR;
<ref id="form-contour">Contour</ref>'>
<!ENTITY FORM.marks2 '&IMG.FORM_MARKS2; <ref id="form-marks2">Marks</ref>'>
<!ENTITY FORM.link2 '&IMG.FORM_LINK2; <ref id="form-link2">Link</ref>'>
<!ENTITY GESTURE.DRAG1 '&IMG.DRAG1; Left drag'>
<!ENTITY GESTURE.DRAG2 '&IMG.DRAG2; Center drag (SHIFT-drag)'>
<!ENTITY GESTURE.DRAG3 '&IMG.DRAG3; Right drag (CTRL-drag)'>
<!ENTITY GESTURE.CLICK1 '&IMG.CLICK1; Left click'>
<!ENTITY GESTURE.CLICK2 '&IMG.CLICK2; Center click (SHIFT-click)'>
<!ENTITY GESTURE.CLICK3 '&IMG.CLICK3; Right click (CTRL-click)'>
<!ENTITY GESTURE.WHEEL '&IMG.MOUSE_WHEEL; Wheel'>
]>
<sun>
<docinfo>
<title>TOPCAT - Tool for OPerations on Catalogues And Tables</title>
<authorlist>
<author id="mbt"
email="m.b.taylor@bristol.ac.uk"
webpage="http://www.star.bristol.ac.uk/~mbt/"
affiliation="University of Bristol"
>Mark Taylor</author>
</authorlist>
<docnumber>253</docnumber>
<docdate>13 November 2014</docdate>
<contactlist>
<contact>TOPCAT web page:
<webref url="http://www.starlink.ac.uk/topcat/"/></contact>
<contact>Author email:
<webref url="mailto:m.b.taylor@bristol.ac.uk"
>m.b.taylor@bristol.ac.uk</webref></contact>
<contact>Mailing list:
<webref url="mailto:topcat-user@bristol.ac.uk"
>topcat-user@bristol.ac.uk</webref></contact>
</contactlist>
</docinfo>
<!-- ............................................................... -->
<docbody>
<abstract>
<px>TOPCAT is an interactive graphical viewer and editor for tabular data.
It has been designed for use with astronomical tables such as object
catalogues, but is not restricted to astronomical applications.
It understands a number of different astronomically important formats,
and more formats can be added.
It is designed to cope well with large tables;
a million rows by a hundred columns should not present a problem
even with modest memory and CPU resources.
</px>
<px>It offers a variety of ways to view and analyse the data,
including a browser for the cell data themselves,
viewers for information about table and column metadata,
tools for joining tables using flexible matching algorithms,
and extensive 2- and 3-d visualisation facilities.
Using a powerful and extensible Java-based expression language
new columns can be defined and row subsets selected for separate analysis.
Selecting a row can be configured to trigger an action, for instance
displaying an image of the catalogue object in an external viewer.
Table data and metadata can be edited and the resulting modified table
can be written out in a wide range of output formats.
</px>
<px>A number of options are provided for loading data from external
sources, including Virtual Observatory (VO) services, thus providing
a gateway to many remote archives of astronomical data.
It can also interoperate with other desktop tools using the SAMP protocol.
</px>
<px>TOPCAT is written in pure Java and is available under the
GNU General Public Licence. Its underlying table processing facilities
are provided by STIL, the Starlink Tables Infrastructure Library.
</px>
</abstract>
<sect id="intro">
<subhead><title>Introduction</title></subhead>
<p>TOPCAT is an interactive graphical program which can
examine, analyse, combine, edit and
write out tables. A table is, roughly, something with columns and rows;
each column contains objects of the same type
(for instance floating point numbers) and each row has an entry for
each of the columns (though some entries might be blank).
A common astronomical example of a table is an object catalogue.
</p>
<p>TOPCAT can read in tables in a number of formats from various sources,
allow you to
inspect and manipulate them in various ways, and if you have
edited them optionally write them out in the modified state for later use,
again in a variety of formats.
Here is a summary of its main capabilities:
<ul>
<li>View/edit table data in a scrollable browser</li>
<li>View/edit table metadata (parameters)</li>
<li>View/edit column metadata (column names, units, UCDs...)</li>
<li>Re-order and hide/reveal columns</li>
<li>Insert 'synthetic' columns defined by algebraic expression</li>
<li>Sort rows on the values in a given column</li>
<li>Define row subsets in various ways, including algebraically
and graphically</li>
<li>Plot columns against each other in 1, 2 and 3 dimensions,
distinguishing different subsets</li>
<li>Calculate statistics on each column for some or all rows</li>
<li>Trigger a configurable action (e.g. object image display) when a
column is selected</li>
<li>Perform flexible matching of rows in the same or different tables</li>
<li>Concatenate the rows of existing tables to create new ones</li>
<li>Acquire tables from web services, external filestores or other
customisable sources</li>
<li>Perform single and multiple queries to Virtual Observatory services</li>
<li>Interoperate with other desktop tools using SAMP</li>
<li>Write modified tables out in original or different format</li>
</ul>
</p>
<p>Considerable effort has gone into making it work with large tables;
a few million rows and hundreds of columns is usually quite manageable.
</p>
<p>The general idea of the program is quite straightforward.
At any time, it has a list of tables it knows about - these are
displayed in the <ref id="ControlWindow">Control Window</ref> which
is the first thing you see when you start up the program.
You can add to the list by <ref id="LoadWindow">loading tables in</ref>,
or by some actions which create new tables from the existing ones.
When you select a table in the list by clicking on it,
you can see general information
about it in the control window, and you can also open more specialised
<ref id="views">view windows</ref> which allow you to
inspect it in more detail or edit it.
Some of the actions you can take,
such as changing the current
<ref id="order">Sort Order</ref>,
<ref id="subsets">Row Subset</ref> or
<ref id="columns">Column Set</ref>
change the <ref id="apparent" plaintextref="yes">Apparent Table</ref>,
which is a view
of the table used for things such as saving it and performing row matches.
Changes that you make do not directly modify the tables on disk
(or wherever they came from),
but if you want to save the changes you have made,
you can <ref id="SaveQueryWindow">write</ref>
the modified table(s) to a new location.
</p>
<p>The main body of this document explains these ideas and capabilities
in more detail, and
<ref id="windows"/> gives a full description of all the windows which
form the application.
While the program is running, this document is available via the
online help system - clicking the <label>Help</label> (&IMG.HELP;)
toolbar button in any window will pop up a help browser open at
the page which describes that window.
This document is heavily hyperlinked, so you may find it easier to
read in its HTML form than on paper.
</p>
<p>Recent news about the program can be found on the
<webref url="http://www.starlink.ac.uk/topcat/" plaintextref="yes"
>TOPCAT web page</webref>.
It was initially developed within the now-terminated
Starlink and then AstroGrid projects,
and has subsequently been supported by the UK's PPARC and STFC
research councils, various Euro-VO and FP7 projects,
GAVO and ESA.
The underlying table handling facilities are supplied by
the Starlink Tables Infrastructure Library
<webref url="http://www.starlink.ac.uk/stil/" plaintextref="yes">STIL</webref>,
which is documented more fully in
<docxref doc="sun252" plaintextref="yes"/>.
The software is written in pure Java, and should run on any
J2SE platform version 1.5 or later.
This makes it highly portable, since it can run on any machine which has
a suitable Java installation, which is available for MS Windows, Mac OS X and
most flavours of Unix amongst others.
Some of the external viewer applications it talks to rely on
non-Java code however so one or two facilities,
such as displaying spectra, may be absent in some cases.
TOPCAT is available under the terms of the
GNU <webref url="http://www.gnu.org/copyleft/gpl.html"
>General Public License</webref>.
</p>
</sect>
<sect id="quick">
<subhead><title>Quick Start Guide</title></subhead>
<p>This manual aims to give detailed tutorial and reference
documentation on most aspects of TOPCAT's capabilities, and reading
it is an excellent way to learn about the program.
However, it's quite a fat document, and if you feel you've got better
things to do with your time than read it all, you should be able to
do most things by playing around with the software and dipping into
the manual (or equivalently the online help)
when you can't see how to do something or the program isn't behaving
as expected.
This section provides a short introduction for the impatient,
explaining how to get started.
</p>
<p>To start the program, you will probably type <code>topcat</code> or
something like
<code>java -jar topcat-full.jar</code> (see <ref id="invoke"/> for
more detail). To view a table that you have on disk, you can either
give its name on the command line or load it using the <label>Load</label>
button from the GUI. FITS, VOTable, CDF and GBIN files
are recognised automatically;
if your data is in another format such as ASCII (see <ref id="inFormats"/>)
you need to tell the program (e.g. <code>-f ascii</code> on the command line).
If you just want to try the program out, <code>topcat -demo</code> will
start with a couple of small tables for demonstration purposes.
</p>
<p>The first thing that you see is the
<ref id="ControlWindow" plaintextref="yes">Control Window</ref>.
This has a list of the loaded table(s) on the left. If one of these
is highlighted by clicking on it, information about it will
be shown on the right; some of this (table name, sort order) you
can change here.
Along the top is a toolbar with a number of buttons, most of which
open up new windows. These fall into a few groups:
<dl>
<dt>&IMG.LOAD; &IMG.SAVE; &IMG.BROADCAST;</dt>
<dd><p>Load/Save/Send Table(s).</p></dd>
<dt>&IMG.VIEWER; &IMG.PARAMS; &IMG.COLUMNS; &IMG.SUBSETS; &IMG.STATS;</dt>
<dd><p>Display various aspects of information about the table's data and
metadata.</p></dd>
<dt>&IMG.PLOT2_HISTOGRAM;
&IMG.PLOT2_PLANE;
&IMG.PLOT2_CUBE;
&IMG.PLOT2_SKY;
&IMG.PLOT2_SPHERE;</dt>
<dd><p>Open plotting/visualisation windows of various kinds.</p></dd>
<dt>&IMG.MATCH2; &IMG.TAP_DIALOG; &IMG.CDSXMATCH;</dt>
<dd><p>Join tables in various ways including spatial crossmatching,
and access remote databases.</p></dd>
<dt>&IMG.SAMP; &IMG.FUNCTION; &IMG.HELP;</dt>
<dd><p>Help and information</p></dd>
</dl>
The <label>Help</label> (&IMG.HELP;) button appears in most windows -
if you click it a help browser will be displayed showing an appropriate
part of this manual.
As well as the tool bar there are a number of
menus along the top - some of the options just repeat those appearing on the
toolbar, but several less common ones are available as well.
The <label>Help</label> menu gives you a few
more options along the same lines, including displaying the help
information in your usual web browser rather than in TOPCAT's (somewhat
scrappy) help viewer.
All the windows follow roughly this pattern. For some of the toolbar
buttons you can probably guess what they do from their icons,
for others probably not - to find out
you can hover with the mouse to see the tooltip,
look in the menus, read the manual, or just push it and see.
</p>
<p>Some of the windows allow you to make changes of various sorts to the
tables, such as performing sorts, selecting rows, modifying data or
metadata. None of these affect the table on disk (or database, or wherever),
but if you subsequently save the table the changes will be reflected
in the table that you save.
</p>
<p>A notable point to bear in mind concerns memory.
TOPCAT is fairly efficient in use of memory, but in some cases when
dealing with large tables you might see an OutOfMemoryError.
It is usually possible to work round this by using the
<code>-Xmx</code><em>NNN</em><code>M</code>
flag on startup - see <ref id="jvmMemory"/>.
</p>
<p>Finally, if you have queries, comments or requests about the software,
and they don't appear to be addressed in the manual, consult the
<webref url="http://www.starlink.ac.uk/topcat/">TOPCAT web page</webref>,
use the
<webref url="http://www.star.bris.ac.uk/~mbt/topcat-lists.html"
>topcat-user</webref> mailing list,
or contact the author - user feedback is always welcome.
</p>
</sect>
<sect id="apparent">
<subhead><title>Apparent Table</title></subhead>
<p>The <label>Apparent Table</label>
is a particular view of a table which can be
influenced by some of the viewing controls.
</p>
<p>When you load a table into TOPCAT it has a number of characteristics
like the number of columns and rows it contains, the order of the rows
that make up the data, the data and metadata themselves, and so on.
While manipulating it you can modify the way that the table appears
to the program, by changing or adding data or metadata,
or changing the order or selection of columns or rows that are visible.
For each table its "apparent table" is a table which corresponds to
the current state of the table according to the changes that you have made.
</p>
<p>In detail, the apparent table consists of the table as it was originally
imported into the program plus any of the following changes that you
have made:
<ul>
<li>Selection of rows changed by changing the current
<ref id="subsets" plaintextref="yes">Row Subset</ref></li>
<li>Changes to the current
<ref id="order" plaintextref="yes">Row Order</ref> caused by
doing a sort</li>
<li>Changes to the current
<ref id="columns" plaintextref="yes">Column Set</ref> caused
by adding, hiding or moving columns</li>
<li>Changes to cell data by editing cells in the
<ref id="TableViewerWindow">Data window</ref></li>
<li>Changes to table metadata by editing cells in the
<ref id="ParameterWindow">Parameter window</ref></li>
<li>Changes to column metadata by editing cells in the
<ref id="ColumnInfoWindow">Columns window</ref></li>
</ul>
</p>
<p>The apparent table is used in the following contexts:
<dl>
<dt>Data Window</dt>
<dd><p>The <ref id="TableViewerWindow">Data window</ref>
always shows the rows and columns of the apparent table,
so if you are in doubt about what
form a table will get exported in, you can see what it looks like there.
</p></dd>
<dt>Exports</dt>
<dd><p>When you save a table, or export it by dragging it off the
Table List panel in the <ref id="ControlWindow">Control Window</ref>,
or create a duplicate table,
it is the apparent table which is copied.
So for instance if you define a subset containing only the first
ten rows of a table
and then save it to a new table, or create a duplicate within TOPCAT
using the <label>Duplicate Table</label> (&IMG.COPY;) toolbar button,
the resulting table will contain only those ten rows.
</p></dd>
<dt>Joins</dt>
<dd><p>When you use the <ref id="MatchWindow">Match Window</ref> or
<ref id="ConcatWindow">Concatenation Window</ref> to construct a
new table on the basis of one or more existing ones,
the new table will be built on the basis of the apparent versions
of the tables being operated on.
The same applies to the join-like functionality provided by
table uploads in the <ref id="TapTableLoadDialog">TAP window</ref>,
<ref id="CdsUploadMatchWindow">CDS Upload X-Match window</ref>
and the <ref id="DalMultiPanel">multiple positional search</ref>
(Cone, SIA, SSA) windows.
</p></dd>
</dl>
Some of the other table view windows are affected too, for instance
the <ref id="ColumnInfoWindow">Columns window</ref>
displays its columns in the order that they appear in the Apparent Table.
</p>
<subsect id="subsets">
<subhead><title>Row Subsets</title></subhead>
<p>An important feature of TOPCAT is the ability to define and use
<label>Row Subsets</label>. A Row Subset is a selection of the
rows within a whole table being viewed within the application,
or equivalently a new table composed from some subset of its rows.
You can define these and use them in several different ways;
the usefulness comes from defining them in one context and using them
in another.
The <ref id="SubsetWindow">Subset Window</ref> displays the currently
defined Row Subsets and permits some operations on them.
</p>
<p>At any time each table has a <label>current</label> row subset,
and this affects the <ref id="apparent">Apparent Table</ref>.
You can always see what it is by looking at the "Row Subset" selector
in the <ref id="ControlWindow">Control Window</ref> when that table
is selected; by default it is one containing all the rows.
You can change it by choosing from this selector
or as a result of some other actions.
</p>
<p>Other contexts in which subsets can be used are picking a selection
of rows from which to calculate in the
<ref id="StatsWindow">Statistics Window</ref>
and marking groups of rows to plot using different markers in the
various <ref id="plot2">plotting</ref>
(and <ref id="GraphicsWindow">old-style plotting</ref>) windows.
</p>
<subsubsect id="subsetDef">
<subhead><title>Defining Subsets</title></subhead>
<p>You can define a Row Subset in one of the following ways:
<dl>
<dt>Selecting rows in the browser</dt>
<dd><p>You can select a single row in the
<ref id="TableViewerWindow">Data Window</ref> by
clicking on it, or select a group of adjacent rows by dragging
the mouse over them. You can add more rows to the selection by
keeping the <Control> button pressed while you do it.
Once you have a set of rows selected you can use the
<label>Subset From Selected Rows</label> (&IMG.INCLUDE_ROWS;) or
<label>Subset From Unselected Rows</label> (&IMG.EXCLUDE_ROWS;)
buttons to create a new subset based
on the set of highlighted rows or their complement.
</p>
<p>Combining this with <ref id="order">sorting</ref>
the rows in the table can be useful;
if you do a Sort Up on a given column and then drag out the
top few rows of the table you can easily create a subset consisting
of the highest values of a given column.
</p></dd>
<dt>Defining an algebraic expression</dt>
<dd><p>From the <ref id="SubsetWindow">Subset Window</ref> using the
<label>Add New Subset</label> (&IMG.ADD;) button will pop up
the <ref id="SyntheticSubsetQueryWindow">Algebraic Subset Window</ref>
which allows you to define a new subset using an algebraic expression
based on the values of the cells in each row.
The format of such expressions is described in <ref id="jel"/>.
</p></dd>
<dt>Visible plotted points</dt>
<dd><p>In some of the <ref id="plot2">plotting</ref>
(and <ref id="GraphicsWindow">old-style plotting</ref>)
windows you can plot columns
against each other, and subsequently zoom in and out using the
mouse. If you zoom to display only some of the plotted points and
then use the <label>New Subset From Visible</label>
(&IMG.VISIBLE_SUBSET; or &IMG.RANGE_SUBSET;)
button then a new subset will be
created containing only rows represented by points in the field of
view of the plot at the time.
</p></dd>
<dt>Selected plotted points</dt>
<dd><p>For more control over which plotted points are to be included in
a subset, you can use the <label>Draw Subset Region</label>
(&IMG.BLOB_SUBSET;) button in some of the plotting windows.
This allows you
to trace out with the mouse a region or regions of any shape,
creating a new subset containing only those rows represented by
the points within those regions.
</p></dd>
<dt>Boolean columns</dt>
<dd><p>Any column which has a boolean (true/false) type value can be used
as a subset; rows in which it has a true value are in the subset
and others are not. Any boolean column in a table is made available
as a row subset with the same name when the table is imported.
</p></dd>
</dl>
</p>
<p>In all these cases you will be asked to assign a name for the subset.
As with column names, it is a good idea to follow a few rules for these
names so that they can be used in <ref id="jel">algebraic expressions</ref>.
They should be:
<ul>
<li>Distinct from other subset and column names,
even apart from upper/lower case distinctions</li>
<li>In the form of a java identifier (starts with a letter, continues with
alphanumerics including underscore, no spaces)</li>
<li>Not too long</li>
</ul>
When you choose a name, you can either type one in, or select one from
the drop-down list, which gives the names of all the existing subsets.
This allows you to redefine existing subsets. Note if you do select
or type in one of the existing names,
any previous content of that subset will be lost.
</p>
<p>In the first subset definition method above,
the <label>current</label> subset will be set immediately to the
newly created one. In other cases the new subset may be highlighted
appropriately in other windows, for instance by being plotted in
scatter plot windows.
</p>
</subsubsect>
</subsect>
<subsect id="order">
<subhead><title>Row Order</title></subhead>
<p>You can sort the rows of each table according to the
values in a selected column.
Normally you will want to sort on
a numeric column, but other values may be sortable too, for instance
a String column will sort alphabetically.
Some kinds of columns (e.g. array ones) don't have any well-defined
order, and it is not possible to select these for sorting on.
</p>
<p>At any time, each table has a <label>current</label> row order,
and this affects the <ref id="apparent">Apparent Table</ref>.
You can always see what it is by looking under the "Sort Order" item
in the <ref id="ControlWindow">Control Window</ref> when that table
is selected; by default it is "(none)", which means the rows have the
same order as that of the table they were loaded in from.
The little arrow (&IMG.UP_TRIM;/&IMG.DOWN_TRIM;) indicates whether
the sense of the sort is up or down. You can change the sort order
by selecting a column name from this control, and change the sense
by clicking on the arrow. The sort order can also be changed
by using menu items in the
<ref id="ColumnInfoWindow">Columns Window</ref> or right-clicking
popup menus in the <ref id="TableViewerWindow">Data Window</ref>.
</p>
<p>Selecting a column to sort by calculates the new row order
by performing a sort on the cell values there and then.
If the table data change somehow (e.g. because you edit
cells in the table) then it is possible for the sort order
to become out of date.
</p>
<p>The current row order affects the <ref id="apparent">Apparent Table</ref>,
and hence determines the order of rows in tables which are exported
in any way (e.g. written out) from TOPCAT. You can always see the
rows in their currently sorted order in the
<ref id="TableViewerWindow">Data Window</ref>.
</p>
</subsect>
<subsect id="columns">
<subhead><title>Column Set</title></subhead>
<p>When each table is imported it has a list of columns.
Each column has header information which determines the kind of
data which can fill the cells of that column as well as a name,
and maybe some additional information like units and
<webref url="http://www.ivoa.net/Documents/latest/UCD.html"
>Unified Content Descriptor</webref>.
All this information can be viewed, and in some cases modified,
in the <ref id="ColumnInfoWindow">Columns Window</ref>.
</p>
<p>During the lifetime of the table within TOPCAT,
this list of columns can be
changed by adding new columns, hiding (and perhaps subsequently
revealing) existing columns, and changing their order. The
current state of which columns are present and visible and what order
they are in is collectively known as the <label>Column Set</label>,
and affects the <ref id="apparent">Apparent Table</ref>.
The current Column Set is always reflected in the order in which
columns are displayed in the <ref id="TableViewerWindow">Data Window</ref>
and <ref id="StatsWindow">Statistics Window</ref>.
The <ref id="ColumnInfoWindow">Columns Window</ref> shows all the
known columns, including hidden ones, in Column Set order;
whether they are currently visible is indicated by the (leftmost)
"Visible" column.
</p>
<p>You can affect the current Column Set in the following ways:
<dl>
<dt>Hide/Reveal columns</dt>
<dd><p>In the Columns Window you can toggle columns between hidden and
visible by clicking on their box in the <label>Visible</label> column.
To make a group of columns hidden or visible at once,
select the corresponding rows (drag the mouse over them to select
a contiguous group; hold the Control button down to add
more single rows or contiguous groups to the selection) and hit the
<label>Hide Selected</label> (&IMG.HIDE;) or
<label>Reveal Selected</label> (&IMG.REVEAL;)
button in the toolbar or menu.
Note when selecting rows, don't drag the mouse over the Visible
column, do it somewhere in the middle of the table.
The <label>Hide All</label> (&IMG.HIDE_ALL;) and
<label>Reveal All (&IMG.REVEAL_ALL;)</label>
buttons set all columns in the table invisible or visible -
a useful convenience if you've got a very wide table.
</p>
<p>You can also hide a column by right-clicking on it in the
<ref id="TableViewerWindow">Data Window</ref>, which brings up
a popup menu - select the <label>Hide</label> option.
To make it visible again you have to go to the Columns Window as above.
</p></dd>
<dt>Move Columns</dt>
<dd><p>In the Data Window you can move columns around by dragging the
grey column header left or right to a new position (as usual in a
<ref id="JTable">JTable</ref>).
Alternatively, you can drag the rows in the
<ref id="ColumnInfoWindow">Columns Window</ref> by grabbing the
grey row header (numbered cell at the left) and dragging it up or down.
Either of these affects the Column Set, as you can see by looking
at one window while moving columns in the other.
</p></dd>
<dt>Add Columns</dt>
<dd><p>You can use the
<label>New Synthetic Column</label> (&IMG.ADD;)
or <label>New Sky Coordinate Columns</label> (&IMG.ADDSKY;) buttons in the
Columns Window or the (right-click) popup menu in the
Data Window to add new columns derived from exsiting ones.
</p></dd>
<dt>Replace a Column</dt>
<dd><p>If a column is selected in the Columns Window or from the
Data Window popup menu you can use the
<label>Replace Column with Synthetic</label> (&IMG.MODIFY;) button.
This is similar to the <label>Add a Synthetic Column</label>
described in the previous item, but it pops up a new column
dialogue with similar characteristics (name, units etc)
to those of the column that's being replaced, and when completed
it slots the new column in to the table hiding the old one.
</p></dd>
<dt>Add a Subset Column</dt>
<dd><p>If you have defined a <ref id="subsets">Row Subset</ref> somehow
and you want it to appear explicitly in the table
(for instance so that when you write the table out the selection is saved)
you can select that subset in the
<ref id="SubsetWindow">Subsets Window</ref> and use the
<label>To Column</label> (&IMG.TO_COLUMN;) button, which will add
a new boolean column to the table with the value <label>true</label>
for rows part of that subset and <label>false</label> for the other rows.
</p></dd>
</dl>
</p>
</subsect>
</sect>
<sect>
<subhead><title>Table I/O</title></subhead>
<subsect>
<subhead><title>Table Formats</title></subhead>
<p>TOPCAT supports a wide variety of tabular data formats.
In most cases these are file formats for tables stored as single files
on a disk or at the end of a URL, but there are other possibilities,
for instance a table you have opened could
be the result of an SQL query on a database.
</p>
<p>Since you can load a table from one format and save it in a different
one, TOPCAT can be used to convert a table from one format to another.
If this is all you want to do however, you may find it more
convenient to use the <code>tcopy</code> command line utility in the
<webref url="http://www.starlink.ac.uk/stilts/">STILTS</webref> package.
</p>
<p>The format handling is extensible, so new formats can
be added fairly easily. All the table input/output is handled by
STIL, the Starlink Tables Infrastructure Library;
more detailed descriptions of the I/O capabilities can be found in its
<webref plaintextref="yes" url="http://www.starlink.ac.uk/stil/"
>documentation</webref>.
</p>
<p>The following subsections describe the available formats for reading
and writing tables. The two operations are separate, so not all the
supported input formats have matching output formats and vice versa.
</p>
<subsubsect id="inFormats">
<subhead><title>Supported Input Formats</title></subhead>
<p>Loading tables into TOPCAT is done either from the command line
when you start the program up or
using the <ref id="LoadWindow">Load Table</ref> dialogue.
For FITS, VOTable, CDF and GBIN formats
the file format can be detected automatically
(note this is done by looking at the file content, it has nothing
to do with filename extensions).
For other formats though, for instance ASCII or Comma-Separated Values,
you will have to specify the format that the file is in.
In the Load Window, there is a selection box from which you can
choose the format, and from the command line you use the
<code>-f</code> flag - see <ref id="invoke"/> for details.
You can always specify the format rather than using automatic detection
if you prefer - this can be a good idea if a table appears to
be failing to load in a surprising way, since it may give you
a more detailed error message.
</p>
<p>In either case, table locations may be given as filenames or
as URLs, and any data compression (gzip, unix compress and bzip2)
will be automatically detected and dealt with - see <ref id="tableLocation"/>.
</p>
<p><strong>Note:</strong> in some earlier versions of TOPCAT, ASCII
format tables could be detected automatically, so you could load
them by typing something like "<code>topcat table.txt</code>".
In the current version, you have to signal that this is an
ASCII table, for instance by typing "<code>topcat -f ascii table.txt</code>".
</p>
<p>The following sections describe the table formats which TOPCAT can read.</p>
<subsubsubsect id="inFits">
<subhead><title>FITS</title></subhead>
<p>FITS binary and ASCII table extensions can be read.
Normally, TOPCAT will load all TABLE or BINTABLE extensions in a given file.
</p>
<p>If only a single extension is required from a multi-extension FITS file,
this is indicated by giving an identifier after a '#' at the
end of the table location.
The identifier can be in one of two forms:
<ul>
<li>The numeric index of the HDU. The first extension
(first HDU after the primary HDU) is numbered 1.
Thus in a compressed FITS table named "spec23.fits.gz"
with one primary HDU and two BINTABLE extensions,
you would view the first one using the name "spec23.fits.gz"
or "spec23.fits.gz#1" and the second one using the name "spec23.fits.gz#2".
The suffix "#0" is never used for a legal
FITS file, since the primary HDU cannot contain a table.
</li>
<li>The name of the extension. This is the value of the EXTNAME header
in the HDU, or alternatively the value of EXTNAME followed by "-"
followed by the value of EXTVER. This follows the recommendation in
the FITS standard that EXTNAME and EXTVER headers can be used to
identify an HDU.
So in a multi-extension FITS file "cat.fits" where a table extension
has EXTNAME='UV_DATA' and EXTVER=1, it could be referenced as
"cat.fits#UV_DATA" or "cat.fits#UV_DATA-1".
Matching of these names is case-insensitive.
</li>
</ul>
</p>