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$ */

//-----------------------------------------------------------------
//           Implementation of the AliXMLCollection class
//   This is the class that creates XML collections after querying the tags
//   Origin: Panos Christakoglou, UOA-CERN, Panos.Christakoglou@cern.ch
//-----------------------------------------------------------------

#include <cstdlib>
//ROOT
#include <Riostream.h>
#include <TEntryList.h>
#include <TList.h>
#include <TMap.h>
#include <TObjArray.h>
#include <TObjString.h>
#include <TString.h>
#include <TXMLEngine.h>
#include "AliLog.h"

#include "AliXMLCollection.h"

ClassImp(AliXMLCollection)
//___________________________________________________________________________
  AliXMLCollection::AliXMLCollection() :
    TGridCollection(),
    fXmlFile(),
    fEventList(0),
    fEventListIter(0),
    fCurrent(0),
    fCollectionName(),
    fout(),
    fTotalEvents(0),
    fAcceptedEvents(0),
    fRejectedRun(0),
    fRejectedLHC(0),
    fRejectedDet(0),
    fRejectedEvt(0)
{
  //Default constructor
}

//___________________________________________________________________________
AliXMLCollection::AliXMLCollection(const char *localcollectionfile) :
    TGridCollection(),
    fXmlFile(localcollectionfile),
    fEventList(0),
    fEventListIter(0),
    fCurrent(0),
    fCollectionName(),
    fout(),
    fTotalEvents(0),
    fAcceptedEvents(0),
    fRejectedRun(0),
    fRejectedLHC(0),
    fRejectedDet(0),
    fRejectedEvt(0)
 {
   // Create Alien event collection, by reading collection for the specified
   // file.

   fEventList = new TList();
   fEventList->SetOwner(kTRUE);
   fEventListIter = new TIter(fEventList);

   if (localcollectionfile!=0) {
     ParseXML();
   }
}

//___________________________________________________________________________
AliXMLCollection::AliXMLCollection(const AliXMLCollection& collection):
  TGridCollection(collection),
  fXmlFile(collection.fXmlFile),
  fEventList(0),
  fEventListIter(0),
  fCurrent(0),
  fCollectionName(collection.fCollectionName),
  fout(),
  fTotalEvents(0),
  fAcceptedEvents(0),
  fRejectedRun(0),
  fRejectedLHC(0),
  fRejectedDet(0),
  fRejectedEvt(0)
{
  //copy constructor

  if (collection.fEventList) fEventList = new TList();
  if (collection.fEventListIter) fEventListIter = new TIter(fEventList);
  if (collection.fCurrent) fCurrent = 0;
}

//___________________________________________________________________________
AliXMLCollection::~AliXMLCollection() 
{
  //Destructor
  delete fEventList;
  delete fEventListIter;
}

//___________________________________________________________________________
Bool_t AliXMLCollection::WriteHeader() {
  //Creates the xml output file

  TString xmlName = fCollectionName;
  xmlName += ".xml";

  TString collectionHeader = "<collection name=";
  collectionHeader += "\"";
  collectionHeader += fCollectionName;
  collectionHeader += "\"";
  collectionHeader += ">";
  
  // Open the output stream
  fout.open(xmlName);
  fout<<"<?xml version=\"1.0\"?>\n";
  fout<<"<alien>\n";
  fout<<"  "<<collectionHeader<<"\n";  

  return kTRUE;
}

//___________________________________________________________________________
Bool_t AliXMLCollection::WriteSummary(Int_t aTotal, Int_t aAccepted, Int_t aRejRun, Int_t aRejLHC, Int_t aRejDet, Int_t aRejEvt)
{
  // Write selection summary

  TString collectionSummary = "<summary";
  collectionSummary += " acceptedEvents=\"";
  collectionSummary += aAccepted;
  collectionSummary += "\" totalEvent=\"";
  collectionSummary += aTotal;
  collectionSummary += "\" rejectedRun=\"";
  collectionSummary += aRejRun;
  collectionSummary += "\" rejectedLHC=\"";
  collectionSummary += aRejLHC;
  collectionSummary += "\" rejectedDet=\"";
  collectionSummary += aRejDet;
  collectionSummary += "\" rejectedEvt=\"";
  collectionSummary += aRejEvt;
  collectionSummary += "\" />";
  
  // Open the output stream
  fout<<"  "<<collectionSummary<<"\n";  

  return kTRUE;
}

//___________________________________________________________________________
Bool_t AliXMLCollection::WriteBody(Int_t counter, const char* guid, const char* lfn, const char* turl, TEntryList* list) 
{
  //Writes the body of the xml collection
  TString listline;
  for(Int_t i = 0; i < list->GetN(); i++) {
    listline += list->GetEntry(i);
    listline += ",";
  }  
  listline = listline(0,listline.Length()-1);

  TString line0 = "<event name=\"";
  line0 += counter;
  line0 += "\">";
  
  TString line1 = "<file name=\"AliESDs.root\" ";
  line1 += "guid=\"";
  line1 += guid;
  line1 += "\" ";
  line1 += "lfn=\"";
  line1 += lfn;
  line1 += "\" ";
  line1 += "turl=\"";
  line1 += turl;
  line1 += "\" ";
  line1 += "evlist=\"";
  line1 += listline;
  line1 += "\"";
  line1 += " />";
  
  fout<<"    "<<line0<<"\n";
  fout<<"      "<<line1<<"\n";
  fout<<"    </event>\n";
  
  return kTRUE;
}
//___________________________________________________________________________
Bool_t AliXMLCollection::WriteBody(Int_t counter, const char* guid, const char *lfn, const char *turl, TEntryList* list, Int_t accSum, Int_t rejSum)
{
  //Writes the body of the xml collection with tag cuts summary
  TString listline;
  for(Int_t i = 0; i < list->GetN(); i++) {
    listline += list->GetEntry(i);
    listline += ",";
  }  
  listline = listline(0,listline.Length()-1);

  TString line0 = "<event name=\"";
  line0 += counter;
  line0 += "\">";
  
  TString line1 = "<file name=\"AliESDs.root\" ";
  line1 += "guid=\"";
  line1 += guid;
  line1 += "\" ";
  line1 += "lfn=\"";
  line1 += lfn;
  line1 += "\" ";
  line1 += "turl=\"";
  line1 += turl;
  line1 += "\" ";
  line1 += "evlist=\"";
  line1 += listline;
  line1 += "\" ";
  line1 += "cutsumm=\"";
  line1 += accSum;
  line1 += ",";
  line1 += rejSum;
  line1 += "\"";
  line1 += " />";
  
  fout<<"    "<<line0<<"\n";
  fout<<"      "<<line1<<"\n";
  fout<<"    </event>\n";
  
  return kTRUE;
  
}
//___________________________________________________________________________
Bool_t AliXMLCollection::Export() {
  //Closes the stream
  fout<<"  "<<"</collection>\n";
  fout<<"</alien>\n";

  fout.close();

  return kTRUE;
}

//___________________________________________________________________________
void AliXMLCollection::Reset() {
  // Reset file iterator.
  
  fEventListIter->Reset();
  fCurrent = 0;
}

//___________________________________________________________________________
TMap *AliXMLCollection::Next() {
  // Return next event file map.
  
  fCurrent = (TMap*)fEventListIter->Next();
  return fCurrent;
}

//___________________________________________________________________________
const char *AliXMLCollection::GetTURL(const char* filename) {
  // Get a file's transport URL (TURL). Returns 0 in case of error.
  
  if (fCurrent) {
    TMap *obj = (TMap*)fCurrent->GetValue(filename);
    if (obj) {
      if (obj->GetValue("turl")) {
	return ( ((TObjString*)obj->GetValue("turl"))->GetName());
      }
    }
  }
  AliError(Form("cannot get TURL of file %s",filename));
  return 0;
}

//___________________________________________________________________________
const char *AliXMLCollection::GetGUID(const char* filename) {
  // Get a file's transport UID. Returns 0 in case of error.
  
  if (fCurrent) {
    TMap *obj = (TMap*)fCurrent->GetValue(filename);
    if (obj) {
      if (obj->GetValue("guid")) {
	return ( ((TObjString*)obj->GetValue("guid"))->GetName());
      }
    }
  }
  AliError(Form("cannot get GUID of file %s",filename));
  return 0;
}

//___________________________________________________________________________
TEntryList *AliXMLCollection::GetEventList(const char *filename) const {
  // Get a file's event list. Returns 0 in case of error.

  if (fCurrent) {
    TMap *obj = (TMap *) fCurrent->GetValue(filename);
    if (obj) {
      if (obj->GetValue("evlist")) {
	return ((TEntryList *) obj->GetValue("evlist"));
      }
    }
  }
  AliError(Form("cannot get evelist of file %s", filename));
  return 0;
}

//___________________________________________________________________________
Bool_t AliXMLCollection::Remove(TMap * map) {
  // Return next event file map.
  if (fEventList->Remove(map)) {
    return kTRUE;
  } else {
    return kFALSE;
  }
}

//___________________________________________________________________________
const char *AliXMLCollection::GetLFN(const char* ) {
  // Get a file's LFN. Returns 0 in case of error.
  
  if (fCurrent) {
    TMap *obj = (TMap *) fCurrent->GetValue("");
    if (obj) {
      if (obj->GetValue("lfn")) {
	return (((TObjString *) obj->GetValue("lfn"))->GetName());
      }
    }
  }
  AliError("cannot get LFN");
  return 0;
}

//__________________________________________________________________________
const char *AliXMLCollection::GetCutSumm() {
  // Get a file's tag cuts summary. Returns 0 in case of error.
  
  if (fCurrent) {
    TMap *obj = (TMap *) fCurrent->GetValue("");
    if (obj) {
      if (obj->GetValue("cutsumm")) {
	return (((TObjString *) obj->GetValue("cutsumm"))->GetName());
      }
    }
  }
  AliError("cannot get Tag Cut Summary");
  return 0;

}
//__________________________________________________________________________
Bool_t AliXMLCollection::OverlapCollection(TGridCollection * comparator) {
  // return kTRUE if comparator overlaps with this
  if ((!comparator)) return kFALSE;
  
 loopagain:
  // loop over col1 and try to find it in col2
  this->Reset();
  // loop over all elements in reference (=this)
  TMap *overlapmap;
  while ((overlapmap = this->Next())) {
    comparator->Reset();
    Bool_t found = kFALSE;
    // try to find in the comparator collection
    while ((comparator->Next())) {
      TString s1 = this->GetLFN("");
      TString s2 = comparator->GetLFN("");
      if (s1 == s2) {
	found = kTRUE;
	break;
      }
    }
    if (!found) {
      this->Remove(overlapmap);
      goto loopagain;
    }
  }
  return kTRUE;
}

//___________________________________________________________________________
AliXMLCollection *AliXMLCollection::Open(const char *localcollectionfile) {
  // Static method used to create an Alien event collection, by reading
  // collection for the specified file.
  
  AliXMLCollection *collection = new AliXMLCollection(localcollectionfile);
  return collection;
}

//___________________________________________________________________________
void AliXMLCollection::ParseXML() {
  // Parse event file collection XML file.
  
  TXMLEngine xml;
  
  XMLDocPointer_t xdoc = xml.ParseFile(fXmlFile);
  if (!xdoc) {
    AliError(Form("cannot parse the xml file %s",fXmlFile.Data()));
    return;
  }

  XMLNodePointer_t xalien = xml.DocGetRootElement(xdoc);
  if (!xalien) {
    AliError(Form("cannot find the <alien> tag in %s",fXmlFile.Data()));
    return;
  }
  
  XMLNodePointer_t xcollection = xml.GetChild(xalien);
  if (!xcollection) {
    AliError(Form("cannot find the <collection> tag in %s",fXmlFile.Data()));
    return;
  }
  
  XMLNodePointer_t xevent = xml.GetChild(xcollection);;
  if (!xevent) {
    AliError(Form("cannot find the <event> tag in %s",fXmlFile.Data()));
    return;
  }
  
  do {
    if (xml.GetAttr(xevent, "name")) {
      TMap *files = new TMap();
            
      // files
      XMLNodePointer_t xfile = xml.GetChild(xevent);
      if (!xfile) continue;

      Bool_t firstfile=kTRUE;
      do {
	// here we have an event file
	// get the attributes;
	xml.GetAttr(xfile, "lfn");
	xml.GetAttr(xfile, "turl");
	
	TMap *attributes = new TMap();
	TObjString *oname = new TObjString(xml.GetAttr(xfile,"name"));
	TObjString *oturl = new TObjString(xml.GetAttr(xfile,"turl"));
	TObjString *olfn  = new TObjString(xml.GetAttr(xfile,"lfn"));
	TObjString *oguid = new TObjString(xml.GetAttr(xfile,"guid"));

	TObjString *oevlist;
	if (xml.GetAttr(xfile, "evlist"))
	  oevlist = new TObjString(xml.GetAttr(xfile, "evlist"));
	else
	  oevlist = 0;

	TObjString *otagsumm;
	if (xml.GetAttr(xfile, "cutsumm"))
	  otagsumm = new TObjString(xml.GetAttr(xfile, "cutsumm"));
	else 
	  otagsumm = 0;

	if (oevlist) {
	  AliDebug(1,Form("Collection: %s - turl: %s eventlist: %s",
                    fXmlFile.Data(),oturl->GetName(),oevlist->GetName()));
	  TEntryList *xmlevlist = new TEntryList(oturl->GetName(), oguid->GetName());
	  if (strcmp(oevlist->GetName(),"") != 0) {
	    TString stringevlist = oevlist->GetName();
	    TObjArray *evlist = stringevlist.Tokenize(",");
	    for (Int_t n = 0; n < evlist->GetEntries(); n++)  xmlevlist->Enter(atol(((TObjString *) evlist->At(n))->GetName()));
	    delete evlist;
	  }
	  attributes->Add(new TObjString("evlist"), xmlevlist);
	}
	
	attributes->Add(new TObjString("name"),oname);
	attributes->Add(new TObjString("turl"),oturl);
	attributes->Add(new TObjString("lfn"),olfn);
	attributes->Add(new TObjString("guid"),oguid);
	if (otagsumm)
	  attributes->Add(new TObjString("cutsumm"),otagsumm);
	files->Add(new TObjString(xml.GetAttr(xfile,"name")) , attributes);
	
	// we add the first file always as a file without name to the map
	if (firstfile) {
	  files->Add(new TObjString(""),attributes);
	  firstfile=kFALSE;
	}
      } while ((xfile = xml.GetNext(xfile)));
      fEventList->Add(files);
    }
    else {
      if (xml.GetAttr(xevent, "acceptedEvents")) {
	// Read list summary
	fAcceptedEvents = atoi(xml.GetAttr(xevent, "acceptedEvents"));
	fTotalEvents = atoi(xml.GetAttr(xevent, "totalEvent"));
	fRejectedRun = atoi(xml.GetAttr(xevent, "rejectedRun"));
	fRejectedLHC = atoi(xml.GetAttr(xevent, "rejectedLHC"));
	fRejectedDet = atoi(xml.GetAttr(xevent, "rejectedDet"));
	fRejectedEvt = atoi(xml.GetAttr(xevent, "rejectedEvt"));
      }
    }
  } while ((xevent =  xml.GetNext(xevent)));
}

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