PHITS

PHITS
Multi-Purpose Particle and Heavy Ion Transport code System
特別実習
スクリプト言語を用いたPHITSの連続実行
2015年2月改訂
title
1
本実習の目標
スクリプト言語の基本的な使用方法を習得し、複数
回のPHITSの実行を自動的にできるようにする。
@echo off
SET PHITSEXE=“C:\phits\bin\phits274_win.exe“
for /l %%i in (1, 1, 3) do (
%PHITSEXE% < lec0%%i.inp
copy phits.out phits%%i.out
)
pause
exit
Lec01.inp, lec02.inp, lec03.inpを
連続で実行するスクリプト
Purpose
2
スクリプト言語とは
ソフトウェアの動作内容を記述し制御するための、
簡易的なプログラミング言語
• コマンドプロンプト(Windowsの場合)で実行で
きるコマンドを書き並べたファイルを作ることで、
様々なソフトウェアの動作を自動的に実行する
ことができる
• テキストエディタで編集でき、拡張子がbatであ
れば使用可能(Windowsの場合)
• ファイルのコピーや移動、ファイルの内容の読
み込みや書き出しが可能
• あるソフトウェアを実行するコマンドを複数書く
ことでその回数分の実行が可能
Script
3
実習内容
1. Windows版
2. Mac版
Table of contents
4
課題1
“Hello PHITS world”と出力されるスクリプトファ
イルを作成してみましょう
• テキストエディタでtest.batを開く
• Echoコマンドを使う
Echo ***
と書くことで***の部分が書き出される
• test.batをダブルクリックして実行
おまじない1
不必要な情報が
出力されなくなる
おまじない2
スクリプト終了
時に一旦停止
Test-1.bat
@echo off
ここにコマンドを書く
pause
exit
Script
5
課題1の答え合わせ
“Hello PHITS world”と出力されるスクリプトファ
イルを作成してみましょう
Test-1.bat
@echo off
echo Hello PHITS world
pause
exit
実行すると、
Script
6
課題2
“Hello PHITS world”を新規ファイルfile.txtに書き
出すスクリプトファイルを作成してみましょう
• テキストエディタでtest-2.batを開く
• Echoコマンドを使う
Echo *** > file.txt
と>(リダイレクト)を使って書くことで***の部分がfile.txt
に書き出される
• Test-2.batをダブルクリックして実行
Test-2.bat
>(リダイレクト)を使う
@echo off
echo Hello PHITS world
pause
exit
Script
7
課題2の答え合わせ
“Hello PHITS world”を新規ファイルfile.txtに書き
出すスクリプトファイルを作成してみましょう
Test-2.bat
@echo off
echo Hello PHITS world > file.txt
pause
exit
実行すると、file.txtというファイルが作られる
file.txt
Hello PHITS world
Script
8
課題3
変数に“Hello PHITS world”を代入してfile.txtに
書き出してみましょう
• Setコマンドを使う
Set aaa= ***
と書くことで*** (文字列)の部分が変数aaaに代入される
• 書き出しはechoコマンドを使う
変数を使う場合は%aaa%のように%記号で囲む
Test-3.bat
変数aaaに代入しましょう
@echo off
Set
echo
Hello PHITS world
> file.txt
pause
exit
変数aaaを書き出しましょう
Script
9
課題3の答え合わせ
変数に“Hello PHITS world”を代入してfile.txtに
書き出してみましょう
Test-3.bat
=の前後に空白を入れない
ように注意しましょう
@echo off
set aaa=Hello PHITS world
echo %aaa% > file.txt
pause
exit
実行すると、file.txtの内容は
file.txt
Hello PHITS world
Script
10
課題4
数字を代入した変数を使って定義したfile2.txtに
“Hello PHITS world”を書き出してみましょう
• Setコマンドを使う
Set /a iii= ***
と書くことで***(数字)の部分が変数iiiに数値として代入される
Set /a iii=iii+1
と書くことで演算が可能
• 文字列の一部として変数を使うことができる
file%iii%.txt のように%記号で囲んだものを差し込む
Test-4.bat
@echo off
1が入っている変数iiiを
2にするには?
set aaa=Hello PHITS world
set /a iii=1
set /a
echo %aaa% > file.txt
File2.txtとなるように
書きかえましょう
pause
exit
Script
11
課題4の答え合わせ
数字を代入した変数を使って定義したfile2.txtに
“Hello PHITS world”を書き出してみましょう
Test-4.bat
@echo off
set aaa=Hello PHITS world
set /a iii=1
set /a iii=iii+1
echo %aaa% > file%iii%.txt
pause
exit
実行すると、file2.txtが新しく作成され
file2.txt
Hello PHITS world
Script
12
課題5
File.txtの内容を読み込んでfile2.txtに追記しましょう
• forコマンドを使う
for /f "tokens=1-3" %%a in (file.txt) do (
コマンド
)
と書くことでfile.txtから読み込んだ情報を使って括弧()で
囲まれたコマンドを実行する
• 読み込みは1行ずつ行い、読み込んだ情報は変
数%%a, %%b, %%cに代入される
• “tokens=1-3“をオプションとして書くことにより、空白を
区切りとして左から3つの情報が変数として代入される
• Echoコマンドを使う
Echo %%a >> file2.txt
と書くことで変数%%aの内容がfile2.txtに追記される
(読み込んだ変数は%で挟む必要はない)
Script
13
課題5
File.txtの内容を読み込んでfile2.txtに追記しましょう
Test-5.bat
@echo off
set /a iii=2
for /f "tokens=1-3" %%a in (file.txt) do (
読み込んだ“Hello PHITS world”
がfile2.txtに追記されるように
しましょう
)
pause
exit
Script
14
課題5の答え合わせ
File.txtの内容を読み込んでfile2.txtに追記しましょう
Test-5.bat
@echo off
set /a iii=2
for /f "tokens=1-3" %%a in (file.txt) do (
echo %%a %%b %%c >> file%iii%.txt
)
変数%%aに”Hello”
%%bに” PHITS”
%%cに”world”
が代入されているので、
これらを並べて文章を作成する
pause
exit
実行すると、file2.txtの内容は
file2.txt
Hello PHITS world
Hello PHITS world
Script
15
課題6
File.txtをコピーしてfile1.txt, file2.txt, file3.txt
を作成しましょう
• copyコマンドを使う
Copy file.txt file1.txt
と書くことでfile.txtの内容がfile1.txtにコピーされる
• forコマンドを使う
for /l %%i in (1, 1, 3) do (
コマンド
)
と書くことで、変数%%iの数字を1→2→3と変えな
がら括弧()で囲まれたコマンドを実行する
Test-6.bat
@echo off
for /l %%i in (1, 1, 3) do (
変数%%iを使って、File.txtを
File%%i.txtにコピーしましょう
)
pause
exit
Script
16
課題6の答え合わせ
File.txtをコピーしてfile1.txt, file2.txt, file3.txt
を作成しましょう
Test-6.bat
@echo off
for /l %%i in (1, 1, 3) do (
copy file.txt file%%i.txt
)
pause
exit
実行すると、file1.txt, file2.txt, file3.txtが作成され
File1(2,3).txt
Hello PHITS world
Script
17
課題7
If文を使って、file2.txtにだけfile.txtの内容を
コピーするようなスクリプトを作成しましょう
• ifコマンドを使う
If %%i == *** (
コマンド
)
と書くことで変数%%iの数字が***の場合のみ
括弧()で囲まれたコマンドを実行する
Test-7.bat
@echo off
for /l %%i in (1, 1, 3) do (
copy file.txt file%%i.txt
)
Ifコマンドを使って、
変数%%iが2の場合
のみコピーするよう
にしましょう
pause
exit
Script
18
課題7の答え合わせ
If文を使って、file2.txtにだけfile.txtの内容を
コピーするようなスクリプトを作成しましょう
Test-7.bat
@echo off
for /l %%i in (1, 1, 3) do (
if %%i == 2 (
copy file.txt file%%i.txt
)
)
pause
exit
実行すると、file2.txtのみ作成される
Script
19
課題8
PHITSを実行するスクリプトを作成し、自動で
lec01.inpとlec02.inp, lec03.inpを計算してみましょう
• PHITSの実行コマンドを定義する
SET PHITSEXE=“C:\phits\bin\phits274_win.exe“
と書くことでPHITSの実行コマンドがセットされる
• PHITSの実行形式は < の後にインプットファイルを書く
%PHITSEXE% < lec01.inp
と書くことでlec01.inpを入力ファイルとした計算が実行 される
Test-8.bat
@echo off
SET PHITSEXE=“C:\phits\bin\phits274_win.exe“
for /l %%i in (1, 1, 3) do (
)
pause
exit
Script
• 変数%%iを使っ
て、3つのイン
プットファイルが
動作するようにし
ましょう
• Phits.outに番号
を付けてコピーし
ましょう
20
課題8の答え合わせ
PHITSを実行するスクリプトを作成し、自動で
lec01.inpとlec02.inp, lec03.inpを計算してみましょう
Test-8.bat
@echo off
SET PHITSEXE=“C:\phits\bin\phits274_win.exe“
for /l %%i in (1, 1, 3) do (
%PHITSEXE% < lec0%%i.inp
copy phits.out phits%%i.out
)
pause
exit
実行すると、phits1.out, phits2.out, phits3.outが作成される
Script
21
実習内容
1. Windows版
2. Mac版
Table of contents
22
課題1
“Hello PHITS world”と出力されるスクリプトファ
イルを作成してみましょう
•
•
•
テキストエディタでTest_mac-1.command を開く
Echoコマンドを使う
– Echo "***"
– と書くことでダブルクォーテーションで囲まれた***の部分
が書き出される
Test_mac-1.commandをダブルクリックして実行
おまじない1
Test_mac-1.command
Shift+@
#!/bin/sh
cd `dirname $0`
おまじない2
スクリプト終了
時に一旦停止
ここにコマンドを書く
echo "- push ENTER key to end -"
read WAIT
exit
Script
23
課題1の答え合わせ
“Hello PHITS world”と出力されるスクリプトファ
イルを作成してみましょう
Test_mac-1.command
#!/bin/sh
cd `dirname $0`
Echo " Hello PHITS world"
echo "- push ENTER key to end -"
read WAIT
exit
実行して表示されれば成功!
Script
24
課題2
“Hello PHITS world”を新規ファイルfile.txtに書き
出すスクリプトファイルを作成してみましょう
• テキストエディタでTest_mac-2.commandを開く
• Echoコマンドを使う
Echo *** > file.txt
と>(リダイレクト)を使って書くことで***の部分がfile.txtに
書き出される
• est_mac-2.commandをダブルクリックして実行
Test_mac-2.command
>(リダイレクト)を使う
#!/bin/sh
cd `dirname $0`
Echo " Hello PHITS world"
echo "- push ENTER key to end -"
read WAIT
exit
Script
25
課題2の答え合わせ
“Hello PHITS world”を新規ファイルfile.txtに書き
出すスクリプトファイルを作成してみましょう
Test_mac-2.command
#!/bin/sh
cd `dirname $0`
Echo " Hello PHITS world“ > file.txt
echo "- push ENTER key to end -"
read WAIT
exit
実行すると、file.txtというファイルが作られる
file.txt
Hello PHITS world
Script
26
課題3
変数に“Hello PHITS world”を代入してfile.txtに
書き出してみましょう
• 代入式を使う
aaa= "***"
と書くことで*** (文字列)の部分が変数aaaに代入される
• 書き出しはechoコマンドを使う
変数を使う場合は${aaa}のように$記号を先頭につける
($aaaのように{}を省略できる場合もある)
Test_mac-3.command
変数aaaに代入しましょう
#!/bin/sh
cd `dirname $0`
"Hello PHITS world "
echo
> file.txt
echo "- push ENTER key to end -"
read WAIT
exit
Script
変数aaaを書き出しましょう
27
課題3の答え合わせ
変数に“Hello PHITS world”を代入してfile.txtに
書き出してみましょう
Test_mac-3.command
=の前後に空白を入れない
ように注意しましょう
#!/bin/sh
cd `dirname $0`
aaa="Hello PHITS world "
echo $aaa > file.txt
echo "- push ENTER key to end -"
read WAIT
exit
実行すると、file.txtの内容は
file.txt
Hello PHITS world
Script
28
課題4
数字を代入した変数を使って定義したfile2.txtに
“Hello PHITS world”を書き出してみましょう
• 数字の演算を行う
iii=$(( $*** + 1 ))
と書くことで***(文字)の部分が数値として認識して
演算した後、変数iiiに文字として代入される
• 文字列の一部として変数を使うことができる
File${iii}.txt のように${}記号で囲んだものを差し込む
Test_mac-4.command
#!/bin/sh
cd `dirname $0`
変数iiiに1を代入しましょう
iii=iii+1の演算をさせiii=2
としましょう
aaa="Hello PHITS world"
echo $aaa > file.txt
echo "- push ENTER key to end -"
read WAIT
exit
Script
File2.txtとなるように
書きかえましょう
29
課題4の答え合わせ
数字を代入した変数を使って定義したfile2.txtに
“Hello PHITS world”を書き出してみましょう
Test_mac-4.command
#!/bin/sh
cd `dirname $0`
aaa="Hello PHITS world"
iii=1
iii=$(( $iii+1 ))
echo $aaa > file${iii}.txt
echo "- push ENTER key to end -"
read WAIT
exit
file1.txt
実行すると、file2.txtが新しく作成され
Hello PHITS world
Script
30
課題5
File.txtの内容を読み込んでfile2.txtに追記しましょう
• do whileコマンドを使う
それと同時に以下を実行
cat file.txt | while read a b c
do
ファイルを読み込むコマンド
コマンド
done
と書くことでfile.txtから読み込んだ情報を使って括弧do
doneで囲まれたコマンドを実行する
• 読み込みは1行ずつ行い、読み込んだ情報は変数a, b,
cに代入される
• 空白を区切りとして左から3つの情報を変数a,b,cに代
入される
• Echoコマンドを使う
Echo $a >> file2.txt
と書くことで変数aの内容がfile2.txtに追記される
Script
31
課題5
File.txtの内容を読み込んでfile2.txtに追記しましょう
Test_mac-5.command
#!/bin/sh
cd `dirname $0`
iii=2
cat file.txt | while read a b c
do
読み込んだ“Hello PHITS world”
がfile2.txtに追記されるように
しましょう
done
echo "- push ENTER key to end -"
read WAIT
exit
Script
32
課題5の答え合わせ
File.txtの内容を読み込んでfile2.txtに追記しましょう
Test_mac-5.command
変数aに”Hello”
bに” PHITS”
cに”world”
が代入されているので、
これらを並べて文章を作成する
#!/bin/sh
cd `dirname $0`
iii=2
cat file.txt | while read a b c
do
echo $a $b $c >> file${iii}.txt
done
echo "- push ENTER key to end -"
read WAIT
exit
file2.txt
実行すると、file2.txtの内容は
Hello PHITS world
Hello PHITS world
Script
33
課題6
File.txtをコピーしてfile1.txt, file2.txt, file3.txt
を作成しましょう
• cpコマンドを使う
cp file.txt file1.txt
と書くことでfile.txtの内容がfile1.txtにコピーされる
• Forコマンドを使う
for i in (seq 1 3)
do
コマンド
done
と書くことで、変数iの数字を1→2→3と変えながら
do doneで囲まれたコマンドを実行する
Test_mac-6.command
#!/bin/sh
cd `dirname $0`
for i in $(seq 1 3)
do
done
echo "- push ENTER key to end -"
read WAIT
exit
変数iを使って、file.txtを
file${i}.txtにコピーしましょう
Script
34
課題6の答え合わせ
File.txtをコピーしてfile1.txt, file2.txt, file3.txt
を作成しましょう
Test_mac-6.command
#!/bin/sh
cd `dirname $0`
for i in $(seq 1 3)
do
cp file.txt file${i}.txt
done
echo "- push ENTER key to end -"
read WAIT
exit
File1(2,3).txt
実行すると、file1.txt, file2.txt, file3.txtが作成され
Hello PHITS world
Script
35
課題7
If文を使って、file2.txtにだけfile.txtの内容を
コピーするようなスクリプトを作成しましょう
• ifコマンドを使う
[, =, ]のそれぞれの前後にスペースが必要
if [ i = *** ]
then
コマンド
fi
と書くことで変数iの数字が***の場合のみthen fiで囲まれたコマンドを実行する
Test_mac-7.command
#!/bin/sh
cd `dirname $0`
for i in $(seq 1 3)
do
cp file.txt file${i}.txt
done
echo "- push ENTER key to end -"
read WAIT
exit
Script
Ifコマンドを使って、
変数iが2の場合の
みコピーするように
しましょう
36
課題7の答え合わせ
If文を使って、file2.txtにだけfile.txtの内容を
コピーするようなスクリプトを作成しましょう
Test_mac-7.command
#!/bin/sh
cd `dirname $0`
for i in $(seq 1 3)
do
[, =, ]のそれぞれの前後にスペースが必要
if [ $i = 2 ]
then
cp file.txt file${i}.txt
fi
done
echo "- push ENTER key to end -"
read WAIT
exit
実行すると、file2.txtのみ作成される
Script
37
課題8
PHITSを実行するスクリプトを作成し、自動で
lec01.inpとlec02.inp, lec03.inpを計算してみましょう
• PHITSの実行コマンドを定義する
PHITSEXE=“/Users/***/phits/bin/phits274_mac.exe"
と書くことでPHITSの実行コマンドがセットされる
自身の環境に合わ
せてPATHを変える
• PHITSの実行形式は < の後にインプットファイルを書く
$PHITSEXE < lec01.inp
と書くことでlec01.inpを入力ファイルとした計算が実行 される
Test_mac-8.command
#!/bin/sh
cd `dirname $0`
PHITSEXE=“/Users/***/phits/bin/phits274_mac.exe"
for i in $(seq 1 3)
do
done
echo "- push ENTER key to end -"
read WAIT
Script
• 変数${i}を使っ
て、3つのイン
プットファイルが
動作するようにし
ましょう
• Phits.outに番号
を付けてコピーし
ましょう
38
課題8の答え合わせ
PHITSを実行するスクリプトを作成し、自動で
lec01.inpとlec02.inp, lec03.inpを計算してみましょう
Test_mac-8.command
#!/bin/sh
cd `dirname $0`
PHITSEXE=“/Users/***/phits/bin/phits274_mac.exe"
for i in $(seq 1 3)
do
$PHITSEXE < lec0${i}.inp
cp phits.out phits${i}.out
done
echo "- push ENTER key to end -"
read WAIT
exit
実行すると、phits1.out, phits2.out, phits3.outが作成される
Script
39
まとめ
• スクリプト言語の基本的なコマンドの使い方を学んだ
• PHITSを自動で複数回実行するスクリプトを作成した
工夫次第でPHITSの実行方法は非常に便利になります。
基本的なコマンドを組み合わせて、使い勝手の良いスク
リプトを作成しましょう!
Summary
40