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

//-------------------------------------------------------------------------
//                      Implementation of   Class AliESDHeader
//   Header data
//   for the ESD   
//   Origin: Christian Klein-Boesing, CERN, Christian.Klein-Boesing@cern.ch 
//-------------------------------------------------------------------------

#include "AliESDHeader.h"
#include "AliTriggerScalersESD.h"
#include "AliTriggerScalersRecordESD.h"
#include "AliTriggerIR.h"
#include "AliTriggerConfiguration.h"
#include "AliLog.h" 

ClassImp(AliESDHeader)

//______________________________________________________________________________
AliESDHeader::AliESDHeader() :
  AliVHeader(),
  fTriggerMask(0),
  fTriggerMaskNext50(0),
  fOrbitNumber(0),
  fTimeStamp(0),
  fEventType(0),
  fEventSpecie(0),
  fPeriodNumber(0),
  fEventNumberInFile(0),
  fBunchCrossNumber(0),
  fTriggerCluster(0),
  fL0TriggerInputs(0),
  fL1TriggerInputs(0),
  fL2TriggerInputs(0),
  fTriggerScalers(),
  fTriggerScalersDeltaEvent(),
  fTriggerScalersDeltaRun(),
  fTriggerInputsNames(kNTriggerInputs),
  fCTPConfig(NULL),
  fIRBufferArray(),
  fIRInt2InteractionsMap(0),
  fIRInt1InteractionsMap(0)
{
  // default constructor

  SetName("AliESDHeader");
  for(Int_t i = 0; i<kNMaxIR ; i++) fIRArray[i] = 0;
  fTriggerInputsNames.SetOwner(kTRUE);
  for (Int_t itype=0; itype<3; itype++) fTPCNoiseFilterCounter[itype]=0;
}

AliESDHeader::~AliESDHeader() 
{
  // destructor
  for(Int_t i=0;i<kNMaxIR;i++)if(fIRArray[i])delete fIRArray[i];
  delete fCTPConfig;

  fIRBufferArray.Delete();
}


AliESDHeader::AliESDHeader(const AliESDHeader &header) :
  AliVHeader(header),
  fTriggerMask(header.fTriggerMask),
  fTriggerMaskNext50(header.fTriggerMaskNext50),
  fOrbitNumber(header.fOrbitNumber),
  fTimeStamp(header.fTimeStamp),
  fEventType(header.fEventType),
  fEventSpecie(header.fEventSpecie),
  fPeriodNumber(header.fPeriodNumber),
  fEventNumberInFile(header.fEventNumberInFile),
  fBunchCrossNumber(header.fBunchCrossNumber),
  fTriggerCluster(header.fTriggerCluster),
  fL0TriggerInputs(header.fL0TriggerInputs),
  fL1TriggerInputs(header.fL1TriggerInputs),
  fL2TriggerInputs(header.fL2TriggerInputs),
  fTriggerScalers(header.fTriggerScalers),
  fTriggerScalersDeltaEvent(header.fTriggerScalersDeltaEvent),
  fTriggerScalersDeltaRun(header.fTriggerScalersDeltaRun),
  fTriggerInputsNames(TObjArray(kNTriggerInputs)),
  fCTPConfig(header.fCTPConfig),
  fIRBufferArray(),
  fIRInt2InteractionsMap(header.fIRInt2InteractionsMap),
  fIRInt1InteractionsMap(header.fIRInt1InteractionsMap)
{
  // copy constructor
  for(Int_t i = 0; i<kNMaxIR ; i++) {
    if(header.fIRArray[i])fIRArray[i] = new AliTriggerIR(*header.fIRArray[i]);
    else fIRArray[i]=0;
  }
  for(Int_t i = 0; i < kNTriggerInputs; i++) {
    TNamed *str = (TNamed *)((header.fTriggerInputsNames).At(i));
    if (str) fTriggerInputsNames.AddAt(new TNamed(*str),i);
  }

  for(Int_t i = 0; i < (header.fIRBufferArray).GetEntries(); ++i) {
    AliTriggerIR *ir = (AliTriggerIR*)((header.fIRBufferArray).At(i));
    if (ir) fIRBufferArray.Add(new AliTriggerIR(*ir));
  }
  for (Int_t itype=0; itype<3; itype++) fTPCNoiseFilterCounter[itype]=header.fTPCNoiseFilterCounter[itype];
}

AliESDHeader& AliESDHeader::operator=(const AliESDHeader &header)
{ 
  // assigment operator
  if(this!=&header) {
    AliVHeader::operator=(header);
    fTriggerMask = header.fTriggerMask;
    fTriggerMaskNext50 = header.fTriggerMaskNext50;
    fOrbitNumber = header.fOrbitNumber;
    fTimeStamp = header.fTimeStamp;
    fEventType = header.fEventType;
    fEventSpecie = header.fEventSpecie;
    fPeriodNumber = header.fPeriodNumber;
    fEventNumberInFile = header.fEventNumberInFile;
    fBunchCrossNumber = header.fBunchCrossNumber;
    fTriggerCluster = header.fTriggerCluster;
    fL0TriggerInputs = header.fL0TriggerInputs;
    fL1TriggerInputs = header.fL1TriggerInputs;
    fL2TriggerInputs = header.fL2TriggerInputs;
    fTriggerScalers = header.fTriggerScalers;
    fTriggerScalersDeltaEvent = header.fTriggerScalersDeltaEvent;
    fTriggerScalersDeltaRun = header.fTriggerScalersDeltaRun;
    fIRInt2InteractionsMap = header.fIRInt2InteractionsMap;
    fIRInt1InteractionsMap = header.fIRInt1InteractionsMap;

    delete fCTPConfig;
    fCTPConfig = header.fCTPConfig;

    fTriggerInputsNames.Clear();
    for(Int_t i = 0; i < kNTriggerInputs; i++) {
      TNamed *str = (TNamed *)((header.fTriggerInputsNames).At(i));
      if (str) fTriggerInputsNames.AddAt(new TNamed(*str),i);
    }
    for(Int_t i = 0; i<kNMaxIR ; i++) {
      delete fIRArray[i];
       if(header.fIRArray[i])fIRArray[i] = new AliTriggerIR(*header.fIRArray[i]);
       else fIRArray[i]=0;
    }

    fIRBufferArray.Delete();
    for(Int_t i = 0; i < (header.fIRBufferArray).GetEntries(); ++i) {
      AliTriggerIR *ir = (AliTriggerIR*)((header.fIRBufferArray).At(i));
      if (ir) fIRBufferArray.Add(new AliTriggerIR(*ir));
    }
    for (Int_t itype=0; itype<3; itype++) fTPCNoiseFilterCounter[itype]=header.fTPCNoiseFilterCounter[itype];
  }
  return *this;
}

void AliESDHeader::Copy(TObject &obj) const 
{  
  // this overwrites the virtual TOBject::Copy()
  // to allow run time copying without casting
  // in AliESDEvent

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

}
//______________________________________________________________________________
void AliESDHeader::Reset()
{
  // reset all data members
  fTriggerMask       = 0;
  fTriggerMaskNext50 = 0;
  fOrbitNumber       = 0;
  fTimeStamp         = 0;
  fEventType         = 0;
  fEventSpecie       = 0;
  fPeriodNumber      = 0;
  fEventNumberInFile = 0;
  fBunchCrossNumber  = 0;
  fTriggerCluster    = 0;
  fL0TriggerInputs   = 0;
  fL1TriggerInputs   = 0;
  fL2TriggerInputs   = 0;
  fTriggerScalers.Reset();
  fTriggerScalersDeltaEvent.Reset();
  fTriggerScalersDeltaRun.Reset();
  fTriggerInputsNames.Clear();

  fIRInt2InteractionsMap.ResetAllBits();
  fIRInt1InteractionsMap.ResetAllBits();

  delete fCTPConfig;
  fCTPConfig = 0;
  for(Int_t i=0;i<kNMaxIR;i++)if(fIRArray[i]){
   delete fIRArray[i];
   fIRArray[i]=0;
  }
  for (Int_t itype=0; itype<3; itype++) fTPCNoiseFilterCounter[itype]=0;
  fIRBufferArray.Delete();
}
//______________________________________________________________________________
Bool_t AliESDHeader::AddTriggerIR(const AliTriggerIR* ir)
{
  // Add an IR object into the array
  // of IRs in the ESD header

 fIRBufferArray.Add(new AliTriggerIR(*ir));

 return kTRUE;
}
//______________________________________________________________________________
void AliESDHeader::Print(const Option_t *) const
{
  // Print some data members
  printf("Event # %d in file Bunch crossing # %d Orbit # %d Trigger %lld %lld\n",
	 GetEventNumberInFile(),
	 GetBunchCrossNumber(),
	 GetOrbitNumber(),
	 GetTriggerMask(),
	 GetTriggerMaskNext50());
         printf("List of the active trigger inputs: ");
  	 for(Int_t i = 0; i < kNTriggerInputs; i++) {
    	   TNamed *str = (TNamed *)((fTriggerInputsNames).At(i));
    	   if (str) printf("%i %s ",i,str->GetName());
         }
         printf("\n");
}

//______________________________________________________________________________
void AliESDHeader::SetActiveTriggerInputs(const char*name, Int_t index)
{
  // Fill the active trigger inputs names
  // into the corresponding fTriggerInputsNames (TObjArray of TNamed)
  if (index >= kNTriggerInputs || index < 0) {
    AliError(Form("Index (%d) is outside the allowed range (0,59)!",index));
    return;
  }

  fTriggerInputsNames.AddAt(new TNamed(name,NULL),index);
}
//______________________________________________________________________________
const char* AliESDHeader::GetTriggerInputName(Int_t index, Int_t trglevel) const
{
  // Get the trigger input name
  // at the specified position in the trigger mask and trigger level (0,1,2)
  TNamed *trginput = 0;
  if (trglevel == 0) trginput = (TNamed *)fTriggerInputsNames.At(index);
  if (trglevel == 1) trginput = (TNamed *)fTriggerInputsNames.At(index+24);  
  if (trglevel == 2) trginput = (TNamed *)fTriggerInputsNames.At(index+48); 
  if (trginput) return trginput->GetName();
  else return "";
}
//______________________________________________________________________________
TString AliESDHeader::GetActiveTriggerInputs() const
{
  // Returns the list with the names of the active trigger inputs
  TString trginputs;
  for(Int_t i = 0; i < kNTriggerInputs; i++) {
    TNamed *str = (TNamed *)((fTriggerInputsNames).At(i));
    if (str) {
      trginputs += " ";
      trginputs += str->GetName();
      trginputs += " ";
    }
  }

  return trginputs;
}
//______________________________________________________________________________
TString AliESDHeader::GetFiredTriggerInputs() const
{
  // Returns the list with the names of the fired trigger inputs
  TString trginputs;
  for(Int_t i = 0; i < kNTriggerInputs; i++) {
      TNamed *str = (TNamed *)((fTriggerInputsNames.At(i)));
      if (i < 24 && (fL0TriggerInputs & (1ul << i))) {
        if (str) {
	  trginputs += " ";
	  trginputs += str->GetName();
          trginputs += " ";
        }
      }
      if (i >= 24 && i < 48 && (fL1TriggerInputs & (1ul << (i-24)))) {
        if (str) {
	  trginputs += " ";
	  trginputs += str->GetName();
          trginputs += " ";
        }
      }
      if (i >= 48 && (fL2TriggerInputs & (1u << (i-48)))) {
        if (str) {
	  trginputs += " ";
	  trginputs += str->GetName();
          trginputs += " ";
        }
      }

  }
  return trginputs;
}
//______________________________________________________________________________
Bool_t AliESDHeader::IsTriggerInputFired(const char *name) const
{
  // Checks if the trigger input is fired 
 
  TNamed *trginput = (TNamed *)fTriggerInputsNames.FindObject(name);
  if (!trginput) return kFALSE;

  Int_t inputIndex = fTriggerInputsNames.IndexOf(trginput);
  if (inputIndex < 0) return kFALSE;
  
  if (fL0TriggerInputs & (1lu << inputIndex)) return kTRUE;
  else if (fL1TriggerInputs & (1lu << (inputIndex-24))) return kTRUE;
  else if (fL2TriggerInputs & (1u << (inputIndex-48))) return kTRUE;
  else return kFALSE;
}
//________________________________________________________________________________
Int_t  AliESDHeader::GetTriggerIREntries(Int_t int1, Int_t int2, Float_t deltaTime) const
{
  // returns number of IR-s within time window deltaTime
  // all possible combinations of int1 and int2 int1 - zdc bit, int2 v0 bit
  //
  const AliTriggerIR *IR;
  // triggered event 
  Int_t nIR = GetTriggerIREntries();
  UInt_t orbit1 = GetOrbitNumber();
  const Double_t ot=0.0889218; //orbit time msec
  Float_t timediff; // time difference between orbits (msec)
  //
  Int_t nofIR;
  nofIR=0;
  // loop over IR-s
    for(Int_t i=0;i<nIR;i++){//1
      IR=GetTriggerIR(i);
      //
      UInt_t orbit2 = IR->GetOrbit();
      timediff = (orbit2<=orbit1) ? (Float_t)((orbit1-orbit2))*ot : 
	(Float_t)((16777215-orbit1+orbit2))*ot;
      if (timediff>deltaTime) continue; //timediff outside time window
      if((int1&int2) == -1){ //ignore both bits, just count IR-s within time window
	nofIR++;
        continue;
      }
      // now check if int1, int2 bits are set
      UInt_t nw = IR->GetNWord();
      Bool_t *bint1 = IR->GetInt1s();
      Bool_t *bint2 = IR->GetInt2s();
      //
      Int_t flag1,flag2;
      flag1=0;
      flag2=0;
      for(UInt_t j=0;j<nw;j++){//2
	if(bint1[j]) flag1=1; // at least one int1 set
	if(bint2[j]) flag2=1; //  at least one int2 set
        //printf("IR %d, bint1 %d, bint2 %d\n",i,bint1[j],bint2[j]);
      }//2
      // checking combinations
      //
      
      if((flag1*int1*flag2*int2)==1){// int1=1 & int2=1	 
          nofIR++;
          continue;       
      }
      if(int1 == -1){// ignore int1
        if(flag2&int2){// int2=1
          nofIR++;
          continue;
	}
        else if (!flag2&!int2){ //int2=0 
          nofIR++;
          continue;          
	}
      }
      
      if(int2 ==-1){//ignore int2
        if(flag1&int1){//int1=1
          nofIR++;
          continue;  
	}
        else if(!flag1&!int1){ //int1=0
          nofIR++;
          continue;  
	}
      }
      
      if((flag1*int1)&!flag2&!int2){// int1=1, int2=0
          nofIR++;
          continue;  
      }
      
      if((int2*flag2)&!int1&!flag1){// int1=0, int2=1
          nofIR++;
          continue;  
      } 
         
      

    }//1
  
    return nofIR;
}
//__________________________________________________________________________
TObjArray AliESDHeader::GetIRArray(Int_t int1, Int_t int2, Float_t deltaTime) const
{
  //
  // returns an array of IR-s within time window deltaTime
  // all possible combinations of int1 and int2 int1 - zdc bit, int2 v0 bit
  //
  const AliTriggerIR *IR;
  TObjArray arr;
  // triggered event 
  Int_t nIR = GetTriggerIREntries();
  UInt_t orbit1 = GetOrbitNumber();
  const Double_t ot=0.0889218; //orbit time msec
  Float_t timediff; // time difference between orbits (msec)
  //
  // loop over IR-s
    for(Int_t i=0;i<nIR;i++){//1
      IR=GetTriggerIR(i);
      //
      UInt_t orbit2 = IR->GetOrbit();
      timediff = (orbit2<=orbit1) ? (Float_t)((orbit1-orbit2))*ot : 
	(Float_t)((16777215-orbit1+orbit2))*ot;
      if (timediff>deltaTime) continue; //timediff outside time window
      if((int1&int2) == -1){ //ignore both bits, just count IR-s within time window
	arr.Add((AliTriggerIR*)IR); //add this IR
        continue;
      }
      // now check if int1, int2 bits are set
      UInt_t nw = IR->GetNWord();
      Bool_t *bint1 = IR->GetInt1s();
      Bool_t *bint2 = IR->GetInt2s();
      //
      Int_t flag1,flag2;
      flag1=0;
      flag2=0;
      for(UInt_t j=0;j<nw;j++){//2
	if(bint1[j]) flag1=1; // at least one int1 set
	if(bint2[j]) flag2=1; //  at least one int2 set
      }//2
      // checking combinations
      //
      if((flag1*int1*flag2*int2)==1){// int1=1 & int2=1
	  arr.Add((AliTriggerIR*)IR); //add this IR
          continue;       
      }
      if(int1 == -1){// ignore int1
        if(flag2&int2){// int2=1
 	  arr.Add((AliTriggerIR*)IR); //add this IR
          continue;
	}
        else if (!flag2&!int2){ //int2=0 
          arr.Add((AliTriggerIR*)IR); //add this IR
          continue;          
	}
      }
      if(int2 ==-1){//ignore int2
        if(flag1&int1){//int1=1
	  arr.Add((AliTriggerIR*)IR); //add this IR
          continue;  
	}
        else if(!flag1&!int1){ //int1=0
	  arr.Add((AliTriggerIR*)IR); //add this IR
          continue;  
	}
      }
      if ((flag1*int1)&!flag2&!int2){// int1=1, int2=0
	  arr.Add((AliTriggerIR*)IR); //add this IR
          continue;  
      }
      if ((int2*flag2)&!int1&!flag1){// int1=0, int2=1
	  arr.Add((AliTriggerIR*)IR); //add this IR
          continue;  
      }      

    }//1
  
  return arr;
}

//__________________________________________________________________________
void AliESDHeader::SetIRInteractionMap() const
{
  //
  // Function to compute the map of interations 
  // within 0TVX (int2) or V0A&V0C (int1) and the Event Id 
  // Note, the zero value is excluded
  //
  const AliTriggerIR *ir[5] = {GetTriggerIR(0),GetTriggerIR(1),GetTriggerIR(2),GetTriggerIR(3),GetTriggerIR(4)};

  Long64_t orb = (Long64_t)GetOrbitNumber();
  Long64_t bc = (Long64_t)GetBunchCrossNumber();
  
  Long64_t evId = orb*3564 + bc;

  for(Int_t i = 0; i < 5; ++i) {
    if (ir[i] == NULL || ir[i]->GetNWord() == 0) continue;
    Long64_t irOrb = (Long64_t)ir[i]->GetOrbit();
    Bool_t* int2 = ir[i]->GetInt2s();
    Bool_t* int1 = ir[i]->GetInt1s();
    UShort_t* bcs = ir[i]->GetBCs();
    for(UInt_t nW = 0; nW < ir[i]->GetNWord(); ++nW) {
      Long64_t intId = irOrb*3564 + (Long64_t)bcs[nW];
      if (int2[nW] == kTRUE) {
	  Int_t item = (intId-evId);
	  Int_t bin = FindIRIntInteractionsBXMap(item);
	  if(bin>=0) {
	    fIRInt2InteractionsMap.SetBitNumber(bin,kTRUE);
	  }
      }
      if (int1[nW] == kTRUE) {
	  Int_t item = (intId-evId);
	  Int_t bin = FindIRIntInteractionsBXMap(item);
	  if(bin>=0) {
	    fIRInt1InteractionsMap.SetBitNumber(bin,kTRUE);
	  }
      }
    }
  }

  fIRInt2InteractionsMap.Compact();
  fIRInt1InteractionsMap.Compact();
}

//__________________________________________________________________________
Int_t AliESDHeader::FindIRIntInteractionsBXMap(Int_t difference) const
{
  //
  // The mapping is of 181 bits, from -90 to +90
  //
  Int_t bin=-1;

  if(difference<-90 || difference>90) return bin;
  else { bin = 90 + difference; }
  
  return bin;
}

//__________________________________________________________________________
Int_t AliESDHeader::GetIRInt2ClosestInteractionMap() const
{
  //
  // Calculation of the closest interaction
  //
  SetIRInteractionMap();

  Int_t firstNegative=100;
  for(Int_t item=-1; item>=-90; item--) {
    Int_t bin = FindIRIntInteractionsBXMap(item);
    Bool_t isFired = fIRInt2InteractionsMap.TestBitNumber(bin);
    if(isFired) {
      firstNegative = item;
      break;
    }
  }
  Int_t firstPositive=100;
  for(Int_t item=1; item<=90; item++) {
    Int_t bin = FindIRIntInteractionsBXMap(item);
    Bool_t isFired = fIRInt2InteractionsMap.TestBitNumber(bin);
    if(isFired) {
      firstPositive = item;
      break;
    }
  }

  Int_t closest = firstPositive < TMath::Abs(firstNegative) ? firstPositive : TMath::Abs(firstNegative);
  if(firstPositive==100 && firstNegative==100) closest=0;
  return closest;
}

//__________________________________________________________________________
Int_t AliESDHeader::GetIRInt1ClosestInteractionMap(Int_t gap) const
{
  //
  // Calculation of the closest interaction
  // In case of VZERO (Int1) one has to introduce a gap
  // in order to avoid false positivies from after-pulses

  SetIRInteractionMap();

  Int_t firstNegative=100;
  for(Int_t item=-1; item>=-90; item--) {
    Int_t bin = FindIRIntInteractionsBXMap(item);
    Bool_t isFired = fIRInt1InteractionsMap.TestBitNumber(bin);
    if(isFired) {
      firstNegative = item;
      break;
    }
  }
  Int_t firstPositive=100;
  for(Int_t item=1+gap; item<=90; item++) {
    Int_t bin = FindIRIntInteractionsBXMap(item);
    Bool_t isFired = fIRInt1InteractionsMap.TestBitNumber(bin);
    if(isFired) {
      firstPositive = item;
      break;
    }
  }

  Int_t closest = firstPositive < TMath::Abs(firstNegative) ? firstPositive : TMath::Abs(firstNegative);
  if(firstPositive==100 && firstNegative==100) closest=0;
  return closest;
}

//__________________________________________________________________________
Int_t  AliESDHeader::GetIRInt2LastInteractionMap() const
{
  //
  // Calculation of the last interaction
  //
  SetIRInteractionMap();

  Int_t lastNegative=0;
  for(Int_t item=-90; item<=-1; item++) {
    Int_t bin = FindIRIntInteractionsBXMap(item);
    Bool_t isFired = fIRInt2InteractionsMap.TestBitNumber(bin);
    if(isFired) {
      lastNegative = item;
      break;
    }
  }
  Int_t lastPositive=0;
  for(Int_t item=90; item>=1; item--) {
    Int_t bin = FindIRIntInteractionsBXMap(item);
    Bool_t isFired = fIRInt2InteractionsMap.TestBitNumber(bin);
    if(isFired) {
      lastPositive = item;
      break;
    }
  }

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