pulse_searcher の使い方

pulse_searcher は、指定した範囲の DM (dispersion measure) で de-dispersion を行いパルスを探査するソフトで、FRB (fast radio burst) や GRP (giant radio pulse) の検出に利用できます。 パルサーの本格的解析に必要な folding や acceleration 補正などはできません。 また DM を振って FRB 探査もできるものの、処理時間がかかりすぎて実用的ではありません。

  1. インストール
  2. 解析設定ファイルの作成
  3. 実行

インストール

ホームディレクトリなど適当な場所にワークスペース (e.g., /home/USER/pulsar) を作っておくことをおすすめします。 USER は自身のユーザー名に読み替えてください。

$ mkdir /home/USER/pulsar

適当なディレクトリにソフトをダウンロードし、実行権限を与え、実行してください。

$ wget http://astro.sci.yamaguchi-u.ac.jp/t-aoki/tools/pulse_searcher/pulse_searcher_cent7gnome.install
$ chmod 555 pulse_searcher_cent7gnome.install
$ ./pulse_searcher_cent7gnome.install

少し時間がかかるかもしれませんが以下のような画面が表示されるはずなので、指示に沿ってインストールしてください。 インストール先ディレクトリは先に作成したワークスペースを指定すると良いと思います。

MATLAB Runtimeもインストールします。インストール先ディレクトリをユーザーのワークスペースにして大丈夫です。

これですべてのファイルはワークスペース /home/USER/pulsar 以下に入ったはずです。

解析設定ファイル

下記の情報を記したテキストファイル crab-6g.conf (6GHz用) と crab-8g.conf (8GHz用) を用意してください。 ファイル名は任意ですが、ターゲットと観測周波数を入れておくとわかりやすいです。

$ vi crab-6g.conf

# Set Dispersion Measure.
# In the program, there is a loop such as for(dm = min; dm <= max; dm += step).
survey_DM_pc_per_cm3_min  56.7450
survey_DM_pc_per_cm3_max  56.7450
survey_DM_pc_per_cm3_step 56.7450

# Set FFT Window Width in milli-second.
fft_width_ms_desired 100

# Set Width of Short Time Fourier Transform in mili-second,
# relating to a data size transferred to a GPU at once.
# e.g., 10 ms
stft_width_ms_desired 100

# Set Integration Time in micro-second.
# e.g., 2 us. If 0 then no integration.
integration_time_us_desired 2

# Set Signal-to-Noise Ratio Threshold for Pulse Detection.
snr_threshold 7

# Set Observation Parameters.
sampling_freq_MHz 1024 # 1024 mega-sample/s
adc_RF_min_MHz    6600 # Minimum RF/MHz of the A/D converted band; e.g., 6600 or 8192.
eff_RF_min_MHz    6606 # Minimum RF/MHz of the effective band for analysis; e.g, 6606 or 8198.
eff_RF_max_MHz    7106 # Maximum RF/MHz of the effective band for analysis; e.g, 7106 or 8698.
band_inverted     true # 'true' when inverted by Higher Order Sampling, or 'false'
datum_size_bit    2
data_format       ADS1K # Linear1B, ADS1K (= ADS3KP_VSISEL11 via OCTAVIA)
use_gpu           true # true or false
save_images       true # true or false
partition_width_byte 256000000 # Data size/B loaded from a file at once.

各パラメータの意味はおおよそ予想できるかと思います。要点だけ列挙すると下記の通りです。

実行

pulse_searcher は四つの引数を取り、例えば次のように実行します。

$ ./pulse_searcher 2018001020000_hit32cr_crab.raw crab-6g.conf u18001-band.txt /home/USER/pulsar

各引数は次の通りです。

第一引数 = データファイル (2018001020000_hit32cr_crab.raw)
データファイル名は YYYYDOYhhmmss_(any).(any) という書式とし、そのファイルのデータの記録開始時刻を UTC で {year 4 digits}{day-of-year 3}{hour 2}{minute 2}{second 2} と示す必要があります。 文字列 any は任意で、上記例の hit32cr_crab は Hitachi32m C-band RHCP による Crab pulsar のデータであることを示しています。
第二引数 = 解析設定ファイル (crab-6g.conf)
記載内容は当該セクションをご覧ください。
第四引数 = 受信機帯域特性を表すパワースペクトルデータ。
生データを FFT して |FFT|2 を計算したパワー値。 power_spectrum の引数 sidebandDSB を指定すれば、そのデータを得られます。 データ点数 (FFT点数) は任意ですが、帯域特性を十分表現できるような点数であるべきです (昔のアジレントスペアナの401点データでは不十分です)。
第三引数 = 出力先ディレクトリ (/home/USER/pulsar)
ファイルを出力するディレクトリをフルパスで指定します。ディレクトリへの書き込み権限に注意してください。

ただし上記のように実行できるのはシステムにMATLAB環境変数を設定している場合です。 あまり使わない環境変数をシステムに設定するのは利口ではないので、環境変数を含めたスクリプト pulse_searcher_interface.sh (下記) を用意しました。

$ vi pulse_searcher_interface.sh

#!/bin/bash
set -u
LANG=C

###
### EDIT BELOW: MATLAB Environment
###
# mcr_root = the absolute path of the directory where the MATLAB Runtime is installed.
# version  = the version of the MATLAB Runtime
mcr_root=/home/oper/MATLAB/MATLAB_Runtime
version=v94
export LD_LIBRARY_PATH=${mcr_root}/${version}/runtime/glnxa64:${mcr_root}/${version}/bin/glnxa64:${mcr_root}/${version}/sys/os/glnxa64:${mcr_root}/${version}/sys/opengl/lib/glnxa64

execut=/home/oper/MATLAB/pulse_searcher/application/pulse_searcher
outdir=/home/oper/workspace/pulsar

###
### MAIN
###
EXEC=$(basename $0)
if [ $# -ne 3 ]; then
    echo "USAGE:"
    echo "$ ${EXEC} {directory including *.raw} {config} {band}"
    echo "e.g.,"
    echo "$ ${EXEC} /mnt/data/p19001a/ crab-6GHz.txt double-side-band.txt"
    exit 1
fi
datadir=$1
config=$2
band=$3

# Lists data files
echo "Conf: ${config}"
echo "Band: ${band}"
echo "Data:"
filelist=$(find ${datadir} -name *.raw | sort)
for file in ${filelist}; do
    echo "  ${file}"
done

# Confirm to continue
read -p "Continue? [y/n]: " yn
if [ ${yn} != y ]; then
    echo "Process terminated."
    exit 2
fi

# Analysis
for file in ${filelist}; do
    ${execut} ${file} ${config} ${band} ${outdir}
done
exit 0

実行方法は以下。

$ ./pulse_searcher_interface.sh ← 使い方が表示される
$ ./pulse_searcher_interface.sh  /mnt/raid/p19001a  crab-6g.conf  2019001010203_spectrum.txt

3つの引数はそれぞれ以下の通りです。

Argument 1
データファイル (*.raw) があるディレクトリ名。
Argument 2
上述の解析設定ファイル。
Argument 3
実数データをFFTして2乗した、エルミート共役部分もある両サイドバンドの電力スペクトルデータ。power_spectrum で引数 sideband にDSBを指定すれば得られる。

出力ファイルについて

出力ファイルは以下の四種類です。

*.log
解析ログファイル
*_dd.sh
入力データファイルから、パルスのデータ領域のみを抽出するスクリプト (実体は Linux コマンド dd を列挙しただけ)。
スクリプト中の COUNT の値で抽出範囲を指定可能。bs=256000 としているので、1024 MS/s, 2 bit/S (= 256 000 000 B/s) のデータの場合 bs = 1 ms であり、COUNT の単位は ms となります。
*_pulses.csv
検出されたパルスのリスト。MEAN, STDEV の値は外れ値 (解析設定ファイルで指定された snr_threshold) を除くノイズの平均値と偏差ですが、自動処理なので信号成分を含んでいます。よってそれから計算される SNR も厳密には S/N を表しません。 正しく S/N を出すには *_dd.sh で取り出したパルスデータを逐一再解析する必要があります。
*.png
検出されたパルスの画像 (パルスが検出できなければ出力されません)。 一番上のパネルは生のスペクトログラム (ダイナミックスペクトル) を表示しており、かなりS/Nの高いパルスが受かっていれば、ディスパージョンの様子が見えます。 カラーリングは自動であり、意味のあるカラースケールではないです。 真ん中のパネルは、帯域特性を除去し、デディスパージョンしたスペクトログラムを表しています。 一番下のパネルはパルスを表しています。