ROOT講習会-講習編神⼾⼤ 東野 聡
2021/3/17

1

⾃⼰紹介
これ2

神⼾⼤NEWAGEグループ

東野 聡 (ひがしの さとし)
名古屋ではない• 1988年 愛知県安城市⽣まれ• 2007年 阪⼤理学部物理学科⼊学
みたことないPC諸悪の根源Ø 学部4回でLinuxとROOTに出会う• 2013年 阪⼤修⼠卒、⺠間企業に就職

ATLAS実験

回路系CAD開発

Ø ソフトウェア開発の会社で本格的にプログラミング習得• 2015年 総研⼤博⼠課程就職 (10⽉)

ATLAS実験• 2020年 博⼠号取得 (3⽉)
弱測定 @Belle• 2020年 KEKで研究⽀援員 (5⽉)
• 2020年 神⼾⼤ポスドク着任 (9⽉)
3

NEWEAGE実験

ダークマター探索！

いろいろやってきた
M1-M2
電⼦基板 (正確には検出器) 作って動かした

D1-D3
超巨⼤検出器動かした

Figure 1.1: Cut-away view of the ATLAS detector. The dimensions of the detector are 25 m inheight and 44 m in length. The overall weight of the detector is approximately 7000 tonnes.
The ATLAS detector is nominally forward-backward symmetric with respect to the interaction point. The magnet configuration comprises a thin superconducting solenoid surrounding theinner-detector cavity, and three large superconducting toroids (one barrel and two end-caps) arranged with an eight-fold azimuthal symmetry around the calorimeters. This fundamental choice
has driven the design of the rest of the detector.
The inner detector is immersed in a 2 T solenoidal field. Pattern recognition, momentum
and vertex measurements, and electron identification are achieved with a combination of discrete,high-resolution semiconductor pixel and strip detectors in the inner part of the tracking volume,and straw-tube tracking detectors with the capability to generate and detect transition radiation in
its outer part.
High granularity liquid-argon (LAr) electromagnetic sampling calorimeters, with excellent
performance in terms of energy and position resolution, cover the pseudorapidity range | | < 3.2.
The hadronic calorimetry in the range | | < 1.7 is provided by a scintillator-tile calorimeter, which
is separated into a large barrel and two smaller extended barrel cylinders, one on either side of
the central barrel. In the end-caps (| | > 1.5), LAr technology is also used for the hadronic
calorimeters, matching the outer | | limits of end-cap electromagnetic calorimeters. The LAr
forward calorimeters provide both electromagnetic and hadronic energy measurements, and extend
the pseudorapidity coverage to | | = 4.9.
The calorimeter is surrounded by the muon spectrometer. The air-core toroid system, with along barrel and two inserted end-cap magnets, generates strong bending power in a large volume
within a light and open structure. Multiple-scattering effects are thereby minimised, and excellent
muon momentum resolution is achieved with three layers of high precision tracking chambers.

研究⽀援員
量⼦⼒学検証のシミュレーション、論⽂書いた(PRDにサブミット
arXiv: 2011.07560)–4–

残念ながら全てのシーンでROOT⼤活躍
4

2008 JINST 3 S08003

D2-D4
ヒッグス粒⼦ (とトップクォークとの結合) みつけた

ATLAS検出器

内部⾶跡検出器(の⼀番中央の検出器)

ポスドク
⼤型検出器
⽴ち上げた本⽇の⽬標• 物理はROOTファイルにありØ もちろん過⾔• 物理が⼊った (?) ROOTファイル渡しますØ ROOTファイルを開けるようになるØ ファイルを開いて何かプロット作ってみる

5

復習編
ROOTインストールできてますか？
⽬安： 10:00 ‒ 10:30

6

(復習) ROOTとは？
• 素直にググってみる

データ解析に使えるらしい⾼エネルギー物理などで使ってるみたい

7

(復習) で、結局ROOTとは？
• 簡単にいうと統計解析や科学計算に必要な機能を持った
C++のライブラリ• 描画も得意、きれいなプロットが描けるØ(これは実は賛否両論)とある実験屋のデスクトップ

シミュレーションで作ったデータを眺めているところ

こんなプロットもROOTで描ける

8

フィッティングもやってくれる

とか⾔われてもわからないので• とりあえず起動してみましょう• おまじないØ $ source [buildした場所]/bin/thisroot.shØ ROOTライブラリにpathを通している• いよいよ起動Ø $ root9

起動チェック• ⽴ち上がったらOK
Ø ".q"と⼊⼒して抜ける ("quit"のq)• ROOTをもっと便利に使うために
Ø .bashrcとかに書き込みましょう

エディタはなんでもよい
知ってる⼈はemacsやvimでOK(ちなみに東野はemacs派)

Ø $ nano ~/.bashrc§ source [buildした場所]/bin/thisroot.sh の⾏を追加§ セーブして終了 (ちょっとクセが強いので注意)Ø 以降、端末⽴ち上げ時にthisroot.shを勝⼿にsourceする
10もっかい起動• チュートリアルコードが提供されてる• たとえば…
Ø$ root ${ROOTSYS}/tutorials/hist/fillrandom.C§ 特に意味はないプロットだが動作確認⽤§ こんな図が作れますØ

チュートリアルでは基本 "root XXX.C" でいろいろ動く§ いろいろ試してみてください§ おもしろそうなのでは…
- $ root ${ROOTSYS}/tutorials/roofit/rf708_bphysics.C(CP violation)- $ root ${ROOTSYS}/tutorials/tmva/TMVAClassification.C(機械学習)

11

注意：たまに動かないのもある(ROOTの例外処理がザル)

c.f. エディタについて• Windowsでいうメモ帳のようなもの
Ø が、プログラミングには向いていない§ というかプログラミング特化のものが多数
Ø 代表的なものを紹介 (Linux向けだがWindows/Mac対応あり)§ emacs

⽼害御⽤達 昔から愛されてる§ vim

⽼害御⽤達 昔から愛されてる§ Sublime text 3

きれいで優秀 (有料だが無料で使える)§ Atom

GitHub社開発、こちらもきれい§ nano/pico

やさしい(?)、初期インストール済12

講習編 その1
ヒッグス粒⼦の話を交えてちょっと座学
⽬安：10:30 ‒ 11:00

13

ROOTで実験屋がやりたいこと• 実験データを「統計的に」処理<latexit sha1_base64="UaFMyfGWWqUZDGfNZ57rWJAmVow=">AAACEnicbVC7TsMwFHXKq5RXgJHFokKCpUoqEIwVLB2LRB9SEyrHdVqrjhPZDlKV5htY+BUWBhBiZWLjb3DSDNByJEvH59yre+/xIkalsqxvo7Syura+Ud6sbG3v7O6Z+wcdGcYCkzYOWSh6HpKEUU7aiipGepEgKPAY6XqTm8zvPhAhacjv1DQiboBGnPoUI6WlgXk2cxjiI0agD2fQCZAaY8SSZqp/FDoi92b3ST0dmFWrZuWAy8QuSBUUaA3ML2cY4jggXGGGpOzbVqTcBAlFMSNpxYkliRCeoBHpa8pRQKSb5Cel8EQrQ+iHQj+uYK7+7khQIOU08HRltrNc9DLxP68fK//KTSiPYkU4ng/yYwZVCLN84JAKghWbaoKwoHpXiMdIIKx0ihUdgr148jLp1Gv2Rc26Pa82ros4yuAIHINTYINL0ABN0AJtgMEjeAav4M14Ml6Md+NjXloyip5D8AfG5w+Sf51q</latexit>|hf |H|ii|2Ø

量⼦⼒学的には残念ながら波の振幅の2乗は確率密度 (ボルンの解釈)

Ø

例：LHC-ATLAS実験におけるヒッグス粒⼦探索 (東野のD論テーマ)§

世界最⾼エネルギーでの陽⼦-陽⼦衝突実験

衝突！

重⼼系エネルギー: 13 TeV

陽⼦の集団

陽⼦の集団

14

ROOTで実験屋がやりたいことパートンレベルで起こっていること (ファインマン図：わからなかったら聞き流してください)

いろんなプロセスでヒッグス粒⼦はできる衝突！

重⼼系エネルギー: 13 TeV

陽⼦の集団

陽⼦の集団

ヒッグス粒⼦(場)は確率振幅が⼩さい→超低確率
15

ROOTで実験屋がやりたいこと• 衝突によりいろんな粒⼦が⾶び散るØ

サイコロ振るようなもの。何ができるかは確率に従う

Ø

この衝突を何回も何回も繰り返すと…

？
？

？

陽⼦の集団

？

？
？
16

陽⼦の集団

ROOTで実験屋がやりたいこと• 衝突によりいろんな粒⼦が⾶び散るØ

サイコロ振るようなもの。何ができるかは確率に従う

Ø

この衝突を何回も何回も繰り返すと…

？
？

？
H

陽⼦の集団

？

？
？
17

陽⼦の集団
ごくたまにヒッグス粒⼦出現！

ROOTで実験屋がやりたいこと• 衝突によりいろんな粒⼦が⾶び散るØ

サイコロ振るようなもの。何ができるかは確率に従う
実は検出器によって特定可能

Ø→終状態からヒッグス粒⼦を同定
この衝突を何回も何回も繰り返すと…
bbe
H

陽⼦の集団

μγγ
18

陽⼦の集団

ROOTで実験屋がやりたいことヒッグスっぽくないのをどんどん捨てる• D論時のデータ：陽⼦衝突数が~1016

19

たったこれだけ…どころではない！

ROOTで実験屋がやりたいこと• 残った数：~33 イベント

ピーク付近のイベント
がヒッグスっぽいその周辺のイベントはヒッグスっぽくない20要するに…
• どの衝突 (=事象:イベント) で対象物 (ヒッグス粒⼦) が⽣成されたか知りたいØ

各衝突で得られる情報からたどるしかないØ

イベントセレクションと呼んでいる

⼀回のイベント
粒⼦の種類
⽣成粒⼦
粒⼦の種類
⽣成粒⼦
粒⼦の種類
⽣成粒⼦ エネルギー
エネルギー
粒⼦の種類
⽣成粒⼦ 運動量ベクトル
エネルギー
運動量ベクトル
エネルギー
運動量ベクトル
電荷
運動量ベクトル
電荷
… 電荷
… 電荷
…
…

⾮常に複雑！
しかもこれが1016個
もはやビッグデータ解析…

どうやってやろう…?

消失エネルギー
検出器情報いろいろ…

→ 話をROOTに戻しましょう
21

ROOTの強み (1)• 各イベント情報ごとにデータを持てるØ それぞれがツリー構造
イベント
イベント
⽣成粒⼦情報粒⼦のイベント
⽣成粒⼦の⽣成エネル
⽣成粒⼦情報粒⼦のイベント
粒⼦の⽣成
⽣成
エネル
種類
粒⼦の粒⼦
⽣成
種類
エネル
⽣成粒⼦情報エネル
粒⼦の粒⼦粒⼦の⽣成
⽣成
ル
ギー
エネル
種類
種類
粒⼦の粒⼦
粒⼦
⽣成
電荷
ギー
種類
⽣成粒⼦情報エネル
エネル
粒⼦の粒⼦の粒⼦
⽣成
⽣成
電荷
ル
ギー
ギー
エネル
種類
粒⼦の種類
粒⼦
⽣成粒⼦
電荷
電荷
ギー
種類
エネル
エネル
粒⼦の粒⼦
⽣成
電荷
ル
ギー
エネル
ギー
種類
種類
粒⼦
粒⼦
電荷
電荷
ギー
種類
エネル
粒⼦
ル
ギー
ギー
種類
粒⼦電荷
電荷
ギー
電荷
電荷
ギー
検出器情報
電荷
検出器情報
検出器情報
検出器情報

実際のツリー構造…

※wikipediaよりhttps://root.cern.ch/doc/master/classTTree.htmlと⾔われても難しいと思うので、あとでROOTファイル⾒てみましょう
22

ROOTの強み (2)• 統計的な計算が⼤得意Ø フィッティングなど§ 例: tutorials/fit/fitNormSum.C
ヒストグラムなどに対して複雑な関数系でも定義、フィット可→統計誤差をよしなに計算してくれる
乱数⽣成も得意なのでToy MCによる評価もROOTでバッチリ(今⽇はこの話はしません)

23

時間が余ったら…
• チュートリアルでガンガン遊びましょうØ なんか⾯⽩いチュートリアル⾒つけて教えてください§ それについてコード読んで説明します24

講習編 その2
いよいよファイル開いていきましょう
⽬安：11:00 ‒ 12:00

25

ROOTファイル• どうせならおもしろそうなもの使いましょうØ ATLAS Open Data

§ http://opendata.atlas.cern§ ATLASのデータとシミュレーションがもらえる- ページ右上のData → 13 TeVのデータ⼀覧へ←いろんなデータあります
が、下⼿すると20 GBくらいこの中から勝⼿に選んで⽤意しました (次ページ)
26

お好きな物理をどうぞ• Diphoton events (終状態にフォトンが2個)
ヒッグス探索ゴールデンチャンネル
信号がきれい(背景事象 = ゴミイベントも多い)• Four-lepton events (終状態に荷電レプトン: e, μが4個)
同じくヒッグス探索ゴールデンチャンネル
信号がきれい(背景事象少ないが信号も少ない)• Two-lepton events (終状態に荷電レプトン: e, μが2個)
ヒッグスじゃないけどZボソンの崩壊(ドレル-ヤン過程)
信号めっちゃ多い27

ファイル置き場• https://cernbox.cern.ch/index.php/s/0bJ9P7LYRLu8Zne• dataというディレクトリからダウンロード
Ø 余談ですがCERNBoxというクラウドストレージも開発してるØ なんでもやっている。おそるべしCERN• ファイル拡張⼦は".root"Ø 普通にダブルクリックしても開かないので注意28開く前に…
• ROOTどうやって使うの？
Ø C++ライブラリとして使う§ C++ソースコードに組み込んでコンパイルØ "マクロ" として使う§ コンパイル不要 (というかインタラクティブにやる)- インタプリタとしてClingを使⽤Ø "対話モード" で使う§ 今⽇は主にこれを使っていく29

やってみよう• $ rootØ 実はこれで対話モードとしてROOT起動• ROOTはC++⾔語で動かす
Ø 実はここでプログラミングができる§ 例：std::cout << "Hello world!" << std::endl;

30

計算もできるので関数電卓代わりやっとファイルを開く• $ root xxx.root
これで開いている(雑談) 実は最初にこっそり以下をやっている
TFile *_file0 = TFile::Open("data_gamgam.root")というわけでC++のように書いてみると…

このアドレスに実体がある
31

以上、C++っぽく書けるよという話(雑談おわり)

TBrowser• ROOTを(ある程度)GUIで操作
Ø root[1] TBrowser b;Ø bのところは何でもよい (オブジェクト名)

適当にクリックしてみてください
データ⾒られるようになった！
32

解説：TTree• TTreeというクラスのオブジェクトが保存されているØTTree

その下にTBranchクラスのものたち
イベント

⽣成粒⼦情報
粒⼦の⽣成
粒⼦の⽣成
エネル
粒⼦の⽣成
エネル
種類
粒⼦
種類
エネル粒⼦
ル
種類
粒⼦ ギー
電荷
ギー
電荷
ギー
電荷
検出器情報

イメージ

イベント
lep_ptlep_ptlep_ptlep_ptlep_eta
lep_ptlep_ptlep_ptrunNumber
eventNumber

今回のデータ構造
TBranchとあるイベントに変数がいろいろぶら下がっているイメージ
33

Branchの種類• 中には1イベント中に複数の値を持つものありØ std::vectorを抱えているØ たとえばlep_ptとかlep_etaとか←こう⼊⼒(miniという名前のTTree)

イベント
lep_ptlep_ptlep_ptlep_ptlep_eta
lep_ptlep_ptlep_ptrunNumber

1イベントごとのlep_ptの値→Rowがイベント番号1イベントに何個か値を持つ

eventNumber

今回のデータ構造34

とにかくいろいろやって理解• mini->Draw("lep_pt");
Ø 変数クリックと同じ• mini->Draw("lep_pt[0]");Ø 変数のうち最初の値だけ描画• mini->Draw("lep_pt[0]:lep_pt[1]");Ø 2次元プロット、相関をみることができる
Ø ただしこのままでは⾒にくい• mini->Draw("lep_pt[0],lep_pt[1]","","colz");Ø

きれいなプロット(?)になる
35

ところでlep_ptとは？
• また物理の話に戻る必要あり
Ø 陽⼦同⼠の衝突 (ハドロンコライダー)ではビーム軸(z軸)⽅向の運動量が保存しない(ように⾒える)Ø ただしx、yは保存 → pT = px+py

36いろんな相関を⾒よう•

⾃分で2変数選んで相関描いてみようØ

•

なんかおもしろい絵ができたら⾒せてください

変数の説明

diphotonの⼈はphoton、4-leptonや2-leptonの⼈はlepの情報を中⼼に⾒ましょうØ

lep: 荷電レプトン e, μØjet: ハドロンジェット (クォークやグルーオン)

Ømet_et: 消失エネルギー (難しいので省略)Øtau: タウ粒⼦ (他のレプトンと違い検出難しい)

Øpt: 横⽅向運動量 (さっきのpT)Ø

eta: 疑ラピディティ (ざっくりビーム軸⽅向の⾓度)

Ø

phi: 前ページの絵を参照
37

これ以外の変数は⼀旦無視でOK
もちろん知りたかったら質問してください午前中はここまで• 置いていかれた⼈へ
Ø ⼤丈夫、東野もそっちの⼈間でしたØ わからなかったところから説明します• 余裕な⼈へØ

https://root.cern.ch/doc/master/classTTree.html• C++とかもう余裕な⼈へØ ソースコード書き始めてOKですØhttps://www-he.scphys.kyoto-u.ac.jp/member/n.kamo/wiki/doku.php?id=study:software:root:ntuple§ 無断で引⽤したがだいたいみんなググって辿り着くところ
38

講習編 その3
イベントセレクション！
⽬安：13:00 ‒ 14:00

39

ちょっと復習

実験ではゴミデータがたくさんあることが多い→⾒たくないものは断捨離したい
たとえば上のケースでいうと2個の光⼦→ヒッグスは重いからたぶん光⼦のエネルギーも⼤きい
125 GeV40

イベントセレクション• 第⼆引数は実はカット条件
Ø

⽂字列で上記のように書きましょうØisTightIDとかいうのはおまじない (ATLASの⼈じゃないとわからない)§

こういう専⾨⽤語をATLAS実験はよく使う。⾮常によろしくない

こんな図が描けるはず
ログスケール→余⽩を右クリック
マウスのドラッグドロップで絵を動かせる
いろいろできるのでやってみてください41カット条件• これを満たさないイベントはカットØ 書き⽅はC++の条件式に従う

https://www.javadrive.jp/cstart/if/

これもいろいろやってみましょう。最後の;を外してみると…?
→C++では許されないので注意
42

⽤意したのはここまで• あとはなんでもかんでも試してみるべし
Ø ROOTに加えてC++も必要なこともわかってもらえたら…

• 質問コーナーØ 何でも聞いてください• 途中で飽きちゃった⼈へØ

わかる。ちょっとずつ慣れていきましょう43

宣伝• 宇宙素粒⼦若⼿の会 (YMAP)Ø 毎年4-5⽉にROOT講習会実施
Ø 昨年は残念ながらオンライン開催§ https://github.com/ymap-team/ROOT2020/wiki
Ø 今年もやるぞと意気込んでますØ 若⼿でなくても参加してOK！

§ ぜひご参加ください44最後に• おい、ヒッグスの話はどこへいった？という⼈
Ø まだまだ余裕がある⼈と⾒た§ いまから探しましょう§ 対話モードだと無理があるのでソースコード書き始めます§ ⼀緒に書きましょう45

(講習後追記)ソースコード• 講習会資料とともにアップロード
Ø sample.cc
Ø おそらく $ root sample.cc で動く46

Backup47Preselection• データには元々以下のような選定がかかっている48