人生的意义就是思考其意义分享 http://blog.sciencenet.cn/u/qianlivan 天体物理工作者,家乡云南昆明。

博文

CLASS探索(一)

已有 5204 次阅读 2012-5-17 14:10 |个人分类:知识|系统分类:科研笔记| class, 数据处理

      此前在学习CLASS的过程中记了些笔记,形成了一个极简“教程”(http://blog.sciencenet.cn/home.php?mod=space&uid=117333&do=blog&id=567008)。从我接触到的各种数据处理软件来看,IDL(如果委屈地认为是数据处理软件的话)是比较灵活的,可以方便地读入数据的头文件,数据本身,然后可以进行灵活的数组操作,然后可以把处理完的数据再写到一个新的文件里,这让人感到十分满意;AIPS是最难理解的,虽然很多人用,并且以会用AIPS来显摆,但是说实话,本人从根本上就不喜欢AIPS的哲学,因为没有足够的灵活性;AIPS的改进版用python封装后形成的CASA倒是让人眼前一亮,有空的时候可以去研究一下;CLASS处于中间,有一定的灵活性,当然不如作为一门高级语言的IDL那样灵活,但是CLASS的语法很让我感到亲切,所以我愿意花点时间进行一些研究。
       从网上能找到的一些简单教程和例子里可以学到很多关于CLASS的知识和使用技巧,可以进行基本的数据处理。但是要用CLASS达到和IDL相同的灵活性,光从例子就获得不了更多的信息了。所以现在从更基本的层面对CLASS进行一些探索。在这个过程中,类比会有很多帮助。所谓使用CLASS到达IDL那样的灵活性,其实只需要做到,能自己造一个数组,对数组进行各种操作,自己造一个文件头,然后写到一个文件里。
       类比FITS文件,CLASS文件也有文件头和数据两部分。从CLASS的手册上看,CLASS文件头有以下一些变量
  TELESCOPE      Character*12,     RW, Telescope name
  NUMBER         Integer,          RW, Observation number
  VERSION        Integer,          RO, Version number
  DATATYPE       Integer,          RO, Type of observation
                                       0 Line, 1 Continuum, 2 Skydip
  QUALITY        Integer,          RO, Quality of data
  SCAN           Integer,          RO, Original scan number
  UTOBS          Double,           RO, UT of observation (Radians)
  LSTOBS         Double,           RO, LST of observation (Radians)
  AZIMUTH        Real,             RW, Azimuth of observation (Radians)
  ELEVATION      Real,             RW, Elevation of observation (Radians)
  TSYS           Real,             RW, System temperature
  TIME           Real,             RW, Integration time (Seconds)
  SOURCE         Character*12,     RW, Source name
  LAMBDA         Double,           RW, Longitude of source (Radians)
  BETA           Double,           RW, Latitude of source (Radians)
  OFF_LAMBDA     Double,           RW, Offset in longitude (Radians)
  OFF_BETA       Double,           RW, Offset in latitude (Radians)
  EPOCH          Real,             RW, Epoch of coordinates (Years)
  LINE           Character*12      RW, Line name
  CHANNELS       Integer,          RO, Number of channels
  REFERENCE      Real,             RW, Reference channel
  FREQ_STEP      Real,             RW, Frequency step by channel (MHz)
  VELO_STEP      Real,             RW, Velocity step by channel (km/s)
  VELOCITY       Real,             RW, Velocity of reference channel
  FREQUENCY      Double,           RW, Rest frequency at reference channel
  IMAGE          Double,           RW, Image frequency " " " "
  BEAM_EFF       Real,             RW, Telescope beam efficiency
  FORWARD_EFF    Real,             RW, Telescope forward efficiency
  GAIN_IMAGE     Real,             RW, Image to signal band ratio
  WATER          Real,             RO, Water vapor content (mm)
  PRESSURE       Real,             RO, External pressure (hPa)
  AMBIENT_T      Real,             RO, External temperature (K)
  CHOPPER_T      Real,             RO, Chopper temperature (K)
  COLD_T         Real,             RO, Cold load temperature (K)
  TAU_SIGNAL     Real,             RO, Opacity in signal band
  TAU_IMAGE      Real,             RO, Opacity in image band
  ATM_SIGNAL     Real,             RO, Atmospheric temperature
                                       in signal band
  ATM_IMAGE      Real,             RO, Atmospheric temperature
                                       in image band
  RX             Real[8192]        RO, X values of data points
  RY             Real[8192]        RW, Y values of data points

在读入数据以后可以用exam命令查看这些变量,例如
LAS> file in qhz.14m
LAS> find
LAS> get f
LAS> exam frequency
就可以列出
FREQUENCY      =          115271.2020000000             ! Double GLOBAL
       知道了头文件的变量,除了查看,也可以进行修改。具体可以使用modify命令,但是能修改的变量有限,可以用
LAS> help modify
查看。其他参数的修改就需要用sic中的let命令进行。
       如果注意观察的话可以发现,对于光谱文件而言,数据其实是包含在头文件里的,rx和ry就分布是频率和强度值(CLASS不分大小写,这个和IDL是一样的,多数情况很方便)。这样一来实际上可以自己对数据进行操作,例如,认为把光谱强度增加为原来的两倍。
LAS> plot
LAS> let ry ry*2
LAS> plot
观察画出来的图就可以发现(内存中的)数据被更改了。注意,rx是只读的,只能对ry进行处理。
       原则上也可以在CLASS里将一幅图像读到一个二维数组里,但是可以发现,这个数组是只读的,也就是说无法直接处理,而三维数据块就更难了。不过仔细思考 可以发现,所谓三维数据块,就是一些排列好的谱线,只要能对每一条谱线进行处理,原则上就可以对数据块进行处理。也就是说,面对一个三维数据块,我们可以 进行以下操作将其转换为普通的CLASS文件(就是一些光谱组成的表)。
LAS> file out qhz_dismantle.14m
LAS> lmv qhz.lmv
之后就可以将文件qhz_dismantle.14m读入进行之前提到的操作了。

https://blog.sciencenet.cn/blog-117333-571952.html

上一篇:计算机硬件缩写杂思
下一篇:python数据处理笔记(一)积分强度图
收藏 IP: 159.226.169.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-3-28 22:57

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部