ROOT logo
/**************************************************************************
 * Author: Panos Christakoglou.                                           *
 * 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$ */

//-----------------------------------------------------------------
//           AliAODTagCreator class
//   This is the class to deal with the tag creation (post process)
//   Origin: Panos Christakoglou, UOA-CERN, Panos.Christakoglou@cern.ch
//-----------------------------------------------------------------

//ROOT
#include <Riostream.h>
#include <TFile.h>
#include <TString.h>
#include <TTree.h>
#include <TSystem.h>
#include <TChain.h>
#include <TLorentzVector.h>
#include <TRefArray.h>

//ROOT-AliEn
#include <TGrid.h>
#include <TGridResult.h>

//AliRoot
#include "AliRunTag.h"
#include "AliEventTag.h"
#include "AliFileTag.h"
#include "AliPID.h"
#include "AliAODEvent.h"
#include "AliAODVertex.h"
#include "AliLog.h"

#include "AliAODTagCreator.h"

using std::ifstream;
ClassImp(AliAODTagCreator)


//______________________________________________________________________________
  AliAODTagCreator::AliAODTagCreator() :
    AliTagCreator(), 
    fChain(0), 
    fAODEvent(0), 
    fTreeT(0), 
    fRunTag(0),
    fTreeTEsd(0), 
    fRunTagEsd(0)  
{
  //==============Default constructor for a AliAODTagCreator================
}

//______________________________________________________________________________
AliAODTagCreator::~AliAODTagCreator() {
//================Default destructor for a AliAODTagCreator===================
  delete fChain;
  delete fAODEvent;
}

//______________________________________________________________________________
Bool_t AliAODTagCreator::ReadGridCollection(TGridResult *fresult) {
  // Reads the entry of the TGridResult and creates the tags
  Int_t nEntries = fresult->GetEntries();

  TString alienUrl;
  const char* guid;
  const char* md5;
  //  const char* turl;
  Long64_t size = -1;

  fChain = new TChain("aodTree");
 
  for(Int_t i = 0; i < nEntries; i++) {
    alienUrl = fresult->GetKey(i,"turl");
    guid = fresult->GetKey(i,"guid");
    if(fresult->GetKey(i,"size")) size = atol (fresult->GetKey(i,"size"));
    md5 = fresult->GetKey(i,"md5");
    //    turl = fresult->GetKey(i,"turl");
    if(md5 && !strlen(guid)) md5 = 0;
    if(guid && !strlen(guid)) guid = 0;
    
    fChain->Add(alienUrl);
  }//grid result loop
  
  AliInfo(Form("AOD chain created......."));	
  AliInfo(Form("Chain entries: %lld",fChain->GetEntries()));	

  CreateTag(fChain, "grid");
  
  return kTRUE;
}

//______________________________________________________________________________
Bool_t AliAODTagCreator::ReadLocalCollection(const char *localpath, const char* pattern) {
  // Checks the different subdirs of the given local path and in the
  // case where it finds an AliAOD.root file it creates the tags
  
  void *dira =  gSystem->OpenDirectory(localpath);
  Char_t fPath[512];
  const char * dirname  = 0x0;
  const char * filename = 0x0;

  fChain = new TChain("aodTree");

  while((dirname = gSystem->GetDirEntry(dira))) {
    snprintf(fPath,512,"%s/%s",localpath,dirname);
    void *dirb =  gSystem->OpenDirectory(fPath);
    while((filename = gSystem->GetDirEntry(dirb))) {
	TString bstr = dirname;
	if(bstr.Contains("..")) continue;
	if(strstr(filename,pattern)) {
	    TString aodFileName;
	    aodFileName = fPath;
	    aodFileName += "/";
	    aodFileName += pattern;
	    fChain->Add(aodFileName);
	} //pattern check
    } //child directory's entry loop
  } //parent directory's entry loop
  
  AliInfo(Form("AOD chain created......."));	
  AliInfo(Form("Chain entries: %lld",fChain->GetEntries()));	

  CreateTag(fChain, "local");

  return kTRUE;
}

//______________________________________________________________________________
Bool_t AliAODTagCreator::ReadCAFCollection(const char *filename) {
  // Temporary solution for CAF: Takes as an input the ascii file that
  // lists the AODs stored in the SE of the CAF and creates the tags.

  // Open the input stream
  ifstream in;
  in.open(filename);

  TString aodfile;

  fChain = new TChain("aodTree");

  // Read the input list of files and add them to the chain
  while(in.good()) {
    in >> aodfile;
    if (!aodfile.Contains("root")) continue; // protection
    fChain->Add(aodfile);
  }

  AliInfo(Form("AOD chain created......."));	
  AliInfo(Form("Chain entries: %lld",fChain->GetEntries()));	

  CreateTag(fChain, "proof");

  return kTRUE;
}

//__________________________________________________________________________
void AliAODTagCreator::CreateAODTags(Int_t fFirstEvent, Int_t fLastEvent, TList */*grpList*/) {
  // Creates tag files for AODs

    AliInfo(Form("Creating the AOD tags......."));	
    
    TFile *file = TFile::Open("AliAOD.root");
    if (!file || !file->IsOpen()) {
	AliError(Form("opening failed"));
	delete file;
	return ;
    }

    fChain = new TChain("aodTree");
    fChain->Add("AliAOD.root");
    
    fAODEvent = new AliAODEvent();
    fAODEvent->ReadFromTree(fChain);
    
    Int_t lastEvent = 0;  
    if(fLastEvent == -1) lastEvent = (Int_t)fChain->GetEntries();
    else lastEvent = fLastEvent;

    char fileName[256];
    snprintf(fileName, 256, "Run%d.Event%d_%d.AOD.tag.root", 
	    fAODEvent->GetRunNumber(), fFirstEvent, lastEvent );
    AliInfo(Form("writing tags to file %s", fileName));
    AliDebug(1, Form("writing tags to file %s", fileName));
 
    TFile* ftag = TFile::Open(fileName, "recreate");

    fRunTag = new AliRunTag();
    fTreeT = new TTree("T","A Tree with event tags");
    TBranch * btag = fTreeT->Branch("AliTAG", &fRunTag);
    btag->SetCompressionLevel(9);

    CreateTags();

    ftag->cd();
    fTreeT->Fill();
    fRunTag->Clear();
    fTreeT->Write();
    ftag->Close();
    file->cd();
    file->Close();
}

//_____________________________________________________________________________
void AliAODTagCreator::CreateTag(TChain* chain, const char *type) {
    
    // Private method that creates tag files
    //

    //reading the esd tag file 
    fTreeTEsd = new TChain("T");
    const char * tagPattern = "ESD.tag";
    // Open the working directory
    void * dirp = gSystem->OpenDirectory(gSystem->pwd());
    const char * name = 0x0;
    // Add all files matching *pattern* to the chain
    while((name = gSystem->GetDirEntry(dirp))) {
	if (strstr(name,tagPattern)) fTreeTEsd->Add(name);
    }//directory loop
    AliInfo(Form("Chained tag files: %lld",fTreeTEsd->GetEntries()));
      
    fChain = chain;
    
    TString fSession = type;
    TString fguid, fmd5, fturl;
    fAODEvent = new AliAODEvent();
    fAODEvent->ReadFromTree(fChain);

    Int_t firstEvent = 0;
    
    TString localFileName = "Run"; 
    localFileName += fAODEvent->GetRunNumber(); 
    localFileName += ".Event"; 
    localFileName += firstEvent; 
    localFileName += "_"; 
    localFileName += chain->GetEntries(); //localFileName += "."; localFileName += Counter;
    localFileName += ".AOD.tag.root";
    
    TString fileName;
    
    if(fStorage == 0) {
	fileName = localFileName.Data();      
	AliInfo(Form("Writing tags to local file: %s",fileName.Data()));
    }
    else if(fStorage == 1) {
	TString alienLocation = "/alien";
	alienLocation += gGrid->Pwd();
	alienLocation += fgridpath.Data();
	alienLocation += "/";
	alienLocation +=  localFileName;
	alienLocation += "?se=";
	alienLocation += fSE.Data();
	fileName = alienLocation.Data();
	AliInfo(Form("Writing tags to grid file: %s",fileName.Data()));
    }
    
    TFile* ftag = TFile::Open(fileName, "recreate");
    
    fRunTag = new AliRunTag();
    fTreeT  = new TTree("T", "A Tree with event tags");
    TBranch * btag = fTreeT->Branch("AliTAG", &fRunTag);
    btag->SetCompressionLevel(9);
    
    // Access information from esd tag
    fRunTagEsd = new AliRunTag();
    fTreeTEsd->SetBranchAddress("AliTAG",&fRunTagEsd);
    // Creating new information of aod
    AliInfo(Form("Creating the AOD tags......."));
    CreateTags(type);
    ftag->cd();
    fRunTag->Clear();
    fTreeT->Write();
    ftag->Close();
}

void AliAODTagCreator::CreateTags(const char* /*type*/)
{
    // Event loop for tag creation
    TString fturl;
    TString fguid;
    Int_t   oldRun = -1;
    fChain->GetEntry(0);
    TFile *f = fChain->GetFile();
    TString ftempGuid = f->GetUUID().AsString();
    // Loop over events 
    Int_t nEvents = fChain->GetEntries();
    Int_t ntags    = 0;
    Int_t tagentry = 0;
    //    const TClonesArray *evTagList = 0;
    TString foldguid = "";

    for (Int_t iEventNumber = 0; iEventNumber < nEvents; iEventNumber++) {
	// Copy old tag information
	if (iEventNumber >= ntags) {
	    fTreeTEsd->GetEntry(tagentry++);
	    fRunTag->CopyStandardContent(fRunTagEsd);
// 	    evTagList = fRunTagEsd->GetEventTags();
// 	    ntags += evTagList->GetEntries();
	    ntags = fRunTagEsd->GetNEvents();
	}

	// Create a new Tag
	AliEventTag* evTag = new AliEventTag();
	// Read event
	fChain->GetEntry(iEventNumber);
	if (iEventNumber == 0) oldRun = fAODEvent->GetRunNumber();
	// Reference to the input file
	TFile *file = fChain->GetFile();
	//	const TUrl *url = file->GetEndpointUrl();
	fguid = file->GetUUID().AsString();

// 	if (!strcmp(type,"grid")) {
// 	    TString fturltemp = "alien://"; fturltemp += url->GetFile();
// 	    fturl = fturltemp(0,fturltemp.Index(".root",5,0,TString::kExact)+5);
// 	} else {
// 	    fturl = url->GetFile();
// 	}
	fturl = file->GetName();
	
	fAODEvent->GetStdContent();
	
	// Fill the event tag from the aod informatiom
	FillEventTag(fAODEvent, evTag);
	// Set the event and input file references
	//evTag->SetEventId(iEventNumber+1);
	
	// **** FIXME ****
// 	evTag->SetGUID(fguid);
// 	if(!strcmp(type,"grid")) {
// 	    evTag->SetMD5("");
// 	    evTag->SetTURL(fturl);
// 	    evTag->SetSize(0);
// 	    }
// 	else evTag->SetPath(fturl);
	//  **** FIXME ****

	// Check if a new run has to be created
	// File has changed
	if(fguid != ftempGuid) {
	    ftempGuid = fguid;
	    fTreeT->Fill();
	    fRunTag->Clear("");

	    AliFileTag *nftag = new AliFileTag();
	    
	    // if(fSession == "grid") {
	      nftag->SetMD5("");
	      nftag->SetTURL(fturl);
	      nftag->SetSize(0);
	    // }
	    // else {
	    //   nftag->SetPath(fturl);
	    //   nftag->SetSize(0);
	    //   nftag->SetMD5("");
	    //   nftag->SetTURL(fturl);
	    // }
      
	    if (fRunTag->GetFileId(fguid) > -1)
	      AliFatal("Adding a file which is already in the RunTag.");
	    
	    fRunTag->AddFileTag(nftag);
	    
	}

	// Run# has changed
	if (oldRun != (fAODEvent->GetRunNumber()))
	{
	    oldRun = fAODEvent->GetRunNumber();

	    fTreeT->Fill();
	    fRunTag->Clear("");
	    ftempGuid = fguid;
	    fTreeT->Fill();
	    fRunTag->Clear("");

	    AliFileTag *nftag = new AliFileTag();
	    
	    // if(fSession == "grid") {
	      nftag->SetMD5("");
	      nftag->SetTURL(fturl);
	      nftag->SetSize(0);
	    // }
	    // else {
	    //   nftag->SetPath(fturl);
	    //   nftag->SetSize(0);
	    //   nftag->SetMD5("");
	    //   nftag->SetTURL(fturl);
	    // }
      
	    if (fRunTag->GetFileId(fguid) > -1)
	      AliFatal("Adding a file which is already in the RunTag.");
	    
	    fRunTag->AddFileTag(nftag);
	    
	}
	
	// Add the event tag
	fRunTag->AddEventTag(*evTag);
	delete evTag;
	// Last event
	if(iEventNumber+1 == fChain->GetEntries()) {
	    fTreeT->Fill();
	    fRunTag->Clear("");
	}      
    }//event loop
}



void AliAODTagCreator::FillEventTag(AliAODEvent* aod, AliEventTag* evTag)
{
// 
// Fill the event tag information	
    //
    fAODEvent = aod;
    
    //
    Float_t fLowPtCut      =  1.0;
    Float_t fHighPtCut     =  3.0;
    Float_t fVeryHighPtCut = 10.0;
    ////////////                            
    Double_t partFrac[10] = {0.01, 0.01, 0.85, 0.10, 0.05, 0., 0., 0., 0., 0.};
    
    // Creates the tags for all the events in a given AOD file
    Int_t   ntrack = 0;
    Int_t   nPos = 0, nNeg = 0, nNeutr =0;
    Int_t   nKinks = 0, nV0s = 0, nCascades = 0;
    Int_t   nK0s = 0, nNeutrons = 0, nPi0s = 0, nGamas = 0;
    Int_t   nProtons = 0,  nKaons = 0, nPions = 0, nMuons = 0, nElectrons = 0, nFWMuons = 0;
    Int_t   nCh1GeV = 0, nCh3GeV = 0, nCh10GeV = 0;
    Int_t   nMu1GeV = 0, nMu3GeV = 0, nMu10GeV = 0;
    Int_t   nEl1GeV = 0, nEl3GeV = 0, nEl10GeV = 0;
    Float_t maxPt =  .0, etamaxPt = -999., phimaxPt = -999., meanPt = .0, totalP =  .0;

    TRefArray tmp;


    // Primary Vertex
    AliAODVertex *pVertex = fAODEvent->GetPrimaryVertex();
    if (pVertex) {
	evTag->SetVertexX(pVertex->GetX());
	evTag->SetVertexY(pVertex->GetY());
	evTag->SetVertexZ(pVertex->GetZ());
	Double_t covmatrix[6];
	pVertex->GetCovarianceMatrix(covmatrix);
	evTag->SetVertexZError(sqrt(covmatrix[5]));
    }
    // loop over vertices 
    Int_t nVtxs = fAODEvent->GetNumberOfVertices();
    for (Int_t nVtx = 0; nVtx < nVtxs; nVtx++) {
	AliAODVertex *vertex = fAODEvent->GetVertex(nVtx);
	if(vertex->GetType() == 1) nKinks    += 1;
	if(vertex->GetType() == 2) nV0s      += 1;
	if(vertex->GetType() == 3) nCascades += 1;
    }
    Int_t nTracks = fAODEvent->GetNumberOfTracks();
    for (Int_t nTr = 0; nTr < nTracks; nTr++) {
	AliAODTrack *track = dynamic_cast<AliAODTrack*>(fAODEvent->GetTrack(nTr));
	if(!track) AliFatal("Not a standard AOD");
	
	Double_t fPt = track->Pt();
	if(fPt > maxPt) {
	    maxPt = fPt;
	    etamaxPt = track->Eta();
	    phimaxPt = track->Phi();
	}
	
	if(track->Charge() > 0) {
	    nPos++;
	    if(fPt > fLowPtCut)      nCh1GeV++;
	    if(fPt > fHighPtCut)     nCh3GeV++;
	    if(fPt > fVeryHighPtCut) nCh10GeV++;
	}
	if(track->Charge() < 0) {
	    nNeg++;
	    if(fPt > fLowPtCut)      nCh1GeV++;
	    if(fPt > fHighPtCut)     nCh3GeV++;
	    if(fPt > fVeryHighPtCut) nCh10GeV++;
	    }
	if(track->Charge() == 0) nNeutr++;
	//PID
	const Double32_t *prob = track->PID();
	if (prob) {
	  Double_t rcc = 0.0;
	  for(Int_t i = 0; i < AliPID::kSPECIES; i++) rcc += prob[i]*partFrac[i];
	  if(rcc > 0.0) {
	    //Bayes' formula  
	    Double_t w[10];
	    for(Int_t i = 0; i < AliPID::kSPECIES; i++) w[i] = prob[i]*partFrac[i]/rcc;
	    
	    //protons
	    if ((w[4]>w[3])&&(w[4]>w[2])&&(w[4]>w[1])&&(w[4]>w[0])) nProtons++;
	    //kaons
	    if ((w[3]>w[4])&&(w[3]>w[2])&&(w[3]>w[1])&&(w[3]>w[0])) nKaons++;
	    //pions
	    if ((w[2]>w[4])&&(w[2]>w[3])&&(w[2]>w[1])&&(w[2]>w[0])) nPions++;
	    //muons 
	    if ((w[1]>w[4])&&(w[1]>w[3])&&(w[1]>w[2])&&(w[1]>w[0])) {
	      nMuons++;
	      if(fPt > fLowPtCut)      nMu1GeV++;
	      if(fPt > fHighPtCut)     nMu3GeV++;
	      if(fPt > fVeryHighPtCut) nMu10GeV++;
	    }
	    //electrons  
	    if ((w[0]>w[4])&&(w[0]>w[3])&&(w[0]>w[2])&&(w[0]>w[1])) {
	      nElectrons++;
	      if(fPt > fLowPtCut) nEl1GeV++;
	      if(fPt > fHighPtCut) nEl3GeV++;
	      if(fPt > fVeryHighPtCut) nEl10GeV++;
	    }
	  }
	}
	totalP += track->P();
	meanPt += fPt;
	ntrack++;
	// forward muons (in the dimuon spectrometer)
	if(track->IsMuonTrack()) nFWMuons++;   
  	                          
    }//track loop
    //
    // Fill the event tags  
    if(ntrack != 0)
	meanPt = meanPt/ntrack;
    
    
    evTag->SetNumOfTracks(nTracks);
    evTag->SetNumOfPosTracks(nPos);
    evTag->SetNumOfNegTracks(nNeg);
    evTag->SetNumOfNeutrTracks(nNeutr);
    
    evTag->SetNumOfV0s(nV0s);
    evTag->SetNumOfCascades(nCascades);
    evTag->SetNumOfKinks(nKinks);
    
    evTag->SetNumOfProtons(nProtons);
    evTag->SetNumOfKaons(nKaons);
    evTag->SetNumOfPions(nPions);
    evTag->SetNumOfMuons(nMuons);
    evTag->SetNumOfFWMuons(nFWMuons);
    evTag->SetNumOfElectrons(nElectrons);
    evTag->SetNumOfPhotons(nGamas);
    evTag->SetNumOfPi0s(nPi0s);
    evTag->SetNumOfNeutrons(nNeutrons);
    evTag->SetNumOfKaon0s(nK0s);
    
    evTag->SetNumOfChargedAbove1GeV(nCh1GeV);
    evTag->SetNumOfChargedAbove3GeV(nCh3GeV);
    evTag->SetNumOfChargedAbove10GeV(nCh10GeV);
    evTag->SetNumOfMuonsAbove1GeV(nMu1GeV);
    evTag->SetNumOfMuonsAbove3GeV(nMu3GeV);
    evTag->SetNumOfMuonsAbove10GeV(nMu10GeV);
    evTag->SetNumOfElectronsAbove1GeV(nEl1GeV);
    evTag->SetNumOfElectronsAbove3GeV(nEl3GeV);
    evTag->SetNumOfElectronsAbove10GeV(nEl10GeV);

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