LowToneVoice / experiments

0 stars 0 forks source link

JPARCのROOTファイルに沿った実装 #3

Open LowToneVoice opened 10 months ago

LowToneVoice commented 10 months ago

課題チェックリスト

課題概要

/simulation/BL05/20231224225335_list.root に全ファイルのフォーマットを統一、ないし変換ファイルの作成

  1. rootファイルの把握
  2. 実験時のプロトコル確立
    1. 実験装置の始動(ここについては別途懸案)
    2. 二次元位置-ビームカウントを描画
    3. H/O beamに対応する二次元位置を特定
    4. 各ビームについて特定した二次元位置における波長-カウントヒストグラムを描画
    5. (I_H - I_O) / (I_H + I_O) を換算、描画
    6. 振動のFFTから波長比例の項を分離
    7. 重力加速度を換算
  3. 実装
    1. 二次元位置-ビームカウントの描画
    2. 二次元位置を入力して波長-ビームカウントを描画
      • 二次元位置はある程度デフォルトの値を設定できるといい
    3. 現存コードの修正
      • simulation/read_lambda.cpp
      • simulation/oscillation_lambda.cpp
      • simulation/read_2d.cpp
      • simulation/oscillation_2d.cpp
    4. README.md などに実行方法を記載

JPARC ROOT file

rootファイルには、イベントがTTreeになって入っています。 .ls で中を見ると、 TFile* 20231224225335_list.root TFile 20231224225335_list.root KEY: TTree T;1 treeRPMT KEY: TTree Six;1 となっていて、このうち T という tree を使うと良いです。 T->Print(); とかやると branchがでてきますが、そのうちよく使うのは x, y, tof でしょうか。   x, y 二次元検出器の座標   tof 中性子検出の time of flight です。x, y は [0,1] で規格化されています。 tof は マイクロ秒単位です。 T->Draw("y:x","x>=0&&x<=1&&y>=00&&y<=1","colz") とかやると2次元の像が出ます。 添付したデータでは、縦に2本スジが見えるはずで、 干渉計の、重ね合わせたあとの OビームとHビームに対応しています。 片方だけ取り出して、TOFのヒストグラムをつくると、干渉縞が見えます。たとえば T->Draw("tof>>h_tof(500,0,40000)","x>=0.41&&x<=0.44&&y>=0.34&&y<=0.48",""); J-PARCは25Hzで中性子パルスがやってきます。つまりtofは 0〜40 ms までの範囲です。 この干渉計は、使っている多層膜ミラーの性能上、波長1nm付近の遅い中性子しか利用できません。 そのような中性子しか検出器に到達しません。 1nmの中性子は40msよりも後に到達するので、あたかも 0 ms のすぐ後に中性子が 来ているように見えますが、これは 40ms 以降のやつらです。(これを 2nd frameと呼びます) というわけでたとえば T->Draw("(tof(tof>25000&&tof<40000)+(tof+40000)(tof<=25000))>>h_tof(500,25000,65000)","x>=0.41&&x<=0.44&&y>=0.34&&y<=0.48",""); とかやると、25ms -- 50ms くらいに一続きの干渉縞が見えると思います。 40ms のところに立つ鋭いピークは、ほんとうに 0ms の時、陽子ビームがターゲットに当たった時の ガンマ線です。(ガンマ線フラッシュ) カット条件に"f==4"を入れてください。 具体的には T->Draw("y:x","f==4&&x>=0&&x<=1&&y>=00&&y<=1","colz") です。これで4本鳴らなかったイベントを落とします。

LowToneVoice commented 10 months ago

横軸のリスケールができない。

試したこと

    // Add a new branch to the tree with the computed value
    double tof_factor;
    T->Branch("tof_factor", &tof_factor, "tof_factor/D");

    // Compute the factor_tof2lambda and assign it to tof_factor
    tof_factor = factor_tof2lambda;

    // Create a canvas
    TCanvas *c1 = new TCanvas("c1", "count on wave length", 600, 400);

    // Draw the histogram with the new variable
    T->Draw("(tof * tof_factor)>>h_tof(500,0,40000)", "x>=0.41&&x<=0.44&&y>=0.34&&y<=0.48", "");

結果、横軸の範囲だけが広がってヒストグラムは左端に1つだけbinが立った。

Chat GPTに言われるがままにやったので、この先どうしたらいいかよくわからない。 とりあえずググっても横軸をリスケールする事例が出てこない。 一応https://root-forum.cern.ch/t/rescale-x-axis-of-histogram/36403が出てきた。 未着手

LowToneVoice commented 10 months ago

TTree別個に作ってデータ移植すればいいのでは? ただし横軸の誤差の入れ方は課題として残る

LowToneVoice commented 10 months ago

横軸の誤差について

λ±∆λで与えられるときは、λの場合とλ+∆λの場合で結果を比較して、その差を誤差とする