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.                  *
**************************************************************************/
//
// Collection class for histograms
// Stores either histograms or vectors of histograms
// 
// Author:
// Matus Kalisky  <matus.kalisky@cern.ch>
//

#include <TH1F.h>
#include <TH2F.h>
#include <TH3F.h>
#include <THnSparse.h>
#include <TProfile.h>
#include <TString.h>
#include <TBrowser.h>
#include <TMath.h>

#include "AliLog.h"

#include "AliHFEcollection.h"

using namespace std;


ClassImp(AliHFEcollection)

//___________________________________________________________________
AliHFEcollection::AliHFEcollection():
  TNamed()
  , fList(NULL)
{

  //
  // default constructor
  //
}
//___________________________________________________________________
AliHFEcollection::AliHFEcollection(const char* name, const char* title):
  TNamed(name, title)
  , fList(NULL)
{
 
  //
  // constructor
  //
 
  fList = new THashList();
  if(fList){
    fList->SetOwner();
    fList->SetName(Form("list_%s", name));
  }
}
//___________________________________________________________________
AliHFEcollection::AliHFEcollection(const AliHFEcollection &c) :
  TNamed(c)
  , fList(NULL)
{

  //
  // copy operator
  // 
  
  c.Copy(*this);
}
//___________________________________________________________________
AliHFEcollection &AliHFEcollection::operator=(const AliHFEcollection &ref)
{
  //
  // Assignment operator
  //
  
  if(this != &ref){
    ref.Copy(*this);
  }
  return *this;
}
//___________________________________________________________________
void AliHFEcollection::Copy(TObject &ref) const {

  //
  // Performs the copying of the object
  //

  AliHFEcollection &target = dynamic_cast<AliHFEcollection &>(ref);

  // Clone List Content
  target.fList = new THashList();          
  target.fList->SetOwner();
  for(Int_t ien = 0; ien < fList->GetEntries(); ien++)
    target.fList->Add(fList->At(ien)->Clone());
}
//___________________________________________________________________
AliHFEcollection::~AliHFEcollection(){

  //
  // Destructor
  //
  delete fList;
  AliDebug(1, "DESTRUCTOR");
}
//___________________________________________________________________
Bool_t AliHFEcollection::CreateTH1F(const char* name, const char* title, Int_t nBin, Float_t nMin, Float_t nMax, Int_t logAxis){

  //
  // Creates a TH1F histogram for the collection
  //

  if(!fList){
    AliError("No TList pointer ! ");
    return kFALSE;
  }
  else{
    fList->Add(new TH1F(name, title, nBin, nMin, nMax));
    if(logAxis >= 0){
      BinLogAxis(name, logAxis);
    }
    return CheckObject(name);
  }
}

//___________________________________________________________________
Bool_t AliHFEcollection::CreateTH1Farray(const char* name, const char* title, Int_t nBin, const Double_t* xbins){

  //
  // Creates a TH1F histogram for the collection 2nd version 
  //

  if(!fList){
    AliError("No TList pointer ! ");
    return kFALSE;
  }
  else{
    fList->Add(new TH1F(name, title, nBin, xbins));
    return CheckObject(name);
  }
}

//___________________________________________________________________
Bool_t AliHFEcollection::CreateTH2Farray(const char* name, const char* title, Int_t nBin, const Double_t* xbins, Int_t nBinY, Float_t nMinY, Float_t nMaxY){

  //
  // Creates a TH1F histogram for the collection 2nd version 
  //

  if(!fList){
    AliError("No TList pointer ! ");
    return kFALSE;
  }
  else{
    fList->Add(new TH2F(name, title, nBin, xbins, nBinY, nMinY, nMaxY));
    return CheckObject(name);
  }
}

//___________________________________________________________________
Bool_t AliHFEcollection::CreateTH2F(const char* name, const char* title, Int_t nBinX, Float_t nMinX, Float_t nMaxX, Int_t nBinY, Float_t nMinY, Float_t nMaxY, Int_t logAxis){

  //
  // Creates a TH2F histogram for the collection
  //

  if(!fList){
    AliError("No TList pointer ! ");
    return kFALSE;
  }
  fList->Add(new TH2F(name, title, nBinX, nMinX, nMaxX, nBinY, nMinY, nMaxY));
  if(logAxis >= 0){
    BinLogAxis(name, logAxis);
  }
  return CheckObject(name); 
}
//___________________________________________________________________
Bool_t AliHFEcollection::CreateTH1Fvector1(Int_t X, const char* name, const char* title, Int_t nBin, Float_t nMin, Float_t nMax, Int_t logAxis){

  //
  // create a 1 dimensional array of size [X]
  //

  if(!fList){
    AliError("No TList pointer ! ");
    return kFALSE;
  }
  if(X <=0){
    AliError("can not create array with negative or zero size ");
    return kFALSE;
  }
  TString hname;
  for(Int_t i=0; i<X; ++i){
    hname = "";
    hname.Append(Form("%s_[%d]", name, i));
    //cout<<" -D: name: "<<name.str().c_str()<<endl;
    //cout<<" -D: nBin: "<<_nBin<<" ,Min: "<<_nMin<<" , Max: "<<_nMax<<endl;
    CreateTH1F(hname.Data(), title, nBin, nMin, nMax, logAxis);
    if(!CheckObject(hname.Data())){
      AliError(Form("Not possible to create object: %s", hname.Data()));
      return kFALSE;
    }    
  }
  return kTRUE;  
}
//___________________________________________________________________
Bool_t AliHFEcollection::CreateTH2Fvector1(Int_t X, const char* name, const char* title, Int_t nBinX, Float_t nMinX, Float_t nMaxX, Int_t nBinY, Float_t nMinY, Float_t nMaxY, Int_t logAxis){

  //
  // create a 1 dimensinal array of TH2F histograms with size [X]
  //

  if(!fList){
    AliError("No TList pointer !");
    return kFALSE;
  }
  if(X <=0){
    AliError("can not create array with negative or zero size ");
    return kFALSE;
  }
  TString hname;
  for(Int_t i=0; i<X; ++i){
    hname = "";
    hname.Append(Form("%s_[%d]", name, i));
    //cout<<" -D: name: "<<name<<endl;
    //cout<<" -D: nBin: "<<_nBin<<" ,Min: "<<_nMin<<" , Max: "<<_nMax<<endl;
    CreateTH2F(hname.Data(), title, nBinX, nMinX, nMaxX, nBinY, nMinY, nMaxY, logAxis);
    if(!CheckObject(hname.Data())){
      AliError(Form("Not possible to create object: %s", hname.Data()));
      return kFALSE;
    }    
  }
  return kTRUE;  
}
//___________________________________________________________________
Bool_t AliHFEcollection::CreateTH1Fvector2(Int_t X, Int_t Y, const char* name, const char* title, Int_t nBin, Float_t nMin, Float_t nMax, Int_t logAxis){

  //
  // create a 2 dimensional array of histograms of size [X, Y]
  //

  if(!fList){
    AliError("No TList pointer ! ");
    return kFALSE;
  }
  if(X <=0 || Y <=0){
    AliError("can not create array with negative or zero size ");
    return kFALSE;
  }
  TString hname;
  for(Int_t i=0; i<X; ++i){
    for(Int_t j=0; j<Y; ++j){
      hname = "";
      hname.Append(Form("%s_[%d][%d]", name, i, j));
      //cout<<" -D: name: "<<name.str().c_str()<<endl;
      //cout<<" -D: nBin: "<<_nBin<<" ,Min: "<<_nMin<<" , Max: "<<_nMax<<endl;
      CreateTH1F(hname.Data(), title, nBin, nMin, nMax, logAxis);
      if(!CheckObject(hname.Data())){
	      AliError(Form("Not possible to create object: %s", hname.Data()));
	      return kFALSE;
      }
    }
  }
  return kTRUE;  
}
//___________________________________________________________________
Bool_t AliHFEcollection::CreateTH3F(const char* name, const char* title, Int_t nBinX, Float_t nMinX, Float_t nMaxX, Int_t nBinY, Float_t nMinY, Float_t nMaxY, Int_t nBinZ, Float_t nMinZ, Float_t nMaxZ, Int_t logAxis){

  //
  // Creates a TH2F histogram for the collection
  //

  if(!fList){
    AliError("No TList pointer ! ");
    return kFALSE;
  }
  fList->Add(new TH3F(name, title, nBinX, nMinX, nMaxX, nBinY, nMinY, nMaxY, nBinZ, nMinZ, nMaxZ));
  if(logAxis >= 0){
    BinLogAxis(name, logAxis);
  }
  return CheckObject(name); 
}
//___________________________________________________________________
Bool_t AliHFEcollection::CreateProfile(const char* name, const char* title, Int_t nbins, Double_t xmin, Double_t xmax){
  
  //
  // create a simple TProfile
  //

  if(!fList){
    AliError("No TList pointer ! ");
    return kFALSE;
  }
  fList->Add(new TProfile(name, title, nbins, xmin, xmax));
  return CheckObject(name);

}
//___________________________________________________________________
Bool_t AliHFEcollection::CreateTHnSparse(const char* name, const char* title, Int_t dim, const Int_t* nbins, const Double_t* xmin, const Double_t* xmax){

  //
  // create 'dim' dimensional THnSparse
  //

  if(!fList){
    AliError("No TList pointer ! ");
    return kFALSE;
  }
  fList->Add(new THnSparseF(name, title, dim, nbins, xmin, xmax));
  return CheckObject(name);

}
//___________________________________________________________________
Bool_t AliHFEcollection::CreateTHnSparseNoLimits(const char* name, const char* title, Int_t dim, const Int_t* nbins){

  //
  // create 'dim' dimensional THnSparse without limits
  //

  if(!fList){
    AliError("No TList pointer ! ");
    return kFALSE;
  }
  fList->Add(new THnSparseF(name, title, dim, nbins));
  return CheckObject(name);

}
//___________________________________________________________________
TObject* AliHFEcollection::Get(const char* name){ 

  //
  // Get histogram with the required name
  // 
  

  if(!CheckObject(name)){
    AliWarning(Form("Not possible to return pointer to the object '%s'\n", name));
    return 0;
  }

  return fList->FindObject(name);
  
}
//___________________________________________________________________
Bool_t AliHFEcollection::Fill(const char* name, Double_t v){

  //
  // fill function for one TH1 histograms
  //

  if(!CheckObject(name)){
    AliError(Form("Not possible to fill the object '%s', the object does not exist\n", name));
    return kFALSE;
  }

  TH1 *htmp = dynamic_cast<TH1F*>(fList->FindObject(name));
  // chack the possible object types
  if(htmp){
    htmp->Fill(v);
    return kTRUE;
  }
  
  return kFALSE;

}
//___________________________________________________________________
Bool_t AliHFEcollection::Fill(const char* name, Int_t v){

  //
  // fill function for one TH1 histograms for integer numbers
  //

  return Fill(name, v*1.0);
}
//___________________________________________________________________
Bool_t AliHFEcollection::Fill(const char* name, Int_t X, Double_t v){

  //
  // fill function for one dimension arrays of TH1
  //

  const char* n = Form("%s_[%d]", name, X);
  TObject *o = Get(n);
  if(!o){
    return kFALSE;
  }
  Fill(o->GetName(), v);
  return kTRUE;
}
//___________________________________________________________________
Bool_t AliHFEcollection::Fill(const char* name, Int_t X, Int_t Y, Double_t v){

  //
  // Fill function fir 2 dimensional TH1 arrays
  //
  
  const char* n = Form("%s_[%d][%d]", name, X, Y);
  TObject *o = Get(n);
  if(!o){
    return kFALSE;
  }
  Fill(o->GetName(), v);
  return kTRUE;
}
//___________________________________________________________________
Bool_t AliHFEcollection::Fill(const char* name, Int_t X, Double_t v1, Double_t v2){

  //
  // fill function for one dimension array of TH2
  //

  const char* n = Form("%s_[%d]", name, X);
  TObject *o = Get(n);
  if(!o){
    return kFALSE;
  }
  Fill(o->GetName(), v1, v2);
  
  return kTRUE;
}
//___________________________________________________________________
Bool_t AliHFEcollection::Fill(const char* name, Double_t v1, Double_t v2){

  //
  // fill function for TH2 objects
  //

  if(!CheckObject(name)){
    AliError(Form("Not possible to fill the object '%s', the object does not exist\n", name));
    return kFALSE;
  }

  // chack the possible object types
  if(fList->FindObject(name)->InheritsFrom("TH2")){
    TH2 *h2 = dynamic_cast<TH2F*>(fList->FindObject(name));
    if(h2) h2->Fill(v1, v2);
    return kTRUE;
  }  
  if(fList->FindObject(name)->InheritsFrom("TProfile")){
    TProfile *pr = dynamic_cast<TProfile*>(fList->FindObject(name));
    if(pr) pr->Fill(v1, v2);
    return kTRUE;
  }  
  
  return kFALSE;
  
}
//___________________________________________________________________
Bool_t AliHFEcollection::Fill(const char* name, Double_t v1, Double_t v2, Double_t v3){

  //
  // fill function for TH3 objects
  //

  if(!CheckObject(name)){
    AliError(Form("Not possible to fill the object '%s', the object does not exist\n", name));
    return kFALSE;
  }

  // chack the possible object types
  TH3 *h3 = dynamic_cast<TH3F*>(fList->FindObject(name));
  if(h3){ 
    h3->Fill(v1, v2, v3);
    return kTRUE;
  }

  return kFALSE;
  
}
//___________________________________________________________________
Bool_t AliHFEcollection::Fill(const char* name, Double_t* entry, Double_t weight){
  //
  // Fill a THnSparse object
  //

  if(!CheckObject(name)){
    AliError(Form("Not possible to fill the object '%s', the object does not exist\n", name));
    return kFALSE;
  }
  
  THnSparseF *htmp = dynamic_cast<THnSparseF*>(fList->FindObject(name));
   if(htmp){
     htmp->Fill(entry, weight);
     return kTRUE;
   }
   return kFALSE;

}
//___________________________________________________________________
Bool_t AliHFEcollection::CheckObject(const char* name){

  //
  // check wheter the creation of the histogram was succesfull
  //
  
  if(!fList){
    AliError("No TList pointer ! ");
    return kFALSE;
  }
  
  if(!fList->FindObject(name)){
    AliWarning(Form("Creating or Finding the object '%s' failed\n", name));
    return kFALSE;
  }
  return kTRUE;
}
//___________________________________________________________________
Bool_t AliHFEcollection::Sumw2(const char* name){
  //
  // Set Sumw2 for the given object
  //
  if(!CheckObject(name)){
    return kFALSE;
  }

  TObject *o = Get(name);
  THnSparse *htmp = dynamic_cast<THnSparse*>(o);
  if(htmp){
    htmp->Sumw2();
  }
  return kTRUE;
}
//___________________________________________________________________
Bool_t AliHFEcollection::BinLogAxis(const char* name, Int_t dim){

  // 
  // converts the axis (defined by the dimension) of THx or THnSparse
  // object to Log scale. Number of bins and bin min and bin max are preserved
  //


  if(!CheckObject(name)){
    return kFALSE;
  }

  TObject *o = Get(name);
  TAxis *axis = NULL;
  TString type(o->IsA()->GetName()); 
  if(type.Contains("TH1")){ // 1D histogram
    TH1 *h1 = dynamic_cast<TH1F*>(o);
    if(h1) axis = h1->GetXaxis();
  } else if(type.Contains("TH2")){
    TH2 *h2 = dynamic_cast<TH2F*>(o);
    if(h2){
      if(0 == dim){
        axis = h2->GetXaxis();
      }
      else if(1 == dim){
        axis = h2->GetYaxis();
      }
      else{
         AliError("Only dim = 0 or 1 possible for TH2F");
      }
    }
  } else if(type.Contains("TH3")){
    TH3 *h3 = dynamic_cast<TH3F*>(o);
    if(h3){
      if(0 == dim){
        axis = h3->GetXaxis();
      }
      else if(1 == dim){
        axis = h3->GetYaxis();
      }
      else if(2 == dim){
        axis = h3->GetZaxis();
      }
      else{
         AliError("Only dim = 0, 1 or 2 possible for TH3F");
      }
    }
  } else if(type.Contains("THnSparse")){
    THnSparse *hs = dynamic_cast<THnSparse*>(o);
    if(hs) axis = hs->GetAxis(dim);
  }

  if(!axis){
    AliError(Form("Axis '%d' could not be identified in the object '%s'\n", dim, name));
    return kFALSE;
  }
  
  Int_t bins = axis->GetNbins();

  Double_t from = axis->GetXmin();
  if(from <= 0){
    AliError(Form(" Log binning not possible for object '%s'because the '%d' axis starts from '%f\n'", name, dim, from));
    return kFALSE;
  }
  Double_t to = axis->GetXmax();
  Double_t *newBins = new Double_t[bins+1];
  newBins[0] = from;
  Double_t factor = TMath::Power(to/from, 1./bins);
  for(Int_t i=1; i<=bins; ++i){
    newBins[i] = factor * newBins[i-1];
  }
  axis->Set(bins, newBins);
  delete[] newBins;

  return kTRUE;


}
//___________________________________________________________________
Long64_t AliHFEcollection::Merge(const TCollection *list){

  //
  // Merge the collections
  //
  if(!list)
    return 0;
  if(list->IsEmpty())
    return 1;
  
  TIter it(list);
  TObject *o = NULL;
  Int_t index = 0;
  TList templist;       // Create temporary list containing all the lists to merge
  while((o = it())){
    AliHFEcollection *coll = dynamic_cast<AliHFEcollection *>(o);
    if(!coll) continue; 
    templist.Add(coll->fList);
    index++;
  }
  fList->Merge(&templist);
  return index + 1;
}
//____________________________________________________________________
void AliHFEcollection::Browse(TBrowser *b)
{

  //
  // Browse the content of the directory.
  //

   if (b) {
      TObject *obj = 0;
      TIter nextin(fList);

      //Add objects that are only in memory
      while ((obj = nextin())) {
         b->Add(obj, obj->GetName());
      }
   }
}
//____________________________________________________________________
void AliHFEcollection::Print(Option_t *) const{
  //
  // Print content of the collection
  //
  TIter histIter(fList);
  TObject *o = NULL;
  Int_t nHistos = 0;
  printf("Collection %s\n", GetName());
  printf("Content of the collection:\n=========================================\n");
  while((o = histIter())){
    printf("Histo %s, Type %s\n", o->GetName(), o->IsA()->GetName());
    nHistos++;
  }
  printf("Number of histos in the collection: %d\n", nHistos);
  printf("\n");
}

 AliHFEcollection.cxx:1
 AliHFEcollection.cxx:2
 AliHFEcollection.cxx:3
 AliHFEcollection.cxx:4
 AliHFEcollection.cxx:5
 AliHFEcollection.cxx:6
 AliHFEcollection.cxx:7
 AliHFEcollection.cxx:8
 AliHFEcollection.cxx:9
 AliHFEcollection.cxx:10
 AliHFEcollection.cxx:11
 AliHFEcollection.cxx:12
 AliHFEcollection.cxx:13
 AliHFEcollection.cxx:14
 AliHFEcollection.cxx:15
 AliHFEcollection.cxx:16
 AliHFEcollection.cxx:17
 AliHFEcollection.cxx:18
 AliHFEcollection.cxx:19
 AliHFEcollection.cxx:20
 AliHFEcollection.cxx:21
 AliHFEcollection.cxx:22
 AliHFEcollection.cxx:23
 AliHFEcollection.cxx:24
 AliHFEcollection.cxx:25
 AliHFEcollection.cxx:26
 AliHFEcollection.cxx:27
 AliHFEcollection.cxx:28
 AliHFEcollection.cxx:29
 AliHFEcollection.cxx:30
 AliHFEcollection.cxx:31
 AliHFEcollection.cxx:32
 AliHFEcollection.cxx:33
 AliHFEcollection.cxx:34
 AliHFEcollection.cxx:35
 AliHFEcollection.cxx:36
 AliHFEcollection.cxx:37
 AliHFEcollection.cxx:38
 AliHFEcollection.cxx:39
 AliHFEcollection.cxx:40
 AliHFEcollection.cxx:41
 AliHFEcollection.cxx:42
 AliHFEcollection.cxx:43
 AliHFEcollection.cxx:44
 AliHFEcollection.cxx:45
 AliHFEcollection.cxx:46
 AliHFEcollection.cxx:47
 AliHFEcollection.cxx:48
 AliHFEcollection.cxx:49
 AliHFEcollection.cxx:50
 AliHFEcollection.cxx:51
 AliHFEcollection.cxx:52
 AliHFEcollection.cxx:53
 AliHFEcollection.cxx:54
 AliHFEcollection.cxx:55
 AliHFEcollection.cxx:56
 AliHFEcollection.cxx:57
 AliHFEcollection.cxx:58
 AliHFEcollection.cxx:59
 AliHFEcollection.cxx:60
 AliHFEcollection.cxx:61
 AliHFEcollection.cxx:62
 AliHFEcollection.cxx:63
 AliHFEcollection.cxx:64
 AliHFEcollection.cxx:65
 AliHFEcollection.cxx:66
 AliHFEcollection.cxx:67
 AliHFEcollection.cxx:68
 AliHFEcollection.cxx:69
 AliHFEcollection.cxx:70
 AliHFEcollection.cxx:71
 AliHFEcollection.cxx:72
 AliHFEcollection.cxx:73
 AliHFEcollection.cxx:74
 AliHFEcollection.cxx:75
 AliHFEcollection.cxx:76
 AliHFEcollection.cxx:77
 AliHFEcollection.cxx:78
 AliHFEcollection.cxx:79
 AliHFEcollection.cxx:80
 AliHFEcollection.cxx:81
 AliHFEcollection.cxx:82
 AliHFEcollection.cxx:83
 AliHFEcollection.cxx:84
 AliHFEcollection.cxx:85
 AliHFEcollection.cxx:86
 AliHFEcollection.cxx:87
 AliHFEcollection.cxx:88
 AliHFEcollection.cxx:89
 AliHFEcollection.cxx:90
 AliHFEcollection.cxx:91
 AliHFEcollection.cxx:92
 AliHFEcollection.cxx:93
 AliHFEcollection.cxx:94
 AliHFEcollection.cxx:95
 AliHFEcollection.cxx:96
 AliHFEcollection.cxx:97
 AliHFEcollection.cxx:98
 AliHFEcollection.cxx:99
 AliHFEcollection.cxx:100
 AliHFEcollection.cxx:101
 AliHFEcollection.cxx:102
 AliHFEcollection.cxx:103
 AliHFEcollection.cxx:104
 AliHFEcollection.cxx:105
 AliHFEcollection.cxx:106
 AliHFEcollection.cxx:107
 AliHFEcollection.cxx:108
 AliHFEcollection.cxx:109
 AliHFEcollection.cxx:110
 AliHFEcollection.cxx:111
 AliHFEcollection.cxx:112
 AliHFEcollection.cxx:113
 AliHFEcollection.cxx:114
 AliHFEcollection.cxx:115
 AliHFEcollection.cxx:116
 AliHFEcollection.cxx:117
 AliHFEcollection.cxx:118
 AliHFEcollection.cxx:119
 AliHFEcollection.cxx:120
 AliHFEcollection.cxx:121
 AliHFEcollection.cxx:122
 AliHFEcollection.cxx:123
 AliHFEcollection.cxx:124
 AliHFEcollection.cxx:125
 AliHFEcollection.cxx:126
 AliHFEcollection.cxx:127
 AliHFEcollection.cxx:128
 AliHFEcollection.cxx:129
 AliHFEcollection.cxx:130
 AliHFEcollection.cxx:131
 AliHFEcollection.cxx:132
 AliHFEcollection.cxx:133
 AliHFEcollection.cxx:134
 AliHFEcollection.cxx:135
 AliHFEcollection.cxx:136
 AliHFEcollection.cxx:137
 AliHFEcollection.cxx:138
 AliHFEcollection.cxx:139
 AliHFEcollection.cxx:140
 AliHFEcollection.cxx:141
 AliHFEcollection.cxx:142
 AliHFEcollection.cxx:143
 AliHFEcollection.cxx:144
 AliHFEcollection.cxx:145
 AliHFEcollection.cxx:146
 AliHFEcollection.cxx:147
 AliHFEcollection.cxx:148
 AliHFEcollection.cxx:149
 AliHFEcollection.cxx:150
 AliHFEcollection.cxx:151
 AliHFEcollection.cxx:152
 AliHFEcollection.cxx:153
 AliHFEcollection.cxx:154
 AliHFEcollection.cxx:155
 AliHFEcollection.cxx:156
 AliHFEcollection.cxx:157
 AliHFEcollection.cxx:158
 AliHFEcollection.cxx:159
 AliHFEcollection.cxx:160
 AliHFEcollection.cxx:161
 AliHFEcollection.cxx:162
 AliHFEcollection.cxx:163
 AliHFEcollection.cxx:164
 AliHFEcollection.cxx:165
 AliHFEcollection.cxx:166
 AliHFEcollection.cxx:167
 AliHFEcollection.cxx:168
 AliHFEcollection.cxx:169
 AliHFEcollection.cxx:170
 AliHFEcollection.cxx:171
 AliHFEcollection.cxx:172
 AliHFEcollection.cxx:173
 AliHFEcollection.cxx:174
 AliHFEcollection.cxx:175
 AliHFEcollection.cxx:176
 AliHFEcollection.cxx:177
 AliHFEcollection.cxx:178
 AliHFEcollection.cxx:179
 AliHFEcollection.cxx:180
 AliHFEcollection.cxx:181
 AliHFEcollection.cxx:182
 AliHFEcollection.cxx:183
 AliHFEcollection.cxx:184
 AliHFEcollection.cxx:185
 AliHFEcollection.cxx:186
 AliHFEcollection.cxx:187
 AliHFEcollection.cxx:188
 AliHFEcollection.cxx:189
 AliHFEcollection.cxx:190
 AliHFEcollection.cxx:191
 AliHFEcollection.cxx:192
 AliHFEcollection.cxx:193
 AliHFEcollection.cxx:194
 AliHFEcollection.cxx:195
 AliHFEcollection.cxx:196
 AliHFEcollection.cxx:197
 AliHFEcollection.cxx:198
 AliHFEcollection.cxx:199
 AliHFEcollection.cxx:200
 AliHFEcollection.cxx:201
 AliHFEcollection.cxx:202
 AliHFEcollection.cxx:203
 AliHFEcollection.cxx:204
 AliHFEcollection.cxx:205
 AliHFEcollection.cxx:206
 AliHFEcollection.cxx:207
 AliHFEcollection.cxx:208
 AliHFEcollection.cxx:209
 AliHFEcollection.cxx:210
 AliHFEcollection.cxx:211
 AliHFEcollection.cxx:212
 AliHFEcollection.cxx:213
 AliHFEcollection.cxx:214
 AliHFEcollection.cxx:215
 AliHFEcollection.cxx:216
 AliHFEcollection.cxx:217
 AliHFEcollection.cxx:218
 AliHFEcollection.cxx:219
 AliHFEcollection.cxx:220
 AliHFEcollection.cxx:221
 AliHFEcollection.cxx:222
 AliHFEcollection.cxx:223
 AliHFEcollection.cxx:224
 AliHFEcollection.cxx:225
 AliHFEcollection.cxx:226
 AliHFEcollection.cxx:227
 AliHFEcollection.cxx:228
 AliHFEcollection.cxx:229
 AliHFEcollection.cxx:230
 AliHFEcollection.cxx:231
 AliHFEcollection.cxx:232
 AliHFEcollection.cxx:233
 AliHFEcollection.cxx:234
 AliHFEcollection.cxx:235
 AliHFEcollection.cxx:236
 AliHFEcollection.cxx:237
 AliHFEcollection.cxx:238
 AliHFEcollection.cxx:239
 AliHFEcollection.cxx:240
 AliHFEcollection.cxx:241
 AliHFEcollection.cxx:242
 AliHFEcollection.cxx:243
 AliHFEcollection.cxx:244
 AliHFEcollection.cxx:245
 AliHFEcollection.cxx:246
 AliHFEcollection.cxx:247
 AliHFEcollection.cxx:248
 AliHFEcollection.cxx:249
 AliHFEcollection.cxx:250
 AliHFEcollection.cxx:251
 AliHFEcollection.cxx:252
 AliHFEcollection.cxx:253
 AliHFEcollection.cxx:254
 AliHFEcollection.cxx:255
 AliHFEcollection.cxx:256
 AliHFEcollection.cxx:257
 AliHFEcollection.cxx:258
 AliHFEcollection.cxx:259
 AliHFEcollection.cxx:260
 AliHFEcollection.cxx:261
 AliHFEcollection.cxx:262
 AliHFEcollection.cxx:263
 AliHFEcollection.cxx:264
 AliHFEcollection.cxx:265
 AliHFEcollection.cxx:266
 AliHFEcollection.cxx:267
 AliHFEcollection.cxx:268
 AliHFEcollection.cxx:269
 AliHFEcollection.cxx:270
 AliHFEcollection.cxx:271
 AliHFEcollection.cxx:272
 AliHFEcollection.cxx:273
 AliHFEcollection.cxx:274
 AliHFEcollection.cxx:275
 AliHFEcollection.cxx:276
 AliHFEcollection.cxx:277
 AliHFEcollection.cxx:278
 AliHFEcollection.cxx:279
 AliHFEcollection.cxx:280
 AliHFEcollection.cxx:281
 AliHFEcollection.cxx:282
 AliHFEcollection.cxx:283
 AliHFEcollection.cxx:284
 AliHFEcollection.cxx:285
 AliHFEcollection.cxx:286
 AliHFEcollection.cxx:287
 AliHFEcollection.cxx:288
 AliHFEcollection.cxx:289
 AliHFEcollection.cxx:290
 AliHFEcollection.cxx:291
 AliHFEcollection.cxx:292
 AliHFEcollection.cxx:293
 AliHFEcollection.cxx:294
 AliHFEcollection.cxx:295
 AliHFEcollection.cxx:296
 AliHFEcollection.cxx:297
 AliHFEcollection.cxx:298
 AliHFEcollection.cxx:299
 AliHFEcollection.cxx:300
 AliHFEcollection.cxx:301
 AliHFEcollection.cxx:302
 AliHFEcollection.cxx:303
 AliHFEcollection.cxx:304
 AliHFEcollection.cxx:305
 AliHFEcollection.cxx:306
 AliHFEcollection.cxx:307
 AliHFEcollection.cxx:308
 AliHFEcollection.cxx:309
 AliHFEcollection.cxx:310
 AliHFEcollection.cxx:311
 AliHFEcollection.cxx:312
 AliHFEcollection.cxx:313
 AliHFEcollection.cxx:314
 AliHFEcollection.cxx:315
 AliHFEcollection.cxx:316
 AliHFEcollection.cxx:317
 AliHFEcollection.cxx:318
 AliHFEcollection.cxx:319
 AliHFEcollection.cxx:320
 AliHFEcollection.cxx:321
 AliHFEcollection.cxx:322
 AliHFEcollection.cxx:323
 AliHFEcollection.cxx:324
 AliHFEcollection.cxx:325
 AliHFEcollection.cxx:326
 AliHFEcollection.cxx:327
 AliHFEcollection.cxx:328
 AliHFEcollection.cxx:329
 AliHFEcollection.cxx:330
 AliHFEcollection.cxx:331
 AliHFEcollection.cxx:332
 AliHFEcollection.cxx:333
 AliHFEcollection.cxx:334
 AliHFEcollection.cxx:335
 AliHFEcollection.cxx:336
 AliHFEcollection.cxx:337
 AliHFEcollection.cxx:338
 AliHFEcollection.cxx:339
 AliHFEcollection.cxx:340
 AliHFEcollection.cxx:341
 AliHFEcollection.cxx:342
 AliHFEcollection.cxx:343
 AliHFEcollection.cxx:344
 AliHFEcollection.cxx:345
 AliHFEcollection.cxx:346
 AliHFEcollection.cxx:347
 AliHFEcollection.cxx:348
 AliHFEcollection.cxx:349
 AliHFEcollection.cxx:350
 AliHFEcollection.cxx:351
 AliHFEcollection.cxx:352
 AliHFEcollection.cxx:353
 AliHFEcollection.cxx:354
 AliHFEcollection.cxx:355
 AliHFEcollection.cxx:356
 AliHFEcollection.cxx:357
 AliHFEcollection.cxx:358
 AliHFEcollection.cxx:359
 AliHFEcollection.cxx:360
 AliHFEcollection.cxx:361
 AliHFEcollection.cxx:362
 AliHFEcollection.cxx:363
 AliHFEcollection.cxx:364
 AliHFEcollection.cxx:365
 AliHFEcollection.cxx:366
 AliHFEcollection.cxx:367
 AliHFEcollection.cxx:368
 AliHFEcollection.cxx:369
 AliHFEcollection.cxx:370
 AliHFEcollection.cxx:371
 AliHFEcollection.cxx:372
 AliHFEcollection.cxx:373
 AliHFEcollection.cxx:374
 AliHFEcollection.cxx:375
 AliHFEcollection.cxx:376
 AliHFEcollection.cxx:377
 AliHFEcollection.cxx:378
 AliHFEcollection.cxx:379
 AliHFEcollection.cxx:380
 AliHFEcollection.cxx:381
 AliHFEcollection.cxx:382
 AliHFEcollection.cxx:383
 AliHFEcollection.cxx:384
 AliHFEcollection.cxx:385
 AliHFEcollection.cxx:386
 AliHFEcollection.cxx:387
 AliHFEcollection.cxx:388
 AliHFEcollection.cxx:389
 AliHFEcollection.cxx:390
 AliHFEcollection.cxx:391
 AliHFEcollection.cxx:392
 AliHFEcollection.cxx:393
 AliHFEcollection.cxx:394
 AliHFEcollection.cxx:395
 AliHFEcollection.cxx:396
 AliHFEcollection.cxx:397
 AliHFEcollection.cxx:398
 AliHFEcollection.cxx:399
 AliHFEcollection.cxx:400
 AliHFEcollection.cxx:401
 AliHFEcollection.cxx:402
 AliHFEcollection.cxx:403
 AliHFEcollection.cxx:404
 AliHFEcollection.cxx:405
 AliHFEcollection.cxx:406
 AliHFEcollection.cxx:407
 AliHFEcollection.cxx:408
 AliHFEcollection.cxx:409
 AliHFEcollection.cxx:410
 AliHFEcollection.cxx:411
 AliHFEcollection.cxx:412
 AliHFEcollection.cxx:413
 AliHFEcollection.cxx:414
 AliHFEcollection.cxx:415
 AliHFEcollection.cxx:416
 AliHFEcollection.cxx:417
 AliHFEcollection.cxx:418
 AliHFEcollection.cxx:419
 AliHFEcollection.cxx:420
 AliHFEcollection.cxx:421
 AliHFEcollection.cxx:422
 AliHFEcollection.cxx:423
 AliHFEcollection.cxx:424
 AliHFEcollection.cxx:425
 AliHFEcollection.cxx:426
 AliHFEcollection.cxx:427
 AliHFEcollection.cxx:428
 AliHFEcollection.cxx:429
 AliHFEcollection.cxx:430
 AliHFEcollection.cxx:431
 AliHFEcollection.cxx:432
 AliHFEcollection.cxx:433
 AliHFEcollection.cxx:434
 AliHFEcollection.cxx:435
 AliHFEcollection.cxx:436
 AliHFEcollection.cxx:437
 AliHFEcollection.cxx:438
 AliHFEcollection.cxx:439
 AliHFEcollection.cxx:440
 AliHFEcollection.cxx:441
 AliHFEcollection.cxx:442
 AliHFEcollection.cxx:443
 AliHFEcollection.cxx:444
 AliHFEcollection.cxx:445
 AliHFEcollection.cxx:446
 AliHFEcollection.cxx:447
 AliHFEcollection.cxx:448
 AliHFEcollection.cxx:449
 AliHFEcollection.cxx:450
 AliHFEcollection.cxx:451
 AliHFEcollection.cxx:452
 AliHFEcollection.cxx:453
 AliHFEcollection.cxx:454
 AliHFEcollection.cxx:455
 AliHFEcollection.cxx:456
 AliHFEcollection.cxx:457
 AliHFEcollection.cxx:458
 AliHFEcollection.cxx:459
 AliHFEcollection.cxx:460
 AliHFEcollection.cxx:461
 AliHFEcollection.cxx:462
 AliHFEcollection.cxx:463
 AliHFEcollection.cxx:464
 AliHFEcollection.cxx:465
 AliHFEcollection.cxx:466
 AliHFEcollection.cxx:467
 AliHFEcollection.cxx:468
 AliHFEcollection.cxx:469
 AliHFEcollection.cxx:470
 AliHFEcollection.cxx:471
 AliHFEcollection.cxx:472
 AliHFEcollection.cxx:473
 AliHFEcollection.cxx:474
 AliHFEcollection.cxx:475
 AliHFEcollection.cxx:476
 AliHFEcollection.cxx:477
 AliHFEcollection.cxx:478
 AliHFEcollection.cxx:479
 AliHFEcollection.cxx:480
 AliHFEcollection.cxx:481
 AliHFEcollection.cxx:482
 AliHFEcollection.cxx:483
 AliHFEcollection.cxx:484
 AliHFEcollection.cxx:485
 AliHFEcollection.cxx:486
 AliHFEcollection.cxx:487
 AliHFEcollection.cxx:488
 AliHFEcollection.cxx:489
 AliHFEcollection.cxx:490
 AliHFEcollection.cxx:491
 AliHFEcollection.cxx:492
 AliHFEcollection.cxx:493
 AliHFEcollection.cxx:494
 AliHFEcollection.cxx:495
 AliHFEcollection.cxx:496
 AliHFEcollection.cxx:497
 AliHFEcollection.cxx:498
 AliHFEcollection.cxx:499
 AliHFEcollection.cxx:500
 AliHFEcollection.cxx:501
 AliHFEcollection.cxx:502
 AliHFEcollection.cxx:503
 AliHFEcollection.cxx:504
 AliHFEcollection.cxx:505
 AliHFEcollection.cxx:506
 AliHFEcollection.cxx:507
 AliHFEcollection.cxx:508
 AliHFEcollection.cxx:509
 AliHFEcollection.cxx:510
 AliHFEcollection.cxx:511
 AliHFEcollection.cxx:512
 AliHFEcollection.cxx:513
 AliHFEcollection.cxx:514
 AliHFEcollection.cxx:515
 AliHFEcollection.cxx:516
 AliHFEcollection.cxx:517
 AliHFEcollection.cxx:518
 AliHFEcollection.cxx:519
 AliHFEcollection.cxx:520
 AliHFEcollection.cxx:521
 AliHFEcollection.cxx:522
 AliHFEcollection.cxx:523
 AliHFEcollection.cxx:524
 AliHFEcollection.cxx:525
 AliHFEcollection.cxx:526
 AliHFEcollection.cxx:527
 AliHFEcollection.cxx:528
 AliHFEcollection.cxx:529
 AliHFEcollection.cxx:530
 AliHFEcollection.cxx:531
 AliHFEcollection.cxx:532
 AliHFEcollection.cxx:533
 AliHFEcollection.cxx:534
 AliHFEcollection.cxx:535
 AliHFEcollection.cxx:536
 AliHFEcollection.cxx:537
 AliHFEcollection.cxx:538
 AliHFEcollection.cxx:539
 AliHFEcollection.cxx:540
 AliHFEcollection.cxx:541
 AliHFEcollection.cxx:542
 AliHFEcollection.cxx:543
 AliHFEcollection.cxx:544
 AliHFEcollection.cxx:545
 AliHFEcollection.cxx:546
 AliHFEcollection.cxx:547
 AliHFEcollection.cxx:548
 AliHFEcollection.cxx:549
 AliHFEcollection.cxx:550
 AliHFEcollection.cxx:551
 AliHFEcollection.cxx:552
 AliHFEcollection.cxx:553
 AliHFEcollection.cxx:554
 AliHFEcollection.cxx:555
 AliHFEcollection.cxx:556
 AliHFEcollection.cxx:557
 AliHFEcollection.cxx:558
 AliHFEcollection.cxx:559
 AliHFEcollection.cxx:560
 AliHFEcollection.cxx:561
 AliHFEcollection.cxx:562
 AliHFEcollection.cxx:563
 AliHFEcollection.cxx:564
 AliHFEcollection.cxx:565
 AliHFEcollection.cxx:566
 AliHFEcollection.cxx:567
 AliHFEcollection.cxx:568
 AliHFEcollection.cxx:569
 AliHFEcollection.cxx:570
 AliHFEcollection.cxx:571
 AliHFEcollection.cxx:572
 AliHFEcollection.cxx:573
 AliHFEcollection.cxx:574
 AliHFEcollection.cxx:575
 AliHFEcollection.cxx:576
 AliHFEcollection.cxx:577
 AliHFEcollection.cxx:578
 AliHFEcollection.cxx:579
 AliHFEcollection.cxx:580
 AliHFEcollection.cxx:581
 AliHFEcollection.cxx:582
 AliHFEcollection.cxx:583
 AliHFEcollection.cxx:584
 AliHFEcollection.cxx:585
 AliHFEcollection.cxx:586
 AliHFEcollection.cxx:587
 AliHFEcollection.cxx:588
 AliHFEcollection.cxx:589
 AliHFEcollection.cxx:590
 AliHFEcollection.cxx:591
 AliHFEcollection.cxx:592
 AliHFEcollection.cxx:593
 AliHFEcollection.cxx:594
 AliHFEcollection.cxx:595
 AliHFEcollection.cxx:596
 AliHFEcollection.cxx:597
 AliHFEcollection.cxx:598
 AliHFEcollection.cxx:599
 AliHFEcollection.cxx:600
 AliHFEcollection.cxx:601
 AliHFEcollection.cxx:602
 AliHFEcollection.cxx:603
 AliHFEcollection.cxx:604
 AliHFEcollection.cxx:605
 AliHFEcollection.cxx:606
 AliHFEcollection.cxx:607
 AliHFEcollection.cxx:608
 AliHFEcollection.cxx:609
 AliHFEcollection.cxx:610
 AliHFEcollection.cxx:611
 AliHFEcollection.cxx:612
 AliHFEcollection.cxx:613
 AliHFEcollection.cxx:614
 AliHFEcollection.cxx:615
 AliHFEcollection.cxx:616
 AliHFEcollection.cxx:617
 AliHFEcollection.cxx:618
 AliHFEcollection.cxx:619
 AliHFEcollection.cxx:620
 AliHFEcollection.cxx:621
 AliHFEcollection.cxx:622
 AliHFEcollection.cxx:623
 AliHFEcollection.cxx:624
 AliHFEcollection.cxx:625
 AliHFEcollection.cxx:626
 AliHFEcollection.cxx:627
 AliHFEcollection.cxx:628
 AliHFEcollection.cxx:629
 AliHFEcollection.cxx:630
 AliHFEcollection.cxx:631
 AliHFEcollection.cxx:632
 AliHFEcollection.cxx:633
 AliHFEcollection.cxx:634
 AliHFEcollection.cxx:635
 AliHFEcollection.cxx:636
 AliHFEcollection.cxx:637
 AliHFEcollection.cxx:638
 AliHFEcollection.cxx:639
 AliHFEcollection.cxx:640
 AliHFEcollection.cxx:641
 AliHFEcollection.cxx:642
 AliHFEcollection.cxx:643
 AliHFEcollection.cxx:644
 AliHFEcollection.cxx:645
 AliHFEcollection.cxx:646
 AliHFEcollection.cxx:647
 AliHFEcollection.cxx:648
 AliHFEcollection.cxx:649
 AliHFEcollection.cxx:650
 AliHFEcollection.cxx:651
 AliHFEcollection.cxx:652
 AliHFEcollection.cxx:653
 AliHFEcollection.cxx:654
 AliHFEcollection.cxx:655
 AliHFEcollection.cxx:656
 AliHFEcollection.cxx:657
 AliHFEcollection.cxx:658
 AliHFEcollection.cxx:659
 AliHFEcollection.cxx:660
 AliHFEcollection.cxx:661
 AliHFEcollection.cxx:662
 AliHFEcollection.cxx:663
 AliHFEcollection.cxx:664
 AliHFEcollection.cxx:665
 AliHFEcollection.cxx:666
 AliHFEcollection.cxx:667
 AliHFEcollection.cxx:668
 AliHFEcollection.cxx:669
 AliHFEcollection.cxx:670