ROOT logo
////////////////////////////////////////////////////////////////////////
//
//  Class to steer several steps in merging:
//       - extraction of vertex from bgr event
//       - event simulation
//       - creation of sdigits
//       - creation of digits
//       - analysis
//                  
//  Author: Jiri Chudoba (CERN), 2002
//
////////////////////////////////////////////////////////////////////////

#if !defined(__CINT__) || defined(__MAKECINT__)
#include <Riostream.h>

// --- ROOT system ---

#include "TTask.h"
#include "TString.h"
#include "TROOT.h"
#include "TFile.h"
#include "TTree.h"
#include "TStopwatch.h"
#include "TArrayF.h"
#include "TSystem.h"
#include "TInterpreter.h"

// --- AliRoot header files ---

#include "STEER/AliRun.h"
#include "STEER/AliHeader.h"
#include "STEER/AliGenEventHeader.h"
#endif

class AliTRDdigitizer;
class AliPHOSSDigitizer;
class AliTOFSDigitizer;

class AliMergeSteer: public TTask {

public:
  AliMergeSteer(const Text_t* name="AliMergeSteer",
		  const Text_t* title="AliMergeSteer");
//  AliMergeSteer(Option_t *option);
  virtual ~AliMergeSteer();
  Bool_t SetDetectorFlag(Option_t* option, Int_t flag);
  Int_t GetDetectorFlag(Option_t* option);  
//  void Print();
  virtual void Exec(const Option_t *option);
  Bool_t ImportgAlice(TFile *file);

  Bool_t ExtractVertex(TString fn, Int_t eventNr);
  void PrintVertex(TArrayF &vertex);
  void ExportVertex(TArrayF &vertex);

  Bool_t Simulate();
  Bool_t CreateSDigits();
  Bool_t Merge();
  Bool_t NoMerge();
  Bool_t ITSFastPoints(const char *outputFile, const char *inputFile);
  Bool_t RecoMerged();
  Bool_t RecoSignalOnly();
  Bool_t CmpMerged();
  Bool_t CmpSignalOnly();
  
  Bool_t AliCopy(TFile *inputFile, TFile *outputFile);
  Bool_t AliCopy(TString inputFileName, TString outputFileName);
  
  
  
// file names setter/getters  
  void SetFileNameHits(TString fileName) {fFileNameHits = fileName;}
  void SetFileNameSDigits(TString fileName) {fFileNameSDigits = fileName;}
  void SetFileNameBgrHits(TString fileName) {fFileNameBgrHits = fileName;}
  void SetFileNameBgrSDigits(TString fileName) {fFileNameBgrSDigits = fileName;}
  void SetFileNameDigitsMerged(TString fileName) {fFileNameDigitsMerged = fileName;}
  void SetFileNameDigitsSignalOnly(TString fileName) {fFileNameDigitsSignalOnly = fileName;}
  TString FileNameHits() {return fFileNameHits;}
  TString FileNameSDigits() {return fFileNameSDigits;}
  TString FileNameBgr() {return fFileNameBgrSDigits;}
  TString FileNameDigitsMerged() {return fFileNameDigitsMerged;}
  TString FileNameDigitsSignalOnly() {return fFileNameDigitsSignalOnly;}

// flags
  void SetFlagSim(Bool_t flag) {fFlagSim = flag;}
  void SetFlagSDigits(Bool_t flag) {fFlagSDigits = flag;}
  void SetFlagMerge(Bool_t flag) {fFlagMerge = flag;}
  void SetFlagDigitsSignalOnly(Bool_t flag) {fFlagDigitsSignalOnly = flag;}
  void SetFlagRecoMerged(Bool_t flag) {fFlagRecoMerged = flag;}
  void SetFlagRecoSignalOnly(Bool_t flag) {fFlagRecoSignalOnly = flag;}
  void SetFlagCmpMerged(Bool_t flag) {fFlagCmpMerged = flag;}
  void SetFlagCmpSignalOnly(Bool_t flag) {fFlagCmpSignalOnly = flag;}
  
// event numbers
  void SetNEvents(Int_t nEvents) {fNEvents = nEvents;}
  void SetBgrEventNr(Int_t i) {fBgrEventNr = i;}
  
private:  

  TString fFileNameHits;
  TString fFileNameSDigits;
  TString fFileNameBgrHits;
  TString fFileNameBgrSDigits;
  TString fFileNameDigitsMerged;
  TString fFileNameDigitsSignalOnly;
  TString fFileNameCmpMerged;
  TString fFileNameCmpSignalOnly;
  
  Bool_t fFlagSim;
  Bool_t fFlagSDigits;
  Bool_t fFlagMerge;
  Bool_t fFlagDigitsSignalOnly;
  Bool_t fFlagRecoMerged;
  Bool_t fFlagRecoSignalOnly;
  Bool_t fFlagCmpMerged;
  Bool_t fFlagCmpSignalOnly;
  Bool_t fCopy2S;
  Bool_t fCopy2D;
  
  Int_t fNEvents;
  Int_t fFirstEvent;
  Int_t fBgrEventNr;
  
  Int_t fDEBUG;
  
// flags for detectors - determine which detector will be used
// during merging.
//  0 - do not use
//  1 - process the whole detector
//  2 - process only active region (region of interest on)  
  
  Int_t   fFMD;
  Int_t   fITS;
  Int_t   fMUON;
  Int_t   fPHOS;
  Int_t   fPMD;
  Int_t   fHMPID;
  Int_t   fT0;
  Int_t   fTOF;
  Int_t   fTPC;
  Int_t   fTRD;
  Int_t   fZDC;
  Int_t   fEMCAL;
  
};


////////////////////////////////////////////////////////////////////////
//
// AliMergeSteer.cxx
//
//
////////////////////////////////////////////////////////////////////////

AliMergeSteer::AliMergeSteer(const Text_t *name, const Text_t* title) : TTask(name,title)
{
//
// default ctor
//
  fFileNameHits="galice.root";
  fFileNameSDigits = "sdigits.root";
  fFileNameBgrSDigits = "bgr.sdigits.root";
  fFileNameBgrHits = "bgr.hits.root";
  fFileNameDigitsMerged = "digits.root";
  fFileNameDigitsSignalOnly = "digits.signal.root";
  fFileNameCmpMerged = "CmpGaRS_merged.root";
  fFileNameCmpSignalOnly = "CmpGaRS_signal.root";

  fFlagSim = kFALSE;
  fFlagSDigits = kFALSE;
  fFlagMerge = kFALSE;
  fFlagDigitsSignalOnly = kFALSE;
  fFlagRecoMerged = kFALSE;
  fFlagRecoSignalOnly = kFALSE;
  fFlagCmpMerged = kFALSE;
  fFlagCmpSignalOnly = kFALSE;    
  fCopy2S = kTRUE;
  fCopy2D = kTRUE;
  
  fNEvents = 1;
  fFirstEvent = 0;
  fBgrEventNr = 0;

  fDEBUG = 1;

  fFMD = 0;
  fITS = 0;
  fMUON = 0;
  fPHOS = 0;
  fPMD = 0;
  fHMPID = 0;
  fT0 = 0;
  fTOF = 0;
  fTPC = 0;
  fTRD = 0;
  fZDC = 0;
  fEMCAL = 0;
}

////////////////////////////////////////////////////////////////////////
AliMergeSteer::~AliMergeSteer()
{
// default dtor

}
////////////////////////////////////////////////////////////////////////
void AliMergeSteer::Exec(Option_t* option)
{
  Bool_t rc = kTRUE;
  if (gAlice) delete gAlice;
  gAlice = 0;

  if (fFlagSim) rc = Simulate();
  if (!rc) {Error("Exec","Simulate wrong"); return;}

  if (fFlagSDigits) rc = CreateSDigits();
  if (!rc) {Error("Exec","CreateSDigits wrong"); return;}

  if (fFlagSDigits && fCopy2S) rc = AliCopy(fFileNameHits,fFileNameSDigits);
  if (!rc) {Error("Exec","AliCopy to SD wrong"); return;}

  if (fFlagMerge && fCopy2D) rc = AliCopy(fFileNameHits,fFileNameDigitsMerged);
  if (!rc) {Error("Exec","AliCopy to DigitsMerged wrong"); return;}

  if (fFlagMerge) rc = Merge();
  if (!rc) {Error("Exec","Merge wrong"); return;}

  if (fFlagDigitsSignalOnly) rc = NoMerge();
  if (!rc) {Error("Exec","NoMerge wrong"); return;}
  
  if (fFlagRecoMerged) rc = RecoMerged();
  if (!rc) {Error("Exec","RecoMerged wrong"); return;}
  
  if (fFlagRecoSignalOnly) rc = RecoSignalOnly();
  if (!rc) {Error("Exec","RecoSignalOnly wrong"); return;}

  if (fFlagCmpMerged) rc = CmpMerged();
  if (!rc) {Error("Exec","CmpMerged wrong"); return;}
  
  if (fFlagCmpSignalOnly) rc = CmpSignalOnly();
  if (!rc) {Error("Exec","CmpSignalOnly wrong"); return;}
  
 


}
////////////////////////////////////////////////////////////////////////
Int_t AliMergeSteer::GetDetectorFlag(Option_t* option)
{
//
// return current flag value for a given detector
//
  if (strstr(option,"FMD")) {
    return fFMD;
  } else if (strstr(option,"ITS")) {
    return fITS;
  } else if (strstr(option,"MUON")) {
    return fMUON;
  } else if (strstr(option,"PHOS")) {
    return fPHOS;
  } else if (strstr(option,"PMD")) {
    return fPMD;
  } else if (strstr(option,"HMPID")) {
    return fHMPID;
  } else if (strstr(option,"T0")) {
    return fT0;
  } else if (strstr(option,"TOF")) {
    return fTOF;
  } else if (strstr(option,"TPC")) {
    return fTPC;
  } else if (strstr(option,"TRD")) {
    return fTRD;
  } else if (strstr(option,"ZDC")) {
    return fZDC;
  } else if (strstr(option,"EMCAL")) {
    return fEMCAL;
  } else {
    cerr<<"Unknown detector required."<<endl;
    return -1;
  }
}
////////////////////////////////////////////////////////////////////////
Bool_t AliMergeSteer::SetDetectorFlag(Option_t* option, Int_t flag)
{
//
// return current flag value for a given detector
//
  if (strstr(option,"FMD")) {
    fFMD = flag;
  } else if (strstr(option,"ITS")) {
    fITS = flag;
  } else if (strstr(option,"MUON")) {
    fMUON = flag;
  } else if (strstr(option,"PHOS")) {
    fPHOS = flag;
  } else if (strstr(option,"PMD")) {
    fPMD = flag;
  } else if (strstr(option,"HMPID")) {
    fHMPID = flag;
  } else if (strstr(option,"T0")) {
    fT0 = flag;
  } else if (strstr(option,"TOF")) {
    fTOF = flag;
  } else if (strstr(option,"TPC")) {
    fTPC = flag;
  } else if (strstr(option,"TRD")) {
    fTRD = flag;
  } else if (strstr(option,"ZDC")) {
    fZDC = flag;
  } else if (strstr(option,"EMCAL")) {
    fEMCAL = flag;
  } else {
    cerr<<"Unknown detector required."<<endl;
    return kFALSE;
  }
  return kTRUE;
}
////////////////////////////////////////////////////////////////////////
Bool_t AliMergeSteer::ImportgAlice(TFile *file) {
// read in gAlice object from the file
  gAlice = (AliRun*)file->Get("gAlice");
  if (!gAlice)  return kFALSE;
  return kTRUE;
}
////////////////////////////////////////////////////////////////////////
Bool_t AliMergeSteer::ExtractVertex(TString fn, Int_t eventNr)
{
// Open file with TPC geom and digits
  TFile *file=TFile::Open(fn);
  if (!file->IsOpen()) {cerr<<"Cannnot open "<<fn.Data()<<" !\n"; return kFALSE;}
  if (!(gAlice=(AliRun*)file->Get("gAlice"))) {
    cerr<<"gAlice was not found in "<<fn.Data()<<" !\n";
    return kFALSE;
  }
  
  AliHeader *header = gAlice->GetHeader();
  if (!header) {
    cerr<<"header was not found in "<<fn.Data()<<" !\n";
    return kFALSE;
  } 
  AliGenEventHeader* genEventHeader = header->GenEventHeader();
  if (!genEventHeader) {
    cerr<<"GenEventHeader was not found in "<<fn.Data()<<" !\n";
    return kFALSE;
  } 

  TArrayF primaryVertex(3);
  genEventHeader->PrimaryVertex(primaryVertex);
  PrintVertex(primaryVertex);
  ExportVertex(primaryVertex);
//  delete header;

// Following two lines should be there, but ....
//  delete genEventHeader;
//  delete gAlice;
  gAlice = 0;
  file->Close();
    
  return kTRUE;

}
////////////////////////////////////////////////////////////////////////
void AliMergeSteer::PrintVertex(TArrayF &primaryVertex) 
{
  cout <<"CONFIG_VERTEX: "
       <<primaryVertex[0]<<" "
       <<primaryVertex[1]<<" "
       <<primaryVertex[2]<<" "<<endl;
  return;
} 

////////////////////////////////////////////////////////////////////////
void AliMergeSteer::ExportVertex(TArrayF &primaryVertex) 
{
  char vertexAsString[30];
  sprintf(vertexAsString,"%f",primaryVertex[0]);
  gSystem->Setenv("CONFIG_VERTEX_X",vertexAsString);
  sprintf(vertexAsString,"%f",primaryVertex[1]);
  gSystem->Setenv("CONFIG_VERTEX_Y",vertexAsString);
  sprintf(vertexAsString,"%f",primaryVertex[2]);
  gSystem->Setenv("CONFIG_VERTEX_Z",vertexAsString);
  return;
}
////////////////////////////////////////////////////////////////////////
Bool_t AliMergeSteer::Simulate()
{
  char cmd[100];
  TFile *f;

  TDirectory *saveDir = gDirectory;
  cout<< "The original directory is: ";
  saveDir->pwd();
  if (!ExtractVertex(fFileNameBgrHits,fBgrEventNr)) {
    cerr<<" ExtractVertexAndSimulateSignal:  Error in ExtractVertex"<<endl;
    return kFALSE;
  }
  saveDir->cd();
  new AliRun("gAlice","Signal for Merging");
  gAlice->Init("Config.C");
//    gSystem->Setenv("CONFIG_FILE",fileNameSigHits);
  TStopwatch timer;
  timer.Start();
  gAlice->Run(fNEvents);
  timer.Stop();
  cout<<"Simulation of "<<fNEvents<<" of signal took: "<<endl;
  timer.Print();
  delete gAlice;
  gAlice = 0;
  f = static_cast<TFile *>(gROOT->FindObject("galice.root"));
  if (f) f->Close();
  f = 0;    
  sprintf(cmd,"mv galice.root %s",fFileNameHits.Data());
  gSystem->Exec(cmd);
  return kTRUE;
 
}

////////////////////////////////////////////////////////////////////////
Bool_t AliMergeSteer::CreateSDigits()
{
  char macroName[200];
  char funcName[200]; 
  sprintf(macroName,"AliHits2SDigits.C");
  sprintf(funcName,
	  "AliHits2SDigits(\"%s\",\"%s\",%d,%d,%d,%d,%d,%d,%d,%d);",
	  fFileNameSDigits.Data(),fFileNameHits.Data(),
	  fNEvents,0,fITS,fTPC,fTRD,fPHOS,fTOF,0);
  cerr<<"I'll do: "<<funcName<<endl;
  gROOT->LoadMacro(macroName);
  if (fDEBUG) cerr<<"I'll do: "<<funcName<<endl;
  gInterpreter->ProcessLine(funcName);
  if (fDEBUG) cerr<<"SDigits created"<<endl;
  return kTRUE;
}


////////////////////////////////////////////////////////////////////////
Bool_t AliMergeSteer::Merge()
{
  char macroName[200];
  char funcName[200]; 
  cerr<<"Start merging"<<endl;
  sprintf(macroName,"MergeV1.C");
  sprintf(funcName,
	  "Merge(\"%s\",\"%s\",\"%s\",%d,%d,%d,%d,%d,%d,%d,%d);",
	  fFileNameDigitsMerged.Data(),fFileNameSDigits.Data(),
	  fFileNameBgrSDigits.Data(),
	  fNEvents,fITS,fTPC,fTRD,fPHOS,fMUON,fHMPID,0);
  cerr<<"I'll do: "<<funcName<<endl;
  gROOT->LoadMacro(macroName);
  if (fDEBUG) cerr<<"I'll do: "<<funcName<<endl;
  gInterpreter->ProcessLine(funcName);  
  if (fDEBUG) cerr<<"Merging done"<<endl;

//  return kTRUE;
// add ITS fast points, no merging yet
//  return ITSFastPoints(fFileNameDigitsMerged.Data(),
//		       fFileNameHits.Data());

}
////////////////////////////////////////////////////////////////////////
Bool_t AliMergeSteer::NoMerge()
{
  char macroName[200];
  char funcName[200]; 
  cerr<<"Start NoMerging"<<endl;
  sprintf(macroName,"AliSDigits2Digits.C");
  sprintf(funcName,
	  "AliSDigits2Digits(\"%s\",\"%s\",%d,%d,%d,%d,%d,%d,%d,%d);",
	  fFileNameDigitsSignalOnly.Data(),fFileNameSDigits.Data(),
	  fNEvents,fITS,fTPC,fTRD,fPHOS,fMUON,fHMPID,0);
  if (fDEBUG) cerr<<"I'll do: "<<funcName<<endl;
  gROOT->LoadMacro(macroName);
  gInterpreter->ProcessLine(funcName);  
  if (fDEBUG) cerr<<"NoMerging done"<<endl;
//  return kTRUE;
// add ITS fast points, no merging
//  return ITSFastPoints(fFileNameDigitsSignalOnly.Data(),
//		       fFileNameHits.Data());

}
////////////////////////////////////////////////////////////////////////
Bool_t AliMergeSteer::ITSFastPoints(const char *outputFile, const char *inputFile) {

  char macroName[200];
  char funcName[200]; 
  sprintf(macroName,"AliITSHits2SDR.C");
  sprintf(funcName,"AliITSH2FR2files(\"%s\",\"%s\");",
	  inputFile,  outputFile);
  if (fDEBUG) cerr<<"I'll do: "<<funcName<<endl;
  gROOT->LoadMacro(macroName);
  gInterpreter->ProcessLine(funcName);  
  if (fDEBUG) cerr<<"ITSFastPoints done"<<endl;

  return kTRUE;
}

////////////////////////////////////////////////////////////////////////
Bool_t AliMergeSteer::RecoMerged()
{
//
//
//
  char macroName[200];
  char funcName[200]; 
  cerr<<"Start RecoMerged"<<endl;
  sprintf(macroName,"AliBarrelRecoV3.C");
  sprintf(funcName,"AliBarrelRecoMerged(%d);",fNEvents);
  gROOT->LoadMacro(macroName);
  if (fDEBUG) cerr<<"I'll do: "<<funcName<<endl;
  gInterpreter->ProcessLine(funcName);
  if (fDEBUG) cerr<<"RecoMerged done"<<endl;
  return kTRUE;
}

////////////////////////////////////////////////////////////////////////
Bool_t AliMergeSteer::RecoSignalOnly()
{
//
//
//
  char macroName[200];
  char funcName[200]; 
  cerr<<"Start RecoSignalOnly"<<endl;
  sprintf(macroName,"AliBarrelRecoNoITSClass.C");
  sprintf(funcName,"AliBarrelReco(%d);",fNEvents);
  gROOT->LoadMacro(macroName);
  if (fDEBUG) cerr<<"I'll do: "<<funcName<<endl;
  gInterpreter->ProcessLine(funcName);  
  if (fDEBUG) cerr<<"RecoSignalOnly done"<<endl;
  return kTRUE;
}

////////////////////////////////////////////////////////////////////////
Bool_t AliMergeSteer::CmpMerged()
{
//
//
//
  char macroName[200];
  char funcName[200]; 
  cerr<<"Start CmpMerged"<<endl;
  sprintf(macroName,"CmpGaRS.C");
  sprintf(funcName,
	  "CmpGaRS(%d,%d,\"%s\",\"AliTPCtracks_merged.root\",\"%s\");",
	  fNEvents, fFirstEvent, fFileNameHits.Data(),
	  fFileNameCmpMerged.Data());
  gROOT->LoadMacro(macroName);
  if (fDEBUG) cerr<<"I'll do: "<<funcName<<endl;
  gInterpreter->ProcessLine(funcName);  
  if (fDEBUG) cerr<<"CmpMerged done"<<endl;
  return kTRUE;
}
////////////////////////////////////////////////////////////////////////
Bool_t AliMergeSteer::CmpSignalOnly()
{
//
//
//
  char macroName[200];
  char funcName[200]; 
  cerr<<"Start CmpSignalOnly"<<endl;
  sprintf(macroName,"CmpGaRS.C");
  sprintf(funcName,
	  "CmpGaRS(%d,%d,\"%s\",\"AliTPCtracks.root\",\"%s\");",
	  fNEvents, fFirstEvent, fFileNameHits.Data(),
	  fFileNameCmpSignalOnly.Data());
  gROOT->LoadMacro(macroName);
  if (fDEBUG) cerr<<"I'll do: "<<funcName<<endl;
  gInterpreter->ProcessLine(funcName);  
  if (fDEBUG) cerr<<"CmpSignalOnly done"<<endl;
  return kTRUE;
}
////////////////////////////////////////////////////////////////////////
Bool_t AliMergeSteer::AliCopy(TFile *inputFile, TFile *outputFile)
{
//
// copy gAlice object, AliceGeom and TreeE
//

// copy gAlice
  if (fDEBUG) cout<<"Copy gAlice: ";
  outputFile->cd();
  if (gAlice) {
    Error("AliCopy",
	  "gAlice must be deleted before AliCopy is called.");
    return kFALSE;
  }
  if (!ImportgAlice(inputFile)) return kFALSE;
  gAlice->Write();
  if (fDEBUG) cout<<"done"<<endl;


// copy TreeE
  TTree *treeE  = gAlice->TreeE();
  if (!treeE) {
    cerr<<"No TreeE found "<<endl;
    return kFALSE;
  }      
  if (fDEBUG) cout<<"Copy TreeE: ";
  AliHeader *header = new AliHeader();
  treeE->SetBranchAddress("Header", &header);
  treeE->SetBranchStatus("*",1);
  TTree *treeENew =  treeE->CloneTree();
  treeENew->Write();
  if (fDEBUG) cout<<"done"<<endl;

  delete gAlice;
  gAlice = 0;

  return kTRUE;

}

////////////////////////////////////////////////////////////////////////
Bool_t AliMergeSteer::AliCopy(TString inputFileName, TString outputFileName)
{
//
// open iput and output files, 
// ask to copy gAlice object, AliceGeom and TreeE
// close input and ouput files
//
  if (fDEBUG) {
    cout<<"AliCopy: will copy gAlice from "<<inputFileName.Data()<<" to "
	<<outputFileName.Data()<<endl;
  }

  TFile *inputFile = TFile::Open(inputFileName.Data());
  if (!inputFile->IsOpen()) {
    cerr<<"Can't open "<<inputFileName.Data()<<" !\n";
    return kFALSE;
  }

  TFile *outputFile = TFile::Open(outputFileName.Data(),"UPDATE");
  if (!outputFile->IsOpen()) {
    cerr<<"Can't open "<<outputFileName.Data()<<" !\n";
    return kFALSE;
  }

  AliCopy(inputFile, outputFile);

  inputFile->Close();
  outputFile->Close();

  if (fDEBUG) {
    cout<<"AliCopy copied gAlice from "<<inputFileName.Data()<<" to "
	<<outputFileName.Data()<<endl;
  }

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