3

Cern ROOT TTree ファイルからデータを読み込もうとしています。以前にルートを使用したことがなく、これに少し苦労しています。私は C++ に精通しているので、配列側を並べ替えることができますが、オンラインでいくつかのチュートリアル ページを調べましたが、どこにも行きませんでした。

TTree ファイルからデータを読み取るにはどうすればよいですか? forループ内でツリーのノードを反復処理することで実行されると思います(繰り返しますが、ファイルがどのように構成されているか正確にはわかりませんか?)。

これは、私が従おうとしてきた参考文献の例です。

https://root.cern.ch/drupal/content/using-macro-read-ttree

私が理解しているように、これは一般的な質問ですが、TTree は一般的ではありませんか? (異なる変数名が含まれている可能性があるため、と思いますか?)

したがって、私が重要だと思う追加情報は次のとおりです。

ルート オブジェクト ブラウザTBrowser bを開き、「.root」ファイルを参照すると (そしてダブルクリックすると)、ファイルに 12 個の変数があることがわかります。たとえば、1つは「質量」、「電荷」などと呼ばれます...

それが十分な情報であることを願っていますか?そうでない場合は、もっと提供できます。

4

1 に答える 1

5

このページは、これを行う方法をうまく示しているようです: https://root.cern.ch/root/htmldoc/TTreeReader.html

あなたの場合の最短の使用例は次のとおりです。

TFile file("filename.root");
TTreeReader reader("treename", &file);
TTreeReaderValue<float> mass(reader, "mass"); // template type must match datatype
TTreeReaderValue<float> charge(reader, "charge"); // name must match branchname
...
while (reader.Next()) {
    // use *mass, *charge, ...
}

は、同じことをもっと手作業で行う方法がありました。ツリーのブランチをローカル変数にリダイレクトする必要がありました。このメソッドは次のようになります。

TTree* tree = (TTree*) file.Get("treename");
float mass, charge, ...;
tree->SetBranchAddress("mass", &mass);
tree->SetBranchAddress("charge", &charge);
...
for (int i = 0, N = tree->GetEntries(); i < N; ++i) {
    tree->GetEntry(i);
    // use mass, charge
}

TBrowser から、 or の 2 番目のパラメーターとして指定する必要があるブランチの名前を読み取ることができTTreeReaderValueますSetBranchAddress

TTree基本的には、エントリのコレクション (クラシックツリー)と考える必要があります。各エントリはブランチ (ノード) で構成されています。読み方はこうです。

于 2015-02-04T22:31:32.007 に答える