以前、公式ルート (CERN) フォーラムでこの質問をしましたが、今のところ問題は解決されていません。私の間違いを指摘するか、別の方法を提案することで、ここにいる誰かが助けてくれるでしょうか?
イベントのある TTree があります。TTree には、各イベントの UNIX 時間を持つ 1 つのブランチと、その他のいくつかのブランチがあります。これらを個別に分析できるように、時間間隔に基づいてイベントのサブセットを選択したいと考えています。選択を行うために、別のツリーを作成し、適切な時間間隔内ですべてのエントリをコピーします。
次のコードは問題なく動作し、すべてのイベントをツリーからサブツリーにコピーします。
void tree_time_filter(TTree* tree, TTree** subtree, Int_t time_i, Int_t time_f){
*subtree = tree->CloneTree(0);
Int_t t;
tree->SetBranchAddress("UNIX time", &t);
for(Long64_t i = 0; i<tree->GetEntries(); i++){
tree->GetEntry(i);
if (true)
{
(*subtree)->Fill();
}
}
cout<<"Tree filtered. "<<(*subtree)->GetEntries()<< " entries were selected.\n";
return;
}
if(true) を実際の条件に置き換えると、問題が発生します。
void tree_time_filter(TTree* tree, TTree** subtree, Int_t time_i, Int_t time_f){
*subtree = tree->CloneTree(0);
Int_t t;
tree->SetBranchAddress("UNIX time", &t);
for(Long64_t i = 0; i<tree->GetEntries(); i++){
tree->GetEntry(i);
if (t > time_i && t < time_f) //-> the condition
{
(*subtree)->Fill(); //-> this line now gives an error
}
}
cout<<"Tree filtered. "<<(*subtree)->GetEntries()<< " entries were selected.\n";
return;
}
次のエラーが表示されます。
エラー行は (*subtree) -> Fill() を参照しています。これは、最初の例で完全に正常に機能したのと同じコードです。t を含まない条件、またはサブツリーを参照していない if-body の場合、コードは機能します。ここで何がうまくいかないのか誰でも説明できますか?
ありがとうございました!
(参考までに、元の質問へのリンク: http://root.cern.ch/phpBB3/posting.php?mode=edit&f=3&p=79722 )