ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id$ */
 

/*
  Realisation of an AliVEventPool based on THnSparse
  Author Peter Hristov
  Peter.Hristov@cern.ch

  Possible usage: three steps
  1) Creation of a XML tag collection in aliensh

  aliensh:> find -x charm /alice/sim/PDC_08/LHC08x/180001 tag.root > 180001.xml

  2) Merging the tag files

  TGrid::Connect("alien://");
  TAlienCollection *collection = TAlienCollection::Open(xmlfile);
  TGridResult* result = collection->GetGridResult("",0);
  AliTagCreator *t = new AliTagCreator();
  t->MergeTags("ESD",result);

  3) Chain the merged tag files and test the event pool

void testpool(const char * dirname = ".", const char * pattern = "Run180001") {

  gSystem->Load("libANALYSIS.so");
  gSystem->Load("libANALYSISalice.so");

  // Create a chain
  TChain * fChain = new TChain("T");


  // Chain the tag files in the working directory
  TString fTagFilename;
  
  // Open the working directory
  void * dirp = gSystem->OpenDirectory(dirname);
  const char * name = 0x0;
  // Add all files matching *pattern* to the chain
  while((name = gSystem->GetDirEntry(dirp))) {
    cout << name << endl;
    if (strstr(name,pattern)) { 
      fTagFilename = dirname;
      fTagFilename += "/";
      fTagFilename += name;
	  	
      fChain->Add(fTagFilename);  
    }//pattern check
  }//directory loop


  Int_t nruns = fChain->GetEntries();

  cout << nruns << " run(s) found in the tag chain." << endl;

  Int_t dim = 3;
  const char * vars[] = {"fNumberOfPositiveTracks","fNumberOfNegativeTracks","fPrimaryVertexZ"};
  Int_t nbins[] = {10,10,10};
  Double_t xmin[] ={-0.5,-0.5,-20};
  Double_t xmax[] ={49/5,49.5,20};
  Int_t chunksize = 100;

  AliEventPoolSparse * pool = 
    new AliEventPoolSparse("test", "test", fChain, dim, vars, nbins, xmin, xmax, chunksize);

  pool->Init();

  TChain * esdchain = 0x0;
  Int_t ichain = 0;
  while (esdchain=pool->GetNextChain()) {
    cout << "Chain: "<< ichain <<" Events: " << esdchain->GetEntries() << endl;
    ichain++;
  }

  delete fChain;

}

*/

#include "AliEventPoolSparse.h"
#include "AliRunTag.h"
#include "AliEventTag.h"
#include "AliLog.h"
#include "AliRunTagCuts.h"
#include "AliLHCTagCuts.h"
#include "AliDetectorTagCuts.h"
#include "AliEventTagCuts.h"

#include <TObjArray.h>
#include <TAxis.h>
#include <TTreeFormula.h>
#include <TChain.h>
#include <TFile.h>
#include <Riostream.h>
#include <cstring>

ClassImp(AliEventPoolSparse)

// _________________________________________________________________________
AliEventPoolSparse::AliEventPoolSparse() :
  fHnSparseI(),
  fChunkSize(1024 * 16),
  fN(0),
  fPool(0x0),
  fCurrentBin(-1),
  fTagChain(0x0),
  fVars(0x0),
  fRunCut(0x0),
  fLHCCut(0x0),
  fDetCut(0x0),
  fEvCut(0x0),
  fRunTagCut(0x0),
  fEventTagCut(0x0),
  fDetectorTagCut(0x0),
  fLHCTagCut(0x0),
  fBinNumber(0)
{
  // Default constructor. Initializes the THnSparseI,
  // the initial size of the array and the array itself
  fN = fChunkSize;
  fPool = new TEntryList * [fN];
  memset(fPool,0x0,fN*sizeof(TEntryList*));
}

// _________________________________________________________________________
AliEventPoolSparse::AliEventPoolSparse(const char* name, const char* title, TChain * tagchain, Int_t dim,
				       const char ** vars, const Int_t* nbins, const Double_t* xmin,
				       const Double_t* xmax, Int_t chunksize):
  fHnSparseI(name, title, dim, nbins, xmin, xmax, chunksize),
  fChunkSize(chunksize),
  fN(0),
  fPool(0x0),
  fCurrentBin(-1),
  fTagChain(tagchain),
  fVars(0x0),
  fRunCut(0x0),
  fLHCCut(0x0),
  fDetCut(0x0),
  fEvCut(0x0),
  fRunTagCut(0x0),
  fEventTagCut(0x0),
  fDetectorTagCut(0x0),
  fLHCTagCut(0x0),
  fBinNumber(0){
  // Constructor. Initializes the THnSparseI,
  // the initial size of the pool array and the array itself
  // It uses the provided array of variables to create TTreeFormulas
  // that are used when the pools are filled. This is the reason to require the input
  // tag chain in the constructor.

  fN = fChunkSize;
  fPool = new TEntryList * [fN];
  memset(fPool,0x0,fN*sizeof(TArrayI*));

  // Pool variables
  fVars = new TTreeFormula*[dim];

  for (Int_t ivar=0; ivar<dim; ++ivar) {
    fVars[ivar] = new TTreeFormula(vars[ivar],vars[ivar],fTagChain);
  }


}

// _________________________________________________________________________
AliEventPoolSparse::~AliEventPoolSparse() {
  // Destructor. Delete the pool, the array of TTreeFormula
  // and the pointers to cuts
  for (Int_t i=0; i<fN; ++i) delete fPool[i];
  if (fN>0) delete [] fPool;

  Int_t ndim = fHnSparseI.GetNdimensions();
  for (Int_t i=0; i<ndim; ++i) delete fVars[i];
  delete [] fVars;

  delete fRunCut;
  delete fLHCCut;
  delete fDetCut;
  delete fEvCut;

  delete fRunTagCut;
  delete fEventTagCut;
  delete fDetectorTagCut;
  delete fLHCTagCut;

}


// Implementation of the interface functions
// _________________________________________________________________________
TChain* AliEventPoolSparse::GetNextChain(){
  // Return the chains one by one. The output is 0x0 if the pool is not initialized
  // or the last chain is already reached
  if (fCurrentBin<0) {
    AliError("The event pool is not initialized");
    return 0x0;
  }

  if (fCurrentBin>=fHnSparseI.GetNbins()) { // Check if >= or >
    AliInfo("No more chains");
    return 0x0;
  }

  fBinNumber++;
  
  fChain->SetEntryList(fPool[fCurrentBin++],"ne"); 
  return fChain;
}

// _________________________________________________________________________
void  AliEventPoolSparse::GetCurrentBin(Float_t* xbin) {
  // This method fills the center of the current bin in xbin

  if (fCurrentBin<0) {
    AliError("The event pool is not initialized");
    return;
  }

  Int_t ndim = fHnSparseI.GetNdimensions();
  Int_t * coord = new Int_t[ndim]; 
  fHnSparseI.GetBinContent(fCurrentBin,coord);

  TObjArray * axes = fHnSparseI.GetListOfAxes();
  for (Int_t i=0; i<ndim; ++i) 
    xbin[i]=((TAxis*)axes->At(i+1))->GetBinCenter(coord[i]);

  delete [] coord;
}

// _________________________________________________________________________
void  AliEventPoolSparse::Init(){
  // Loop on the tag chain and select the events according
  // to the Run, LHC, detector, and event cuts.
  // Fill the THnSparse bin and add the event to the corresponding pool
  // Taken and modified from AliAnalysisTag

  if (!fTagChain) {
    AliError("Please provide a tag chain!");
    return;
  }

  Int_t ndim = fHnSparseI.GetNdimensions();
  if (ndim<=0) return;

  Double_t * x = new Double_t[ndim];
  
  // Tag objects.
  AliRunTag *tag = new AliRunTag; 	 
  AliEventTag *evTag = 0;  
  fTagChain->SetBranchAddress("AliTAG",&tag); 	 
  
  TString guid(""); 	 
  TString turl(""); 	 
  TString path(""); 	 
  
  Int_t current = -1; 	 // Current tree number
  for(Int_t iTagFiles = 0; iTagFiles < fTagChain->GetEntries(); iTagFiles++) { 	 
    fTagChain->GetEntry(iTagFiles); 	 

    if (current != fTagChain->GetTreeNumber()) { 	 
      // Update the formula leaves if a new file is processed by the chain
//       if (fRunCut) fRunCut->UpdateFormulaLeaves(); 	 
//       if (fLHCCut) fLHCCut->UpdateFormulaLeaves(); 	 
//       if (fDetCut) fDetCut->UpdateFormulaLeaves(); 	 
//       if (fEvCut)  fEvCut->UpdateFormulaLeaves();

      if (fEventTagCut) fEventTagCut->InitializeTriggerClasses(tag->GetActiveTriggerClasses());

      for (Int_t ivar=0; ivar<fHnSparseI.GetNdimensions(); ++ivar)
 	if (fVars[ivar]) fVars[ivar]->UpdateFormulaLeaves();

      // Create the ESD/AOD chain if not done
      if (!fChain) {
	// Decide if we have ESD or AOD
	TFile * tagfile = fTagChain->GetFile();
	if (strstr(tagfile->GetName(),"ESD")) fChain = new TChain("esdTree");
	else if (strstr(tagfile->GetName(),"AOD")) fChain = new TChain("aodTree");
	else {
	  AliError("Only ESD and AOD type is implemented!!!");
	  delete [] x;
	  return;
	}
      }
      
      // Update the tree number
      current = fTagChain->GetTreeNumber();
    }
    
    // Deprecated use of TTreeFormulas
//     // Apply Run, LHC, and detector cuts if they exist
//     if(!fRunCut || fRunCut->EvalInstance(iTagFiles) == 1) { 	 
//       if(!fLHCCut || fLHCCut->EvalInstance(iTagFiles) == 1) { 	 
// 	if(!fDetCut || fDetCut->EvalInstance(iTagFiles) == 1) {
 	 

// 	  // Get access to the event data in the TTreeFormula
// 	  if (fEvCut) fEvCut->GetNdata();
// 	  for (Int_t ivar=0; ivar<fHnSparseI.GetNdimensions(); ++ivar)
// 	    if (fVars[ivar]) fVars[ivar]->GetNdata();
 	 
// 	  // Loop on events
// 	  //	  const TClonesArray *tagList = tag->GetEventTags();
// 	  Int_t iFiles = tag->GetNFiles();
// 	  for (int ifs = 0; ifs<iFiles; ifs++) {
// 	    AliFileTag *eftag = (AliFileTag *) tag->GetFileTag(ifs);

// 	    guid = eftag->GetGUID(); 	 
// 	    turl = eftag->GetTURL(); 	 
// 	    path = eftag->GetPath(); 	 
	    
// 	    Int_t iEvents = eftag->GetNEvents();
// 	    for(Int_t i = 0; i < iEvents; i++) { 	 
// 	      evTag = (AliEventTag *) eftag->GetEventTag(i); 	 
	      
	      
// 	      if(!fEvCut || fEvCut->EvalInstance(i) == 1) {
// 		TEntryList *fLocalList = new TEntryList();
// 		fLocalList->SetTreeName(fChain->GetName());
// 		fLocalList->SetFileName(turl.Data());
// 		fLocalList->Enter(i);
		
		
// 		// Add this event to the corresponding pool
// 		{
// 		  // Increment the bin content corrresponding to the vector "x" by "w",
// 		  // and store the event index iev to the array associated with the bin,
// 		  // then return the bin index.
		  
// 		  for (Int_t ivar=0; ivar<ndim; ++ivar) x[ivar] = fVars[ivar]->EvalInstance(i);
		  
// 		  Int_t bin =  fHnSparseI.Fill(x);
// 		  // Check if we have to enlarge the array of pointers
// 		  if (bin>=fN) Set(bin+fChunkSize);
// 		  // Allocate the TEntryList if this is the first use of it
// 		  if (!fPool[bin]) fPool[bin] = new TEntryList();
// 		  // Add the event iev to the corresponding bin
// 		  fPool[bin]->Add(fLocalList);
// 		}
// 	      }
// 	    }//event loop 	 
	  
// 	    for (Int_t ipool=0; ipool<fHnSparseI.GetNbins(); ++ipool) 
// 	      fPool[ipool]->OptimizeStorage();
	    
// 	    // Add the current file to the ESD/AOD chain
// 	    if(!path.IsNull()) fChain->AddFile(path); 	 
// 	    else if(!turl.IsNull()) fChain->AddFile(turl);
// 	  }
// 	}//detector tag cuts
//       }//lhc tag cuts
//     }//run tag cut 	 

    // Apply Run, LHC, and detector cuts if they exist
    if(!fRunTagCut || fRunTagCut->IsAccepted(tag)) { 	 
      if(!fLHCTagCut || fLHCTagCut->IsAccepted(tag->GetLHCTag())) { 	 
	if(!fDetectorTagCut || fDetectorTagCut->IsAccepted(tag->GetDetectorTags())) {
 	 
// 	  // Get access to the event data in the TTreeFormula
// 	  if (fEvCut) fEvCut->GetNdata();
 	  for (Int_t ivar=0; ivar<fHnSparseI.GetNdimensions(); ++ivar)
 	    if (fVars[ivar]) fVars[ivar]->GetNdata();
 	 
	  // Loop on events
	  //	  const TClonesArray *tagList = tag->GetEventTags();
	  Int_t iFiles = tag->GetNFiles();
	  for (int ifs = 0; ifs<iFiles; ifs++) {
	    AliFileTag *eftag = (AliFileTag *) tag->GetFileTag(ifs);

	    guid = eftag->GetGUID(); 	 
	    turl = eftag->GetTURL(); 	 
	    path = eftag->GetPath(); 	 
	    
	    Int_t iEvents = eftag->GetNEvents();
	    for(Int_t i = 0; i < iEvents; i++) { 	 
	      evTag = (AliEventTag *) eftag->GetEventTag(i); 	 
	      
	      
	      if(!fEventTagCut || fEventTagCut->IsAccepted(evTag)) {
		TEntryList *fLocalList = new TEntryList();
		fLocalList->SetTreeName(fChain->GetName());
		fLocalList->SetFileName(turl.Data());
		fLocalList->Enter(i);
		
		
		// Add this event to the corresponding pool
		{
		  // Increment the bin content corrresponding to the vector "x" by "w",
		  // and store the event index iev to the array associated with the bin,
		  // then return the bin index.
		  
		  for (Int_t ivar=0; ivar<ndim; ++ivar) x[ivar] = fVars[ivar]->EvalInstance(i);
		  
		  Int_t bin =  fHnSparseI.Fill(x);
		  // Check if we have to enlarge the array of pointers
		  if (bin>=fN) Set(bin+fChunkSize);
		  // Allocate the TEntryList if this is the first use of it
		  if (!fPool[bin]) fPool[bin] = new TEntryList();
		  // Add the event iev to the corresponding bin
		  fPool[bin]->Add(fLocalList);
		}
	      }
	    }//event loop 	 
	  
	    for (Int_t ipool=0; ipool<fHnSparseI.GetNbins(); ++ipool) 
	      fPool[ipool]->OptimizeStorage();
	    
	    // Add the current file to the ESD/AOD chain
	    if(!path.IsNull()) fChain->AddFile(path); 	 
	    else if(!turl.IsNull()) fChain->AddFile(turl);
	  }
	}//detector tag cuts
      }//lhc tag cuts
    }//run tag cut 	 

  }//tag file loop 	 

  delete [] x;
  fCurrentBin = 0; // Initialize the current bin
}

// _________________________________________________________________________
void AliEventPoolSparse::SetRunCut(const char * cut){
  // Run selection cuts
  if (fRunCut) delete fRunCut;
  fRunCut = new TTreeFormula("fRun",cut,fTagChain);
}

// _________________________________________________________________________
void AliEventPoolSparse::SetLHCCut(const char * cut){
  // LHC selection cuts
  if (fLHCCut) delete fLHCCut;
  fLHCCut = new TTreeFormula("fLHC",cut,fTagChain);
}

// _________________________________________________________________________
void AliEventPoolSparse::SetDetCut(const char * cut){
  // Detector selection cuts
  if (fDetCut) delete fDetCut;
  fDetCut = new TTreeFormula("fDet",cut,fTagChain);
}

// _________________________________________________________________________
void AliEventPoolSparse::SetEventCut(const char * cut){
  // Event selection cuts
  if (fEvCut) delete fEvCut;
  fEvCut = new TTreeFormula("fEv",cut,fTagChain);
}

// _________________________________________________________________________
void AliEventPoolSparse::SetRunCut(AliRunTagCuts* cut)
{
  fRunTagCut = cut;
}
// _________________________________________________________________________
void AliEventPoolSparse::SetEventCut(AliEventTagCuts* cut)
{
  fEventTagCut = cut;
}
// _________________________________________________________________________
void AliEventPoolSparse::SetDetectorCut(AliDetectorTagCuts* cut)
{
  fDetectorTagCut = cut;
}
// _________________________________________________________________________
void AliEventPoolSparse::SetLHCCut(AliLHCTagCuts* cut)
{
  fLHCTagCut = cut;
}

// _________________________________________________________________________
void AliEventPoolSparse::Set(Int_t n){
  // Set size of the array of pointers to n.
  // A new array is created, the old contents copied to the new array,
  // then the old array is deleted.
  // This function is taken from TArrayI

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