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.                  *
 **************************************************************************/
#include <TNamed.h>
#include <TGeoMatrix.h>
#include <TGeoGlobalMagField.h>

#include "AliESDRun.h"
#include "AliESDVertex.h"
#include "AliLog.h"
#include "AliMagF.h"

//-------------------------------------------------------------------------
//                     Implementation Class AliESDRun
//   Run by run data
//   for the ESD   
//   Origin: Christian Klein-Boesing, CERN, Christian.Klein-Boesing@cern.ch 
//-------------------------------------------------------------------------

ClassImp(AliESDRun)  
 
//______________________________________________________________________________
AliESDRun::AliESDRun() :
  TObject(),
  fCurrentL3(0),
  fCurrentDip(0),
  fBeamEnergy(0),
  fMagneticField(0),
  fDiamondZ(0),
  fDiamondSig2Z(0),
  fPeriodNumber(0),
  fRunNumber(0),
  fRecoVersion(0),
  fBeamType(""),
  fTriggerClasses(kNTriggerClasses),
  fDetInDAQ(0),
  fDetInReco(0)  
{
  //
  // default ctor
  //
  for (Int_t i=0; i<2; i++) fDiamondXY[i]=0.;
  fBeamParticle[0] = fBeamParticle[1] = 0;
  fDiamondCovXY[0]=fDiamondCovXY[2]=3.*3.;
  fDiamondCovXY[1]=0.;
  fTriggerClasses.SetOwner(kTRUE);
  fMeanBeamInt[0][0]=fMeanBeamInt[0][1]=fMeanBeamInt[1][0]=fMeanBeamInt[1][1]=-1;
  for (Int_t m=0; m<kNPHOSMatrix; m++) fPHOSMatrix[m]=NULL;
  for (Int_t sm=0; sm<kNEMCALMatrix; sm++) fEMCALMatrix[sm]=NULL;
  for (Int_t i=0; i<kT0spreadSize;i++) fT0spread[i]=0.;
  for (Int_t it=0; it<8; it++) fCaloTriggerType[it]=0;
  for (Int_t j=0; j<64; ++j) fVZEROEqFactors[j]=-1;
}

//______________________________________________________________________________
AliESDRun::AliESDRun(const AliESDRun &esd) :
  TObject(esd),
  fCurrentL3(0),
  fCurrentDip(0),
  fBeamEnergy(0),
  fMagneticField(esd.fMagneticField),
  fDiamondZ(esd.fDiamondZ),
  fDiamondSig2Z(esd.fDiamondSig2Z),
  fPeriodNumber(esd.fPeriodNumber),
  fRunNumber(esd.fRunNumber),
  fRecoVersion(esd.fRecoVersion),
  fBeamType(""),
  fTriggerClasses(TObjArray(kNTriggerClasses)),
  fDetInDAQ(0),
  fDetInReco(0)
{ 
  //
  // Copy constructor
  //
  for (Int_t i=0; i<2; i++) fDiamondXY[i]=esd.fDiamondXY[i];
  for (Int_t i=0; i<3; i++) fDiamondCovXY[i]=esd.fDiamondCovXY[i];
  for (Int_t i=0; i<2; i++) fBeamParticle[i] = esd.fBeamParticle[i];
  for(Int_t i = 0; i < kNTriggerClasses; i++) {
    TNamed *str = (TNamed *)((esd.fTriggerClasses).At(i));
    if (str) fTriggerClasses.AddAt(new TNamed(*str),i);
  }

  for(Int_t m=0; m<kNPHOSMatrix; m++){
    if(esd.fPHOSMatrix[m])
      fPHOSMatrix[m]=new TGeoHMatrix(*(esd.fPHOSMatrix[m])) ;
    else
      fPHOSMatrix[m]=NULL;
  }
  
  for (int ib=2;ib--;) for (int it=2;it--;) fMeanBeamInt[ib][it] = esd.fMeanBeamInt[ib][it];

  for(Int_t sm=0; sm<kNEMCALMatrix; sm++){
	if(esd.fEMCALMatrix[sm])
		fEMCALMatrix[sm]=new TGeoHMatrix(*(esd.fEMCALMatrix[sm])) ;
	else
		fEMCALMatrix[sm]=NULL;
  }
  for (Int_t i=0; i<kT0spreadSize;i++) fT0spread[i]=esd.fT0spread[i];
  for (Int_t it=0; it<8; it++) fCaloTriggerType[it]=esd.fCaloTriggerType[it];
  for (Int_t j=0; j<64; ++j) fVZEROEqFactors[j]=esd.fVZEROEqFactors[j];

}

//______________________________________________________________________________
AliESDRun& AliESDRun::operator=(const AliESDRun &esd)
{ 
  // assigment operator
  if(this!=&esd) {
    TObject::operator=(esd);
    fRunNumber=esd.fRunNumber;
    fPeriodNumber=esd.fPeriodNumber;
    fRecoVersion=esd.fRecoVersion;
    fMagneticField=esd.fMagneticField;
    fDiamondZ=esd.fDiamondZ;
    fDiamondSig2Z=esd.fDiamondSig2Z;
    fBeamType = esd.fBeamType;
    fCurrentL3  = esd.fCurrentL3;
    fCurrentDip = esd.fCurrentDip;
    fBeamEnergy = esd.fBeamEnergy;
    for (Int_t i=0; i<2; i++) fDiamondXY[i]=esd.fDiamondXY[i];
    for (Int_t i=0; i<3; i++) fDiamondCovXY[i]=esd.fDiamondCovXY[i];
    for (Int_t i=0; i<2; i++) fBeamParticle[i] = esd.fBeamParticle[i];
    fTriggerClasses.Clear();
    for(Int_t i = 0; i < kNTriggerClasses; i++) {
      TNamed *str = (TNamed *)((esd.fTriggerClasses).At(i));
      if (str) fTriggerClasses.AddAt(new TNamed(*str),i);
    }

    fDetInDAQ   = esd.fDetInDAQ;
    fDetInReco  = esd.fDetInReco;

    for (int ib=2;ib--;) for (int it=2;it--;) fMeanBeamInt[ib][it] = esd.fMeanBeamInt[ib][it];

    for(Int_t m=0; m<kNPHOSMatrix; m++){
      delete fPHOSMatrix[m];
      if(esd.fPHOSMatrix[m])
	fPHOSMatrix[m]=new TGeoHMatrix(*(esd.fPHOSMatrix[m])) ;
      else
	fPHOSMatrix[m]=0;
    }
	  
    for(Int_t sm=0; sm<kNEMCALMatrix; sm++){
      delete fEMCALMatrix[sm];
      if(esd.fEMCALMatrix[sm])
        fEMCALMatrix[sm]=new TGeoHMatrix(*(esd.fEMCALMatrix[sm])) ;
      else
        fEMCALMatrix[sm]=0;
    }
  } 
  for (Int_t i=0; i<kT0spreadSize;i++) fT0spread[i]=esd.fT0spread[i];
  for (Int_t it=0; it<8; it++) fCaloTriggerType[it]=esd.fCaloTriggerType[it];
  for (Int_t j=0; j<64; ++j) fVZEROEqFactors[j]=esd.fVZEROEqFactors[j];
  return *this;
}

void AliESDRun::Copy(TObject &obj) const{

  // this overwrites the virtual TOBject::Copy()
  // to allow run time copying without casting
  // in AliESDEvent

  if(this==&obj)return;
  AliESDRun *robj = dynamic_cast<AliESDRun*>(&obj);
  if(!robj)return; // not an aliesdrun
  *robj = *this;

}

//______________________________________________________________________________
AliESDRun::~AliESDRun() {
  // Destructor
  // Delete PHOS position matrices
  for(Int_t m=0; m<kNPHOSMatrix; m++) {
    if(fPHOSMatrix[m]) delete fPHOSMatrix[m] ;
    fPHOSMatrix[m] = NULL;
  }
  // Delete PHOS position matrices
  for(Int_t sm=0; sm<kNEMCALMatrix; sm++) {
	if(fEMCALMatrix[sm]) delete fEMCALMatrix[sm] ;
	fEMCALMatrix[sm] = NULL;
  }
}

void AliESDRun::SetDiamond(const AliESDVertex *vertex) {
  // set the interaction diamond
  if (vertex) {
    fDiamondXY[0]=vertex->GetX();
    fDiamondXY[1]=vertex->GetY();
    fDiamondZ=vertex->GetZ();
    Double32_t cov[6];
    vertex->GetCovMatrix(cov);
    fDiamondCovXY[0]=cov[0];
    fDiamondCovXY[1]=cov[1];
    fDiamondCovXY[2]=cov[2];
    fDiamondSig2Z=cov[5];
  }
}


//______________________________________________________________________________
void AliESDRun::Print(const Option_t *) const
{
  // Print some data members
  printf("Mean vertex in RUN %d: X=%.4f Y=%.4f Z=%.4f cm\n",
	 GetRunNumber(),GetDiamondX(),GetDiamondY(),GetDiamondZ());
  printf("Beam Type: %s (%d/%d - %d/%d), Energy: %.1f GeV\n",fBeamType.IsNull() ? "N/A":GetBeamType(),
	 GetBeamParticleA(0),GetBeamParticleZ(0),GetBeamParticleA(1),GetBeamParticleZ(1),
	 fBeamEnergy);
  printf("Magnetic field in IP= %f T | Currents: L3:%+.1f Dipole:%+.1f %s\n",
	 GetMagneticField(),fCurrentL3,fCurrentDip,TestBit(kUniformBMap) ? "(Uniform)":"");
  printf("Event from reconstruction version %d \n",fRecoVersion);
  
  printf("List of active trigger classes: ");
  for(Int_t i = 0; i < kNTriggerClasses; i++) {
    TNamed *str = (TNamed *)((fTriggerClasses).At(i));
    if (str) printf("%s ",str->GetName());
  }
  printf("Mean intenstity for interacting   : beam1:%+.3e beam2:%+.3e\n",fMeanBeamInt[0][0],fMeanBeamInt[1][0]);
  printf("Mean intenstity for non-intecting : beam1:%+.3e beam2:%+.3e\n",fMeanBeamInt[0][1],fMeanBeamInt[1][1]);
  printf("\n");
}

void AliESDRun::Reset() 
{
  // reset data members
  fRunNumber = 0;
  fPeriodNumber = 0;
  fRecoVersion = 0;
  fMagneticField = 0;
  fCurrentL3 = 0;
  fCurrentDip = 0;
  fBeamEnergy = 0;
  fBeamType = "";
  ResetBit(kBInfoStored|kUniformBMap|kConvSqrtSHalfGeV);
  for (Int_t i=0; i<2; i++) fDiamondXY[i]=0.;
  fDiamondCovXY[0]=fDiamondCovXY[2]=3.*3.;
  fDiamondCovXY[1]=0.;
  fDiamondZ=0.;
  fDiamondSig2Z=10.*10.;
  fTriggerClasses.Clear();
  fDetInDAQ   = 0;
  fDetInReco  = 0;
}

//______________________________________________________________________________
void AliESDRun::SetTriggerClass(const char* name, Int_t index)
{
  // Fill the trigger class name
  // into the corresponding array
  if (index >= kNTriggerClasses || index < 0) {
    AliError(Form("Index (%d) is outside the allowed range (0,49)!",index));
    return;
  }

  fTriggerClasses.AddAt(new TNamed(name,NULL),index);
}

//______________________________________________________________________________
const char* AliESDRun::GetTriggerClass(Int_t index) const
{
  // Get the trigger class name at
  // specified position in the trigger mask
  TNamed *trclass = (TNamed *)fTriggerClasses.At(index);
  if (trclass)
    return trclass->GetName();
  else
    return "";
}

//______________________________________________________________________________
TString AliESDRun::GetActiveTriggerClasses() const
{
  // Construct and return
  // the list of trigger classes
  // which are present in the run
  TString trclasses;
  for(Int_t i = 0; i < kNTriggerClasses; i++) {
    TNamed *str = (TNamed *)((fTriggerClasses).At(i));
    if (str) {
      trclasses += " ";
      trclasses += str->GetName();
      trclasses += " ";
    }
  }

  return trclasses;
}

//______________________________________________________________________________
TString AliESDRun::GetFiredTriggerClasses(ULong64_t mask) const
{
  // Constructs and returns the
  // list of trigger classes that
  // have been fired. Uses the trigger
  // class mask as an argument.
  // Works for first50
  TString trclasses;
  for(Int_t i = 0; i < kNTriggerClasses/2; i++) {
    if (mask & (1ull << i)) {
      TNamed *str = (TNamed *)((fTriggerClasses).At(i));
      if (str) {
	trclasses += " ";
	trclasses += str->GetName();
      trclasses += " ";
      }
    }
  }

  return trclasses;
}
//______________________________________________________________________________
TString AliESDRun::GetFiredTriggerClassesNext50(ULong64_t mask) const
{
  // Constructs and returns the
  // list of trigger classes that
  // have been fired. Uses the trigger
  // class mask as an argument.
  // Works for next50 classes
  TString trclasses;
  for(Int_t i = 0; i < kNTriggerClasses/2; i++) {
    if (mask & (1ull << i)) {
      TNamed *str = (TNamed *)((fTriggerClasses).At(i+50));
      if (str) {
	trclasses += " ";
	trclasses += str->GetName();
      trclasses += " ";
      }
    }
  }
  return trclasses;
}
//______________________________________________________________________________
TString AliESDRun::GetFiredTriggerClasses(ULong64_t masklow,ULong64_t maskhigh) const
{
 // Contruct and returns list of trigger classes for 100 classes
 TString trclasseslow;
 trclasseslow  = GetFiredTriggerClasses(masklow);
 TString trclasseshigh;
 trclasseshigh  = GetFiredTriggerClassesNext50(maskhigh);
 TString trclasses;
 trclasses = trclasseslow+trclasseshigh;
 return trclasses;
}
//______________________________________________________________________________
void AliESDRun::PrintAllTriggerClasses() const
{
  TString trclasses;
  for(Int_t i = 0; i < kNTriggerClasses; i++) {
      TNamed *str = (TNamed *)((fTriggerClasses).At(i));
      if (str) {
        printf("%03i:",i+1);
	printf("%s ",str->GetName());
      }else{
	//printf("NO ");
      }
  }
  printf("\n");
}
//______________________________________________________________________________
Bool_t AliESDRun::IsTriggerClassFired(ULong64_t mask, const char *name) const
{
  // Checks if the trigger class
  // identified by 'name' has been
  // fired. Uses the trigger class mask.

  TNamed *trclass = (TNamed *)fTriggerClasses.FindObject(name);
  if (!trclass) return kFALSE;

  Int_t iclass = fTriggerClasses.IndexOf(trclass);
  if (iclass < 0) return kFALSE;

  if (mask & (1ull << iclass))
    return kTRUE;
  else
    return kFALSE;
}
//______________________________________________________________________________
Bool_t AliESDRun::IsTriggerClassFired(ULong64_t masklow, ULong64_t maskhigh,const char *name) const
{
 return (IsTriggerClassFired(masklow,name) || IsTriggerClassFired(maskhigh,name));
}
//_____________________________________________________________________________
Bool_t AliESDRun::InitMagneticField() const
{
  // Create mag field from stored information
  //
  if (!TestBit(kBInfoStored)) {
    AliError("No information on currents, cannot create field from run header");
    return kFALSE;
  }
  //
  AliMagF* fld = (AliMagF*) TGeoGlobalMagField::Instance()->GetField();
  if (fld) {
    if (TGeoGlobalMagField::Instance()->IsLocked()) {
      if (fld->TestBit(AliMagF::kOverrideGRP)) {
	AliInfo("ExpertMode!!! Information on magnet currents will be ignored !");
	AliInfo("ExpertMode!!! Running with the externally locked B field !");
	return kTRUE;
      }
    }
    AliInfo("Destroying existing B field instance!");
    delete TGeoGlobalMagField::Instance();
  }
  //
  fld = AliMagF::CreateFieldMap(fCurrentL3,fCurrentDip,AliMagF::kConvLHC,
				TestBit(kUniformBMap), GetBeamEnergy(), GetBeamType());
  if (fld) {
    TGeoGlobalMagField::Instance()->SetField( fld );
    TGeoGlobalMagField::Instance()->Lock();
    AliInfo("Running with the B field constructed out of the Run Header !");
    return kTRUE;
  }
  else {
    AliError("Failed to create a B field map !");
    return kFALSE;
  }
  //
}

//_____________________________________________________________________________
void AliESDRun::SetT0spread(Int_t i,Float_t t) 
{
  //
  // Setting the T0 spread value at index i 
  //

  if ( (i>=0) && (i<kT0spreadSize)) {
    fT0spread[i]=t;
  } else {
    AliError(Form("Index %d out of bound",i));
  }
  return;
}

//_____________________________________________________________________________
void AliESDRun::SetT0spread(Float_t *t) 
{
  //
  // Setting the T0 spread values
  //
  if (t == 0x0){
    AliError(Form("Null pointer passed"));
  }
  else{
    for (Int_t i=0;i<kT0spreadSize;i++) fT0spread[i]=t[i];
  }
  return;
}

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