// @(#)root/tree:$Id$
// Author: Rene Brun   11/02/97

/*************************************************************************
 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// A TEventList object is a list of selected events (entries) in a TTree//
//                                                                      //
// A TEventList is automatically generated by TTree::Draw: example      //
//      tree->Draw(">>elist1","x<0 && y> 0");                           //
//         In this example, a TEventList object named "elist1" will be  //
//         generated. (Previous contents are overwritten).              //
//      tree->Draw(">>+elist1","x<0 && y> 0");                          //
//         In this example, selected entries are added to the list.     //
//                                                                      //
// The TEventList object is added to the list of objects in the current //
// directory.                                                           //
// Use TTree:SetEventList(TEventList *list) to inform TTree that you    //
// want to use the list as input. The following code gets a pointer to  //
// the TEventList object created in the above commands:                 //
//     TEventList *list = (TEventList*)gDirectory->Get("elist1");       //
//                                                                      //
// Use function Enter to enter an element in the list                   //
// The function Add may be used to merge two lists.                     //
// The function Subtract may be used to subtract two lists.             //
// The function Reset may be used to reset a list.                      //
// Use TEventList::Print(option) to print the contents.                 //
//      (option "all" prints all the list entries).                     //
//   Operators + and - correspond to functions Add and Subtract.        //
// A TEventList object can be saved on a file via the Write function.   //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "TEventList.h"
#include "TCut.h"
#include "TClass.h"
#include "TFile.h"
#include "TMath.h"

ClassImp(TEventList)

//______________________________________________________________________________
TEventList::TEventList(): TNamed()
{
//*-*-*-*-*-*Default constructor for a EventList*-*-*-*-*-*-*-*-*-*-*-*-*
//*-*        ==================================

   fN          = 0;
   fSize       = 100;
   fDelta      = 100;
   fList       = 0;
   fDirectory  = 0;
   fReapply    = kFALSE;
}

//______________________________________________________________________________
TEventList::TEventList(const char *name, const char *title, Int_t initsize, Int_t delta)
  :TNamed(name,title), fReapply(kFALSE)
{
   // Create a EventList.
   //
   // This Eventlist is added to the list of objects in current directory.

   fN = 0;
   if (initsize > 100) fSize  = initsize;
   else                fSize  = 100;
   if (delta > 100)    fDelta = delta;
   else                fDelta = 100;
   fList       = 0;
   fDirectory  = gDirectory;
   if (fDirectory) fDirectory->Append(this);
}

//______________________________________________________________________________
TEventList::TEventList(const TEventList &list) : TNamed(list)
{
   // Copy constructor.

   fN     = list.fN;
   fSize  = list.fSize;
   fDelta = list.fDelta;
   fList  = new Long64_t[fSize];
   for (Int_t i=0; i<fN; i++)
      fList[i] = list.fList[i];
   fReapply = list.fReapply;
   fDirectory = 0;
}

//______________________________________________________________________________
TEventList::~TEventList()
{
   // Default destructor for a EventList.

   delete [] fList;  fList = 0;
   if (fDirectory) fDirectory->Remove(this);
   fDirectory  = 0;
}

//______________________________________________________________________________
void TEventList::Add(const TEventList *alist)
{
   // Merge contents of alist with this list.
   //
   // Both alist and this list are assumed to be sorted prior to this call

   Int_t i;
   Int_t an = alist->GetN();
   if (!an) return;
   Long64_t *alst = alist->GetList();
   if (!fList) {
      fList = new Long64_t[an];
      for (i=0;i<an;i++) fList[i] = alst[i];
      fN = an;
      fSize = an;
      return;
   }
   Int_t newsize = fN + an;
   Long64_t *newlist = new Long64_t[newsize];
   Int_t newpos, alpos;
   newpos = alpos = 0;
   for (i=0;i<fN;i++) {
      while (alpos < an && fList[i] > alst[alpos]) {
         newlist[newpos] = alst[alpos];
         newpos++;
         alpos++;
      }
      if (alpos < an && fList[i] == alst[alpos]) alpos++;
      newlist[newpos] = fList[i];
      newpos++;
   }
   while (alpos < an) {
      newlist[newpos] = alst[alpos];
      newpos++;
      alpos++;
   }
   delete [] fList;
   fN    = newpos;
   fSize = newsize;
   fList = newlist;

   TCut orig = GetTitle();
   TCut added = alist->GetTitle();
   TCut updated = orig || added;
   SetTitle(updated.GetTitle());
}

//______________________________________________________________________________
Bool_t TEventList::Contains(Long64_t entry)
{
   // Return TRUE if list contains entry.

   if (GetIndex(entry) < 0) return kFALSE;
   return kTRUE;
}

//______________________________________________________________________________
Bool_t TEventList::ContainsRange(Long64_t entrymin, Long64_t entrymax)
{
   // Return TRUE if list contains entries from entrymin to entrymax included.

   Long64_t imax = TMath::BinarySearch(fN,fList,entrymax);
   //printf("ContainsRange: entrymin=%lld, entrymax=%lld,imax=%lld, fList[imax]=%lld\n",entrymin,entrymax,imax,fList[imax]);

   if (fList[imax] < entrymin) return kFALSE;
   return kTRUE;
}

//______________________________________________________________________________
void TEventList::DirectoryAutoAdd(TDirectory* dir)
{
   // Called by TKey and others to automatically add us to a directory when we are read from a file.

   SetDirectory(dir);
}

//______________________________________________________________________________
void TEventList::Enter(Long64_t entry)
{
   // Enter element entry into the list.

   if (!fList) {
      fList = new Long64_t[fSize];
      fList[0] = entry;
      fN = 1;
      return;
   }
   if (fN>0 && entry==fList[fN-1]) return;
   if (fN >= fSize) {
      Int_t newsize = TMath::Max(2*fSize,fN+fDelta);
      Resize(newsize-fSize);
   }
   if(fN==0 || entry>fList[fN-1]) {
      fList[fN] = entry;
      ++fN;
   } else {
      Int_t pos = TMath::BinarySearch(fN, fList, entry);
      if(pos>=0 && entry==fList[pos])
         return;
      ++pos;
      memmove( &(fList[pos+1]), &(fList[pos]), 8*(fN-pos));
      fList[pos] = entry;
      ++fN;
   }
}

//______________________________________________________________________________
Long64_t TEventList::GetEntry(Int_t index) const
{
   // Return value of entry at index in the list.
   // Return -1 if index is not in the list range.

   if (!fList)   return -1;
   if (index < 0 || index >= fN)   return -1;
   return fList[index];
}

//______________________________________________________________________________
Int_t TEventList::GetIndex(Long64_t entry) const
{
   // Return index in the list of element with value entry
   // array is supposed  to be sorted prior to this call.
   // If match is found, function returns position of element.
   // If no match found, function returns -1.

   Long64_t nabove, nbelow, middle;
   nabove = fN+1;
   nbelow = 0;
   while(nabove-nbelow > 1) {
      middle = (nabove+nbelow)/2;
      if (entry == fList[middle-1]) return middle-1;
      if (entry  < fList[middle-1]) nabove = middle;
      else                          nbelow = middle;
   }
   return -1;
}

//______________________________________________________________________________
void TEventList::Intersect(const TEventList *alist)
{
   // Remove elements from this list that are NOT present in alist.

   if (!alist) return;
   if (!fList) return;

   Long64_t *newlist = new Long64_t[fN];
   Int_t newpos = 0;
   Int_t i;
   for (i=0;i<fN;i++) {
      if (alist->GetIndex(fList[i]) >= 0) {
         newlist[newpos] = fList[i];
         newpos++;
      }
   }
   delete [] fList;
   fN    = newpos;
   fList = newlist;

   TCut orig = GetTitle();
   TCut removed = alist->GetTitle();
   TCut updated = orig && removed;
   SetTitle(updated.GetTitle());
}

//______________________________________________________________________________
Int_t TEventList::Merge(TCollection *list)
{
// Merge entries in all the TEventList in the collection in this event list

   if (!list) return -1;
   TIter next(list);

   //first loop to count the number of entries
   TEventList *el;
   Int_t nevents = 0;
   while ((el = (TEventList*)next())) {
      if (!el->InheritsFrom(TEventList::Class())) {
         Error("Add","Attempt to add object of class: %s to a %s",el->ClassName(),this->ClassName());
         return -1;
      }
      Add(el);
      nevents += el->GetN();
   }

   return nevents;
}

//______________________________________________________________________________
void TEventList::Print(Option_t *option) const
{
//          Print contents of this list

   printf("EventList:%s/%s, number of entries =%d, size=%d\n",GetName(),GetTitle(),fN,fSize);
   if (!strstr(option,"all")) return;
   Int_t i;
   Int_t nbuf = 0;
   char element[10];
   char *line = new char[100];
   snprintf(line,100,"%5d : ",0);
   for (i=0;i<fN;i++) {
      nbuf++;
      if (nbuf > 10) {
         printf("%s\n",line);
         snprintf(line,100,"%5d : ",i);
         nbuf = 1;
      }
      snprintf(element,10,"%7lld ",fList[i]);
      strlcat(line,element,100);
   }
   if (nbuf) printf("%s\n",line);
   delete [] line;
}

//______________________________________________________________________________
void TEventList::Reset(Option_t *)
{
//          Reset number of entries in event list

   fN = 0;
}

//______________________________________________________________________________
void TEventList::Resize(Int_t delta)
{
//          Resize list by delta entries

   if (!delta) delta = fDelta;
   fSize += delta;
   Long64_t *newlist = new Long64_t[fSize];
   for (Int_t i=0;i<fN;i++) newlist[i] = fList[i];
   delete [] fList;
   fList = newlist;
}

//______________________________________________________________________________
void TEventList::SetDirectory(TDirectory *dir)
{
   // Remove reference to this EventList from current directory and add
   // reference to new directory dir. dir can be 0 in which case the list
   // does not belong to any directory.

   if (fDirectory == dir) return;
   if (fDirectory) fDirectory->Remove(this);
   fDirectory = dir;
   if (fDirectory) fDirectory->Append(this);
}

//______________________________________________________________________________
void TEventList::SetName(const char *name)
{
   // Change the name of this TEventList

   //  TEventLists are named objects in a THashList.
   //  We must update the hashlist if we change the name
   if (fDirectory) fDirectory->Remove(this);
   fName = name;
   if (fDirectory) fDirectory->Append(this);
}

//______________________________________________________________________________
void TEventList::Sort()
{
//          Sort list entries in increasing order

   Int_t    *index   = new Int_t[fN];
   Long64_t *newlist = new Long64_t[fSize];
   Int_t i,ind;
   TMath::Sort(fN,fList,index); //sort in decreasing order
   for (i=0;i<fN;i++) {
      ind = index[fN-i-1];
      newlist[i] = fList[ind];
   }
   for (i=fN;i<fSize;i++) {
      newlist[i] = 0;
   }
   delete [] index;
   delete [] fList;
   fList = newlist;
}

//______________________________________________________________________________
void TEventList::Streamer(TBuffer &b)
{
   // Stream an object of class TEventList.

   if (b.IsReading()) {
      UInt_t R__s, R__c;
      Version_t R__v = b.ReadVersion(&R__s, &R__c);
      fDirectory = 0;
      if (R__v > 1) {
         b.ReadClassBuffer(TEventList::Class(), this, R__v, R__s, R__c);
         ResetBit(kMustCleanup);
         return;
      }
      //====process old versions before automatic schema evolution
      TNamed::Streamer(b);
      b >> fN;
      b >> fSize;
      b >> fDelta;
      if (fN) {
         Int_t *tlist = new Int_t[fSize];
         b.ReadFastArray(tlist,fN);
         fList = new Long64_t[fSize];
         for (Int_t i=0;i<fN;i++) fList[i] = tlist[i];
         delete [] tlist;
      }
      ResetBit(kMustCleanup);
      b.CheckByteCount(R__s, R__c, TEventList::IsA());
      //====end of old versions

   } else {
      b.WriteClassBuffer(TEventList::Class(), this);
   }
}

//______________________________________________________________________________
void TEventList::Subtract(const TEventList *alist)
{
   // Remove elements from this list that are present in alist.

   if (!alist) return;
   if (!fList) return;

   Long64_t *newlist = new Long64_t[fN];
   Int_t newpos = 0;
   Int_t i;
   for (i=0;i<fN;i++) {
      if (alist->GetIndex(fList[i]) < 0) {
         newlist[newpos] = fList[i];
         newpos++;
      }
   }
   delete [] fList;
   fN    = newpos;
   fList = newlist;

   TCut orig = GetTitle();
   TCut removed = alist->GetTitle();
   TCut updated = orig && !removed;
   SetTitle(updated.GetTitle());
}

//______________________________________________________________________________
TEventList& TEventList::operator=(const TEventList &list)
{
   // Assingment.

   if (this != &list) {
      TNamed::operator=(list);
      if (fSize < list.fSize) {
         delete [] fList;
         fList  = new Long64_t[list.fSize];
      }
      fN     = list.fN;
      fSize  = list.fSize;
      fDelta = list.fDelta;
      for (Int_t i=0; i<fN; i++)
         fList[i] = list.fList[i];
   }
   return *this;
}

//______________________________________________________________________________
TEventList operator+(const TEventList &list1, const TEventList &list2)
{
   // Addition.

   TEventList newlist = list1;
   newlist.Add(&list2);
   return newlist;
}

//______________________________________________________________________________
TEventList operator-(const TEventList &list1, const TEventList &list2)
{
   // Substraction

   TEventList newlist = list1;
   newlist.Subtract(&list2);
   return newlist;
}

//______________________________________________________________________________
TEventList operator*(const TEventList &list1, const TEventList &list2)
{
   // Intersection.

   TEventList newlist = list1;
   newlist.Intersect(&list2);
   return newlist;
}

 TEventList.cxx:1
 TEventList.cxx:2
 TEventList.cxx:3
 TEventList.cxx:4
 TEventList.cxx:5
 TEventList.cxx:6
 TEventList.cxx:7
 TEventList.cxx:8
 TEventList.cxx:9
 TEventList.cxx:10
 TEventList.cxx:11
 TEventList.cxx:12
 TEventList.cxx:13
 TEventList.cxx:14
 TEventList.cxx:15
 TEventList.cxx:16
 TEventList.cxx:17
 TEventList.cxx:18
 TEventList.cxx:19
 TEventList.cxx:20
 TEventList.cxx:21
 TEventList.cxx:22
 TEventList.cxx:23
 TEventList.cxx:24
 TEventList.cxx:25
 TEventList.cxx:26
 TEventList.cxx:27
 TEventList.cxx:28
 TEventList.cxx:29
 TEventList.cxx:30
 TEventList.cxx:31
 TEventList.cxx:32
 TEventList.cxx:33
 TEventList.cxx:34
 TEventList.cxx:35
 TEventList.cxx:36
 TEventList.cxx:37
 TEventList.cxx:38
 TEventList.cxx:39
 TEventList.cxx:40
 TEventList.cxx:41
 TEventList.cxx:42
 TEventList.cxx:43
 TEventList.cxx:44
 TEventList.cxx:45
 TEventList.cxx:46
 TEventList.cxx:47
 TEventList.cxx:48
 TEventList.cxx:49
 TEventList.cxx:50
 TEventList.cxx:51
 TEventList.cxx:52
 TEventList.cxx:53
 TEventList.cxx:54
 TEventList.cxx:55
 TEventList.cxx:56
 TEventList.cxx:57
 TEventList.cxx:58
 TEventList.cxx:59
 TEventList.cxx:60
 TEventList.cxx:61
 TEventList.cxx:62
 TEventList.cxx:63
 TEventList.cxx:64
 TEventList.cxx:65
 TEventList.cxx:66
 TEventList.cxx:67
 TEventList.cxx:68
 TEventList.cxx:69
 TEventList.cxx:70
 TEventList.cxx:71
 TEventList.cxx:72
 TEventList.cxx:73
 TEventList.cxx:74
 TEventList.cxx:75
 TEventList.cxx:76
 TEventList.cxx:77
 TEventList.cxx:78
 TEventList.cxx:79
 TEventList.cxx:80
 TEventList.cxx:81
 TEventList.cxx:82
 TEventList.cxx:83
 TEventList.cxx:84
 TEventList.cxx:85
 TEventList.cxx:86
 TEventList.cxx:87
 TEventList.cxx:88
 TEventList.cxx:89
 TEventList.cxx:90
 TEventList.cxx:91
 TEventList.cxx:92
 TEventList.cxx:93
 TEventList.cxx:94
 TEventList.cxx:95
 TEventList.cxx:96
 TEventList.cxx:97
 TEventList.cxx:98
 TEventList.cxx:99
 TEventList.cxx:100
 TEventList.cxx:101
 TEventList.cxx:102
 TEventList.cxx:103
 TEventList.cxx:104
 TEventList.cxx:105
 TEventList.cxx:106
 TEventList.cxx:107
 TEventList.cxx:108
 TEventList.cxx:109
 TEventList.cxx:110
 TEventList.cxx:111
 TEventList.cxx:112
 TEventList.cxx:113
 TEventList.cxx:114
 TEventList.cxx:115
 TEventList.cxx:116
 TEventList.cxx:117
 TEventList.cxx:118
 TEventList.cxx:119
 TEventList.cxx:120
 TEventList.cxx:121
 TEventList.cxx:122
 TEventList.cxx:123
 TEventList.cxx:124
 TEventList.cxx:125
 TEventList.cxx:126
 TEventList.cxx:127
 TEventList.cxx:128
 TEventList.cxx:129
 TEventList.cxx:130
 TEventList.cxx:131
 TEventList.cxx:132
 TEventList.cxx:133
 TEventList.cxx:134
 TEventList.cxx:135
 TEventList.cxx:136
 TEventList.cxx:137
 TEventList.cxx:138
 TEventList.cxx:139
 TEventList.cxx:140
 TEventList.cxx:141
 TEventList.cxx:142
 TEventList.cxx:143
 TEventList.cxx:144
 TEventList.cxx:145
 TEventList.cxx:146
 TEventList.cxx:147
 TEventList.cxx:148
 TEventList.cxx:149
 TEventList.cxx:150
 TEventList.cxx:151
 TEventList.cxx:152
 TEventList.cxx:153
 TEventList.cxx:154
 TEventList.cxx:155
 TEventList.cxx:156
 TEventList.cxx:157
 TEventList.cxx:158
 TEventList.cxx:159
 TEventList.cxx:160
 TEventList.cxx:161
 TEventList.cxx:162
 TEventList.cxx:163
 TEventList.cxx:164
 TEventList.cxx:165
 TEventList.cxx:166
 TEventList.cxx:167
 TEventList.cxx:168
 TEventList.cxx:169
 TEventList.cxx:170
 TEventList.cxx:171
 TEventList.cxx:172
 TEventList.cxx:173
 TEventList.cxx:174
 TEventList.cxx:175
 TEventList.cxx:176
 TEventList.cxx:177
 TEventList.cxx:178
 TEventList.cxx:179
 TEventList.cxx:180
 TEventList.cxx:181
 TEventList.cxx:182
 TEventList.cxx:183
 TEventList.cxx:184
 TEventList.cxx:185
 TEventList.cxx:186
 TEventList.cxx:187
 TEventList.cxx:188
 TEventList.cxx:189
 TEventList.cxx:190
 TEventList.cxx:191
 TEventList.cxx:192
 TEventList.cxx:193
 TEventList.cxx:194
 TEventList.cxx:195
 TEventList.cxx:196
 TEventList.cxx:197
 TEventList.cxx:198
 TEventList.cxx:199
 TEventList.cxx:200
 TEventList.cxx:201
 TEventList.cxx:202
 TEventList.cxx:203
 TEventList.cxx:204
 TEventList.cxx:205
 TEventList.cxx:206
 TEventList.cxx:207
 TEventList.cxx:208
 TEventList.cxx:209
 TEventList.cxx:210
 TEventList.cxx:211
 TEventList.cxx:212
 TEventList.cxx:213
 TEventList.cxx:214
 TEventList.cxx:215
 TEventList.cxx:216
 TEventList.cxx:217
 TEventList.cxx:218
 TEventList.cxx:219
 TEventList.cxx:220
 TEventList.cxx:221
 TEventList.cxx:222
 TEventList.cxx:223
 TEventList.cxx:224
 TEventList.cxx:225
 TEventList.cxx:226
 TEventList.cxx:227
 TEventList.cxx:228
 TEventList.cxx:229
 TEventList.cxx:230
 TEventList.cxx:231
 TEventList.cxx:232
 TEventList.cxx:233
 TEventList.cxx:234
 TEventList.cxx:235
 TEventList.cxx:236
 TEventList.cxx:237
 TEventList.cxx:238
 TEventList.cxx:239
 TEventList.cxx:240
 TEventList.cxx:241
 TEventList.cxx:242
 TEventList.cxx:243
 TEventList.cxx:244
 TEventList.cxx:245
 TEventList.cxx:246
 TEventList.cxx:247
 TEventList.cxx:248
 TEventList.cxx:249
 TEventList.cxx:250
 TEventList.cxx:251
 TEventList.cxx:252
 TEventList.cxx:253
 TEventList.cxx:254
 TEventList.cxx:255
 TEventList.cxx:256
 TEventList.cxx:257
 TEventList.cxx:258
 TEventList.cxx:259
 TEventList.cxx:260
 TEventList.cxx:261
 TEventList.cxx:262
 TEventList.cxx:263
 TEventList.cxx:264
 TEventList.cxx:265
 TEventList.cxx:266
 TEventList.cxx:267
 TEventList.cxx:268
 TEventList.cxx:269
 TEventList.cxx:270
 TEventList.cxx:271
 TEventList.cxx:272
 TEventList.cxx:273
 TEventList.cxx:274
 TEventList.cxx:275
 TEventList.cxx:276
 TEventList.cxx:277
 TEventList.cxx:278
 TEventList.cxx:279
 TEventList.cxx:280
 TEventList.cxx:281
 TEventList.cxx:282
 TEventList.cxx:283
 TEventList.cxx:284
 TEventList.cxx:285
 TEventList.cxx:286
 TEventList.cxx:287
 TEventList.cxx:288
 TEventList.cxx:289
 TEventList.cxx:290
 TEventList.cxx:291
 TEventList.cxx:292
 TEventList.cxx:293
 TEventList.cxx:294
 TEventList.cxx:295
 TEventList.cxx:296
 TEventList.cxx:297
 TEventList.cxx:298
 TEventList.cxx:299
 TEventList.cxx:300
 TEventList.cxx:301
 TEventList.cxx:302
 TEventList.cxx:303
 TEventList.cxx:304
 TEventList.cxx:305
 TEventList.cxx:306
 TEventList.cxx:307
 TEventList.cxx:308
 TEventList.cxx:309
 TEventList.cxx:310
 TEventList.cxx:311
 TEventList.cxx:312
 TEventList.cxx:313
 TEventList.cxx:314
 TEventList.cxx:315
 TEventList.cxx:316
 TEventList.cxx:317
 TEventList.cxx:318
 TEventList.cxx:319
 TEventList.cxx:320
 TEventList.cxx:321
 TEventList.cxx:322
 TEventList.cxx:323
 TEventList.cxx:324
 TEventList.cxx:325
 TEventList.cxx:326
 TEventList.cxx:327
 TEventList.cxx:328
 TEventList.cxx:329
 TEventList.cxx:330
 TEventList.cxx:331
 TEventList.cxx:332
 TEventList.cxx:333
 TEventList.cxx:334
 TEventList.cxx:335
 TEventList.cxx:336
 TEventList.cxx:337
 TEventList.cxx:338
 TEventList.cxx:339
 TEventList.cxx:340
 TEventList.cxx:341
 TEventList.cxx:342
 TEventList.cxx:343
 TEventList.cxx:344
 TEventList.cxx:345
 TEventList.cxx:346
 TEventList.cxx:347
 TEventList.cxx:348
 TEventList.cxx:349
 TEventList.cxx:350
 TEventList.cxx:351
 TEventList.cxx:352
 TEventList.cxx:353
 TEventList.cxx:354
 TEventList.cxx:355
 TEventList.cxx:356
 TEventList.cxx:357
 TEventList.cxx:358
 TEventList.cxx:359
 TEventList.cxx:360
 TEventList.cxx:361
 TEventList.cxx:362
 TEventList.cxx:363
 TEventList.cxx:364
 TEventList.cxx:365
 TEventList.cxx:366
 TEventList.cxx:367
 TEventList.cxx:368
 TEventList.cxx:369
 TEventList.cxx:370
 TEventList.cxx:371
 TEventList.cxx:372
 TEventList.cxx:373
 TEventList.cxx:374
 TEventList.cxx:375
 TEventList.cxx:376
 TEventList.cxx:377
 TEventList.cxx:378
 TEventList.cxx:379
 TEventList.cxx:380
 TEventList.cxx:381
 TEventList.cxx:382
 TEventList.cxx:383
 TEventList.cxx:384
 TEventList.cxx:385
 TEventList.cxx:386
 TEventList.cxx:387
 TEventList.cxx:388
 TEventList.cxx:389
 TEventList.cxx:390
 TEventList.cxx:391
 TEventList.cxx:392
 TEventList.cxx:393
 TEventList.cxx:394
 TEventList.cxx:395
 TEventList.cxx:396
 TEventList.cxx:397
 TEventList.cxx:398
 TEventList.cxx:399
 TEventList.cxx:400
 TEventList.cxx:401
 TEventList.cxx:402
 TEventList.cxx:403
 TEventList.cxx:404
 TEventList.cxx:405
 TEventList.cxx:406
 TEventList.cxx:407
 TEventList.cxx:408
 TEventList.cxx:409
 TEventList.cxx:410
 TEventList.cxx:411
 TEventList.cxx:412
 TEventList.cxx:413
 TEventList.cxx:414
 TEventList.cxx:415
 TEventList.cxx:416
 TEventList.cxx:417
 TEventList.cxx:418
 TEventList.cxx:419
 TEventList.cxx:420
 TEventList.cxx:421
 TEventList.cxx:422
 TEventList.cxx:423
 TEventList.cxx:424
 TEventList.cxx:425
 TEventList.cxx:426
 TEventList.cxx:427
 TEventList.cxx:428
 TEventList.cxx:429
 TEventList.cxx:430
 TEventList.cxx:431
 TEventList.cxx:432
 TEventList.cxx:433
 TEventList.cxx:434
 TEventList.cxx:435
 TEventList.cxx:436
 TEventList.cxx:437
 TEventList.cxx:438
 TEventList.cxx:439
 TEventList.cxx:440
 TEventList.cxx:441
 TEventList.cxx:442
 TEventList.cxx:443
 TEventList.cxx:444
 TEventList.cxx:445
 TEventList.cxx:446
 TEventList.cxx:447
 TEventList.cxx:448
 TEventList.cxx:449
 TEventList.cxx:450
 TEventList.cxx:451
 TEventList.cxx:452
 TEventList.cxx:453
 TEventList.cxx:454
 TEventList.cxx:455
 TEventList.cxx:456
 TEventList.cxx:457
 TEventList.cxx:458
 TEventList.cxx:459
 TEventList.cxx:460
 TEventList.cxx:461
 TEventList.cxx:462
 TEventList.cxx:463
 TEventList.cxx:464
 TEventList.cxx:465
 TEventList.cxx:466
 TEventList.cxx:467
 TEventList.cxx:468
 TEventList.cxx:469
 TEventList.cxx:470
 TEventList.cxx:471
 TEventList.cxx:472
 TEventList.cxx:473
 TEventList.cxx:474
 TEventList.cxx:475
 TEventList.cxx:476
 TEventList.cxx:477
 TEventList.cxx:478
 TEventList.cxx:479
 TEventList.cxx:480
 TEventList.cxx:481
 TEventList.cxx:482
 TEventList.cxx:483
 TEventList.cxx:484
 TEventList.cxx:485
 TEventList.cxx:486
 TEventList.cxx:487
 TEventList.cxx:488
 TEventList.cxx:489
 TEventList.cxx:490
 TEventList.cxx:491
 TEventList.cxx:492
 TEventList.cxx:493
 TEventList.cxx:494
 TEventList.cxx:495
 TEventList.cxx:496
 TEventList.cxx:497
 TEventList.cxx:498