Hướng dẫn sử dụng CLASS trong xử lý dữ liệu thiên văn vô tuyến

1. Cơ bản

1.1 Khởi động và thoát

# Khởi động CLASS
$ class

# Sau khi khởi động, dấu nhắc hiện ra
CLASS> 

# Thoát
CLASS> exit
# Hoặc nhấn Ctrl+D

1.2 Lệnh trợ giúp cơ bản

# Xem tất cả lệnh
CLASS> help

# Xem trợ giúp cho lệnh cụ thể
CLASS> help plot

# Xem tài liệu chi tiết
CLASS> doc base

# Liệt kê tất cả biến
CLASS> list/var

2. Thao tác dữ liệu

2.1 Thao tác tập tin

# Đọc tập tin định dạng GILDAS
CLASS> file in observation.30m

# Đọc tập tin FITS
CLASS> file fits data.fits

# Xem thông tin tập tin hiện tại
CLASS> file

# Tạo tập tin mới
CLASS> file out output.30m new

# Ghi dữ liệu vào tập tin
CLASS> write

# Xem nội dung tập tin
CLASS> directory
CLASS> dir  # viết tắt

Ví dụ 1: Đọc và xem dữ liệu

# Đọc dữ liệu
CLASS> file in ngc7027.co.30m
CLASS> dir

Index  Source    Line      Tsys(K)  IntTime(s)  RA(2000)      Dec(2000)
1      NGC7027   CO(2-1)   450.0    1200        21:07:01.6   +42:14:10
2      NGC7027   CO(2-1)   448.5    1200        21:07:01.6   +42:14:10
3      NGC7027   CO(2-1)   452.3    1200        21:07:01.6   +42:14:10

2.2 Chọn dữ liệu

# Chọn dữ liệu theo chỉ mục cụ thể
CLASS> get 1
CLASS> get 1-5,10,15-20

# Chọn theo điều kiện
CLASS> find /source "NGC7027"
CLASS> get found

# Chọn bản ghi mới nhất
CLASS> get /last

# Chọn tất cả dữ liệu
CLASS> get /all

# Xem dữ liệu đã chọn
CLASS> list

# Thống kê dữ liệu đã chọn
CLASS> statistic

2.3 Hiển thị dữ liệu

# Vẽ đồ thị cơ bản
CLASS> plot

# Thiết lập tham số vẽ
CLASS> set device xwin     # Hiển thị trên màn hình
CLASS> set device ps       # Xuất ra tập tin PostScript

# Thiết lập cửa sổ vẽ
CLASS> set window -500 500   # Đặt dải vận tốc (km/s)
CLASS> set window auto       # Dải tự động

# Vẽ chồng
CLASS> plot /over

# Vẽ màu
CLASS> plot /colour

# Nhiều đồ thị con
CLASS> plot /multi

Ví dụ 2: Vẽ so sánh nhiều nhóm dữ liệu

# Vẽ nhóm đầu tiên
CLASS> get 1
CLASS> plot

# Vẽ nhóm thứ hai, chồng lên
CLASS> get 2
CLASS> plot /over /colour  # Vẽ chồng nhóm thứ hai, màu khác

# Vẽ nhóm thứ ba, chồng lên
CLASS> get 3
CLASS> plot /over /colour

3. Xử lý nền

3.1 Thiết lập cửa sổ khớp

# Thiết lập cửa sổ thủ công (đơn vị vận tốc)
CLASS> set window -50 -30 20 40 100 150

# Chọn cửa sổ tương tác
CLASS> draw window
# Nhấp chuột trên đồ thị để chọn vùng nền

# Hiển thị cửa sổ hiện tại
CLASS> draw window

# Xóa cửa sổ
CLASS> set window

3.2 Khớp nền

# Khớp đa thức nền
CLASS> base 0          # Nền hằng số
CLASS> base 1          # Nền tuyến tính
CLASS> base 3          # Đa thức bậc 3

# Khớp kèm hiển thị
CLASS> base 3 /plot

# Lưu dữ liệu sau khi khớp
CLASS> base 3 /save

# Xem kết quả khớp
CLASS> base /result

# Hiển thị phần dư
CLASS> base /residual

Ví dụ 3: Quy trình xử lý nền hoàn chỉnh

# 1. Đọc dữ liệu
CLASS> file in spectra.30m
CLASS> get 1

# 2. Xem dữ liệu gốc
CLASS> plot

# 3. Xác định vị trí vạch phổ, thiết lập cửa sổ nền (tránh vạch)
CLASS> set window -120 -80 20 50 120 150
CLASS> draw window

# 4. Thử khớp với bậc khác nhau
CLASS> base 2 /plot
CLASS> base 3 /plot

# 5. Chọn khớp tốt nhất (bậc 3), lưu dữ liệu đã trừ nền
CLASS> base 3 /save /plot

# 6. Xem vạch phổ đã xử lý
CLASS> plot

# 7. Kiểm tra phần dư
CLASS> base /residual
CLASS> plot

3.3 Nền nâng cao

# Khớp với hàm do người dùng tự định nghĩa
CLASS> base user 'a+b*x+c*x*x'

# Khớp tự động dựa trên tỷ số tín hiệu/nhiễu
CLASS> base /auto

# Khớp từng pixel (dùng cho dữ liệu bản đồ)
CLASS> base /pixel

# Hiển thị tham số khớp
CLASS> base /print

4. Khớp vạch phổ

4.1 Nhận dạng vạch phổ tự động

# Nhận dạng vạch phổ tự động
CLASS> find
CLASS> find /threshold 3.0   # Thiết lập ngưỡng tỷ số tín hiệu/nhiễu

# Hiển thị vạch đã nhận dạng
CLASS> find /list

# Thiết lập số lượng vạch
CLASS> line 3
# Sau đó nhấp chuột trên đồ thị để xác định các biên của vạch phổ

4.2 Khớp Gaussian

# Thực hiện khớp
CLASS> min

# Khớp kèm ước lượng sai số
CLASS> min /error

# Cố định một phần tham số
CLASS> fix 1           # Cố định tất cả tham số của vạch thứ nhất
CLASS> fix 1 2         # Cố định vị trí trung tâm của vạch thứ nhất
CLASS> free 1          # Giải phóng tham số

# Xem kết quả khớp
CLASS> vis
CLASS> list/line

# Lưu kết quả khớp
CLASS> line /write

Ví dụ 4: Khớp Gaussian nhiều vạch phổ

# 1. Chuẩn bị dữ liệu
CLASS> file in co_spectrum.30m
CLASS> get 1
CLASS> base 2 /save /plot

# 2. Thiết lập 3 vạch phổ
CLASS> line 3
# Nhấp chuột lần lượt: CO(2-1) biên trái → biên phải → CO(3-2) biên trái → biên phải → HCN(3-2) biên trái → biên phải

# 3. Thực hiện khớp
CLASS> min /error

# 4. Xem kết quả
CLASS> vis
CLASS> list/line

# 5. Vẽ đồ thị kết quả khớp
CLASS> plot /line

# 6. Lưu tham số khớp
CLASS> line /write lines_fit.dat

4.3 Giải thích tham số khớp

# Xem ý nghĩa tham số khớp
CLASS> doc line

# Giải thích tham số:
# Area: Cường độ tích phân (K km/s)
# Vpeak: Vận tốc đỉnh (km/s)
# V0: Vận tốc trung tâm (km/s)
# Width: Độ rộng toàn bộ ở nửa cực đại (km/s)
# Ta: Nhiệt độ đỉnh (K)
# rms: Nhiễu căn bậc hai trung bình (K)
# S/N: Tỷ số tín hiệu trên nhiễu

5. Tính năng nâng cao

5.1 Tính toán dữ liệu

# Phép tính số học
CLASS> data 1          # Hiển thị dữ liệu hiện tại
CLASS> data * 1.2      # Nhân với hằng số
CLASS> data + 0.5      # Cộng với hằng số
CLASS> data smooth 3   # Làm mịn 3 kênh
CLASS> data /sub       # Trừ nền liên tục

# Trừ hai vạch phổ
CLASS> data1 = data1 - data2

# Trung bình dữ liệu
CLASS> average         # Trung bình tất cả vạch phổ đã chọn
CLASS> average /weight # Trung bình có trọng số

5.2 Chuyển đổi tọa độ

# Chuyển đổi giữa vận tốc và tần số
CLASS> set velocity lsr      # Thiết lập hệ vận tốc
CLASS> set frequency 230.538 # Thiết lập tần số tham chiếu

# Chuyển đổi kênh thành vận tốc
CLASS> convert chan to vel

# Hiển thị thông tin tọa độ
CLASS> show coordinate

5.3 Tính nhiễu

# Tính nhiễu nền
CLASS> base /rms

# Tính nhiễu trong vùng được chỉ định
CLASS> stat window
CLASS> stat /rms

# Hiển thị mức nhiễu
CLASS> list /rms

6. Xử lý hàng loạt bằng script

6.1 Tạo tập tin script

Tạo tập tin process_spectra.class:

! Script xử lý hàng loạt dữ liệu phổ
! Ngày: 2024-01-15

! 1. Đọc tập tin
file in /data/original_spectra.30m

! 2. Xử lý tất cả dữ liệu trong vòng lặp
for i 1 to 59
    get i
    ! Hiển thị tiến trình
    message "Processing spectrum " i
    ! Thiết lập cửa sổ nền
    set window -100 -80 -20 0 50 80
    ! Khớp nền
    base 3 /save /plot
    ! Lưu dữ liệu đã xử lý
    data /write spectra_processed.30m /append
next

! 3. Thống kê kết quả
statistic
message "Batch processing completed!"

6.2 Thực thi script

# Thực thi trong CLASS
CLASS> @process_spectra

# Hoặc thực thi từ dòng lệnh
$ class -p process_spectra.class

# Thực thi với tham số
$ class process_spectra.class

6.3 Ví dụ script hữu ích

Ví dụ 5: Script khớp nền tự động

! auto_baseline.class
! Nhận dạng và khớp nền tự động

! Thiết lập tham số
set window -500 -400 400 500  ! Vùng biên làm nền
find /threshold 5.0            ! Tìm vạch lớn hơn 5 sigma

! Xử lý mỗi vạch có tín hiệu
if found > 0
    for j 1 to found
        get j
        ! Tránh vùng tín hiệu khi khớp nền
        set window -500 -300 300 500
        base 2 /plot
        data /write processed.30m /append
    next
else
    message "No significant lines found!"
endif

7. Mẹo và thủ thuật

7.1 Phím tắt thông dụng

Ctrl + C    # Ngắt thao tác hiện tại
↑ ↓         # Duyệt lịch sử lệnh
Tab         # Tự động hoàn thành
Ctrl + L    # Xóa màn hình

7.2 Kỹ thuật gỡ lỗi

# Hiển thị thông tin chi tiết
CLASS> set echo on      # Hiển thị lệnh đang thực thi
CLASS> set verify on    # Hiển thị giá trị biến
CLASS> set debug 2      # Thiết lập mức gỡ lỗi (0-3)

# Xem bộ nhớ sử dụng
CLASS> show memory

# Xử lý lỗi
CLASS> on error continue  # Tiếp tục khi gặp lỗi
CLASS> on error stop      # Dừng khi gặp lỗi

7.3 Thiết lập thông dụng

# Lưu thiết lập vào tập tin cấu hình
CLASS> save config

# Tải tập tin cấu hình
CLASS> load config

# Thiết lập tham số mặc định
CLASS> set device xwin
CLASS> set color on
CLASS> set label font 'helvetica'
CLASS> set size 1.5

7.4 Xuất dữ liệu

# Xuất ra ASCII
CLASS> data /write ascii spectrum.dat

# Xuất ra FITS
CLASS> data /write fits spectrum.fits

# Xuất kết quả khớp
CLASS> line /write lines.dat

8. Ví dụ quy trình làm việc hoàn chỉnh

Ví dụ 6: Quy trình xử lý dữ liệu hoàn chỉnh

! complete_workflow.class
! Quy trình xử lý dữ liệu phổ từ anten đơn hoàn chỉnh

! === 1. Khởi tạo ===
message "=== Bắt đầu xử lý dữ liệu ==="
set echo on
set device xwin

! === 2. Đọc dữ liệu ===
message "Đang tải dữ liệu..."
file in /data/original/co_30m_20240115.30m
dir

! === 3. Kiểm tra chất lượng dữ liệu ===
message "Đang kiểm tra chất lượng dữ liệu..."
for i 1 to 10
    get i
    base 0 /rms
    list /rms
next

! === 4. Trung bình dữ liệu ===
message "Đang lấy trung bình dữ liệu..."
get /all
average /weight

! === 5. Khớp nền ===
message "Đang khớp nền..."
set window -150 -100 -20 20 100 150
base 3 /plot /save

! === 6. Nhận dạng vạch phổ ===
message "Đang nhận dạng vạch phổ..."
find /threshold 5.0
find /list

! === 7. Khớp Gaussian ===
message "Đang khớp Gaussian..."
line 2
min /error
vis
list/line

! === 8. Lưu kết quả ===
message "Đang lưu kết quả..."
line /write co_lines.dat
data /write fits final_spectrum.fits

! === 9. Tạo báo cáo ===
message "Đang tạo báo cáo..."
list/line > report.txt
statistic >> report.txt

message "=== Xử lý hoàn tất! ==="

9. Giải quyết vấn đề thường gặp

9.1 Thiếu bộ nhớ

# Dọn dẹp bộ nhớ
CLASS> free

# Giới hạn số điểm dữ liệu
CLASS> set maxpoints 16384

9.2 Vấn đề vẽ đồ thị

# Đặt lại thiết lập vẽ
CLASS> reset plot

# Lưu đồ thị hiện tại
CLASS> hardcopy output.ps

9.3 Khớp không hội tụ

# Thử tham số ban đầu khác
CLASS> line /reset  # Thiết lập lại vạch phổ
CLASS> min /iterate 100  # Tăng số lần lặp
CLASS> fix 1 2 3  # Cố định một phần tham số

Thẻ: class GILDAS thiên văn vô tuyến xử lý dữ liệu phổ khớp phổ

Đăng vào ngày 11 tháng 7 lúc 06:31