#include "AliMergeableCollection.h"
using std::cout;
using std::endl;
ClassImp(AliMergeableCollection)
#include "AliLog.h"
#include "Riostream.h"
#include "TError.h"
#include "TFolder.h"
#include "TGraph.h"
#include "TH1.h"
#include "TH2.h"
#include "THashList.h"
#include "THnSparse.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"
#include <cassert>
#include <vector>
#include "TBrowser.h"
AliMergeableCollection::AliMergeableCollection(const char* name, const char* title)
: TFolder(name,title), fMap(0x0), fMustShowEmptyObject(0), fMapVersion(0), fMessages()
{
}
AliMergeableCollection::~AliMergeableCollection()
{
delete fMap;
}
Bool_t
AliMergeableCollection::Adopt(TObject* obj)
{
return InternalAdopt("",obj);
}
Bool_t
AliMergeableCollection::Adopt(const char* identifier, TObject* obj)
{
TString sidentifier(identifier);
if ( ! sidentifier.IsNull() ){
if ( ! sidentifier.EndsWith("/") ) sidentifier.Append("/");
if ( ! sidentifier.BeginsWith("/") ) sidentifier.Prepend("/");
}
return InternalAdopt(sidentifier.Data(),obj);
}
Bool_t AliMergeableCollection::Attach(AliMergeableCollection* mc, const char* identifier, Bool_t pruneFirstIfAlreadyExists)
{
THashList* hlist = dynamic_cast<THashList*>(Map()->GetValue(identifier));
if (hlist)
{
if (!pruneFirstIfAlreadyExists)
{
AliError(Form("%s already exist. Will not overwrite it.",identifier));
return kFALSE;
}
else
{
Int_t n = Prune(identifier);
if (!n)
{
AliError(Form("Could not prune pre-existing %s",identifier));
return kFALSE;
}
}
}
TIter next(mc->fMap);
TObjString* str;
while ( ( str = static_cast<TObjString*>(next())) )
{
THashList* hl = dynamic_cast<THashList*>(mc->Map()->GetValue(str->String()));
TString newid(Form("/%s%s",identifier,str->String().Data()));
newid.ReplaceAll("//","/");
Map()->Add(new TObjString(newid.Data()),hl);
}
return kTRUE;
}
void AliMergeableCollection::Browse(TBrowser* b)
{
if ( !fFolders ) return;
TObjArray* ids = SortAllIdentifiers();
TIter nextIdentifier(ids);
TObjString* str;
while ( ( str = static_cast<TObjString*>(nextIdentifier()) ) )
{
TObjArray* parts = str->String().Tokenize("/");
TObjString* s;
TIter nextPart(parts);
TFolder* base = this;
while ( ( s = static_cast<TObjString*>(nextPart())))
{
TFolder* f = static_cast<TFolder*>(base->TFolder::FindObject(s->String()));
if (!f)
{
f = new TFolder(s->String(),"");
base->Add(f);
}
base = f;
}
delete parts;
TList* list = CreateListOfObjectNames(str->String());
if (list)
{
TObjString* oname;
TIter nextObject(list);
while ( ( oname = static_cast<TObjString*>(nextObject())) )
{
TObject* o = GetObject(str->String(),oname->String());
base->Add(o);
}
}
else
{
AliError("got list=0x0");
}
delete list;
}
TList* top = CreateListOfKeys(0);
TObjString* stop;
TIter nextTop(top);
while ( ( stop = static_cast<TObjString*>(nextTop())) )
{
b->Add(TFolder::FindObject(stop->String()));
}
delete top;
delete ids;
}
void AliMergeableCollection::ClearMessages()
{
fMessages.clear();
}
TIterator*
AliMergeableCollection::CreateIterator(Bool_t direction) const
{
return fMap ? new AliMergeableCollectionIterator(this,direction) : 0x0;
}
AliMergeableCollection*
AliMergeableCollection::Clone(const char* name) const
{
AliMergeableCollection* newone = new AliMergeableCollection(name,GetTitle());
newone->fMap = static_cast<TMap*>(fMap->Clone());
newone->fMustShowEmptyObject = fMustShowEmptyObject;
newone->fMapVersion = fMapVersion;
return newone;
}
void
AliMergeableCollection::Delete(Option_t*)
{
fMap->DeleteAll();
delete fMap;
fMap=0x0;
}
TObject*
AliMergeableCollection::FindObject(const char* fullIdentifier) const
{
return GetObject(fullIdentifier);
}
TObject*
AliMergeableCollection::FindObject(const TObject *object) const
{
AliWarning("This method is awfully inefficient. Please improve it or use FindObject(const char*)");
TIter next(CreateIterator());
TObject* obj;
while ( ( obj=next() ) )
{
if ( obj->IsEqual(object) ) return obj;
}
return 0x0;
}
TList*
AliMergeableCollection::CreateListOfKeys(Int_t index) const
{
TList* list = new TList;
list->SetOwner(kTRUE);
TObjArray* ids = SortAllIdentifiers();
TIter next(ids);
TObjString* str;
while ( ( str = static_cast<TObjString*>(next()) ) )
{
TString oneid = GetKey(str->String().Data(),index,kFALSE);
if (oneid.Length()>0 && !list->Contains(oneid))
{
list->Add(new TObjString(oneid));
}
}
delete ids;
return list;
}
TList*
AliMergeableCollection::CreateListOfObjectNames(const char* identifier) const
{
TList* listOfNames = new TList;
listOfNames->SetOwner(kTRUE);
TIter next(Map());
TObjString* str;
while ( ( str = static_cast<TObjString*>(next()) ) )
{
TString currIdentifier = str->String();
if ( currIdentifier.CompareTo(identifier) ) continue;
THashList* list = static_cast<THashList*>(Map()->GetValue(identifier));
TIter nextObject(list);
TObject* obj;
while ( ( obj = nextObject() ) )
{
listOfNames->Add(new TObjString(obj->GetName()));
}
}
return listOfNames;
}
TString
AliMergeableCollection::GetIdentifier(const char* fullIdentifier) const
{
TString identifier;
Int_t n = TString(fullIdentifier).CountChar('/')-1;
for (Int_t i=0; i < n; ++i)
{
identifier += "/";
identifier += InternalDecode(fullIdentifier,i);
}
identifier += "/";
return identifier;
}
TString
AliMergeableCollection::GetKey(const char* identifier, Int_t index, Bool_t idContainsObjName) const
{
if ( ! idContainsObjName )
{
TString sidentifier(identifier);
sidentifier.Append("/dummy");
return InternalDecode(sidentifier.Data(),index);
}
return InternalDecode(identifier,index);
}
TString
AliMergeableCollection::GetObjectName(const char* fullIdentifier) const
{
return InternalDecode(fullIdentifier,-1);
}
TH1*
AliMergeableCollection::Histo(const char* fullIdentifier) const
{
TString sfullIdentifier(fullIdentifier);
TString fullIdWithoutAction(fullIdentifier);
TString action;
if ( sfullIdentifier.First(':') != kNPOS )
{
TObjArray* arr = sfullIdentifier.Tokenize(":");
fullIdWithoutAction = static_cast<TObjString*>(arr->At(0))->String();
if ( arr->GetLast() > 0 )
{
action = static_cast<TObjString*>(arr->At(1))->String();
action.ToUpper();
}
delete arr;
}
Int_t nslashes = sfullIdentifier.CountChar('/');
TObject* o(0x0);
if (!nslashes)
{
o = GetObject("", fullIdWithoutAction);
}
else
{
o = GetObject(GetIdentifier(fullIdWithoutAction).Data(), GetObjectName(fullIdWithoutAction));
}
return HistoWithAction(fullIdWithoutAction.Data(),o,action);
}
TH1*
AliMergeableCollection::Histo(const char* identifier,
const char* objectName) const
{
TObject* o = GetObject(identifier,objectName);
TObjArray* arr = TString(objectName).Tokenize(":");
TString action;
if ( arr->GetLast() > 0 )
{
action = static_cast<TObjString*>(arr->At(1))->String();
action.ToUpper();
}
delete arr;
return HistoWithAction(identifier,o,action);
}
TH1*
AliMergeableCollection::HistoWithAction(const char* identifier, TObject* o, const TString& action) const
{
if (!o) return 0x0;
if (!o->InheritsFrom("TH1"))
{
AliError(Form("%s is not an histogram",o->GetName()));
return 0x0;
}
TH2* h2 = dynamic_cast<TH2*>(o);
if (h2)
{
if ( action == "PX" )
{
return h2->ProjectionX(NormalizeName(Form("%s/%s",identifier,o->GetName()),action.Data()).Data());
}
if ( action == "PY" )
{
return h2->ProjectionY(NormalizeName(Form("%s/%s",identifier,o->GetName()),action.Data()).Data());
}
if ( action == "PFX" )
{
return h2->ProfileX(NormalizeName(Form("%s/%s",identifier,o->GetName()),action.Data()).Data());
}
if ( action == "PFY" )
{
return h2->ProfileY(NormalizeName(Form("%s/%s",identifier,o->GetName()),action.Data()).Data());
}
}
return static_cast<TH1*>(o);
}
TH2*
AliMergeableCollection::H2(const char* fullIdentifier) const
{
TObject* o = GetObject(fullIdentifier);
if (o->IsA()->InheritsFrom(TH2::Class()))
{
return static_cast<TH2*>(o);
}
return 0x0;
}
TH2*
AliMergeableCollection::H2(const char* identifier,
const char* objectName) const
{
TObject* o = GetObject(identifier,objectName);
if (o->IsA()->InheritsFrom(TH2::Class()))
{
return static_cast<TH2*>(o);
}
return 0x0;
}
TProfile*
AliMergeableCollection::Prof(const char* fullIdentifier) const
{
TObject* o = GetObject(fullIdentifier);
if (o->IsA()->InheritsFrom(TProfile::Class()))
{
return static_cast<TProfile*>(o);
}
return 0x0;
}
TProfile*
AliMergeableCollection::Prof(const char* identifier,
const char* objectName) const
{
TObject* o = GetObject(identifier,objectName);
if (o->IsA()->InheritsFrom(TProfile::Class()))
{
return static_cast<TProfile*>(o);
}
return 0x0;
}
TObject*
AliMergeableCollection::GetObject(const char* fullIdentifier) const
{
TString sfullIdentifier(fullIdentifier);
Int_t nslashes = sfullIdentifier.CountChar('/');
if (!nslashes)
{
return GetObject("", sfullIdentifier);
}
else
{
return GetObject(GetIdentifier(fullIdentifier).Data(), GetObjectName(fullIdentifier));
}
}
TObject*
AliMergeableCollection::GetObject(const char* identifier,
const char* objectName) const
{
TString sidentifier(identifier);
if ( ! sidentifier.IsNull() ) {
if ( ! sidentifier.BeginsWith("/") ) sidentifier.Prepend("/");
if ( ! sidentifier.EndsWith("/") ) sidentifier.Append("/");
}
return InternalObject(sidentifier.Data(),objectName);
}
TObject* AliMergeableCollection::GetSum(const char* idPattern) const
{
TObject* sumObject = 0x0;
TString idPatternString(idPattern);
TObjArray* keyList = idPatternString.Tokenize("/");
TObjArray keyMatrix(keyList->GetEntries());
keyMatrix.SetOwner();
for ( Int_t ikey=0; ikey<keyList->GetEntries(); ikey++ ) {
TObjArray* subKeyList = ((TObjString*)keyList->At(ikey))->GetString().Tokenize(",");
keyMatrix.AddAt(subKeyList, ikey);
}
delete keyList;
TString debugMsg = "Adding objects:";
TIter next(Map());
TObjString* str;
while ( ( str = static_cast<TObjString*>(next()) ) )
{
TString identifier = str->String();
Bool_t listMatchPattern = kTRUE;
for ( Int_t ikey=0; ikey<keyMatrix.GetEntries()-1; ikey++ ) {
TString currKey = GetKey(identifier, ikey, kFALSE);
Bool_t matchKey = kFALSE;
TObjArray* subKeyList = static_cast<TObjArray*> ( keyMatrix.At(ikey) );
for ( Int_t isub=0; isub<subKeyList->GetEntries(); isub++ ) {
TString subKeyString = static_cast<TObjString*> (subKeyList->At(isub))->GetString();
if ( currKey == subKeyString ) {
matchKey = kTRUE;
break;
}
}
if ( ! matchKey ) {
listMatchPattern = kFALSE;
break;
}
}
if ( ! listMatchPattern ) continue;
THashList* list = static_cast<THashList*>(Map()->GetValue(identifier.Data()));
TIter nextObj(list);
TObject* obj;
while ( ( obj = nextObj()) )
{
TString currKey = obj->GetName();
Bool_t matchKey = kFALSE;
TObjArray* subKeyList = static_cast<TObjArray*> ( keyMatrix.Last() );
for ( Int_t isub=0; isub<subKeyList->GetEntries(); isub++ ) {
TString subKeyString = static_cast<TObjString*> (subKeyList->At(isub))->GetString();
if ( currKey == subKeyString ) {
matchKey = kTRUE;
break;
}
}
if ( ! matchKey ) continue;
if ( ! sumObject ) sumObject = obj->Clone();
else MergeObject(sumObject, obj);
debugMsg += Form(" %s%s",identifier.Data(),obj->GetName());
}
}
AliDebug(1,debugMsg.Data());
return sumObject;
}
Bool_t AliMergeableCollection::InternalAdopt(const char* identifier, TObject* obj)
{
if (!obj)
{
Error("Adopt","Cannot adopt a null object");
return kFALSE;
}
if ( ! obj->IsA()->InheritsFrom(TObject::Class()) ||
! obj->IsA()->GetMethodWithPrototype("Merge", "TCollection*") ) {
Error("Adopt","Cannot adopt an object which is not mergeable!");
}
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);
}
TObject* existingObj = hlist->FindObject(obj->GetName());
if (existingObj)
{
AliError(Form("Cannot adopt an already existing object : %s -> %s",identifier,existingObj->GetName()));
return kFALSE;
}
if ( obj->IsA()->InheritsFrom(TH1::Class()) ) (static_cast<TH1*> ( obj ))->SetDirectory(0);
hlist->AddLast(obj);
return kTRUE;
}
TString
AliMergeableCollection::InternalDecode(const char* identifier, Int_t index) const
{
if ( strlen(identifier) > 0 && identifier[0] != '/' )
{
AliError(Form("identifier %s is malformed (should start with /)",identifier));
return "";
}
std::vector<Int_t> splitIndex;
Int_t start(0);
TString sidentifier(identifier);
while (start < sidentifier.Length())
{
Int_t pos = sidentifier.Index('/', start);
if (pos == kNPOS) break;
splitIndex.push_back(pos);
start = pos + 1;
}
Int_t nkeys = splitIndex.size() - 1;
if ( index >= nkeys )
{
AliError(Form("Requiring index %i of identifier %s which only have %i",index, identifier, nkeys));
return "";
}
if ( index < 0 )
{
return sidentifier(splitIndex.back()+1,sidentifier.Length()-splitIndex.back()-1);
}
return sidentifier(splitIndex[index]+1,splitIndex[index+1]-splitIndex[index]-1);
}
TObject*
AliMergeableCollection::InternalObject(const char* identifier,
const char* objectName) const
{
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;
}
TObject* obj = hlist->FindObject(objectName);
if (!obj)
{
TString msg(Form("Did not find objectName=%s in %s",objectName,identifier));
fMessages[msg.Data()]++;
}
return obj;
}
Bool_t AliMergeableCollection::IsEmptyObject(TObject* obj) const
{
if ( obj->IsA()->InheritsFrom(TH1::Class()) ) {
TH1* histo = static_cast<TH1*> (obj);
if ( histo->GetEntries() == 0 ) return kTRUE;
}
return kFALSE;
}
TMap* AliMergeableCollection::Map() const
{
if (!fMap)
{
fMap = new TMap;
fMap->SetOwnerKeyValue(kTRUE,kTRUE);
fMapVersion = 1;
}
else
{
if ( fMapVersion < 1 )
{
AliInfo("Remapping");
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
AliMergeableCollection::Merge(TCollection* list)
{
if (!list) return 0;
if (list->IsEmpty()) return 1;
TIter next(list);
TObject* currObj;
TList mapList;
Int_t count(0);
while ( ( currObj = next() ) )
{
AliMergeableCollection* mergeCol = dynamic_cast<AliMergeableCollection*>(currObj);
if (!mergeCol) {
AliFatal(Form("object named \"%s\" is a %s instead of an AliMergeableCollection!", currObj->GetName(), currObj->ClassName()));
continue;
}
++count;
if ( mergeCol->fMap ) mergeCol->Map();
TIter nextIdentifier(mergeCol->fMap);
TObjString* identifier;
while ( ( identifier = static_cast<TObjString*>(nextIdentifier()) ) )
{
THashList* otherList = static_cast<THashList*>(mergeCol->fMap->GetValue(identifier->String().Data()));
TIter nextObject(otherList);
TObject* obj;
while ( ( obj = nextObject() ) )
{
TString newid(Form("%s%s",identifier->String().Data(),obj->GetName()));
TObject* thisObject = GetObject(newid.Data());
if (!thisObject)
{
AliDebug(1,Form("Adopting a new object = %s%s",identifier->String().Data(),obj->GetName()));
Bool_t ok = Adopt(identifier->String(), obj->Clone());
if (!ok)
{
AliError(Form("Adoption of object %s failed",obj->GetName()));
}
}
else
{
AliDebug(1,Form("Merging object = %s%s",
identifier->String().Data(),
obj->GetName()));
MergeObject(thisObject, obj);
}
}
}
}
AliDebug(1,Form("count=%d",count));
return count+1;
}
Bool_t AliMergeableCollection::MergeObject(TObject* baseObject, TObject* objToAdd)
{
if ( baseObject->IsA()->Class() != objToAdd->IsA()->Class() ) {
printf("MergeObject: Cannot add %s to %s", objToAdd->ClassName(), baseObject->ClassName());
return kFALSE;
}
if ( ! baseObject->IsA()->InheritsFrom(TObject::Class()) ||
! baseObject->IsA()->GetMethodWithPrototype("Merge", "TCollection*") ) {
printf("MergeObject: Objects are not mergeable!");
return kFALSE;
}
TList list;
list.Add(objToAdd);
TString listArgs = Form("((TCollection*)0x%lx)", (ULong_t)&list);
Int_t error = 0;
baseObject->Execute("Merge", listArgs.Data(), &error);
return kTRUE;
}
TString AliMergeableCollection::NormalizeName(const char* identifier,const char* action) const
{
TString name(GetName());
name += "_";
name += identifier;
name += "_";
name += action;
name.ReplaceAll("/","_");
name.ReplaceAll("-","_");
return name;
}
Int_t
AliMergeableCollection::NumberOfObjects() const
{
TIter next(CreateIterator());
Int_t count(0);
while ( next() ) ++count;
return count;
}
Int_t
AliMergeableCollection::NumberOfKeys() const
{
return fMap ? fMap->GetSize() : 0;
}
void
AliMergeableCollection::Print(Option_t* option) const
{
cout << Form("AliMergeableCollection(%s,%s)[%p] : %d keys and %d objects",
GetName(),GetTitle(),this,
NumberOfKeys(), NumberOfObjects()) << endl;
if (!strlen(option)) return;
TString soption(option);
TObjArray* classes = soption.Tokenize(":");
TRegexp* classPattern(0x0);
if ( classes->GetLast() > 0 )
{
TString pat = static_cast<TObjString*>(classes->At(1))->String();
classPattern = new TRegexp(pat,kTRUE);
soption = static_cast<TObjString*>(classes->At(0))->String();
}
delete classes;
TObjArray* select = soption.Tokenize("/");
TString sreObjectName(select->Last()->GetName());
TRegexp reObjectName(sreObjectName.Data(),kTRUE);
TObjArray* identifiers = SortAllIdentifiers();
std::cout << Form("Number of identifiers %d", identifiers->GetEntries()) << std::endl;
TIter nextIdentifier(identifiers);
TObjString* sid(0x0);
while ( ( sid = static_cast<TObjString*>(nextIdentifier()) ) )
{
Bool_t identifierPrinted(kFALSE);
TString identifier(sid->String());
Bool_t matchPattern = kTRUE;
for ( Int_t isel=0; isel<select->GetLast(); isel++ ) {
if ( ! GetKey(identifier.Data(), isel, kFALSE).Contains(TRegexp(select->At(isel)->GetName(),kTRUE)) ) {
matchPattern = kFALSE;
break;
}
}
if ( ! matchPattern ) continue;
if ( sreObjectName == "*" && !classPattern)
{
identifierPrinted = kTRUE;
cout << identifier.Data() << endl;
}
THashList * list = static_cast<THashList*>(Map()->GetValue(sid->String().Data()));
TObjArray names;
names.SetOwner(kTRUE);
TIter nextUnsortedObj(list);
TObject* obj;
while ( ( obj = nextUnsortedObj() ) )
{
TString cname(obj->ClassName());
if ( classPattern && !cname.Contains((*classPattern)) )
{
continue;
}
names.Add(new TObjString(obj->GetName()));
}
names.Sort();
TIter nextObjName(&names);
TObjString* oname;
while ( ( oname = static_cast<TObjString*>(nextObjName()) ) )
{
TString objName(oname->String());
if (objName.Contains(reObjectName) )
{
obj = list->FindObject(objName.Data());
if ( IsEmptyObject(obj) && ! fMustShowEmptyObject ) continue;
if (!identifierPrinted)
{
cout << identifier.Data() << endl;
identifierPrinted = kTRUE;
}
TString extra;
TString warning(" ");
if ( obj->IsA()->InheritsFrom(TH1::Class()) )
{
TH1* histo = static_cast<TH1*> (obj);
extra.Form("%s | Entries=%d Sum=%g",histo->GetTitle(),Int_t(histo->GetEntries()),histo->GetSumOfWeights());
}
else if ( obj->IsA()->InheritsFrom(TGraph::Class()) )
{
TGraph* graph = static_cast<TGraph*> (obj);
if ( ! TMath::Finite(graph->GetMean(2) ) )
{
warning = " ! ";
}
extra.Form("%s | Npts=%d Mean=%g RMS=%g",graph->GetTitle(),graph->GetN(),
graph->GetMean(2),graph->GetRMS(2));
}
std::cout << Form(" (%s) %s %s", obj->ClassName(),
warning.Data(),
obj->GetName());
if ( extra.Length() )
{
std::cout << " | " << extra.Data();
}
std::cout << std::endl;
}
}
if (!identifierPrinted && sreObjectName=="-" )
{
cout << identifier.Data() << endl;
}
}
delete select;
delete identifiers;
}
void
AliMergeableCollection::PrintMessages(const char* prefix) const
{
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
AliMergeableCollection::EstimateSize(Bool_t show) const
{
TIter next(CreateIterator());
TObject* obj;
UInt_t size(0);
while ( ( obj = next() ) )
{
UInt_t thissize=0;
if ( obj->IsA()->InheritsFrom(TH1::Class()) || obj->IsA()->InheritsFrom(TProfile::Class()) )
{
TH1* histo = static_cast<TH1*> (obj);
Int_t nbins = (histo->GetNbinsX()+2);
if (histo->GetNbinsY()>1)
{
nbins *= (histo->GetNbinsY()+2);
}
if (histo->GetNbinsZ()>1)
{
nbins *= (histo->GetNbinsZ()+2);
}
Bool_t hasErrors = ( histo->GetSumw2N() > 0 );
TString cname(histo->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 (cname=="TProfile") 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 !",
histo->GetName(),histo->ClassName()));
continue;
}
thissize = sizeof(histo) + nbins*(nbytesPerBin) + strlen(histo->GetName())
+ strlen(histo->GetTitle());
if ( hasErrors) thissize += nbins*8;
if ( obj->IsA()->InheritsFrom(TProfile::Class()) )
{
TProfile* prof = static_cast<TProfile*>(obj);
TArrayD* d = prof->GetBinSumw2();
thissize += d->GetSize()*8*2;
thissize += sizeof(prof) - sizeof(histo);
}
}
else if ( obj->IsA()->InheritsFrom(THnSparse::Class()) ) {
THnSparse* sparse = static_cast<THnSparse*> (obj);
thissize = sizeof(Float_t) * (UInt_t)sparse->GetNbins();
}
else {
AliWarning(Form("Cannot estimate size of %s\n", obj->ClassName()));
continue;
}
size += thissize;
if ( show )
{
AliInfo(Form("Size of %30s is %20d bytes",obj->GetName(),thissize));
}
}
return size;
}
Int_t AliMergeableCollection::Prune(const char* identifier)
{
TIter next(Map());
TObjString* key;
Int_t ndeleted(0);
while ( ( key = static_cast<TObjString*>(next())) )
{
if (key->String().BeginsWith(identifier))
{
Bool_t ok = Map()->DeleteEntry(key);
if (ok) ++ndeleted;
}
}
return ndeleted;
}
void AliMergeableCollection::PruneEmptyObjects()
{
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 nextObject(hlist);
TObject* obj;
while ( ( obj = nextObject() ) )
{
if ( IsEmptyObject(obj) ) toBeRemoved.Add(new TObjString(Form("%s%s",identifier.Data(),obj->GetName())));
}
}
TIter nextTBR(&toBeRemoved);
while ( ( key = static_cast<TObjString*>(nextTBR()) ) )
{
Remove(key->GetString().Data());
AliDebug(2,Form("Removing %s", key->GetString().Data()));
}
}
AliMergeableCollection*
AliMergeableCollection::Project(const char* identifier) const
{
if (!fMap) return 0x0;
AliMergeableCollection* mergCol = new AliMergeableCollection(Form("%s %s",GetName(),identifier),
GetTitle());
TIter next(Map());
TObjString* str;
while ( ( str = static_cast<TObjString*>(next()) ) )
{
TString currIdentifier = str->String();
if ( ! currIdentifier.Contains(identifier) ) continue;
THashList* list = static_cast<THashList*>(Map()->GetValue(identifier));
TIter nextObj(list);
TObject* obj;
while ( ( obj = nextObj()) )
{
TObject* clone = obj->Clone();
TString newkey(currIdentifier.Data());
newkey.ReplaceAll(identifier,"");
if (newkey=="/") newkey="";
mergCol->InternalAdopt(newkey.Data(),clone);
}
}
return mergCol;
}
TObject*
AliMergeableCollection::Remove(const char* fullIdentifier)
{
TString identifier = GetIdentifier(fullIdentifier);
THashList* hlist = dynamic_cast<THashList*>(Map()->GetValue(identifier.Data()));
if (!hlist)
{
AliWarning(Form("Could not get hlist for key=%s",identifier.Data()));
return 0x0;
}
TObject* obj = GetObject(fullIdentifier);
if (!obj)
{
AliError(Form("Could not find object %s",fullIdentifier));
return 0x0;
}
TObject* rmObj = hlist->Remove(obj);
if (!rmObj)
{
AliError("Remove failed");
return 0x0;
}
return rmObj;
}
Int_t AliMergeableCollection::RemoveByType(const char* typeName)
{
TIter nextIdentifier(Map());
TObjString* identifier;
Int_t nremoved(0);
while ( (identifier = static_cast<TObjString*>(nextIdentifier()) ) )
{
THashList* list = static_cast<THashList*>(Map()->GetValue(identifier->String()));
TIter next(list);
TObject* o;
while ( ( o = next() ) )
{
if ( strcmp(o->ClassName(),typeName) == 0 )
{
list->Remove(o);
++nremoved;
}
}
}
return nremoved;
}
TObjArray*
AliMergeableCollection::SortAllIdentifiers() const
{
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;
}
class AliMergeableCollectionIterator;
AliMergeableCollectionIterator::AliMergeableCollectionIterator(const AliMergeableCollection* mcol, Bool_t dir)
: fkMergeableCollection(mcol), fMapIterator(0x0), fHashListIterator(0x0), fDirection(dir)
{
}
AliMergeableCollectionIterator&
AliMergeableCollectionIterator::operator=(const TIterator&)
{
Fatal("TIterator::operator=","Not implementeable");
return *this;
}
AliMergeableCollectionIterator::~AliMergeableCollectionIterator()
{
Reset();
}
TObject* AliMergeableCollectionIterator::Next()
{
if (!fHashListIterator)
{
if ( !fMapIterator )
{
fMapIterator = fkMergeableCollection->fMap->MakeIterator(fDirection);
}
TObjString* key = static_cast<TObjString*>(fMapIterator->Next());
if (!key)
{
return 0x0;
}
THashList* list = static_cast<THashList*>(fkMergeableCollection->Map()->GetValue(key->String().Data()));
if (!list) return 0x0;
fHashListIterator = list->MakeIterator(fDirection);
}
TObject* obj = fHashListIterator->Next();
if (!obj)
{
delete fHashListIterator;
fHashListIterator = 0x0;
return Next();
}
return obj;
}
void AliMergeableCollectionIterator::Reset()
{
delete fHashListIterator;
delete fMapIterator;
}
AliMergeableCollection.cxx:1 AliMergeableCollection.cxx:2 AliMergeableCollection.cxx:3 AliMergeableCollection.cxx:4 AliMergeableCollection.cxx:5 AliMergeableCollection.cxx:6 AliMergeableCollection.cxx:7 AliMergeableCollection.cxx:8 AliMergeableCollection.cxx:9 AliMergeableCollection.cxx:10 AliMergeableCollection.cxx:11 AliMergeableCollection.cxx:12 AliMergeableCollection.cxx:13 AliMergeableCollection.cxx:14 AliMergeableCollection.cxx:15 AliMergeableCollection.cxx:16 AliMergeableCollection.cxx:17 AliMergeableCollection.cxx:18 AliMergeableCollection.cxx:19 AliMergeableCollection.cxx:20 AliMergeableCollection.cxx:21 AliMergeableCollection.cxx:22 AliMergeableCollection.cxx:23 AliMergeableCollection.cxx:24 AliMergeableCollection.cxx:25 AliMergeableCollection.cxx:26 AliMergeableCollection.cxx:27 AliMergeableCollection.cxx:28 AliMergeableCollection.cxx:29 AliMergeableCollection.cxx:30 AliMergeableCollection.cxx:31 AliMergeableCollection.cxx:32 AliMergeableCollection.cxx:33 AliMergeableCollection.cxx:34 AliMergeableCollection.cxx:35 AliMergeableCollection.cxx:36 AliMergeableCollection.cxx:37 AliMergeableCollection.cxx:38 AliMergeableCollection.cxx:39 AliMergeableCollection.cxx:40 AliMergeableCollection.cxx:41 AliMergeableCollection.cxx:42 AliMergeableCollection.cxx:43 AliMergeableCollection.cxx:44 AliMergeableCollection.cxx:45 AliMergeableCollection.cxx:46 AliMergeableCollection.cxx:47 AliMergeableCollection.cxx:48 AliMergeableCollection.cxx:49 AliMergeableCollection.cxx:50 AliMergeableCollection.cxx:51 AliMergeableCollection.cxx:52 AliMergeableCollection.cxx:53 AliMergeableCollection.cxx:54 AliMergeableCollection.cxx:55 AliMergeableCollection.cxx:56 AliMergeableCollection.cxx:57 AliMergeableCollection.cxx:58 AliMergeableCollection.cxx:59 AliMergeableCollection.cxx:60 AliMergeableCollection.cxx:61 AliMergeableCollection.cxx:62 AliMergeableCollection.cxx:63 AliMergeableCollection.cxx:64 AliMergeableCollection.cxx:65 AliMergeableCollection.cxx:66 AliMergeableCollection.cxx:67 AliMergeableCollection.cxx:68 AliMergeableCollection.cxx:69 AliMergeableCollection.cxx:70 AliMergeableCollection.cxx:71 AliMergeableCollection.cxx:72 AliMergeableCollection.cxx:73 AliMergeableCollection.cxx:74 AliMergeableCollection.cxx:75 AliMergeableCollection.cxx:76 AliMergeableCollection.cxx:77 AliMergeableCollection.cxx:78 AliMergeableCollection.cxx:79 AliMergeableCollection.cxx:80 AliMergeableCollection.cxx:81 AliMergeableCollection.cxx:82 AliMergeableCollection.cxx:83 AliMergeableCollection.cxx:84 AliMergeableCollection.cxx:85 AliMergeableCollection.cxx:86 AliMergeableCollection.cxx:87 AliMergeableCollection.cxx:88 AliMergeableCollection.cxx:89 AliMergeableCollection.cxx:90 AliMergeableCollection.cxx:91 AliMergeableCollection.cxx:92 AliMergeableCollection.cxx:93 AliMergeableCollection.cxx:94 AliMergeableCollection.cxx:95 AliMergeableCollection.cxx:96 AliMergeableCollection.cxx:97 AliMergeableCollection.cxx:98 AliMergeableCollection.cxx:99 AliMergeableCollection.cxx:100 AliMergeableCollection.cxx:101 AliMergeableCollection.cxx:102 AliMergeableCollection.cxx:103 AliMergeableCollection.cxx:104 AliMergeableCollection.cxx:105 AliMergeableCollection.cxx:106 AliMergeableCollection.cxx:107 AliMergeableCollection.cxx:108 AliMergeableCollection.cxx:109 AliMergeableCollection.cxx:110 AliMergeableCollection.cxx:111 AliMergeableCollection.cxx:112 AliMergeableCollection.cxx:113 AliMergeableCollection.cxx:114 AliMergeableCollection.cxx:115 AliMergeableCollection.cxx:116 AliMergeableCollection.cxx:117 AliMergeableCollection.cxx:118 AliMergeableCollection.cxx:119 AliMergeableCollection.cxx:120 AliMergeableCollection.cxx:121 AliMergeableCollection.cxx:122 AliMergeableCollection.cxx:123 AliMergeableCollection.cxx:124 AliMergeableCollection.cxx:125 AliMergeableCollection.cxx:126 AliMergeableCollection.cxx:127 AliMergeableCollection.cxx:128 AliMergeableCollection.cxx:129 AliMergeableCollection.cxx:130 AliMergeableCollection.cxx:131 AliMergeableCollection.cxx:132 AliMergeableCollection.cxx:133 AliMergeableCollection.cxx:134 AliMergeableCollection.cxx:135 AliMergeableCollection.cxx:136 AliMergeableCollection.cxx:137 AliMergeableCollection.cxx:138 AliMergeableCollection.cxx:139 AliMergeableCollection.cxx:140 AliMergeableCollection.cxx:141 AliMergeableCollection.cxx:142 AliMergeableCollection.cxx:143 AliMergeableCollection.cxx:144 AliMergeableCollection.cxx:145 AliMergeableCollection.cxx:146 AliMergeableCollection.cxx:147 AliMergeableCollection.cxx:148 AliMergeableCollection.cxx:149 AliMergeableCollection.cxx:150 AliMergeableCollection.cxx:151 AliMergeableCollection.cxx:152 AliMergeableCollection.cxx:153 AliMergeableCollection.cxx:154 AliMergeableCollection.cxx:155 AliMergeableCollection.cxx:156 AliMergeableCollection.cxx:157 AliMergeableCollection.cxx:158 AliMergeableCollection.cxx:159 AliMergeableCollection.cxx:160 AliMergeableCollection.cxx:161 AliMergeableCollection.cxx:162 AliMergeableCollection.cxx:163 AliMergeableCollection.cxx:164 AliMergeableCollection.cxx:165 AliMergeableCollection.cxx:166 AliMergeableCollection.cxx:167 AliMergeableCollection.cxx:168 AliMergeableCollection.cxx:169 AliMergeableCollection.cxx:170 AliMergeableCollection.cxx:171 AliMergeableCollection.cxx:172 AliMergeableCollection.cxx:173 AliMergeableCollection.cxx:174 AliMergeableCollection.cxx:175 AliMergeableCollection.cxx:176 AliMergeableCollection.cxx:177 AliMergeableCollection.cxx:178 AliMergeableCollection.cxx:179 AliMergeableCollection.cxx:180 AliMergeableCollection.cxx:181 AliMergeableCollection.cxx:182 AliMergeableCollection.cxx:183 AliMergeableCollection.cxx:184 AliMergeableCollection.cxx:185 AliMergeableCollection.cxx:186 AliMergeableCollection.cxx:187 AliMergeableCollection.cxx:188 AliMergeableCollection.cxx:189 AliMergeableCollection.cxx:190 AliMergeableCollection.cxx:191 AliMergeableCollection.cxx:192 AliMergeableCollection.cxx:193 AliMergeableCollection.cxx:194 AliMergeableCollection.cxx:195 AliMergeableCollection.cxx:196 AliMergeableCollection.cxx:197 AliMergeableCollection.cxx:198 AliMergeableCollection.cxx:199 AliMergeableCollection.cxx:200 AliMergeableCollection.cxx:201 AliMergeableCollection.cxx:202 AliMergeableCollection.cxx:203 AliMergeableCollection.cxx:204 AliMergeableCollection.cxx:205 AliMergeableCollection.cxx:206 AliMergeableCollection.cxx:207 AliMergeableCollection.cxx:208 AliMergeableCollection.cxx:209 AliMergeableCollection.cxx:210 AliMergeableCollection.cxx:211 AliMergeableCollection.cxx:212 AliMergeableCollection.cxx:213 AliMergeableCollection.cxx:214 AliMergeableCollection.cxx:215 AliMergeableCollection.cxx:216 AliMergeableCollection.cxx:217 AliMergeableCollection.cxx:218 AliMergeableCollection.cxx:219 AliMergeableCollection.cxx:220 AliMergeableCollection.cxx:221 AliMergeableCollection.cxx:222 AliMergeableCollection.cxx:223 AliMergeableCollection.cxx:224 AliMergeableCollection.cxx:225 AliMergeableCollection.cxx:226 AliMergeableCollection.cxx:227 AliMergeableCollection.cxx:228 AliMergeableCollection.cxx:229 AliMergeableCollection.cxx:230 AliMergeableCollection.cxx:231 AliMergeableCollection.cxx:232 AliMergeableCollection.cxx:233 AliMergeableCollection.cxx:234 AliMergeableCollection.cxx:235 AliMergeableCollection.cxx:236 AliMergeableCollection.cxx:237 AliMergeableCollection.cxx:238 AliMergeableCollection.cxx:239 AliMergeableCollection.cxx:240 AliMergeableCollection.cxx:241 AliMergeableCollection.cxx:242 AliMergeableCollection.cxx:243 AliMergeableCollection.cxx:244 AliMergeableCollection.cxx:245 AliMergeableCollection.cxx:246 AliMergeableCollection.cxx:247 AliMergeableCollection.cxx:248 AliMergeableCollection.cxx:249 AliMergeableCollection.cxx:250 AliMergeableCollection.cxx:251 AliMergeableCollection.cxx:252 AliMergeableCollection.cxx:253 AliMergeableCollection.cxx:254 AliMergeableCollection.cxx:255 AliMergeableCollection.cxx:256 AliMergeableCollection.cxx:257 AliMergeableCollection.cxx:258 AliMergeableCollection.cxx:259 AliMergeableCollection.cxx:260 AliMergeableCollection.cxx:261 AliMergeableCollection.cxx:262 AliMergeableCollection.cxx:263 AliMergeableCollection.cxx:264 AliMergeableCollection.cxx:265 AliMergeableCollection.cxx:266 AliMergeableCollection.cxx:267 AliMergeableCollection.cxx:268 AliMergeableCollection.cxx:269 AliMergeableCollection.cxx:270 AliMergeableCollection.cxx:271 AliMergeableCollection.cxx:272 AliMergeableCollection.cxx:273 AliMergeableCollection.cxx:274 AliMergeableCollection.cxx:275 AliMergeableCollection.cxx:276 AliMergeableCollection.cxx:277 AliMergeableCollection.cxx:278 AliMergeableCollection.cxx:279 AliMergeableCollection.cxx:280 AliMergeableCollection.cxx:281 AliMergeableCollection.cxx:282 AliMergeableCollection.cxx:283 AliMergeableCollection.cxx:284 AliMergeableCollection.cxx:285 AliMergeableCollection.cxx:286 AliMergeableCollection.cxx:287 AliMergeableCollection.cxx:288 AliMergeableCollection.cxx:289 AliMergeableCollection.cxx:290 AliMergeableCollection.cxx:291 AliMergeableCollection.cxx:292 AliMergeableCollection.cxx:293 AliMergeableCollection.cxx:294 AliMergeableCollection.cxx:295 AliMergeableCollection.cxx:296 AliMergeableCollection.cxx:297 AliMergeableCollection.cxx:298 AliMergeableCollection.cxx:299 AliMergeableCollection.cxx:300 AliMergeableCollection.cxx:301 AliMergeableCollection.cxx:302 AliMergeableCollection.cxx:303 AliMergeableCollection.cxx:304 AliMergeableCollection.cxx:305 AliMergeableCollection.cxx:306 AliMergeableCollection.cxx:307 AliMergeableCollection.cxx:308 AliMergeableCollection.cxx:309 AliMergeableCollection.cxx:310 AliMergeableCollection.cxx:311 AliMergeableCollection.cxx:312 AliMergeableCollection.cxx:313 AliMergeableCollection.cxx:314 AliMergeableCollection.cxx:315 AliMergeableCollection.cxx:316 AliMergeableCollection.cxx:317 AliMergeableCollection.cxx:318 AliMergeableCollection.cxx:319 AliMergeableCollection.cxx:320 AliMergeableCollection.cxx:321 AliMergeableCollection.cxx:322 AliMergeableCollection.cxx:323 AliMergeableCollection.cxx:324 AliMergeableCollection.cxx:325 AliMergeableCollection.cxx:326 AliMergeableCollection.cxx:327 AliMergeableCollection.cxx:328 AliMergeableCollection.cxx:329 AliMergeableCollection.cxx:330 AliMergeableCollection.cxx:331 AliMergeableCollection.cxx:332 AliMergeableCollection.cxx:333 AliMergeableCollection.cxx:334 AliMergeableCollection.cxx:335 AliMergeableCollection.cxx:336 AliMergeableCollection.cxx:337 AliMergeableCollection.cxx:338 AliMergeableCollection.cxx:339 AliMergeableCollection.cxx:340 AliMergeableCollection.cxx:341 AliMergeableCollection.cxx:342 AliMergeableCollection.cxx:343 AliMergeableCollection.cxx:344 AliMergeableCollection.cxx:345 AliMergeableCollection.cxx:346 AliMergeableCollection.cxx:347 AliMergeableCollection.cxx:348 AliMergeableCollection.cxx:349 AliMergeableCollection.cxx:350 AliMergeableCollection.cxx:351 AliMergeableCollection.cxx:352 AliMergeableCollection.cxx:353 AliMergeableCollection.cxx:354 AliMergeableCollection.cxx:355 AliMergeableCollection.cxx:356 AliMergeableCollection.cxx:357 AliMergeableCollection.cxx:358 AliMergeableCollection.cxx:359 AliMergeableCollection.cxx:360 AliMergeableCollection.cxx:361 AliMergeableCollection.cxx:362 AliMergeableCollection.cxx:363 AliMergeableCollection.cxx:364 AliMergeableCollection.cxx:365 AliMergeableCollection.cxx:366 AliMergeableCollection.cxx:367 AliMergeableCollection.cxx:368 AliMergeableCollection.cxx:369 AliMergeableCollection.cxx:370 AliMergeableCollection.cxx:371 AliMergeableCollection.cxx:372 AliMergeableCollection.cxx:373 AliMergeableCollection.cxx:374 AliMergeableCollection.cxx:375 AliMergeableCollection.cxx:376 AliMergeableCollection.cxx:377 AliMergeableCollection.cxx:378 AliMergeableCollection.cxx:379 AliMergeableCollection.cxx:380 AliMergeableCollection.cxx:381 AliMergeableCollection.cxx:382 AliMergeableCollection.cxx:383 AliMergeableCollection.cxx:384 AliMergeableCollection.cxx:385 AliMergeableCollection.cxx:386 AliMergeableCollection.cxx:387 AliMergeableCollection.cxx:388 AliMergeableCollection.cxx:389 AliMergeableCollection.cxx:390 AliMergeableCollection.cxx:391 AliMergeableCollection.cxx:392 AliMergeableCollection.cxx:393 AliMergeableCollection.cxx:394 AliMergeableCollection.cxx:395 AliMergeableCollection.cxx:396 AliMergeableCollection.cxx:397 AliMergeableCollection.cxx:398 AliMergeableCollection.cxx:399 AliMergeableCollection.cxx:400 AliMergeableCollection.cxx:401 AliMergeableCollection.cxx:402 AliMergeableCollection.cxx:403 AliMergeableCollection.cxx:404 AliMergeableCollection.cxx:405 AliMergeableCollection.cxx:406 AliMergeableCollection.cxx:407 AliMergeableCollection.cxx:408 AliMergeableCollection.cxx:409 AliMergeableCollection.cxx:410 AliMergeableCollection.cxx:411 AliMergeableCollection.cxx:412 AliMergeableCollection.cxx:413 AliMergeableCollection.cxx:414 AliMergeableCollection.cxx:415 AliMergeableCollection.cxx:416 AliMergeableCollection.cxx:417 AliMergeableCollection.cxx:418 AliMergeableCollection.cxx:419 AliMergeableCollection.cxx:420 AliMergeableCollection.cxx:421 AliMergeableCollection.cxx:422 AliMergeableCollection.cxx:423 AliMergeableCollection.cxx:424 AliMergeableCollection.cxx:425 AliMergeableCollection.cxx:426 AliMergeableCollection.cxx:427 AliMergeableCollection.cxx:428 AliMergeableCollection.cxx:429 AliMergeableCollection.cxx:430 AliMergeableCollection.cxx:431 AliMergeableCollection.cxx:432 AliMergeableCollection.cxx:433 AliMergeableCollection.cxx:434 AliMergeableCollection.cxx:435 AliMergeableCollection.cxx:436 AliMergeableCollection.cxx:437 AliMergeableCollection.cxx:438 AliMergeableCollection.cxx:439 AliMergeableCollection.cxx:440 AliMergeableCollection.cxx:441 AliMergeableCollection.cxx:442 AliMergeableCollection.cxx:443 AliMergeableCollection.cxx:444 AliMergeableCollection.cxx:445 AliMergeableCollection.cxx:446 AliMergeableCollection.cxx:447 AliMergeableCollection.cxx:448 AliMergeableCollection.cxx:449 AliMergeableCollection.cxx:450 AliMergeableCollection.cxx:451 AliMergeableCollection.cxx:452 AliMergeableCollection.cxx:453 AliMergeableCollection.cxx:454 AliMergeableCollection.cxx:455 AliMergeableCollection.cxx:456 AliMergeableCollection.cxx:457 AliMergeableCollection.cxx:458 AliMergeableCollection.cxx:459 AliMergeableCollection.cxx:460 AliMergeableCollection.cxx:461 AliMergeableCollection.cxx:462 AliMergeableCollection.cxx:463 AliMergeableCollection.cxx:464 AliMergeableCollection.cxx:465 AliMergeableCollection.cxx:466 AliMergeableCollection.cxx:467 AliMergeableCollection.cxx:468 AliMergeableCollection.cxx:469 AliMergeableCollection.cxx:470 AliMergeableCollection.cxx:471 AliMergeableCollection.cxx:472 AliMergeableCollection.cxx:473 AliMergeableCollection.cxx:474 AliMergeableCollection.cxx:475 AliMergeableCollection.cxx:476 AliMergeableCollection.cxx:477 AliMergeableCollection.cxx:478 AliMergeableCollection.cxx:479 AliMergeableCollection.cxx:480 AliMergeableCollection.cxx:481 AliMergeableCollection.cxx:482 AliMergeableCollection.cxx:483 AliMergeableCollection.cxx:484 AliMergeableCollection.cxx:485 AliMergeableCollection.cxx:486 AliMergeableCollection.cxx:487 AliMergeableCollection.cxx:488 AliMergeableCollection.cxx:489 AliMergeableCollection.cxx:490 AliMergeableCollection.cxx:491 AliMergeableCollection.cxx:492 AliMergeableCollection.cxx:493 AliMergeableCollection.cxx:494 AliMergeableCollection.cxx:495 AliMergeableCollection.cxx:496 AliMergeableCollection.cxx:497 AliMergeableCollection.cxx:498 AliMergeableCollection.cxx:499 AliMergeableCollection.cxx:500 AliMergeableCollection.cxx:501 AliMergeableCollection.cxx:502 AliMergeableCollection.cxx:503 AliMergeableCollection.cxx:504 AliMergeableCollection.cxx:505 AliMergeableCollection.cxx:506 AliMergeableCollection.cxx:507 AliMergeableCollection.cxx:508 AliMergeableCollection.cxx:509 AliMergeableCollection.cxx:510 AliMergeableCollection.cxx:511 AliMergeableCollection.cxx:512 AliMergeableCollection.cxx:513 AliMergeableCollection.cxx:514 AliMergeableCollection.cxx:515 AliMergeableCollection.cxx:516 AliMergeableCollection.cxx:517 AliMergeableCollection.cxx:518 AliMergeableCollection.cxx:519 AliMergeableCollection.cxx:520 AliMergeableCollection.cxx:521 AliMergeableCollection.cxx:522 AliMergeableCollection.cxx:523 AliMergeableCollection.cxx:524 AliMergeableCollection.cxx:525 AliMergeableCollection.cxx:526 AliMergeableCollection.cxx:527 AliMergeableCollection.cxx:528 AliMergeableCollection.cxx:529 AliMergeableCollection.cxx:530 AliMergeableCollection.cxx:531 AliMergeableCollection.cxx:532 AliMergeableCollection.cxx:533 AliMergeableCollection.cxx:534 AliMergeableCollection.cxx:535 AliMergeableCollection.cxx:536 AliMergeableCollection.cxx:537 AliMergeableCollection.cxx:538 AliMergeableCollection.cxx:539 AliMergeableCollection.cxx:540 AliMergeableCollection.cxx:541 AliMergeableCollection.cxx:542 AliMergeableCollection.cxx:543 AliMergeableCollection.cxx:544 AliMergeableCollection.cxx:545 AliMergeableCollection.cxx:546 AliMergeableCollection.cxx:547 AliMergeableCollection.cxx:548 AliMergeableCollection.cxx:549 AliMergeableCollection.cxx:550 AliMergeableCollection.cxx:551 AliMergeableCollection.cxx:552 AliMergeableCollection.cxx:553 AliMergeableCollection.cxx:554 AliMergeableCollection.cxx:555 AliMergeableCollection.cxx:556 AliMergeableCollection.cxx:557 AliMergeableCollection.cxx:558 AliMergeableCollection.cxx:559 AliMergeableCollection.cxx:560 AliMergeableCollection.cxx:561 AliMergeableCollection.cxx:562 AliMergeableCollection.cxx:563 AliMergeableCollection.cxx:564 AliMergeableCollection.cxx:565 AliMergeableCollection.cxx:566 AliMergeableCollection.cxx:567 AliMergeableCollection.cxx:568 AliMergeableCollection.cxx:569 AliMergeableCollection.cxx:570 AliMergeableCollection.cxx:571 AliMergeableCollection.cxx:572 AliMergeableCollection.cxx:573 AliMergeableCollection.cxx:574 AliMergeableCollection.cxx:575 AliMergeableCollection.cxx:576 AliMergeableCollection.cxx:577 AliMergeableCollection.cxx:578 AliMergeableCollection.cxx:579 AliMergeableCollection.cxx:580 AliMergeableCollection.cxx:581 AliMergeableCollection.cxx:582 AliMergeableCollection.cxx:583 AliMergeableCollection.cxx:584 AliMergeableCollection.cxx:585 AliMergeableCollection.cxx:586 AliMergeableCollection.cxx:587 AliMergeableCollection.cxx:588 AliMergeableCollection.cxx:589 AliMergeableCollection.cxx:590 AliMergeableCollection.cxx:591 AliMergeableCollection.cxx:592 AliMergeableCollection.cxx:593 AliMergeableCollection.cxx:594 AliMergeableCollection.cxx:595 AliMergeableCollection.cxx:596 AliMergeableCollection.cxx:597 AliMergeableCollection.cxx:598 AliMergeableCollection.cxx:599 AliMergeableCollection.cxx:600 AliMergeableCollection.cxx:601 AliMergeableCollection.cxx:602 AliMergeableCollection.cxx:603 AliMergeableCollection.cxx:604 AliMergeableCollection.cxx:605 AliMergeableCollection.cxx:606 AliMergeableCollection.cxx:607 AliMergeableCollection.cxx:608 AliMergeableCollection.cxx:609 AliMergeableCollection.cxx:610 AliMergeableCollection.cxx:611 AliMergeableCollection.cxx:612 AliMergeableCollection.cxx:613 AliMergeableCollection.cxx:614 AliMergeableCollection.cxx:615 AliMergeableCollection.cxx:616 AliMergeableCollection.cxx:617 AliMergeableCollection.cxx:618 AliMergeableCollection.cxx:619 AliMergeableCollection.cxx:620 AliMergeableCollection.cxx:621 AliMergeableCollection.cxx:622 AliMergeableCollection.cxx:623 AliMergeableCollection.cxx:624 AliMergeableCollection.cxx:625 AliMergeableCollection.cxx:626 AliMergeableCollection.cxx:627 AliMergeableCollection.cxx:628 AliMergeableCollection.cxx:629 AliMergeableCollection.cxx:630 AliMergeableCollection.cxx:631 AliMergeableCollection.cxx:632 AliMergeableCollection.cxx:633 AliMergeableCollection.cxx:634 AliMergeableCollection.cxx:635 AliMergeableCollection.cxx:636 AliMergeableCollection.cxx:637 AliMergeableCollection.cxx:638 AliMergeableCollection.cxx:639 AliMergeableCollection.cxx:640 AliMergeableCollection.cxx:641 AliMergeableCollection.cxx:642 AliMergeableCollection.cxx:643 AliMergeableCollection.cxx:644 AliMergeableCollection.cxx:645 AliMergeableCollection.cxx:646 AliMergeableCollection.cxx:647 AliMergeableCollection.cxx:648 AliMergeableCollection.cxx:649 AliMergeableCollection.cxx:650 AliMergeableCollection.cxx:651 AliMergeableCollection.cxx:652 AliMergeableCollection.cxx:653 AliMergeableCollection.cxx:654 AliMergeableCollection.cxx:655 AliMergeableCollection.cxx:656 AliMergeableCollection.cxx:657 AliMergeableCollection.cxx:658 AliMergeableCollection.cxx:659 AliMergeableCollection.cxx:660 AliMergeableCollection.cxx:661 AliMergeableCollection.cxx:662 AliMergeableCollection.cxx:663 AliMergeableCollection.cxx:664 AliMergeableCollection.cxx:665 AliMergeableCollection.cxx:666 AliMergeableCollection.cxx:667 AliMergeableCollection.cxx:668 AliMergeableCollection.cxx:669 AliMergeableCollection.cxx:670 AliMergeableCollection.cxx:671 AliMergeableCollection.cxx:672 AliMergeableCollection.cxx:673 AliMergeableCollection.cxx:674 AliMergeableCollection.cxx:675 AliMergeableCollection.cxx:676 AliMergeableCollection.cxx:677 AliMergeableCollection.cxx:678 AliMergeableCollection.cxx:679 AliMergeableCollection.cxx:680 AliMergeableCollection.cxx:681 AliMergeableCollection.cxx:682 AliMergeableCollection.cxx:683 AliMergeableCollection.cxx:684 AliMergeableCollection.cxx:685 AliMergeableCollection.cxx:686 AliMergeableCollection.cxx:687 AliMergeableCollection.cxx:688 AliMergeableCollection.cxx:689 AliMergeableCollection.cxx:690 AliMergeableCollection.cxx:691 AliMergeableCollection.cxx:692 AliMergeableCollection.cxx:693 AliMergeableCollection.cxx:694 AliMergeableCollection.cxx:695 AliMergeableCollection.cxx:696 AliMergeableCollection.cxx:697 AliMergeableCollection.cxx:698 AliMergeableCollection.cxx:699 AliMergeableCollection.cxx:700 AliMergeableCollection.cxx:701 AliMergeableCollection.cxx:702 AliMergeableCollection.cxx:703 AliMergeableCollection.cxx:704 AliMergeableCollection.cxx:705 AliMergeableCollection.cxx:706 AliMergeableCollection.cxx:707 AliMergeableCollection.cxx:708 AliMergeableCollection.cxx:709 AliMergeableCollection.cxx:710 AliMergeableCollection.cxx:711 AliMergeableCollection.cxx:712 AliMergeableCollection.cxx:713 AliMergeableCollection.cxx:714 AliMergeableCollection.cxx:715 AliMergeableCollection.cxx:716 AliMergeableCollection.cxx:717 AliMergeableCollection.cxx:718 AliMergeableCollection.cxx:719 AliMergeableCollection.cxx:720 AliMergeableCollection.cxx:721 AliMergeableCollection.cxx:722 AliMergeableCollection.cxx:723 AliMergeableCollection.cxx:724 AliMergeableCollection.cxx:725 AliMergeableCollection.cxx:726 AliMergeableCollection.cxx:727 AliMergeableCollection.cxx:728 AliMergeableCollection.cxx:729 AliMergeableCollection.cxx:730 AliMergeableCollection.cxx:731 AliMergeableCollection.cxx:732 AliMergeableCollection.cxx:733 AliMergeableCollection.cxx:734 AliMergeableCollection.cxx:735 AliMergeableCollection.cxx:736 AliMergeableCollection.cxx:737 AliMergeableCollection.cxx:738 AliMergeableCollection.cxx:739 AliMergeableCollection.cxx:740 AliMergeableCollection.cxx:741 AliMergeableCollection.cxx:742 AliMergeableCollection.cxx:743 AliMergeableCollection.cxx:744 AliMergeableCollection.cxx:745 AliMergeableCollection.cxx:746 AliMergeableCollection.cxx:747 AliMergeableCollection.cxx:748 AliMergeableCollection.cxx:749 AliMergeableCollection.cxx:750 AliMergeableCollection.cxx:751 AliMergeableCollection.cxx:752 AliMergeableCollection.cxx:753 AliMergeableCollection.cxx:754 AliMergeableCollection.cxx:755 AliMergeableCollection.cxx:756 AliMergeableCollection.cxx:757 AliMergeableCollection.cxx:758 AliMergeableCollection.cxx:759 AliMergeableCollection.cxx:760 AliMergeableCollection.cxx:761 AliMergeableCollection.cxx:762 AliMergeableCollection.cxx:763 AliMergeableCollection.cxx:764 AliMergeableCollection.cxx:765 AliMergeableCollection.cxx:766 AliMergeableCollection.cxx:767 AliMergeableCollection.cxx:768 AliMergeableCollection.cxx:769 AliMergeableCollection.cxx:770 AliMergeableCollection.cxx:771 AliMergeableCollection.cxx:772 AliMergeableCollection.cxx:773 AliMergeableCollection.cxx:774 AliMergeableCollection.cxx:775 AliMergeableCollection.cxx:776 AliMergeableCollection.cxx:777 AliMergeableCollection.cxx:778 AliMergeableCollection.cxx:779 AliMergeableCollection.cxx:780 AliMergeableCollection.cxx:781 AliMergeableCollection.cxx:782 AliMergeableCollection.cxx:783 AliMergeableCollection.cxx:784 AliMergeableCollection.cxx:785 AliMergeableCollection.cxx:786 AliMergeableCollection.cxx:787 AliMergeableCollection.cxx:788 AliMergeableCollection.cxx:789 AliMergeableCollection.cxx:790 AliMergeableCollection.cxx:791 AliMergeableCollection.cxx:792 AliMergeableCollection.cxx:793 AliMergeableCollection.cxx:794 AliMergeableCollection.cxx:795 AliMergeableCollection.cxx:796 AliMergeableCollection.cxx:797 AliMergeableCollection.cxx:798 AliMergeableCollection.cxx:799 AliMergeableCollection.cxx:800 AliMergeableCollection.cxx:801 AliMergeableCollection.cxx:802 AliMergeableCollection.cxx:803 AliMergeableCollection.cxx:804 AliMergeableCollection.cxx:805 AliMergeableCollection.cxx:806 AliMergeableCollection.cxx:807 AliMergeableCollection.cxx:808 AliMergeableCollection.cxx:809 AliMergeableCollection.cxx:810 AliMergeableCollection.cxx:811 AliMergeableCollection.cxx:812 AliMergeableCollection.cxx:813 AliMergeableCollection.cxx:814 AliMergeableCollection.cxx:815 AliMergeableCollection.cxx:816 AliMergeableCollection.cxx:817 AliMergeableCollection.cxx:818 AliMergeableCollection.cxx:819 AliMergeableCollection.cxx:820 AliMergeableCollection.cxx:821 AliMergeableCollection.cxx:822 AliMergeableCollection.cxx:823 AliMergeableCollection.cxx:824 AliMergeableCollection.cxx:825 AliMergeableCollection.cxx:826 AliMergeableCollection.cxx:827 AliMergeableCollection.cxx:828 AliMergeableCollection.cxx:829 AliMergeableCollection.cxx:830 AliMergeableCollection.cxx:831 AliMergeableCollection.cxx:832 AliMergeableCollection.cxx:833 AliMergeableCollection.cxx:834 AliMergeableCollection.cxx:835 AliMergeableCollection.cxx:836 AliMergeableCollection.cxx:837 AliMergeableCollection.cxx:838 AliMergeableCollection.cxx:839 AliMergeableCollection.cxx:840 AliMergeableCollection.cxx:841 AliMergeableCollection.cxx:842 AliMergeableCollection.cxx:843 AliMergeableCollection.cxx:844 AliMergeableCollection.cxx:845 AliMergeableCollection.cxx:846 AliMergeableCollection.cxx:847 AliMergeableCollection.cxx:848 AliMergeableCollection.cxx:849 AliMergeableCollection.cxx:850 AliMergeableCollection.cxx:851 AliMergeableCollection.cxx:852 AliMergeableCollection.cxx:853 AliMergeableCollection.cxx:854 AliMergeableCollection.cxx:855 AliMergeableCollection.cxx:856 AliMergeableCollection.cxx:857 AliMergeableCollection.cxx:858 AliMergeableCollection.cxx:859 AliMergeableCollection.cxx:860 AliMergeableCollection.cxx:861 AliMergeableCollection.cxx:862 AliMergeableCollection.cxx:863 AliMergeableCollection.cxx:864 AliMergeableCollection.cxx:865 AliMergeableCollection.cxx:866 AliMergeableCollection.cxx:867 AliMergeableCollection.cxx:868 AliMergeableCollection.cxx:869 AliMergeableCollection.cxx:870 AliMergeableCollection.cxx:871 AliMergeableCollection.cxx:872 AliMergeableCollection.cxx:873 AliMergeableCollection.cxx:874 AliMergeableCollection.cxx:875 AliMergeableCollection.cxx:876 AliMergeableCollection.cxx:877 AliMergeableCollection.cxx:878 AliMergeableCollection.cxx:879 AliMergeableCollection.cxx:880 AliMergeableCollection.cxx:881 AliMergeableCollection.cxx:882 AliMergeableCollection.cxx:883 AliMergeableCollection.cxx:884 AliMergeableCollection.cxx:885 AliMergeableCollection.cxx:886 AliMergeableCollection.cxx:887 AliMergeableCollection.cxx:888 AliMergeableCollection.cxx:889 AliMergeableCollection.cxx:890 AliMergeableCollection.cxx:891 AliMergeableCollection.cxx:892 AliMergeableCollection.cxx:893 AliMergeableCollection.cxx:894 AliMergeableCollection.cxx:895 AliMergeableCollection.cxx:896 AliMergeableCollection.cxx:897 AliMergeableCollection.cxx:898 AliMergeableCollection.cxx:899 AliMergeableCollection.cxx:900 AliMergeableCollection.cxx:901 AliMergeableCollection.cxx:902 AliMergeableCollection.cxx:903 AliMergeableCollection.cxx:904 AliMergeableCollection.cxx:905 AliMergeableCollection.cxx:906 AliMergeableCollection.cxx:907 AliMergeableCollection.cxx:908 AliMergeableCollection.cxx:909 AliMergeableCollection.cxx:910 AliMergeableCollection.cxx:911 AliMergeableCollection.cxx:912 AliMergeableCollection.cxx:913 AliMergeableCollection.cxx:914 AliMergeableCollection.cxx:915 AliMergeableCollection.cxx:916 AliMergeableCollection.cxx:917 AliMergeableCollection.cxx:918 AliMergeableCollection.cxx:919 AliMergeableCollection.cxx:920 AliMergeableCollection.cxx:921 AliMergeableCollection.cxx:922 AliMergeableCollection.cxx:923 AliMergeableCollection.cxx:924 AliMergeableCollection.cxx:925 AliMergeableCollection.cxx:926 AliMergeableCollection.cxx:927 AliMergeableCollection.cxx:928 AliMergeableCollection.cxx:929 AliMergeableCollection.cxx:930 AliMergeableCollection.cxx:931 AliMergeableCollection.cxx:932 AliMergeableCollection.cxx:933 AliMergeableCollection.cxx:934 AliMergeableCollection.cxx:935 AliMergeableCollection.cxx:936 AliMergeableCollection.cxx:937 AliMergeableCollection.cxx:938 AliMergeableCollection.cxx:939 AliMergeableCollection.cxx:940 AliMergeableCollection.cxx:941 AliMergeableCollection.cxx:942 AliMergeableCollection.cxx:943 AliMergeableCollection.cxx:944 AliMergeableCollection.cxx:945 AliMergeableCollection.cxx:946 AliMergeableCollection.cxx:947 AliMergeableCollection.cxx:948 AliMergeableCollection.cxx:949 AliMergeableCollection.cxx:950 AliMergeableCollection.cxx:951 AliMergeableCollection.cxx:952 AliMergeableCollection.cxx:953 AliMergeableCollection.cxx:954 AliMergeableCollection.cxx:955 AliMergeableCollection.cxx:956 AliMergeableCollection.cxx:957 AliMergeableCollection.cxx:958 AliMergeableCollection.cxx:959 AliMergeableCollection.cxx:960 AliMergeableCollection.cxx:961 AliMergeableCollection.cxx:962 AliMergeableCollection.cxx:963 AliMergeableCollection.cxx:964 AliMergeableCollection.cxx:965 AliMergeableCollection.cxx:966 AliMergeableCollection.cxx:967 AliMergeableCollection.cxx:968 AliMergeableCollection.cxx:969 AliMergeableCollection.cxx:970 AliMergeableCollection.cxx:971 AliMergeableCollection.cxx:972 AliMergeableCollection.cxx:973 AliMergeableCollection.cxx:974 AliMergeableCollection.cxx:975 AliMergeableCollection.cxx:976 AliMergeableCollection.cxx:977 AliMergeableCollection.cxx:978 AliMergeableCollection.cxx:979 AliMergeableCollection.cxx:980 AliMergeableCollection.cxx:981 AliMergeableCollection.cxx:982 AliMergeableCollection.cxx:983 AliMergeableCollection.cxx:984 AliMergeableCollection.cxx:985 AliMergeableCollection.cxx:986 AliMergeableCollection.cxx:987 AliMergeableCollection.cxx:988 AliMergeableCollection.cxx:989 AliMergeableCollection.cxx:990 AliMergeableCollection.cxx:991 AliMergeableCollection.cxx:992 AliMergeableCollection.cxx:993 AliMergeableCollection.cxx:994 AliMergeableCollection.cxx:995 AliMergeableCollection.cxx:996 AliMergeableCollection.cxx:997 AliMergeableCollection.cxx:998 AliMergeableCollection.cxx:999 AliMergeableCollection.cxx:1000 AliMergeableCollection.cxx:1001 AliMergeableCollection.cxx:1002 AliMergeableCollection.cxx:1003 AliMergeableCollection.cxx:1004 AliMergeableCollection.cxx:1005 AliMergeableCollection.cxx:1006 AliMergeableCollection.cxx:1007 AliMergeableCollection.cxx:1008 AliMergeableCollection.cxx:1009 AliMergeableCollection.cxx:1010 AliMergeableCollection.cxx:1011 AliMergeableCollection.cxx:1012 AliMergeableCollection.cxx:1013 AliMergeableCollection.cxx:1014 AliMergeableCollection.cxx:1015 AliMergeableCollection.cxx:1016 AliMergeableCollection.cxx:1017 AliMergeableCollection.cxx:1018 AliMergeableCollection.cxx:1019 AliMergeableCollection.cxx:1020 AliMergeableCollection.cxx:1021 AliMergeableCollection.cxx:1022 AliMergeableCollection.cxx:1023 AliMergeableCollection.cxx:1024 AliMergeableCollection.cxx:1025 AliMergeableCollection.cxx:1026 AliMergeableCollection.cxx:1027 AliMergeableCollection.cxx:1028 AliMergeableCollection.cxx:1029 AliMergeableCollection.cxx:1030 AliMergeableCollection.cxx:1031 AliMergeableCollection.cxx:1032 AliMergeableCollection.cxx:1033 AliMergeableCollection.cxx:1034 AliMergeableCollection.cxx:1035 AliMergeableCollection.cxx:1036 AliMergeableCollection.cxx:1037 AliMergeableCollection.cxx:1038 AliMergeableCollection.cxx:1039 AliMergeableCollection.cxx:1040 AliMergeableCollection.cxx:1041 AliMergeableCollection.cxx:1042 AliMergeableCollection.cxx:1043 AliMergeableCollection.cxx:1044 AliMergeableCollection.cxx:1045 AliMergeableCollection.cxx:1046 AliMergeableCollection.cxx:1047 AliMergeableCollection.cxx:1048 AliMergeableCollection.cxx:1049 AliMergeableCollection.cxx:1050 AliMergeableCollection.cxx:1051 AliMergeableCollection.cxx:1052 AliMergeableCollection.cxx:1053 AliMergeableCollection.cxx:1054 AliMergeableCollection.cxx:1055 AliMergeableCollection.cxx:1056 AliMergeableCollection.cxx:1057 AliMergeableCollection.cxx:1058 AliMergeableCollection.cxx:1059 AliMergeableCollection.cxx:1060 AliMergeableCollection.cxx:1061 AliMergeableCollection.cxx:1062 AliMergeableCollection.cxx:1063 AliMergeableCollection.cxx:1064 AliMergeableCollection.cxx:1065 AliMergeableCollection.cxx:1066 AliMergeableCollection.cxx:1067 AliMergeableCollection.cxx:1068 AliMergeableCollection.cxx:1069 AliMergeableCollection.cxx:1070 AliMergeableCollection.cxx:1071 AliMergeableCollection.cxx:1072 AliMergeableCollection.cxx:1073 AliMergeableCollection.cxx:1074 AliMergeableCollection.cxx:1075 AliMergeableCollection.cxx:1076 AliMergeableCollection.cxx:1077 AliMergeableCollection.cxx:1078 AliMergeableCollection.cxx:1079 AliMergeableCollection.cxx:1080 AliMergeableCollection.cxx:1081 AliMergeableCollection.cxx:1082 AliMergeableCollection.cxx:1083 AliMergeableCollection.cxx:1084 AliMergeableCollection.cxx:1085 AliMergeableCollection.cxx:1086 AliMergeableCollection.cxx:1087 AliMergeableCollection.cxx:1088 AliMergeableCollection.cxx:1089 AliMergeableCollection.cxx:1090 AliMergeableCollection.cxx:1091 AliMergeableCollection.cxx:1092 AliMergeableCollection.cxx:1093 AliMergeableCollection.cxx:1094 AliMergeableCollection.cxx:1095 AliMergeableCollection.cxx:1096 AliMergeableCollection.cxx:1097 AliMergeableCollection.cxx:1098 AliMergeableCollection.cxx:1099 AliMergeableCollection.cxx:1100 AliMergeableCollection.cxx:1101 AliMergeableCollection.cxx:1102 AliMergeableCollection.cxx:1103 AliMergeableCollection.cxx:1104 AliMergeableCollection.cxx:1105 AliMergeableCollection.cxx:1106 AliMergeableCollection.cxx:1107 AliMergeableCollection.cxx:1108 AliMergeableCollection.cxx:1109 AliMergeableCollection.cxx:1110 AliMergeableCollection.cxx:1111 AliMergeableCollection.cxx:1112 AliMergeableCollection.cxx:1113 AliMergeableCollection.cxx:1114 AliMergeableCollection.cxx:1115 AliMergeableCollection.cxx:1116 AliMergeableCollection.cxx:1117 AliMergeableCollection.cxx:1118 AliMergeableCollection.cxx:1119 AliMergeableCollection.cxx:1120 AliMergeableCollection.cxx:1121 AliMergeableCollection.cxx:1122 AliMergeableCollection.cxx:1123 AliMergeableCollection.cxx:1124 AliMergeableCollection.cxx:1125 AliMergeableCollection.cxx:1126 AliMergeableCollection.cxx:1127 AliMergeableCollection.cxx:1128 AliMergeableCollection.cxx:1129 AliMergeableCollection.cxx:1130 AliMergeableCollection.cxx:1131 AliMergeableCollection.cxx:1132 AliMergeableCollection.cxx:1133 AliMergeableCollection.cxx:1134 AliMergeableCollection.cxx:1135 AliMergeableCollection.cxx:1136 AliMergeableCollection.cxx:1137 AliMergeableCollection.cxx:1138 AliMergeableCollection.cxx:1139 AliMergeableCollection.cxx:1140 AliMergeableCollection.cxx:1141 AliMergeableCollection.cxx:1142 AliMergeableCollection.cxx:1143 AliMergeableCollection.cxx:1144 AliMergeableCollection.cxx:1145 AliMergeableCollection.cxx:1146 AliMergeableCollection.cxx:1147 AliMergeableCollection.cxx:1148 AliMergeableCollection.cxx:1149 AliMergeableCollection.cxx:1150 AliMergeableCollection.cxx:1151 AliMergeableCollection.cxx:1152 AliMergeableCollection.cxx:1153 AliMergeableCollection.cxx:1154 AliMergeableCollection.cxx:1155 AliMergeableCollection.cxx:1156 AliMergeableCollection.cxx:1157 AliMergeableCollection.cxx:1158 AliMergeableCollection.cxx:1159 AliMergeableCollection.cxx:1160 AliMergeableCollection.cxx:1161 AliMergeableCollection.cxx:1162 AliMergeableCollection.cxx:1163 AliMergeableCollection.cxx:1164 AliMergeableCollection.cxx:1165 AliMergeableCollection.cxx:1166 AliMergeableCollection.cxx:1167 AliMergeableCollection.cxx:1168 AliMergeableCollection.cxx:1169 AliMergeableCollection.cxx:1170 AliMergeableCollection.cxx:1171 AliMergeableCollection.cxx:1172 AliMergeableCollection.cxx:1173 AliMergeableCollection.cxx:1174 AliMergeableCollection.cxx:1175 AliMergeableCollection.cxx:1176 AliMergeableCollection.cxx:1177 AliMergeableCollection.cxx:1178 AliMergeableCollection.cxx:1179 AliMergeableCollection.cxx:1180 AliMergeableCollection.cxx:1181 AliMergeableCollection.cxx:1182 AliMergeableCollection.cxx:1183 AliMergeableCollection.cxx:1184 AliMergeableCollection.cxx:1185 AliMergeableCollection.cxx:1186 AliMergeableCollection.cxx:1187 AliMergeableCollection.cxx:1188 AliMergeableCollection.cxx:1189 AliMergeableCollection.cxx:1190 AliMergeableCollection.cxx:1191 AliMergeableCollection.cxx:1192 AliMergeableCollection.cxx:1193 AliMergeableCollection.cxx:1194 AliMergeableCollection.cxx:1195 AliMergeableCollection.cxx:1196 AliMergeableCollection.cxx:1197 AliMergeableCollection.cxx:1198 AliMergeableCollection.cxx:1199 AliMergeableCollection.cxx:1200 AliMergeableCollection.cxx:1201 AliMergeableCollection.cxx:1202 AliMergeableCollection.cxx:1203 AliMergeableCollection.cxx:1204 AliMergeableCollection.cxx:1205 AliMergeableCollection.cxx:1206 AliMergeableCollection.cxx:1207 AliMergeableCollection.cxx:1208 AliMergeableCollection.cxx:1209 AliMergeableCollection.cxx:1210 AliMergeableCollection.cxx:1211 AliMergeableCollection.cxx:1212 AliMergeableCollection.cxx:1213 AliMergeableCollection.cxx:1214 AliMergeableCollection.cxx:1215 AliMergeableCollection.cxx:1216 AliMergeableCollection.cxx:1217 AliMergeableCollection.cxx:1218 AliMergeableCollection.cxx:1219 AliMergeableCollection.cxx:1220 AliMergeableCollection.cxx:1221 AliMergeableCollection.cxx:1222 AliMergeableCollection.cxx:1223 AliMergeableCollection.cxx:1224 AliMergeableCollection.cxx:1225 AliMergeableCollection.cxx:1226 AliMergeableCollection.cxx:1227 AliMergeableCollection.cxx:1228 AliMergeableCollection.cxx:1229 AliMergeableCollection.cxx:1230 AliMergeableCollection.cxx:1231 AliMergeableCollection.cxx:1232 AliMergeableCollection.cxx:1233 AliMergeableCollection.cxx:1234 AliMergeableCollection.cxx:1235 AliMergeableCollection.cxx:1236 AliMergeableCollection.cxx:1237 AliMergeableCollection.cxx:1238 AliMergeableCollection.cxx:1239 AliMergeableCollection.cxx:1240 AliMergeableCollection.cxx:1241 AliMergeableCollection.cxx:1242 AliMergeableCollection.cxx:1243 AliMergeableCollection.cxx:1244 AliMergeableCollection.cxx:1245 AliMergeableCollection.cxx:1246 AliMergeableCollection.cxx:1247 AliMergeableCollection.cxx:1248 AliMergeableCollection.cxx:1249 AliMergeableCollection.cxx:1250 AliMergeableCollection.cxx:1251 AliMergeableCollection.cxx:1252 AliMergeableCollection.cxx:1253 AliMergeableCollection.cxx:1254 AliMergeableCollection.cxx:1255 AliMergeableCollection.cxx:1256 AliMergeableCollection.cxx:1257 AliMergeableCollection.cxx:1258 AliMergeableCollection.cxx:1259 AliMergeableCollection.cxx:1260 AliMergeableCollection.cxx:1261 AliMergeableCollection.cxx:1262 AliMergeableCollection.cxx:1263 AliMergeableCollection.cxx:1264 AliMergeableCollection.cxx:1265 AliMergeableCollection.cxx:1266 AliMergeableCollection.cxx:1267 AliMergeableCollection.cxx:1268 AliMergeableCollection.cxx:1269 AliMergeableCollection.cxx:1270 AliMergeableCollection.cxx:1271 AliMergeableCollection.cxx:1272 AliMergeableCollection.cxx:1273 AliMergeableCollection.cxx:1274 AliMergeableCollection.cxx:1275 AliMergeableCollection.cxx:1276 AliMergeableCollection.cxx:1277 AliMergeableCollection.cxx:1278 AliMergeableCollection.cxx:1279 AliMergeableCollection.cxx:1280 AliMergeableCollection.cxx:1281 AliMergeableCollection.cxx:1282 AliMergeableCollection.cxx:1283 AliMergeableCollection.cxx:1284 AliMergeableCollection.cxx:1285 AliMergeableCollection.cxx:1286 AliMergeableCollection.cxx:1287 AliMergeableCollection.cxx:1288 AliMergeableCollection.cxx:1289 AliMergeableCollection.cxx:1290 AliMergeableCollection.cxx:1291 AliMergeableCollection.cxx:1292 AliMergeableCollection.cxx:1293 AliMergeableCollection.cxx:1294 AliMergeableCollection.cxx:1295 AliMergeableCollection.cxx:1296 AliMergeableCollection.cxx:1297 AliMergeableCollection.cxx:1298 AliMergeableCollection.cxx:1299 AliMergeableCollection.cxx:1300 AliMergeableCollection.cxx:1301 AliMergeableCollection.cxx:1302 AliMergeableCollection.cxx:1303 AliMergeableCollection.cxx:1304 AliMergeableCollection.cxx:1305 AliMergeableCollection.cxx:1306 AliMergeableCollection.cxx:1307 AliMergeableCollection.cxx:1308 AliMergeableCollection.cxx:1309 AliMergeableCollection.cxx:1310 AliMergeableCollection.cxx:1311 AliMergeableCollection.cxx:1312 AliMergeableCollection.cxx:1313 AliMergeableCollection.cxx:1314 AliMergeableCollection.cxx:1315 AliMergeableCollection.cxx:1316 AliMergeableCollection.cxx:1317 AliMergeableCollection.cxx:1318 AliMergeableCollection.cxx:1319 AliMergeableCollection.cxx:1320 AliMergeableCollection.cxx:1321 AliMergeableCollection.cxx:1322 AliMergeableCollection.cxx:1323 AliMergeableCollection.cxx:1324 AliMergeableCollection.cxx:1325 AliMergeableCollection.cxx:1326 AliMergeableCollection.cxx:1327 AliMergeableCollection.cxx:1328 AliMergeableCollection.cxx:1329 AliMergeableCollection.cxx:1330 AliMergeableCollection.cxx:1331 AliMergeableCollection.cxx:1332 AliMergeableCollection.cxx:1333 AliMergeableCollection.cxx:1334 AliMergeableCollection.cxx:1335 AliMergeableCollection.cxx:1336 AliMergeableCollection.cxx:1337 AliMergeableCollection.cxx:1338 AliMergeableCollection.cxx:1339 AliMergeableCollection.cxx:1340 AliMergeableCollection.cxx:1341 AliMergeableCollection.cxx:1342 AliMergeableCollection.cxx:1343 AliMergeableCollection.cxx:1344 AliMergeableCollection.cxx:1345 AliMergeableCollection.cxx:1346 AliMergeableCollection.cxx:1347 AliMergeableCollection.cxx:1348 AliMergeableCollection.cxx:1349 AliMergeableCollection.cxx:1350 AliMergeableCollection.cxx:1351 AliMergeableCollection.cxx:1352 AliMergeableCollection.cxx:1353 AliMergeableCollection.cxx:1354 AliMergeableCollection.cxx:1355 AliMergeableCollection.cxx:1356 AliMergeableCollection.cxx:1357 AliMergeableCollection.cxx:1358 AliMergeableCollection.cxx:1359 AliMergeableCollection.cxx:1360 AliMergeableCollection.cxx:1361 AliMergeableCollection.cxx:1362 AliMergeableCollection.cxx:1363 AliMergeableCollection.cxx:1364 AliMergeableCollection.cxx:1365 AliMergeableCollection.cxx:1366 AliMergeableCollection.cxx:1367 AliMergeableCollection.cxx:1368 AliMergeableCollection.cxx:1369 AliMergeableCollection.cxx:1370 AliMergeableCollection.cxx:1371 AliMergeableCollection.cxx:1372 AliMergeableCollection.cxx:1373 AliMergeableCollection.cxx:1374 AliMergeableCollection.cxx:1375 AliMergeableCollection.cxx:1376 AliMergeableCollection.cxx:1377 AliMergeableCollection.cxx:1378 AliMergeableCollection.cxx:1379 AliMergeableCollection.cxx:1380 AliMergeableCollection.cxx:1381 AliMergeableCollection.cxx:1382 AliMergeableCollection.cxx:1383 AliMergeableCollection.cxx:1384 AliMergeableCollection.cxx:1385 AliMergeableCollection.cxx:1386 AliMergeableCollection.cxx:1387 AliMergeableCollection.cxx:1388 AliMergeableCollection.cxx:1389 AliMergeableCollection.cxx:1390 AliMergeableCollection.cxx:1391 AliMergeableCollection.cxx:1392 AliMergeableCollection.cxx:1393 AliMergeableCollection.cxx:1394 AliMergeableCollection.cxx:1395 AliMergeableCollection.cxx:1396 AliMergeableCollection.cxx:1397 AliMergeableCollection.cxx:1398 AliMergeableCollection.cxx:1399 AliMergeableCollection.cxx:1400 AliMergeableCollection.cxx:1401 AliMergeableCollection.cxx:1402 AliMergeableCollection.cxx:1403 AliMergeableCollection.cxx:1404 AliMergeableCollection.cxx:1405 AliMergeableCollection.cxx:1406 AliMergeableCollection.cxx:1407 AliMergeableCollection.cxx:1408 AliMergeableCollection.cxx:1409 AliMergeableCollection.cxx:1410 AliMergeableCollection.cxx:1411 AliMergeableCollection.cxx:1412 AliMergeableCollection.cxx:1413 AliMergeableCollection.cxx:1414 AliMergeableCollection.cxx:1415 AliMergeableCollection.cxx:1416 AliMergeableCollection.cxx:1417 AliMergeableCollection.cxx:1418 AliMergeableCollection.cxx:1419 AliMergeableCollection.cxx:1420 AliMergeableCollection.cxx:1421 AliMergeableCollection.cxx:1422 AliMergeableCollection.cxx:1423 AliMergeableCollection.cxx:1424 AliMergeableCollection.cxx:1425 AliMergeableCollection.cxx:1426 AliMergeableCollection.cxx:1427 AliMergeableCollection.cxx:1428 AliMergeableCollection.cxx:1429 AliMergeableCollection.cxx:1430 AliMergeableCollection.cxx:1431 AliMergeableCollection.cxx:1432 AliMergeableCollection.cxx:1433 AliMergeableCollection.cxx:1434 AliMergeableCollection.cxx:1435 AliMergeableCollection.cxx:1436 AliMergeableCollection.cxx:1437 AliMergeableCollection.cxx:1438 AliMergeableCollection.cxx:1439 AliMergeableCollection.cxx:1440 AliMergeableCollection.cxx:1441 AliMergeableCollection.cxx:1442 AliMergeableCollection.cxx:1443 AliMergeableCollection.cxx:1444 AliMergeableCollection.cxx:1445 AliMergeableCollection.cxx:1446 AliMergeableCollection.cxx:1447 AliMergeableCollection.cxx:1448 AliMergeableCollection.cxx:1449 AliMergeableCollection.cxx:1450 AliMergeableCollection.cxx:1451 AliMergeableCollection.cxx:1452 AliMergeableCollection.cxx:1453 AliMergeableCollection.cxx:1454 AliMergeableCollection.cxx:1455 AliMergeableCollection.cxx:1456 AliMergeableCollection.cxx:1457 AliMergeableCollection.cxx:1458 AliMergeableCollection.cxx:1459 AliMergeableCollection.cxx:1460 AliMergeableCollection.cxx:1461 AliMergeableCollection.cxx:1462 AliMergeableCollection.cxx:1463 AliMergeableCollection.cxx:1464 AliMergeableCollection.cxx:1465 AliMergeableCollection.cxx:1466 AliMergeableCollection.cxx:1467 AliMergeableCollection.cxx:1468 AliMergeableCollection.cxx:1469 AliMergeableCollection.cxx:1470 AliMergeableCollection.cxx:1471 AliMergeableCollection.cxx:1472 AliMergeableCollection.cxx:1473 AliMergeableCollection.cxx:1474 AliMergeableCollection.cxx:1475 AliMergeableCollection.cxx:1476 AliMergeableCollection.cxx:1477 AliMergeableCollection.cxx:1478 AliMergeableCollection.cxx:1479 AliMergeableCollection.cxx:1480 AliMergeableCollection.cxx:1481 AliMergeableCollection.cxx:1482 AliMergeableCollection.cxx:1483 AliMergeableCollection.cxx:1484 AliMergeableCollection.cxx:1485 AliMergeableCollection.cxx:1486 AliMergeableCollection.cxx:1487 AliMergeableCollection.cxx:1488 AliMergeableCollection.cxx:1489 AliMergeableCollection.cxx:1490 AliMergeableCollection.cxx:1491 AliMergeableCollection.cxx:1492 AliMergeableCollection.cxx:1493 AliMergeableCollection.cxx:1494 AliMergeableCollection.cxx:1495 AliMergeableCollection.cxx:1496 AliMergeableCollection.cxx:1497 AliMergeableCollection.cxx:1498 AliMergeableCollection.cxx:1499