こばりょ・ぶろぐ

実験物理専攻のゆるーい技術ブログ

TEXTデータを ROOTのTreeにつめる

koba-ryo.hatenablog.com

スペースで区切られた数字等をそれぞれ名前をつけてTreeに詰めるということをしたい。

make_tree.Cを作成した。

root make_tree.Cで同じディレクトリにあるデータファイルを読んで、 各列の数字の値を名前をつけてtreeにつめることができる。 value_name_listの数より、データの数列の数の方が多い場合は、value_name_listに対応する値以外は無視される。

{
  std::string input_name = "./run0028.dat";
  std::string output_name = "output.root";
  TString ifn = input_name;
  TString ofn = output_name;
  auto fout = new TFile(ofn, "recreate");
  auto tree = new TTree("tree","tree using ReadFile()");
  std::vector<std::string> value_name_list;
  value_name_list.push_back("adc1/I:");
  value_name_list.push_back("adc2/I:");
  value_name_list.push_back("adc3/I:");
  value_name_list.push_back("adc4/I");
  
  TString branch_names;
  for(const auto& name :value_name_list ){
    branch_names +=  name;
  }
  
  tree->ReadFile(ifn,branch_names);
  tree->Write();

}

YoinkとClipyについて

今回の記事は僕が普段 Macで作業をするときによく使っている便利アプリの紹介です。 この2つは便利アプリでググって出てきた中で、使い続けているアプリです。

Yoink

払いきり1000円くらいのアプリですが、1000円の価値はあると僕は思います。
昔は、無料のアプリやサービスしか使わないっていう心意気で、有料のアプリは使っていませんでしたが、
最近は、日頃の作業の効率化等に役立つものなら少々の出費はどんどんしています。

日頃の作業でイラッとしたことはこまめにメモして、時間があるときに解消するものがあるか調べます。
サブスクリプションのサービスは多くなりすぎないようには注意しています。苦笑

Yoink - ドラッグ & ドロップを快適なものに

Yoink - ドラッグ & ドロップを快適なものに

  • Matthias Gansrigler
  • ユーティリティ
  • ¥980
apps.apple.com

僕の場合デスクトップが6個くらい開かれていて、いろんなアプリを同時に開いています。
アプリ移動は⌘tabのショートカットキーで切り替えています。

Macでは、ある画面の画像を別の画面のkeynote等に貼り付けたいなどの作業が多発します。
よくある場面としてはスクショでとって別の画面にあるnotionに貼り付けたいとかもあります。
(スクショの場合、一定時間は画面下に出てくれるので、ささっと移動して貼り付けはできるのですが、
notionのノートを開いたりしている間に右下のスクショがなくなって、
デスクトップに保存されてしまうといらっとしてしまいます。)

そんなときにYoinkがあると画面の遷移に関係ない小窓を用意できるので、貼り付けたい画像や動画、テキストをその小窓に置いておくだけで、好きな画面に行って貼り付けられます。

オススメの設定

環境設定から設定できます

f:id:koba_ryo:20210207165204p:plain f:id:koba_ryo:20210207165207p:plain

  • アイテムをドラッグするとすぐ下に小窓が出る。

f:id:koba_ryo:20210207164952g:plain

元々は画面の端に表示していたのですが、僕の場合、ゴミ箱やデスクトップ上のフォルダやアプリにかぶることが多く すぐ下に出てくれる方が、使い勝手が良いように感じています。ただ、小窓を消したい時もあるので、以下のように ショートカットキーで出したり消したりできるようにもしています。

また、ショートカットキーを長押しすることで、小窓から消えた画像を復元することもできるので、
間違ったところに貼り付けてしまって、小窓の画像が消えても安心です。

  • ⌘y(普段使わないキーを割り当てましょう。)で出したり消したりのショートカットを設定

Clipy

clipy.softonic.jp

普段、Vimでコーディングしている際に、vimの場合、コピーしたテキストを遡って、 貼り付けるということをしているのですが、 普段のMacのコピー&ペーストでも同じようにコピーの履歴を遡って貼り付けられたらいいのにと思って 調べて出てきたアプリがClipyです。

オススメの設定

  • option + sでスニペットの表示
  • option + mでコピー履歴の表示

オススメの使い方

コピーを遡るのはもちろんのこと、スニペット機能もかなり活用しています。

例えば、

住所、メールアドレスなどはユーザー辞書に登録しているのですが、 (これもオススメです。いちいちメアドや住所を打つのが面倒なので全て登録しています。ただ、PCがないときに、メアド、住所が言えない等の弊害はあります...) 出張メールの雛形や、レポート採点の文章の雛形などの長い文章や、コードのサンプルなどは変換予測で出てこられるのも困るので、Clipyのスニペットとして登録しています。

Vimのコピーアンドペーストについて

今回の記事はVimの少し細かい話をします。

Vimって何?って人は以下の記事を見てください。

 

koba-ryo.hatenablog.com

ざっくりいうと操作の特殊な便利テキストエディタです!

 

Vimのカット/コピー/ペーストはどのレジスタ(a~z)を使うか指定できます。

指定の仕方は以下のように”をレジスタの前に付けることで指定します。

“{レジスタ}

(例:"a , "A:大文字で指定すると追記される。)

指定しないと無名レジスタが使用されます。

(ヤンクは無名レジスタ("")とヤンクレジスタ("0)にコピーされる)

貼り付けは”{レジスタ}p もしくは挿入モードで<Ctr-r>{レジスタ}で行います。

レジスタは1-9など、他にもあるみたいですが、僕が普段の作業で使うのは

無名レジスタと0とq(アルファベットで押し易いため)だけです。

 

ヤンクした文字をddなどで

無名レジスタを上書きしてしまったときの対処法

 

方法1:

“0pとするとヤンクレジスタからペースト出来る。

この方法が個人的には一番楽な気がします。)

 

方法2:

最初から”ayiwなどで無名レジスタではないところにコピーして、”apで貼り付ける

 

方法3:

ブラックホールレジスタを使って削除する(”_dd)

ブラックホールレジスタはカットではなく削除のために

dコマンドを使いたいときに便利

 

 

実際の活用場面:

下のsomethingInTheWayをcollection に変更 

collection = getCollection();

process(somethingInTheWay, target);

 

キーストローク

yiw(1単語コピー

 jww(カーソル移動)

diw(1単語カット後に挿入モード)

"0P(ヤンクレジスタをカーソルの前にペースト)

f:id:koba_ryo:20210204003152g:plain



treeでevent numberとの相関を簡単にみたい。

いつもrootをつかってtreeに詰めた変数とイベント数との相関をみたい場合、

event_numみたいにイベント番号を詰めていたのですが、

以下のように自分で詰めた値以外も使えるようです。

ADCの値をtreeに詰めていた場合は、

tree->Draw("ADC:Entry$")

で ADCとエントリー数との相関が見えます。

他にも$シリーズがあるみたいです。

ROOT: TTree Class Reference

のページでSpecial functions and variablesで検索すると 他の変数ものっています。

TEXTデータを抽出してCERN ROOT でヒストグラムを描写する

学部生と一緒にデータを取得して中身を確認するときに、
テキストデータとしてスペースで区切られた数値データを
パッと1列目のみヒストグラムに詰めて表示
したい時があったので、
ここにサンプルコードを置いておこうと思います。

読み込むデータのイメージはこんな感じです。 横方向がチャンネル番号、一行が1イベントに対応しているというデータです。

192 284 1391 31985 1933 ...
415 135  1531 15131 51531 ...
.
.
.

修士の頃から、テキストファイル読み込んでヒストグラム表示とか数え切れないほどやってきましたが、
簡単なマクロのソースコードを一からコードを書くのは煩わしく、時間かかるってことで、
今回を機にスニペットとして保存しました。
普段スニペットとかはClipyに保存しています。メールのテンプレとか一括で置いておけるので、
よく使うマクロのソースコードのテンプレも一緒に置いてます。

qiita.com

koba-ryo.hatenablog.com

ROOTでのマクロの実行は以下のファイルのような物用意して

root Show_data.C

で実行されます。

rootの使い方等は、以下のサイトを参考にしてもらうのが間違えないかなと思います。 僕も今回のような具体例のある問題やTipsなどを小出しに記事にする予定です。

ROOT Manual - ROOT

cern root 入門 - meuのblog

https://www-he.scphys.kyoto-u.ac.jp/member/n.kamo/wiki/doku.php?id=study:software:root

Show_data.C

 {
//read data value
  std::string filename = "./run0028.dat";
  const int ChannelOfInterest = 0;
  
  std::ifstream file(filename);
  std::string line;
  std::vector<std::vector<int>> h;
  while (std::getline(file, line)) {
    int value;
    std::stringstream ss(line);
    h.push_back(std::vector<int>());
    while (ss >> value) {
      h[h.size()-1].push_back(value);
    }
  }

 //fill histgram 

  int max_x = 1000;
  int min_x = 0;
  int nBin = (max_x - min_x) / 10;

  auto hist = new TH1F("test",Form("%s ch = %d",filename.c_str(),ChannelOfInterest),nBin,min_x,max_x); 

  for (int i = 0; i < h.size(); i++) {

    hist->Fill(h[i].at(ChannelOfInterest));
  
}

  hist->Draw();

}

変数名とかは適当なので、適宜自分の対応する物に変更してつかってください。

f:id:koba_ryo:20210202132126g:plain

Google Chromeの検索欄に二重で入力される問題

普段、google chromeをブラウザとして使用しているのですが、 検索欄に日本語で文字を入れると予測が勝手に入って、文字が二重になってしまう現象がよく起きています。。。

f:id:koba_ryo:20210201225251g:plain

この問題の解決策として僕が行った対処方法を示しておこうと思います。 と言っても、以下のサイトに詳しく色々な方法が書いてあるので、僕が最終的に落ち着いた手段を手短に説明します。 kanmegu.com

対処方法:拡張機能を追加して、新規タブで開かれる画面をカスタム chrome.google.com

上のリンクから拡張機能をオンにすると勝手に新規タブで開かれる画面が変わります。
カスタムするのは左下のボタンで設定画面を開き、背景や検索エンジンの選択などを行いました。
f:id:koba_ryo:20210201234342p:plain

シンプルな見た目にできて、満足♡笑
f:id:koba_ryo:20210201234241p:plain f:id:koba_ryo:20210201234848g:plain

ただ、検索ボックスの検索は履歴や予測が出てこないですが、
僕はいつも邪魔としか思っていなかったので、そんなに気にせず使えています。
検索予測を出したい場合は上のアドレスバーから検索できるのでそちらを使うのがベストかと思います。

google chromeはカーソル移動をVimライクにjkで上下に動かせる拡張機能(vimium)があるので 基本的にはgoogle chromeをデフォルトで使用しています。 カーソル移動やリンクのクリックなどをキーボードのみで操作できるので快適です。

ただGmailのページなど、いくつかのサイトではうまく機能しないので、基本的には検索と検索項目のクリックに使用しています。 f:id:koba_ryo:20210201235537g:plain

Vim のすゝめ

EmacsからVimへ 

結論から言うと、Ctrl、altを押すのが苦手な人は一度
Vimを使ってみてください。

僕は学部生の頃から修士課程まで、何の疑いもなくemacsを使ってきました。
しかし、博士課程になり、
自分で 1 からコードを書くよりは、他人の大量のコードと睨めっこして
文字入力より、文字編集の時間が長くなったのをきっかけに、

テキストエディタの使用感、補完機能などを気にするようになっていきました。

そんな時、vimmer(Vimを愛用している信者)の先輩にvim を勧められ
まんまと術中にハマってしまい、今では、
google chromeの操作までvimライクになってしまったほどです。

Vimとは

Vim(ヴィム。「ヴィアイエム」という読み方は誤り)は、vi から派生し、発展した高機能なテキストエディタである。

by wikipedia

他のテキストエディタと大きく違うところは、以下の4つのモードを切り替えて使用すると言うところだと思います。

  • インサートモード(文字入力)
  • ノーマルモード(カーソル移動等)
  • ビジュアルモード(範囲選択)
  • コマンドモード(置換などのコマンド機能)

vim始めたての頃は以下のサイトにお世話になったので、vimに興味を持った人は是非見てみることをお勧めします! knowledge.sakura.ad.jp

Vimに少し慣れた頃に読んで、すごくためになった本は

「実践Vim 思考のスピードで編集しよう!」です! 正直、細かすぎるくらいのTipsに分かれており、言葉の節々に著者の人のVim愛が溢れすぎていました。笑

www.amazon.co.jp

Vimへの姿勢

Vimを始めたばかりの頃は、「モードの切り替え煩わしいわー」ってなる人が居ると思います。

僕がオススメするVimへの姿勢は、

全ての動作を覚えて、最適に使用しようと力み過ぎずに、
一つずつ手に馴染むコマンドを増やしていくイメージで取り組むこと

です。

Vimへの入り方としては、以下の流れがいいのかなと思います。

  1. キーバインドの変更
    例 ESC→jjとかjk

  2. 主要な動作だけ覚える
    例 ciw(カーソルがある単語を削除して入力モードになる)
      xp(文字の入れ替え) この記事の最後のgifで実際に使っています。

  3. キーバインドの最適化、プラグインの導入

上にあげた本などを参考に手に馴染むキーを増やしていく
という姿勢がいいと思います。

よく使うTips集みたいな記事も書こうと思っています!

世の中には様々な便利機能のプラグインを公開してくれている方々が沢山いるので、
自分が不便に思った動作などはぐぐると大抵、何かしらのプラグインがあります。
⚠︎プラグインは探し出すとあれもこれもと沼にハマる危険があります。

オススメのプラグインについても記事を書こうと思っています!

Vimでの編集の様子

実際のVimの編集の様子をgif にしました。 vimの見た目はがっつりプラグイン等でカスタマイズしているので
そこは後々記事で共有できればと思います。 やってることは

  • oでインサートモードになり、

  • testと入力し

  • jk(ESC)でノーマルモードに戻り

  • ciwでtestを削除してインサートモードになり

  • tsetと入力しjkでノーマルモード

  • hhでsにカーソルを持っていきxpでsとeを入れ替え

f:id:koba_ryo:20210201004905g:plain

Vimのデメリット

vimに魅せられてしまった僕は、
wordなどの入力で間違えて:wを打ったり、文章の初めにiが入っていたりと
vimの呪いにかかってしまいました。
またリモートでのミーティングが増えた昨今ならではの体験として
zoom等のホワイトボード機能を使用しているときに
公衆の面前で、文末にことあるごとにjkと入力するやばい人になったこともありました。笑)

vimのデメリットは、僕が思うにただ一つ
vimライクでないテキスト入力の際に、心の平穏が保てないことだと思います。