[ROOT] looping over many events

From: Andre Holzner (Andre.Holzner@cern.ch)
Date: Sat Nov 24 2001 - 12:48:13 MET


Hello,

I'd like to loop over many events of a TTree 
while taking advantage of Root's mathematical expression
evaluation. (The application needs to calculate some
sort of correlation matrices between several variables
of events). 

I therefore need to keep only one event at a time in memory.

I have the following test program:

#include <stdio.h>
#include <iostream.h>
#include <stdlib.h>
#include <unistd.h>

#include <strstream>

#include <TChain.h>
#include <TSQLResult.h>
#include <TROOT.h>
#include <TFile.h>

//--------------------


void mem_usage(const char *description)
{
  static pid_t pid = getpid();
  
  cout << "--------------------\n"
       << description << endl;

  ostrstream buf;
  buf << "ps u -p " << pid << ends;
  system(buf.str());

  cout << "--------------------\n";
}

//--------------------

void main()
{
  TChain *ch = new TChain("h20","h20"); 
  ch->Add("~/qqqq/presel-ntp-205/ww-207.root/h20");       

  mem_usage("point 1");
  TSQLResult *query_res = ch->Query("thru:xov1:log34:xmj1:mijmin");

  mem_usage("point 2");
  delete query_res;
  mem_usage("point 3");
  delete ch;
  mem_usage("point 4");
}

The memory consumption is however quite large, it looks like root
is keeping all events in memory:
--------------------
point 1
USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
holzner   4709 41.0  4.1 18348 10956 pts/0   S    12:43   0:00
./test-sql
--------------------
--------------------
point 2
USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
holzner   4709 94.3 31.4 91792 82244 pts/0   S    12:43   0:30
./test-sql
--------------------
--------------------
point 3
USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
holzner   4709 96.6 30.3 89092 79544 pts/0   S    12:43   0:31
./test-sql
--------------------
--------------------
point 4
USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
holzner   4709 93.7 30.3 89092 79544 pts/0   S    12:43   0:31
./test-sql
--------------------

and increases with every variable added. In fact, adding more and more
variables,
the memory consumption becomes so big that the program can not run
anymore.

In this simple case, I could assign
a placeholder variable in the program to loop over the events, however,
I would like to keep it general so that e.g. I can also use expressions
like 'var1+var2' etc.

Is there currently any way to do that ? (I'm using root from CVS of
yesterday on
a Linux/i386 machine).

best regards & thanks for the help,

André



This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:51:09 MET