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$

///
/// A (fake) "4D" histogram container. 
///
/// For each tuple (keyA,keyB,keyC,keyD) a (hash)list of histogram is associated.
/// Note that keyA, keyB (optional), keyC (optional) and keyD (optional) are strings. 
/// Those strings should not contain "/" themselves.
///
/// More helper functions might be added in the future (e.g. Project, etc...)

#include "AliHistogramCollection.h"

ClassImp(AliHistogramCollection)

#include "AliLog.h"
#include "AliMergeableCollection.h"
#include "Riostream.h"
#include "TError.h"
#include "TH1.h"
#include "TH2.h"
#include "THashList.h"
#include "TKey.h"
#include "TMap.h"
#include "TObjArray.h"
#include "TObjString.h"
#include "TProfile.h"
#include "TRegexp.h"
#include "TROOT.h"
#include "TSystem.h"

using std::cout;
using std::endl;
ClassImp(AliHistogramCollection)

//_____________________________________________________________________________
AliHistogramCollection::AliHistogramCollection(const char* name, const char* title) 
: TNamed(name,title), fMap(0x0), fMustShowEmptyHistogram(kFALSE), fMapVersion(0), fMessages()
{
  /// Ctor
}

//_____________________________________________________________________________
AliHistogramCollection::~AliHistogramCollection()
{
  /// dtor. Note that the map is owner
  if ( fMap ) fMap->DeleteAll();
  delete fMap;
}

//_____________________________________________________________________________
Bool_t 
AliHistogramCollection::Adopt(TH1* histo)
{
  /// Adopt a given histogram at top level (i.e. no key)
  return InternalAdopt("",histo);
}

//_____________________________________________________________________________
Bool_t 
AliHistogramCollection::Adopt(const char* key, TH1* histo)
{
  /// Adopt a given histogram, and associate it with pair (keyA)
  return InternalAdopt(Form("/%s/",key),histo);
}

//_____________________________________________________________________________
Bool_t 
AliHistogramCollection::Adopt(const char* keyA, const char* keyB, TH1* histo)
{
  /// Adopt a given histogram, and associate it with pair (keyA,keyB)
  return InternalAdopt(Form("/%s/%s/",keyA,keyB),histo);
}

//_____________________________________________________________________________
Bool_t 
AliHistogramCollection::Adopt(const char* keyA, const char* keyB, const char* keyC, TH1* histo)
{
  /// Adopt a given histogram, and associate it with pair (keyA,keyB,keyC)
  return InternalAdopt(Form("/%s/%s/%s/",keyA,keyB,keyC),histo);
}

//_____________________________________________________________________________
Bool_t 
AliHistogramCollection::Adopt(const char* keyA, const char* keyB, const char* keyC, const char* keyD, TH1* histo)
{
  /// Adopt a given histogram, and associate it with pair (keyA,keyB,keyC,keyD)
  return InternalAdopt(Form("/%s/%s/%s/%s/",keyA,keyB,keyC,keyD),histo);
}

//_____________________________________________________________________________
void AliHistogramCollection::ClearMessages()
{
  /// clear pending messages
  fMessages.clear();
}

//_____________________________________________________________________________
TIterator*
AliHistogramCollection::CreateIterator(Bool_t direction) const
{
  /// Create an iterator (must be deleted by the client)
  return fMap ? new AliHistogramCollectionIterator(this,direction) : 0x0;
}

//_____________________________________________________________________________
AliHistogramCollection*
AliHistogramCollection::Clone(const char* name) const
{
  /// Clone this collection.
  /// We loose the messages.
  
  AliHistogramCollection* newone = new AliHistogramCollection(name,GetTitle());
  
  newone->fMap = static_cast<TMap*>(fMap->Clone());
  newone->fMustShowEmptyHistogram = fMustShowEmptyHistogram;
  newone->fMapVersion = fMapVersion;  
  
  return newone;
}

//_____________________________________________________________________________
void 
AliHistogramCollection::Delete(Option_t*)
{
  /// Delete all the histograms
  fMap->DeleteAll();
  delete fMap;
  fMap=0x0;
}

//_____________________________________________________________________________
TObject* 
AliHistogramCollection::FindObject(const char* identifier) const
{
  /// Find an object by its full identifier.
  
  return Histo(KeyA(identifier),
               KeyB(identifier),
               KeyC(identifier),
               KeyD(identifier),
               HistoName(identifier));
}

//_____________________________________________________________________________
TObject* 
AliHistogramCollection::FindObject(const TObject *key) const
{
  /// Find an object 
  AliWarning("This method is awfully inefficient. Please improve it or use FindObject(const char*)");
  TIter next(CreateIterator());
  TObject* o;
  while ( ( o=next() ) )
  {
    if ( o->IsEqual(key) ) return o;
  }
  return 0x0;
}

//_____________________________________________________________________________
AliMergeableCollection* AliHistogramCollection::Convert() const
{
  /// Convert this into a mergeable collection so it can receive objects
  /// that are not histograms
  
  AliMergeableCollection* mc = new AliMergeableCollection(GetName(),GetTitle());
  
  TObjArray* ids = SortAllIdentifiers();
  TIter next(ids);
  TObjString* key;
  
  while ( ( key = static_cast<TObjString*>(next()) ) )
  {
    THashList* list = static_cast<THashList*>(fMap->GetValue(key->String().Data()));
    TIter nextHisto(list);
    TH1* histo;
    
    while ( ( histo = static_cast<TH1*>(nextHisto())))
    {
      TH1* h = static_cast<TH1*>(histo->Clone());
      mc->Adopt(key->String().Data(),h);
    }
  }
  
  delete ids;
  
  return mc;
}


//_____________________________________________________________________________
TList*
AliHistogramCollection::CreateListOfKeysA() const
{
  /// Create list of keys at level "A" (/A/B/C/D/histoname)
  /// Must be delete by client
  return CreateListOfKeys(0);
}

//_____________________________________________________________________________
TList*
AliHistogramCollection::CreateListOfKeysB() const
{
  /// Create list of keys at level "B" (/A/B/C/D/histoname)
  /// Must be delete by client
  return CreateListOfKeys(1);
}

//_____________________________________________________________________________
TList*
AliHistogramCollection::CreateListOfKeysC() const
{
  /// Create list of keys at level "C" (/A/B/C/D/histoname)
  /// Must be delete by client
  return CreateListOfKeys(2);
}

//_____________________________________________________________________________
TList*
AliHistogramCollection::CreateListOfKeysD() const
{
  /// Create list of keys at level "D" (/A/B/C/D/histoname)
  /// Must be delete by client
  return CreateListOfKeys(3);
}

//_____________________________________________________________________________
TList* 
AliHistogramCollection::CreateListOfHistogramNames(const char* keyA, const char* keyB, const char* keyC, const char* keyD) const
{
  /// Create list of histogram names for /keyA/keyB/keyC/KeyD
  /// Returned list must be deleted by client
  
  TList* listOfNames = new TList;
  listOfNames->SetOwner(kTRUE);
  
  TIter next(Map());
  TObjString* str;
  
  while ( ( str = static_cast<TObjString*>(next()) ) )
  {
    TString identifier = str->String();
    
    Bool_t copy= ( KeyA(identifier) == keyA &&
                  ( strlen(keyB)==0 || KeyB(identifier)==keyB ) && 
                  ( strlen(keyC)==0 || KeyC(identifier)==keyC ) && 
                  ( strlen(keyD)==0 || KeyD(identifier)==keyD ));
    
    if ( !copy ) continue;
    
    THashList* list = static_cast<THashList*>(Map()->GetValue(identifier.Data()));
    
    TIter nextHisto(list);
    TH1* h;
    
    while ( ( h = static_cast<TH1*>(nextHisto()) ) )
    {
      listOfNames->Add(new TObjString(h->GetName()));
    }    
  }
  
  return listOfNames;
}

//_____________________________________________________________________________
TList*
AliHistogramCollection::CreateListOfKeys(Int_t index) const
{
  /// Create the list of keys at level index
  
  TList* list = new TList;
  list->SetOwner(kTRUE);
  
  TObjArray* ids = SortAllIdentifiers();
  TIter next(ids);
  TObjString* str;
  
  while ( ( str = static_cast<TObjString*>(next()) ) )
  {
    TString oneid = InternalDecode(str->String().Data(),index);
    if (oneid.Length()>0 && !list->Contains(oneid))
    {
      list->Add(new TObjString(oneid));
    }
  }
  
  delete ids;
  return list;
}

//_____________________________________________________________________________
TH1* 
AliHistogramCollection::Histo(const char* keyA, 
                              const char* histoname) const
{
  /// Get histo for (keyA,histoname) triplet
  
  return InternalHisto(Form("/%s/",keyA),histoname);
}

//_____________________________________________________________________________
TH1* 
AliHistogramCollection::Histo(const char* keyA, const char* keyB, 
                              const char* histoname) const
{
  /// Get histo for (keyA,keyB,histoname) triplet

  return InternalHisto(Form("/%s/%s/",keyA,keyB),histoname);
}

//_____________________________________________________________________________
TH1* 
AliHistogramCollection::Histo(const char* keyA, const char* keyB, const char* keyC,
                              const char* histoname) const
{
  /// Get histo for (keyA,keyB,keyC,histoname) quad
  
  return InternalHisto(Form("/%s/%s/%s/",keyA,keyB,keyC),histoname);
}

//_____________________________________________________________________________
TH1* 
AliHistogramCollection::Histo(const char* keyA, const char* keyB, 
                              const char* keyC, const char* keyD,
                              const char* histoname) const
{
  /// Get histo for (keyA,keyB,keyC,histoname) quad
  
  return InternalHisto(Form("/%s/%s/%s/%s/",keyA,keyB,keyC,keyD),histoname);
}

//_____________________________________________________________________________
TString
AliHistogramCollection::HistoName(const char* identifier) const
{
  /// Extract the histogram name from an identifier
  
  return InternalDecode(identifier,-1);  
}

//_____________________________________________________________________________
Bool_t AliHistogramCollection::InternalAdopt(const char* identifier, TH1* histo)
{
  /// Adopt an histogram
  
  if (!histo)
  {
    Error("Adopt","Cannot adopt a null histogram");
    return kFALSE;
  }
  
  THashList* hlist = 0x0;
  
  hlist = static_cast<THashList*>(Map()->GetValue(identifier));
  
  if (!hlist)
  {
    hlist = new THashList;
    hlist->SetOwner(kTRUE);
    Map()->Add(new TObjString(identifier),hlist);
    hlist->SetName(identifier);
  }
  
  TH1* h = static_cast<TH1*>(hlist->FindObject(histo->GetName()));
  
  if (h)
  {
    AliError(Form("Cannot adopt an already existing histogram : %s -> %s",identifier,h->GetName()));
    return kFALSE;
  }
  
  
  histo->SetDirectory(0);  
  
  hlist->AddLast(histo);
  
  return kTRUE;
  
}

//_____________________________________________________________________________
TH1* 
AliHistogramCollection::Histo(const char* sidentifier) const
{
  /// Get histogram keyA/keyB/keyC/keyD/histoname:action
  
  TObjArray* a = TString(sidentifier).Tokenize(":");
  
  TString identifier(static_cast<TObjString*>(a->At(0))->String());
  TString action;
  
  if ( a->GetLast() > 0 ) 
  {
    action = static_cast<TObjString*>(a->At(1))->String();
    action.ToUpper();
  }

  delete a;

  Int_t nslashes = identifier.CountChar('/');

  TH1* h(0x0);
  
  switch (nslashes)
  {
    case 0:
    case 1:
      // no slash : the identifier is just the histogram name
      h = InternalHisto("",identifier);
      break;      
    case 2:
      h = Histo(InternalDecode(identifier,0),
                InternalDecode(identifier,-1));
      break;
    case 3:
      h = Histo(InternalDecode(identifier,0),
                InternalDecode(identifier,1),
                InternalDecode(identifier,-1));
      break;
    case 4:
      h = Histo(InternalDecode(identifier,0),
                InternalDecode(identifier,1),
                InternalDecode(identifier,2),
                InternalDecode(identifier,-1));
      break;
    case 5:
      h = Histo(InternalDecode(identifier,0),
                InternalDecode(identifier,1),
                InternalDecode(identifier,2),
                InternalDecode(identifier,3),
                InternalDecode(identifier,-1));
      break;
    default:
      AliError(Form("Invalid identifier %s",identifier.Data()));
      break;
  }
  
  if (h)
  {
    TH2* h2(0x0);
    
    if ( action == "PX" && ( (h2 = dynamic_cast<TH2*>(h)) ) ) 
    {
      return h2->ProjectionX(NormalizeName(identifier.Data(),action.Data()).Data());
    }
    else if ( action == "PY" && ( (h2 = dynamic_cast<TH2*>(h)) ) ) 
    {
      return h2->ProjectionY(NormalizeName(identifier.Data(),action.Data()).Data());
    }
    else if ( action == "PFX" && ( (h2 = dynamic_cast<TH2*>(h)) ) ) 
    {
      return h2->ProfileX(NormalizeName(identifier.Data(),action.Data()).Data());
    }
    else if ( action == "PFY" && ( (h2 = dynamic_cast<TH2*>(h)) ) ) 
    {
      return h2->ProfileY(NormalizeName(identifier.Data(),action.Data()).Data());
    }
    
  }
  else
  {
    AliDebug(1,Form("histogram %s not found",sidentifier));
  }
  return h;
}

//_____________________________________________________________________________
TString
AliHistogramCollection::InternalDecode(const char* identifier, Int_t index) const
{
  /// Extract the index-th element of the identifier (/keyA/keyB/keyC/keyD/histoname)
  /// keyA is index=0
  /// keyB is index=1
  /// keyC is index=2
  /// keyD is index=3
  /// histo is index=-1 (i.e. last)
  
  if ( strlen(identifier) > 0 && identifier[0] != '/' ) 
  {    
    AliError(Form("identifier %s is malformed (should start with /)",identifier));
    return "";
  }
  
  TObjArray* array = TString(identifier).Tokenize("/");

  if ( array->GetLast()>5 ) 
  {
    AliError(Form("identifier %s is malformed (more than 5 /)",identifier));
    delete array;
    return "";    
  }

  TString value("");
  
  if ( index < 0 ) 
  {
    value = static_cast<TObjString*>(array->Last())->String();    
  }
  else if ( index <= array->GetLast() ) 
  {
    value = static_cast<TObjString*>(array->At(index))->String();
  }
  
  delete array;
  
  return value;
}

//_____________________________________________________________________________
TH1* 
AliHistogramCollection::InternalHisto(const char* identifier,
                                      const char* histoname) const
{
  /// Get histo for (identifier,histoname) 
  
  if (!fMap) 
  {
    return 0x0;
  }
  
  THashList* hlist = static_cast<THashList*>(Map()->GetValue(identifier));
  if (!hlist) 
  {
    TString msg(Form("Did not find hashlist for identifier=%s dir=%s",identifier,gDirectory ? gDirectory->GetName() : "" ));
    fMessages[msg.Data()]++;
    return 0x0;
  }
  
  TH1* h = static_cast<TH1*>(hlist->FindObject(histoname));  
  if (!h)
  {
    TString msg(Form("Did not find histoname=%s in %s",histoname,identifier));
    fMessages[msg.Data()]++;
  }
  return h;
}

//_____________________________________________________________________________
TString
AliHistogramCollection::KeyA(const char* identifier) const
{
  /// Extract the first element of the key pair from an identifier
  
  return InternalDecode(identifier,0);
}

//_____________________________________________________________________________
TString
AliHistogramCollection::KeyB(const char* identifier) const
{
  /// Extract the second element (if present) 
  return InternalDecode(identifier,1);
}

//_____________________________________________________________________________
TString
AliHistogramCollection::KeyC(const char* identifier) const
{
  /// Extract the 3rd element (if present) 
  return InternalDecode(identifier,2);
}

//_____________________________________________________________________________
TString
AliHistogramCollection::KeyD(const char* identifier) const
{
  /// Extract the 4th element (if present) 
  return InternalDecode(identifier,3);
}

//_____________________________________________________________________________
TMap* AliHistogramCollection::Map() const
{
  /// Wrapper to insure proper key formats (i.e. new vs old)
  
  if (!fMap)
  {
    fMap = new TMap;
    fMap->SetOwnerKeyValue(kTRUE,kTRUE);
    fMapVersion = 1;
  }
  else
  {
    if ( fMapVersion < 1 ) 
    {
      AliInfo("Remapping");
      // change the keys
      TIter next(fMap);
      TObjString* str;
      
      while ( ( str = static_cast<TObjString*>(next()) ) )
      {
        if ( str->String().Contains("./") )
        {
          TString newkey(str->String());
          
          newkey.ReplaceAll("./","");
          
          TObject* o = fMap->GetValue(str);
          
          TPair* p = fMap->RemoveEntry(str);
          if (!p)
          {
            AliError("oups oups oups");
            return 0x0;
          }
          
          fMap->Add(new TObjString(newkey.Data()),o);
          
          delete p;
        }
      }
      
      fMapVersion = 1;
    }
  }
  
  return fMap;
}

//_____________________________________________________________________________
Long64_t
AliHistogramCollection::Merge(TCollection* list)
{
  // Merge a list of AliHistogramCollection objects with this
  // Returns the number of merged objects (including this).
  
  if (!list) return 0;
  
  if (list->IsEmpty()) return 1;
  
  TIter next(list);
  TObject* o;
  TList mapList;
  Int_t count(0);
  
  while ( ( o = next() ) )
  {
    AliHistogramCollection* hcol = dynamic_cast<AliHistogramCollection*>(o);
    if (!hcol) {
      AliFatal(Form("object named \"%s\" is a %s instead of an AliHistogramCollection!", o->GetName(), o->ClassName()));
      continue;
    }
    
    ++count;
    
    if ( hcol->fMap ) hcol->Map(); // to insure keys in the new format
    
    TIter nextIdentifier(hcol->fMap);
    TObjString* identifier;

    while ( ( identifier = static_cast<TObjString*>(nextIdentifier()) ) )
    {
      THashList* otherList = static_cast<THashList*>(hcol->fMap->GetValue(identifier->String().Data()));

      TIter nextHisto(otherList);
      TH1* h;
      
      while ( ( h = static_cast<TH1*>(nextHisto()) ) )
      {
        TString newid(Form("%s%s",identifier->String().Data(),h->GetName()));
        
        TH1* thisHisto = Histo(newid.Data());
        
        if (!thisHisto)
        {
          // this is an histogram we don't have yet. Let's add it
          
          Int_t nslashes = TString(newid).CountChar('/');
          
          Bool_t ok(kFALSE);
          
          switch (nslashes)
          {
            case 0:
              ok = Adopt(static_cast<TH1*>(h->Clone()));
              break;
            case 2:
              ok = Adopt(KeyA(identifier->String()),
                        static_cast<TH1*>(h->Clone()));
              break;
            case 3:
              ok = Adopt(KeyA(identifier->String()),
                        KeyB(identifier->String()),
                        static_cast<TH1*>(h->Clone()));
              break;
            case 4:
              ok = Adopt(KeyA(identifier->String()),
                        KeyB(identifier->String()),
                        KeyC(identifier->String()),
                        static_cast<TH1*>(h->Clone()));
              break;
            case 5:
              ok = Adopt(KeyA(identifier->String()),
                        KeyB(identifier->String()),
                        KeyC(identifier->String()),
                        KeyD(identifier->String()),
                        static_cast<TH1*>(h->Clone()));
              break;
            default:
              AliError(Form("Invalid identifier : %s",identifier->String().Data()));
              break;
          }
          
          if (!ok)
          {
            AliError(Form("Adoption of histogram %s failed",h->GetName()));
          }
        }
        else
        {
          // add it...
          if ( HistoSameAxis(h,thisHisto) )
          {
            thisHisto->Add(h);
          }
          else
          {
            TList l;
            l.Add(h);
          
            thisHisto->Merge(&l);
          }
        }
      }
    }
  }
  
  return count+1;
}

//_____________________________________________________________________________
TString AliHistogramCollection::NormalizeName(const char* identifier,const char* action) const
{
  // Replace / by _ to build a root-compliant histo name
  TString name(GetName());
  
  name += "_";
  name += identifier;
  name += "_";
  name += action;
  name.ReplaceAll("/","_");
  name.ReplaceAll("-","_");
  return name;
}

//_____________________________________________________________________________
Int_t 
AliHistogramCollection::NumberOfHistograms() const
{
  /// Get the number of histograms we hold
  TIter next(CreateIterator(this));
  Int_t n(0);
  while ( next() ) ++n;
  return n;
}

//_____________________________________________________________________________
Int_t 
AliHistogramCollection::NumberOfKeys() const
{
  /// Get the number of keys we have
  return fMap ? fMap->GetSize() : 0;
}

//_____________________________________________________________________________
void 
AliHistogramCollection::Print(Option_t* option) const
{
  /// Print all the histograms we hold, in a hopefully visually pleasing
  /// way.
  ///
  /// Option can be used to select given part only, using the schema :
  /// /*/*/*/*/*
  /// Where the stars are wilcards for /keyA/keyB/keyC/KeyD/histoname
  ///
  /// if * is used it is assumed to be a wildcard for histoname
  ///
  /// For other selections the full syntax /*/*/*/*/* must be used.
  /// 
  /// Use "-" as histoname to disable histogram's name output
  
  cout << Form("AliHistogramCollection(%s,%s) : %d keys and %d histos",
               GetName(),GetTitle(),
               NumberOfKeys(), NumberOfHistograms()) << endl;
  
  if (!strlen(option)) return;
  
  TString sreKeyA("*");
  TString sreKeyB("*");
  TString sreKeyC("*");
  TString sreKeyD("*");
  TString sreHistoname("*");
  
  TObjArray* select = TString(option).Tokenize("/");
  Int_t n = select->GetLast();
  
  if (n>=0)
  {
    sreHistoname = static_cast<TObjString*>(select->At(n))->String();
  }
  if (n>=1)
  {
    sreKeyD = static_cast<TObjString*>(select->At(n-1))->String();    
  }
  if (n>=2)
  {
    sreKeyC = static_cast<TObjString*>(select->At(n-2))->String();    
  }
  if (n>=3)
  {
    sreKeyB = static_cast<TObjString*>(select->At(n-3))->String();    
  }
  if (n>=4)
  {
    sreKeyA = static_cast<TObjString*>(select->At(n-3))->String();    
  }
  
  TRegexp reKeyA(sreKeyA,kTRUE);
  TRegexp reKeyB(sreKeyB,kTRUE);
  TRegexp reKeyC(sreKeyC,kTRUE);
  TRegexp reKeyD(sreKeyD,kTRUE);
  TRegexp reHistoname(sreHistoname,kTRUE);

  delete select;
  
  TObjArray* identifiers = SortAllIdentifiers();
    
  TIter nextIdentifier(identifiers);
  
  TObjString* sid(0x0);
  
  while ( ( sid = static_cast<TObjString*>(nextIdentifier()) ) )
  {
    Bool_t identifierPrinted(kFALSE);

    TString identifier(sid->String());
    
    if ( ( InternalDecode(identifier,0).Contains(reKeyA) &&
          InternalDecode(identifier,1).Contains(reKeyB) &&
          InternalDecode(identifier,2).Contains(reKeyC) &&
          InternalDecode(identifier,3).Contains(reKeyD) )
        )
    {
      if ( sreHistoname == "*" ) 
      {
        identifierPrinted = kTRUE;
        cout << identifier.Data() << endl;
      }
      
      THashList * list = static_cast<THashList*>(Map()->GetValue(sid->String().Data()));      
      TObjArray names;
      names.SetOwner(kTRUE);
      TIter nextUnsortedHisto(list);
      TH1* h;
      while ( ( h = static_cast<TH1*>(nextUnsortedHisto()) ) )
      {
        names.Add(new TObjString(h->GetName()));
      }
      names.Sort();
      TIter nextHistoName(&names);
      TObjString* hname;
      while ( ( hname = static_cast<TObjString*>(nextHistoName()) ) )
      {
        TString histoName(hname->String());
        if (histoName.Contains(reHistoname) )
        {
          h = static_cast<TH1*>(list->FindObject(histoName.Data()));
          if ( h->GetEntries()==0 && !fMustShowEmptyHistogram ) continue;
          if (!identifierPrinted)
          {
            cout << identifier.Data() << endl;
            identifierPrinted = kTRUE;
          }
          cout << Form("    %s %s Entries=%d Sum=%g",h->GetName(),h->GetTitle(),Int_t(h->GetEntries()),h->GetSumOfWeights()) << endl;
        }
      }
      if (!identifierPrinted && sreHistoname=="-" )
      { 
        // to handle the case where we used histoname="-" to disable showing the histonames,
        // but we still want to see the matching keys maybe...
        cout << identifier.Data() << endl;
      }
    }
  }
  
  delete identifiers;
}

//_____________________________________________________________________________
void 
AliHistogramCollection::PrintMessages(const char* prefix) const
{
  /// Print pending messages
  
  std::map<std::string,int>::const_iterator it;
  
  for ( it = fMessages.begin(); it != fMessages.end(); ++it ) 
  {
    cout << Form("%s : message %s appeared %5d times",prefix,it->first.c_str(),it->second) << endl;
  }
}


//_____________________________________________________________________________
UInt_t 
AliHistogramCollection::EstimateSize(Bool_t show) const
{
  /// Estimate the memory (in bytes) used by our histograms
  
//  sizeof(TH1) + (nbins+2)*(nbytes_per_bin) +name+title_sizes 
//  if you have errors add (nbins+2)*8 
  
  TMap sizeMap;
  sizeMap.SetOwnerKeyValue(kTRUE,kTRUE);
  
  TIter next(CreateIterator());
  TH1* h;
  UInt_t n(0);
  
  while ( ( h = static_cast<TH1*>(next()) ) )
  {
    Int_t nbins = (h->GetNbinsX()+2);
    
    if (h->GetNbinsY()>1)
    {
      nbins *= (h->GetNbinsY()+2);
    }
    
    if (h->GetNbinsZ()>1)
    {
      nbins *= (h->GetNbinsZ()+2);
    }
      
    Bool_t hasErrors = ( h->GetSumw2N() > 0 );
    
    TString cname(h->ClassName());
    
    Int_t nbytesPerBin(0);
    
    if (cname.Contains(TRegexp("C$")) ) nbytesPerBin = sizeof(Char_t);
    if (cname.Contains(TRegexp("S$")) ) nbytesPerBin = sizeof(Short_t);
    if (cname.Contains(TRegexp("I$")) ) nbytesPerBin = sizeof(Int_t);
    if (cname.Contains(TRegexp("F$")) ) nbytesPerBin = sizeof(Float_t);
    if (cname.Contains(TRegexp("D$")) ) nbytesPerBin = sizeof(Double_t);
        
    if (!nbytesPerBin)
    {
      AliError(Form("Could not get the number of bytes per bin for histo %s of class %s. Thus the size estimate will be wrong !",
                    h->GetName(),h->ClassName()));
      continue;
    }
    
    UInt_t thissize = sizeof(h) + nbins*(nbytesPerBin) + strlen(h->GetName())
    + strlen(h->GetTitle());
    
    TObjString* m = static_cast<TObjString*>(sizeMap.GetValue(h->GetName()));
    
    if (!m)
    {
      m = new TObjString(Form("%u %u",thissize,1));
      sizeMap.Add(new TObjString(h->GetName()),m);
    }
    else
    {
      UInt_t s;
      UInt_t d;
      
      sscanf(m->String().Data(),"%u %u",&s,&d);
      
      s += thissize;
      ++d;
      
      m->String().Form("%u %u",s,d);
    }
    
    if ( hasErrors) thissize += nbins*8;

    n += thissize;
    
  }

  if ( show )
  {
    std::multimap<UInt_t,std::string> sorted;
    
    TIter nextMapSize(&sizeMap);
    TObjString* m;

    UInt_t s;
    UInt_t d;

    while ( ( m = static_cast<TObjString*>(nextMapSize()) ) )
    {

      TObjString* sizeMsg = static_cast<TObjString*>(sizeMap.GetValue(m->String()));
      
      sscanf(sizeMsg->String().Data(),"%u %u",&s,&d);

      sorted.insert(std::pair<UInt_t,std::string>(s,m->String().Data()));
    }
    
    std::multimap<UInt_t,std::string>::const_iterator it;
    
    for ( it = sorted.begin(); it != sorted.end(); ++it )
    {
      TObjString* sizeMsg = static_cast<TObjString*>(sizeMap.GetValue(it->second.c_str()));
      
      sscanf(sizeMsg->String().Data(),"%u %u",&s,&d);

      AliInfo(Form("%40s : size %10u (%7u per object, %6d objects)",
                   it->second.c_str(),s,s/d,d));
                   
    }
  }

  return n;
}

//_____________________________________________________________________________
void AliHistogramCollection::PruneEmptyHistograms()
{
  /// Delete the empty histograms
  TIter next(Map());
  TObjString* key;
  
  TList toBeRemoved;
  toBeRemoved.SetOwner(kTRUE);
  
  while ( ( key = static_cast<TObjString*>(next()) ) )
  {
    TString identifier(key->String());
    THashList* hlist = static_cast<THashList*>(Map()->GetValue(identifier.Data()));
    TIter nextHisto(hlist);
    TH1* h;
    while ( ( h = static_cast<TH1*>(nextHisto())))
    {
      if ( h->GetEntries()==0)
      {
        toBeRemoved.Add(new TObjString(Form("%s%s",identifier.Data(),h->GetName())));
      }
    }
  }
  
  TIter nextTBR(&toBeRemoved);
  while ( ( key = static_cast<TObjString*>(nextTBR()) ) )
  {
    Remove(key);
  }
}

//_____________________________________________________________________________
AliHistogramCollection* 
AliHistogramCollection::Project(const char* keyA, const char* keyB, const char* keyC, const char* keyD) const
{
  /// Create a new collection starting at keyA/keyB/keyC/keyD
  /// Histograms are *copied*
  
  if (!fMap) return 0x0;
  
  AliHistogramCollection* hc = new AliHistogramCollection(Form("%s %s/%s/%s/%s",GetName(),keyA,keyB,keyC,keyD),
                                                          GetTitle());
  
  TIter next(Map());
  TObjString* str;
  
  while ( ( str = static_cast<TObjString*>(next()) ) )
  {
    TString identifier = str->String();
    
    Bool_t copy= ( KeyA(identifier) == keyA &&
                  ( strlen(keyB)==0 || KeyB(identifier)==keyB ) && 
                  ( strlen(keyC)==0 || KeyC(identifier)==keyC ) && 
                  ( strlen(keyD)==0 || KeyD(identifier)==keyD ));

    if ( !copy ) continue;
    
    THashList* list = static_cast<THashList*>(Map()->GetValue(identifier.Data()));
    
    TIter nextHisto(list);
    TH1* h;
    
    while ( ( h = static_cast<TH1*>(nextHisto()) ) )
    {
      TH1* hclone = static_cast<TH1*>(h->Clone());

      TString newkey(identifier.Data());
      
      if ( strlen(keyD) > 0 ) newkey.ReplaceAll(Form("/%s",keyD),"");
      if ( strlen(keyC) > 0 ) newkey.ReplaceAll(Form("/%s",keyC),"");
      if ( strlen(keyB) > 0 ) newkey.ReplaceAll(Form("/%s",keyB),"");
      if ( strlen(keyA) > 0 ) newkey.ReplaceAll(Form("/%s",keyA),"");

      if (newkey=="/") newkey="";
      
      hc->InternalAdopt(newkey.Data(),hclone);
    }    
  }

  return hc;
}

//_____________________________________________________________________________
TObject* 
AliHistogramCollection::Remove(TObject* key)
{
  ///
  /// Remove a given histogram (given its key=full identifier=/keyA/keyB/keyC/keyD/histoname)
  ///
  /// Note that we do *not* remove the /keyA/keyB/keyC/keyD entry even if there's no
  /// more histogram for this triplet.
  ///
  /// Not very efficient. Could be improved ?
  ///
  
  TObjString* str = dynamic_cast<TObjString*>(key);
  
  if (!str)
  {
    AliError(Form("key is not of the expected TObjString type, but of %s",key->ClassName()));
    return 0x0;
  }
  
  TString identifier(str->String());
    
  Int_t nslashes = TString(identifier).CountChar('/');

  TString skey;
  
  switch (nslashes )
  {
    case 2:
      skey = Form("/%s/",
                  KeyA(identifier).Data());
      break;
    case 3:
      skey = Form("/%s/%s/",
                  KeyA(identifier).Data(),
                  KeyB(identifier).Data());
      break;
    case 4:
      skey = Form("/%s/%s/%s/",
                  KeyA(identifier).Data(),
                  KeyB(identifier).Data(),
                  KeyC(identifier).Data());
      break;
    case 5:
      skey = Form("/%s/%s/%s/%s/",
                  KeyA(identifier).Data(),
                  KeyB(identifier).Data(),
                  KeyC(identifier).Data(),
                  KeyD(identifier).Data()
                  );
      break;
    default:
      AliError("Oups");
      break;
  };
  
  THashList* hlist = dynamic_cast<THashList*>(Map()->GetValue(skey.Data()));
  
  if (!hlist)
  {
    AliWarning(Form("Could not get hlist for key=%s",skey.Data()));
    return 0x0;
  }
    
  TH1* h = InternalHisto(skey,HistoName(identifier.Data()));
  if (!h)
  {
    AliError(Form("Could not find histo %s",identifier.Data()));
    return 0x0;
  }
  
  TObject* o = hlist->Remove(h);
  if (!o)
  {
    AliError("Remove failed");
    return 0x0;
  }
  
  return o;
}

//______________________________________________________________________________
Bool_t AliHistogramCollection::HistoSameAxis(TH1 *h0, TH1 *h1) const
{
  // shameless copy from TProofPlayerRemote::HistoSameAxis
  //
  // Return kTRUE is the histograms 'h0' and 'h1' have the same binning and ranges
  // on the axis (i.e. if they can be just Add-ed for merging).
  
  Bool_t rc = kFALSE;
  if (!h0 || !h1) return rc;
  
  TAxis *a0 = 0, *a1 = 0;
  
  // Check X
  a0 = h0->GetXaxis();
  a1 = h1->GetXaxis();
  if (a0->GetNbins() == a1->GetNbins())
    if (TMath::Abs(a0->GetXmax() - a1->GetXmax()) < 1.e-9)
      if (TMath::Abs(a0->GetXmin() - a1->GetXmin()) < 1.e-9) rc = kTRUE;
  
  // Check Y, if needed
  if (h0->GetDimension() > 1) {
    rc = kFALSE;
    a0 = h0->GetYaxis();
    a1 = h1->GetYaxis();
    if (a0->GetNbins() == a1->GetNbins())
      if (TMath::Abs(a0->GetXmax() - a1->GetXmax()) < 1.e-9)
        if (TMath::Abs(a0->GetXmin() - a1->GetXmin()) < 1.e-9) rc = kTRUE;
  }
  
  // Check Z, if needed
  if (h0->GetDimension() > 2) {
    rc = kFALSE;
    a0 = h0->GetZaxis();
    a1 = h1->GetZaxis();
    if (a0->GetNbins() == a1->GetNbins())
      if (TMath::Abs(a0->GetXmax() - a1->GetXmax()) < 1.e-9)
        if (TMath::Abs(a0->GetXmin() - a1->GetXmin()) < 1.e-9) rc = kTRUE;
  }
  
  // Done
  return rc;
}

//_____________________________________________________________________________
TObjArray*
AliHistogramCollection::SortAllIdentifiers() const
{
  /// Sort our internal identifiers. Returned array must be deleted.
  TObjArray* identifiers = new TObjArray;
  identifiers->SetOwner(kFALSE); 
  TIter next(Map());
  TObjString* sid;
  
  while ( ( sid = static_cast<TObjString*>(next()) ) )
  {
    if ( !identifiers->FindObject(sid->String().Data()) )
    {
      identifiers->Add(sid);      
    }
  }
  identifiers->Sort();
  return identifiers;
}


///////////////////////////////////////////////////////////////////////////////
//
// AliHistogramCollectionIterator
//
///////////////////////////////////////////////////////////////////////////////

class AliHistogramCollectionIterator;

//_____________________________________________________________________________
AliHistogramCollectionIterator::AliHistogramCollectionIterator(const AliHistogramCollection* hcol, Bool_t dir)
: fkHistogramCollection(hcol), fMapIterator(0x0), fHashListIterator(0x0), fDirection(dir)
{
  /// Default ctor
}

//_____________________________________________________________________________
AliHistogramCollectionIterator&
AliHistogramCollectionIterator::operator=(const TIterator&)
{
  /// Overriden operator= (imposed by Root's declaration of TIterator ?)
  Fatal("TIterator::operator=","Not implementeable"); // because there's no clone in TIterator :-(
  return *this;
}

//_____________________________________________________________________________
AliHistogramCollectionIterator::~AliHistogramCollectionIterator()
{
  /// dtor
  Reset();
}

//_____________________________________________________________________________
TObject* AliHistogramCollectionIterator::Next()
{
  /// Advance to next object in the collection
  
  if (!fHashListIterator)
  {
    if ( !fMapIterator ) 
    {
      fMapIterator = fkHistogramCollection->Map()->MakeIterator(fDirection);
    }
    TObjString* key = static_cast<TObjString*>(fMapIterator->Next());
    if (!key)
    {
      // we are done
      return 0x0;
    }      
    THashList* list = static_cast<THashList*>(fkHistogramCollection->Map()->GetValue(key->String().Data()));
    if (!list) return 0x0;
    fHashListIterator = list->MakeIterator(fDirection);
  }

  TObject* o = fHashListIterator->Next();
  
  if (!o) 
  {
    delete fHashListIterator;
    fHashListIterator = 0x0;
    return Next();
  }
  
  return o;
}

//_____________________________________________________________________________
void AliHistogramCollectionIterator::Reset()
{
  /// Reset the iterator
  delete fHashListIterator;
  delete fMapIterator;
}
 AliHistogramCollection.cxx:1
 AliHistogramCollection.cxx:2
 AliHistogramCollection.cxx:3
 AliHistogramCollection.cxx:4
 AliHistogramCollection.cxx:5
 AliHistogramCollection.cxx:6
 AliHistogramCollection.cxx:7
 AliHistogramCollection.cxx:8
 AliHistogramCollection.cxx:9
 AliHistogramCollection.cxx:10
 AliHistogramCollection.cxx:11
 AliHistogramCollection.cxx:12
 AliHistogramCollection.cxx:13
 AliHistogramCollection.cxx:14
 AliHistogramCollection.cxx:15
 AliHistogramCollection.cxx:16
 AliHistogramCollection.cxx:17
 AliHistogramCollection.cxx:18
 AliHistogramCollection.cxx:19
 AliHistogramCollection.cxx:20
 AliHistogramCollection.cxx:21
 AliHistogramCollection.cxx:22
 AliHistogramCollection.cxx:23
 AliHistogramCollection.cxx:24
 AliHistogramCollection.cxx:25
 AliHistogramCollection.cxx:26
 AliHistogramCollection.cxx:27
 AliHistogramCollection.cxx:28
 AliHistogramCollection.cxx:29
 AliHistogramCollection.cxx:30
 AliHistogramCollection.cxx:31
 AliHistogramCollection.cxx:32
 AliHistogramCollection.cxx:33
 AliHistogramCollection.cxx:34
 AliHistogramCollection.cxx:35
 AliHistogramCollection.cxx:36
 AliHistogramCollection.cxx:37
 AliHistogramCollection.cxx:38
 AliHistogramCollection.cxx:39
 AliHistogramCollection.cxx:40
 AliHistogramCollection.cxx:41
 AliHistogramCollection.cxx:42
 AliHistogramCollection.cxx:43
 AliHistogramCollection.cxx:44
 AliHistogramCollection.cxx:45
 AliHistogramCollection.cxx:46
 AliHistogramCollection.cxx:47
 AliHistogramCollection.cxx:48
 AliHistogramCollection.cxx:49
 AliHistogramCollection.cxx:50
 AliHistogramCollection.cxx:51
 AliHistogramCollection.cxx:52
 AliHistogramCollection.cxx:53
 AliHistogramCollection.cxx:54
 AliHistogramCollection.cxx:55
 AliHistogramCollection.cxx:56
 AliHistogramCollection.cxx:57
 AliHistogramCollection.cxx:58
 AliHistogramCollection.cxx:59
 AliHistogramCollection.cxx:60
 AliHistogramCollection.cxx:61
 AliHistogramCollection.cxx:62
 AliHistogramCollection.cxx:63
 AliHistogramCollection.cxx:64
 AliHistogramCollection.cxx:65
 AliHistogramCollection.cxx:66
 AliHistogramCollection.cxx:67
 AliHistogramCollection.cxx:68
 AliHistogramCollection.cxx:69
 AliHistogramCollection.cxx:70
 AliHistogramCollection.cxx:71
 AliHistogramCollection.cxx:72
 AliHistogramCollection.cxx:73
 AliHistogramCollection.cxx:74
 AliHistogramCollection.cxx:75
 AliHistogramCollection.cxx:76
 AliHistogramCollection.cxx:77
 AliHistogramCollection.cxx:78
 AliHistogramCollection.cxx:79
 AliHistogramCollection.cxx:80
 AliHistogramCollection.cxx:81
 AliHistogramCollection.cxx:82
 AliHistogramCollection.cxx:83
 AliHistogramCollection.cxx:84
 AliHistogramCollection.cxx:85
 AliHistogramCollection.cxx:86
 AliHistogramCollection.cxx:87
 AliHistogramCollection.cxx:88
 AliHistogramCollection.cxx:89
 AliHistogramCollection.cxx:90
 AliHistogramCollection.cxx:91
 AliHistogramCollection.cxx:92
 AliHistogramCollection.cxx:93
 AliHistogramCollection.cxx:94
 AliHistogramCollection.cxx:95
 AliHistogramCollection.cxx:96
 AliHistogramCollection.cxx:97
 AliHistogramCollection.cxx:98
 AliHistogramCollection.cxx:99
 AliHistogramCollection.cxx:100
 AliHistogramCollection.cxx:101
 AliHistogramCollection.cxx:102
 AliHistogramCollection.cxx:103
 AliHistogramCollection.cxx:104
 AliHistogramCollection.cxx:105
 AliHistogramCollection.cxx:106
 AliHistogramCollection.cxx:107
 AliHistogramCollection.cxx:108
 AliHistogramCollection.cxx:109
 AliHistogramCollection.cxx:110
 AliHistogramCollection.cxx:111
 AliHistogramCollection.cxx:112
 AliHistogramCollection.cxx:113
 AliHistogramCollection.cxx:114
 AliHistogramCollection.cxx:115
 AliHistogramCollection.cxx:116
 AliHistogramCollection.cxx:117
 AliHistogramCollection.cxx:118
 AliHistogramCollection.cxx:119
 AliHistogramCollection.cxx:120
 AliHistogramCollection.cxx:121
 AliHistogramCollection.cxx:122
 AliHistogramCollection.cxx:123
 AliHistogramCollection.cxx:124
 AliHistogramCollection.cxx:125
 AliHistogramCollection.cxx:126
 AliHistogramCollection.cxx:127
 AliHistogramCollection.cxx:128
 AliHistogramCollection.cxx:129
 AliHistogramCollection.cxx:130
 AliHistogramCollection.cxx:131
 AliHistogramCollection.cxx:132
 AliHistogramCollection.cxx:133
 AliHistogramCollection.cxx:134
 AliHistogramCollection.cxx:135
 AliHistogramCollection.cxx:136
 AliHistogramCollection.cxx:137
 AliHistogramCollection.cxx:138
 AliHistogramCollection.cxx:139
 AliHistogramCollection.cxx:140
 AliHistogramCollection.cxx:141
 AliHistogramCollection.cxx:142
 AliHistogramCollection.cxx:143
 AliHistogramCollection.cxx:144
 AliHistogramCollection.cxx:145
 AliHistogramCollection.cxx:146
 AliHistogramCollection.cxx:147
 AliHistogramCollection.cxx:148
 AliHistogramCollection.cxx:149
 AliHistogramCollection.cxx:150
 AliHistogramCollection.cxx:151
 AliHistogramCollection.cxx:152
 AliHistogramCollection.cxx:153
 AliHistogramCollection.cxx:154
 AliHistogramCollection.cxx:155
 AliHistogramCollection.cxx:156
 AliHistogramCollection.cxx:157
 AliHistogramCollection.cxx:158
 AliHistogramCollection.cxx:159
 AliHistogramCollection.cxx:160
 AliHistogramCollection.cxx:161
 AliHistogramCollection.cxx:162
 AliHistogramCollection.cxx:163
 AliHistogramCollection.cxx:164
 AliHistogramCollection.cxx:165
 AliHistogramCollection.cxx:166
 AliHistogramCollection.cxx:167
 AliHistogramCollection.cxx:168
 AliHistogramCollection.cxx:169
 AliHistogramCollection.cxx:170
 AliHistogramCollection.cxx:171
 AliHistogramCollection.cxx:172
 AliHistogramCollection.cxx:173
 AliHistogramCollection.cxx:174
 AliHistogramCollection.cxx:175
 AliHistogramCollection.cxx:176
 AliHistogramCollection.cxx:177
 AliHistogramCollection.cxx:178
 AliHistogramCollection.cxx:179
 AliHistogramCollection.cxx:180
 AliHistogramCollection.cxx:181
 AliHistogramCollection.cxx:182
 AliHistogramCollection.cxx:183
 AliHistogramCollection.cxx:184
 AliHistogramCollection.cxx:185
 AliHistogramCollection.cxx:186
 AliHistogramCollection.cxx:187
 AliHistogramCollection.cxx:188
 AliHistogramCollection.cxx:189
 AliHistogramCollection.cxx:190
 AliHistogramCollection.cxx:191
 AliHistogramCollection.cxx:192
 AliHistogramCollection.cxx:193
 AliHistogramCollection.cxx:194
 AliHistogramCollection.cxx:195
 AliHistogramCollection.cxx:196
 AliHistogramCollection.cxx:197
 AliHistogramCollection.cxx:198
 AliHistogramCollection.cxx:199
 AliHistogramCollection.cxx:200
 AliHistogramCollection.cxx:201
 AliHistogramCollection.cxx:202
 AliHistogramCollection.cxx:203
 AliHistogramCollection.cxx:204
 AliHistogramCollection.cxx:205
 AliHistogramCollection.cxx:206
 AliHistogramCollection.cxx:207
 AliHistogramCollection.cxx:208
 AliHistogramCollection.cxx:209
 AliHistogramCollection.cxx:210
 AliHistogramCollection.cxx:211
 AliHistogramCollection.cxx:212
 AliHistogramCollection.cxx:213
 AliHistogramCollection.cxx:214
 AliHistogramCollection.cxx:215
 AliHistogramCollection.cxx:216
 AliHistogramCollection.cxx:217
 AliHistogramCollection.cxx:218
 AliHistogramCollection.cxx:219
 AliHistogramCollection.cxx:220
 AliHistogramCollection.cxx:221
 AliHistogramCollection.cxx:222
 AliHistogramCollection.cxx:223
 AliHistogramCollection.cxx:224
 AliHistogramCollection.cxx:225
 AliHistogramCollection.cxx:226
 AliHistogramCollection.cxx:227
 AliHistogramCollection.cxx:228
 AliHistogramCollection.cxx:229
 AliHistogramCollection.cxx:230
 AliHistogramCollection.cxx:231
 AliHistogramCollection.cxx:232
 AliHistogramCollection.cxx:233
 AliHistogramCollection.cxx:234
 AliHistogramCollection.cxx:235
 AliHistogramCollection.cxx:236
 AliHistogramCollection.cxx:237
 AliHistogramCollection.cxx:238
 AliHistogramCollection.cxx:239
 AliHistogramCollection.cxx:240
 AliHistogramCollection.cxx:241
 AliHistogramCollection.cxx:242
 AliHistogramCollection.cxx:243
 AliHistogramCollection.cxx:244
 AliHistogramCollection.cxx:245
 AliHistogramCollection.cxx:246
 AliHistogramCollection.cxx:247
 AliHistogramCollection.cxx:248
 AliHistogramCollection.cxx:249
 AliHistogramCollection.cxx:250
 AliHistogramCollection.cxx:251
 AliHistogramCollection.cxx:252
 AliHistogramCollection.cxx:253
 AliHistogramCollection.cxx:254
 AliHistogramCollection.cxx:255
 AliHistogramCollection.cxx:256
 AliHistogramCollection.cxx:257
 AliHistogramCollection.cxx:258
 AliHistogramCollection.cxx:259
 AliHistogramCollection.cxx:260
 AliHistogramCollection.cxx:261
 AliHistogramCollection.cxx:262
 AliHistogramCollection.cxx:263
 AliHistogramCollection.cxx:264
 AliHistogramCollection.cxx:265
 AliHistogramCollection.cxx:266
 AliHistogramCollection.cxx:267
 AliHistogramCollection.cxx:268
 AliHistogramCollection.cxx:269
 AliHistogramCollection.cxx:270
 AliHistogramCollection.cxx:271
 AliHistogramCollection.cxx:272
 AliHistogramCollection.cxx:273
 AliHistogramCollection.cxx:274
 AliHistogramCollection.cxx:275
 AliHistogramCollection.cxx:276
 AliHistogramCollection.cxx:277
 AliHistogramCollection.cxx:278
 AliHistogramCollection.cxx:279
 AliHistogramCollection.cxx:280
 AliHistogramCollection.cxx:281
 AliHistogramCollection.cxx:282
 AliHistogramCollection.cxx:283
 AliHistogramCollection.cxx:284
 AliHistogramCollection.cxx:285
 AliHistogramCollection.cxx:286
 AliHistogramCollection.cxx:287
 AliHistogramCollection.cxx:288
 AliHistogramCollection.cxx:289
 AliHistogramCollection.cxx:290
 AliHistogramCollection.cxx:291
 AliHistogramCollection.cxx:292
 AliHistogramCollection.cxx:293
 AliHistogramCollection.cxx:294
 AliHistogramCollection.cxx:295
 AliHistogramCollection.cxx:296
 AliHistogramCollection.cxx:297
 AliHistogramCollection.cxx:298
 AliHistogramCollection.cxx:299
 AliHistogramCollection.cxx:300
 AliHistogramCollection.cxx:301
 AliHistogramCollection.cxx:302
 AliHistogramCollection.cxx:303
 AliHistogramCollection.cxx:304
 AliHistogramCollection.cxx:305
 AliHistogramCollection.cxx:306
 AliHistogramCollection.cxx:307
 AliHistogramCollection.cxx:308
 AliHistogramCollection.cxx:309
 AliHistogramCollection.cxx:310
 AliHistogramCollection.cxx:311
 AliHistogramCollection.cxx:312
 AliHistogramCollection.cxx:313
 AliHistogramCollection.cxx:314
 AliHistogramCollection.cxx:315
 AliHistogramCollection.cxx:316
 AliHistogramCollection.cxx:317
 AliHistogramCollection.cxx:318
 AliHistogramCollection.cxx:319
 AliHistogramCollection.cxx:320
 AliHistogramCollection.cxx:321
 AliHistogramCollection.cxx:322
 AliHistogramCollection.cxx:323
 AliHistogramCollection.cxx:324
 AliHistogramCollection.cxx:325
 AliHistogramCollection.cxx:326
 AliHistogramCollection.cxx:327
 AliHistogramCollection.cxx:328
 AliHistogramCollection.cxx:329
 AliHistogramCollection.cxx:330
 AliHistogramCollection.cxx:331
 AliHistogramCollection.cxx:332
 AliHistogramCollection.cxx:333
 AliHistogramCollection.cxx:334
 AliHistogramCollection.cxx:335
 AliHistogramCollection.cxx:336
 AliHistogramCollection.cxx:337
 AliHistogramCollection.cxx:338
 AliHistogramCollection.cxx:339
 AliHistogramCollection.cxx:340
 AliHistogramCollection.cxx:341
 AliHistogramCollection.cxx:342
 AliHistogramCollection.cxx:343
 AliHistogramCollection.cxx:344
 AliHistogramCollection.cxx:345
 AliHistogramCollection.cxx:346
 AliHistogramCollection.cxx:347
 AliHistogramCollection.cxx:348
 AliHistogramCollection.cxx:349
 AliHistogramCollection.cxx:350
 AliHistogramCollection.cxx:351
 AliHistogramCollection.cxx:352
 AliHistogramCollection.cxx:353
 AliHistogramCollection.cxx:354
 AliHistogramCollection.cxx:355
 AliHistogramCollection.cxx:356
 AliHistogramCollection.cxx:357
 AliHistogramCollection.cxx:358
 AliHistogramCollection.cxx:359
 AliHistogramCollection.cxx:360
 AliHistogramCollection.cxx:361
 AliHistogramCollection.cxx:362
 AliHistogramCollection.cxx:363
 AliHistogramCollection.cxx:364
 AliHistogramCollection.cxx:365
 AliHistogramCollection.cxx:366
 AliHistogramCollection.cxx:367
 AliHistogramCollection.cxx:368
 AliHistogramCollection.cxx:369
 AliHistogramCollection.cxx:370
 AliHistogramCollection.cxx:371
 AliHistogramCollection.cxx:372
 AliHistogramCollection.cxx:373
 AliHistogramCollection.cxx:374
 AliHistogramCollection.cxx:375
 AliHistogramCollection.cxx:376
 AliHistogramCollection.cxx:377
 AliHistogramCollection.cxx:378
 AliHistogramCollection.cxx:379
 AliHistogramCollection.cxx:380
 AliHistogramCollection.cxx:381
 AliHistogramCollection.cxx:382
 AliHistogramCollection.cxx:383
 AliHistogramCollection.cxx:384
 AliHistogramCollection.cxx:385
 AliHistogramCollection.cxx:386
 AliHistogramCollection.cxx:387
 AliHistogramCollection.cxx:388
 AliHistogramCollection.cxx:389
 AliHistogramCollection.cxx:390
 AliHistogramCollection.cxx:391
 AliHistogramCollection.cxx:392
 AliHistogramCollection.cxx:393
 AliHistogramCollection.cxx:394
 AliHistogramCollection.cxx:395
 AliHistogramCollection.cxx:396
 AliHistogramCollection.cxx:397
 AliHistogramCollection.cxx:398
 AliHistogramCollection.cxx:399
 AliHistogramCollection.cxx:400
 AliHistogramCollection.cxx:401
 AliHistogramCollection.cxx:402
 AliHistogramCollection.cxx:403
 AliHistogramCollection.cxx:404
 AliHistogramCollection.cxx:405
 AliHistogramCollection.cxx:406
 AliHistogramCollection.cxx:407
 AliHistogramCollection.cxx:408
 AliHistogramCollection.cxx:409
 AliHistogramCollection.cxx:410
 AliHistogramCollection.cxx:411
 AliHistogramCollection.cxx:412
 AliHistogramCollection.cxx:413
 AliHistogramCollection.cxx:414
 AliHistogramCollection.cxx:415
 AliHistogramCollection.cxx:416
 AliHistogramCollection.cxx:417
 AliHistogramCollection.cxx:418
 AliHistogramCollection.cxx:419
 AliHistogramCollection.cxx:420
 AliHistogramCollection.cxx:421
 AliHistogramCollection.cxx:422
 AliHistogramCollection.cxx:423
 AliHistogramCollection.cxx:424
 AliHistogramCollection.cxx:425
 AliHistogramCollection.cxx:426
 AliHistogramCollection.cxx:427
 AliHistogramCollection.cxx:428
 AliHistogramCollection.cxx:429
 AliHistogramCollection.cxx:430
 AliHistogramCollection.cxx:431
 AliHistogramCollection.cxx:432
 AliHistogramCollection.cxx:433
 AliHistogramCollection.cxx:434
 AliHistogramCollection.cxx:435
 AliHistogramCollection.cxx:436
 AliHistogramCollection.cxx:437
 AliHistogramCollection.cxx:438
 AliHistogramCollection.cxx:439
 AliHistogramCollection.cxx:440
 AliHistogramCollection.cxx:441
 AliHistogramCollection.cxx:442
 AliHistogramCollection.cxx:443
 AliHistogramCollection.cxx:444
 AliHistogramCollection.cxx:445
 AliHistogramCollection.cxx:446
 AliHistogramCollection.cxx:447
 AliHistogramCollection.cxx:448
 AliHistogramCollection.cxx:449
 AliHistogramCollection.cxx:450
 AliHistogramCollection.cxx:451
 AliHistogramCollection.cxx:452
 AliHistogramCollection.cxx:453
 AliHistogramCollection.cxx:454
 AliHistogramCollection.cxx:455
 AliHistogramCollection.cxx:456
 AliHistogramCollection.cxx:457
 AliHistogramCollection.cxx:458
 AliHistogramCollection.cxx:459
 AliHistogramCollection.cxx:460
 AliHistogramCollection.cxx:461
 AliHistogramCollection.cxx:462
 AliHistogramCollection.cxx:463
 AliHistogramCollection.cxx:464
 AliHistogramCollection.cxx:465
 AliHistogramCollection.cxx:466
 AliHistogramCollection.cxx:467
 AliHistogramCollection.cxx:468
 AliHistogramCollection.cxx:469
 AliHistogramCollection.cxx:470
 AliHistogramCollection.cxx:471
 AliHistogramCollection.cxx:472
 AliHistogramCollection.cxx:473
 AliHistogramCollection.cxx:474
 AliHistogramCollection.cxx:475
 AliHistogramCollection.cxx:476
 AliHistogramCollection.cxx:477
 AliHistogramCollection.cxx:478
 AliHistogramCollection.cxx:479
 AliHistogramCollection.cxx:480
 AliHistogramCollection.cxx:481
 AliHistogramCollection.cxx:482
 AliHistogramCollection.cxx:483
 AliHistogramCollection.cxx:484
 AliHistogramCollection.cxx:485
 AliHistogramCollection.cxx:486
 AliHistogramCollection.cxx:487
 AliHistogramCollection.cxx:488
 AliHistogramCollection.cxx:489
 AliHistogramCollection.cxx:490
 AliHistogramCollection.cxx:491
 AliHistogramCollection.cxx:492
 AliHistogramCollection.cxx:493
 AliHistogramCollection.cxx:494
 AliHistogramCollection.cxx:495
 AliHistogramCollection.cxx:496
 AliHistogramCollection.cxx:497
 AliHistogramCollection.cxx:498
 AliHistogramCollection.cxx:499
 AliHistogramCollection.cxx:500
 AliHistogramCollection.cxx:501
 AliHistogramCollection.cxx:502
 AliHistogramCollection.cxx:503
 AliHistogramCollection.cxx:504
 AliHistogramCollection.cxx:505
 AliHistogramCollection.cxx:506
 AliHistogramCollection.cxx:507
 AliHistogramCollection.cxx:508
 AliHistogramCollection.cxx:509
 AliHistogramCollection.cxx:510
 AliHistogramCollection.cxx:511
 AliHistogramCollection.cxx:512
 AliHistogramCollection.cxx:513
 AliHistogramCollection.cxx:514
 AliHistogramCollection.cxx:515
 AliHistogramCollection.cxx:516
 AliHistogramCollection.cxx:517
 AliHistogramCollection.cxx:518
 AliHistogramCollection.cxx:519
 AliHistogramCollection.cxx:520
 AliHistogramCollection.cxx:521
 AliHistogramCollection.cxx:522
 AliHistogramCollection.cxx:523
 AliHistogramCollection.cxx:524
 AliHistogramCollection.cxx:525
 AliHistogramCollection.cxx:526
 AliHistogramCollection.cxx:527
 AliHistogramCollection.cxx:528
 AliHistogramCollection.cxx:529
 AliHistogramCollection.cxx:530
 AliHistogramCollection.cxx:531
 AliHistogramCollection.cxx:532
 AliHistogramCollection.cxx:533
 AliHistogramCollection.cxx:534
 AliHistogramCollection.cxx:535
 AliHistogramCollection.cxx:536
 AliHistogramCollection.cxx:537
 AliHistogramCollection.cxx:538
 AliHistogramCollection.cxx:539
 AliHistogramCollection.cxx:540
 AliHistogramCollection.cxx:541
 AliHistogramCollection.cxx:542
 AliHistogramCollection.cxx:543
 AliHistogramCollection.cxx:544
 AliHistogramCollection.cxx:545
 AliHistogramCollection.cxx:546
 AliHistogramCollection.cxx:547
 AliHistogramCollection.cxx:548
 AliHistogramCollection.cxx:549
 AliHistogramCollection.cxx:550
 AliHistogramCollection.cxx:551
 AliHistogramCollection.cxx:552
 AliHistogramCollection.cxx:553
 AliHistogramCollection.cxx:554
 AliHistogramCollection.cxx:555
 AliHistogramCollection.cxx:556
 AliHistogramCollection.cxx:557
 AliHistogramCollection.cxx:558
 AliHistogramCollection.cxx:559
 AliHistogramCollection.cxx:560
 AliHistogramCollection.cxx:561
 AliHistogramCollection.cxx:562
 AliHistogramCollection.cxx:563
 AliHistogramCollection.cxx:564
 AliHistogramCollection.cxx:565
 AliHistogramCollection.cxx:566
 AliHistogramCollection.cxx:567
 AliHistogramCollection.cxx:568
 AliHistogramCollection.cxx:569
 AliHistogramCollection.cxx:570
 AliHistogramCollection.cxx:571
 AliHistogramCollection.cxx:572
 AliHistogramCollection.cxx:573
 AliHistogramCollection.cxx:574
 AliHistogramCollection.cxx:575
 AliHistogramCollection.cxx:576
 AliHistogramCollection.cxx:577
 AliHistogramCollection.cxx:578
 AliHistogramCollection.cxx:579
 AliHistogramCollection.cxx:580
 AliHistogramCollection.cxx:581
 AliHistogramCollection.cxx:582
 AliHistogramCollection.cxx:583
 AliHistogramCollection.cxx:584
 AliHistogramCollection.cxx:585
 AliHistogramCollection.cxx:586
 AliHistogramCollection.cxx:587
 AliHistogramCollection.cxx:588
 AliHistogramCollection.cxx:589
 AliHistogramCollection.cxx:590
 AliHistogramCollection.cxx:591
 AliHistogramCollection.cxx:592
 AliHistogramCollection.cxx:593
 AliHistogramCollection.cxx:594
 AliHistogramCollection.cxx:595
 AliHistogramCollection.cxx:596
 AliHistogramCollection.cxx:597
 AliHistogramCollection.cxx:598
 AliHistogramCollection.cxx:599
 AliHistogramCollection.cxx:600
 AliHistogramCollection.cxx:601
 AliHistogramCollection.cxx:602
 AliHistogramCollection.cxx:603
 AliHistogramCollection.cxx:604
 AliHistogramCollection.cxx:605
 AliHistogramCollection.cxx:606
 AliHistogramCollection.cxx:607
 AliHistogramCollection.cxx:608
 AliHistogramCollection.cxx:609
 AliHistogramCollection.cxx:610
 AliHistogramCollection.cxx:611
 AliHistogramCollection.cxx:612
 AliHistogramCollection.cxx:613
 AliHistogramCollection.cxx:614
 AliHistogramCollection.cxx:615
 AliHistogramCollection.cxx:616
 AliHistogramCollection.cxx:617
 AliHistogramCollection.cxx:618
 AliHistogramCollection.cxx:619
 AliHistogramCollection.cxx:620
 AliHistogramCollection.cxx:621
 AliHistogramCollection.cxx:622
 AliHistogramCollection.cxx:623
 AliHistogramCollection.cxx:624
 AliHistogramCollection.cxx:625
 AliHistogramCollection.cxx:626
 AliHistogramCollection.cxx:627
 AliHistogramCollection.cxx:628
 AliHistogramCollection.cxx:629
 AliHistogramCollection.cxx:630
 AliHistogramCollection.cxx:631
 AliHistogramCollection.cxx:632
 AliHistogramCollection.cxx:633
 AliHistogramCollection.cxx:634
 AliHistogramCollection.cxx:635
 AliHistogramCollection.cxx:636
 AliHistogramCollection.cxx:637
 AliHistogramCollection.cxx:638
 AliHistogramCollection.cxx:639
 AliHistogramCollection.cxx:640
 AliHistogramCollection.cxx:641
 AliHistogramCollection.cxx:642
 AliHistogramCollection.cxx:643
 AliHistogramCollection.cxx:644
 AliHistogramCollection.cxx:645
 AliHistogramCollection.cxx:646
 AliHistogramCollection.cxx:647
 AliHistogramCollection.cxx:648
 AliHistogramCollection.cxx:649
 AliHistogramCollection.cxx:650
 AliHistogramCollection.cxx:651
 AliHistogramCollection.cxx:652
 AliHistogramCollection.cxx:653
 AliHistogramCollection.cxx:654
 AliHistogramCollection.cxx:655
 AliHistogramCollection.cxx:656
 AliHistogramCollection.cxx:657
 AliHistogramCollection.cxx:658
 AliHistogramCollection.cxx:659
 AliHistogramCollection.cxx:660
 AliHistogramCollection.cxx:661
 AliHistogramCollection.cxx:662
 AliHistogramCollection.cxx:663
 AliHistogramCollection.cxx:664
 AliHistogramCollection.cxx:665
 AliHistogramCollection.cxx:666
 AliHistogramCollection.cxx:667
 AliHistogramCollection.cxx:668
 AliHistogramCollection.cxx:669
 AliHistogramCollection.cxx:670
 AliHistogramCollection.cxx:671
 AliHistogramCollection.cxx:672
 AliHistogramCollection.cxx:673
 AliHistogramCollection.cxx:674
 AliHistogramCollection.cxx:675
 AliHistogramCollection.cxx:676
 AliHistogramCollection.cxx:677
 AliHistogramCollection.cxx:678
 AliHistogramCollection.cxx:679
 AliHistogramCollection.cxx:680
 AliHistogramCollection.cxx:681
 AliHistogramCollection.cxx:682
 AliHistogramCollection.cxx:683
 AliHistogramCollection.cxx:684
 AliHistogramCollection.cxx:685
 AliHistogramCollection.cxx:686
 AliHistogramCollection.cxx:687
 AliHistogramCollection.cxx:688
 AliHistogramCollection.cxx:689
 AliHistogramCollection.cxx:690
 AliHistogramCollection.cxx:691
 AliHistogramCollection.cxx:692
 AliHistogramCollection.cxx:693
 AliHistogramCollection.cxx:694
 AliHistogramCollection.cxx:695
 AliHistogramCollection.cxx:696
 AliHistogramCollection.cxx:697
 AliHistogramCollection.cxx:698
 AliHistogramCollection.cxx:699
 AliHistogramCollection.cxx:700
 AliHistogramCollection.cxx:701
 AliHistogramCollection.cxx:702
 AliHistogramCollection.cxx:703
 AliHistogramCollection.cxx:704
 AliHistogramCollection.cxx:705
 AliHistogramCollection.cxx:706
 AliHistogramCollection.cxx:707
 AliHistogramCollection.cxx:708
 AliHistogramCollection.cxx:709
 AliHistogramCollection.cxx:710
 AliHistogramCollection.cxx:711
 AliHistogramCollection.cxx:712
 AliHistogramCollection.cxx:713
 AliHistogramCollection.cxx:714
 AliHistogramCollection.cxx:715
 AliHistogramCollection.cxx:716
 AliHistogramCollection.cxx:717
 AliHistogramCollection.cxx:718
 AliHistogramCollection.cxx:719
 AliHistogramCollection.cxx:720
 AliHistogramCollection.cxx:721
 AliHistogramCollection.cxx:722
 AliHistogramCollection.cxx:723
 AliHistogramCollection.cxx:724
 AliHistogramCollection.cxx:725
 AliHistogramCollection.cxx:726
 AliHistogramCollection.cxx:727
 AliHistogramCollection.cxx:728
 AliHistogramCollection.cxx:729
 AliHistogramCollection.cxx:730
 AliHistogramCollection.cxx:731
 AliHistogramCollection.cxx:732
 AliHistogramCollection.cxx:733
 AliHistogramCollection.cxx:734
 AliHistogramCollection.cxx:735
 AliHistogramCollection.cxx:736
 AliHistogramCollection.cxx:737
 AliHistogramCollection.cxx:738
 AliHistogramCollection.cxx:739
 AliHistogramCollection.cxx:740
 AliHistogramCollection.cxx:741
 AliHistogramCollection.cxx:742
 AliHistogramCollection.cxx:743
 AliHistogramCollection.cxx:744
 AliHistogramCollection.cxx:745
 AliHistogramCollection.cxx:746
 AliHistogramCollection.cxx:747
 AliHistogramCollection.cxx:748
 AliHistogramCollection.cxx:749
 AliHistogramCollection.cxx:750
 AliHistogramCollection.cxx:751
 AliHistogramCollection.cxx:752
 AliHistogramCollection.cxx:753
 AliHistogramCollection.cxx:754
 AliHistogramCollection.cxx:755
 AliHistogramCollection.cxx:756
 AliHistogramCollection.cxx:757
 AliHistogramCollection.cxx:758
 AliHistogramCollection.cxx:759
 AliHistogramCollection.cxx:760
 AliHistogramCollection.cxx:761
 AliHistogramCollection.cxx:762
 AliHistogramCollection.cxx:763
 AliHistogramCollection.cxx:764
 AliHistogramCollection.cxx:765
 AliHistogramCollection.cxx:766
 AliHistogramCollection.cxx:767
 AliHistogramCollection.cxx:768
 AliHistogramCollection.cxx:769
 AliHistogramCollection.cxx:770
 AliHistogramCollection.cxx:771
 AliHistogramCollection.cxx:772
 AliHistogramCollection.cxx:773
 AliHistogramCollection.cxx:774
 AliHistogramCollection.cxx:775
 AliHistogramCollection.cxx:776
 AliHistogramCollection.cxx:777
 AliHistogramCollection.cxx:778
 AliHistogramCollection.cxx:779
 AliHistogramCollection.cxx:780
 AliHistogramCollection.cxx:781
 AliHistogramCollection.cxx:782
 AliHistogramCollection.cxx:783
 AliHistogramCollection.cxx:784
 AliHistogramCollection.cxx:785
 AliHistogramCollection.cxx:786
 AliHistogramCollection.cxx:787
 AliHistogramCollection.cxx:788
 AliHistogramCollection.cxx:789
 AliHistogramCollection.cxx:790
 AliHistogramCollection.cxx:791
 AliHistogramCollection.cxx:792
 AliHistogramCollection.cxx:793
 AliHistogramCollection.cxx:794
 AliHistogramCollection.cxx:795
 AliHistogramCollection.cxx:796
 AliHistogramCollection.cxx:797
 AliHistogramCollection.cxx:798
 AliHistogramCollection.cxx:799
 AliHistogramCollection.cxx:800
 AliHistogramCollection.cxx:801
 AliHistogramCollection.cxx:802
 AliHistogramCollection.cxx:803
 AliHistogramCollection.cxx:804
 AliHistogramCollection.cxx:805
 AliHistogramCollection.cxx:806
 AliHistogramCollection.cxx:807
 AliHistogramCollection.cxx:808
 AliHistogramCollection.cxx:809
 AliHistogramCollection.cxx:810
 AliHistogramCollection.cxx:811
 AliHistogramCollection.cxx:812
 AliHistogramCollection.cxx:813
 AliHistogramCollection.cxx:814
 AliHistogramCollection.cxx:815
 AliHistogramCollection.cxx:816
 AliHistogramCollection.cxx:817
 AliHistogramCollection.cxx:818
 AliHistogramCollection.cxx:819
 AliHistogramCollection.cxx:820
 AliHistogramCollection.cxx:821
 AliHistogramCollection.cxx:822
 AliHistogramCollection.cxx:823
 AliHistogramCollection.cxx:824
 AliHistogramCollection.cxx:825
 AliHistogramCollection.cxx:826
 AliHistogramCollection.cxx:827
 AliHistogramCollection.cxx:828
 AliHistogramCollection.cxx:829
 AliHistogramCollection.cxx:830
 AliHistogramCollection.cxx:831
 AliHistogramCollection.cxx:832
 AliHistogramCollection.cxx:833
 AliHistogramCollection.cxx:834
 AliHistogramCollection.cxx:835
 AliHistogramCollection.cxx:836
 AliHistogramCollection.cxx:837
 AliHistogramCollection.cxx:838
 AliHistogramCollection.cxx:839
 AliHistogramCollection.cxx:840
 AliHistogramCollection.cxx:841
 AliHistogramCollection.cxx:842
 AliHistogramCollection.cxx:843
 AliHistogramCollection.cxx:844
 AliHistogramCollection.cxx:845
 AliHistogramCollection.cxx:846
 AliHistogramCollection.cxx:847
 AliHistogramCollection.cxx:848
 AliHistogramCollection.cxx:849
 AliHistogramCollection.cxx:850
 AliHistogramCollection.cxx:851
 AliHistogramCollection.cxx:852
 AliHistogramCollection.cxx:853
 AliHistogramCollection.cxx:854
 AliHistogramCollection.cxx:855
 AliHistogramCollection.cxx:856
 AliHistogramCollection.cxx:857
 AliHistogramCollection.cxx:858
 AliHistogramCollection.cxx:859
 AliHistogramCollection.cxx:860
 AliHistogramCollection.cxx:861
 AliHistogramCollection.cxx:862
 AliHistogramCollection.cxx:863
 AliHistogramCollection.cxx:864
 AliHistogramCollection.cxx:865
 AliHistogramCollection.cxx:866
 AliHistogramCollection.cxx:867
 AliHistogramCollection.cxx:868
 AliHistogramCollection.cxx:869
 AliHistogramCollection.cxx:870
 AliHistogramCollection.cxx:871
 AliHistogramCollection.cxx:872
 AliHistogramCollection.cxx:873
 AliHistogramCollection.cxx:874
 AliHistogramCollection.cxx:875
 AliHistogramCollection.cxx:876
 AliHistogramCollection.cxx:877
 AliHistogramCollection.cxx:878
 AliHistogramCollection.cxx:879
 AliHistogramCollection.cxx:880
 AliHistogramCollection.cxx:881
 AliHistogramCollection.cxx:882
 AliHistogramCollection.cxx:883
 AliHistogramCollection.cxx:884
 AliHistogramCollection.cxx:885
 AliHistogramCollection.cxx:886
 AliHistogramCollection.cxx:887
 AliHistogramCollection.cxx:888
 AliHistogramCollection.cxx:889
 AliHistogramCollection.cxx:890
 AliHistogramCollection.cxx:891
 AliHistogramCollection.cxx:892
 AliHistogramCollection.cxx:893
 AliHistogramCollection.cxx:894
 AliHistogramCollection.cxx:895
 AliHistogramCollection.cxx:896
 AliHistogramCollection.cxx:897
 AliHistogramCollection.cxx:898
 AliHistogramCollection.cxx:899
 AliHistogramCollection.cxx:900
 AliHistogramCollection.cxx:901
 AliHistogramCollection.cxx:902
 AliHistogramCollection.cxx:903
 AliHistogramCollection.cxx:904
 AliHistogramCollection.cxx:905
 AliHistogramCollection.cxx:906
 AliHistogramCollection.cxx:907
 AliHistogramCollection.cxx:908
 AliHistogramCollection.cxx:909
 AliHistogramCollection.cxx:910
 AliHistogramCollection.cxx:911
 AliHistogramCollection.cxx:912
 AliHistogramCollection.cxx:913
 AliHistogramCollection.cxx:914
 AliHistogramCollection.cxx:915
 AliHistogramCollection.cxx:916
 AliHistogramCollection.cxx:917
 AliHistogramCollection.cxx:918
 AliHistogramCollection.cxx:919
 AliHistogramCollection.cxx:920
 AliHistogramCollection.cxx:921
 AliHistogramCollection.cxx:922
 AliHistogramCollection.cxx:923
 AliHistogramCollection.cxx:924
 AliHistogramCollection.cxx:925
 AliHistogramCollection.cxx:926
 AliHistogramCollection.cxx:927
 AliHistogramCollection.cxx:928
 AliHistogramCollection.cxx:929
 AliHistogramCollection.cxx:930
 AliHistogramCollection.cxx:931
 AliHistogramCollection.cxx:932
 AliHistogramCollection.cxx:933
 AliHistogramCollection.cxx:934
 AliHistogramCollection.cxx:935
 AliHistogramCollection.cxx:936
 AliHistogramCollection.cxx:937
 AliHistogramCollection.cxx:938
 AliHistogramCollection.cxx:939
 AliHistogramCollection.cxx:940
 AliHistogramCollection.cxx:941
 AliHistogramCollection.cxx:942
 AliHistogramCollection.cxx:943
 AliHistogramCollection.cxx:944
 AliHistogramCollection.cxx:945
 AliHistogramCollection.cxx:946
 AliHistogramCollection.cxx:947
 AliHistogramCollection.cxx:948
 AliHistogramCollection.cxx:949
 AliHistogramCollection.cxx:950
 AliHistogramCollection.cxx:951
 AliHistogramCollection.cxx:952
 AliHistogramCollection.cxx:953
 AliHistogramCollection.cxx:954
 AliHistogramCollection.cxx:955
 AliHistogramCollection.cxx:956
 AliHistogramCollection.cxx:957
 AliHistogramCollection.cxx:958
 AliHistogramCollection.cxx:959
 AliHistogramCollection.cxx:960
 AliHistogramCollection.cxx:961
 AliHistogramCollection.cxx:962
 AliHistogramCollection.cxx:963
 AliHistogramCollection.cxx:964
 AliHistogramCollection.cxx:965
 AliHistogramCollection.cxx:966
 AliHistogramCollection.cxx:967
 AliHistogramCollection.cxx:968
 AliHistogramCollection.cxx:969
 AliHistogramCollection.cxx:970
 AliHistogramCollection.cxx:971
 AliHistogramCollection.cxx:972
 AliHistogramCollection.cxx:973
 AliHistogramCollection.cxx:974
 AliHistogramCollection.cxx:975
 AliHistogramCollection.cxx:976
 AliHistogramCollection.cxx:977
 AliHistogramCollection.cxx:978
 AliHistogramCollection.cxx:979
 AliHistogramCollection.cxx:980
 AliHistogramCollection.cxx:981
 AliHistogramCollection.cxx:982
 AliHistogramCollection.cxx:983
 AliHistogramCollection.cxx:984
 AliHistogramCollection.cxx:985
 AliHistogramCollection.cxx:986
 AliHistogramCollection.cxx:987
 AliHistogramCollection.cxx:988
 AliHistogramCollection.cxx:989
 AliHistogramCollection.cxx:990
 AliHistogramCollection.cxx:991
 AliHistogramCollection.cxx:992
 AliHistogramCollection.cxx:993
 AliHistogramCollection.cxx:994
 AliHistogramCollection.cxx:995
 AliHistogramCollection.cxx:996
 AliHistogramCollection.cxx:997
 AliHistogramCollection.cxx:998
 AliHistogramCollection.cxx:999
 AliHistogramCollection.cxx:1000
 AliHistogramCollection.cxx:1001
 AliHistogramCollection.cxx:1002
 AliHistogramCollection.cxx:1003
 AliHistogramCollection.cxx:1004
 AliHistogramCollection.cxx:1005
 AliHistogramCollection.cxx:1006
 AliHistogramCollection.cxx:1007
 AliHistogramCollection.cxx:1008
 AliHistogramCollection.cxx:1009
 AliHistogramCollection.cxx:1010
 AliHistogramCollection.cxx:1011
 AliHistogramCollection.cxx:1012
 AliHistogramCollection.cxx:1013
 AliHistogramCollection.cxx:1014
 AliHistogramCollection.cxx:1015
 AliHistogramCollection.cxx:1016
 AliHistogramCollection.cxx:1017
 AliHistogramCollection.cxx:1018
 AliHistogramCollection.cxx:1019
 AliHistogramCollection.cxx:1020
 AliHistogramCollection.cxx:1021
 AliHistogramCollection.cxx:1022
 AliHistogramCollection.cxx:1023
 AliHistogramCollection.cxx:1024
 AliHistogramCollection.cxx:1025
 AliHistogramCollection.cxx:1026
 AliHistogramCollection.cxx:1027
 AliHistogramCollection.cxx:1028
 AliHistogramCollection.cxx:1029
 AliHistogramCollection.cxx:1030
 AliHistogramCollection.cxx:1031
 AliHistogramCollection.cxx:1032
 AliHistogramCollection.cxx:1033
 AliHistogramCollection.cxx:1034
 AliHistogramCollection.cxx:1035
 AliHistogramCollection.cxx:1036
 AliHistogramCollection.cxx:1037
 AliHistogramCollection.cxx:1038
 AliHistogramCollection.cxx:1039
 AliHistogramCollection.cxx:1040
 AliHistogramCollection.cxx:1041
 AliHistogramCollection.cxx:1042
 AliHistogramCollection.cxx:1043
 AliHistogramCollection.cxx:1044
 AliHistogramCollection.cxx:1045
 AliHistogramCollection.cxx:1046
 AliHistogramCollection.cxx:1047
 AliHistogramCollection.cxx:1048
 AliHistogramCollection.cxx:1049
 AliHistogramCollection.cxx:1050
 AliHistogramCollection.cxx:1051
 AliHistogramCollection.cxx:1052
 AliHistogramCollection.cxx:1053
 AliHistogramCollection.cxx:1054
 AliHistogramCollection.cxx:1055
 AliHistogramCollection.cxx:1056
 AliHistogramCollection.cxx:1057
 AliHistogramCollection.cxx:1058
 AliHistogramCollection.cxx:1059
 AliHistogramCollection.cxx:1060
 AliHistogramCollection.cxx:1061
 AliHistogramCollection.cxx:1062
 AliHistogramCollection.cxx:1063
 AliHistogramCollection.cxx:1064
 AliHistogramCollection.cxx:1065
 AliHistogramCollection.cxx:1066
 AliHistogramCollection.cxx:1067
 AliHistogramCollection.cxx:1068
 AliHistogramCollection.cxx:1069
 AliHistogramCollection.cxx:1070
 AliHistogramCollection.cxx:1071
 AliHistogramCollection.cxx:1072
 AliHistogramCollection.cxx:1073
 AliHistogramCollection.cxx:1074
 AliHistogramCollection.cxx:1075
 AliHistogramCollection.cxx:1076
 AliHistogramCollection.cxx:1077
 AliHistogramCollection.cxx:1078
 AliHistogramCollection.cxx:1079
 AliHistogramCollection.cxx:1080
 AliHistogramCollection.cxx:1081
 AliHistogramCollection.cxx:1082
 AliHistogramCollection.cxx:1083
 AliHistogramCollection.cxx:1084
 AliHistogramCollection.cxx:1085
 AliHistogramCollection.cxx:1086
 AliHistogramCollection.cxx:1087
 AliHistogramCollection.cxx:1088
 AliHistogramCollection.cxx:1089
 AliHistogramCollection.cxx:1090
 AliHistogramCollection.cxx:1091
 AliHistogramCollection.cxx:1092
 AliHistogramCollection.cxx:1093
 AliHistogramCollection.cxx:1094
 AliHistogramCollection.cxx:1095
 AliHistogramCollection.cxx:1096
 AliHistogramCollection.cxx:1097
 AliHistogramCollection.cxx:1098
 AliHistogramCollection.cxx:1099
 AliHistogramCollection.cxx:1100
 AliHistogramCollection.cxx:1101
 AliHistogramCollection.cxx:1102
 AliHistogramCollection.cxx:1103
 AliHistogramCollection.cxx:1104
 AliHistogramCollection.cxx:1105
 AliHistogramCollection.cxx:1106
 AliHistogramCollection.cxx:1107
 AliHistogramCollection.cxx:1108
 AliHistogramCollection.cxx:1109
 AliHistogramCollection.cxx:1110
 AliHistogramCollection.cxx:1111
 AliHistogramCollection.cxx:1112
 AliHistogramCollection.cxx:1113
 AliHistogramCollection.cxx:1114
 AliHistogramCollection.cxx:1115
 AliHistogramCollection.cxx:1116
 AliHistogramCollection.cxx:1117
 AliHistogramCollection.cxx:1118
 AliHistogramCollection.cxx:1119
 AliHistogramCollection.cxx:1120
 AliHistogramCollection.cxx:1121
 AliHistogramCollection.cxx:1122
 AliHistogramCollection.cxx:1123
 AliHistogramCollection.cxx:1124
 AliHistogramCollection.cxx:1125
 AliHistogramCollection.cxx:1126
 AliHistogramCollection.cxx:1127
 AliHistogramCollection.cxx:1128
 AliHistogramCollection.cxx:1129
 AliHistogramCollection.cxx:1130
 AliHistogramCollection.cxx:1131
 AliHistogramCollection.cxx:1132
 AliHistogramCollection.cxx:1133
 AliHistogramCollection.cxx:1134
 AliHistogramCollection.cxx:1135
 AliHistogramCollection.cxx:1136
 AliHistogramCollection.cxx:1137
 AliHistogramCollection.cxx:1138
 AliHistogramCollection.cxx:1139
 AliHistogramCollection.cxx:1140
 AliHistogramCollection.cxx:1141
 AliHistogramCollection.cxx:1142
 AliHistogramCollection.cxx:1143
 AliHistogramCollection.cxx:1144
 AliHistogramCollection.cxx:1145
 AliHistogramCollection.cxx:1146
 AliHistogramCollection.cxx:1147
 AliHistogramCollection.cxx:1148
 AliHistogramCollection.cxx:1149
 AliHistogramCollection.cxx:1150
 AliHistogramCollection.cxx:1151
 AliHistogramCollection.cxx:1152
 AliHistogramCollection.cxx:1153
 AliHistogramCollection.cxx:1154
 AliHistogramCollection.cxx:1155
 AliHistogramCollection.cxx:1156
 AliHistogramCollection.cxx:1157
 AliHistogramCollection.cxx:1158
 AliHistogramCollection.cxx:1159
 AliHistogramCollection.cxx:1160
 AliHistogramCollection.cxx:1161
 AliHistogramCollection.cxx:1162
 AliHistogramCollection.cxx:1163
 AliHistogramCollection.cxx:1164
 AliHistogramCollection.cxx:1165
 AliHistogramCollection.cxx:1166
 AliHistogramCollection.cxx:1167
 AliHistogramCollection.cxx:1168
 AliHistogramCollection.cxx:1169
 AliHistogramCollection.cxx:1170
 AliHistogramCollection.cxx:1171
 AliHistogramCollection.cxx:1172
 AliHistogramCollection.cxx:1173
 AliHistogramCollection.cxx:1174
 AliHistogramCollection.cxx:1175
 AliHistogramCollection.cxx:1176
 AliHistogramCollection.cxx:1177
 AliHistogramCollection.cxx:1178
 AliHistogramCollection.cxx:1179
 AliHistogramCollection.cxx:1180
 AliHistogramCollection.cxx:1181
 AliHistogramCollection.cxx:1182
 AliHistogramCollection.cxx:1183
 AliHistogramCollection.cxx:1184
 AliHistogramCollection.cxx:1185
 AliHistogramCollection.cxx:1186
 AliHistogramCollection.cxx:1187
 AliHistogramCollection.cxx:1188
 AliHistogramCollection.cxx:1189
 AliHistogramCollection.cxx:1190
 AliHistogramCollection.cxx:1191
 AliHistogramCollection.cxx:1192
 AliHistogramCollection.cxx:1193
 AliHistogramCollection.cxx:1194
 AliHistogramCollection.cxx:1195
 AliHistogramCollection.cxx:1196
 AliHistogramCollection.cxx:1197
 AliHistogramCollection.cxx:1198
 AliHistogramCollection.cxx:1199
 AliHistogramCollection.cxx:1200
 AliHistogramCollection.cxx:1201
 AliHistogramCollection.cxx:1202
 AliHistogramCollection.cxx:1203
 AliHistogramCollection.cxx:1204
 AliHistogramCollection.cxx:1205
 AliHistogramCollection.cxx:1206
 AliHistogramCollection.cxx:1207
 AliHistogramCollection.cxx:1208
 AliHistogramCollection.cxx:1209
 AliHistogramCollection.cxx:1210
 AliHistogramCollection.cxx:1211
 AliHistogramCollection.cxx:1212
 AliHistogramCollection.cxx:1213
 AliHistogramCollection.cxx:1214
 AliHistogramCollection.cxx:1215
 AliHistogramCollection.cxx:1216
 AliHistogramCollection.cxx:1217
 AliHistogramCollection.cxx:1218
 AliHistogramCollection.cxx:1219
 AliHistogramCollection.cxx:1220
 AliHistogramCollection.cxx:1221
 AliHistogramCollection.cxx:1222
 AliHistogramCollection.cxx:1223
 AliHistogramCollection.cxx:1224
 AliHistogramCollection.cxx:1225
 AliHistogramCollection.cxx:1226
 AliHistogramCollection.cxx:1227
 AliHistogramCollection.cxx:1228
 AliHistogramCollection.cxx:1229
 AliHistogramCollection.cxx:1230
 AliHistogramCollection.cxx:1231
 AliHistogramCollection.cxx:1232
 AliHistogramCollection.cxx:1233
 AliHistogramCollection.cxx:1234
 AliHistogramCollection.cxx:1235
 AliHistogramCollection.cxx:1236
 AliHistogramCollection.cxx:1237
 AliHistogramCollection.cxx:1238
 AliHistogramCollection.cxx:1239
 AliHistogramCollection.cxx:1240
 AliHistogramCollection.cxx:1241
 AliHistogramCollection.cxx:1242
 AliHistogramCollection.cxx:1243
 AliHistogramCollection.cxx:1244
 AliHistogramCollection.cxx:1245
 AliHistogramCollection.cxx:1246
 AliHistogramCollection.cxx:1247
 AliHistogramCollection.cxx:1248
 AliHistogramCollection.cxx:1249
 AliHistogramCollection.cxx:1250
 AliHistogramCollection.cxx:1251
 AliHistogramCollection.cxx:1252
 AliHistogramCollection.cxx:1253
 AliHistogramCollection.cxx:1254
 AliHistogramCollection.cxx:1255
 AliHistogramCollection.cxx:1256
 AliHistogramCollection.cxx:1257
 AliHistogramCollection.cxx:1258
 AliHistogramCollection.cxx:1259
 AliHistogramCollection.cxx:1260
 AliHistogramCollection.cxx:1261
 AliHistogramCollection.cxx:1262
 AliHistogramCollection.cxx:1263
 AliHistogramCollection.cxx:1264
 AliHistogramCollection.cxx:1265
 AliHistogramCollection.cxx:1266
 AliHistogramCollection.cxx:1267
 AliHistogramCollection.cxx:1268
 AliHistogramCollection.cxx:1269
 AliHistogramCollection.cxx:1270
 AliHistogramCollection.cxx:1271
 AliHistogramCollection.cxx:1272
 AliHistogramCollection.cxx:1273
 AliHistogramCollection.cxx:1274
 AliHistogramCollection.cxx:1275
 AliHistogramCollection.cxx:1276
 AliHistogramCollection.cxx:1277
 AliHistogramCollection.cxx:1278
 AliHistogramCollection.cxx:1279
 AliHistogramCollection.cxx:1280
 AliHistogramCollection.cxx:1281
 AliHistogramCollection.cxx:1282
 AliHistogramCollection.cxx:1283
 AliHistogramCollection.cxx:1284
 AliHistogramCollection.cxx:1285
 AliHistogramCollection.cxx:1286
 AliHistogramCollection.cxx:1287
 AliHistogramCollection.cxx:1288
 AliHistogramCollection.cxx:1289
 AliHistogramCollection.cxx:1290
 AliHistogramCollection.cxx:1291
 AliHistogramCollection.cxx:1292
 AliHistogramCollection.cxx:1293
 AliHistogramCollection.cxx:1294
 AliHistogramCollection.cxx:1295
 AliHistogramCollection.cxx:1296
 AliHistogramCollection.cxx:1297
 AliHistogramCollection.cxx:1298
 AliHistogramCollection.cxx:1299
 AliHistogramCollection.cxx:1300
 AliHistogramCollection.cxx:1301
 AliHistogramCollection.cxx:1302
 AliHistogramCollection.cxx:1303
 AliHistogramCollection.cxx:1304
 AliHistogramCollection.cxx:1305
 AliHistogramCollection.cxx:1306
 AliHistogramCollection.cxx:1307
 AliHistogramCollection.cxx:1308
 AliHistogramCollection.cxx:1309
 AliHistogramCollection.cxx:1310
 AliHistogramCollection.cxx:1311
 AliHistogramCollection.cxx:1312
 AliHistogramCollection.cxx:1313
 AliHistogramCollection.cxx:1314
 AliHistogramCollection.cxx:1315
 AliHistogramCollection.cxx:1316
 AliHistogramCollection.cxx:1317
 AliHistogramCollection.cxx:1318
 AliHistogramCollection.cxx:1319
 AliHistogramCollection.cxx:1320
 AliHistogramCollection.cxx:1321
 AliHistogramCollection.cxx:1322
 AliHistogramCollection.cxx:1323
 AliHistogramCollection.cxx:1324
 AliHistogramCollection.cxx:1325
 AliHistogramCollection.cxx:1326
 AliHistogramCollection.cxx:1327
 AliHistogramCollection.cxx:1328
 AliHistogramCollection.cxx:1329
 AliHistogramCollection.cxx:1330
 AliHistogramCollection.cxx:1331
 AliHistogramCollection.cxx:1332
 AliHistogramCollection.cxx:1333
 AliHistogramCollection.cxx:1334
 AliHistogramCollection.cxx:1335
 AliHistogramCollection.cxx:1336
 AliHistogramCollection.cxx:1337