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