<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Artemis:old :: Fumi Web</title>
    <link>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/index.html</link>
    <description>警告 旧版の記事です。内容は更新前の記録として保存しており、現在の環境では手順が異なる場合があります。&#xA;新版の入口&#xA;ArtemisはROOTのように記事が充実していない・・・&#xA;なので私みたいな初心者にとっては辛いものがある。&#xA;情報の精度は置いておいて、自身が詰まったところなどを書き残しておく。&#xA;インストール関連 Artemisが使えるようになるまでのあれやこれやを書き残しておきます。&#xA;UbuntuにArtemisをインストール(推奨) NixOSにArtemisをインストール AlmaLinuxにArtemisをインストール 解析環境構築関係 解析環境を作ってみる オンライン解析用チュートリアル チュートリアル(遊んでみる) 使いながら慣れたい人のためのチュートリアル。(リンクがないものは近日公開。) いいチュートリアル募集中&#xA;チュートリアルで使用した解析環境はここ（記事中のサンプルコードもあり）&#xA;相対論の計算をしてみる。 実験室系での$\pi^{-}$の寿命と飛行距離を計算する。 $K^{-} + p \rightarrow \pi^{0} + \Lambda$反応を計算する。（2体反応） $K^{-} \rightarrow \pi^{-} + \pi^{-} + \pi^{+}$反応を計算する。（3体崩壊） Steering Fileを使ってみる/書いてみる。 N次元球の体積をモンテカルロ積分から計算してみる 2体反応のシミュレーションをしてみる TTreeProjectionProcessorを使ってtree-&gt;Draw()せずにヒストグラムを描画する Macroを書いてみる。 モンテカルロ積分で計算したN次元球体積の誤差が発生させた乱数の数によってどう変化するかみる TCatTwoBodyKinematicsを使って運動学曲線を描いてみる Processorを自作してみる。 未定 Web Browserで解析用のYAMLファイルを作成する 京大の矢野君にアイディア出しを手伝ってもらい鋭意作成中。かなりのバグあり。 ページはここ</description>
    <generator>Hugo</generator>
    <language>ja-JP</language>
    <lastBuildDate>Tue, 25 Jun 2024 01:24:04 +0900</lastBuildDate>
    <atom:link href="https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>操作方法</title>
      <link>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/yaml-generator-guide/index.html</link>
      <pubDate>Tue, 25 Jun 2024 01:24:04 +0900</pubDate>
      <guid>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/yaml-generator-guide/index.html</guid>
      <description>警告 旧版の記事です。内容は更新前の記録として保存しており、現在の環境では手順が異なる場合があります。&#xA;新版の入口&#xA;ここではYAMLを作成するページの使い方とサンプルを示します。&#xA;ページ自身が試作段階なので最低限のことしか書きません。もっとまともなものができたらしっかりとしたチュートリアルを書きます。&#xA;基本的にはSearchでプロセッサーを検索して追加するかセレクトボックスから追加したいプロセッサを選択したのちにAdd Blockで追加して左から順番に配置し、パラメータを入力だけです。&#xA;Save as JSONでページの図の配置をJSON形式で保存できます。Load JSONで保存したものを読み込むこともできます。&#xA;Generate YAMLやDownload YAMLで解析で使用できるフォーマットで出力してくれます。Generate YAMLではポップアップが表示され、生成したYAMLファイルを目視で確認できます。一方でDownload YAMLではYAMLになったものをローカルにダウンロードしてきます。複数のYAMLに分けて出力する場合に有効。&#xA;Shift+クリックで複数のブロックを選択できます。選択した後にGroup Blocksを押すとグループ化できます。 グループ化されたブロックはYAMLを生成する際に、別ファイルとして出力でされます（ファイル名は&#34;Group LABEL&#34;になります。）。その際にYAMLの記法に沿ったパラメータを使いたい場合はグループ化した際に表示される表中のParamtersをクリックして追加してください。&#xA;深刻なバグ 警告 Save as PNG() で画像が見切れます。&#xA;最後にページソースはここです。興味があったら見てね。参加してくれても助かります。&#xA;サンプル 以下のようなJsonを作り、LoadJSONボタンを押して読み込ませると完成系の一つが見れます。&#xA;{ &#34;blocks&#34;: [ { &#34;id&#34;: &#34;block1&#34;, &#34;title&#34;: &#34;art::TTimerProcessor&#34;, &#34;globalName&#34;: &#34;MyTTimerProcessorNum1&#34;, &#34;globalID&#34;: &#34;1&#34;, &#34;style&#34;: { &#34;top&#34;: &#34;100px&#34;, &#34;left&#34;: &#34;45px&#34;, &#34;height&#34;: &#34;90px&#34;, &#34;width&#34;: &#34;&#34; }, &#34;parameters&#34;: [ { &#34;parameter&#34;: &#34;OutputTransparency&#34;, &#34;value&#34;: &#34;0&#34;, &#34;top&#34;: &#34;52px&#34;, &#34;left&#34;: &#34;120px&#34; }, { &#34;parameter&#34;: &#34;Verbose&#34;, &#34;value&#34;: &#34;1&#34;, &#34;top&#34;: &#34;77px&#34;, &#34;left&#34;: &#34;120px&#34; } ] }, { &#34;id&#34;: &#34;block2&#34;, &#34;title&#34;: &#34;art::TRandomNumberEventStore&#34;, &#34;globalName&#34;: &#34;MyTRandomNumberEventStoreNum2&#34;, &#34;globalID&#34;: &#34;2&#34;, &#34;style&#34;: { &#34;top&#34;: &#34;15px&#34;, &#34;left&#34;: &#34;624px&#34;, &#34;height&#34;: &#34;190px&#34;, &#34;width&#34;: &#34;&#34; }, &#34;parameters&#34;: [ { &#34;parameter&#34;: &#34;Max&#34;, &#34;value&#34;: &#34;1&#34;, &#34;top&#34;: &#34;52px&#34;, &#34;left&#34;: &#34;120px&#34; }, { &#34;parameter&#34;: &#34;MaxLoop&#34;, &#34;value&#34;: &#34;@MAXEVT@&#34;, &#34;top&#34;: &#34;77px&#34;, &#34;left&#34;: &#34;120px&#34; }, { &#34;parameter&#34;: &#34;Min&#34;, &#34;value&#34;: &#34;0&#34;, &#34;top&#34;: &#34;102px&#34;, &#34;left&#34;: &#34;120px&#34; }, { &#34;parameter&#34;: &#34;OutputCollection&#34;, &#34;value&#34;: &#34;@INPUT@2&#34;, &#34;top&#34;: &#34;127px&#34;, &#34;left&#34;: &#34;120px&#34; }, { &#34;parameter&#34;: &#34;OutputTransparency&#34;, &#34;value&#34;: &#34;0&#34;, &#34;top&#34;: &#34;152px&#34;, &#34;left&#34;: &#34;120px&#34; }, { &#34;parameter&#34;: &#34;Verbose&#34;, &#34;value&#34;: &#34;1&#34;, &#34;top&#34;: &#34;177px&#34;, &#34;left&#34;: &#34;120px&#34; } ] }, { &#34;id&#34;: &#34;block3&#34;, &#34;title&#34;: &#34;art::TRandomNumberEventStore&#34;, &#34;globalName&#34;: &#34;MyTRandomNumberEventStoreNum3&#34;, &#34;globalID&#34;: &#34;3&#34;, &#34;style&#34;: { &#34;top&#34;: &#34;364px&#34;, &#34;left&#34;: &#34;291px&#34;, &#34;height&#34;: &#34;190px&#34;, &#34;width&#34;: &#34;&#34; }, &#34;parameters&#34;: [ { &#34;parameter&#34;: &#34;Max&#34;, &#34;value&#34;: &#34;1&#34;, &#34;top&#34;: &#34;52px&#34;, &#34;left&#34;: &#34;120px&#34; }, { &#34;parameter&#34;: &#34;MaxLoop&#34;, &#34;value&#34;: &#34;@MAXEVT@&#34;, &#34;top&#34;: &#34;77px&#34;, &#34;left&#34;: &#34;120px&#34; }, { &#34;parameter&#34;: &#34;Min&#34;, &#34;value&#34;: &#34;0&#34;, &#34;top&#34;: &#34;102px&#34;, &#34;left&#34;: &#34;120px&#34; }, { &#34;parameter&#34;: &#34;OutputCollection&#34;, &#34;value&#34;: &#34;@INPUT@1&#34;, &#34;top&#34;: &#34;127px&#34;, &#34;left&#34;: &#34;120px&#34; }, { &#34;parameter&#34;: &#34;OutputTransparency&#34;, &#34;value&#34;: &#34;0&#34;, &#34;top&#34;: &#34;152px&#34;, &#34;left&#34;: &#34;120px&#34; }, { &#34;parameter&#34;: &#34;Verbose&#34;, &#34;value&#34;: &#34;1&#34;, &#34;top&#34;: &#34;177px&#34;, &#34;left&#34;: &#34;120px&#34; } ] }, { &#34;id&#34;: &#34;block4&#34;, &#34;title&#34;: &#34;art::TRandomNumberEventStore&#34;, &#34;globalName&#34;: &#34;MyTRandomNumberEventStoreNum4&#34;, &#34;globalID&#34;: &#34;4&#34;, &#34;style&#34;: { &#34;top&#34;: &#34;629px&#34;, &#34;left&#34;: &#34;1223px&#34;, &#34;height&#34;: &#34;190px&#34;, &#34;width&#34;: &#34;&#34; }, &#34;parameters&#34;: [ { &#34;parameter&#34;: &#34;Max&#34;, &#34;value&#34;: &#34;1&#34;, &#34;top&#34;: &#34;52px&#34;, &#34;left&#34;: &#34;120px&#34; }, { &#34;parameter&#34;: &#34;MaxLoop&#34;, &#34;value&#34;: &#34;@MAXEVT@&#34;, &#34;top&#34;: &#34;77px&#34;, &#34;left&#34;: &#34;120px&#34; }, { &#34;parameter&#34;: &#34;Min&#34;, &#34;value&#34;: &#34;0&#34;, &#34;top&#34;: &#34;102px&#34;, &#34;left&#34;: &#34;120px&#34; }, { &#34;parameter&#34;: &#34;OutputCollection&#34;, &#34;value&#34;: &#34;@INPUT@5&#34;, &#34;top&#34;: &#34;127px&#34;, &#34;left&#34;: &#34;120px&#34; }, { &#34;parameter&#34;: &#34;OutputTransparency&#34;, &#34;value&#34;: &#34;0&#34;, &#34;top&#34;: &#34;152px&#34;, &#34;left&#34;: &#34;120px&#34; }, { &#34;parameter&#34;: &#34;Verbose&#34;, &#34;value&#34;: &#34;1&#34;, &#34;top&#34;: &#34;177px&#34;, &#34;left&#34;: &#34;120px&#34; } ] }, { &#34;id&#34;: &#34;block5&#34;, &#34;title&#34;: &#34;art::TRandomNumberEventStore&#34;, &#34;globalName&#34;: &#34;MyTRandomNumberEventStoreNum5&#34;, &#34;globalID&#34;: &#34;5&#34;, &#34;style&#34;: { &#34;top&#34;: &#34;166px&#34;, &#34;left&#34;: &#34;861px&#34;, &#34;height&#34;: &#34;190px&#34;, &#34;width&#34;: &#34;&#34; }, &#34;parameters&#34;: [ { &#34;parameter&#34;: &#34;Max&#34;, &#34;value&#34;: &#34;1&#34;, &#34;top&#34;: &#34;52px&#34;, &#34;left&#34;: &#34;120px&#34; }, { &#34;parameter&#34;: &#34;MaxLoop&#34;, &#34;value&#34;: &#34;@MAXEVT@&#34;, &#34;top&#34;: &#34;77px&#34;, &#34;left&#34;: &#34;120px&#34; }, { &#34;parameter&#34;: &#34;Min&#34;, &#34;value&#34;: &#34;0&#34;, &#34;top&#34;: &#34;102px&#34;, &#34;left&#34;: &#34;120px&#34; }, { &#34;parameter&#34;: &#34;OutputCollection&#34;, &#34;value&#34;: &#34;@INPUT@3&#34;, &#34;top&#34;: &#34;127px&#34;, &#34;left&#34;: &#34;120px&#34; }, { &#34;parameter&#34;: &#34;OutputTransparency&#34;, &#34;value&#34;: &#34;0&#34;, &#34;top&#34;: &#34;152px&#34;, &#34;left&#34;: &#34;120px&#34; }, { &#34;parameter&#34;: &#34;Verbose&#34;, &#34;value&#34;: &#34;1&#34;, &#34;top&#34;: &#34;177px&#34;, &#34;left&#34;: &#34;120px&#34; } ] }, { &#34;id&#34;: &#34;block6&#34;, &#34;title&#34;: &#34;art::TRandomNumberEventStore&#34;, &#34;globalName&#34;: &#34;MyTRandomNumberEventStoreNum6&#34;, &#34;globalID&#34;: &#34;6&#34;, &#34;style&#34;: { &#34;top&#34;: &#34;399px&#34;, &#34;left&#34;: &#34;1071px&#34;, &#34;height&#34;: &#34;190px&#34;, &#34;width&#34;: &#34;&#34; }, &#34;parameters&#34;: [ { &#34;parameter&#34;: &#34;Max&#34;, &#34;value&#34;: &#34;1&#34;, &#34;top&#34;: &#34;52px&#34;, &#34;left&#34;: &#34;120px&#34; }, { &#34;parameter&#34;: &#34;MaxLoop&#34;, &#34;value&#34;: &#34;@MAXEVT@&#34;, &#34;top&#34;: &#34;77px&#34;, &#34;left&#34;: &#34;120px&#34; }, { &#34;parameter&#34;: &#34;Min&#34;, &#34;value&#34;: &#34;0&#34;, &#34;top&#34;: &#34;102px&#34;, &#34;left&#34;: &#34;120px&#34; }, { &#34;parameter&#34;: &#34;OutputCollection&#34;, &#34;value&#34;: &#34;@INPUT@4&#34;, &#34;top&#34;: &#34;127px&#34;, &#34;left&#34;: &#34;120px&#34; }, { &#34;parameter&#34;: &#34;OutputTransparency&#34;, &#34;value&#34;: &#34;0&#34;, &#34;top&#34;: &#34;152px&#34;, &#34;left&#34;: &#34;120px&#34; }, { &#34;parameter&#34;: &#34;Verbose&#34;, &#34;value&#34;: &#34;1&#34;, &#34;top&#34;: &#34;177px&#34;, &#34;left&#34;: &#34;120px&#34; } ] }, { &#34;id&#34;: &#34;block7&#34;, &#34;title&#34;: &#34;art::TOutputTreeProcessor&#34;, &#34;globalName&#34;: &#34;MyTOutputTreeProcessorNum7&#34;, &#34;globalID&#34;: &#34;7&#34;, &#34;style&#34;: { &#34;top&#34;: &#34;153px&#34;, &#34;left&#34;: &#34;1308px&#34;, &#34;height&#34;: &#34;165px&#34;, &#34;width&#34;: &#34;&#34; }, &#34;parameters&#34;: [ { &#34;parameter&#34;: &#34;FileName&#34;, &#34;value&#34;: &#34;*output&#34;, &#34;top&#34;: &#34;52px&#34;, &#34;left&#34;: &#34;120px&#34; }, { &#34;parameter&#34;: &#34;OutputTransparency&#34;, &#34;value&#34;: &#34;0&#34;, &#34;top&#34;: &#34;77px&#34;, &#34;left&#34;: &#34;120px&#34; }, { &#34;parameter&#34;: &#34;SplitLevel&#34;, &#34;value&#34;: &#34;0&#34;, &#34;top&#34;: &#34;102px&#34;, &#34;left&#34;: &#34;120px&#34; }, { &#34;parameter&#34;: &#34;TreeName&#34;, &#34;value&#34;: &#34;tree&#34;, &#34;top&#34;: &#34;127px&#34;, &#34;left&#34;: &#34;120px&#34; }, { &#34;parameter&#34;: &#34;Verbose&#34;, &#34;value&#34;: &#34;1&#34;, &#34;top&#34;: &#34;152px&#34;, &#34;left&#34;: &#34;120px&#34; } ] } ], &#34;groups&#34;: { &#34;group1&#34;: { &#34;id&#34;: &#34;group1&#34;, &#34;label&#34;: &#34;random.yaml&#34;, &#34;color&#34;: &#34;rgba(106, 201, 216, 0.5)&#34;, &#34;blocks&#34;: [ &#34;&#34;, &#34;block2&#34;, &#34;block3&#34;, &#34;block4&#34;, &#34;block5&#34;, &#34;block6&#34; ], &#34;parameters&#34;: { &#34;INPUT&#34;: &#34;random&#34;, &#34;MAXEVT&#34;: &#34;*maxevt&#34; } } }, &#34;anchors&#34;: [ { &#34;name&#34;: &#34;maxevt&#34;, &#34;value&#34;: &#34;100000&#34; }, { &#34;name&#34;: &#34;output&#34;, &#34;value&#34;: &#34;output/sim.root&#34; } ], &#34;connections&#34;: [ { &#34;start&#34;: { &#34;blockId&#34;: &#34;block3&#34;, &#34;parameter&#34;: &#34;MaxLoop&#34; }, &#34;end&#34;: { &#34;blockId&#34;: &#34;block6&#34;, &#34;parameter&#34;: &#34;MaxLoop&#34; } }, { &#34;start&#34;: { &#34;blockId&#34;: &#34;block3&#34;, &#34;parameter&#34;: &#34;MaxLoop&#34; }, &#34;end&#34;: { &#34;blockId&#34;: &#34;block2&#34;, &#34;parameter&#34;: &#34;MaxLoop&#34; } }, { &#34;start&#34;: { &#34;blockId&#34;: &#34;block3&#34;, &#34;parameter&#34;: &#34;MaxLoop&#34; }, &#34;end&#34;: { &#34;blockId&#34;: &#34;block5&#34;, &#34;parameter&#34;: &#34;MaxLoop&#34; } }, { &#34;start&#34;: { &#34;blockId&#34;: &#34;block3&#34;, &#34;parameter&#34;: &#34;MaxLoop&#34; }, &#34;end&#34;: { &#34;blockId&#34;: &#34;block4&#34;, &#34;parameter&#34;: &#34;MaxLoop&#34; } }, { &#34;start&#34;: { &#34;blockId&#34;: &#34;block3&#34;, &#34;parameter&#34;: &#34;MaxLoop&#34; }, &#34;end&#34;: { &#34;blockId&#34;: &#34;block4&#34;, &#34;parameter&#34;: &#34;MaxLoop&#34; } }, { &#34;start&#34;: { &#34;blockId&#34;: &#34;block3&#34;, &#34;parameter&#34;: &#34;Max&#34; }, &#34;end&#34;: { &#34;blockId&#34;: &#34;block2&#34;, &#34;parameter&#34;: &#34;Max&#34; } }, { &#34;start&#34;: { &#34;blockId&#34;: &#34;block3&#34;, &#34;parameter&#34;: &#34;Max&#34; }, &#34;end&#34;: { &#34;blockId&#34;: &#34;block5&#34;, &#34;parameter&#34;: &#34;Max&#34; } }, { &#34;start&#34;: { &#34;blockId&#34;: &#34;block3&#34;, &#34;parameter&#34;: &#34;Max&#34; }, &#34;end&#34;: { &#34;blockId&#34;: &#34;block6&#34;, &#34;parameter&#34;: &#34;Max&#34; } }, { &#34;start&#34;: { &#34;blockId&#34;: &#34;block3&#34;, &#34;parameter&#34;: &#34;Max&#34; }, &#34;end&#34;: { &#34;blockId&#34;: &#34;block4&#34;, &#34;parameter&#34;: &#34;Max&#34; } }, { &#34;start&#34;: { &#34;blockId&#34;: &#34;block3&#34;, &#34;parameter&#34;: &#34;Min&#34; }, &#34;end&#34;: { &#34;blockId&#34;: &#34;block2&#34;, &#34;parameter&#34;: &#34;Min&#34; } }, { &#34;start&#34;: { &#34;blockId&#34;: &#34;block3&#34;, &#34;parameter&#34;: &#34;Min&#34; }, &#34;end&#34;: { &#34;blockId&#34;: &#34;block5&#34;, &#34;parameter&#34;: &#34;Min&#34; } }, { &#34;start&#34;: { &#34;blockId&#34;: &#34;block3&#34;, &#34;parameter&#34;: &#34;Min&#34; }, &#34;end&#34;: { &#34;blockId&#34;: &#34;block6&#34;, &#34;parameter&#34;: &#34;Min&#34; } }, { &#34;start&#34;: { &#34;blockId&#34;: &#34;block3&#34;, &#34;parameter&#34;: &#34;Min&#34; }, &#34;end&#34;: { &#34;blockId&#34;: &#34;block4&#34;, &#34;parameter&#34;: &#34;Min&#34; } } ] }</description>
    </item>
    <item>
      <title>ハドロン三体崩壊のモンテカルロシミュレーションPart1</title>
      <link>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/hadron-three-body-monte-carlo/index.html</link>
      <pubDate>Mon, 29 Apr 2024 22:26:17 +0900</pubDate>
      <guid>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/hadron-three-body-monte-carlo/index.html</guid>
      <description>警告 旧版の記事です。内容は更新前の記録として保存しており、現在の環境では手順が異なる場合があります。&#xA;新版の入口&#xA;$K^{-} \rightarrow \pi^{-} + \pi^{-} + \pi^{+}$反応を計算する。（3体崩壊）にて計算した三体崩壊のモンテカルロシミュレーションを行なってみましょう。 状況は以下の通りです。&#xA;マクロの概要以下のような感じです。&#xA;Loopの中にで反応計算を行う。 TTreeに詰める。 output/sim.hadron.3body.rootに保存する ソースコードは以下の通りです。&#xA;void CalcHadron3BodyReactionTempl(Int_t imax=100000){ TDatabasePDG* gPDGMassTable = new TDatabasePDG(); // Create Tree and root TFile *file = new TFile(&#34;./output/sim.hadron.3body.root&#34;, &#34;RECREATE&#34;); TTree *tree = new TTree(&#34;tree&#34;, &#34;Data Tree&#34;); TArtParticle *fKmBeam = NULL ; TArtParticle *fPim1CM = NULL ; TArtParticle *fPim2CM = NULL ; TArtParticle *fPip1CM = NULL ; TArtParticle *fPim1Lab = NULL ; TArtParticle *fPim2Lab = NULL ; TArtParticle *fPip1Lab = NULL ; Double_t DalitzM2_12 ; Double_t DalitzM2_23 ; Double_t DalitzMPrim ; Double_t DalitzTheta ; tree-&gt;Branch(&#34;BeamLab&#34; , &amp;fKmBeam ); tree-&gt;Branch(&#34;PiMinus1CM&#34; , &amp;fPim1CM ); tree-&gt;Branch(&#34;PiMinus2CM&#34; , &amp;fPim2CM ); tree-&gt;Branch(&#34;PiPlus1CM&#34; , &amp;fPip1CM ); tree-&gt;Branch(&#34;PiMinus1Lab&#34;, &amp;fPim1Lab ); tree-&gt;Branch(&#34;PiMinus2Lab&#34;, &amp;fPim2Lab ); tree-&gt;Branch(&#34;PiPlus1Lab&#34; , &amp;fPip1Lab ); tree-&gt;Branch(&#34;DalitzM2_12&#34;,&amp;DalitzM2_12); tree-&gt;Branch(&#34;DalitzM2_23&#34;,&amp;DalitzM2_23); tree-&gt;Branch(&#34;DalitzMPrime&#34;,&amp;DalitzMPrim); tree-&gt;Branch(&#34;DalitzThetaPrime&#34;,&amp;DalitzTheta); //Set Mass const Double_t m_Km = gPDGMassTable-&gt;GetParticle(&#34;K-&#34;)-&gt;Mass()*1000.; const Double_t m_pim = gPDGMassTable-&gt;GetParticle(&#34;pi-&#34;)-&gt;Mass()*1000.; const Double_t m_pip = gPDGMassTable-&gt;GetParticle(&#34;pi+&#34;)-&gt;Mass()*1000.; //Generate Beam Particle TArtParticle *KmBeam = new TArtParticle(); KmBeam-&gt;SetXYZM(0,0,1000.,gPDGMassTable-&gt;GetParticle(&#34;K-&#34;)-&gt;Mass()*1000.); for(Int_t i=0;i&lt;imax;i++){ /////////////////////////// // // // K- -&gt; π- + π- + π+ // // Particle 1 : π- // // Particle 2 : π+ // // Particle 3 : π- // // // /////////////////////////// TArtParticle *Km_S1CM = KmBeam; const TVector3 VecSLab = Km_S1CM-&gt;BoostVector(); const Double_t M12_Min = m_pim + m_pip; const Double_t M12_Max = m_Km - m_pim; const Double_t M23_S1CM = gRandom-&gt;Uniform(M12_Min, M12_Max); const Double_t P23_S1CM_Nume1 = TMath::Power(m_Km, 2) - TMath::Power(M23_S1CM+m_pim, 2); const Double_t P23_S1CM_Nume2 = TMath::Power(m_Km, 2) - TMath::Power(M23_S1CM-m_pim, 2); const Double_t P23_S1CM = TMath::Sqrt(P23_S1CM_Nume1*P23_S1CM_Nume2)/(2.*m_Km); TArtParticle *Km_pim1_S1CM = new TArtParticle(); TArtParticle *Km_M0_S1CM = new TArtParticle(); Km_pim1_S1CM-&gt;SetPxPyPzE( 0., 0., P23_S1CM, TMath::Sqrt(m_pim*m_pim+P23_S1CM*P23_S1CM) ); Km_M0_S1CM-&gt;SetXYZM( 0., 0., -P23_S1CM, M23_S1CM ); const Double_t Ksitheta = TMath::ACos(2 * gRandom-&gt;Uniform() - 1.); const Double_t Ksiphi = gRandom-&gt;Uniform(0.,2.*TMath::Pi()); Km_pim1_S1CM-&gt;RotateY(Ksitheta); Km_pim1_S1CM-&gt;RotateZ(Ksiphi); Km_M0_S1CM-&gt;RotateY(Ksitheta); Km_M0_S1CM-&gt;RotateZ(Ksiphi); Km_M0_S1CM-&gt;SetTwoBodyDecay(m_pip, m_pim); Km_M0_S1CM-&gt;Decay(); TArtParticle *Km_pip1_S1CM = Km_M0_S1CM-&gt;GetDaughter(0); TArtParticle *Km_pim2_S1CM = Km_M0_S1CM-&gt;GetDaughter(1); TArtParticle *Km_pim1_S1Lab = new TArtParticle( Km_pim1_S1CM-&gt;Vect(), Km_pim1_S1CM-&gt;E() ); TArtParticle *Km_pim2_S1Lab = new TArtParticle( Km_pim2_S1CM-&gt;Vect(), Km_pim2_S1CM-&gt;E() ); TArtParticle *Km_pip1_S1Lab = new TArtParticle( Km_pip1_S1CM-&gt;Vect(), Km_pip1_S1CM-&gt;E() ); Km_pim1_S1Lab-&gt;Boost( VecSLab ); Km_pim2_S1Lab-&gt;Boost( VecSLab ); Km_pip1_S1Lab-&gt;Boost( VecSLab ); fKmBeam = Km_S1CM; fPim1CM = Km_pim1_S1CM; fPim2CM = Km_pim2_S1CM; fPip1CM = Km_pip1_S1CM; fPim1Lab = Km_pim1_S1Lab; fPim2Lab = Km_pim2_S1Lab; fPip1Lab = Km_pip1_S1Lab; TLorentzVector LVec_M12_S1CM = static_cast&lt;TLorentzVector&gt;(*Km_pim1_S1CM) + static_cast&lt;TLorentzVector&gt;(*Km_pip1_S1CM); TLorentzVector LVec_M23_S1CM = static_cast&lt;TLorentzVector&gt;(*Km_pip1_S1CM) + static_cast&lt;TLorentzVector&gt;(*Km_pim2_S1CM); TArtParticle *Km_M12_S1CM = new TArtParticle( LVec_M12_S1CM.Vect(), LVec_M12_S1CM.E() ); TArtParticle *Km_M23_S1CM = new TArtParticle( LVec_M23_S1CM.Vect(), LVec_M23_S1CM.E() ); TVector3 Vec12 = Km_pim1_S1CM-&gt;Vect() + Km_pip1_S1CM-&gt;Vect(); DalitzM2_12 = Km_M12_S1CM-&gt;M(); DalitzM2_23 = Km_M23_S1CM-&gt;M(); DalitzMPrim = TMath::ACos( 2. * (Km_M12_S1CM-&gt;M() - M12_Min)/(M12_Max - M12_Min) - 1.0) / TMath::Pi(); DalitzTheta = Vec12.Theta() / TMath::Pi(); tree-&gt;Fill(); delete Km_pim1_S1CM; delete Km_M0_S1CM; delete Km_pim1_S1Lab; delete Km_pim2_S1Lab; delete Km_pip1_S1Lab; delete Km_M12_S1CM; delete Km_M23_S1CM; } tree-&gt;Write(); file-&gt;Close(); delete file; delete KmBeam; } 使い方 上記のマクロは簡易的な解析環境のmacroのディレクトリにあります。 ひとまず以下で実行してみよう。</description>
    </item>
    <item>
      <title>ハドロン二体反応のモンテカルロシミュレーションPart1</title>
      <link>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/hadron-two-body-monte-carlo/index.html</link>
      <pubDate>Mon, 29 Apr 2024 20:51:41 +0900</pubDate>
      <guid>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/hadron-two-body-monte-carlo/index.html</guid>
      <description>警告 旧版の記事です。内容は更新前の記録として保存しており、現在の環境では手順が異なる場合があります。&#xA;新版の入口&#xA;$K^{-} + p \rightarrow \pi^{0} + \Lambda$反応を計算する。（2体反応）の紹介した二体反応計算を行なってシミュレーションを行うマクロを作成します。 ここではより実際の実験に近い状況にしたいので、生成粒子も崩壊するという状況も考慮します。 このケースは図示すると以下のようになります。&#xA;マクロ中身をざっくり説明すると以下のような感じです。&#xA;Loopの中にで反応計算を行う。 TTreeに詰める。 output/sim.hadron.2body.rootに保存する。 以下にマクロを示します。&#xA;void CalcHadron2BodyReactionTempl(Int_t imax=100000){ TDatabasePDG* gPDGMassTable = new TDatabasePDG(); // Create Tree and root TFile *file = new TFile(&#34;./output/sim.hadron.2body.root&#34;, &#34;RECREATE&#34;); TTree *tree = new TTree(&#34;tree&#34;, &#34;Data Tree&#34;); TArtParticle *fKmBeam = NULL ; TArtParticle *fLambdaCM = NULL ; TArtParticle *fPi0CM = NULL ; TArtParticle *fGamma1CM = NULL ; TArtParticle *fGamma2CM = NULL ; TArtParticle *fProCM = NULL ; TArtParticle *fPimCM = NULL ; TArtParticle *fLambdaLab = NULL ; TArtParticle *fPi0Lab = NULL ; TArtParticle *fGamma1Lab = NULL ; TArtParticle *fGamma2Lab = NULL ; TArtParticle *fProLab = NULL ; TArtParticle *fPimLab = NULL ; tree-&gt;Branch(&#34;BeamLab&#34; , &amp;fKmBeam ); tree-&gt;Branch(&#34;LambdaCM&#34; , &amp;fLambdaCM ); tree-&gt;Branch(&#34;Pi0CM&#34; , &amp;fPi0CM ); tree-&gt;Branch(&#34;Gamma1CM&#34; , &amp;fGamma1CM ); tree-&gt;Branch(&#34;Gamma2CM&#34; , &amp;fGamma2CM ); tree-&gt;Branch(&#34;ProtonCM&#34; , &amp;fProCM ); tree-&gt;Branch(&#34;PiMinusCM&#34; , &amp;fPimCM ); tree-&gt;Branch(&#34;LambdaLab&#34; , &amp;fLambdaLab); tree-&gt;Branch(&#34;Pi0Lab&#34; , &amp;fPi0Lab ); tree-&gt;Branch(&#34;Gamma1Lab&#34; , &amp;fGamma1Lab); tree-&gt;Branch(&#34;Gamma2Lab&#34; , &amp;fGamma2Lab); tree-&gt;Branch(&#34;ProtonLab&#34; , &amp;fProLab ); tree-&gt;Branch(&#34;PiMinusLab&#34;, &amp;fPimLab ); //Generate Beam Particle TArtParticle *KmBeam = new TArtParticle(); KmBeam-&gt;SetXYZM(0,0,1000.,gPDGMassTable-&gt;GetParticle(&#34;K-&#34;)-&gt;Mass()*1000.); for(Int_t i=0;i&lt;imax;i++){ /////////////////////////////////////////// // // // K- + p -&gt; Λ + π0 -&gt; γ + γ + p + π- // // // /////////////////////////////////////////// // Generate Pre Reaction Particle K- + p with( K- + p -&gt;[ M ]-&gt; Lambda + pi0) reaction TArtParticle *KmPr_Km_S1CM = KmBeam; TArtParticle *KmPr_Pr1_S1CM = new TArtParticle(); KmPr_Pr1_S1CM-&gt;SetKineticEnergy(0, gAtomicMassTable-&gt;GetNucleusMass(1,1)); // Calculate Scattered Particle TLorentzVector KmPr_M0_LVec_S1CM = static_cast&lt;TLorentzVector&gt;(*KmPr_Km_S1CM) + static_cast&lt;TLorentzVector&gt;(*KmPr_Pr1_S1CM); TArtParticle *KmPr_M0_S1CM = new TArtParticle(KmPr_M0_LVec_S1CM.Vect(), KmPr_M0_LVec_S1CM.E() ); KmPr_M0_S1CM-&gt;SetTwoBodyDecay(gPDGMassTable-&gt;GetParticle(&#34;Lambda0&#34;)-&gt;Mass()*1000.,gPDGMassTable-&gt;GetParticle(&#34;pi0&#34;)-&gt;Mass()*1000.); KmPr_M0_S1CM-&gt;Decay(); //Get Scattered Particle TArtParticle *KmPr_Lm_S1CM = KmPr_M0_S1CM-&gt;GetDaughterAtRest(0); TArtParticle *KmPr_Pi0_S1CM = KmPr_M0_S1CM-&gt;GetDaughterAtRest(1); TArtParticle *KmPr_Lm_S1Lab = KmPr_M0_S1CM-&gt;GetDaughter(0); TArtParticle *KmPr_Pi0_S1Lab = KmPr_M0_S1CM-&gt;GetDaughter(1); //Calculate pi0 Decay TArtParticle *KmPr_M1_S2CM = new TArtParticle( KmPr_Pi0_S1CM-&gt;Vect(), KmPr_Pi0_S1CM-&gt;E() ); KmPr_M1_S2CM-&gt;SetTwoBodyDecay(0.,0.); KmPr_M1_S2CM-&gt;Decay(); TArtParticle *KmPr_Gamma1_S2CM = KmPr_M1_S2CM-&gt;GetDaughterAtRest(0); TArtParticle *KmPr_Gamma2_S2CM = KmPr_M1_S2CM-&gt;GetDaughterAtRest(1); TArtParticle *KmPr_Gamma1_S1CM = KmPr_M1_S2CM-&gt;GetDaughter(0); TArtParticle *KmPr_Gamma2_S1CM = KmPr_M1_S2CM-&gt;GetDaughter(1); TArtParticle *KmPr_Gamma1_S1Lab = new TArtParticle( KmPr_Gamma1_S1CM-&gt;Vect(), KmPr_Gamma1_S1CM-&gt;E() ); TArtParticle *KmPr_Gamma2_S1Lab = new TArtParticle( KmPr_Gamma2_S1CM-&gt;Vect(), KmPr_Gamma2_S1CM-&gt;E() ); KmPr_Gamma1_S1Lab-&gt;Boost( KmPr_M0_S1CM-&gt;BoostVector() ); KmPr_Gamma2_S1Lab-&gt;Boost( KmPr_M0_S1CM-&gt;BoostVector() ); //Calculate Lamda Decay TArtParticle *KmPr_M2_S3CM = new TArtParticle( KmPr_Lm_S1CM-&gt;Vect(), KmPr_Lm_S1CM-&gt;E() ); KmPr_M2_S3CM-&gt;SetTwoBodyDecay( gAtomicMassTable-&gt;GetNucleusMass(1,1), gPDGMassTable-&gt;GetParticle(&#34;pi-&#34;)-&gt;Mass()*1000. ); KmPr_M2_S3CM-&gt;Decay(); TArtParticle *KmPr_Pr2_S3CM = KmPr_M2_S3CM-&gt;GetDaughterAtRest(0); TArtParticle *KmPr_Pim_S3CM = KmPr_M2_S3CM-&gt;GetDaughterAtRest(1); TArtParticle *KmPr_Pr2_S1CM = KmPr_M2_S3CM-&gt;GetDaughter(0); TArtParticle *KmPr_Pim_S1CM = KmPr_M2_S3CM-&gt;GetDaughter(1); TArtParticle *KmPr_Pr2_S1Lab = new TArtParticle( KmPr_Pr2_S1CM-&gt;Vect(), KmPr_Pr2_S1CM-&gt;E() ); TArtParticle *KmPr_Pim_S1Lab = new TArtParticle( KmPr_Pim_S1CM-&gt;Vect(), KmPr_Pim_S1CM-&gt;E() ); KmPr_Pr2_S1Lab-&gt;Boost( KmPr_M0_S1CM-&gt;BoostVector() ); KmPr_Pim_S1Lab-&gt;Boost( KmPr_M0_S1CM-&gt;BoostVector() ); fKmBeam = KmPr_Km_S1CM; fLambdaCM = KmPr_Lm_S1CM; fPi0CM = KmPr_Pi0_S1CM; fGamma1CM = KmPr_Gamma1_S1CM; fGamma2CM = KmPr_Gamma2_S1CM; fProCM = KmPr_Pr2_S1CM; fPimCM = KmPr_Pim_S1CM; fLambdaLab = KmPr_Lm_S1Lab; fPi0Lab = KmPr_Pi0_S1Lab; fGamma1Lab = KmPr_Gamma1_S1Lab; fGamma2Lab = KmPr_Gamma2_S1Lab; fProLab = KmPr_Pr2_S1Lab; fPimLab = KmPr_Pim_S1Lab; tree-&gt;Fill(); delete KmPr_Pr1_S1CM; delete KmPr_M0_S1CM; delete KmPr_M1_S2CM; delete KmPr_Gamma1_S1Lab; delete KmPr_Gamma2_S1Lab; delete KmPr_M2_S3CM; delete KmPr_Pr2_S1Lab; delete KmPr_Pim_S1Lab; } tree-&gt;Write(); file-&gt;Close(); delete file; delete KmBeam; } 使い方 上記のマクロは簡易的な解析環境のmacroのディレクトリにある。 ひとまず以下で実行してみよう</description>
    </item>
    <item>
      <title>ハドロンの基本情報と崩壊分岐比などをダンプするマクロ</title>
      <link>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/dump-hadron-properties/index.html</link>
      <pubDate>Mon, 29 Apr 2024 20:38:04 +0900</pubDate>
      <guid>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/dump-hadron-properties/index.html</guid>
      <description>警告 旧版の記事です。内容は更新前の記録として保存しており、現在の環境では手順が異なる場合があります。&#xA;新版の入口&#xA;Particle Data Groupのページに飛んで毎回PDFを見るのは大変なので、基本的な情報をダンプしてくれるマクロを準備しました。 第一引数にconst char*型で粒子の名前を指定すれば、指定したハドロンの質量や寿命をダンプしてくれます。 またTParticlePDGには崩壊チャンネルの情報が格納されており、TDecayChannelとして呼び出すことができます。 そのため、そのメソッドを使用して崩壊チャンネルと分岐比をダンプしています。 ソースコードは以下の通りです。&#xA;void GetDecayBranchFromPDG( const char* hname = &#34;K-&#34;) { TDatabasePDG* gPDGMassTable = new TDatabasePDG(); TString HadronName = hname; TParticlePDG *ParentHadron = gPDGMassTable-&gt;GetParticle(HadronName.Data()); Int_t NumOfDecayChannel = ParentHadron-&gt;NDecayChannels(); std::cout &lt;&lt; &#34; Parent Hadron : &#34; &lt;&lt; HadronName.Data() &lt;&lt; &#34;, Mass : &#34; &lt;&lt; ParentHadron-&gt;Mass()*1.e3 &lt;&lt; &#34;[MeV], Life Time : &#34; &lt;&lt; ParentHadron-&gt;Lifetime() &lt;&lt; &#34;[s]&#34; &lt;&lt; std::endl; for(Int_t i=0; i&lt;NumOfDecayChannel; i++){ TDecayChannel * DecayChannel = ParentHadron-&gt;DecayChannel(i); Double_t Val = DecayChannel-&gt;BranchingRatio(); Int_t NumOfDaughter = DecayChannel-&gt;NDaughters(); std::cout &lt;&lt; &#34; Decay Channel &#34; &lt;&lt; i &lt;&lt; &#34;, Branching Ratio : &#34; &lt;&lt; Val &lt;&lt; &#34;, Daughter List : &#34;; for(Int_t j=0; j&lt;NumOfDaughter; j++){ TParticlePDG *DaughterHadron = gPDGMassTable-&gt;GetParticle(DecayChannel-&gt;DaughterPdgCode(j)); std::cout &lt;&lt; DaughterHadron-&gt;GetName() &lt;&lt; &#34; &#34; ; } std::cout &lt;&lt; std::endl; } } ヒント 第一引数に指定する名前については結局、元のテキストファイルを見る必要があります。 パスは$ROOTSYS/etc/pdg_table.txtです。 中身は以下ようになっています。NAMEのところが第一引数に渡すべき名前です。</description>
    </item>
    <item>
      <title>3体崩壊（ハドロン）</title>
      <link>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/hadron-three-body-decay/index.html</link>
      <pubDate>Mon, 29 Apr 2024 18:29:49 +0900</pubDate>
      <guid>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/hadron-three-body-decay/index.html</guid>
      <description>警告 旧版の記事です。内容は更新前の記録として保存しており、現在の環境では手順が異なる場合があります。&#xA;新版の入口&#xA;二体反応まではArtemisの独自クラスTArtParticleにて簡単に計算することができますが、三体崩壊については少し複雑になります。 ここでは三体崩壊を自分たちで計算してみましょう。 想定する状況は以下の通りです。&#xA;二体反応（ハドロン）の時と同様に$K^{-}$を1 GeVまで加速した状態で飛行中に崩壊するという状況です。 二体崩壊と三体崩壊の異なる点は、重心系においても放出粒子のエネルギーが連続的なことです。 とはいえ崩壊によって生成される3つの粒子のうち2つの粒子を複合核のように扱って二体崩壊を計算したのちに、複合核の崩壊を考えればこれまでと近い形で計算できます。 このチュートリアルでは$K^{-} \rightarrow \pi^{-} + \pi^{-} + \pi^{+}$を計算しますが、これから計算過程の説明をしやすくするために崩壊粒子を以下のようにラベル付けします。&#xA;粒子1 : $\pi^{-} \rightarrow p_{1}^{\mu} = \left(E_{1},\,\vec{P_{1}}\right), \quad g_{\mu\nu}p_{1}^{\mu}p_{1}^{\nu} = \left(m_{1}\right)^{2}$ 粒子2 : $\pi^{+} \rightarrow p_{2}^{\mu} = \left(E_{2},\,\vec{P_{2}}\right), \quad g_{\mu\nu}p_{2}^{\mu}p_{2}^{\nu} = \left(m_{2}\right)^{2}$ 粒子3 : $\pi^{-} \rightarrow p_{3}^{\mu} = \left(E_{3},\,\vec{P_{3}}\right), \quad g_{\mu\nu}p_{3}^{\mu}p_{3}^{\nu} = \left(m_{3}\right)^{2}$ 念の為グローバル変数を再定義します。&#xA;artemis [0] TDatabasePDG* gPDGMassTable = new TDatabasePDG(); まずはよく使う変数を宣言します。</description>
    </item>
    <item>
      <title>2体反応（ハドロン）</title>
      <link>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/hadron-two-body-kinematics/index.html</link>
      <pubDate>Mon, 29 Apr 2024 17:04:04 +0900</pubDate>
      <guid>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/hadron-two-body-kinematics/index.html</guid>
      <description>警告 旧版の記事です。内容は更新前の記録として保存しており、現在の環境では手順が異なる場合があります。&#xA;新版の入口&#xA;$\pi^{-}$の寿命・飛行距離計算で使用したクラスを使用してもう少し高度な計算を行なってみたいと思います。 ここでは$K^{-} + p \rightarrow \pi^{0} + \Lambda$反応を計算してみたいと思います。 反応前の状況としては固定標的pに対して運動量で1 GeVまで加速した$K^{-}$が入射される感じです。 図示すると以下のとおりです。&#xA;最後に計算してみるが、今回生成される粒子の寿命は短く実験においては$\pi^{0}$や$\Lambda$の娘粒子を測定することになりますが、ここでは気にしません。 この後のモンテカルロをするマクロでは気にして見ようと思います。モンテカルロについてはここを参照してください。&#xA;念の為グローバル変数を再定義します。&#xA;artemis [0] TDatabasePDG* gPDGMassTable = new TDatabasePDG(); まず反応前の粒子である$K^{-}$および$p$を生成します。&#xA;artemis [0] TArtParticle *KmLab = new TArtParticle(); artemis [1] KmLab-&gt;SetXYZM(0,0,1000,gPDGMassTable-&gt;GetParticle(&#34;K-&#34;)-&gt;Mass()*1000.); artemis [2] TArtParticle *ProtonLab = new TArtParticle(); artemis [3] ProtonLab-&gt;SetXYZM(0,0,0, gAtomicMassTable-&gt;GetNucleusMass(1,1)); 上記のコマンドでそれぞれの粒子を生成しました。 ここでは計算の簡単化のため加速方向はビーム軸（Z軸）にしました。 また、陽子の質量についてはArtemisのグローバル変数gAtomicMassTableを使用します。 この変数はTArtAtomicMassTableというクラスが元になっています。。 Artemisのソースコードを見るとどのようなメソッドがあるか確認できます。 リンクは TArtAtomicMassTable.h と TArtAtomicMassTable.cc です。</description>
    </item>
    <item>
      <title>Lab系で寿命と飛行距離の計算</title>
      <link>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/lab-lifetime-flight-distance/index.html</link>
      <pubDate>Mon, 29 Apr 2024 15:37:37 +0900</pubDate>
      <guid>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/lab-lifetime-flight-distance/index.html</guid>
      <description>警告 旧版の記事です。内容は更新前の記録として保存しており、現在の環境では手順が異なる場合があります。&#xA;新版の入口&#xA;ROOT/Artemisには実験でよく計算する相対論計算用のクラスなどが整備されています。 その一例として、Particle Data Groupの値を使って$\pi^{-}$の寿命と飛行距離を計算してみます。 ここでは実験室系において、$P_{\mathrm{Lab}}=1\,\mathrm{GeV/c}$で運動する$\pi^{-}$を考えます。&#xA;まずParticle Data Groupの値を取ってくるところですが、このチュートリアルで作成した解析ディレクトリではgPDGMassTableを使います。 このグローバル変数はartemislogon.C内でTDatabasePDGを使って宣言されています。&#xA;ヒント TDatabasePDGはROOTの標準クラスであり、Particle Data Groupの値が格納されています。 元になっているファイルは$ROOTSYS/etc/pdg_table.txtです。 そのためgPDGMassTableをTDatabasePDG::Instance()に置き換えることでROOTのみで同様の計算ができます。&#xA;さて実際の計算ですが主に以下の2ステップです。&#xA;gPDGMassTableにて粒子の基本情報を取得 TArtParticleにて相対論の諸計算を行う 念の為グローバル変数を再定義しておきます。&#xA;artemis [0] TDatabasePDG* gPDGMassTable = new TDatabasePDG(); Warning in &lt;TDatabasePDG::TDatabasePDG&gt;: object already instantiated 事前にグローバル変数をちゃんと定義していればWarningがでるはずです。 出なくてもエラーが起きなければOKです。&#xA;さて、本題についてですが、まず粒子の取得方法ですが以下のようにします。&#xA;artemis [0] TParticlePDG *pim_pdg = gPDGMassTable-&gt;GetParticle(&#34;pi-&#34;); TParticlePDGが持つ質量および寿命の値を取得する。&#xA;artemis [1] Double_t pim_mass = pim_pdg-&gt;Mass() * 1.e3; artemis [2] Double_t pim_life = pim_pdg-&gt;Lifetime(); 上記のようにすることでそれぞれ質量と重心系での寿命が取得できます。 PDGではエネルギーはGeVになっていますが、ArtemisではMeVを基準にしているため取得した質量を1000倍しています。 以下で値を確かめることができます。</description>
    </item>
    <item>
      <title>解析環境を作ってみる</title>
      <link>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/setup-analysis-environment/index.html</link>
      <pubDate>Mon, 19 Feb 2024 21:54:34 +0900</pubDate>
      <guid>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/setup-analysis-environment/index.html</guid>
      <description>警告 旧版の記事です。内容は更新前の記録として保存しており、現在の環境では手順が異なる場合があります。&#xA;新版の入口&#xA;Artemisを使って色々試してみるため、簡易的な解析環境を構築する。&#xA;ここでは筆者が用意したリポジトリを使用する。&#xA;と入れ簡易的なのでGitHubクローン用のディレクトリに移動してクローンするだけでOKです。&#xA;cd $HOME/work/github git clone https://github.com/FumiHubCNS/artemis_training.git 解析環境はクローンした際に生成されるartemis_training内でに構築されています。&#xA;正しくArtemisがインストールされていれば、上記のディレクトリ内でartemisを起動後に以下のコマンドが実行でき、真っ白なTCanvasが表示されるはずです。&#xA;zone メモ Artemisの公式GitHubにはRIKENのOEDOビームラインで使用している解析環境のテンプレートが公開されている。しかしOEDOビームラインようの解析環境では汎用TPC用読み出しシステム(GET)解析用のライブラリを使用しているため、ミニマムバージョンのArtemisではエラーが起こる。そのためこの記事では公式の解析環境サンプルを使用しない。</description>
    </item>
    <item>
      <title>UbuntuにArtemisをインストール</title>
      <link>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/install-ubuntu/index.html</link>
      <pubDate>Mon, 19 Feb 2024 21:26:49 +0900</pubDate>
      <guid>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/install-ubuntu/index.html</guid>
      <description>警告 旧版の記事です。内容は更新前の記録として保存しており、現在の環境では手順が異なる場合があります。&#xA;新版の入口&#xA;UbuntuにArtemisを導入したので手順を書き残しておきます。&#xA;まずインストールしたUbuntuのバージョンは以下の通りです。&#xA;PRETTY_NAME=&#34;Ubuntu 22.04.3 LTS&#34; NAME=&#34;Ubuntu&#34; VERSION_ID=&#34;22.04&#34; VERSION=&#34;22.04.3 LTS (Jammy Jellyfish)&#34; VERSION_CODENAME=jammy ID=ubuntu ID_LIKE=debian HOME_URL=&#34;https://www.ubuntu.com/&#34; SUPPORT_URL=&#34;https://help.ubuntu.com/&#34; BUG_REPORT_URL=&#34;https://bugs.launchpad.net/ubuntu/&#34; PRIVACY_POLICY_URL=&#34;https://www.ubuntu.com/legal/terms-and-policies/privacy-policy&#34; UBUNTU_CODENAME=jammy インストールの流れは以下の通りです。&#xA;GitHubからROOTをインストール apt installでyaml-cpp 0.7.0をインストール GitHubからArtemisをインストール 今回の記事ではホームディレクトリ以下に作業用ディレクトリworkおよびGitHubのリポジトリをクローンするためのディレクトリgithubをそれぞれ作成してビルドしていきます。&#xA;下準備 まずはそれぞれののディレクトリを以下のコマンドで作成します。&#xA;mkdir work cd work mkdir github mkdir install cd github そしてgitを使えるようにしたり、makeできたりするようにする。&#xA;sudo apt install git sudo apt install make sudo apt install cmake sudo apt-get update &amp;&amp; sudo apt-get install build-essential sudo apt-get install libx11-dev libxpm-dev libxft-dev libxext-dev mesa-common-dev ROOTをインストール GitHubからクローンしてきます。</description>
    </item>
    <item>
      <title>運動学曲線を描く</title>
      <link>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/kinematics-curves/index.html</link>
      <pubDate>Sat, 09 Sep 2023 16:02:38 +0900</pubDate>
      <guid>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/kinematics-curves/index.html</guid>
      <description>警告 旧版の記事です。内容は更新前の記録として保存しており、現在の環境では手順が異なる場合があります。&#xA;新版の入口&#xA;実験に行う上で、測定したい反応や副次的に得られる反応の反跳粒子の運動エネルギー(TKE)や反跳角度、運動量移行といった量を計算することは多いと思います。&#xA;しかし、特殊相対論での運動学の計算コードを毎回書いていくのは非常に面倒くさいですよね。（こういうところで時間を取られるのは辛いですね…）&#xA;また、実験計画を立てる上でも上記のような量およびその相関を素早く確認できると嬉しいです。&#xA;そこでここでは、反跳粒子の運動エネルギー(TKE)と反跳角度相関と運動量移行を計算するマクロを作成します。&#xA;Artemisの解析環境が正しく設定されていれば、後述するコードをコピペするだけで使えるはずです。&#xA;得られる図は以下のような感じになります。&#xA;反跳粒子相関 運動量移行 この図では核子あたり100 MeVまで加速した$^{86}\mathrm{Kr}$と標的の重陽子の非弾性散乱の運動学を描画しています。&#xA;縦線は86Krの励起エネルギー、横線は重心系の角度を表しています。&#xA;青線の場合は励起エネルギー(Ex)が10の倍数MeVの時の相関に、赤線の場合は重心系の角度が5の倍数度の時の相関に対応しています。&#xA;左図の場合は一番右側の青線(TKEが25 MeVの時に80度付近の点を通る線)が弾性散乱(Ex=0)における相関です。&#xA;そして、左隣の青線がExが10 MeVの線、その隣の青線が20 MeVの線…となっています。&#xA;また赤線は一番下の線が重心系の角度が0度になっており、上に行くごとに5度ずつ上がっていきます。&#xA;なので、例えば5 MeVの反跳粒子が実験室系で75度に散乱される場合、Ex=10 MeVの86Krができたことになります。&#xA;一方で右図について一番左の青線が弾性散乱に対応しています。（原点を通っているのでそれはそうでしょうと思うかもしれませんが一応書いておきます）&#xA;マクロの使い方 何はともあれ、後述するソースコードをコピーしてマクロを作成します。&#xA;作成するマクロの名前はソースコードのメインの関数と同じにしておくと良いです。 ここではkinema.Cとmomentumtransfer.Cとしておくと良いです。&#xA;作成したらArtemisを起動し、以下のコマンドを実行します。 （運動学相関の場合は1行目を、運動量移行を計算する場合は2行目のコマンドを実行します。）&#xA;.x macro/kinema.C(86,36,2,1,86,36,100,0,100,1,25) .x macro/momentumtransfer.C(86,36,2,1,86,36,100,0,100,1,25) ヒント 引数については以下の通りです。</description>
    </item>
    <item>
      <title>matplotlibと同じ色を使う</title>
      <link>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/matplotlib-colors/index.html</link>
      <pubDate>Sat, 09 Sep 2023 14:50:34 +0900</pubDate>
      <guid>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/matplotlib-colors/index.html</guid>
      <description>警告 旧版の記事です。内容は更新前の記録として保存しており、現在の環境では手順が異なる場合があります。&#xA;新版の入口&#xA;ちょっとした遊びとして、Matplotlibの配色設定をROOTで再現してみます。 以下のコードで色の設定を行います。&#xA;std::vector&lt;Int_t&gt; GetMatplotlibColors() { std::vector&lt;Int_t&gt; colors; colors.push_back( TColor::GetColor(&#34;#1F77B4&#34;) ); colors.push_back( TColor::GetColor(&#34;#FF7F0E&#34;) ); colors.push_back( TColor::GetColor(&#34;#2CA02C&#34;) ); colors.push_back( TColor::GetColor(&#34;#D62728&#34;) ); colors.push_back( TColor::GetColor(&#34;#9467BD&#34;) ); colors.push_back( TColor::GetColor(&#34;#8C564B&#34;) ); colors.push_back( TColor::GetColor(&#34;#E377C2&#34;) ); colors.push_back( TColor::GetColor(&#34;#7F7F7F&#34;) ); colors.push_back( TColor::GetColor(&#34;#BCBD22&#34;) ); colors.push_back( TColor::GetColor(&#34;#17BECF&#34;) ); return colors; } あとはこの関数を読んでvector&lt;Int_t&gt;に詰めてあげれば良いだけです。 使用するときは適宜、SetLineColorやSetMarkerColorに登録してあげればOK。&#xA;以下にサンプルコードの置いておきます。 実行すると以下の図が出てきます。</description>
    </item>
    <item>
      <title>AlmaLinuxにArtemisをインストール</title>
      <link>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/install-almalinux/index.html</link>
      <pubDate>Sun, 20 Aug 2023 04:24:57 +0900</pubDate>
      <guid>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/install-almalinux/index.html</guid>
      <description>警告 旧版の記事です。内容は更新前の記録として保存しており、現在の環境では手順が異なる場合があります。&#xA;新版の入口&#xA;AlmaLinuxにArtemisを導入したので手順を書き残しておきます。（備忘録なのでかなり適当）&#xA;まずインストールしたAlmaLinuxのバージョンは以下の通りです。&#xA;LSB Version: :core-4.1-amd64:core-4.1-noarch Distributor ID: AlmaLinux Description: AlmaLinux release 8.8 (Sapphire Caracal) Release: 8.8 Codename: SapphireCaracal` 大まかな手順は以下の通りです。&#xA;yumでインストール可能なパッケージをインストール yaml-cpp 0.7.0をインストール artemisをインストール yumでパッケージをインストール sudo yum install root sudo yum install cmake sudo dnf install zlib-devel yaml-cpp 0.7.0のインストール yum installでもyaml-cppをインストールは可能なのですが、バージョン0.7.0に対応していないので直接入れる必要があります。ここではGitHubを使用します。リンクはここ。</description>
    </item>
    <item>
      <title>NixOSにArtemisをインストール</title>
      <link>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/install-nixos/index.html</link>
      <pubDate>Sat, 19 Aug 2023 15:02:09 +0900</pubDate>
      <guid>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/install-nixos/index.html</guid>
      <description>警告 旧版の記事です。内容は更新前の記録として保存しており、現在の環境では手順が異なる場合があります。&#xA;新版の入口&#xA;NixOSにArtemisを導入したので手順を書き残しておきます。（備忘録なのでかなり適当）&#xA;インストールするArtemisはdevelopブランチです。&#xA;NixOS自身の環境整備方法については割愛します。&#xA;大まかな手順は以下の通りです。&#xA;home.nixの設定 flake.nixの設定 設定を反映 artemisをインストール root/artemisの環境設定 home.nixの設定 ユーザー環境向けの環境構築ツールhome-managerにてartemisに必要なあれこれをインストールします。&#xA;~/.config/home-maneger/home.nix内のhome.packages以下に必要なパッケージを入れます。&#xA;# The home.packages option allows you to install Nix packages into your # environment. home.packages = [ # # Adds the &#39;hello&#39; command to your environment. It prints a friendly # # &#34;Hello, world!&#34; when run. # pkgs.hello # # It is sometimes useful to fine-tune packages, for example, by applying # # overrides. You can do that directly here, just don&#39;t forget the # # parentheses. Maybe you want to install Nerd Fonts with a limited number of # # fonts? # (pkgs.nerdfonts.override { fonts = [ &#34;FantasqueSansMono&#34; ]; }) # # You can also create simple shell scripts directly inside your # # configuration. For example, this adds a command &#39;my-hello&#39; to your # # environment: # (pkgs.writeShellScriptBin &#34;my-hello&#34; &#39;&#39; # echo &#34;Hello, ${config.home.username}!&#34; # &#39;&#39;) pkgs.git pkgs.tmux pkgs.root pkgs.yaml-cpp pkgs.cmake pkgs.zlib ]; flake.nixの設定 rootやC++などを導入したシェルを立ち上げるための設定をflake.nixに書きます。</description>
    </item>
    <item>
      <title>ヒストグラムファイルを作成する</title>
      <link>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/tree-projection-histograms/index.html</link>
      <pubDate>Sun, 06 Aug 2023 18:47:27 +0900</pubDate>
      <guid>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/tree-projection-histograms/index.html</guid>
      <description>警告 旧版の記事です。内容は更新前の記録として保存しており、現在の環境では手順が異なる場合があります。&#xA;新版の入口&#xA;tree-&gt;Draw()はいろいろな相関を見れる良い方法ですが、決まった相関を複数確認したい時（シフト業務など）には向いていません。&#xA;そこでここではTTreeProjectionProcessorを使ってあらかじめヒストグラムを定義しておく方法を紹介します。&#xA;この手法の良いとして以下のようなものが挙げられます。&#xA;複数の相関を短時間で確認できること 解析中に逐次相関を確認できること 操作が簡単のでシフト業務などに有用 さて、TTreeProjectionProcessorの使い方ですが、別のyamlファイルにてヒストグラムの定義をする必要があります。&#xA;ここでは、二体反応のシミュレーションを使います。&#xA;まず、以下のようにヒストグラムを定義していきます。ここではhist/TwoBodyReaction.hist.yamlという名前にしておきます。&#xA;alias: ScatThetaCM: mctruth[2].Theta()*TMath::RadToDeg() scatEx: mctruth[2].fE-mctruth[2].TKE()-mctruth[0].M() recoilTKE: recoil.TKE() recoilThetaLab: recoil.Theta()*TMath::RadToDeg() pmag: TMath::Sqrt( recoil.Px()*recoil.Px() + recoil.Py()*recoil.Py() + recoil.Pz()*recoil.Pz() ) qprojxy: TMath::Sqrt(pmag*pmag-recoil.Pz()*recoil.Pz())/197 qz: recoil.Pz()/197 group: - name: monte_carlo_simulation title: Monte-Carlo Simulation ( Two Body Reaction) contents: - name: sact_theta title: Angular Distribution (CM System) x: [&#34;ScatThetaCM&#34;, 200, 0.0, 15.0] - name: ex title: Excitation Energy Distribution x: [&#34;scatEx&#34;, 200, 0., 30.] - name: momentum_transfer title: q_{xy} vs q_{z} (Momentum Transfer) x: [&#34;qz&#34;, 200, -0.05, 1.95] y: [&#34;qprojxy&#34;, 200,-0.05, 1.95] - name: kinematics title: TKE vs Theta_{Lab} (Kinematics) x: [&#34;recoilThetaLab&#34;, 200, 0, 90] y: [&#34;recoilTKE&#34;, 200, 0, 15] ヒント group:でヒストグラムのグループを定義し、contents:以降の- name:にてヒストグラムを定義します。 一次元ならx:のみ、二次元ならx:、y:をマッピングします。リストの中身は[描画したいデータ、Bin数、最小値、最大値]です。 そのほかにもゲートをかける(cut:)や次元の違う配列の比較を行う(async:)などのオプションがあります。</description>
    </item>
    <item>
      <title>2体反応シミュレーション</title>
      <link>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/two-body-simulation/index.html</link>
      <pubDate>Sun, 06 Aug 2023 15:29:00 +0900</pubDate>
      <guid>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/two-body-simulation/index.html</guid>
      <description>警告 旧版の記事です。内容は更新前の記録として保存しており、現在の環境では手順が異なる場合があります。&#xA;新版の入口&#xA;Steering fileを自分で書いてみて実際にArtemisを動かしてみようPart2。&#xA;今回は2体反応のシミュレーションを行います。&#xA;以下のような条件を想定しています。&#xA;実験室系で考えると、ビーム粒子Particle1と静止している反応標的Particle2が、散乱粒子Particle3と反跳粒子Paricle4となる反応です。&#xA;以下のようなyamlファイルを作成します。(ここで準備した環境ではsteering/TwoBodyReaction.yamlです。)&#xA;Anchor: - &amp;maxevt 100000 - &amp;output output/sim/ TwoBodyReaction.root Processor: - name: timer type: art::TTimerProcessor ################################################################################################## - name: MyTProcessor type: art::TBinaryReactionGenerator parameter: AngDistFile: &#34;&#34; # [TString] file name of the angular distribution. The format of content is &#39;%f %f&#39;. AngMom: 0 # [Int_t] angular momentum for bessel function. If -1 (default), the isotopic distribution is assumed. AngRange: [0, 15] # [FloatVec_t] the range of angular distribution DoRandomizePhi: 1 # [Int_t] Flag to randomize phi direction (uniform) ExMean: 15 # [Float_t] mean of excitation energy ExRange: [0, 30] # [FloatVec_t] the range of excitation energy ExWidth: 7 # [Float_t] width of excitation energy : default is delta function KinMean: 100 # [Float_t] mean kinetic energy per nucleon MCTruthCollection: mctruth # [TString] output name of MC truth MaxLoop: *maxevt # [Int_t] the maximum number of loop OutputCollection: recoil # [TString] output name of particle array OutputTransparency: 0 # [Bool_t] Output is persistent if false (default) Particle1: [86, 36] # [IntVec_t] mass and atomic number for particle1 Particle2: [2, 1] # [IntVec_t] mass and atomic number for particle2 Particle3: [86, 36] # [IntVec_t] mass and atomic number for particle3 RunName: sim # [TString] run name RunNumber: 0 # [Int_t] run number Verbose: 1 # [Int_t] verbose level (default 1 : non quiet) ################################################################################################## - name: MyTOutputTreeProcessor type: art::TOutputTreeProcessor parameter: FileName: *output # [TString] The name of output file OutputTransparency: 0 # [Bool_t] Output is persistent if false (default) SplitLevel: 0 # [Int_t] Split level of tree defined in TTree (default is changed to be 0) TreeName: tree # [TString] The name of output tree Verbose: 1 # [Int_t] verbose level (default 1 : non quiet) ################################################################################################## ヒント art::TBinaryReactionGeneratorのパラメータのいくつか変更するだけで好きな反応計算を行うことができます。</description>
    </item>
    <item>
      <title>モンテカルロ積分(N次元球体積)</title>
      <link>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/monte-carlo-hypersphere/index.html</link>
      <pubDate>Fri, 04 Aug 2023 01:44:35 +0900</pubDate>
      <guid>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/monte-carlo-hypersphere/index.html</guid>
      <description>警告 旧版の記事です。内容は更新前の記録として保存しており、現在の環境では手順が異なる場合があります。&#xA;新版の入口&#xA;Steering fileを自分で書いてみて実際にArtemisを動かしてみよう。&#xA;チュートリアルではこの記事で準備した解析環境を使用します。&#xA;ここを参考に、4次元球までの体積をモンテカルロ積分で計算してみます。&#xA;Artemisで疑似乱数を生成する場合はTRandomNumberEventStoreを使えば良いです。&#xA;まずは以下のようなyamlファイルを作成します。&#xA;ここではファイル名をNDimSphere.yamlとして、steeringの中に作成します。&#xA;Anchor: - &amp;maxevt 1000000 - &amp;output output/sim/NDimSphere.root Processor: - name: timer type: art::TTimerProcessor ################################################################################################## - name: MyTRandomNumberEventStore type: art::TRandomNumberEventStore parameter: Max: 1 # [Float_t] the maximum value MaxLoop: *maxevt # [Int_t] the maximum number of loop Min: 0 # [Float_t] the minimum value OutputCollection: dim1 # [TString] output name of random values OutputTransparency: 0 # [Bool_t] Output is persistent if false (default) Verbose: 1 # [Int_t] verbose level (default 1 : non quiet) ################################################################################################## - name: MyTRandomNumberEventStore type: art::TRandomNumberEventStore parameter: Max: 1 # [Float_t] the maximum value MaxLoop: *maxevt # [Int_t] the maximum number of loop Min: 0 # [Float_t] the minimum value OutputCollection: dim2 # [TString] output name of random values OutputTransparency: 0 # [Bool_t] Output is persistent if false (default) Verbose: 1 # [Int_t] verbose level (default 1 : non quiet) ################################################################################################## - name: MyTRandomNumberEventStore type: art::TRandomNumberEventStore parameter: Max: 1 # [Float_t] the maximum value MaxLoop: *maxevt # [Int_t] the maximum number of loop Min: 0 # [Float_t] the minimum value OutputCollection: dim3 # [TString] output name of random values OutputTransparency: 0 # [Bool_t] Output is persistent if false (default) Verbose: 1 # [Int_t] verbose level (default 1 : non quiet) ################################################################################################## - name: MyTRandomNumberEventStore type: art::TRandomNumberEventStore parameter: Max: 1 # [Float_t] the maximum value MaxLoop: *maxevt # [Int_t] the maximum number of loop Min: 0 # [Float_t] the minimum value OutputCollection: dim4 # [TString] output name of random values OutputTransparency: 0 # [Bool_t] Output is persistent if false (default) Verbose: 1 # [Int_t] verbose level (default 1 : non quiet) ################################################################################################## - name: MyTOutputTreeProcessor type: art::TOutputTreeProcessor parameter: FileName: *output # [TString] The name of output file OutputTransparency: 0 # [Bool_t] Output is persistent if false (default) SplitLevel: 0 # [Int_t] Split level of tree defined in TTree (default is changed to be 0) TreeName: tree # [TString] The name of output tree Verbose: 1 # [Int_t] verbose level (default 1 : non quiet) ################################################################################################## 次にartemisを起動します。</description>
    </item>
    <item>
      <title>saveで保存したrootファイルからヒストグラムのオブジェクトを取得する</title>
      <link>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/extract-saved-histograms/index.html</link>
      <pubDate>Sun, 30 Jul 2023 00:35:35 +0900</pubDate>
      <guid>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/extract-saved-histograms/index.html</guid>
      <description>警告 旧版の記事です。内容は更新前の記録として保存しており、現在の環境では手順が異なる場合があります。&#xA;新版の入口&#xA;artemisにてsaveコマンドを実行すると&#34;unixtime&#34;.png、“unixtime”.pdf、“unixtime”.rootファイルが保存されます。&#xA;学会発表などで、数年前にsaveした図を使いたいが、判例や罫線が邪魔、ラベルなどの名前を変えたいということがあると思います。&#xA;どのrootファイルから作成したのかわかっていればDrawしなおせば済むのですが、探すのが面倒だったり、覚えていないなどということがよくあります。&#xA;そこでこの記事ではsaveで保存したrootファイルからヒストグラムのオブジェクトを抜き出す方法を書いておきます。&#xA;とはいえ、TCanvasをrootファイルで保存しているだけなので結構簡単です。&#xA;まずがrootファイルを開きます。&#xA;→ a figs/&#34;date&#34;/&#34;unixtime&#34;.root Attaching file figs/&#34;date&#34;/&#34;unixtime&#34;.root as _file0... (TFile *) 0x5bb5ea0 artemis [1] .ls TFile** figs/&#34;date&#34;/&#34;unixtime&#34;.root TFile* figs/&#34;date&#34;/&#34;unixtime&#34;.root KEY: TCanvas artcanvas;1 canvas 次にTSeqCollectionからTFileのリスト、TFile、TCanvas`を順に取得します。&#xA;TSeqCollection* filelist = gROOT-&gt;GetListOfFiles(); TFile* tfi = (TFile*)filelist-&gt;At(0); TCanvas* acan = (TCanvas *) tfi-&gt;Get(&#34;artcanvas;1&#34;); このようにして取得したTCanvasの中身は以下の通りです。&#xA;artemis [5] acan-&gt;ls() Canvas Name=artcanvas Title=canvas Option= TCanvas fXlowNDC=0 fYlowNDC=0 fWNDC=1 fHNDC=1 Name= artcanvas Title= canvas Option= OBJ: TList TList Doubly linked list : 0 OBJ: TPaveLabel TPave X1= 0.500000 Y1=0.920000 X2=0.950000 Y2=0.950000 OBJ: TPaveLabel TPave X1= 0.050000 Y1=0.960000 X2=0.950000 Y2=0.990000 OBJ: TPaveLabel TPave X1= 0.080000 Y1=0.920000 X2=0.500000 Y2=0.950000 TPad fXlowNDC=0.05 fYlowNDC=0.01 fWNDC=0.9 fHNDC=0.9 Name= graphs Title= graphs Option= OBJ: TList TList Doubly linked list : 0 TFrame X1= 0.000000 Y1=-250000.000000 X2=350.000000 Y2=10000.000000 OBJ: TH2F histogram Y vs X : 1 at: 0x932a070 OBJ: TPaveText title X1= 21.874998 Y1=21330.330116 X2=328.125002 Y2=40875.003947 OBJ: TH1D th2favx Fitted value of par[1]=Mean : 1 at: 0x45b3b40 Text X=0.100000 Y=0.900000 Text=slope : 1049.271840, offset : -357459.224941 上記のOBJ: TH2F histogram Y vs X : 1 at: 0x932a070がヒストグラムです。</description>
    </item>
    <item>
      <title>オンライン解析用チュートリアル</title>
      <link>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/online-analysis-tutorial/index.html</link>
      <pubDate>Sun, 09 Jul 2023 23:43:09 +0900</pubDate>
      <guid>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/online-analysis-tutorial/index.html</guid>
      <description>警告 旧版の記事です。内容は更新前の記録として保存しており、現在の環境では手順が異なる場合があります。&#xA;新版の入口&#xA;artemisを使ってオンライン解析などをする際に必要な設定などをまとめておきます。&#xA;この記事ではartemisを使ったことのないユーザーに向けて、ひとまず解析できるようになり、各検出器で取得したデータの相関を確認できるようになるまでを目標にします。&#xA;解析用ディレクトリの整備・拡張方法や解析用のyamlファイルの作り方はおいておきます。&#xA;SSHクライアント用の設定ファイルの設定 artemisではVNCを使って解析サーバーのデスクトップ画面を表示させています。&#xA;毎回sshのコマンドを打ち込んでも良いのですが、一番手っ取り早いのは.ssh/configに以下を追加することです。&#xA;host analysis_server hostname analysis_server_name user username LocalForward 15901 analysis_server_name:5901 analysis_server_nameに解析サーバーの名前またはIPアドレスを書き、使用する解析環境が入っているユーザー名をusernameに書きます。（実験課題番号がユーザー名になっていることは多い気がします。）&#xA;また5091と15901も意味がある数字です。&#xA;前者は解析サーバーに立てるVNCサーバーのポート番号です。&#xA;後述しますがVNCサーバーの番号+5900の値を記入する必要があります。&#xA;後者は自分のPC側のポート番号です。&#xA;VNC viewerなどで画面を映す時に使います。&#xA;メモ 自分のPCから直接解析サーバーにアクセスできる場合は上記の記述だけで問題ないのですが、そうでない場合もよくあるような気がします。その場合はログインサーバーなどを経由した多段sshをする必要があります。その場合は以下のように書きます。&#xA;Host login_server user username2 hostname login_server_name host analysis_server ProxyCommand ssh username@login_server_name -Y nc %h %p hostname analysis_server_name user username LocalForward 15901 analysis_server_name:5901 VNCサーバーの建て方 tree-&gt;Draw()などを使ってオンラインで解析する場合ははあらかじめVNCサーバーをたてる必要があります。</description>
    </item>
    <item>
      <title>よく使うコマンド</title>
      <link>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/common-commands/index.html</link>
      <pubDate>Sun, 09 Jul 2023 22:55:38 +0900</pubDate>
      <guid>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/common-commands/index.html</guid>
      <description>警告 旧版の記事です。内容は更新前の記録として保存しており、現在の環境では手順が異なる場合があります。&#xA;新版の入口&#xA;artemisではいくつかの使えるコマンドがある。&#xA;artemislogon.Cなどを使って、コマンドを登録する必要がある。&#xA;以下が筆者がよく使うコマンドリストである。&#xA;help : コマンドをド忘れしたらこれを打つ。 add : yamlファイルを読み込むコマンド res : 読み込んだyamlファイルを使って解析をスタートさせるコマンド fls : 読み込んだTFileのリストを出力する。 fcd : TFileの番号を指定する proc : プロセッサに必要なパラメータリストを出力する。 zone : Artemisでの標準のTCanvas(artcanvas)を作る。 gcom : artcanvasにコメントをかける（zoneしても消えない）。 comment : artcanvasにコメントかける（zoneすると消える）。 save : artcanvasを.root,.pdf,.png形式て保存するコマンド lgz : z軸をログスケールにする。lgx、lgyもある。 lnz : z軸をリニアにする。lgx、lgyもある。 ht : 番号を指定してヒストグラムを表示する。 hn : 次の番号のヒストグラムを描画する。 hp : 前の番号のヒストグラムを描画する。 slo : GUIを使ってartcanvasに直線を引く avx : TH2をXビンごとにスライスしてガウシアンでFitする。</description>
    </item>
    <item>
      <title>Artemisで.rootの再解析</title>
      <link>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/reanalyze-root-files/index.html</link>
      <pubDate>Sun, 09 Jul 2023 17:16:29 +0900</pubDate>
      <guid>https://www.rcnp.osaka-u.ac.jp/~fendo/ja/wiki/artemis-old/reanalyze-root-files/index.html</guid>
      <description>警告 旧版の記事です。内容は更新前の記録として保存しており、現在の環境では手順が異なる場合があります。&#xA;新版の入口&#xA;artemisを使って作成したrootファイル(例えばhoge.root)をインプットにして別のプロセッサを走られる方法のメモ。&#xA;といってもやり方は簡単で、art::TTreeEventStoreを使えば良いだけです。&#xA;例えば、treeという名前でTTreeが入っているrootファイルを再解析する場合は、以下のようにyamlファイルを作成すれば良いはずです。&#xA;あとはartemisを起動したのちにadd hogehoge.yaml、resを打つだけでいけると思います。&#xA;Anchor: - &amp;maxEvtNum 0 - &amp;input input.root - &amp;output output.root Processor: ################################################################################## ### TTimeProcessor ################################################################################## - name: timer type: art::TTimerProcessor ################################################################################## ### TTreeEventStore ################################################################################## - name: MyTTreeEventStore type: art::TTreeEventStore parameter: MaxEventNum: *maxEvtNum TreeName: tree FileName: *input メモ outputファイルにはinputファイルのブランチは詰まっていないことに注意。 相関を見たい場合はAddFriendを使ってくっつける必要あり。 詳細はKamonoWikiを参照。</description>
    </item>
  </channel>
</rss>