Lab系で寿命と飛行距離の計算

ROOT/Artemisには実験でよく計算する相対論計算用のクラスなどが整備されています。 その一例として、Particle Data Groupの値を使って $\pi^{-}$の寿命と飛行距離を計算してみます。 ここでは実験室系において、 $P_{\mathrm{Lab}}=1\,\mathrm{GeV/c}$で運動する $\pi^{-}$を考えます。

まずParticle Data Groupの値を取ってくるところですが、このチュートリアルで作成した解析ディレクトリではgPDGMassTableを使います。 このグローバル変数はartemislogon.C内でTDatabasePDGを使って宣言されています。

ヒント

TDatabasePDGはROOTの標準クラスであり、Particle Data Groupの値が格納されています。 元になっているファイルは$ROOTSYS/etc/pdg_table.txtです。 そのためgPDGMassTableTDatabasePDG::Instance()に置き換えることでROOTのみで同様の計算ができます。

さて実際の計算ですが主に以下の2ステップです。

  1. gPDGMassTableにて粒子の基本情報を取得
  2. TArtParticleにて相対論の諸計算を行う

念の為グローバル変数を再定義しておきます。

artemis [0] TDatabasePDG* gPDGMassTable = new TDatabasePDG();
Warning in <TDatabasePDG::TDatabasePDG>: object already instantiated

事前にグローバル変数をちゃんと定義していればWarningがでるはずです。 出なくてもエラーが起きなければOKです。

さて、本題についてですが、まず粒子の取得方法ですが以下のようにします。

artemis [0] TParticlePDG *pim_pdg = gPDGMassTable->GetParticle("pi-");

TParticlePDGが持つ質量および寿命の値を取得する。

artemis [1] Double_t pim_mass = pim_pdg->Mass() * 1.e3;
artemis [2] Double_t pim_life = pim_pdg->Lifetime();

上記のようにすることでそれぞれ質量と重心系での寿命が取得できます。 PDGではエネルギーはGeVになっていますが、ArtemisではMeVを基準にしているため取得した質量を1000倍しています。 以下で値を確かめることができます。

artemis [3] pim_mass
(double) 139.57040
artemis [4] pim_life
(double) 2.6032744e-08
警告

TParticlePDGの持つデータはROOTのバージョン依存です。昔のバージョンなどを使っていると測定値がなくて0などを返します。 例えば、root 6.20/06では $\mu^{-}$の寿命が0と言われてしまいます。

さて、あとは $\beta$$\gamma$が分かれば実験室系に直せます。 ここではあえてTArtParticleを使用します。 (このクラスはTLorentzVectorを継承しているクラスでもともとArtemisを使っていた低エネルギー原子核物理での二体反応計算や欠損質量分光を簡単に実装するためのクラスです。) 以下のコマンドで4元ベクトルをセットします。

artemis [5] TArtParticle* pim_art = new TArtParticle();
artemis [6] pim_art->SetXYZM(0, 0, 1.e3, pim_mass);

これにて計算に必要な値は準備できましたので、計算するのみです。 まず寿命ですが、ある速度で運動する慣性系では時間が $\gamma$だけ遅れるので寿命は以下で計算できます。

artemis [7] pim_art->Gamma()*pim_life
(double) 1.8832846e-07

大体、 $1.88 \times 10^{-7}$s である。 次に飛行距離ですが重心系では $\tau \beta c$なので以下の通りです。

artemis [8] pim_life*pim_art->Beta()*TMath::C()
(double) 7.7294984

当然実験室系も同様に $\gamma$分だけ影響を受けるので以下のようになります。

artemis [9] pim_art->Gamma()*pim_life*pim_art->Beta()*TMath::C()
(double) 55.917445

よって重心系では $7.73$m、実験室系では $55.9$m飛ぶということになります。

ヒント

このチュートリアルにおいて、実はTArtParticle独自のメソッドは使用していません。 そのためTArtParticleTLorentzVectorに置き換え可能です。 そのため、この記事の内容はROOTのみで再現できます。