Hi Milind, You can do something likne Int_t nevents = (Int_t)UpsChain.GetEntries(); UpsChain.LoadTree(0); TFile*newfile = new TFile("newfile.root","NEW"); TTree*newtree = UpsChain->CloneTree(0); for(Int_t iev = 0; iev < nevents; iev++){ UpsChain.GetEvent(iev); .... if (...) newtree->Fill(); } Cheers, Philippe. -----Original Message----- From: owner-roottalk@pcroot.cern.ch [mailto:owner-roottalk@pcroot.cern.ch]On Behalf Of Milind Purohit Sent: Friday, October 04, 2002 10:40 AM To: roottalk@pcroot.cern.ch Subject: [ROOT] How to select events from a chain I would like to select events in a tree based on cuts. The events are being read in a chain. Is there a way to write out selected events? In the code snippet below "mychoice" is a C++ function which selects events of interest. How do I write them out to one file? This way I could save a lot of CP time and not read the events of interest over and over again. I would like to store the entire event, not just the variables indicated in the "SetBranchAddress" statements below. Thanks, Milind Purohit . . . TChain UpsChain("h43"); FILE * RUNEVT; RUNEVT = fopen("UpsRunEvt.txt", "w"); FILE * CHFILE; char line[250]; CHFILE = fopen("UpsChain.txt", "r"); while((fgets(line, sizeof(line), CHFILE)) != NULL){ char root_file_name[250]; sscanf(line, "%s", root_file_name); UpsChain.Add(root_file_name); } //Declaration of leaves types Int_t event; Int_t runnumber; Int_t nchb; Float_t masschb[100]; //[nchb] UpsChain.SetBranchAddress("event",&event); UpsChain.SetBranchAddress("runnumber",&runnumber); UpsChain.SetBranchAddress("nchb",&nchb); UpsChain.SetBranchAddress("masschb",&masschb); Int_t nevents = (Int_t)UpsChain.GetEntries(); for(Int_t iev = 0; iev < nevents; iev++){ UpsChain.GetEvent(iev); if(mychoice(myvars)){ ??????? } } . . .
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:12 MET