物理の駅 Physics station by 現役研究者

テクノロジーは共有されてこそ栄える

はじめての応用行動分析 第一章 応用行動分析の基本的な考え方 討議のテーマ について

自主学習のためのメモ

  1. 応用行動分析が、生理学的説明や発達的説明、認知的説明を行動的説明よりも有用でないと考えている理由は何でしょう。

    • 有用性を議論する指標である「包括性」「妥当性」「予測性」「節約性」の4つを満たしていることが重要である。
    • 生理学的説明は、遺伝・先天的、生化学的、脳障害などといった、原因が生理学的な事象にあるとする説明であり、行動を説明するための妥当性はある程度満たしているが、人間の行動の一部しか説明できず包括性は満たしていない。ある障害の結果として特定の行動が生じることは予測が難しい。行動を改善するための直接的説明ではないため節約性も満たしていいない。
    • 発達的説明は、行動の全体像を経験的に捉えて説明が可能であり、包括性は満たしている。しかし、あくまで経験的なものであり、問題行動が発達段階の不具合であるかどうかの証拠はほとんどないので妥当性を満たさない。ある年齢における行動を予測できるものの、平均的描像のみで個人の行動を予測するものではない。問題行動に対する説明を発達的説明に求めたところで、改善する手立ては説明しておらず節約性もない。
    • 認知的説明は、知覚や学習に対する基本原理について説明しており、すなわち極めて包括的ではある。しかしながら、抽象的すぎて検証できず、やはり抽象的すぎて予測もできず、節約性についても同じです。
    • 行動的説明は、正の強化、負の強化、罰、消去、刺激制御などの、過去から現在までの観測可能な行動によって、観測可能な行動が生み出されるとするものである。生理学的説明によるもので一部説明できないものがあるものの、観測対象の短期的な視点にたてば包括的とも言えるほか、観測による結果であるため検証可能である。多くの観測結果という巨人によって予測性も満たしている。また、節約性は行動的説明の本質でありやはり満たしている。
    • 以上より、行動的説明は有用であると考えられる。
  2. 教師は、生理学的、発達的、認知的な説明から、自分の生徒たちについてどんな有用な情報が得られると思っているのでしょうか。

    • 行動の変容を目的としない行動の理由付けについては、生理学的、発達的、認知的な説明は有効だと思われる。場合によってはこれらの説明で納得しやすいし、保護者や地域に対する説明も容易かもしれない。例えば、発達的知見に立てば、今すぐに行動を変容させることは難しくても、時間が経てば解決してくれるかもしれないという期待を持たせてくれるし、実際にその期待は実現することも多いだろう。
  3. 行動を変化させるのにご褒美(結果事象)を用いることは過去多くの例があります。それと応用行動分析とはどう違うのでしょう。

    • 褒美と応用行動分析で言うところの正の強化子は同じときもあるが違うときもある。褒美は、過去の行動の結果として与えられるものであるが、正の強化子は未来の行動のために与えられるものである。
  4. オペラント条件づけとレスポンデント条件づけの違いは何でしょう。教師のためにこのテキストで、オペラント条件づけが強調させるのはどうしてでしょう。

    • オペラント条件づけとレスポンデント条件づけは、いずれも条件刺激によって誘発される行動の組み合わせであるが、前者は人がコントロールできる(随意的)であるのに対し、後者は人がコントロールできない(反射的)である。コントロールできない行為は極めて単純な行為にとどまるため、教師が生徒へ期待する内容としては随意的であるオペラント条件づけのみを対象にして良い。

原子核乾板の元素組成と密度

更新履歴を含めた情報は、Gitlabで管理しています。参考文献がHatena Blogの仕様で崩れているため、下記のGitlab版も参照してください

gitlab.com

参考文献一覧 ^ref01 ^ref03 ^ref05 ^ref07 ^ref09 ^ref11

原子核乾板の密度と組成について

原子核乾板 (Nuclear Emulsion) の組成や密度を実測することは難しい。 軽元素から重元素までの測定レンジを持つ組成の測定方法は存在しないため、同じ条件で全ての元素組成を測定することはできない。 また、環境の湿度が変化すると乾板に含まれる水分量も変化し、酸素や水素の組成が変化する。 製造工程から推定する方法については、原料の組成は測定しやすいものの、原子核乳剤を製造する工程に水洗工程があり、この工程で何がどれだけ流出したかの推定は難しい。

よくある測定方法

軽元素である水素、炭素、窒素、硫黄、酸素の質量比(通常の装置では水素、炭素、窒素)は、元素分析装置による測定が可能である 1。硫黄についてはその存在比が少ないため、元素分析装置での測定は一般には不可能である。 重元素については、銀、臭素ヨウ素の比はSEM-EDXによる測定が可能である [^ref08]。 定着(FIX)前後の厚みと質量測定により、AgBrIとバインダーの比及び密度を測定することが可能である [^ref08]。

アルファ線を用いた密度測定方法

アルファ線の飛程からエネルギーとレンジ(飛程)の関係式を導き出す方法が最も精度の良い密度測定方法である 2

アルファ線の飛程は約1μmの標準偏差を持つ分布となり、100イベント使えば飛程につく標準誤差は0.1μmとなる。 密度3.5g/ccのPo-212からのアルファ線の飛程は約50μmなので、飛程につく誤差は0.2%となる。この誤差は、密度の誤差に換算すると0.3%相当になる。

この手法で求められる密度は、アルファ線のエネルギーとレンジ(飛程)の関係式を媒介する、換算密度とも呼ばれるものであり、絶対値としての信頼性には議論の余地がある。

原子核乾板の組成および密度

以下、論文等で紹介されている各原子核乾板の組成を紹介する。

Emulsion Ilford G-5

  • Density 3.907g/cc 3
H C N O S Ag Br I
Mass % ^ref02 1 1.4 6.9 1.7 6.9 0.2 47.4 34.8 0.6

50% R.H. 。

[^ref13] の第3表のIlford G-5 の Nが0.67g/ccとなっているのは0.067g/ccの誤記と思われる。 4

Photographic Emulsion (ICRU-215) = Standard emulsion

  • Density 3.815g/cc 5
H C N O S Ag Br I
Mass % [^ref03] 1.4 7.2 1.9 6.6 0.2 47.4 34.9 0.3

Fuji ET-7B ET-7C/D

  • 密度: 3.73 g/cc (Fuji ET-7B)
  • 密度: 3.60 g/cc (Fuji ET-7C/D)
  • 密度: 3.63g/cc (ET-7D) [^ref11]
  • 相対湿度: 68%

結晶サイズ

H C N O S Ag Br I
ET-7D Mass g/cc ^ref09 0.05 0.31 0.1 0.226 0.0067 1.675 1.22 0.034
ET-7D Mass % ^ref09 1.38 8.56 2.76 6.24 0.18 46.25 33.69 0.94
ET-7C/7D Mass % 1 1.5 9.3 3.1 6.8 0.2 45.4 33.4 0.3
Binder AgBrI
ET-7D Volume % [^ref11] 55.0 45.0

Fuji OPERA film

  • 密度: 2.71g/cc 7
  • 密度: 2.84g/cc 乳剤層のみ [^ref11]
  • 密度: 2.77g/cc 乳剤層と保護層 [^ref11]

OPERAの論文(シミュレーションも多分)は全ては密度2.71g/cc と表記されている。桑原氏の値となぜズレたのかは不明。

結晶サイズ

  • 200±16 nm [^ref07]

組成

以下の組成は乳剤層と保護層である。

H C N O S Si Na Sr Ba Ag Br I
Mass % ^ref06 2.4 13.0 4.81 12.43 0.09 0.08 0.08 0.02 0.01 38.34 27.86 0.81
Binder AgBrI
Mass % 33.0 67.0
Volume % ^ref07 69.0 31.0

組成は原料からの計算値である。水洗工程でバインダーが水溶液側に抜ける割合に大胆な仮定が入っている [^ref11]。

OPERAタイプ GIF処方

J-PARC E07実験用の原子核乳剤。組成の参考文献は [^ref11]。

  • 結晶サイズ 200 nm
  • 密度 3.53g/cc
H C N O S Ag Br I
GIF g/cc 0.05 0.326 0.11 0.23 - 1.6 1.166 0.033
GIF Mass % 1.42 9.27 3.13 6.54 - 45.52 33.17 0.94
GIF Atomic % 38.56 21.10 6.10 11.17 - 11.53 11.34 0.20

NのAtomic %を1としたとき、Oは1.83、Cは3.46である。

Nagoya NIT [^ref08]

  • 乳剤層の密度: 3.44 g/cc
  • AgBrの密度: 6.473g/cc
  • ゼラチンの密度: 1.32g/cc
  • PVAの密度: 1.19g/cc

結晶サイズ

  • NIT 44.2±6.8 nm
  • UNIT 24.8±4.3 nm

組成

H C N O Ag Br I
Mass % 1.6 10.1 2.7 7.4 44.5 31.8 1.9
Atomic % 41.1 21.4 4.9 11.7 10.5 10.1 0.4
Binder AgBrI
Mass % 21.9 78.2
Density g/cc 1.29 6.473

AgBrIの分量は原料からの計算値、HとCとNは実測値、Oはそこからの推定値である。

文責: 吉本

間違いがあればメール or コメントをください

参考文献


  1. 浅田 吉本ら PTEP論文 https://doi.org/10.1093/ptep/ptx076 (2017)

  2. Geant4で伝統的に使われてきたFujiFilm ET-7C/7D emulsion for KEK-PS E373 の組成 元ソースは歳藤氏による

  3. 古関 靖夫 原子核乾板 http://hdl.handle.net/2261/30908 (1959)

  4. 吉田ら NIM論文 https://doi.org/10.1016/j.nima.2016.11.044 (2016)

  5. SRIM ソフトウェア http://www.srim.org/

  6. 桑原謙一氏・吉本 private communication

  7. Photographic Emulsion (ICRU-215) https://physics.nist.gov/cgi-bin/Star/compos.pl?refer=ap&matno=215

  8. 中村琢ら NIM論文 https://dx.doi.org/10.1016/j.nima.2005.08.109 (2006)

  9. L. Patrizii ら JINST論文 https://dx.doi.org/10.1088/1748-0221/3/07/P07002 (2008)

直交座標から球面座標系(極座標)に変換するときの誤差伝搬

Error propagation when converting from rectangular coordinate system to spherical coordinate system

飛跡のベクトルが次のように得られたとする

Assume that a vector of trajectory is obtained as follows

 \displaystyle

V_x = x \pm \delta x \\
V_y = y \pm \delta y \\
V_z = z \pm \delta z \\

Range、Theta、Phiは次のようになる

Range, Theta, Phi are as follows

 \displaystyle
Range = r = \sqrt{x^2+y^2+z^2}\\
Theta = \theta =  acos(z/r)\\
Phi = \phi = atan(y/x)\\

ただし、C++の実装では、下記を使ったほうが良い。

 \displaystyle
Phi = \phi = sign(y)\times acos(x/sqrt(x^2+y^2))\\

誤差伝搬を計算すると誤差は次のようになる

By calculating the error propagation, the error becomes as follows

 \displaystyle
\delta r = \frac{ \sqrt{  (x\,\delta x)^2+ (y\,\delta y)^2+ (z\,\delta z)^2 }}{r} \\

\delta \theta = \frac { \sqrt{ (x^2 \, \delta x^2+y^2 \, \delta y^2)z^2      + (x^2+y^2)^2\delta z^2    }    }                {r^2\sqrt{x^2+y^2}}\\

\delta \phi =        \frac{\sqrt{(y \, \delta x)^2+(x \, \delta y)^2}}       {x^2+y^2}

検索用

参照

Derivative Calculator with Steps

 \displaystyle
x = r \sin\theta \cos\phi \\
y = r \sin\theta \sin\phi\\
z = r \cos\theta\\

Rangeを1に規格化するとき、

 \displaystyle
\delta x_{norm} = \sqrt{ (\cos\theta \cos\phi \cdot \delta \theta)^2+(\sin\theta\sin\phi\cdot\delta \phi)^2 }\\
\delta y_{norm} = \sqrt{ (\cos\theta \sin\phi \cdot\delta \theta)^2+(\sin \theta\cos \phi \cdot\delta \phi)^2}\\
\delta z_{norm} = \sqrt{(\sin\theta \cdot\delta \phi)^2}\\

Gitでサブモジュールの追加

新しいサブモジュールを追加。 root_macros フォルダに リポジトリ root_macros.gitを追加する。

git submodule add https://gitlab.com/yoshimoto/root_macros.git root_macros

リモートが更新されたら取り込む

git submodule foreach git pull origin master

[Git] git submodule は癖がすごいとの噂だったが素直につきあっていけそうという話 | deadwood git submoduleしてるリポジトリをリモートの最新に更新する - Qiita

Pattern matching sample パターンマッチングサンプル

(ja) パターンマッチング可能な飛跡ファイル

https://1drv.ms/f/s!Ap9xAxIuzM0xlLxu6slGIjkY3gSjNg

Q1. どういう手段でもいいので、 beam_4372-2_u.txt の飛跡と beam_4372-2_d.txt の飛跡の位置ずれを計算しよう。

Q2. 計算方法について、互いに紹介しよう。

Q3. これは、位置ずれのピークを求めるソースコードである。 std::map はどういう働きをするのか調べよう。

Q4. 前回配布したファイルはパターンマッチングが成功しない。成功しないと言うためにはどうすればよいか考えよう。

https://1drv.ms/t/s!Ap9xAxIuzM0xlLlaOr2g5qaKpYqF2w

https://1drv.ms/t/s!Ap9xAxIuzM0xlLlbUgqNsGvbe4Eq6w

(en)

Trajectory file for pattern-matching

https://1drv.ms/f/s!Ap9xAxIuzM0xlLxu6slGIjkY3gSjNg

Q1. Calculate the position shift between the trajectory of beam_4372-2_u.txt and the trajectory ofbeam_4372-2_d.txt with any way.

Q2. Introduce each other about your calculation methods.

Q3. This is a source code to search peak position shift . Examine what std::map does.

  • Position shift of all trajectories are packed in a histogram for each bin_width .
  • Create a blurred histogram with surrounding n_bin_bg x n_bin_bg .
  • Subtract the histogram from the blurred histogram
  • Find the peak with the the maximum content

Q4. Pattern matching does not succeed in files distributed last time. Let's see what we should say to show that the pattern matching does not succeed.

https://1drv.ms/t/s!Ap9xAxIuzM0xlLlaOr2g5qaKpYqF2w

https://1drv.ms/t/s!Ap9xAxIuzM0xlLlbUgqNsGvbe4Eq6w

#include <string>
#include <iostream>
#include <vector>
#include <fstream>
#include <sstream>
#include <map>

int main() {
    string path1 = "beam_4372-2_u.txt";
    string path2 = "beam_4372-2_d.txt";
    vector<track> vtrack1, vtrack2;

    cout << vtrack1.size() << " -> ";
    read_txt(path1, vtrack1);
    cout << vtrack1.size() << endl;

    cout << vtrack2.size() << " -> ";
    read_txt(path2, vtrack2);
    cout << vtrack2.size() << endl;

    map<string, int> hist;
    map<string, int> hist_bg;

    double bin_width = 0.002; //bin width
    int n_bin_bg = 3; //number of bin for background

    //add displacement to bins
    for (int i1 = 0; i1 < vtrack1.size(); i1++) {
        for (int i2 = 0; i2 < vtrack2.size(); i2++) {
            double dx = vtrack2[i2].px - vtrack1[i1].px;
            double dy = vtrack2[i2].py - vtrack1[i1].py;

            int dxi = round(dx / bin_width);
            int dyi = round(dy / bin_width);
            hist[to_string(dxi) + "_" + to_string(dyi)]++;
            for (int bgx = -(n_bin_bg - 1) / 2; bgx <= (n_bin_bg - 1) / 2; bgx++) {
                for (int bgy = -(n_bin_bg - 1) / 2; bgy <= (n_bin_bg - 1) / 2; bgy++) {
                    hist_bg[to_string(dxi + bgx) + "_" + to_string(dyi + bgy)]++;
                }
            }
        }
    }

    //search peak
    int max_value = 0;
    string peak_position = "";
    for (auto &p : hist) {
        p.second -= hist_bg[p.first] / double(n_bin_bg*n_bin_bg);
        if (max_value < p.second)
        {
            peak_position = p.first;
            max_value = p.second;
        }
    }

    //convert to position
    string buf;
    stringstream ss(peak_position);
    getline(ss, buf, '_');
    int peak_position_x = std::stoi(buf);
    getline(ss, buf, '_');
    int peak_posision_y = std::stoi(buf);

    //draw 7x7 bins
    for (int ix = -3; ix <= 3; ix++) {
        for (int iy = -3; iy <= 3; iy++) {
            string str = std::to_string(ix + peak_position_x) + "_" + std::to_string(iy + peak_posision_y);
            cout << hist[str] << " ";
        }
        cout << endl;
    }
    cout << "peak (x, y) = (" << peak_position_x*bin_width << ", " << peak_posision_y*bin_width << ") " << endl;
    cout << "peak bin content = " << max_value << endl;
    cin.get(); //to stop the console.
}