HSC 解析講習会用チュートリアル¶
Rawdata の準備¶
Pipeline とアストロメトリ用カタログファイルはインストール済みですので、まず、rawdata をダウンロードしましょう。
# 個人の解析ディレクトリを作成します。
cd /data/users
mkdir [User Name]
# 自分の好きなように作って下さい。
# Rawdata をローカルディスクにダウンロード
wget http://hsc.mtk.nao.ac.jp/HSC_Training_download/hdfn-6CCD.tar.gz -P /data/users/[User Name]
# Rawdata を展開
cd /data/users/[User Name]
tar xvf hdfn-6CCD.tar.gz
# Rawdata の確認
cd hdfn-6CCD/
ls | wc -l
# 結果が 180 であれば問題ありません。
# どのような画像が撮れているのか確認してみましょう。
ds9 xxxxx.fits
# どれでもいいので、自分の好きなファイルを選んでください。
ここで、生データと pipeline 内部でのデータ名について復習しておきましょう (データ名について)。解析コマンドの中でデータを指定する際にも必要になります。
Note
Q1. 生データの fits ファイル名から、CCD ID がわかります。テキストの「読み出し系とデータの関係」の図でどの CCD に対応しているか確認してみましょう。
続いて、解析用ディレクトリを準備し、レジストリを作成します。
# HSC pipeline セットアップコマンドの登録
source /data/users/opt/hscpipe/4.0.5/bashrc
# HSC pipeline を呼び出すためのセットアップコマンド (ログインの度に必ず行ってください)
setup-hscpipe
# 解析用ディレクトリ(リポジトリの親ディレクトリ)の作成
mkdir /data/users/[User Name]/HSC
# _mapper ファイルの作成 (これがないと処理が進みません)
echo 'lsst.obs.hsc.HscMapper' > /data/users/[User Name]/HSC/_mapper
/data/users/[User Name]/HSC の下を確認すると、_mapper という名前のファイルが作られています。これで解析用ディレクトリの準備は完了です。
次に、rawdata を解析用ディレクトリに配置し、登録します。
# 生データのあるディレクトリに移動
cd /data/users/[User Name]/hdfn-6CCD
# 解析ディレクトリ下にレジストリを作成
hscIngestImages.py /data/users/[User Name]/HSC HSC*.fits --mode=link --create
# --mode は link, move などがあります。link にすると生データへのリンクを作成します。
cd /data/users/[User Name]/HSC
sqlite3 /data/users/[User Name]/HSC/registry.sqlite3
sqlite> .header on
sqlite> SELECT visit, filter, field, count(visit)
FROM raw
GROUP BY visit, filter, field;
# 以下のように、カラムの右端 (= CCD 数) が全て 6 になっていればOK.
visit|filter|field|count(visit)
212|HSC-Y|DOMEFLAT|6
214|HSC-Y|DOMEFLAT|6
216|HSC-Y|DOMEFLAT|6
218|HSC-Y|DOMEFLAT|6
220|HSC-Y|DOMEFLAT|6
710|HSC-Y|HDFN|6
712|HSC-Y|HDFN|6
714|HSC-Y|HDFN|6
716|HSC-Y|HDFN|6
718|HSC-Y|HDFN|6
950|HSC-I|HDFN|6
952|HSC-I|HDFN|6
954|HSC-I|HDFN|6
...
# ここで見えているカラム名で解析に使うデータを指定します。
# それぞれの filter, field の visit 何番から何番までかをメモしておきましょう。
# 全てのカラムが見たい場合は
sqlite> select * from raw;
# 終了
sqlite> .q
以上で rawdata の準備は終了です。
較正用データの作成¶
フラットデータの作成¶
ドームフラットからフラットデータを作成します。これはそれぞれのバンドで実行します。
reduceFlat.py /data/users/[User Name]/HSC \
--rerun=calib_tutorial \
--id field=DOMEFLAT filter=HSC-Y \ # これは y バンドの場合です。filter ごとに計 3 回走らせます。
--detrendId calibVersion=calib_tutorial \
--config isr.doBias=False \
isr.doDark=False \
--batch-type=smp --cores=6
# rerun とは HSC pipeline で使われる解析プロセスの概念です。後ほど詳しく説明します。
# --id は入力データを検索する条件を入れます。今回は field と filter を指定していますが、visit 番号を指定することもできます (visit 980 から 994 まで二つ飛び;visit=980..994:2)。
# 基本的には visit 指定を推奨していますが (pipeline マニュアルでは全て visit 指定です)、講習会では直観的に理解しやすい field 指定にしています。
# field などで指定する場合は、 FITS ヘッダが間違っていたときに、どのデータが入力されたのかわかりにくくなるのでご注意下さい。
# 今回はバイアス、ダークは使用しないので、--config isr.doBias=False、isr.doDark=False というオプションをつけています。
# --batch-type=smp --cores=6 は「ローカルコンピュータ上で処理を実行、6 スレッドで」という意味です。
# このあたりのパラメータについては後ほど解説します。
Note
Q2. –id を visit 指定にした場合、i, z, y それぞれでどのように書けるでしょうか?
上の y バンドの例では、 /data/users/[User Name]/HSC/CALIB/FLAT/[dateObs]/[filter]/[calibVersion] の下にフラットデータ (FLAT-[ccd].fits) ができます。ds9 で好きな画像ファイルを選んで、できた画像を確認してみましょう。 続いて、filter=HSC-Y を HSC-I, HSC-Z として同様に走らせましょう。
そして、出来上がったフラットデータをレジストリに登録します。これを忘れると、以降の解析がすべて失敗します。
# レジストリに登録
genCalibRegistry.py \
--root=/data/users/[User Name]/HSC/CALIB \
--camera=HSC \
--validity=30 \
--create
# --validity: キャリブレーションデータが適用される日数。
# キャリブレーションデータを取得した日を挟んだ XX 日間に取得されたデータにはこのキャリブレーションデータは有効、という意味。
# 観測が複数ランに渡っている場合、それぞれの期間で正しく有効期間を設定しないとキャリブレーションデータが使えません。
これでフラットデータの作成は終了です。
フリンジデータの作成¶
フリンジデータは天体画像のスタックから生成されます。今回のデータのうち、y バンドについてはフリンジデータから画像の干渉縞を除去する必要があります。 Pipeline ではフリンジデータ作成はデフォルトでは y バンドと NB0921 のみ対応しています。
# フリンジデータ(y-band のみ)
reduceFringe.py /data/users/[User Name]/HSC \
--rerun=calib_tutorial \
--id field=HDFN filter=HSC-Y \
--detrendId calibVersion=calib_tutorial \
--config isr.doBias=False \
isr.doDark=False \
--batch-type=smp --cores=6
# 天体画像を使うため、field=HDFN を指定。
# field 指定より visit 指定のほうが好きな場合は visit=710..718:2 でも OK。
完了すると、 /data/users/[User Name]/HSC/CALIB/FRINGE/[dateObs]/[filter]/[calibVersion] の下にフリンジデータ (FRINGE-[ccd].fits) ができます。フリンジデータができていることを確認したら、フラットデータと同様にレジストリに登録しましょう。コマンドはフラットデータの時と同じです。どんな画像ができたのか気になる人は ds9 で確認してみましょう。
# レジストリに登録
genCalibRegistry.py \
--root=/data/users/[User Name]/HSC/CALIB \
--camera=HSC \
--validity=30 \
--create
以上でフリンジデータの作成は終了です。
キャリブレーションデータレジストリは /data/users/[User Name]/HSC/CALIB/calibRegistry.sqlite3 です。これも生データ同様、SQL で確認できます。
cd /data/users/[User Name]/HSC/CALIB
sqlite3 calibRegistry.sqlite3
# ヘッダ情報読み込み
sqlite> .header on
# テーブルを表示
sqlite> .tables
bias dark flat fringe
# flat, fringe テーブルに登録したデータが入っている
sqlite> select * from flat;
id|validStart|validEnd|calibDate|filter|calibVersion|ccd
1|2014-02-23|2014-04-24|2014-03-25|HSC-Y|calib_tutorial|42
2|2014-02-23|2014-04-24|2014-03-25|HSC-Y|calib_tutorial|58
3|2014-02-23|2014-04-24|2014-03-25|HSC-Y|calib_tutorial|57
4|2014-02-23|2014-04-24|2014-03-25|HSC-Y|calib_tutorial|50
5|2014-02-23|2014-04-24|2014-03-25|HSC-Y|calib_tutorial|41
6|2014-02-23|2014-04-24|2014-03-25|HSC-Y|calib_tutorial|49
7|2014-02-26|2014-04-27|2014-03-28|HSC-Z|calib_tutorial|42
8|2014-02-26|2014-04-27|2014-03-28|HSC-Z|calib_tutorial|58
9|2014-02-26|2014-04-27|2014-03-28|HSC-Z|calib_tutorial|57
...
# ccd が全て揃っているか、validStart/validEnd は --validity で指定した日数になっているかは見ておきましょう。
CCD ごとの解析¶
ここでは、天体データの 1 次処理後に、次の解析プロセスである天体データの位置合わせとフラックススケール決めのために等級原点と座標決めも行われます。そこでまずアストロメトリ用のカタログファイルを設定します。
# ログインの度に必ず行ってください。
setup astrometry_net_data ps1_pv3_3pi_20170110
次に CCD 毎の解析を走らせます。まず、天体データの一次処理 (フリンジ除去、フラット割り、その他装置固有の処理) が行われます。そして、sky を引き、天体検出を行います。検出された天体はカタログファイルとマッチングされ、等級原点と座標決めが行われます (reduceFrames.py ではこの等級原点と座標決めが2回走ります)。最終的に一次処理済み画像と sky 画像などの画像データと、カタログデータが生成されます。
reduceFrames.py /data/users/[User Name]/HSC \
--rerun=tutorial \
--id field=HDFN \
--config processCcd.isr.doBias=False \
processCcd.isr.doDark=False \
doSolveTansip=False \
--batch-type=smp --cores=6
# --rerun=tutorial を指定しています。ここからは本解析に入るので、先程の calibration とは rerun 名を変えます。
# --id は visit 指定を推奨します。
# --config doSolveTansip=False : これは視野全体の WCS を決定するプロセスで、デフォルトは True。今回は CCD 6 枚でしか座標決めを行っておらず、うまく解けない可能性があるのでスキップします。
# 以降で mosaic を行う場合はスキップしても大きな影響はありませんが、通常のすべての CCD を解析する場合は、精度を上げるためにもスキップしないほうが良いです。
こちらのページ -> パラメータの説明
- 1 次処理済天体画像(sky も引き済) :CORR-[visit]-[ccd].fits
- sky 引きで用いられた sky 画像 :BKGD-[visit]-[ccd].fits
- overscan 引きの結果サムネイル :oss-[visit]-[ccd].png
- Flat データで補正した天体画像サムネイル :flattened-[visit]-[ccd].png
座学でも説明があった通り、CORR 画像には Science イメージ以外にも Mask イメージと Variance イメージがついています。 それぞれ、CORR-[visit]-[ccd].fits[1], CORR-[visit]-[ccd].fits[2], CORR-[visit]-[ccd].fits[3] です。 ds9 で Mask イメージを開いてみましょう。
# ds9 でマスクイメージを開く
ds9 /data/users/[User Name]/HSC/rerun/tutorial/00816/HSC-Z/corr/CORR-0001042-041.fits[2]
Mask イメージの値は header を見て確認しましょう。
Note
Q3. Mask イメージの値が 1024 になっている領域はどのマスクイベントでしょうか?
次に、等級原点と座標決めのために用いられたカタログデータを紹介します。生成された全てのカタログデータは /data/users/[User Name]/HSC/rerun/[rerun]/[pointing]/[filter]/output の下にあります。
- 1 度目の等級原点、座標決めのために天体画像から検出された比較的明るい天体のカタログ : ICSRC-[visit]-[ccd].fits
- 1 度目の等級原点、座標決めに用いられた天体のマッチリスト (検出された天体のうち、アストロメトリ用カタログの中に一致するものがあった天体) : MATCH-[visit]-[ccd].fits
- MATCH-[visit]-[ccd].fits をカラムに展開したもの : ML-[visit]-[ccd].fits
- 2 度目の等級原点、座標決めのために天体画像から検出された天体のカタログ : SRC-[visit]-[ccd].fits
- 2 度目の等級原点、座標決めに用いられた天体のマッチリスト : SRCMATCH-[visit]-[ccd].fits
- SRCMATCH-[visit]-[ccd].fits をカラムに展開したもの : SRCML-[visit]-[ccd].fits
このリストの中にある MATCH- と ML- の中の情報は基本的には同じです。しかし、MATCH- では HSC pipeline の中でのみ参照できる ID 番号が割り振られているのに対し、ML- は HSC pipeline 以外でも参照できる仕様になっています。 これらカタログデータは .fits の形式ですが画像データではありませんので、ds9 では中身を見ることはできません。 中身を確認するには —> こちら
以上で CCD ごとの解析は終了です。
位置合せとフラックススケール決め (モザイク)¶
tract 定義¶
全ての天体データを使い、 tract を定義します。天球面をぶつ切りにした領域を tract と呼び、一つの tract は一つの平面に投影されます。 1 視野くらいのデータの場合は、その画像を全て含むような tract を定義しなおします。 ここで使用する makeDiscreteSkyMap.py ではヘッダーの座標情報をもとにデータの全観測領域に収まる最大の正方形を設定し、この領域を 1 tract と定義します。 tract は観測された領域全体から決められるため、必ず全ての天体データを指定し makeDiscreteSkyMap.py を実行してください。 同じ天体を2つ以上のフィルタで観測し、そのフィルタごとに makeDiscreteSkyMap を行うと tract/patch の切り方は若干ずれてしまいます。 その後 stack, multiband と進む場合は patch の切り方がずれてしまうのでうまくいきません。必ず全ての領域、フィルタを含むように行って下さい。
makeDiscreteSkyMap.py /data/users/[User Name]/HSC \
--rerun=tutorial \
--id field=HDFN
tract 0 has corners (189.998, 61.807), (188.417, 61.807), (188.398, 62.553), (190.018, 62.553) (RA, Dec deg) and 4 x 4 patches のように出力されると成功です。ここで、patch とは tract をさらに細かく分けたものです。デフォルトの設定では 1 tract 中に 100 patch あり、 1 patch が 4200 × 4200 ピクセル四方の正方形で定義されています。これで tract 0 番が定義されました。 この tract/patch の座標情報は /data/users/[User Name]/HSC/rerun/[rerun]/deepCoadd/skyMap.pickle に書かれます。 skyMap.pickle は同一 rerun 内では makeDiscreteSkyMap.py のたびに上書きされるのでご注意ください。
モザイク¶
モザイクでは、各 [visit, ccd] の等級原点と座標決めの情報に複数の visit の情報を加え、より精密に各 [visit, ccd] の位置合わせとフラックススケールを決定します。
mosaic.py /data/users/[User Name]/HSC \
--rerun=tutorial \
--id field=HDFN filter=HSC-Y tract=0 # filter を書き換えて計 3 回走らせます。
# mosaic.py はシングルプロセスで動きますので、--batch-type, --cores の指定をしてはいけません。
天体データの重ね合わせ (スタック)¶
モザイクによって生成されたデータを用いて、天球面座標を平面座標に投影したデータを生成し(warp)、観測された全ショットの積分を行います(coadd)。
stack.py /data/users/[User Name]/HSC \
--rerun=tutorial \
--id filter=HSC-Y tract=0 \ # filter はここと
--selectId field=HDFN filter=HSC-Y \ # ここにあるので注意!!
--batch-type=smp --cores=6
filter を HSC-I, HSC-Z として同様に走らせて下さい。上記のコマンドでは、filter 情報は二箇所に入りますので両方書き換えて下さい。 Coadd 画像は /data/users/[User Name]/HSC/rerun/[rerun]/deepCoadd/[filter]/[tract]/[patch] の下の calexp-[filter]-[tract]-[patch].fits です。また、warp 画像 (warp-[filter]-[tract]-[patch]-[visit].fits) も同じフォルダに生成されます。 warp 画像が足し合わせる前の画像ですので、もし coadd 画像におかしな点が見られた場合は、まず warp 画像を確認してみましょう。 また、stack.py 以降のプロセッシングではデータは上書きされず、スキップされるので、再度解析を行う場合は古い calexp 画像や warp 画像は移動させてください。
さらに、/data/users/[User Name]/HSC/rerun/[rerun]/deepCoadd-results/[filter]/[tract]/[patch] には検出された天体のカタログ (det-[filter]-[tract]-[patch].fits) と sky 引きのパターン (bkgd-[filter]-[tract]-[patch].fits) ができます。この det- カタログが次のステップのマルチバンド解析で使われることになります。 スタック後の画像を一度に表示させたい場合は、i バンドの場合であれば、
cd /data/users/[User Name]/HSC/rerun/tutorial/deepCoadd/HSC-I/0
ds9 -mosaic wcs */calexp-*.fits
で確認することが可能です (ただし、全 104 CCD でこれをやるとかなりのメモリを消費しますのでご注意ください)。
今回は中心の 6 CCD のみを使用しましたが、全ての CCD を使用した場合はこのようになります
–> こちら
以上でスタックが完了です。
マルチバンド解析¶
スタックによって生成されたそれぞれのフィルタの天体カタログをマージして、マルチバンドで測光しなおし、新たにカタログを生成します。
multiBand.py /data/users/[User Name]/HSC \
--rerun=tutorial \
--id tract=0 filter=HSC-Z^HSC-I^HSC-Y \ # 使うフィルタを全選択。
--batch-type=smp --cores=6
# --id ではマルチバンド解析で使用する全てのデータを指定します。
まず最初に各 filter で検出された天体カタログを集めて天体の位置情報のマージカタログを作成します(mergeDet)。この時、デブレンド(2 つの天体が近接していて重なって見える時にその 2 つの天体を分離するプロセス)も行われます。 mergeDet カタログをもとに各 filter の stack 画像に戻って天体の測光を行います(meas)。 その後、各 filter の meas カタログで得られた天体の位置情報を再度集め直して、全ての filter で共通の座標情報を持つ天体カタログを作成します(ref)。 この ref カタログの位置情報をもとに天体の測光を filter 毎に改めて行い、forced_src- カタログが生成されます。 multiBand も stack と同様、古いデータが残っているとプロセスがスキップされます。
生成されるファイルを以下にまとめます。
/data/users/[User Name]/HSC/rerun/[rerun]/deepCoadd-results/merged/[tract]/[patch] ;
- 天体の位置情報のマージカタログ : mergeDet-[tract]-[patch].fits
- meas カタログをもとに生成される天体の位置情報カタログ : ref-[tract]-[patch].fits
/data/users/[User Name]/HSC/rerun/[rerun]/deepCoadd-results/[filter]/[tract]/[patch] ;
- mergeDet をもとに測光した天体カタログ : meas-[filter]-[tract]-[patch].fits
- 外部カタログとマッチした天体カタログ : measMatch-[filter]-[tract]-[patch].fits
- ML と同様に measMatch に座標情報などを追加し、カラムに展開したもの : measMatchFull-[filter]-[tract]-[patch].fits
- 最終天体カタログ : forced_src-[filter]-[tract]-[patch].fits
“forced” とは、共通の座標、shape 情報を全バンドの測光に対して適用したものです。 measMatchFull 内のフラックスは “forced” ではなく、”unforced” で測定されたものであることに注意して下さい。 “unforced” とは、ピーク位置や shape 情報は測光を行った各バンドのものを使うということです。
スタック画像をレファレンスにした各 CCD の測光¶
ここでは、スタック後の天体カタログ (複数バンドをマージしたもの) の位置情報を使い、 各 [visit, ccd] データで天体を検出、測光し、カタログを生成し直すという作業が行われます。
forcedCcd.py /data/users/[User Name]/HSC \
--rerun=tutorial \
--id field=HDFN tract=0 \
--batch-type=smp --cores=6
これを実行すると /data/users/[User Name]/HSC/rerun/[rerun]/[pointing]/[filter]/tract[tract] の下に FORCEDSRC-[visit]-[ccd].fits というカタログができます。
各 CCD 画像, カタログを較正しなおす¶
最後にモザイクによって決められた等級原点と WCS を、各 CCD 画像、カタログに反映させましょう。 WCS とゼロ点の較正された画像/カタログが不要な場合は行う必要はありませんが、講習会なので一通りやっていきます。
# 画像を較正しなおす
calibrateExposure.py /data/users/[User Name]/HSC \
--rerun=tutorial \
--id field=HDFN tract=0 \
-j 6
# -j : スレッド数を指定。-j 6 とすると、6 スレッドで、という意味になる。
# カタログを較正しなおす
calibrateCatalog.py /data/users/[User Name]/HSC \
--rerun=tutorial \
--id field=HDFN tract=0 \
--config doApplyCalib=False \
-j 6
# --config doApplyCalib=False : カタログのフラックスを等級に較正しない場合は False にする
calibrateExposure.py が終了すると、/data/users/[User Name]/HSC/rerun/[rerun]/[pointing]/[filter]/corr/[tract] 以下に CALEXP-[visit]-[ccd].fits というファイルが生成されます。 また、calibrateCatalog.py で較正されたカタログは、/data/users/[User Name]/HSC/rerun/[rerun]/[pointing]/[filter]/output/[tract] 以下の CALSRC-[visit]-[ccd].fits です。
以上で全ての解析が終了です。
疑似カラー画像作成¶
それでは、解析で出来上がったデータを元に、疑似カラー画像を作成してみましょう。
必要なスクリプトをコピーしてきます。
cd /data/users/[User Name]/ wget http://hsc.mtk.nao.ac.jp/HSC_Training_download/script/stitchPatches.py # スクリプトの中身は各自で確認下さい。 # 日本語が文字化けしている場合は、 # メニューから「Terminal/Set Character Encoding/Unicord(UTF-8)」を選び、export LC_ALL=ja_JP.UTF-8 をしてください。
パッチに分かれていた画像を1つの大きな画像にします。
python stitchPatches.py -o HSC-Y.fits -x 5000 11000 -y 5000 11000 HSC/rerun/tutorial/deepCoadd/HSC-Y/0/*/calexp-*.fits python stitchPatches.py -o HSC-Z.fits -x 5000 11000 -y 5000 11000 HSC/rerun/tutorial/deepCoadd/HSC-Z/0/*/calexp-*.fits python stitchPatches.py -o HSC-I.fits -x 5000 11000 -y 5000 11000 HSC/rerun/tutorial/deepCoadd/HSC-I/0/*/calexp-*.fits # または、 for f in Y Z I ; do python stitchPatches.py -o HSC-$f.fits -x 5000 11000 -y 5000 11000 HSC/rerun/tutorial/deepCoadd/HSC-$f/0/*/calexp-*.fits ; done
ds9のカラーモードで表示します。
ds9 -rgb -red HSC-Y.fits -green HSC-Z.fits -blue HSC-I.fits
色を調整します。
- 各フィルタごとに次の操作をして色を調整します
- メニューから Frame/RGB... を選ぶ。
- 「R」「G」「B」からチャンネルを選ぶ。
- メニューから Scale/Scale Parameters... を選ぶ。
- スケールの最小値、最大値を調整する。
- メニューから Color/Colormap Parameters... を選ぶ。
- Contrast, Biasを調整する。
- (おすすめの調整の仕方)
- フィルタごとに
メニューから Scale/Log を選ぶ。
- メニューから Scale/Scale Parameters を選ぶ。
- 最小値を0、最大値を100くらいにする。
- png形式で保存します。
- メニューから File/Export/png を選ぶ。
- HDFN.png の名前で保存する。
保存した画像を確認します。
eog HDFN.png # または firefox HDFN.png
色等級図作成¶
今回 2. で使用する catalog_all*.py では、bulter でカタログ内の欲しいデータをどう取ってくるかが書かれています。これを応用することで自分の欲しいデータを正しく取得することができるようになりますので、 是非一度読んでみて下さい。
必要なスクリプトをコピーします。
cd /data/users/[User Name] wget http://hsc.mtk.nao.ac.jp/HSC_Training_download/script/catalog_all_{I,Y,Z}.py wget http://hsc.mtk.nao.ac.jp/HSC_Training_download/script/catalog.sh wget http://hsc.mtk.nao.ac.jp/HSC_Training_download/script/fig_izy.py
各バンドで作成したカタログから、butler を用いて天体の ID と PSF flux を取得し、一つのファイルにまとめます。
python catalog_all_I.py /data/users/[User Name]/HSC/rerun/tutorial 0 HSC-I > HSC-I.txt python catalog_all_Z.py /data/users/[User Name]/HSC/rerun/tutorial 0 HSC-Z > HSC-Z.txt python catalog_all_Y.py /data/users/[User Name]/HSC/rerun/tutorial 0 HSC-Y > HSC-Y.txt sh catalog.sh
一つにまとめたファイルを使って、色等級図を表示します。
python fig_izy.py
表示された図を保存します。
- save the figureのボタンを押す。
- 保存する名前を決めてsaveボタンを押す。
保存した図を確認します。
eog hoge.png # または firefox hoge.png
以上で実習の内容はすべて終了です。お疲れ様でした。