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

// Analysis task to perform embedding of the simulated AOD
// into real data (ESD)
// Output conntainer contain AOD with
//   0. Data before embedding
//   1. Data+with embedded signal
//   2. MC information from signal
// Data for embedding are obtained using standard Manager
// Signal is read from TChain with aodTree
//
// Authors: Dmitri Peressounko
// Date   : 28.05.2011

#include "TChain.h"
#include "TFile.h"
#include "TROOT.h"
#include "TClonesArray.h"
#include "TH2.h"
#include "TGeoManager.h"
#include "TGeoGlobalMagField.h"

#include "AliGeomManager.h"
#include "AliGRPObject.h"
#include "AliCDBPath.h"
#include "AliCDBEntry.h"
#include "AliESDEvent.h"
#include "AliAODEvent.h"
#include "AliAnalysisManager.h"
#include "AliVEventHandler.h"
#include "AliInputEventHandler.h"
#include "AliMultiplicity.h"
#include "AliAODMCParticle.h"
#include "AliAODMCHeader.h"
#include "AliCDBManager.h"
#include "AliAODHandler.h"
#include "AliMagF.h"

#include "AliPHOSReconstructor.h"
#include "AliPHOSClusterizerv1.h"
#include "AliPHOSDigit.h"
#include "AliPHOSGeometry.h"

#include "AliPHOSEmbedding.h"

ClassImp(AliPHOSEmbedding)


//________________________________________________________________________
AliPHOSEmbedding::AliPHOSEmbedding(const char *name) 
  : AliAnalysisTaskSE(name),
    fAODChain(0x0),
    fDigitsTree(0x0),
    fClustersTree(0x0),
    fTreeOut(0x0),
    fDigitsArr(0x0),
    fEmbeddedClusters(0x0),
    fEmbeddedCells(0x0),
    fCellsPHOS(0x0),
    fClusterizer(0x0),
    fPHOSReconstructor(0x0),
    fNSignal(0),
    fNCaloClustersOld(0),
    fInitialized(0)   
{
  // Constructor
  for(int i=0;i<5;i++)fOldPHOSCalibration[i]=0x0 ;

}

//________________________________________________________________________
void AliPHOSEmbedding::UserCreateOutputObjects()
{
 //prepare output containers
  
  //Create branch for output MC particles  
  TClonesArray *mcparticles = new TClonesArray("AliAODMCParticle",0);
  mcparticles->SetName(AliAODMCParticle::StdBranchName());
  AddAODBranch("TClonesArray", &mcparticles);

  //Branch with clusters after embedding
  fEmbeddedClusters = new TClonesArray("AliAODCaloCluster",0);
  fEmbeddedClusters->SetName("EmbeddedCaloClusters");
  AddAODBranch("TClonesArray", &fEmbeddedClusters);
  

  //Branch with cells after embedding
  fEmbeddedCells = new AliAODCaloCells();
  fEmbeddedCells->SetName("EmbeddedPHOScells");
  AddAODBranch("AliAODCaloCells", &fEmbeddedCells);

  
  fDigitsArr = new TClonesArray("AliPHOSDigit",3*56*64) ;

  AliAODHandler* handler = (AliAODHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
  if (handler) {
      fTreeOut = handler->GetTree();
  }
  else {
       AliWarning("No output AOD Event Handler connected.") ;
  }

}

//________________________________________________________________________
void AliPHOSEmbedding::UserExec(Option_t *) {
  // Main loop, called for each event
  // Perform embedding
  
  AliESDEvent *event = dynamic_cast<AliESDEvent*>(InputEvent());
  if (!event) {
    Printf("ERROR: Could not retrieve event");
    PostData(0, fTreeOut);
    return;
  }

  AliCentrality *centrality = event->GetCentrality(); 
  Float_t acentrality=centrality->GetCentralityPercentileUnchecked("V0M");
  if( acentrality <= 0. || acentrality>80.){
    return;
  }
  
  //Read next AOD event
  //If necesary method checks if AOD event is good to embed
  //e.g. there are PHOS clusters etc.
  AliAODEvent * signal = GetNextSignalEvent() ;
  if (!signal) {
    Printf("ERROR: Could not retrieve signal");
    PostData(0, fTreeOut);
    return;
  }
  
  Init() ;

  //Remember PHOS digits before any modification
  CopyRecalibrateDigits() ;

  //First re-reconstruct existing digits to ensure identical reconstruction before and 
  //after embeding
  AliAODEvent * nullSignal=0x0 ;
  MakeEmbedding(event,nullSignal) ;

  //Convert ESD + MC information from signal to AOD
  ConvertESDtoAOD(event);
  
  //Now perform real embedding  
  //Embed signal clusters into event
  MakeEmbedding(event,signal) ;

  //Convert ESD to AOD
  ConvertEmbeddedClusters(event) ;
 
  //Fill MC information
  ConvertMCParticles(signal) ;

  delete signal ;

  PostData(0, fTreeOut);
}
//______________________________________________________________________________
void AliPHOSEmbedding::CopyRecalibrateDigits(){
  //Recalibrate digits if there is better calibration ("new") 
  //exists than one used in reconstruction ("ESD")
  
  AliESDEvent *event = dynamic_cast<AliESDEvent*>(InputEvent());
  if(!event){
    AliError("No ESD event!");
    return ;
  }
  if(fCellsPHOS)
    delete fCellsPHOS ;
  fCellsPHOS = new AliESDCaloCells() ;
  fCellsPHOS->CreateContainer(event->GetPHOSCells()->GetNumberOfCells());

  //Apply recalibration if necessary to account for
  //difference between calibration used in reconstruction and 
  //final calibration
//  if(fOldPHOSCalibration[0]){ //there is a difference in calibrations
    for (Short_t icell = 0; icell < event->GetPHOSCells()->GetNumberOfCells(); icell++) {
      Short_t id=0;
      Double_t time=0., amp=0. ;
      Int_t mclabel; 
      Double_t efrac =0. ;
//      if (fCellsPHOS->GetCell(icell, id, amp,time,mclabel,efrac) != kTRUE)
      if (event->GetPHOSCells()->GetCell(icell, id, amp,time,mclabel,efrac) != kTRUE)
        break;      
      Int_t relId[4] ;
      AliPHOSGeometry::GetInstance()->AbsToRelNumbering(id,relId);
      Float_t calibESD=fOldPHOSCalibration[relId[0]-1]->GetBinContent(relId[2],relId[3]) ;
      Float_t calibNew=fPHOSReconstructor->Calibrate(1.,id) ;
      if(calibESD>0.)
        amp=amp*calibNew/calibESD ;
      fCellsPHOS->SetCell(icell, id, amp, time,mclabel,efrac);     
    }
//  }  
}
//______________________________________________________________________________
void AliPHOSEmbedding::Init(){
  if(fInitialized)
    return ;
  
  AliESDEvent *event = dynamic_cast<AliESDEvent*>(InputEvent());
  if(!event){
    AliError("Can not obtain InputEvent!") ;
    return ;
  }
  Int_t runNum = event->GetRunNumber();
  AliCDBManager::Instance()->SetRun(runNum);

  fPHOSReconstructor = new AliPHOSReconstructor() ;
  AliCDBPath path("PHOS","Calib","RecoParam");
  AliCDBEntry *entry=AliCDBManager::Instance()->Get(path.GetPath());
  if(!entry){
    AliError(Form("Can not get OCDB entry %s",path.GetPath().Data())) ;
    return ;
  }
  
  TObjArray* recoParamArray = (TObjArray*)entry->GetObject();
  AliPHOSRecoParam* recoParam = (AliPHOSRecoParam*)recoParamArray->At(2); 
  fPHOSReconstructor->SetRecoParam(recoParam) ;
  
  InitMF() ;  
  InitGeometry() ;

  fInitialized=kTRUE ;
}

//________________________________________________________________________
AliAODEvent* AliPHOSEmbedding::GetNextSignalEvent(){
  //Read signal AOD event from the chain
  
  if(fAODChain==0){
    AliError("No chain to read signal events") ;
    return 0 ;
  }
  
  AliAODEvent* aod = new AliAODEvent;
  aod->ReadFromTree(fAODChain);
  
  if(fNSignal>=fAODChain->GetEntries()){
    delete aod ;
    return 0 ;
  }
  fAODChain->GetEvent(fNSignal) ;
  fNSignal++ ;

  //check if event is read and there is at least 2 PHOS clusters
  //Otherwise fill histogram and read next event
  //TODO

  return aod ;
  
}

//________________________________________________________________________
void AliPHOSEmbedding::MakeEmbedding(AliESDEvent *event,AliAODEvent * signal){
  //Perform embedding of the signal to the event

  gROOT->cd(); //make sure that the digits and RecPoints Trees are memory resident
  if(fDigitsTree){
    delete fDigitsTree ;
  }
  fDigitsTree = new TTree("digitstree","digitstree");
  fDigitsTree->Branch("PHOS","TClonesArray", &fDigitsArr, 32000);
  
  if(fClustersTree){
    delete fClustersTree ;
  }
  fClustersTree = new TTree("clustertree","clustertree");

  //Remember number of Clusters before we added new ones...
  fNCaloClustersOld=event->GetNumberOfCaloClusters() ;


/*
  printf("---------------Before---------\n") ;
  Int_t n=event->GetNumberOfCaloClusters() ;
  for (Int_t iClust=0; iClust<event->GetNumberOfCaloClusters(); ++iClust) {
    AliESDCaloCluster * cluster = event->GetCaloCluster(iClust);
     if(!cluster->IsPHOS())
      continue;
   Float_t pos[3] = { 0.};
    cluster->GetPosition(pos);
    printf("Cluster(%d): E=%f, x=%f, z=%f, CPV=%f \n",iClust,cluster->E(),pos[0],pos[2],cluster->GetEmcCpvDistance()) ;
    UShort_t * index    = cluster->GetCellsAbsId() ;
    for(Int_t ic=0; ic < cluster->GetNCells(); ic++ )
    printf("Dig(%d)=%d, ",ic,index[ic]) ;
  printf("\n") ;
	
	
  }
  printf("---------------END Before---------\n") ;
*/

  
  //create digits
  MakeDigits(signal);	  

/*  
for(Int_t i=0;i<fDigitsArr->GetEntriesFast();i++){  
   AliPHOSDigit * d = (AliPHOSDigit *) fDigitsArr->At(i) ;
   printf("  Digit(%d) = %d, E=%f \n",i,d->GetId(),d->GetEnergy()) ;
}
*/
  
  //clusterize and make tracking
  fPHOSReconstructor->Reconstruct(fDigitsTree,fClustersTree) ;

  //Note that the cirrent ESDEvent will be modified!
  fPHOSReconstructor->FillESD(fDigitsTree, fClustersTree, event) ;


/*
   printf("---------------After---------\n") ;
  for (Int_t iClust=n; iClust<event->GetNumberOfCaloClusters(); ++iClust) {
    AliESDCaloCluster * cluster = event->GetCaloCluster(iClust);
    if(!cluster->IsPHOS())
      continue;
    Float_t pos[3] = { 0.};
    cluster->GetPosition(pos);
    printf("Cluster(%d): E=%f, x=%f, z=%f, CPV=%f, Label=%d \n",iClust-n,cluster->E(),pos[0],pos[2],cluster->GetEmcCpvDistance(),cluster->GetLabel()) ;
    UShort_t * index    = cluster->GetCellsAbsId() ;
    for(Int_t ic=0; ic < cluster->GetNCells(); ic++ )
      printf("Dig(%d)=%d, ",ic,index[ic]) ;
  printf("\n") ;
  }
  printf("---------------END After---------\n") ;
*/


}
//______________________________________________________________________________
void AliPHOSEmbedding::ConvertESDtoAOD(AliESDEvent* esd) 
{
  // ESD Filter analysis task executed for each event
  
  if(!esd)return;
    
  AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler()->SetFillAOD(kTRUE);
  AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler()->SetFillExtension(kTRUE);
      
  ConvertHeader(*esd);
  
  // Fetch Stack for debuggging if available 
  
  // Update the header
  Int_t nTracks    = esd->GetNumberOfTracks();
  Int_t nV0s      = esd->GetNumberOfV0s();
  Int_t nCascades = esd->GetNumberOfCascades();
  Int_t nKinks    = esd->GetNumberOfKinks();
  Int_t nVertices = nV0s + nCascades /*V0 wihtin cascade already counted*/+ nKinks + 1 /* = prim. vtx*/;
  Int_t nPileSPDVertices=1+esd->GetNumberOfPileupVerticesSPD(); // also SPD main vertex
  Int_t nPileTrkVertices=esd->GetNumberOfPileupVerticesTracks();
  nVertices+=nPileSPDVertices;
  nVertices+=nPileTrkVertices;
  Int_t nJets     = 0;
  Int_t nCaloClus = esd->GetNumberOfCaloClusters();
  Int_t nFmdClus  = 0;
  Int_t nPmdClus  = esd->GetNumberOfPmdTracks();
    
       
  AODEvent()->ResetStd(nTracks, nVertices, nV0s, nCascades, nJets, nCaloClus, nFmdClus, nPmdClus);
      
  ConvertPrimaryVertices(*esd);
  
  ConvertCaloClusters(*esd);
  
  ConvertEMCALCells(*esd);
  
  ConvertPHOSCells(*esd);
  
}
//______________________________________________________________________________
void AliPHOSEmbedding::ConvertPHOSCells(const AliESDEvent& esd)
{
  // fill PHOS cell info
  if (esd.GetPHOSCells()) { // protection against missing ESD information
    AliESDCaloCells &esdPHcells = *(esd.GetPHOSCells());
    Int_t nPHcell = esdPHcells.GetNumberOfCells() ;
    
    AliAODCaloCells &aodPHcells = *(AODEvent()->GetPHOSCells());
    aodPHcells.CreateContainer(nPHcell);
    aodPHcells.SetType(AliAODCaloCells::kPHOSCell);
    for (Int_t iCell = 0; iCell < nPHcell; iCell++) {      
      aodPHcells.SetCell(iCell,esdPHcells.GetCellNumber(iCell),esdPHcells.GetAmplitude(iCell),esdPHcells.GetTime(iCell),-1,0.);
    }
    aodPHcells.Sort();
  }
}

//______________________________________________________________________________
void AliPHOSEmbedding::ConvertEMCALCells(const AliESDEvent& esd)
{
  // fill EMCAL cell info
  if (esd.GetEMCALCells()) { // protection against missing ESD information
    AliESDCaloCells &esdEMcells = *(esd.GetEMCALCells());
    Int_t nEMcell = esdEMcells.GetNumberOfCells() ;
    
    AliAODCaloCells &aodEMcells = *(AODEvent()->GetEMCALCells());
    aodEMcells.CreateContainer(nEMcell);
    aodEMcells.SetType(AliAODCaloCells::kEMCALCell);
    for (Int_t iCell = 0; iCell < nEMcell; iCell++) {      
      aodEMcells.SetCell(iCell,esdEMcells.GetCellNumber(iCell),esdEMcells.GetAmplitude(iCell),esdEMcells.GetTime(iCell));
    }
    aodEMcells.Sort();
  }
}
//______________________________________________________________________________
void AliPHOSEmbedding::ConvertCaloClusters(const AliESDEvent& esd)
{
  
  // Access to the AOD container of clusters
  TClonesArray &caloClusters = *(AODEvent()->GetCaloClusters());
  Int_t jClusters(0);
  
  for (Int_t iClust=fNCaloClustersOld; iClust<esd.GetNumberOfCaloClusters(); ++iClust) {
    
    AliESDCaloCluster * cluster = esd.GetCaloCluster(iClust);
    
    Int_t  id        = cluster->GetID();
    Int_t  nLabel    = cluster->GetNLabels();
    Int_t *labels    = cluster->GetLabels();
    
    Float_t energy = cluster->E();
    Float_t posF[3] = { 0.};
    cluster->GetPosition(posF);
    
    AliAODCaloCluster *caloCluster = new(caloClusters[jClusters++]) AliAODCaloCluster(id,
                                                                                      nLabel,
                                                                                      labels,
                                                                                      energy,
                                                                                      posF,
                                                                                      NULL,
                                                                                      cluster->GetType(),0);
    
    Double_t dx=cluster->GetTrackDx() ;
    Double_t dz=cluster->GetTrackDz() ;
    Float_t cpv=99. ; //No track matched by default
    TArrayI * itracks = cluster->GetTracksMatched() ;  
    if(itracks->GetSize()>0){
      Int_t iTr = itracks->At(0);
      if(iTr>=0 && iTr<esd.GetNumberOfTracks()){
        AliESDtrack *track = esd.GetTrack(iTr) ;
        Double_t pt = track->Pt() ;
        Short_t charge = track->Charge() ;
        cpv=TestCPV(dx, dz, pt,charge) ;
      }
    }
    
    caloCluster->SetCaloCluster(cluster->GetDistanceToBadChannel(),
                                cluster->GetDispersion(),
                                cluster->GetM20(), cluster->GetM02(),
                                cpv,  
                                cluster->GetNExMax(),cluster->GetTOF()) ;
    
    caloCluster->SetPIDFromESD(cluster->GetPID());
    caloCluster->SetNCells(cluster->GetNCells());
    caloCluster->SetCellsAbsId(cluster->GetCellsAbsId());
    caloCluster->SetCellsAmplitudeFraction(cluster->GetCellsAmplitudeFraction());

    /*    
    TArrayI* matchedT = 	cluster->GetTracksMatched();
    if (fNumberOfTracks>0 && matchedT && cluster->GetTrackMatchedIndex() >= 0) {	
      for (Int_t im = 0; im < matchedT->GetSize(); im++) {
        Int_t iESDtrack = matchedT->At(im);;
        if (fAODTrackRefs->At(iESDtrack) != 0) {
          caloCluster->AddTrackMatched((AliAODTrack*)fAODTrackRefs->At(iESDtrack));
        }
      }
    }
    */
    
  } 
  caloClusters.Expand(jClusters); // resize TObjArray to 'remove' slots for pseudo clusters	 
}
//______________________________________________________________________________
void AliPHOSEmbedding::ConvertEmbeddedClusters(const AliESDEvent* esd)
{
   //Copy PHOS clusters and cells after embedding
  
  // Access to the AOD container of clusters
  Int_t jClusters(0);
  fEmbeddedClusters->Clear();
  fEmbeddedClusters->Expand(esd->GetNumberOfCaloClusters()-fNCaloClustersOld) ;
  for (Int_t iClust=fNCaloClustersOld; iClust<esd->GetNumberOfCaloClusters(); ++iClust) {
    
    AliESDCaloCluster * cluster = esd->GetCaloCluster(iClust);
    
    Int_t  id        = cluster->GetID();
    Int_t  nLabel    = cluster->GetNLabels();
    Int_t *labels    = cluster->GetLabels();
    
    Float_t energy = cluster->E();
    Float_t posF[3] = { 0.};
    cluster->GetPosition(posF);
    
    AliAODCaloCluster *caloCluster = new((*fEmbeddedClusters)[jClusters++]) AliAODCaloCluster(id,
                                                                                      nLabel,
                                                                                      labels,
                                                                                      energy,
                                                                                      posF,
                                                                                      NULL,
                                                                                      cluster->GetType(),0);

    
    Double_t dx=cluster->GetTrackDx() ;
    Double_t dz=cluster->GetTrackDz() ;
    Float_t cpv=99. ; //No track matched by default
    TArrayI * itracks = cluster->GetTracksMatched() ;  
    if(itracks->GetSize()>0){
      Int_t iTr = itracks->At(0);
      if(iTr>=0 && iTr<esd->GetNumberOfTracks()){
        AliESDtrack *track = esd->GetTrack(iTr) ;
        Double_t pt = track->Pt() ;
        Short_t charge = track->Charge() ;
        cpv=TestCPV(dx, dz, pt,charge) ;
      }
    }

    caloCluster->SetCaloCluster(cluster->GetDistanceToBadChannel(),
                                cluster->GetDispersion(),
                                cluster->GetM20(), cluster->GetM02(),
                                cpv,  
                                cluster->GetNExMax(),cluster->GetTOF()) ;
    
    caloCluster->SetPIDFromESD(cluster->GetPID());
    caloCluster->SetNCells(cluster->GetNCells());    
    caloCluster->SetCellsAbsId(cluster->GetCellsAbsId());
    caloCluster->SetCellsAmplitudeFraction(cluster->GetCellsAmplitudeFraction());            
  } 
  
  for(Int_t i=0;i<fEmbeddedClusters->GetEntriesFast();i++){
    AliAODCaloCluster *caloCluster =(AliAODCaloCluster *)fEmbeddedClusters->At(i) ;
    caloCluster->GetID() ;
    
  }
  
  //Now cells
  if (esd->GetPHOSCells()) { // protection against missing ESD information
    AliESDCaloCells &esdPHcells = *(esd->GetPHOSCells());
    Int_t nPHcell = esdPHcells.GetNumberOfCells() ;    
    fEmbeddedCells->CreateContainer(nPHcell);
    fEmbeddedCells->SetType(AliAODCaloCells::kPHOSCell);
    for (Int_t iCell = 0; iCell < nPHcell; iCell++) {      
      fEmbeddedCells->SetCell(iCell,esdPHcells.GetCellNumber(iCell),esdPHcells.GetAmplitude(iCell),esdPHcells.GetTime(iCell));
    }
    fEmbeddedCells->Sort();
  }

  
}
//______________________________________________________________________________
void AliPHOSEmbedding::ConvertMCParticles(const AliAODEvent* aod)
{
  //Copy MC branches to new AOD
  
  TClonesArray *mcArray = (TClonesArray*)aod->FindListObject(AliAODMCParticle::StdBranchName());
  TClonesArray * aodMcParticles = (TClonesArray*)AODEvent()->FindListObject(AliAODMCParticle::StdBranchName());
  for(Int_t i=0;i<mcArray->GetEntriesFast();i++){
    
    AliAODMCParticle* aodpart =  (AliAODMCParticle*) mcArray->At(i);
//    AliAODMCParticle * mcp =new ((*aodMcParticles)[i]) AliAODMCParticle(*aodpart);
    new ((*aodMcParticles)[i]) AliAODMCParticle(*aodpart);
    
  }

  /*  
  // MC header
  AliAODMCHeader * mcHeader = (AliAODMCHeader *)aod.FindListObject(AliAODMCHeader::StdBranchName());
  AliAODMCHeader * aodMcHeader = new AliAODMCHeader(*mcHeader);
  aodMcHeader->SetName(AliAODMCHeader::StdBranchName());
  AddAODBranch("AliAODMCHeader",&aodMcHeader);    
  */

}
//______________________________________________________________________________
void AliPHOSEmbedding::ConvertHeader(AliESDEvent & esd){
  
  AliAODHeader* header = dynamic_cast<AliAODHeader*>(AODEvent()->GetHeader());
  if(!header) AliFatal("Not a standard AOD");
  
  header->SetRunNumber(esd.GetRunNumber());
  header->SetOfflineTrigger(fInputHandler->IsEventSelected()); // propagate the decision of the physics selection

  TTree* tree = fInputHandler->GetTree();
  if (tree) {
    TFile* file = tree->GetCurrentFile();
    if (file) header->SetESDFileName(file->GetName());
  }
  
  header->SetBunchCrossNumber(esd.GetBunchCrossNumber());
  header->SetOrbitNumber(esd.GetOrbitNumber());
  header->SetPeriodNumber(esd.GetPeriodNumber());
  header->SetEventType(esd.GetEventType());
  
  header->SetEventNumberESDFile(esd.GetHeader()->GetEventNumberInFile());
  if(const_cast<AliESDEvent&>(esd).GetCentrality()){
    header->SetCentrality(const_cast<AliESDEvent&>(esd).GetCentrality());
  }
  else{
    header->SetCentrality(0);
  }
  if(const_cast<AliESDEvent&>(esd).GetEventplane()){
    header->SetEventplane(const_cast<AliESDEvent&>(esd).GetEventplane());
  }
  else{
    header->SetEventplane(0);
  }

  // Trigger
  header->SetFiredTriggerClasses(esd.GetFiredTriggerClasses());
  header->SetTriggerMask(esd.GetTriggerMask()); 
  header->SetTriggerCluster(esd.GetTriggerCluster());
  header->SetL0TriggerInputs(esd.GetHeader()->GetL0TriggerInputs());    
  header->SetL1TriggerInputs(esd.GetHeader()->GetL1TriggerInputs());    
  header->SetL2TriggerInputs(esd.GetHeader()->GetL2TriggerInputs());    
  
  header->SetMagneticField(esd.GetMagneticField());
  header->SetMuonMagFieldScale(esd.GetCurrentDip()/6000.);
  header->SetZDCN1Energy(esd.GetZDCN1Energy());
  header->SetZDCP1Energy(esd.GetZDCP1Energy());
  header->SetZDCN2Energy(esd.GetZDCN2Energy());
  header->SetZDCP2Energy(esd.GetZDCP2Energy());
  header->SetZDCEMEnergy(esd.GetZDCEMEnergy(0),esd.GetZDCEMEnergy(1));
  
  // ITS Cluster Multiplicty
  const AliMultiplicity *mult = esd.GetMultiplicity();
  for (Int_t ilay = 0; ilay < 6; ilay++) header->SetITSClusters(ilay, mult->GetNumberOfITSClusters(ilay));
  
  // TPC only Reference Multiplicty
  //  Int_t refMult  = fTPCaloneTrackCuts ? (Short_t)fTPCaloneTrackCuts->GetReferenceMultiplicity(&esd, kTRUE) : -1;
  header->SetTPConlyRefMultiplicity(-1);
  
  //
  Float_t diamxy[2]={static_cast<Float_t>(esd.GetDiamondX()),static_cast<Float_t>(esd.GetDiamondY())};
  Float_t diamcov[3]; 
  esd.GetDiamondCovXY(diamcov);
  header->SetDiamond(diamxy,diamcov);
  header->SetDiamondZ(esd.GetDiamondZ(),esd.GetSigma2DiamondZ());

  
  //PHOS matrixes
  char path[255] ;
  TGeoHMatrix * m ;
  for(Int_t mod=0; mod<5; mod++){
    snprintf(path,255,"/ALIC_1/PHOS_%d",mod+1) ; //In Geometry modules numbered 1,2,.,5
    if (gGeoManager->cd(path)){
      m = gGeoManager->GetCurrentMatrix() ;
      header->SetPHOSMatrix(new TGeoHMatrix(*m),mod) ;
    }
    else{
      header->SetPHOSMatrix(NULL,mod) ;
    }
  } 
  
  //EventPlane
  AliEventplane *eventplane = esd.GetEventplane();
  Double_t epQ = eventplane->GetEventplane("Q"); 
  
  //Standard Eventplane setter is too complicated...
  //use durty hack
  header->SetZDCN1Energy(epQ) ;
  
  AliCentrality *centrality = esd.GetCentrality(); 
  Double_t acentrality=centrality->GetCentralityPercentileUnchecked("V0M");
  header->SetZDCN2Energy(acentrality) ;

  
}//______________________________________________________________________________
void AliPHOSEmbedding::ConvertPrimaryVertices(AliESDEvent const&esd){
  // Access to the AOD container of vertices

  // Access to the AOD container of vertices
  Int_t fNumberOfVertices = 0;
    
  Double_t pos[3] = { 0. };
  Double_t covVtx[6] = { 0. };

  // Add primary vertex. The primary tracks will be defined
  // after the loops on the composite objects (V0, cascades, kinks)
  const AliESDVertex *vtx = esd.GetPrimaryVertex();
  
  vtx->GetXYZ(pos); // position
  vtx->GetCovMatrix(covVtx); //covariance matrix
  
  TClonesArray * vertexes=AODEvent()->GetVertices();

  AliAODVertex* primaryVertex = new((*vertexes)[fNumberOfVertices++])
  AliAODVertex(pos, covVtx, vtx->GetChi2toNDF(), NULL, -1, AliAODVertex::kPrimary);
  primaryVertex->SetName(vtx->GetName());
  primaryVertex->SetTitle(vtx->GetTitle());
  
  TString vtitle = vtx->GetTitle();
  if (!vtitle.Contains("VertexerTracks")) 
    primaryVertex->SetNContributors(vtx->GetNContributors());
  
  if (fDebug > 0) primaryVertex->Print();  
  
  // Add SPD "main" vertex 
  const AliESDVertex *vtxS = esd.GetPrimaryVertexSPD();
  vtxS->GetXYZ(pos); // position
  vtxS->GetCovMatrix(covVtx); //covariance matrix
  AliAODVertex * mVSPD = new((*vertexes)[fNumberOfVertices++])
  AliAODVertex(pos, covVtx, vtxS->GetChi2toNDF(), NULL, -1, AliAODVertex::kMainSPD);
  mVSPD->SetName(vtxS->GetName());
  mVSPD->SetTitle(vtxS->GetTitle());
  mVSPD->SetNContributors(vtxS->GetNContributors()); 
  
  // Add SPD pileup vertices
  for(Int_t iV=0; iV<esd.GetNumberOfPileupVerticesSPD(); ++iV)
  {
    const AliESDVertex *vtxP = esd.GetPileupVertexSPD(iV);
    vtxP->GetXYZ(pos); // position
    vtxP->GetCovMatrix(covVtx); //covariance matrix
    AliAODVertex * pVSPD =  new((*vertexes)[fNumberOfVertices++])
    AliAODVertex(pos, covVtx, vtxP->GetChi2toNDF(), NULL, -1, AliAODVertex::kPileupSPD);
    pVSPD->SetName(vtxP->GetName());
    pVSPD->SetTitle(vtxP->GetTitle());
    pVSPD->SetNContributors(vtxP->GetNContributors()); 
  }
  
  // Add TRK pileup vertices
  for(Int_t iV=0; iV<esd.GetNumberOfPileupVerticesTracks(); ++iV)
  {
    const AliESDVertex *vtxP = esd.GetPileupVertexTracks(iV);
    vtxP->GetXYZ(pos); // position
    vtxP->GetCovMatrix(covVtx); //covariance matrix
    AliAODVertex * pVTRK = new((*vertexes)[fNumberOfVertices++])
    AliAODVertex(pos, covVtx, vtxP->GetChi2toNDF(), NULL, -1, AliAODVertex::kPileupTracks);
    pVTRK->SetName(vtxP->GetName());
    pVTRK->SetTitle(vtxP->GetTitle());
    pVTRK->SetNContributors(vtxP->GetNContributors());
  }

  
}
//__________________________________________________________________________________
void AliPHOSEmbedding::MakeDigits(AliAODEvent * signal){
  
  //-------------------------------------------------------------------------------------
  //Transform CaloCells into Digits which can be used for standard reconstruction
  //Add signal digits to the event
  //-------------------------------------------------------------------------------------
  
  fDigitsArr->Clear() ;
  fDigitsTree->Branch("PHOS","TClonesArray", &fDigitsArr, 32000);

  //First copy data digits
  Int_t ndigit=0 ;
  for (Short_t icell = 0; icell < fCellsPHOS->GetNumberOfCells(); icell++) {
    Short_t id=0;
    Double_t time=0., amp=0. ;
    Int_t mclabel;
    Double_t efrac =0. ;
    if (fCellsPHOS->GetCell(icell, id, amp, time,mclabel, efrac) != kTRUE)
      break;
        
    new((*fDigitsArr)[ndigit]) AliPHOSDigit(-1,id,float(amp),float(time),ndigit);
    ndigit++;
  }


  //Add Digits from Signal
  TClonesArray sdigits("AliPHOSDigit",0) ;
  Int_t isdigit=0 ;
  if(signal){
    AliAODCaloCells* cellsS = signal->GetPHOSCells();
    Int_t cellLabels[1000]={0} ;       //1000 should be enough for simulated
//    Int_t cellSecondLabels[1000]={0} ; //low-statistics event.
    for(Int_t i=0;i<cellsS->GetNumberOfCells();i++){
      cellLabels[i]=-1 ;
//      cellSecondLabels[i]=-1;
    }
    //------------------------------------------------------------------------------------
    //Ancestry information
    //Celect digits contributing to signal clusters and add primary information
    //(it is not stored in CaloCells)
    //------------------------------------------------------------------------------------
    sdigits.Expand(cellsS->GetNumberOfCells());
    for(Int_t i=0; i<signal->GetNumberOfCaloClusters(); i++) {    
      //cluster from embedded signal
      AliVCluster *clus = signal->GetCaloCluster(i);  
    
      if(!clus->IsPHOS())
        continue;
    
      Int_t label = clus->GetLabel();
//      Int_t label2 = -1 ;
//      if (clus->GetNLabels()>=2) label2 = clus->GetLabelAt(1) ;
    
      UShort_t * index    = clus->GetCellsAbsId() ;
      for(Int_t ic=0; ic < clus->GetNCells(); ic++ ){
        for (Int_t icell = 0; icell < cellsS->GetNumberOfCells(); icell++){
	   Short_t cellNumber;
	   Double_t cellAmplitude=0., cellTime=0. ;
           Int_t mclabel;
           Double_t efrac =0. ;
	   cellsS->GetCell(icell, cellNumber, cellAmplitude, cellTime,mclabel,efrac) ;
	   if(cellNumber==index[ic]){
	      cellLabels[icell]=label;
//              cellSecondLabels[icell]=label2;
	      break ;
	  }
        }
      }
    }

    for (Int_t icell = 0; icell < cellsS->GetNumberOfCells(); icell++) {
      Short_t cellNumber;
      Double_t cellAmplitude=0., cellTime=0. ;
      Int_t mclabel;
      Double_t efrac =0. ;
      if (cellsS->GetCell(icell, cellNumber, cellAmplitude, cellTime,mclabel,efrac) != kTRUE)
        break;
      //Add only digits related to the cluster, no noisy digits...
      if(cellLabels[icell]==-1){
        continue ;
      }    
      new(sdigits[isdigit]) AliPHOSDigit(cellLabels[icell],cellNumber,float(cellAmplitude),float(cellTime),isdigit);    
      isdigit++;
    }
  }

  
  //Merge digits  
  Int_t icurrent = 0 ; //index of the last used digit in underlying event
  fDigitsArr->Expand(ndigit+isdigit) ;
  for(Int_t i=0; i<isdigit;i++){
    AliPHOSDigit * sdigit=static_cast<AliPHOSDigit*>(sdigits.At(i)) ;
    Bool_t added=kFALSE ;
    for(Int_t id=icurrent;id<ndigit;id++){
      AliPHOSDigit * digit=static_cast<AliPHOSDigit*>(fDigitsArr->At(id)) ;
      if(sdigit->GetId() ==  digit->GetId() ){
        *digit += *sdigit ;  //add energies
	icurrent=id+1 ;
        added=kTRUE ;
	break ; //no more digits with same ID in the list
      }
      if(sdigit->GetId() < digit->GetId() ){
        icurrent=id ;
        break ; //no more digits with same ID in the list
      }
    }
    if(!added){
      new((*fDigitsArr)[ndigit]) AliPHOSDigit(*sdigit) ;
      ndigit++ ;
    }
  }
 
  //Change Amp back from Energy to ADC counts
  //Note that Reconstructor uses best ("new") calibration
  for(Int_t i=0; i<ndigit;i++){
     AliPHOSDigit * digit=static_cast<AliPHOSDigit*>(fDigitsArr->At(i)) ;
     Float_t calib =fPHOSReconstructor->Calibrate(1.,digit->GetId()) ;	
     if(calib>0.)
       digit->SetEnergy(digit->GetEnergy()/calib) ;
  }  
     
  fDigitsArr->Sort() ;
  for (Int_t i = 0 ; i < ndigit ; i++) { 
    AliPHOSDigit *digit = static_cast<AliPHOSDigit*>( fDigitsArr->At(i) ) ; 
    digit->SetIndexInList(i) ;     
  }
  fDigitsTree->Fill() ;

}
//__________________________________________________________________________________
void AliPHOSEmbedding::SetOldCalibration(TH2F **calibH){ 
  //Copy histograms with calibration coeff
  gROOT->cd() ;
  char name[55] ;
  for(Int_t i=0;i<5;i++){
    fOldPHOSCalibration[i] = new TH2F(*((TH2F*)calibH[i])) ;
    snprintf(name,55,"OldPHOSCalibrationMod%d",i) ;
    fOldPHOSCalibration[i]->SetName(name) ;
  }
}  
//____________________________________________________________________________
void AliPHOSEmbedding::InitMF(){
  
  printf("............Init MF \n") ;
  //------------------------------------
  // Initialization of the Mag.Fiels from GRP entry
  // Copied from AliReconstruction::InitGRP()
  //------------------------------------
  AliCDBEntry* entry = AliCDBManager::Instance()->Get("GRP/GRP/Data");
  AliGRPObject * aGRPData=0 ;
  if (entry) {

    TMap* m = dynamic_cast<TMap*>(entry->GetObject());  // old GRP entry

    if (m) {
       AliInfo("Found a TMap in GRP/GRP/Data, converting it into an AliGRPObject");
       m->Print();
       aGRPData = new AliGRPObject();
       aGRPData->ReadValuesFromMap(m);
    }

    else {
       AliInfo("Found an AliGRPObject in GRP/GRP/Data, reading it");
       aGRPData = dynamic_cast<AliGRPObject*>(entry->GetObject());  // new GRP entry
       entry->SetOwner(0);
    }
  }

  if (!aGRPData) {
     AliError("No GRP entry found in OCDB!");
     return ;
  }
  //*** Dealing with the magnetic field map
    
  TString lhcState = aGRPData->GetLHCState();
  if (lhcState==AliGRPObject::GetInvalidString()) {
    AliError("GRP/GRP/Data entry:  missing value for the LHC state ! Using UNKNOWN");
    lhcState = "UNKNOWN";
  }

  TString beamType = aGRPData->GetBeamType();
  if (beamType==AliGRPObject::GetInvalidString()) {
    AliError("GRP/GRP/Data entry:  missing value for the beam type ! Using UNKNOWN");
    beamType = "UNKNOWN";
  }

  Float_t beamEnergy = aGRPData->GetBeamEnergy();
  if (beamEnergy==AliGRPObject::GetInvalidFloat()) {
    AliError("GRP/GRP/Data entry:  missing value for the beam energy ! Using 0");
    beamEnergy = 0;
  }

  TString runType = aGRPData->GetRunType();
  if (runType==AliGRPObject::GetInvalidString()) {
    AliError("GRP/GRP/Data entry:  missing value for the run type ! Using UNKNOWN");
    runType = "UNKNOWN";
  }
  
  if ( TGeoGlobalMagField::Instance()->IsLocked() ) {
    if (TGeoGlobalMagField::Instance()->GetField()->TestBit(AliMagF::kOverrideGRP)) {
      AliInfo("PHOSEmbedding: MF is locked - GRP information will be ignored !");
      AliInfo("Running with the externally locked B field !");
    }
    else {
      AliInfo("Destroying existing B field instance!");
      delete TGeoGlobalMagField::Instance();
    }   
  }
  if ( !TGeoGlobalMagField::Instance()->IsLocked() ) {
    // Construct the field map out of the information retrieved from GRP.
    Bool_t ok = kTRUE;
    // L3
    Float_t l3Current = aGRPData->GetL3Current((AliGRPObject::Stats)0);
    if (l3Current == AliGRPObject::GetInvalidFloat()) {
      AliError("GRP/GRP/Data entry:  missing value for the L3 current !");
      ok = kFALSE;
    }

    Char_t l3Polarity = aGRPData->GetL3Polarity();
    if (l3Polarity == AliGRPObject::GetInvalidChar()) {
      AliError("GRP/GRP/Data entry:  missing value for the L3 polarity !");
      ok = kFALSE;
    }

    // Dipole
    Float_t diCurrent = aGRPData->GetDipoleCurrent((AliGRPObject::Stats)0);
    if (diCurrent == AliGRPObject::GetInvalidFloat()) {
      AliError("GRP/GRP/Data entry:  missing value for the dipole current !");
      ok = kFALSE;
    }

    Char_t diPolarity = aGRPData->GetDipolePolarity();
    if (diPolarity == AliGRPObject::GetInvalidChar()) {
      AliError("GRP/GRP/Data entry:  missing value for the dipole polarity !");
      ok = kFALSE;
    }

    // read special bits for the polarity convention and map type
    Int_t  polConvention = aGRPData->IsPolarityConventionLHC() ? AliMagF::kConvLHC : AliMagF::kConvDCS2008;
    Bool_t uniformB = aGRPData->IsUniformBMap();

    if (ok) {
      AliMagF* fld = AliMagF::CreateFieldMap(TMath::Abs(l3Current) * (l3Polarity ? -1:1),
                                             TMath::Abs(diCurrent) * (diPolarity ? -1:1),
                                             polConvention,uniformB,beamEnergy, beamType.Data());
      if (fld) {
        TGeoGlobalMagField::Instance()->SetField( fld );
        TGeoGlobalMagField::Instance()->Lock();
        AliInfo("Running with the B field constructed out of GRP !");
      }
      else AliFatal("Failed to create a B field map !");
    }
    else AliFatal("B field is neither set nor constructed from GRP ! Exitig...");
  }
  
}
//____________________________________________________________________________
void AliPHOSEmbedding::InitGeometry(){

  // Import ideal TGeo geometry and apply misalignment
  if (!gGeoManager) {
    AliGeomManager::LoadGeometry("geometry.root");
    if (!gGeoManager) {
      AliFatal("Can not load geometry");
    }
    if(!AliGeomManager::CheckSymNamesLUT("PHOS")) {
      AliFatal("CheckSymNamesLUT");
    }
  }
    

  TString detStr = "PHOS";
  TString loadAlObjsListOfDets = "PHOS";
        
  if(AliGeomManager::GetNalignable("GRP") != 0)
      loadAlObjsListOfDets.Prepend("GRP "); //add alignment objects for non-sensitive modules
//  AliGeomManager::ApplyAlignObjsFromCDB(loadAlObjsListOfDets.Data());

  AliCDBManager::Instance()->UnloadFromCache("*/Align/*");
  AliCDBManager::Instance()->UnloadFromCache("GRP/Geometry/Data");
 
}
//____________________________________________________________________________
Float_t AliPHOSEmbedding::TestCPV(Double_t dx, Double_t dz, Double_t pt, Int_t charge){
  //Parameterization of LHC10h period
  //_true if neutral_
  
  Double_t meanX=0;
  Double_t meanZ=0.;
  Double_t sx=TMath::Min(5.4,2.59719e+02*TMath::Exp(-pt/1.02053e-01)+
              6.58365e-01*5.91917e-01*5.91917e-01/((pt-9.61306e-01)*(pt-9.61306e-01)+5.91917e-01*5.91917e-01)+1.59219);
  Double_t sz=TMath::Min(2.75,4.90341e+02*1.91456e-02*1.91456e-02/(pt*pt+1.91456e-02*1.91456e-02)+1.60) ;
  
  AliESDEvent *event = static_cast<AliESDEvent*>(InputEvent());
  Double_t mf = event->GetMagneticField(); //Positive for ++ and negative for --

  if(mf<0.){ //field --
    meanZ = -0.468318 ;
    if(charge>0)
      meanX=TMath::Min(7.3, 3.89994*1.20679*1.20679/(pt*pt+1.20679*1.20679)+0.249029+2.49088e+07*TMath::Exp(-pt*3.33650e+01)) ;
    else
      meanX=-TMath::Min(7.7,3.86040*0.912499*0.912499/(pt*pt+0.912499*0.912499)+1.23114+4.48277e+05*TMath::Exp(-pt*2.57070e+01)) ;
  }
  else{ //Field ++
    meanZ= -0.468318;
    if(charge>0)
      meanX=-TMath::Min(8.0,3.86040*1.31357*1.31357/(pt*pt+1.31357*1.31357)+0.880579+7.56199e+06*TMath::Exp(-pt*3.08451e+01)) ;
    else
      meanX= TMath::Min(6.85, 3.89994*1.16240*1.16240/(pt*pt+1.16240*1.16240)-0.120787+2.20275e+05*TMath::Exp(-pt*2.40913e+01)) ;     
  }

  Double_t rz=(dz-meanZ)/sz ;
  Double_t rx=(dx-meanX)/sx ;
  return TMath::Sqrt(rx*rx+rz*rz) ;
}

 AliPHOSEmbedding.cxx:1
 AliPHOSEmbedding.cxx:2
 AliPHOSEmbedding.cxx:3
 AliPHOSEmbedding.cxx:4
 AliPHOSEmbedding.cxx:5
 AliPHOSEmbedding.cxx:6
 AliPHOSEmbedding.cxx:7
 AliPHOSEmbedding.cxx:8
 AliPHOSEmbedding.cxx:9
 AliPHOSEmbedding.cxx:10
 AliPHOSEmbedding.cxx:11
 AliPHOSEmbedding.cxx:12
 AliPHOSEmbedding.cxx:13
 AliPHOSEmbedding.cxx:14
 AliPHOSEmbedding.cxx:15
 AliPHOSEmbedding.cxx:16
 AliPHOSEmbedding.cxx:17
 AliPHOSEmbedding.cxx:18
 AliPHOSEmbedding.cxx:19
 AliPHOSEmbedding.cxx:20
 AliPHOSEmbedding.cxx:21
 AliPHOSEmbedding.cxx:22
 AliPHOSEmbedding.cxx:23
 AliPHOSEmbedding.cxx:24
 AliPHOSEmbedding.cxx:25
 AliPHOSEmbedding.cxx:26
 AliPHOSEmbedding.cxx:27
 AliPHOSEmbedding.cxx:28
 AliPHOSEmbedding.cxx:29
 AliPHOSEmbedding.cxx:30
 AliPHOSEmbedding.cxx:31
 AliPHOSEmbedding.cxx:32
 AliPHOSEmbedding.cxx:33
 AliPHOSEmbedding.cxx:34
 AliPHOSEmbedding.cxx:35
 AliPHOSEmbedding.cxx:36
 AliPHOSEmbedding.cxx:37
 AliPHOSEmbedding.cxx:38
 AliPHOSEmbedding.cxx:39
 AliPHOSEmbedding.cxx:40
 AliPHOSEmbedding.cxx:41
 AliPHOSEmbedding.cxx:42
 AliPHOSEmbedding.cxx:43
 AliPHOSEmbedding.cxx:44
 AliPHOSEmbedding.cxx:45
 AliPHOSEmbedding.cxx:46
 AliPHOSEmbedding.cxx:47
 AliPHOSEmbedding.cxx:48
 AliPHOSEmbedding.cxx:49
 AliPHOSEmbedding.cxx:50
 AliPHOSEmbedding.cxx:51
 AliPHOSEmbedding.cxx:52
 AliPHOSEmbedding.cxx:53
 AliPHOSEmbedding.cxx:54
 AliPHOSEmbedding.cxx:55
 AliPHOSEmbedding.cxx:56
 AliPHOSEmbedding.cxx:57
 AliPHOSEmbedding.cxx:58
 AliPHOSEmbedding.cxx:59
 AliPHOSEmbedding.cxx:60
 AliPHOSEmbedding.cxx:61
 AliPHOSEmbedding.cxx:62
 AliPHOSEmbedding.cxx:63
 AliPHOSEmbedding.cxx:64
 AliPHOSEmbedding.cxx:65
 AliPHOSEmbedding.cxx:66
 AliPHOSEmbedding.cxx:67
 AliPHOSEmbedding.cxx:68
 AliPHOSEmbedding.cxx:69
 AliPHOSEmbedding.cxx:70
 AliPHOSEmbedding.cxx:71
 AliPHOSEmbedding.cxx:72
 AliPHOSEmbedding.cxx:73
 AliPHOSEmbedding.cxx:74
 AliPHOSEmbedding.cxx:75
 AliPHOSEmbedding.cxx:76
 AliPHOSEmbedding.cxx:77
 AliPHOSEmbedding.cxx:78
 AliPHOSEmbedding.cxx:79
 AliPHOSEmbedding.cxx:80
 AliPHOSEmbedding.cxx:81
 AliPHOSEmbedding.cxx:82
 AliPHOSEmbedding.cxx:83
 AliPHOSEmbedding.cxx:84
 AliPHOSEmbedding.cxx:85
 AliPHOSEmbedding.cxx:86
 AliPHOSEmbedding.cxx:87
 AliPHOSEmbedding.cxx:88
 AliPHOSEmbedding.cxx:89
 AliPHOSEmbedding.cxx:90
 AliPHOSEmbedding.cxx:91
 AliPHOSEmbedding.cxx:92
 AliPHOSEmbedding.cxx:93
 AliPHOSEmbedding.cxx:94
 AliPHOSEmbedding.cxx:95
 AliPHOSEmbedding.cxx:96
 AliPHOSEmbedding.cxx:97
 AliPHOSEmbedding.cxx:98
 AliPHOSEmbedding.cxx:99
 AliPHOSEmbedding.cxx:100
 AliPHOSEmbedding.cxx:101
 AliPHOSEmbedding.cxx:102
 AliPHOSEmbedding.cxx:103
 AliPHOSEmbedding.cxx:104
 AliPHOSEmbedding.cxx:105
 AliPHOSEmbedding.cxx:106
 AliPHOSEmbedding.cxx:107
 AliPHOSEmbedding.cxx:108
 AliPHOSEmbedding.cxx:109
 AliPHOSEmbedding.cxx:110
 AliPHOSEmbedding.cxx:111
 AliPHOSEmbedding.cxx:112
 AliPHOSEmbedding.cxx:113
 AliPHOSEmbedding.cxx:114
 AliPHOSEmbedding.cxx:115
 AliPHOSEmbedding.cxx:116
 AliPHOSEmbedding.cxx:117
 AliPHOSEmbedding.cxx:118
 AliPHOSEmbedding.cxx:119
 AliPHOSEmbedding.cxx:120
 AliPHOSEmbedding.cxx:121
 AliPHOSEmbedding.cxx:122
 AliPHOSEmbedding.cxx:123
 AliPHOSEmbedding.cxx:124
 AliPHOSEmbedding.cxx:125
 AliPHOSEmbedding.cxx:126
 AliPHOSEmbedding.cxx:127
 AliPHOSEmbedding.cxx:128
 AliPHOSEmbedding.cxx:129
 AliPHOSEmbedding.cxx:130
 AliPHOSEmbedding.cxx:131
 AliPHOSEmbedding.cxx:132
 AliPHOSEmbedding.cxx:133
 AliPHOSEmbedding.cxx:134
 AliPHOSEmbedding.cxx:135
 AliPHOSEmbedding.cxx:136
 AliPHOSEmbedding.cxx:137
 AliPHOSEmbedding.cxx:138
 AliPHOSEmbedding.cxx:139
 AliPHOSEmbedding.cxx:140
 AliPHOSEmbedding.cxx:141
 AliPHOSEmbedding.cxx:142
 AliPHOSEmbedding.cxx:143
 AliPHOSEmbedding.cxx:144
 AliPHOSEmbedding.cxx:145
 AliPHOSEmbedding.cxx:146
 AliPHOSEmbedding.cxx:147
 AliPHOSEmbedding.cxx:148
 AliPHOSEmbedding.cxx:149
 AliPHOSEmbedding.cxx:150
 AliPHOSEmbedding.cxx:151
 AliPHOSEmbedding.cxx:152
 AliPHOSEmbedding.cxx:153
 AliPHOSEmbedding.cxx:154
 AliPHOSEmbedding.cxx:155
 AliPHOSEmbedding.cxx:156
 AliPHOSEmbedding.cxx:157
 AliPHOSEmbedding.cxx:158
 AliPHOSEmbedding.cxx:159
 AliPHOSEmbedding.cxx:160
 AliPHOSEmbedding.cxx:161
 AliPHOSEmbedding.cxx:162
 AliPHOSEmbedding.cxx:163
 AliPHOSEmbedding.cxx:164
 AliPHOSEmbedding.cxx:165
 AliPHOSEmbedding.cxx:166
 AliPHOSEmbedding.cxx:167
 AliPHOSEmbedding.cxx:168
 AliPHOSEmbedding.cxx:169
 AliPHOSEmbedding.cxx:170
 AliPHOSEmbedding.cxx:171
 AliPHOSEmbedding.cxx:172
 AliPHOSEmbedding.cxx:173
 AliPHOSEmbedding.cxx:174
 AliPHOSEmbedding.cxx:175
 AliPHOSEmbedding.cxx:176
 AliPHOSEmbedding.cxx:177
 AliPHOSEmbedding.cxx:178
 AliPHOSEmbedding.cxx:179
 AliPHOSEmbedding.cxx:180
 AliPHOSEmbedding.cxx:181
 AliPHOSEmbedding.cxx:182
 AliPHOSEmbedding.cxx:183
 AliPHOSEmbedding.cxx:184
 AliPHOSEmbedding.cxx:185
 AliPHOSEmbedding.cxx:186
 AliPHOSEmbedding.cxx:187
 AliPHOSEmbedding.cxx:188
 AliPHOSEmbedding.cxx:189
 AliPHOSEmbedding.cxx:190
 AliPHOSEmbedding.cxx:191
 AliPHOSEmbedding.cxx:192
 AliPHOSEmbedding.cxx:193
 AliPHOSEmbedding.cxx:194
 AliPHOSEmbedding.cxx:195
 AliPHOSEmbedding.cxx:196
 AliPHOSEmbedding.cxx:197
 AliPHOSEmbedding.cxx:198
 AliPHOSEmbedding.cxx:199
 AliPHOSEmbedding.cxx:200
 AliPHOSEmbedding.cxx:201
 AliPHOSEmbedding.cxx:202
 AliPHOSEmbedding.cxx:203
 AliPHOSEmbedding.cxx:204
 AliPHOSEmbedding.cxx:205
 AliPHOSEmbedding.cxx:206
 AliPHOSEmbedding.cxx:207
 AliPHOSEmbedding.cxx:208
 AliPHOSEmbedding.cxx:209
 AliPHOSEmbedding.cxx:210
 AliPHOSEmbedding.cxx:211
 AliPHOSEmbedding.cxx:212
 AliPHOSEmbedding.cxx:213
 AliPHOSEmbedding.cxx:214
 AliPHOSEmbedding.cxx:215
 AliPHOSEmbedding.cxx:216
 AliPHOSEmbedding.cxx:217
 AliPHOSEmbedding.cxx:218
 AliPHOSEmbedding.cxx:219
 AliPHOSEmbedding.cxx:220
 AliPHOSEmbedding.cxx:221
 AliPHOSEmbedding.cxx:222
 AliPHOSEmbedding.cxx:223
 AliPHOSEmbedding.cxx:224
 AliPHOSEmbedding.cxx:225
 AliPHOSEmbedding.cxx:226
 AliPHOSEmbedding.cxx:227
 AliPHOSEmbedding.cxx:228
 AliPHOSEmbedding.cxx:229
 AliPHOSEmbedding.cxx:230
 AliPHOSEmbedding.cxx:231
 AliPHOSEmbedding.cxx:232
 AliPHOSEmbedding.cxx:233
 AliPHOSEmbedding.cxx:234
 AliPHOSEmbedding.cxx:235
 AliPHOSEmbedding.cxx:236
 AliPHOSEmbedding.cxx:237
 AliPHOSEmbedding.cxx:238
 AliPHOSEmbedding.cxx:239
 AliPHOSEmbedding.cxx:240
 AliPHOSEmbedding.cxx:241
 AliPHOSEmbedding.cxx:242
 AliPHOSEmbedding.cxx:243
 AliPHOSEmbedding.cxx:244
 AliPHOSEmbedding.cxx:245
 AliPHOSEmbedding.cxx:246
 AliPHOSEmbedding.cxx:247
 AliPHOSEmbedding.cxx:248
 AliPHOSEmbedding.cxx:249
 AliPHOSEmbedding.cxx:250
 AliPHOSEmbedding.cxx:251
 AliPHOSEmbedding.cxx:252
 AliPHOSEmbedding.cxx:253
 AliPHOSEmbedding.cxx:254
 AliPHOSEmbedding.cxx:255
 AliPHOSEmbedding.cxx:256
 AliPHOSEmbedding.cxx:257
 AliPHOSEmbedding.cxx:258
 AliPHOSEmbedding.cxx:259
 AliPHOSEmbedding.cxx:260
 AliPHOSEmbedding.cxx:261
 AliPHOSEmbedding.cxx:262
 AliPHOSEmbedding.cxx:263
 AliPHOSEmbedding.cxx:264
 AliPHOSEmbedding.cxx:265
 AliPHOSEmbedding.cxx:266
 AliPHOSEmbedding.cxx:267
 AliPHOSEmbedding.cxx:268
 AliPHOSEmbedding.cxx:269
 AliPHOSEmbedding.cxx:270
 AliPHOSEmbedding.cxx:271
 AliPHOSEmbedding.cxx:272
 AliPHOSEmbedding.cxx:273
 AliPHOSEmbedding.cxx:274
 AliPHOSEmbedding.cxx:275
 AliPHOSEmbedding.cxx:276
 AliPHOSEmbedding.cxx:277
 AliPHOSEmbedding.cxx:278
 AliPHOSEmbedding.cxx:279
 AliPHOSEmbedding.cxx:280
 AliPHOSEmbedding.cxx:281
 AliPHOSEmbedding.cxx:282
 AliPHOSEmbedding.cxx:283
 AliPHOSEmbedding.cxx:284
 AliPHOSEmbedding.cxx:285
 AliPHOSEmbedding.cxx:286
 AliPHOSEmbedding.cxx:287
 AliPHOSEmbedding.cxx:288
 AliPHOSEmbedding.cxx:289
 AliPHOSEmbedding.cxx:290
 AliPHOSEmbedding.cxx:291
 AliPHOSEmbedding.cxx:292
 AliPHOSEmbedding.cxx:293
 AliPHOSEmbedding.cxx:294
 AliPHOSEmbedding.cxx:295
 AliPHOSEmbedding.cxx:296
 AliPHOSEmbedding.cxx:297
 AliPHOSEmbedding.cxx:298
 AliPHOSEmbedding.cxx:299
 AliPHOSEmbedding.cxx:300
 AliPHOSEmbedding.cxx:301
 AliPHOSEmbedding.cxx:302
 AliPHOSEmbedding.cxx:303
 AliPHOSEmbedding.cxx:304
 AliPHOSEmbedding.cxx:305
 AliPHOSEmbedding.cxx:306
 AliPHOSEmbedding.cxx:307
 AliPHOSEmbedding.cxx:308
 AliPHOSEmbedding.cxx:309
 AliPHOSEmbedding.cxx:310
 AliPHOSEmbedding.cxx:311
 AliPHOSEmbedding.cxx:312
 AliPHOSEmbedding.cxx:313
 AliPHOSEmbedding.cxx:314
 AliPHOSEmbedding.cxx:315
 AliPHOSEmbedding.cxx:316
 AliPHOSEmbedding.cxx:317
 AliPHOSEmbedding.cxx:318
 AliPHOSEmbedding.cxx:319
 AliPHOSEmbedding.cxx:320
 AliPHOSEmbedding.cxx:321
 AliPHOSEmbedding.cxx:322
 AliPHOSEmbedding.cxx:323
 AliPHOSEmbedding.cxx:324
 AliPHOSEmbedding.cxx:325
 AliPHOSEmbedding.cxx:326
 AliPHOSEmbedding.cxx:327
 AliPHOSEmbedding.cxx:328
 AliPHOSEmbedding.cxx:329
 AliPHOSEmbedding.cxx:330
 AliPHOSEmbedding.cxx:331
 AliPHOSEmbedding.cxx:332
 AliPHOSEmbedding.cxx:333
 AliPHOSEmbedding.cxx:334
 AliPHOSEmbedding.cxx:335
 AliPHOSEmbedding.cxx:336
 AliPHOSEmbedding.cxx:337
 AliPHOSEmbedding.cxx:338
 AliPHOSEmbedding.cxx:339
 AliPHOSEmbedding.cxx:340
 AliPHOSEmbedding.cxx:341
 AliPHOSEmbedding.cxx:342
 AliPHOSEmbedding.cxx:343
 AliPHOSEmbedding.cxx:344
 AliPHOSEmbedding.cxx:345
 AliPHOSEmbedding.cxx:346
 AliPHOSEmbedding.cxx:347
 AliPHOSEmbedding.cxx:348
 AliPHOSEmbedding.cxx:349
 AliPHOSEmbedding.cxx:350
 AliPHOSEmbedding.cxx:351
 AliPHOSEmbedding.cxx:352
 AliPHOSEmbedding.cxx:353
 AliPHOSEmbedding.cxx:354
 AliPHOSEmbedding.cxx:355
 AliPHOSEmbedding.cxx:356
 AliPHOSEmbedding.cxx:357
 AliPHOSEmbedding.cxx:358
 AliPHOSEmbedding.cxx:359
 AliPHOSEmbedding.cxx:360
 AliPHOSEmbedding.cxx:361
 AliPHOSEmbedding.cxx:362
 AliPHOSEmbedding.cxx:363
 AliPHOSEmbedding.cxx:364
 AliPHOSEmbedding.cxx:365
 AliPHOSEmbedding.cxx:366
 AliPHOSEmbedding.cxx:367
 AliPHOSEmbedding.cxx:368
 AliPHOSEmbedding.cxx:369
 AliPHOSEmbedding.cxx:370
 AliPHOSEmbedding.cxx:371
 AliPHOSEmbedding.cxx:372
 AliPHOSEmbedding.cxx:373
 AliPHOSEmbedding.cxx:374
 AliPHOSEmbedding.cxx:375
 AliPHOSEmbedding.cxx:376
 AliPHOSEmbedding.cxx:377
 AliPHOSEmbedding.cxx:378
 AliPHOSEmbedding.cxx:379
 AliPHOSEmbedding.cxx:380
 AliPHOSEmbedding.cxx:381
 AliPHOSEmbedding.cxx:382
 AliPHOSEmbedding.cxx:383
 AliPHOSEmbedding.cxx:384
 AliPHOSEmbedding.cxx:385
 AliPHOSEmbedding.cxx:386
 AliPHOSEmbedding.cxx:387
 AliPHOSEmbedding.cxx:388
 AliPHOSEmbedding.cxx:389
 AliPHOSEmbedding.cxx:390
 AliPHOSEmbedding.cxx:391
 AliPHOSEmbedding.cxx:392
 AliPHOSEmbedding.cxx:393
 AliPHOSEmbedding.cxx:394
 AliPHOSEmbedding.cxx:395
 AliPHOSEmbedding.cxx:396
 AliPHOSEmbedding.cxx:397
 AliPHOSEmbedding.cxx:398
 AliPHOSEmbedding.cxx:399
 AliPHOSEmbedding.cxx:400
 AliPHOSEmbedding.cxx:401
 AliPHOSEmbedding.cxx:402
 AliPHOSEmbedding.cxx:403
 AliPHOSEmbedding.cxx:404
 AliPHOSEmbedding.cxx:405
 AliPHOSEmbedding.cxx:406
 AliPHOSEmbedding.cxx:407
 AliPHOSEmbedding.cxx:408
 AliPHOSEmbedding.cxx:409
 AliPHOSEmbedding.cxx:410
 AliPHOSEmbedding.cxx:411
 AliPHOSEmbedding.cxx:412
 AliPHOSEmbedding.cxx:413
 AliPHOSEmbedding.cxx:414
 AliPHOSEmbedding.cxx:415
 AliPHOSEmbedding.cxx:416
 AliPHOSEmbedding.cxx:417
 AliPHOSEmbedding.cxx:418
 AliPHOSEmbedding.cxx:419
 AliPHOSEmbedding.cxx:420
 AliPHOSEmbedding.cxx:421
 AliPHOSEmbedding.cxx:422
 AliPHOSEmbedding.cxx:423
 AliPHOSEmbedding.cxx:424
 AliPHOSEmbedding.cxx:425
 AliPHOSEmbedding.cxx:426
 AliPHOSEmbedding.cxx:427
 AliPHOSEmbedding.cxx:428
 AliPHOSEmbedding.cxx:429
 AliPHOSEmbedding.cxx:430
 AliPHOSEmbedding.cxx:431
 AliPHOSEmbedding.cxx:432
 AliPHOSEmbedding.cxx:433
 AliPHOSEmbedding.cxx:434
 AliPHOSEmbedding.cxx:435
 AliPHOSEmbedding.cxx:436
 AliPHOSEmbedding.cxx:437
 AliPHOSEmbedding.cxx:438
 AliPHOSEmbedding.cxx:439
 AliPHOSEmbedding.cxx:440
 AliPHOSEmbedding.cxx:441
 AliPHOSEmbedding.cxx:442
 AliPHOSEmbedding.cxx:443
 AliPHOSEmbedding.cxx:444
 AliPHOSEmbedding.cxx:445
 AliPHOSEmbedding.cxx:446
 AliPHOSEmbedding.cxx:447
 AliPHOSEmbedding.cxx:448
 AliPHOSEmbedding.cxx:449
 AliPHOSEmbedding.cxx:450
 AliPHOSEmbedding.cxx:451
 AliPHOSEmbedding.cxx:452
 AliPHOSEmbedding.cxx:453
 AliPHOSEmbedding.cxx:454
 AliPHOSEmbedding.cxx:455
 AliPHOSEmbedding.cxx:456
 AliPHOSEmbedding.cxx:457
 AliPHOSEmbedding.cxx:458
 AliPHOSEmbedding.cxx:459
 AliPHOSEmbedding.cxx:460
 AliPHOSEmbedding.cxx:461
 AliPHOSEmbedding.cxx:462
 AliPHOSEmbedding.cxx:463
 AliPHOSEmbedding.cxx:464
 AliPHOSEmbedding.cxx:465
 AliPHOSEmbedding.cxx:466
 AliPHOSEmbedding.cxx:467
 AliPHOSEmbedding.cxx:468
 AliPHOSEmbedding.cxx:469
 AliPHOSEmbedding.cxx:470
 AliPHOSEmbedding.cxx:471
 AliPHOSEmbedding.cxx:472
 AliPHOSEmbedding.cxx:473
 AliPHOSEmbedding.cxx:474
 AliPHOSEmbedding.cxx:475
 AliPHOSEmbedding.cxx:476
 AliPHOSEmbedding.cxx:477
 AliPHOSEmbedding.cxx:478
 AliPHOSEmbedding.cxx:479
 AliPHOSEmbedding.cxx:480
 AliPHOSEmbedding.cxx:481
 AliPHOSEmbedding.cxx:482
 AliPHOSEmbedding.cxx:483
 AliPHOSEmbedding.cxx:484
 AliPHOSEmbedding.cxx:485
 AliPHOSEmbedding.cxx:486
 AliPHOSEmbedding.cxx:487
 AliPHOSEmbedding.cxx:488
 AliPHOSEmbedding.cxx:489
 AliPHOSEmbedding.cxx:490
 AliPHOSEmbedding.cxx:491
 AliPHOSEmbedding.cxx:492
 AliPHOSEmbedding.cxx:493
 AliPHOSEmbedding.cxx:494
 AliPHOSEmbedding.cxx:495
 AliPHOSEmbedding.cxx:496
 AliPHOSEmbedding.cxx:497
 AliPHOSEmbedding.cxx:498
 AliPHOSEmbedding.cxx:499
 AliPHOSEmbedding.cxx:500
 AliPHOSEmbedding.cxx:501
 AliPHOSEmbedding.cxx:502
 AliPHOSEmbedding.cxx:503
 AliPHOSEmbedding.cxx:504
 AliPHOSEmbedding.cxx:505
 AliPHOSEmbedding.cxx:506
 AliPHOSEmbedding.cxx:507
 AliPHOSEmbedding.cxx:508
 AliPHOSEmbedding.cxx:509
 AliPHOSEmbedding.cxx:510
 AliPHOSEmbedding.cxx:511
 AliPHOSEmbedding.cxx:512
 AliPHOSEmbedding.cxx:513
 AliPHOSEmbedding.cxx:514
 AliPHOSEmbedding.cxx:515
 AliPHOSEmbedding.cxx:516
 AliPHOSEmbedding.cxx:517
 AliPHOSEmbedding.cxx:518
 AliPHOSEmbedding.cxx:519
 AliPHOSEmbedding.cxx:520
 AliPHOSEmbedding.cxx:521
 AliPHOSEmbedding.cxx:522
 AliPHOSEmbedding.cxx:523
 AliPHOSEmbedding.cxx:524
 AliPHOSEmbedding.cxx:525
 AliPHOSEmbedding.cxx:526
 AliPHOSEmbedding.cxx:527
 AliPHOSEmbedding.cxx:528
 AliPHOSEmbedding.cxx:529
 AliPHOSEmbedding.cxx:530
 AliPHOSEmbedding.cxx:531
 AliPHOSEmbedding.cxx:532
 AliPHOSEmbedding.cxx:533
 AliPHOSEmbedding.cxx:534
 AliPHOSEmbedding.cxx:535
 AliPHOSEmbedding.cxx:536
 AliPHOSEmbedding.cxx:537
 AliPHOSEmbedding.cxx:538
 AliPHOSEmbedding.cxx:539
 AliPHOSEmbedding.cxx:540
 AliPHOSEmbedding.cxx:541
 AliPHOSEmbedding.cxx:542
 AliPHOSEmbedding.cxx:543
 AliPHOSEmbedding.cxx:544
 AliPHOSEmbedding.cxx:545
 AliPHOSEmbedding.cxx:546
 AliPHOSEmbedding.cxx:547
 AliPHOSEmbedding.cxx:548
 AliPHOSEmbedding.cxx:549
 AliPHOSEmbedding.cxx:550
 AliPHOSEmbedding.cxx:551
 AliPHOSEmbedding.cxx:552
 AliPHOSEmbedding.cxx:553
 AliPHOSEmbedding.cxx:554
 AliPHOSEmbedding.cxx:555
 AliPHOSEmbedding.cxx:556
 AliPHOSEmbedding.cxx:557
 AliPHOSEmbedding.cxx:558
 AliPHOSEmbedding.cxx:559
 AliPHOSEmbedding.cxx:560
 AliPHOSEmbedding.cxx:561
 AliPHOSEmbedding.cxx:562
 AliPHOSEmbedding.cxx:563
 AliPHOSEmbedding.cxx:564
 AliPHOSEmbedding.cxx:565
 AliPHOSEmbedding.cxx:566
 AliPHOSEmbedding.cxx:567
 AliPHOSEmbedding.cxx:568
 AliPHOSEmbedding.cxx:569
 AliPHOSEmbedding.cxx:570
 AliPHOSEmbedding.cxx:571
 AliPHOSEmbedding.cxx:572
 AliPHOSEmbedding.cxx:573
 AliPHOSEmbedding.cxx:574
 AliPHOSEmbedding.cxx:575
 AliPHOSEmbedding.cxx:576
 AliPHOSEmbedding.cxx:577
 AliPHOSEmbedding.cxx:578
 AliPHOSEmbedding.cxx:579
 AliPHOSEmbedding.cxx:580
 AliPHOSEmbedding.cxx:581
 AliPHOSEmbedding.cxx:582
 AliPHOSEmbedding.cxx:583
 AliPHOSEmbedding.cxx:584
 AliPHOSEmbedding.cxx:585
 AliPHOSEmbedding.cxx:586
 AliPHOSEmbedding.cxx:587
 AliPHOSEmbedding.cxx:588
 AliPHOSEmbedding.cxx:589
 AliPHOSEmbedding.cxx:590
 AliPHOSEmbedding.cxx:591
 AliPHOSEmbedding.cxx:592
 AliPHOSEmbedding.cxx:593
 AliPHOSEmbedding.cxx:594
 AliPHOSEmbedding.cxx:595
 AliPHOSEmbedding.cxx:596
 AliPHOSEmbedding.cxx:597
 AliPHOSEmbedding.cxx:598
 AliPHOSEmbedding.cxx:599
 AliPHOSEmbedding.cxx:600
 AliPHOSEmbedding.cxx:601
 AliPHOSEmbedding.cxx:602
 AliPHOSEmbedding.cxx:603
 AliPHOSEmbedding.cxx:604
 AliPHOSEmbedding.cxx:605
 AliPHOSEmbedding.cxx:606
 AliPHOSEmbedding.cxx:607
 AliPHOSEmbedding.cxx:608
 AliPHOSEmbedding.cxx:609
 AliPHOSEmbedding.cxx:610
 AliPHOSEmbedding.cxx:611
 AliPHOSEmbedding.cxx:612
 AliPHOSEmbedding.cxx:613
 AliPHOSEmbedding.cxx:614
 AliPHOSEmbedding.cxx:615
 AliPHOSEmbedding.cxx:616
 AliPHOSEmbedding.cxx:617
 AliPHOSEmbedding.cxx:618
 AliPHOSEmbedding.cxx:619
 AliPHOSEmbedding.cxx:620
 AliPHOSEmbedding.cxx:621
 AliPHOSEmbedding.cxx:622
 AliPHOSEmbedding.cxx:623
 AliPHOSEmbedding.cxx:624
 AliPHOSEmbedding.cxx:625
 AliPHOSEmbedding.cxx:626
 AliPHOSEmbedding.cxx:627
 AliPHOSEmbedding.cxx:628
 AliPHOSEmbedding.cxx:629
 AliPHOSEmbedding.cxx:630
 AliPHOSEmbedding.cxx:631
 AliPHOSEmbedding.cxx:632
 AliPHOSEmbedding.cxx:633
 AliPHOSEmbedding.cxx:634
 AliPHOSEmbedding.cxx:635
 AliPHOSEmbedding.cxx:636
 AliPHOSEmbedding.cxx:637
 AliPHOSEmbedding.cxx:638
 AliPHOSEmbedding.cxx:639
 AliPHOSEmbedding.cxx:640
 AliPHOSEmbedding.cxx:641
 AliPHOSEmbedding.cxx:642
 AliPHOSEmbedding.cxx:643
 AliPHOSEmbedding.cxx:644
 AliPHOSEmbedding.cxx:645
 AliPHOSEmbedding.cxx:646
 AliPHOSEmbedding.cxx:647
 AliPHOSEmbedding.cxx:648
 AliPHOSEmbedding.cxx:649
 AliPHOSEmbedding.cxx:650
 AliPHOSEmbedding.cxx:651
 AliPHOSEmbedding.cxx:652
 AliPHOSEmbedding.cxx:653
 AliPHOSEmbedding.cxx:654
 AliPHOSEmbedding.cxx:655
 AliPHOSEmbedding.cxx:656
 AliPHOSEmbedding.cxx:657
 AliPHOSEmbedding.cxx:658
 AliPHOSEmbedding.cxx:659
 AliPHOSEmbedding.cxx:660
 AliPHOSEmbedding.cxx:661
 AliPHOSEmbedding.cxx:662
 AliPHOSEmbedding.cxx:663
 AliPHOSEmbedding.cxx:664
 AliPHOSEmbedding.cxx:665
 AliPHOSEmbedding.cxx:666
 AliPHOSEmbedding.cxx:667
 AliPHOSEmbedding.cxx:668
 AliPHOSEmbedding.cxx:669
 AliPHOSEmbedding.cxx:670
 AliPHOSEmbedding.cxx:671
 AliPHOSEmbedding.cxx:672
 AliPHOSEmbedding.cxx:673
 AliPHOSEmbedding.cxx:674
 AliPHOSEmbedding.cxx:675
 AliPHOSEmbedding.cxx:676
 AliPHOSEmbedding.cxx:677
 AliPHOSEmbedding.cxx:678
 AliPHOSEmbedding.cxx:679
 AliPHOSEmbedding.cxx:680
 AliPHOSEmbedding.cxx:681
 AliPHOSEmbedding.cxx:682
 AliPHOSEmbedding.cxx:683
 AliPHOSEmbedding.cxx:684
 AliPHOSEmbedding.cxx:685
 AliPHOSEmbedding.cxx:686
 AliPHOSEmbedding.cxx:687
 AliPHOSEmbedding.cxx:688
 AliPHOSEmbedding.cxx:689
 AliPHOSEmbedding.cxx:690
 AliPHOSEmbedding.cxx:691
 AliPHOSEmbedding.cxx:692
 AliPHOSEmbedding.cxx:693
 AliPHOSEmbedding.cxx:694
 AliPHOSEmbedding.cxx:695
 AliPHOSEmbedding.cxx:696
 AliPHOSEmbedding.cxx:697
 AliPHOSEmbedding.cxx:698
 AliPHOSEmbedding.cxx:699
 AliPHOSEmbedding.cxx:700
 AliPHOSEmbedding.cxx:701
 AliPHOSEmbedding.cxx:702
 AliPHOSEmbedding.cxx:703
 AliPHOSEmbedding.cxx:704
 AliPHOSEmbedding.cxx:705
 AliPHOSEmbedding.cxx:706
 AliPHOSEmbedding.cxx:707
 AliPHOSEmbedding.cxx:708
 AliPHOSEmbedding.cxx:709
 AliPHOSEmbedding.cxx:710
 AliPHOSEmbedding.cxx:711
 AliPHOSEmbedding.cxx:712
 AliPHOSEmbedding.cxx:713
 AliPHOSEmbedding.cxx:714
 AliPHOSEmbedding.cxx:715
 AliPHOSEmbedding.cxx:716
 AliPHOSEmbedding.cxx:717
 AliPHOSEmbedding.cxx:718
 AliPHOSEmbedding.cxx:719
 AliPHOSEmbedding.cxx:720
 AliPHOSEmbedding.cxx:721
 AliPHOSEmbedding.cxx:722
 AliPHOSEmbedding.cxx:723
 AliPHOSEmbedding.cxx:724
 AliPHOSEmbedding.cxx:725
 AliPHOSEmbedding.cxx:726
 AliPHOSEmbedding.cxx:727
 AliPHOSEmbedding.cxx:728
 AliPHOSEmbedding.cxx:729
 AliPHOSEmbedding.cxx:730
 AliPHOSEmbedding.cxx:731
 AliPHOSEmbedding.cxx:732
 AliPHOSEmbedding.cxx:733
 AliPHOSEmbedding.cxx:734
 AliPHOSEmbedding.cxx:735
 AliPHOSEmbedding.cxx:736
 AliPHOSEmbedding.cxx:737
 AliPHOSEmbedding.cxx:738
 AliPHOSEmbedding.cxx:739
 AliPHOSEmbedding.cxx:740
 AliPHOSEmbedding.cxx:741
 AliPHOSEmbedding.cxx:742
 AliPHOSEmbedding.cxx:743
 AliPHOSEmbedding.cxx:744
 AliPHOSEmbedding.cxx:745
 AliPHOSEmbedding.cxx:746
 AliPHOSEmbedding.cxx:747
 AliPHOSEmbedding.cxx:748
 AliPHOSEmbedding.cxx:749
 AliPHOSEmbedding.cxx:750
 AliPHOSEmbedding.cxx:751
 AliPHOSEmbedding.cxx:752
 AliPHOSEmbedding.cxx:753
 AliPHOSEmbedding.cxx:754
 AliPHOSEmbedding.cxx:755
 AliPHOSEmbedding.cxx:756
 AliPHOSEmbedding.cxx:757
 AliPHOSEmbedding.cxx:758
 AliPHOSEmbedding.cxx:759
 AliPHOSEmbedding.cxx:760
 AliPHOSEmbedding.cxx:761
 AliPHOSEmbedding.cxx:762
 AliPHOSEmbedding.cxx:763
 AliPHOSEmbedding.cxx:764
 AliPHOSEmbedding.cxx:765
 AliPHOSEmbedding.cxx:766
 AliPHOSEmbedding.cxx:767
 AliPHOSEmbedding.cxx:768
 AliPHOSEmbedding.cxx:769
 AliPHOSEmbedding.cxx:770
 AliPHOSEmbedding.cxx:771
 AliPHOSEmbedding.cxx:772
 AliPHOSEmbedding.cxx:773
 AliPHOSEmbedding.cxx:774
 AliPHOSEmbedding.cxx:775
 AliPHOSEmbedding.cxx:776
 AliPHOSEmbedding.cxx:777
 AliPHOSEmbedding.cxx:778
 AliPHOSEmbedding.cxx:779
 AliPHOSEmbedding.cxx:780
 AliPHOSEmbedding.cxx:781
 AliPHOSEmbedding.cxx:782
 AliPHOSEmbedding.cxx:783
 AliPHOSEmbedding.cxx:784
 AliPHOSEmbedding.cxx:785
 AliPHOSEmbedding.cxx:786
 AliPHOSEmbedding.cxx:787
 AliPHOSEmbedding.cxx:788
 AliPHOSEmbedding.cxx:789
 AliPHOSEmbedding.cxx:790
 AliPHOSEmbedding.cxx:791
 AliPHOSEmbedding.cxx:792
 AliPHOSEmbedding.cxx:793
 AliPHOSEmbedding.cxx:794
 AliPHOSEmbedding.cxx:795
 AliPHOSEmbedding.cxx:796
 AliPHOSEmbedding.cxx:797
 AliPHOSEmbedding.cxx:798
 AliPHOSEmbedding.cxx:799
 AliPHOSEmbedding.cxx:800
 AliPHOSEmbedding.cxx:801
 AliPHOSEmbedding.cxx:802
 AliPHOSEmbedding.cxx:803
 AliPHOSEmbedding.cxx:804
 AliPHOSEmbedding.cxx:805
 AliPHOSEmbedding.cxx:806
 AliPHOSEmbedding.cxx:807
 AliPHOSEmbedding.cxx:808
 AliPHOSEmbedding.cxx:809
 AliPHOSEmbedding.cxx:810
 AliPHOSEmbedding.cxx:811
 AliPHOSEmbedding.cxx:812
 AliPHOSEmbedding.cxx:813
 AliPHOSEmbedding.cxx:814
 AliPHOSEmbedding.cxx:815
 AliPHOSEmbedding.cxx:816
 AliPHOSEmbedding.cxx:817
 AliPHOSEmbedding.cxx:818
 AliPHOSEmbedding.cxx:819
 AliPHOSEmbedding.cxx:820
 AliPHOSEmbedding.cxx:821
 AliPHOSEmbedding.cxx:822
 AliPHOSEmbedding.cxx:823
 AliPHOSEmbedding.cxx:824
 AliPHOSEmbedding.cxx:825
 AliPHOSEmbedding.cxx:826
 AliPHOSEmbedding.cxx:827
 AliPHOSEmbedding.cxx:828
 AliPHOSEmbedding.cxx:829
 AliPHOSEmbedding.cxx:830
 AliPHOSEmbedding.cxx:831
 AliPHOSEmbedding.cxx:832
 AliPHOSEmbedding.cxx:833
 AliPHOSEmbedding.cxx:834
 AliPHOSEmbedding.cxx:835
 AliPHOSEmbedding.cxx:836
 AliPHOSEmbedding.cxx:837
 AliPHOSEmbedding.cxx:838
 AliPHOSEmbedding.cxx:839
 AliPHOSEmbedding.cxx:840
 AliPHOSEmbedding.cxx:841
 AliPHOSEmbedding.cxx:842
 AliPHOSEmbedding.cxx:843
 AliPHOSEmbedding.cxx:844
 AliPHOSEmbedding.cxx:845
 AliPHOSEmbedding.cxx:846
 AliPHOSEmbedding.cxx:847
 AliPHOSEmbedding.cxx:848
 AliPHOSEmbedding.cxx:849
 AliPHOSEmbedding.cxx:850
 AliPHOSEmbedding.cxx:851
 AliPHOSEmbedding.cxx:852
 AliPHOSEmbedding.cxx:853
 AliPHOSEmbedding.cxx:854
 AliPHOSEmbedding.cxx:855
 AliPHOSEmbedding.cxx:856
 AliPHOSEmbedding.cxx:857
 AliPHOSEmbedding.cxx:858
 AliPHOSEmbedding.cxx:859
 AliPHOSEmbedding.cxx:860
 AliPHOSEmbedding.cxx:861
 AliPHOSEmbedding.cxx:862
 AliPHOSEmbedding.cxx:863
 AliPHOSEmbedding.cxx:864
 AliPHOSEmbedding.cxx:865
 AliPHOSEmbedding.cxx:866
 AliPHOSEmbedding.cxx:867
 AliPHOSEmbedding.cxx:868
 AliPHOSEmbedding.cxx:869
 AliPHOSEmbedding.cxx:870
 AliPHOSEmbedding.cxx:871
 AliPHOSEmbedding.cxx:872
 AliPHOSEmbedding.cxx:873
 AliPHOSEmbedding.cxx:874
 AliPHOSEmbedding.cxx:875
 AliPHOSEmbedding.cxx:876
 AliPHOSEmbedding.cxx:877
 AliPHOSEmbedding.cxx:878
 AliPHOSEmbedding.cxx:879
 AliPHOSEmbedding.cxx:880
 AliPHOSEmbedding.cxx:881
 AliPHOSEmbedding.cxx:882
 AliPHOSEmbedding.cxx:883
 AliPHOSEmbedding.cxx:884
 AliPHOSEmbedding.cxx:885
 AliPHOSEmbedding.cxx:886
 AliPHOSEmbedding.cxx:887
 AliPHOSEmbedding.cxx:888
 AliPHOSEmbedding.cxx:889
 AliPHOSEmbedding.cxx:890
 AliPHOSEmbedding.cxx:891
 AliPHOSEmbedding.cxx:892
 AliPHOSEmbedding.cxx:893
 AliPHOSEmbedding.cxx:894
 AliPHOSEmbedding.cxx:895
 AliPHOSEmbedding.cxx:896
 AliPHOSEmbedding.cxx:897
 AliPHOSEmbedding.cxx:898
 AliPHOSEmbedding.cxx:899
 AliPHOSEmbedding.cxx:900
 AliPHOSEmbedding.cxx:901
 AliPHOSEmbedding.cxx:902
 AliPHOSEmbedding.cxx:903
 AliPHOSEmbedding.cxx:904
 AliPHOSEmbedding.cxx:905
 AliPHOSEmbedding.cxx:906
 AliPHOSEmbedding.cxx:907
 AliPHOSEmbedding.cxx:908
 AliPHOSEmbedding.cxx:909
 AliPHOSEmbedding.cxx:910
 AliPHOSEmbedding.cxx:911
 AliPHOSEmbedding.cxx:912
 AliPHOSEmbedding.cxx:913
 AliPHOSEmbedding.cxx:914
 AliPHOSEmbedding.cxx:915
 AliPHOSEmbedding.cxx:916
 AliPHOSEmbedding.cxx:917
 AliPHOSEmbedding.cxx:918
 AliPHOSEmbedding.cxx:919
 AliPHOSEmbedding.cxx:920
 AliPHOSEmbedding.cxx:921
 AliPHOSEmbedding.cxx:922
 AliPHOSEmbedding.cxx:923
 AliPHOSEmbedding.cxx:924
 AliPHOSEmbedding.cxx:925
 AliPHOSEmbedding.cxx:926
 AliPHOSEmbedding.cxx:927
 AliPHOSEmbedding.cxx:928
 AliPHOSEmbedding.cxx:929
 AliPHOSEmbedding.cxx:930
 AliPHOSEmbedding.cxx:931
 AliPHOSEmbedding.cxx:932
 AliPHOSEmbedding.cxx:933
 AliPHOSEmbedding.cxx:934
 AliPHOSEmbedding.cxx:935
 AliPHOSEmbedding.cxx:936
 AliPHOSEmbedding.cxx:937
 AliPHOSEmbedding.cxx:938
 AliPHOSEmbedding.cxx:939
 AliPHOSEmbedding.cxx:940
 AliPHOSEmbedding.cxx:941
 AliPHOSEmbedding.cxx:942
 AliPHOSEmbedding.cxx:943
 AliPHOSEmbedding.cxx:944
 AliPHOSEmbedding.cxx:945
 AliPHOSEmbedding.cxx:946
 AliPHOSEmbedding.cxx:947
 AliPHOSEmbedding.cxx:948
 AliPHOSEmbedding.cxx:949
 AliPHOSEmbedding.cxx:950
 AliPHOSEmbedding.cxx:951
 AliPHOSEmbedding.cxx:952
 AliPHOSEmbedding.cxx:953
 AliPHOSEmbedding.cxx:954
 AliPHOSEmbedding.cxx:955
 AliPHOSEmbedding.cxx:956
 AliPHOSEmbedding.cxx:957
 AliPHOSEmbedding.cxx:958
 AliPHOSEmbedding.cxx:959
 AliPHOSEmbedding.cxx:960
 AliPHOSEmbedding.cxx:961
 AliPHOSEmbedding.cxx:962
 AliPHOSEmbedding.cxx:963
 AliPHOSEmbedding.cxx:964
 AliPHOSEmbedding.cxx:965
 AliPHOSEmbedding.cxx:966
 AliPHOSEmbedding.cxx:967
 AliPHOSEmbedding.cxx:968
 AliPHOSEmbedding.cxx:969
 AliPHOSEmbedding.cxx:970
 AliPHOSEmbedding.cxx:971
 AliPHOSEmbedding.cxx:972
 AliPHOSEmbedding.cxx:973
 AliPHOSEmbedding.cxx:974
 AliPHOSEmbedding.cxx:975
 AliPHOSEmbedding.cxx:976
 AliPHOSEmbedding.cxx:977
 AliPHOSEmbedding.cxx:978
 AliPHOSEmbedding.cxx:979
 AliPHOSEmbedding.cxx:980
 AliPHOSEmbedding.cxx:981
 AliPHOSEmbedding.cxx:982
 AliPHOSEmbedding.cxx:983
 AliPHOSEmbedding.cxx:984
 AliPHOSEmbedding.cxx:985
 AliPHOSEmbedding.cxx:986
 AliPHOSEmbedding.cxx:987
 AliPHOSEmbedding.cxx:988
 AliPHOSEmbedding.cxx:989
 AliPHOSEmbedding.cxx:990
 AliPHOSEmbedding.cxx:991
 AliPHOSEmbedding.cxx:992
 AliPHOSEmbedding.cxx:993
 AliPHOSEmbedding.cxx:994
 AliPHOSEmbedding.cxx:995
 AliPHOSEmbedding.cxx:996
 AliPHOSEmbedding.cxx:997
 AliPHOSEmbedding.cxx:998
 AliPHOSEmbedding.cxx:999
 AliPHOSEmbedding.cxx:1000
 AliPHOSEmbedding.cxx:1001
 AliPHOSEmbedding.cxx:1002
 AliPHOSEmbedding.cxx:1003
 AliPHOSEmbedding.cxx:1004
 AliPHOSEmbedding.cxx:1005
 AliPHOSEmbedding.cxx:1006
 AliPHOSEmbedding.cxx:1007
 AliPHOSEmbedding.cxx:1008
 AliPHOSEmbedding.cxx:1009
 AliPHOSEmbedding.cxx:1010
 AliPHOSEmbedding.cxx:1011
 AliPHOSEmbedding.cxx:1012
 AliPHOSEmbedding.cxx:1013
 AliPHOSEmbedding.cxx:1014
 AliPHOSEmbedding.cxx:1015
 AliPHOSEmbedding.cxx:1016
 AliPHOSEmbedding.cxx:1017
 AliPHOSEmbedding.cxx:1018
 AliPHOSEmbedding.cxx:1019
 AliPHOSEmbedding.cxx:1020
 AliPHOSEmbedding.cxx:1021
 AliPHOSEmbedding.cxx:1022
 AliPHOSEmbedding.cxx:1023
 AliPHOSEmbedding.cxx:1024
 AliPHOSEmbedding.cxx:1025
 AliPHOSEmbedding.cxx:1026
 AliPHOSEmbedding.cxx:1027
 AliPHOSEmbedding.cxx:1028
 AliPHOSEmbedding.cxx:1029
 AliPHOSEmbedding.cxx:1030
 AliPHOSEmbedding.cxx:1031
 AliPHOSEmbedding.cxx:1032
 AliPHOSEmbedding.cxx:1033
 AliPHOSEmbedding.cxx:1034
 AliPHOSEmbedding.cxx:1035
 AliPHOSEmbedding.cxx:1036
 AliPHOSEmbedding.cxx:1037
 AliPHOSEmbedding.cxx:1038
 AliPHOSEmbedding.cxx:1039
 AliPHOSEmbedding.cxx:1040
 AliPHOSEmbedding.cxx:1041
 AliPHOSEmbedding.cxx:1042
 AliPHOSEmbedding.cxx:1043
 AliPHOSEmbedding.cxx:1044
 AliPHOSEmbedding.cxx:1045
 AliPHOSEmbedding.cxx:1046
 AliPHOSEmbedding.cxx:1047
 AliPHOSEmbedding.cxx:1048
 AliPHOSEmbedding.cxx:1049
 AliPHOSEmbedding.cxx:1050
 AliPHOSEmbedding.cxx:1051
 AliPHOSEmbedding.cxx:1052
 AliPHOSEmbedding.cxx:1053
 AliPHOSEmbedding.cxx:1054
 AliPHOSEmbedding.cxx:1055
 AliPHOSEmbedding.cxx:1056
 AliPHOSEmbedding.cxx:1057
 AliPHOSEmbedding.cxx:1058
 AliPHOSEmbedding.cxx:1059
 AliPHOSEmbedding.cxx:1060
 AliPHOSEmbedding.cxx:1061
 AliPHOSEmbedding.cxx:1062
 AliPHOSEmbedding.cxx:1063
 AliPHOSEmbedding.cxx:1064
 AliPHOSEmbedding.cxx:1065
 AliPHOSEmbedding.cxx:1066