Studio.app と LDraw を使って LEGO 風のイベントディスプレイをスーパーカミオカンデ用に作る
同業の中の人がこんな企画をされていました。
スーパーカミオカンデのイベントディスプレイ作成用データの公開を始めました。ニュートリノや陽子崩壊のシミュレーションデータを元に、あなた独自のイベントディスプレイを作ってみませんか?データには光電子増倍管の位置座標と光の量や時間の情報が含まれています。https://t.co/YTqHhOTHAP pic.twitter.com/PZVXqA0rLJ
— 神岡宇宙素粒子研究施設 (@Kamiokaobs_pr) May 29, 2020
あくまで一般向けのものであって、同業者が手を出すものではないと思うのですが、Python + matplotlib よりも ROOT だと早いよ、というのを言いたくなってしまったので、大人気ないことをしてしまうわけです。
先生、できました!5 行でした! https://t.co/KGrrINGi2c pic.twitter.com/I57wO4CvQA
— OKUMURA, Akira(奥村 曉) (@AkiraOkumura) May 30, 2020
さて、以前から LEGO ブロックで物理関係のことをやってみたいなとずっと思っていて、また LEGO の 3 次元データを扱うためのファイルフォーマットの 1 つである LDraw というものを最近知りました。LDraw のフォーマットは非常に簡単なので、これを使うとイベントディスプレイに使えます。
www.ldraw.org
また Studio.app という LEGO(風の)ブロック用の 3D ソフトウェアもあることを知り、これで LDraw をインポートできるということもわかりました。じゃあ、これらを組み合わせるとスーパーカミオカンデ(SK)のイベントディスプレイを LEGO 風にできるわけです。
www.bricklink.com
本当は SK ではなくて、自分のやっているチェレンコフ望遠鏡アレイ(CTA)のイベントディスプレイで遊ぶべきなのですが、同業の中の人の企画にまず乗っかってみようかな、と。
さて、結果です。
ROOT で 5 行で作る場合
$ root root [0] TNtuple nt("nt", "nt", "ch:pe:t:x:y:z") root [1] nt.ReadFile("Downloads/sample/multirings.0001.000015.csv") root [2] nt.SetMarkerStyle(20) root [3] nt.SetMarkerSize(0.5) root [4] nt.Draw("z:y:x:pe", "", "col")
ROOT + Python で LDraw に出力したもの
$ ./sk2lego.py Downloads/sample/multirings.0001.000015.csv > event.ldr
LDraw の形式は、こんな感じです。1 に続けて、色番号、座標と回転行列の要素、そして部品番号です。簡単ですね。
1 36 x y z Rxx Rxy Rxz Ryx Ryy Ryz Rzx Rzy Rzz 4073.dat
まあ、これだけだと実際に立体に組むことはできないので、東大 LEGO 部の作品に組み込むと格好良さそうな気がします。
sk2lego.py の中身です回転行列を使う必要があるので、それは ROOT を呼んでいます。