I am unsure as to whether I've made a false assumption about TEventLists or if this
is a ROOT bug. The following code compiled against the latest CVS head produces
the output shown.
int main(int argc, char*argv[])
{
TFile fin(argv[1], "read");
TNtupleD*ntuple = (TNtupleD*)fin.Get("ntuple");
TString selection;
selection = "(0.99 < mx)";
TEventList*event_list_one = new TEventList("one" + TString("event_list"));
ntuple->Draw(TString(">> ") + event_list_one->GetName(), selection);
cout << event_list_one << endl << ntuple->GetSelectedRows() << endl;
ntuple->SetEventList(event_list_one);
//...
selection = "(-0.01 < mx && mx < 0.01)";
TEventList*event_list_zero = new TEventList("zero" + TString("event_list"));
ntuple->Draw(TString(">> ") + event_list_zero->GetName(), selection);
cout << event_list_zero << endl << ntuple->GetSelectedRows() << endl;
ntuple->SetEventList(event_list_zero);
//...
return 0;
}
output:
0x88461f0
140390
0x8c1cee8
0
If the order of the statements is reversed, the second TEventList is again not
populated.
int main(int argc, char*argv[])
{
TFile fin(argv[1], "read");
TNtupleD*ntuple = (TNtupleD*)fin.Get("ntuple");
TString selection;
selection = "(-0.01 < mx && mx < 0.01)";
TEventList*event_list_zero = new TEventList("zero" + TString("event_list"));
ntuple->Draw(TString(">> ") + event_list_zero->GetName(), selection);
cout << event_list_zero << endl << ntuple->GetSelectedRows() << endl;
ntuple->SetEventList(event_list_zero);
//...
selection = "(0.99 < mx)";
TEventList*event_list_one = new TEventList("one" + TString("event_list"));
ntuple->Draw(TString(">> ") + event_list_one->GetName(), selection);
cout << event_list_one << endl << ntuple->GetSelectedRows() << endl;
ntuple->SetEventList(event_list_one);
//...
return 0;
}
output:
0x896b3b8
182187
0x8c1e530
0
Justin
This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:09 MET