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

/********************************************************************************
*                                                                               *
*   AliLHCData: summary of the LHC related information from LHC DIP.            *
*   Created from the TMap provided by the AliLHCReader with optional beginning  *
*                                                                               *
*   The data are (wrapped in the AliLHCDipValT):                                *
*   made of TimeStamp (double) and array of values                              *
*                                                                               *
*   Multiple entries for each type of data are possible. To obtaine number of   *
*   records (with distinct timestamp) for give type od records use:             *
*   int GetNBunchConfigMeasured(int beam) (with beam=0,1) etc.                  *
*                                                                               *
*   To get i-th entry, use brec= AliLHCDipValI* GetBunchConfigMeasured(bm,i);   *
*   Note: exact type of templated AliLHCDipValT pointer depends on the record   *
*   type, concult getters to know it.                                           *
*                                                                               *
*   Then, once the pointer is obtained, details can be accessed:                *
*   int nBunches = brec->GetSize();                                             *
*   for (int i=0;i<nBunches;i++) printf("Bunch#%d: %d\n",i,(*brec)[i]);         *
*                                                                               *
*                                                                               *
*   Author: ruben.shahoyan@cern.ch                                              *
*                                                                               *
********************************************************************************/

#include "AliLHCData.h"
#include "TMap.h"
#include "AliDCSArray.h"
#include "AliLHCReader.h"
#include "AliTriggerBCMask.h"
#include <TString.h>
#include <TObjArray.h>
#include <TGraph.h>

ClassImp(AliLHCData)

const Char_t* AliLHCData::fgkDCSNames[] = {
  "LHC_IntensityBeam%1d_totalIntensity"
  ,"LHC_BeamIntensityPerBunchBeam%1d_averageBeamIntensity"
  ,"LHC_BeamIntensityPerBunchBeam%1d_Average_BunchIntensities"
  //
  ,"LHC_LumAverageBRANB_4%c2_acqMode"
  ,"LHC_LumAverageBRANB_4%c2_meanLuminosity"
  ,"LHC_LumAverageBRANB_4%c2_meanLuminosityError"
  ,"LHC_BeamLuminosityPerBunchBRANB_4%c2_Average_BunchLuminosity"
  ,"LHC_BeamLuminosityPerBunchBRANB_4%c2_BunchLuminosityError"
  ,"LHC_LumAverageBRANB_4%c2_meanCrossingAngle"
  ,"LHC_LumAverageBRANB_4%c2_meanCrossingAngleError"
  ,"LHC_CirculatingBunchConfig_Beam%d"
  ,"LHC_FillNumber"
  //
  ,"LHC_BunchLengthBeam%1d_nBunches"
  ,"LHC_BunchLengthBeam%1d_bunchesLenghts"
  ,"LHC_BunchLengthBeam%1d_filledBuckets"
  //
  ,"LHC_RunControl_ActiveInjectionScheme"
  ,"LHC_RunControl_BetaStar"
  ,"LHC_RunControl_IP2_Xing_Murad"
  ,"LHC_RunControl_IP2_ALICE_Murad"

  ,"LHC_BeamSizeBeam%1d_acqMode"
  ,"LHC_BeamSizeBeam%1d_sigmaH"
  ,"LHC_BeamSizeBeam%1d_sigmaV"
  ,"LHC_BeamSizeBeam%1d_emittanceH"
  ,"LHC_BeamSizeBeam%1d_emittanceV"
  ,"LHC_BeamSizeBeam%1d_errorSigmaH"
  ,"LHC_BeamSizeBeam%1d_errorSigmaV"
  //
  ,"LHC_CollimatorPos_%s_lvdt_%s"
  //
  ,"BPTX_deltaT_B1_B2"
  ,"BPTX_deltaTRMS_B1_B2"
  ,"BPTX_Phase_B%1d"
  ,"BPTX_PhaseRMS_B%1d"
  ,"BPTX_Phase_Shift_B%1d"
  //
  ,"ALI_Lumi_Total_Inst"
  ,"ALI_Lumi_Total_Delivered_StabBeam"
  ,"ALI_Lumi_Bunch_Inst"
  ,"ALI_Background%1d"
};

const Char_t* AliLHCData::fgkDCSColNames[] = {
  "TCTVB_4L2",
  "TCTVB_4R2",
  "TCLIA_4R2"
};

const Char_t* AliLHCData::fgkDCSColJaws[] = {
  "gap_downstream","gap_upstream","left_downstream",
  "left_upstream","right_downstream","right_upstream"};

//___________________________________________________________________
AliLHCData::AliLHCData(const TMap* dcsMap, double tmin, double tmax)
  : fTMin(0),fTMax(0),fFillNumber(0),fData(0),fkFile2Process(0),fkMap2Process(0)
{
  FillData(dcsMap,tmin,tmax);
}

//___________________________________________________________________
AliLHCData::AliLHCData(const Char_t* dcsFile, double tmin, double tmax)
  : fTMin(0),fTMax(0),fFillNumber(0),fData(0),fkFile2Process(dcsFile),fkMap2Process(0)
{
  FillData(dcsFile,tmin,tmax);
}

//___________________________________________________________________
Bool_t AliLHCData::FillData(const TMap*   dcsMap,double tmin, double tmax)
{
  // process DCS map and fill all fields. 
  Clear();
  fkMap2Process = dcsMap;
  FillData(tmin,tmax);
  return kTRUE;
}

//___________________________________________________________________
Bool_t AliLHCData::FillData(const Char_t* dcsFile,double tmin, double tmax)
{
  // process DCS file and fill all fields. 
  Clear();
  fkFile2Process = dcsFile;
  FillData(tmin,tmax);
  return kTRUE;
}

//___________________________________________________________________
Bool_t AliLHCData::FillData(double tmin, double tmax)
{
  // process DCS map and fill all fields. 
  // Accept only entries with timestamp between tmin and tmax
  //
  char buff[100],buff1[100];
  //
  SetTMin(tmin);
  SetTMax(tmax);
  //
  // -------------------------- extract Fill Number
  int iFirst=0,iLast=0;
  TObjArray* arr = GetDCSEntry(fgkDCSNames[kFillNum],iFirst,iLast,fTMin,fTMax);
  if (arr) SetFillNumber( ExtractInt( (AliDCSArray*)arr->At(iFirst), 0) );
  if (fkFile2Process) delete arr; // array was created on demand
  //
  for (int ibm=0;ibm<2;ibm++) {
    //
    snprintf(buff,99,fgkDCSNames[kBunchConf],ibm+1);         // ----- declared bunch configuration
    FillBunchConfig(fBunchConfDecl[ibm], buff);
    //
    snprintf(buff,99,fgkDCSNames[kBunchLgtFillB],ibm+1);     // ----- measured bunch configuration
    FillBunchConfig(fBunchConfMeas[ibm], buff);
    //
    snprintf(buff,99,fgkDCSNames[kBunchLgt],ibm+1);          // ----- measured bunch lenghts
    FillBunchInfo(fBunchLengths[ibm],buff,ibm,kFALSE);  
    //
    snprintf(buff,99,fgkDCSNames[kIntBunchAv],ibm+1);        // ----- B-by-B intensities
    FillBunchInfo(fIntensPerBunch[ibm],buff,ibm,kTRUE);
    //
    //
    snprintf(buff,99,fgkDCSNames[kIntTot],ibm+1);            // ----- total intensities for beam 1 and 2
    FillScalarRecord(fIntensTotal[ibm], buff);
    //
    snprintf(buff,99,fgkDCSNames[kIntTotAv],ibm+1);          // ----- total intensities for beam 1 and 2 from B-by-B average
    FillScalarRecord(fIntensTotalAv[ibm], buff);
    //
    snprintf(buff,99,fgkDCSNames[kBeamSzEmittH],ibm+1);      // ----- H emittance for beam 1 and 2 
    FillScalarRecord(fEmittanceH[ibm], buff);
    //
    snprintf(buff,99,fgkDCSNames[kBeamSzEmittV],ibm+1);      // ----- V emittance for beam 1 and 2 
    FillScalarRecord(fEmittanceV[ibm], buff);
    //
    snprintf(buff,99 ,fgkDCSNames[kBeamSzSigH],   ibm+1);    // ----- H sigmas and errors for beam 1 and 2 
    snprintf(buff1,99,fgkDCSNames[kBeamSzSigHErr],ibm+1);
    FillScalarRecord(fBeamSigmaH[ibm], buff, buff1);
    //
    snprintf(buff,99 ,fgkDCSNames[kBeamSzSigV],   ibm+1);    // ----- V sigmas and errors for beam 1 and 2 
    snprintf(buff1,99,fgkDCSNames[kBeamSzSigVErr],ibm+1);
    FillScalarRecord(fBeamSigmaV[ibm], buff, buff1);
    //
    //
    snprintf(buff,99,fgkDCSNames[kBPTXPhase],ibm+1);         // ----- BPTXPhase beam 1 and 2
    FillScalarRecord(fBPTXPhase[ibm], buff);
    //
    snprintf(buff,99,fgkDCSNames[kBPTXPhaseRMS],ibm+1);      // ----- BPTXPhaseRMS beam 1 and 2
    FillScalarRecord(fBPTXPhaseRMS[ibm], buff);
    //
    snprintf(buff,99,fgkDCSNames[kBPTXPhaseShift],ibm+1);    // ----- BPTXPhaseShift beam 1 and 2
    FillScalarRecord(fBPTXPhaseShift[ibm], buff);
    //
  }
  //
  for (int ibg=0;ibg<kNBGs;ibg++) {
    snprintf(buff,99,fgkDCSNames[kALIBackground],ibg+1);    // ----- Alice backgrounds 1,2,3
    FillScalarRecord(fBckgAlice[ibg], buff);
  }
  //
  FlagInteractingBunches(fBunchConfMeas[0],fBunchConfMeas[1]);
  FlagInteractingBunches(fBunchConfDecl[0],fBunchConfDecl[1]);
  //
  for (int ilr=0;ilr<2;ilr++) {
    //
    snprintf(buff,99 ,fgkDCSNames[kLumBunch], ilr ? 'R':'L');       // ---- BC-by-BC luminosity at IP2 and its error
    snprintf(buff1,99,fgkDCSNames[kLumBunchErr], ilr ? 'R':'L');
    FillBCLuminosities(fLuminPerBC[ilr], buff, buff1, 0); // BRAN L uses beam2 as a reference, BRAN R - beam1
    //
    snprintf(buff,99 ,fgkDCSNames[kLumTot]   , ilr ? 'R':'L');       // ---- total luminosity at IP2 and its error
    snprintf(buff1,99,fgkDCSNames[kLumTotErr], ilr ? 'R':'L');
    FillScalarRecord(fLuminTotal[ilr], buff, buff1);
    //
    snprintf(buff,99 ,fgkDCSNames[kLumAcqMode], ilr ? 'R':'L');      // ---- luminosity acquisition mode
    FillAcqMode(fLuminAcqMode[ilr], buff);
    //
    snprintf(buff,99, fgkDCSNames[kLumCrossAng]   , ilr ? 'R':'L');  //----- crossing angle at IP2 and its error
    snprintf(buff1,99,fgkDCSNames[kLumCrossAngErr], ilr ? 'R':'L');
    FillScalarRecord(fCrossAngle[ilr], buff, buff1);
    //    
  }
  //
  for (int icl=0;icl<kNCollimators;icl++) {             // ----- collimators positions
    for (int jaw=0;jaw<kNJaws;jaw++) {
      snprintf(buff,99,fgkDCSNames[kCollPos], fgkDCSColNames[icl],fgkDCSColJaws[jaw]);        
      FillScalarRecord(fCollimators[icl][jaw], buff);
    } // jaws
  } // collimators
  //
  //
  // RunControl info
  FillStringRecord(fRCInjScheme, fgkDCSNames[kRCInjSch]);   // ---- active injection scheme
  FillScalarRecord(fRCBeta, fgkDCSNames[kRCBeta]);          // ---- target beta 
  FillScalarRecord(fRCAngH, fgkDCSNames[kRCCrossAng]);      // ---- horisontal angle
  FillScalarRecord(fRCAngV,fgkDCSNames[kRCVang] );          // ---- vertical angle
  //
  FillScalarRecord(fBPTXdTB1B2,    fgkDCSNames[kBPTXdeltaTB1B2]);
  FillScalarRecord(fBPTXdTRMSB1B2, fgkDCSNames[kBPTXdeltaTRMSB1B2]);
  FillScalarRecord(fLumiAlice,     fgkDCSNames[kALILumiTotalInst]);
  FillScalarRecord(fLumiAliceStB,  fgkDCSNames[kALILumiTotalDeliveredStabBeam]);  
  FillBCLuminosities(fLumiAliceBbB,fgkDCSNames[kALILumiBunchInst],0,0);  
  //
  return kTRUE;
}

//___________________________________________________________________
TObjArray* AliLHCData::GetDCSEntry(const char* key,int &entry,int &last,double tmin,double tmax) const
{
  // extract array from the DCS map or file and find the first entry within the time limits
  entry = -1;
  last = -2;
  TObjArray* arr;
  if (fkMap2Process) arr = (TObjArray*)fkMap2Process->GetValue(key);
  else if (fkFile2Process) {
    AliLHCReader rd;
    arr = rd.ReadSingleLHCDP(fkFile2Process,key);
  }
  else {
    AliError("Neither DCS map nor DCS filename are set");
    return 0;  
  }
  //
  if (!arr || !arr->GetEntriesFast()) { 
    AliWarning(Form("No data for %s",key)); 
    if (fkMap2Process) delete arr; // created on demand
    return 0;
  }
  int ntot = arr->GetEntriesFast();
  //
  // search 1st entry before or at tmin
  AliDCSArray* ent = 0;
  Bool_t found = kFALSE;
  for (entry=0;entry<ntot;entry++) {
    ent = (AliDCSArray*)arr->At(entry);
    if (ent->GetTimeStamp()>=tmin-kMarginSOR && ent->GetTimeStamp()<=tmax+kMarginEOR) {
      found = kTRUE;
      if (ent->GetTimeStamp()>tmin) break;
    }
  }
  if (!found) {
    entry = -1;
    TString str;
    str += AliLHCDipValF::TimeAsString(tmin);
    str += " : ";
    str += AliLHCDipValF::TimeAsString(tmax);
    AliWarning(Form("All entries for %s are outside the requested range:\n%s",key,str.Data()));
    if (fkMap2Process) delete arr; // created on demand
    return 0;
  }
  if (entry>0) entry--;
  //
  // search last entry at or after tmin
  ent = 0;
  for (last=entry;last<ntot;last++) {
    ent = (AliDCSArray*)arr->At(last);
    if (ent->GetTimeStamp()>tmax) break;
  }
  if (last == ntot) last--;
  else if (ent->GetTimeStamp()>tmax+kMarginEOR) last--;
  //
  return arr;
}

//___________________________________________________________________
Int_t AliLHCData::TimeDifference(double v1,double v2,double tol) const
{
  // return 0 if the times are the same within the tolerance
  //        1 if v1>v2
  //       -1 if v1<v2
  v1-=v2;
  if (v1>tol)  return  1;
  if (v1<-tol) return -1;
  return 0;
}

//___________________________________________________________________
Bool_t AliLHCData::GoodPairID(int beam) const
{
  // check for correct beam identifier 
  if (beam>kBeam2||beam<0) {AliError(Form("BeamID can be 0 or 1, %d requested",beam)); return kFALSE;}
  return kTRUE;
}

//___________________________________________________________________
AliLHCDipValI* AliLHCData::GetBunchConfigMeasured(int beam,double tstamp) const
{
  // find measured bunch configuration valid for given tstamp
  if (!GoodPairID(beam)) return 0;
  return (AliLHCDipValI*)FindRecValidFor(fBunchConfMeas[beam][kStart],fBunchConfMeas[beam][kNStor],tstamp);
}

//___________________________________________________________________
AliLHCDipValI* AliLHCData::GetBunchConfigDeclared(int beam,double tstamp) const
{
  // find declared bunch configuration valid for given tstamp
  if (!GoodPairID(beam)) return 0;
  return (AliLHCDipValI*)FindRecValidFor(fBunchConfDecl[beam][kStart],fBunchConfDecl[beam][kNStor],tstamp);
}

//___________________________________________________________________
TObject* AliLHCData::FindRecValidFor(int start,int nrec, double tstamp) const
{
  // find record within this limits valid for given tstamp (i.e. the last one before or equal to tstamp)
  AliLHCDipValI *prevObj = 0;
  for (int i=0;i<nrec;i++) {
    AliLHCDipValI* curObj = (AliLHCDipValI*)fData[start+i];
    if (TimeDifference(tstamp,curObj->GetTimeStamp())<=0) break;
    prevObj = curObj;
  }
  if (!prevObj && nrec>0) prevObj = (AliLHCDipValI*)fData[start]; // if no exact match, return the 1st one
  return prevObj;
}

//___________________________________________________________________
Int_t AliLHCData::FillScalarRecord(int refs[2], const char* rec, const char* recErr, Double_t maxAbsVal)
{
  // fill record for scalar value, optionally accompanied by measurement error 
  //
  AliInfo(Form("Acquiring record: %s",rec));
  //
  TObjArray *arr=0,*arrE=0;
  Int_t iLast=0,iLastE=0,iFirst=0,iFirstE=0;
  //
  refs[kStart] = fData.GetEntriesFast();
  refs[kNStor] = 0;
  //
  if ( !(arr=GetDCSEntry(rec,iFirst,iLast,fTMin,fTMax)) ) return -1;
  //
  int dim = 1;
  if (recErr) {
    arrE = GetDCSEntry(recErr,iFirstE,iLastE,fTMin,fTMax);
    dim += 1;
  }
  //
  // Bool_t last = kFALSE;
  while (iFirst<=iLast) {
    AliDCSArray *dcsVal = (AliDCSArray*) arr->At(iFirst++);
    double tstamp = dcsVal->GetTimeStamp();
    //
    AliLHCDipValF* curValD = new AliLHCDipValF(dim,tstamp);  // start new period
    double vcheck = ExtractDouble(dcsVal,0);     // value
    if (TMath::Abs(vcheck) > maxAbsVal) {
      AliError(Form("ANOMALOUS VALUE %e for slot %d of %s: exceeds %e",vcheck, 0, rec, maxAbsVal));
      vcheck = 0.;
    }    
    (*curValD)[0] = vcheck;
    //
    if (recErr) {
      double errVal = -1;
      while (iFirstE<=iLastE) {       // try to find corresponding error
	AliDCSArray *dcsValE = (AliDCSArray*) arrE->At(iFirstE);
        double tstampE = dcsValE->GetTimeStamp();
        int tdif = TimeDifference(tstamp,tstampE);
        if (!tdif) { // error matches to value
	  errVal = ExtractDouble(dcsVal,0);     // value
	  if (TMath::Abs(errVal) > maxAbsVal) {
	    AliError(Form("ANOMALOUS VALUE %e for slot %d of %s: exceeds %e",errVal, 0, recErr, maxAbsVal));
	    errVal = 0.;
	  }
	  iFirstE++; 
	  break;
	}
        else if (tdif>0) iFirstE++; // error time lags behind, read the next one
        else break;                 // error time is ahead of value, no error associated
      }
      (*curValD)[dim-1] = errVal;   // error
      curValD->SetLastSpecial();    // lable the last entry as an error
    }
    //
    fData.Add(curValD);
    refs[kNStor]++;
    // if (last) break;
  }
  //
  if (fkFile2Process) {
    delete arr;
    delete arrE;
  }
  return refs[kNStor];
}

//___________________________________________________________________
Int_t AliLHCData::FillBunchConfig(int refs[2],const char* rec)
{
  // fill record for bunch configuration
  //
  AliInfo(Form("Acquiring record: %s",rec));
  TObjArray *arr;
  Int_t iLast,iFirst;
  //
  refs[kStart] = fData.GetEntriesFast();
  refs[kNStor] = 0;
  //
  if ( !(arr=GetDCSEntry(rec,iFirst,iLast,fTMin,fTMax)) ) return -1;
  //
  AliLHCDipValI* prevRecI=0;
  //  
  while (iFirst<=iLast) {
    AliDCSArray *dcsVal = (AliDCSArray*) arr->At(iFirst++);
    double tstamp = dcsVal->GetTimeStamp();
    //
    int bucket=0, nbunch=0, ndiff=0;
    int nSlots = dcsVal->GetNEntries();     // count number of actual bunches (non-zeros)
    int* dcsArr = dcsVal->GetInt();
    while(nbunch<nSlots && (bucket=dcsArr[nbunch])) {
      if (prevRecI && prevRecI->GetSize()>nbunch && bucket!=prevRecI->GetValue(nbunch)) ndiff++;
      nbunch++;
    }
    if (!nbunch) AliWarning(Form("%s record is present but empty: no beam?",rec));
    if (prevRecI && !ndiff && nbunch==prevRecI->GetSize()) continue; // record similar to previous one
    AliLHCDipValI* curValI = new AliLHCDipValI(nbunch,tstamp);      
    for (int i=nbunch;i--;) (*curValI)[i] = dcsArr[i];
    fData.Add(curValI);
    refs[kNStor]++;
    prevRecI = curValI;
  }
  //
  if (fkFile2Process) delete arr;
  return refs[kNStor];
}
 
//___________________________________________________________________
Int_t AliLHCData::FillAcqMode(int refs[2],const char* rec)
{
  // fill acquisition mode
  //
  AliInfo(Form("Acquiring record: %s",rec));
  TObjArray *arr;
  Int_t iLast,iFirst;
  //
  refs[kStart] = fData.GetEntriesFast();
  refs[kNStor] = 0;
  //
  if ( !(arr=GetDCSEntry(rec,iFirst,iLast,fTMin,fTMax)) ) return -1;
  //
  AliLHCDipValI* prevRecI=0;
  while (iFirst<=iLast) {
    AliDCSArray *dcsVal = (AliDCSArray*) arr->At(iFirst++);
    double tstamp = dcsVal->GetTimeStamp();
    //
    int nSlots = dcsVal->GetNEntries();
    if (nSlots<1) continue;
    int acqMode = dcsVal->GetInt()[0];
    if (prevRecI && (*prevRecI)[0] == acqMode) continue; // record similar to previous one
    AliLHCDipValI* curValI = new AliLHCDipValI(1,tstamp);      
    (*curValI)[0] = acqMode;
    fData.Add(curValI);
    refs[kNStor]++;
    prevRecI = curValI;
  }
  //
  if (fkFile2Process) delete arr;
  return refs[kNStor];
}
 
//___________________________________________________________________
Int_t AliLHCData::FillStringRecord(int refs[2],const char* rec)
{
  // fill record with string value
  //
  AliInfo(Form("Acquiring record: %s",rec));
  TString prevRec;
  TObjArray *arr;
  Int_t iLast,iFirst;
  //
  refs[kStart] = fData.GetEntriesFast();
  refs[kNStor] = 0;
  //
  if ( !(arr=GetDCSEntry(rec,iFirst,iLast,fTMin,fTMax)) ) return -1;
  //
  while (iFirst<=iLast) {
    AliDCSArray *dcsVal = (AliDCSArray*) arr->At(iFirst++);
    double tstamp = dcsVal->GetTimeStamp();
    //
    TString &str = ExtractString(dcsVal);
    if (!prevRec.IsNull()) {if (str == prevRec) continue;} // skip similar record
    else prevRec = str;
    //
    AliLHCDipValC* curValS = new AliLHCDipValC(1,tstamp);      
    curValS->SetValues(str.Data(),str.Length()+1);
    //
    fData.Add(curValS);
    refs[kNStor]++;
  }
  if (fkFile2Process) delete arr;
  return refs[kNStor];
}

//___________________________________________________________________
Int_t AliLHCData::FillBunchInfo(int refs[2],const char* rec, int ibm, Bool_t inRealSlots, Double_t maxAbsVal)
{
  // fill bunch properties for beam ibm
  // if inRealSlots = true, then the value is taken from bunchRFbucket/10, otherwise, the value 
  // for the i-th bunch is taken from the i-th element
  //
  AliInfo(Form("Acquiring record: %s",rec));
  TObjArray *arr;
  Int_t iLast,iFirst;
  //
  refs[kStart] = fData.GetEntriesFast();
  refs[kNStor] = 0;
  //
  if ( !(arr=GetDCSEntry(rec,iFirst,iLast,fTMin,fTMax)) ) return -1;
  //
  while (iFirst<=iLast) {
    AliDCSArray *dcsVal = (AliDCSArray*) arr->At(iFirst++);
    double tstamp = dcsVal->GetTimeStamp();
    //
    AliLHCDipValI *bconf = GetBunchConfigMeasured(ibm,tstamp);
    if (!bconf) {
      AliWarning(Form("Mearured bunch configuration for beam %d at t=%.1f is not available, trying declared one",ibm+1,tstamp));
      bconf = GetBunchConfigDeclared(ibm,tstamp);
    }
    if (!bconf) {
      AliWarning(Form("Declared bunch configuration for beam %d at t=%.1f is not available, skip this record",ibm+1,tstamp));
      return -1;
    }
    int nSlots = dcsVal->GetNEntries();     // count number of actual bunches (non-zeros)
    int nbunch = bconf->GetSize();
    if (nbunch>nSlots) {
      AliWarning(Form("More N bunches than slots in %s at time %.1f",rec,tstamp));
      continue;
    }
    double* dcsArr = dcsVal->GetDouble();
    AliLHCDipValF* curValD = new AliLHCDipValF(nbunch,tstamp);
    for (int i=nbunch;i--;) {
      int ind = inRealSlots ? (*bconf)[i]/10 : i;
      if (ind>nSlots) {
	AliError(Form("Bunch %d refers to wrong slot %d, set to -1",i,(*bconf)[i]));
	(*curValD)[i] = -1;
      }
      else {
	double vcheck = dcsArr[ind];
	if (TMath::Abs(vcheck) > maxAbsVal) {
	  AliError(Form("ANOMALOUS VALUE %e for slot %d of %s: exceeds %e",vcheck, ind, rec, maxAbsVal));
	  vcheck = 0.;
	}
	(*curValD)[i] = vcheck;
      }
    }
    fData.Add(curValD);
    refs[kNStor]++;
  }
  if (fkFile2Process) delete arr;
  return refs[kNStor];
  //
}
 
//___________________________________________________________________
Int_t AliLHCData::FillBCLuminosities(int refs[2],const char* rec, const char* recErr, int useBeam, Double_t maxAbsVal)
{
  // fill luminosities per bunch crossing
  //
  AliInfo(Form("Acquiring record: %s",rec));
  TObjArray *arr,*arrE=0;
  Int_t iLast=0,iLastE=0,iFirst=0,iFirstE=0;
  //
  refs[kStart] = fData.GetEntriesFast();
  refs[kNStor] = 0;
  //
  if ( !(arr=GetDCSEntry(rec,iFirst,iLast,fTMin,fTMax)) ) return -1;
  //
  while (iFirst<=iLast) {
    AliDCSArray *dcsVal = (AliDCSArray*) arr->At(iFirst++);
    double tstamp = dcsVal->GetTimeStamp();
    //
    AliLHCDipValI *bconf;
    bconf = GetBunchConfigMeasured(useBeam,tstamp);  // luminosities are stored according to beam bunches
    if (!bconf) {
      AliWarning(Form("Mearured bunch configuration for beam%d at t=%.1f is not available, trying declared one",useBeam,tstamp));
      bconf = GetBunchConfigDeclared(useBeam,tstamp);
    }
    if (!bconf) {
      AliWarning(Form("Declared bunch configuration for beam%i at t=%.1f is not available, skip this record",useBeam,tstamp));
      return -1;
    }
    int nSlots = dcsVal->GetNEntries();     // count number of actual bunches (non-zeros)
    int nbunch = bconf->GetSize();
    double* dcsArr = dcsVal->GetDouble();
    //
    if (nbunch>nSlots) {
      AliWarning(Form("More N bunches than slots in %s at time %.1f",rec,tstamp));
      continue;
    }
    int dim = 0;
    if (!bconf->IsProcessed1()) {
      AliWarning(Form("Bunch conf. for beam%d has no marked interacting bunches, store all luminosity for all filled bunches",useBeam));
      dim = nbunch;
    }
    else { // count number of interacting bunches
      for (int i=nbunch;i--;) if ((*bconf)[i]<0) dim++;
    }
    //
    if (recErr) {
      arrE=GetDCSEntry(recErr,iFirstE,iLastE,fTMin,fTMax);
      dim += 1;
    }
    AliLHCDipValF* curValD = new AliLHCDipValF(dim,tstamp);
    int cnt = 0;
    for (int i=0;i<nbunch;i++) {
      int slot = (*bconf)[i];
      if (bconf->IsProcessed1() && slot>0) continue;
      //
      int ind = TMath::Abs(slot)/10;
      if (ind>nSlots) {
	AliError(Form("Bunch %d refers to wrong slot %d, set to -1",cnt,slot));
	(*curValD)[cnt] = -1;
      }
      else {
	double vcheck = dcsArr[ind];
	if (TMath::Abs(vcheck) > maxAbsVal) {
	  AliError(Form("ANOMALOUS VALUE %e for slot %d of %s: exceeds %e",vcheck, ind, rec, maxAbsVal));
	  vcheck = 0.;
	}
	(*curValD)[i] = vcheck;
      }
      cnt++;
    }
    //
    if (recErr) {
      double errVal = -1;
      while (iFirstE<=iLastE) {       // try to find corresponding error
	AliDCSArray *dcsValE = (AliDCSArray*) arrE->At(iFirstE);
	double tstamp1 = dcsValE->GetTimeStamp();
	int tdif = TimeDifference(tstamp,tstamp1);
	if (!tdif) { // error matches to value
	  errVal = dcsValE->GetDouble()[0];
	  if (TMath::Abs(errVal) > maxAbsVal) {
	    AliError(Form("ANOMALOUS VALUE %e for slot %d of %s: exceeds %e",errVal,0, rec, maxAbsVal));
	    errVal = 0.;
	  }	  
	  iFirstE++; 
	  break;
	}
	else if (tdif>0) iFirstE++; // error time lags behind, read the next one
	else break;                 // error time is ahead of value, no error associated
      }
      (*curValD)[dim-1] = errVal;   // error
      curValD->SetLastSpecial();    // lable the last entry as an error
    }
    //
    fData.Add(curValD);
    refs[kNStor]++;
  }
  if (fkFile2Process) {
    delete arr;
    delete arrE;
  }
  return refs[kNStor];
  //
}

//___________________________________________________________________
Int_t AliLHCData::ExtractInt(AliDCSArray* dcsArray,Int_t el) const
{
  // extract integer from the dcsArray
  int val = -1;
  //
  int sz = dcsArray->GetNEntries();
  if (sz<=el) return val;
  //
  if (dcsArray->GetType()==AliDCSArray::kInt)  val = dcsArray->GetInt(el);
  else if (dcsArray->GetType()==AliDCSArray::kString) {
    TObjString *stro = dcsArray->GetStringArray(el);
    if (stro) val = stro->GetString().Atoi();
    else AliError(Form("DCSArray TObjString for element %d is missing",el));
  }
  else if (dcsArray->GetType()==AliDCSArray::kUInt) val = dcsArray->GetUInt(el);
  else AliError(Form("Integer requested from DCSArray of type %d",dcsArray->GetType()));
  return val;
}

//___________________________________________________________________
Double_t AliLHCData::ExtractDouble(AliDCSArray* dcsArray,Int_t el) const
{
  // extract double from the dcsArray
  double val = 0;
  //
  int sz = dcsArray->GetNEntries();
  if (sz<=el) return val;
  //
  if      (dcsArray->GetType()==AliDCSArray::kDouble) val = dcsArray->GetDouble(el);
  else if (dcsArray->GetType()==AliDCSArray::kFloat)  val = dcsArray->GetFloat(el);
  else if (dcsArray->GetType()==AliDCSArray::kString) {
    TObjString *stro = dcsArray->GetStringArray(el);
    if (stro) val = stro->GetString().Atof();
    else AliError(Form("DCSArray has TObjString for element %d is missing",el));
  }
  else if (dcsArray->GetType()==AliDCSArray::kChar)   val = dcsArray->GetChar(el);
  else if (dcsArray->GetType()==AliDCSArray::kInt)    val = dcsArray->GetInt(el);
  else if (dcsArray->GetType()==AliDCSArray::kUInt)   val = dcsArray->GetUInt(el);
  else     AliError(Form("Double requested from DCSArray of type %d",dcsArray->GetType()));
  return val;
}

//___________________________________________________________________
TString& AliLHCData::ExtractString(AliDCSArray* dcsArray) const
{
  // extract string from the dcsArray
  static TString str;
  str = "";
  //
  int sz = dcsArray->GetNEntries();
  if (dcsArray->GetType()!=AliDCSArray::kString)  {
    AliError(Form("String requested from DCSArray of type %d",dcsArray->GetType()));
    return str;
  }
  //
  for (int i=0;i<sz;i++) {
    str += dcsArray->GetStringArray(i)->GetString();
    if (i<sz-1) str += " ";
  }
  return str;
}

//___________________________________________________________________
void AliLHCData::Print(const Option_t* opt) const
{
  // print full info
  TString opts = opt;
  opts.ToLower();
  Bool_t utcTime = opts.Contains("loc") ? kFALSE:kTRUE;
  //
  Bool_t includeMissing = opts.Contains("m");
  if (!includeMissing) printf("Missing records are skept, use Print(\"m\") to print missing record names\n");
  else                 printf("Missing records are printed, remove \"m\" from Print options to skip them\n");
  Bool_t full = kTRUE;
  if (!opts.Contains("f")) {
    printf("Use Print(\"f\") to print full info\n");
    printf("Printing short info:\n<RecordType>(number of records): <TimeStamp, value> for 1st record only\n");
    full = kFALSE;
  }
  TString sdtmn = AliLHCDipValI::TimeAsString(fTMin,utcTime);
  TString sdtmx = AliLHCDipValI::TimeAsString(fTMax,utcTime);
  printf("Fill#%6d Validity: %s - %s (%s)\n",fFillNumber,sdtmn.Data(),sdtmx.Data(),utcTime ? "UTC":"LOC");
  //
  printf("********** SETTINGS FROM RUN CONTROL **********\n");
  //
  if (fRCInjScheme[kNStor] || includeMissing) {
    printf("* %-38s","Injection Scheme");
    PrintAux(full,fRCInjScheme,opts);
  }
  //
  if (fRCBeta[kNStor] || includeMissing) {
    printf("* %-38s","Beta Star");
    PrintAux(full,fRCBeta,opts);
  }
  //
  if (fRCAngH[kNStor] || includeMissing) {
    printf("* %-38s","Horisontal Crossing Angle");
    PrintAux(full,fRCAngH,opts);
  }
  //
  if (fRCAngV[kNStor] || includeMissing) {
    printf("* %-38s","Vertical   Crossing Angle");
    PrintAux(full,fRCAngV,opts);
  }
  //
  for (int ib=0;ib<2;ib++) {
    if (fBunchConfDecl[ib][kNStor] || includeMissing) {
      printf("* Beam%d filling  [- interacts at IR2!]  ",ib+1);
      PrintAux(full,fBunchConfDecl[ib],opts);
    }
  }
  //
  printf("\n**********       MEASURED DATA       **********\n");
  //
  for (int ib=0;ib<2;ib++) {
    if (fBunchConfMeas[ib][kNStor] || includeMissing) {
      printf("* Beam%d filling  [- interacts at IR2!]  ",ib+1);
      PrintAux(full,fBunchConfMeas[ib],opts);
    }
  } 
  //
  for (int ib=0;ib<2;ib++) {
    if (fIntensTotal[ib][kNStor] || includeMissing) {
      printf("* Beam%d total intensity                 ",ib+1);
      PrintAux(full,fIntensTotal[ib],opts);
    }
  } 
  //
  for (int ib=0;ib<2;ib++) {
    if (fIntensTotalAv[ib][kNStor] || includeMissing) {
      printf("* Beam%d total intensity (bunch average) ",ib+1);
      PrintAux(full,fIntensTotalAv[ib],opts);
    }
  } 
  //
  for (int ib=0;ib<2;ib++) {
    if (fIntensPerBunch[ib][kNStor] || includeMissing) {
      printf("* Beam%d intensity per bunch             ",ib+1);
      PrintAux(full,fIntensPerBunch[ib],opts);
    }
  }
  //
  for (int ib=0;ib<2;ib++) {
    if (fBunchLengths[ib][kNStor] || includeMissing) {
      printf("* Beam%d bunch lengths                   ",ib+1);
      PrintAux(full,fBunchLengths[ib],opts);
    }
  } 
  //
  for (int ib=0;ib<2;ib++) {
    if (fEmittanceH[ib][kNStor] || includeMissing) {
      printf("* Beam%d Horisontal emittance            ",ib+1);
      PrintAux(full,fEmittanceH[ib],opts);
    }
  }
  //
  for (int ib=0;ib<2;ib++) {
    if (fEmittanceV[ib][kNStor] || includeMissing) {
      printf("* Beam%d Vertical emittance              ",ib+1);
      PrintAux(full,fEmittanceV[ib],opts);
    }
  }
  //
  for (int ib=0;ib<2;ib++) {
    if (fBeamSigmaH[ib][kNStor] || includeMissing) {
      printf("* Beam%d Horisontal sigma                ",ib+1);
      PrintAux(full,fBeamSigmaH[ib],opts);
    }
  }
  //
  for (int ib=0;ib<2;ib++) {
    if (fBeamSigmaV[ib][kNStor] || includeMissing) {
      printf("* Beam%d Vertical sigma                  ",ib+1);
      PrintAux(full,fBeamSigmaV[ib],opts);
    }
  }
  //
  for (int lr=0;lr<2;lr++) {
    if (fLuminTotal[lr][kNStor] || includeMissing) {
      printf("* Total luminosity from BRANB_4%c2       ",lr ? 'R':'L');
      PrintAux(full,fLuminTotal[lr],opts);
    }
  } 
  //
  for (int lr=0;lr<2;lr++) {
    if (fLuminAcqMode[lr][kNStor] || includeMissing) {
      printf("* Luminosity acq.mode, BRANB_4%c2        ",lr ? 'R':'L');
      PrintAux(full,fLuminAcqMode[lr],opts+"bit");
    }
  } 
  //
  for (int lr=0;lr<2;lr++) {
    if (fLuminPerBC[lr][kNStor] || includeMissing) {
      printf("* Luminosity per BC from BRANB_4%c2      ",lr ? 'R':'L');
      PrintAux(full,fLuminPerBC[lr],opts);
    }
  }
  //
  for (int lr=0;lr<2;lr++) {
    if (fCrossAngle[lr][kNStor] || includeMissing) {
      printf("* Crossing angle, side %c                ",lr ? 'R':'L');
      PrintAux(full,fCrossAngle[lr],opts);
    }
  }
  //
  for (int coll=0;coll<kNCollimators;coll++)
    for (int jaw=0;jaw<kNJaws;jaw++) {
      if (fCollimators[coll][jaw][kNStor] || includeMissing) {
	printf("* Collimator %10s:%16s",fgkDCSColNames[coll],fgkDCSColJaws[jaw]);
	PrintAux(full,fCollimators[coll][jaw],opts);
      }
    }
  //
  printf("\n**********    ALICE MEASURED DATA    **********\n");
  //
  if (fLumiAlice[kNStor] || includeMissing) {
    printf("* %-38s","Alice luminosity total");
    PrintAux(full,fLumiAlice,opts);
  }
  //
  if (fLumiAliceStB[kNStor] || includeMissing) {
    printf("* %-38s","Alice luminosity delivered stable beam");
    PrintAux(full,fLumiAliceStB,opts);
  }
  //
  if (fLumiAliceBbB[kNStor] || includeMissing) {
    printf("* %-38s","Alice luminosity B-by-B, stable beam");
    PrintAux(full,fLumiAliceBbB,opts);
  }
  //
  for (int ib=0;ib<3;ib++) {
    if (fBckgAlice[ib][kNStor] || includeMissing) {
      printf("* Alice background%d                     ",ib+1);
      PrintAux(full,fBckgAlice[ib],opts);
    }
  }
  //
  if (fBPTXdTB1B2[kNStor] || includeMissing) {
    printf("* %-38s","BPTX DeltaT Beam1 Beam2");
    PrintAux(full,fBPTXdTB1B2,opts);
  }
  //
  if (fBPTXdTRMSB1B2[kNStor] || includeMissing) {
    printf("* %-38s","BPTX DeltaT RMS Beam1 Beam2");
    PrintAux(full,fBPTXdTRMSB1B2,opts);
  }
  //
  for (int ib=0;ib<2;ib++) {
    if (fBPTXPhase[ib][kNStor] || includeMissing) {
      printf("* BPTX Phase Beam%d                      ",ib+1);
      PrintAux(full,fBPTXPhase[ib],opts);
    }
  }
  //
  for (int ib=0;ib<2;ib++) {
    if (fBPTXPhaseRMS[ib][kNStor] || includeMissing) {
      printf("* BPTX Phase RMS Beam%d                  ",ib+1);
      PrintAux(full,fBPTXPhaseRMS[ib],opts);
    }
  }
  //
  for (int ib=0;ib<2;ib++) {
    if (fBPTXPhaseShift[ib][kNStor] || includeMissing) {
      printf("* BPTX Phase Shift Beam%d                ",ib+1);
      PrintAux(full,fBPTXPhaseShift[ib],opts);
    }
  }
  //
}

//___________________________________________________________________
void AliLHCData::PrintAux(Bool_t full, const Int_t refs[2], const Option_t *opt) const
{
  // aux method to print the reocrds of the same type
  int nrec = refs[kNStor];
  if (nrec<1) {
    printf(": N/A\n"); 
    return;
  }
  printf(": (%3d):\t",nrec); // number of records
  if (!full) nrec = 1;
  int sz = ((AliLHCDipValI*)fData[refs[kStart]])->GetSizeTotal(); // dimension of the record
  Bool_t isStr = ((AliLHCDipValI*)fData[refs[kStart]])->IsTypeC();
  if ((!isStr && sz>2) || nrec>1) printf("\n"); // long record, open new line
  for (int i=0;i<nrec;i++) fData[refs[kStart]+i]->Print(opt);
  //
}

//___________________________________________________________________
void AliLHCData::Clear(const Option_t *)
{
  // clear all info
  fData.Delete();
  fFillNumber = 0;
  fTMin = 0;
  fTMax = 1e10;
  fkFile2Process = 0;
  fkMap2Process  = 0;
  //
  for (int i=2;i--;) {
    fRCInjScheme[i] = 0;
    fRCBeta[i] = 0;
    fRCAngH[i] = 0;
    fRCAngV[i] = 0;
    fLumiAlice[i] = 0;
    fLumiAliceStB[i] = 0;
    fLumiAliceBbB[i] = 0;
    for (int ibg=kNBGs;ibg--;) fBckgAlice[ibg][i] = 0;
    fBPTXdTB1B2[i] = 0;
    fBPTXdTRMSB1B2[i] = 0;
    //
    for (int icl=kNCollimators;icl--;) for (int jaw=kNJaws;jaw--;) fCollimators[icl][jaw][i]=0;
    //
    for (int j=2;j--;) {
      fBPTXPhase[j][i] = 0;
      fBPTXPhaseRMS[j][i] = 0;
      fBPTXPhaseShift[j][i] = 0;
      //
      fBunchConfDecl[j][i] = 0;
      fBunchConfMeas[j][i] = 0;
      fBunchLengths[j][i] = 0;
      fIntensTotal[j][i] = 0;
      fIntensTotalAv[j][i] = 0;
      fIntensPerBunch[j][i] = 0;      
      fCrossAngle[j][i] = 0;
      fEmittanceH[j][i] = 0;
      fEmittanceV[j][i] = 0;
      fBeamSigmaH[j][i] = 0;
      fBeamSigmaV[j][i] = 0;
      fLuminTotal[j][i] = 0;
      fLuminPerBC[j][i] = 0;
      fLuminAcqMode[j][i] = 0;
    }
  }
}

//___________________________________________________________________
Int_t AliLHCData::GetNInteractingBunchesMeasured(int i) const
{
  // get number of interacting bunches at IR2
  AliLHCDipValI* rec = GetBunchConfigMeasured(kBeam1,i);
  if (!rec) {AliInfo(Form("No record %d found",i)); return -1;}
  if (!rec->IsProcessed1()) { AliInfo("Interacting bunches were not marked"); return -1;}
  int n = 0;
  for (int j=rec->GetSize();j--;) if ( (*rec)[j]<0 ) n++;
  return n;
}

//___________________________________________________________________
Int_t AliLHCData::GetNInteractingBunchesDeclared(int i) const
{
  // get number of interacting bunches at IR2
  AliLHCDipValI* rec = GetBunchConfigMeasured(kBeam1,i);
  if (!rec) {AliInfo(Form("No record %d found",i)); return -1;}
  if (!rec->IsProcessed1()) { AliInfo("Interacting bunches were not marked"); return -1; }
  int n = 0;
  for (int j=rec->GetSize();j--;) if ( (*rec)[j]<0 ) n++;
  return n;
}

//___________________________________________________________________
Int_t AliLHCData::IsPilotPresent(int i) const
{
  // check in the filling scheme is the pilot bunch is present
  AliLHCDipValC* rec = GetInjectionScheme();
  if (!rec) {AliInfo(Form("No record %d found",i)); return -1;}
  TString scheme = rec->GetValues();
  return scheme.Contains("wp",TString::kIgnoreCase);
}

//___________________________________________________________________
void AliLHCData::FlagInteractingBunches(const Int_t beam1[2],const Int_t beam2[2])
{
  // assign - sign to interacting bunches
  //
  for (int ib1=0;ib1<beam1[kNStor];ib1++) {
    AliLHCDipValI *bm1 = (AliLHCDipValI*)fData[ beam1[kStart] + ib1];
    if (!bm1) continue;
    AliLHCDipValI *bm2 = (AliLHCDipValI*)FindRecValidFor(beam2[kStart],beam2[kNStor], bm1->GetTimeStamp());
    if (!bm2) continue;
    //
    int nb1 = bm1->GetSize();
    int nb2 = bm2->GetSize();
    int i1,i2;
    for (i1=0;i1<nb1;i1++) {
      int bunch2=-1, bunch1 = TMath::Abs((*bm1)[i1]);
      int slot2 =-1, slot1  = GetBCId(bunch1,0);
      for (i2=0;i2<nb2;i2++) {
	bunch2 = TMath::Abs((*bm2)[i2]);
	slot2 = GetBCId(bunch2,1);
	if (slot1==slot2) break;
      }
      if (slot1!=slot2) continue;
      (*bm1)[i1] = -bunch1;
      (*bm2)[i2] = -bunch2;
      bm1->SetProcessed1();
      bm2->SetProcessed1();
    }
  }
}

//___________________________________________________________________
Int_t AliLHCData::GetMeanIntensity(int beamID, Double_t &colliding, Double_t &noncolliding, const TObjArray* bcmasks) const
{
  // get average intensity for all, colliding and non-colliding bunches
  // on success returns number of intensity records used (1 per ~10 min)
  // If triggered BC masks are provided, calculation is done for Triggered BC only
  colliding = noncolliding = -1.;
  if (beamID<0||beamID>1) {
    AliError(Form("BeamID must be either 0 or 1, %d requested",beamID));
    return -10;
  }
  //
  AliTriggerBCMask *bcMaskBoth=0,*bcMaskSingle=0;
  int nbcm = 0;
  if (bcmasks && (nbcm=bcmasks->GetEntries())) {
    if (nbcm>1) bcMaskBoth = (AliTriggerBCMask*)bcmasks->At(1);
    if      (nbcm>0 && beamID==kBeam1) bcMaskSingle = (AliTriggerBCMask*)bcmasks->At(0);
    else if (nbcm>2 && beamID==kBeam2) bcMaskSingle = (AliTriggerBCMask*)bcmasks->At(2);
    //
    if (!bcMaskSingle) AliError(Form("Only triggered BSs are requested but %c mask is not provided",beamID ? 'C':'A'));
    if (!bcMaskBoth)   AliError("Only triggered BSs are requested but B mask is not provided");
  }
  else {
    AliWarning("No BC masks are provided");
  }
  //
  int nrec = GetNIntensityPerBunch(beamID);
  if (nrec<1) return -1;
  AliLHCDipValI *conf = GetBunchConfigMeasured(beamID);
  if (!conf) conf = GetBunchConfigDeclared(beamID);
  if (!conf) return -2;
  int nb = conf->GetSize();
  //
  for (int irec=0;irec<nrec;irec++) {
    //
    AliLHCDipValD* rIntD = 0;
    AliLHCDipValF* rIntF = GetIntensityPerBunch(beamID,irec);
    // for BWD compatibility of some periods
    if (rIntF->IsA() == AliLHCDipValD::Class()) {rIntD=(AliLHCDipValD*)rIntF; rIntF=0;}
    if (!rIntF && !rIntD) {
      AliError(Form("Failed to get GetIntensityPerBunch(%d,%d)",beamID,irec));
      continue;
    }
    for (int ib=0;ib<nb;ib++) {
      double val = 0;
      if (rIntF) val = rIntF->GetValue(ib);
      else if (rIntD) val = rIntD->GetValue(ib);
      if (val<0) continue;
      int bID = conf->GetValue(ib);
      // check if this is a triggered bunch
      int bcID = GetBCId(bID, beamID);
      if (bID<0) { // interacting
	if (bcMaskBoth && bcMaskBoth->GetMask(bcID)) continue; // masked
	colliding += val;
      }
      else {
	if (bcMaskSingle && bcMaskSingle->GetMask(bcID)) continue; // masked	
	noncolliding += val;
      }
    }
  }
  colliding /= nrec;
  noncolliding /= nrec;
  return nrec;
}

/***************************************************************************************
// this is for the obsolete retrofitting

//___________________________________________________________________
void AliLHCData::FillLumiAliceOFL(Int_t nrec, Int_t* timeArr, Double_t* valArr)
{
  // Create a record for lumi integrated from the beginning of fill
  // We need dedicated method since this info comes from Alice (not LHCDip) as instantaneous values
  // and is retrofitted for past runs
  fLumiAlice[kStart] = fData.GetEntriesFast();
  fLumiAlice[kNStor] = 0;
  if (nrec<2 || !timeArr || !valArr) return;
  double tprv,period,currTime;
  if ((currTime=double(UInt_t(timeArr[0])))>fTMin) {
    AliError(Form("TimeStamp of 1st record: %s > TimeStamp of SOR: %s, STOP",
		  AliLHCDipValI::TimeAsString(currTime),AliLHCDipValI::TimeAsString(fTMin)));
    return;
  }
  //
  if ((tprv=double(UInt_t(timeArr[nrec-1])))<fTMax) {
    AliWarning(Form("TimeStamp of last (%d) record: %s < TimeStamp of EOR: %s, Data will be truncated",nrec-1,
		    AliLHCDipValI::TimeAsString(tprv),AliLHCDipValI::TimeAsString(fTMax)));
  }
  //
  // init the average time step
  period = (tprv - currTime)/(nrec-1);
  double lumiInt  = 0;
  //
  for (int i=0;i<nrec;i++) {
    tprv = currTime;
    currTime = double(UInt_t(timeArr[i]));
    if (i>0) period = currTime - tprv;
    if (currTime-period>fTMax) continue;    
    lumiInt += valArr[i]*period;    
    //    printf("%d %.2f V:%f Int:%f\n",i,period,valArr[i],lumiInt);
    if (currTime+period<fTMin) continue;
    AliLHCDipValF* curValF = new AliLHCDipValF(1,currTime);
    (*curValF)[0] = lumiInt;
    fData.Add(curValF);
    fLumiAlice[kNStor]++;
  }
  //
  printf("Stored %d Alice Integrated luminosity records out of %d provided\n",fLumiAlice[kNStor],nrec);
}

//___________________________________________________________________
void AliLHCData::FillBckgAliceOFL(Int_t nrec, Int_t* timeArr, Double_t* valArr)
{
  // Create a record for lumi integrated from the beginning of fill
  // We need dedicated method since this info comes from Alice (not LHCDip) as instantaneous values
  // and is retrofitted for past runs
  fBckgAlice[kStart] = fData.GetEntriesFast();
  fBckgAlice[kNStor] = 0;
  if (nrec<2 || !timeArr || !valArr) return;
  double tprv,period,currTime;
  if ((currTime=double(UInt_t(timeArr[0])))>fTMin) {
    AliError(Form("TimeStamp of 1st record: %s > TimeStamp of SOR: %s, STOP",
		  AliLHCDipValI::TimeAsString(currTime),AliLHCDipValI::TimeAsString(fTMin)));
    return;
  }
  //
  if ((tprv=double(UInt_t(timeArr[nrec-1])))<fTMax) {
    AliWarning(Form("TimeStamp of last (%d) record: %s < TimeStamp of EOR: %s, Data will be truncated",nrec-1,
		    AliLHCDipValI::TimeAsString(tprv),AliLHCDipValI::TimeAsString(fTMax)));
  }
  //
  // init the average time step
  period = (tprv - currTime)/(nrec-1);
  double bckgInt  = 0;
  //
  for (int i=0;i<nrec;i++) {
    tprv = currTime;
    currTime = double(UInt_t(timeArr[i]));
    if (i>0) period = currTime - tprv;
    if (currTime-period>fTMax) continue;    
    bckgInt += valArr[i]*period;    
    if (currTime+period<fTMin) continue;
    AliLHCDipValF* curValF = new AliLHCDipValF(1,currTime);
    (*curValF)[0] = bckgInt;
    fData.Add(curValF);
    fBckgAlice[kNStor]++;
  }
  //
  printf("Stored %d Alice Integrated Background records out of %d provided\n",fBckgAlice[kNStor],nrec);
}

***************************************************************************************/

/*
//_____________________________________________________________________________
Float_t AliLHCData::GetLumiInstAlice(Double_t tStamp) const 
{
  // get closest in time value on inst luminosity
  int idx = FindEntryValidFor(fLumiAlice[kStart],fLumiAlice[kNStor],tStamp);
  if (idx<0) return -1;
  AliLHCDipValF *rec=GetLumiAlice(idx),*rec1=GetLumiAlice(idx>0 ? idx-1:idx+1);
  if (!rec || !rec1) return -1;
  double dt = rec->GetTimeStamp() - rec1->GetTimeStamp();
  return TMath::Abs(dt)>1e-6 ? (rec->GetValue()-rec1->GetValue())/dt : -1;
}

//_____________________________________________________________________________
Float_t AliLHCData::GetBckgInstAlice(Double_t tStamp) const 
{
  // get closest in time value on inst luminosity
  int idx = FindEntryValidFor(fBckgAlice[kStart],fBckgAlice[kNStor],tStamp);
  if (idx<0) return -1;
  AliLHCDipValF *rec=GetBckgAliceRecord(idx),*rec1=GetBckgAliceRecord(idx>0 ? idx-1:idx+1);
  if (!rec || !rec1) return -1;
  double dt = rec->GetTimeStamp() - rec1->GetTimeStamp();
  return TMath::Abs(dt)>1e-6 ? (rec->GetValue()-rec1->GetValue())/dt : -1;
}
*/

//_____________________________________________________________________________
TGraph* AliLHCData::ExportGraph(Int_t *coord, Int_t elID) const
{
  // export time/values to graph:
  // coord: int[2] array with 1st entry and number of entries stored, obtained via GetOffs... method 
  // elID - element of the AliLHCDipValT array to extract
  if (!coord || coord[1]<1) return 0;
  TGraph* gr = new TGraph(coord[1]);
  for (int i=0;i<coord[1];i++) {
    TObject* obj = fData.At(coord[0]+i);
    if (!obj) {
      AliError(Form("Entry %d does not exist",i));
      continue;
    }
    if (obj->IsA()==AliLHCDipValD::Class()) {
      AliLHCDipValD* objD =  (AliLHCDipValD*)obj;
      gr->SetPoint(i,objD->GetTimeStamp(),objD->GetValue(elID));
    }
    else if (obj->IsA()==AliLHCDipValF::Class()) {
      AliLHCDipValF* objF =  (AliLHCDipValF*)obj;
      gr->SetPoint(i,objF->GetTimeStamp(),objF->GetValue(elID));
    }
    else if (obj->IsA()==AliLHCDipValI::Class()) {
      AliLHCDipValI* objI =  (AliLHCDipValI*)obj;
      gr->SetPoint(i,objI->GetTimeStamp(),objI->GetValue(elID));
    }
    else if (obj->IsA()==AliLHCDipValC::Class()) {
      AliLHCDipValC* objC =  (AliLHCDipValC*)obj;
      gr->SetPoint(i,objC->GetTimeStamp(),objC->GetValue(elID));
    }
    else {
      AliError(Form("Graph cannot be exported for records of type %s",obj->IsA()->GetName()));
    }
  }
  return gr;
}
 AliLHCData.cxx:1
 AliLHCData.cxx:2
 AliLHCData.cxx:3
 AliLHCData.cxx:4
 AliLHCData.cxx:5
 AliLHCData.cxx:6
 AliLHCData.cxx:7
 AliLHCData.cxx:8
 AliLHCData.cxx:9
 AliLHCData.cxx:10
 AliLHCData.cxx:11
 AliLHCData.cxx:12
 AliLHCData.cxx:13
 AliLHCData.cxx:14
 AliLHCData.cxx:15
 AliLHCData.cxx:16
 AliLHCData.cxx:17
 AliLHCData.cxx:18
 AliLHCData.cxx:19
 AliLHCData.cxx:20
 AliLHCData.cxx:21
 AliLHCData.cxx:22
 AliLHCData.cxx:23
 AliLHCData.cxx:24
 AliLHCData.cxx:25
 AliLHCData.cxx:26
 AliLHCData.cxx:27
 AliLHCData.cxx:28
 AliLHCData.cxx:29
 AliLHCData.cxx:30
 AliLHCData.cxx:31
 AliLHCData.cxx:32
 AliLHCData.cxx:33
 AliLHCData.cxx:34
 AliLHCData.cxx:35
 AliLHCData.cxx:36
 AliLHCData.cxx:37
 AliLHCData.cxx:38
 AliLHCData.cxx:39
 AliLHCData.cxx:40
 AliLHCData.cxx:41
 AliLHCData.cxx:42
 AliLHCData.cxx:43
 AliLHCData.cxx:44
 AliLHCData.cxx:45
 AliLHCData.cxx:46
 AliLHCData.cxx:47
 AliLHCData.cxx:48
 AliLHCData.cxx:49
 AliLHCData.cxx:50
 AliLHCData.cxx:51
 AliLHCData.cxx:52
 AliLHCData.cxx:53
 AliLHCData.cxx:54
 AliLHCData.cxx:55
 AliLHCData.cxx:56
 AliLHCData.cxx:57
 AliLHCData.cxx:58
 AliLHCData.cxx:59
 AliLHCData.cxx:60
 AliLHCData.cxx:61
 AliLHCData.cxx:62
 AliLHCData.cxx:63
 AliLHCData.cxx:64
 AliLHCData.cxx:65
 AliLHCData.cxx:66
 AliLHCData.cxx:67
 AliLHCData.cxx:68
 AliLHCData.cxx:69
 AliLHCData.cxx:70
 AliLHCData.cxx:71
 AliLHCData.cxx:72
 AliLHCData.cxx:73
 AliLHCData.cxx:74
 AliLHCData.cxx:75
 AliLHCData.cxx:76
 AliLHCData.cxx:77
 AliLHCData.cxx:78
 AliLHCData.cxx:79
 AliLHCData.cxx:80
 AliLHCData.cxx:81
 AliLHCData.cxx:82
 AliLHCData.cxx:83
 AliLHCData.cxx:84
 AliLHCData.cxx:85
 AliLHCData.cxx:86
 AliLHCData.cxx:87
 AliLHCData.cxx:88
 AliLHCData.cxx:89
 AliLHCData.cxx:90
 AliLHCData.cxx:91
 AliLHCData.cxx:92
 AliLHCData.cxx:93
 AliLHCData.cxx:94
 AliLHCData.cxx:95
 AliLHCData.cxx:96
 AliLHCData.cxx:97
 AliLHCData.cxx:98
 AliLHCData.cxx:99
 AliLHCData.cxx:100
 AliLHCData.cxx:101
 AliLHCData.cxx:102
 AliLHCData.cxx:103
 AliLHCData.cxx:104
 AliLHCData.cxx:105
 AliLHCData.cxx:106
 AliLHCData.cxx:107
 AliLHCData.cxx:108
 AliLHCData.cxx:109
 AliLHCData.cxx:110
 AliLHCData.cxx:111
 AliLHCData.cxx:112
 AliLHCData.cxx:113
 AliLHCData.cxx:114
 AliLHCData.cxx:115
 AliLHCData.cxx:116
 AliLHCData.cxx:117
 AliLHCData.cxx:118
 AliLHCData.cxx:119
 AliLHCData.cxx:120
 AliLHCData.cxx:121
 AliLHCData.cxx:122
 AliLHCData.cxx:123
 AliLHCData.cxx:124
 AliLHCData.cxx:125
 AliLHCData.cxx:126
 AliLHCData.cxx:127
 AliLHCData.cxx:128
 AliLHCData.cxx:129
 AliLHCData.cxx:130
 AliLHCData.cxx:131
 AliLHCData.cxx:132
 AliLHCData.cxx:133
 AliLHCData.cxx:134
 AliLHCData.cxx:135
 AliLHCData.cxx:136
 AliLHCData.cxx:137
 AliLHCData.cxx:138
 AliLHCData.cxx:139
 AliLHCData.cxx:140
 AliLHCData.cxx:141
 AliLHCData.cxx:142
 AliLHCData.cxx:143
 AliLHCData.cxx:144
 AliLHCData.cxx:145
 AliLHCData.cxx:146
 AliLHCData.cxx:147
 AliLHCData.cxx:148
 AliLHCData.cxx:149
 AliLHCData.cxx:150
 AliLHCData.cxx:151
 AliLHCData.cxx:152
 AliLHCData.cxx:153
 AliLHCData.cxx:154
 AliLHCData.cxx:155
 AliLHCData.cxx:156
 AliLHCData.cxx:157
 AliLHCData.cxx:158
 AliLHCData.cxx:159
 AliLHCData.cxx:160
 AliLHCData.cxx:161
 AliLHCData.cxx:162
 AliLHCData.cxx:163
 AliLHCData.cxx:164
 AliLHCData.cxx:165
 AliLHCData.cxx:166
 AliLHCData.cxx:167
 AliLHCData.cxx:168
 AliLHCData.cxx:169
 AliLHCData.cxx:170
 AliLHCData.cxx:171
 AliLHCData.cxx:172
 AliLHCData.cxx:173
 AliLHCData.cxx:174
 AliLHCData.cxx:175
 AliLHCData.cxx:176
 AliLHCData.cxx:177
 AliLHCData.cxx:178
 AliLHCData.cxx:179
 AliLHCData.cxx:180
 AliLHCData.cxx:181
 AliLHCData.cxx:182
 AliLHCData.cxx:183
 AliLHCData.cxx:184
 AliLHCData.cxx:185
 AliLHCData.cxx:186
 AliLHCData.cxx:187
 AliLHCData.cxx:188
 AliLHCData.cxx:189
 AliLHCData.cxx:190
 AliLHCData.cxx:191
 AliLHCData.cxx:192
 AliLHCData.cxx:193
 AliLHCData.cxx:194
 AliLHCData.cxx:195
 AliLHCData.cxx:196
 AliLHCData.cxx:197
 AliLHCData.cxx:198
 AliLHCData.cxx:199
 AliLHCData.cxx:200
 AliLHCData.cxx:201
 AliLHCData.cxx:202
 AliLHCData.cxx:203
 AliLHCData.cxx:204
 AliLHCData.cxx:205
 AliLHCData.cxx:206
 AliLHCData.cxx:207
 AliLHCData.cxx:208
 AliLHCData.cxx:209
 AliLHCData.cxx:210
 AliLHCData.cxx:211
 AliLHCData.cxx:212
 AliLHCData.cxx:213
 AliLHCData.cxx:214
 AliLHCData.cxx:215
 AliLHCData.cxx:216
 AliLHCData.cxx:217
 AliLHCData.cxx:218
 AliLHCData.cxx:219
 AliLHCData.cxx:220
 AliLHCData.cxx:221
 AliLHCData.cxx:222
 AliLHCData.cxx:223
 AliLHCData.cxx:224
 AliLHCData.cxx:225
 AliLHCData.cxx:226
 AliLHCData.cxx:227
 AliLHCData.cxx:228
 AliLHCData.cxx:229
 AliLHCData.cxx:230
 AliLHCData.cxx:231
 AliLHCData.cxx:232
 AliLHCData.cxx:233
 AliLHCData.cxx:234
 AliLHCData.cxx:235
 AliLHCData.cxx:236
 AliLHCData.cxx:237
 AliLHCData.cxx:238
 AliLHCData.cxx:239
 AliLHCData.cxx:240
 AliLHCData.cxx:241
 AliLHCData.cxx:242
 AliLHCData.cxx:243
 AliLHCData.cxx:244
 AliLHCData.cxx:245
 AliLHCData.cxx:246
 AliLHCData.cxx:247
 AliLHCData.cxx:248
 AliLHCData.cxx:249
 AliLHCData.cxx:250
 AliLHCData.cxx:251
 AliLHCData.cxx:252
 AliLHCData.cxx:253
 AliLHCData.cxx:254
 AliLHCData.cxx:255
 AliLHCData.cxx:256
 AliLHCData.cxx:257
 AliLHCData.cxx:258
 AliLHCData.cxx:259
 AliLHCData.cxx:260
 AliLHCData.cxx:261
 AliLHCData.cxx:262
 AliLHCData.cxx:263
 AliLHCData.cxx:264
 AliLHCData.cxx:265
 AliLHCData.cxx:266
 AliLHCData.cxx:267
 AliLHCData.cxx:268
 AliLHCData.cxx:269
 AliLHCData.cxx:270
 AliLHCData.cxx:271
 AliLHCData.cxx:272
 AliLHCData.cxx:273
 AliLHCData.cxx:274
 AliLHCData.cxx:275
 AliLHCData.cxx:276
 AliLHCData.cxx:277
 AliLHCData.cxx:278
 AliLHCData.cxx:279
 AliLHCData.cxx:280
 AliLHCData.cxx:281
 AliLHCData.cxx:282
 AliLHCData.cxx:283
 AliLHCData.cxx:284
 AliLHCData.cxx:285
 AliLHCData.cxx:286
 AliLHCData.cxx:287
 AliLHCData.cxx:288
 AliLHCData.cxx:289
 AliLHCData.cxx:290
 AliLHCData.cxx:291
 AliLHCData.cxx:292
 AliLHCData.cxx:293
 AliLHCData.cxx:294
 AliLHCData.cxx:295
 AliLHCData.cxx:296
 AliLHCData.cxx:297
 AliLHCData.cxx:298
 AliLHCData.cxx:299
 AliLHCData.cxx:300
 AliLHCData.cxx:301
 AliLHCData.cxx:302
 AliLHCData.cxx:303
 AliLHCData.cxx:304
 AliLHCData.cxx:305
 AliLHCData.cxx:306
 AliLHCData.cxx:307
 AliLHCData.cxx:308
 AliLHCData.cxx:309
 AliLHCData.cxx:310
 AliLHCData.cxx:311
 AliLHCData.cxx:312
 AliLHCData.cxx:313
 AliLHCData.cxx:314
 AliLHCData.cxx:315
 AliLHCData.cxx:316
 AliLHCData.cxx:317
 AliLHCData.cxx:318
 AliLHCData.cxx:319
 AliLHCData.cxx:320
 AliLHCData.cxx:321
 AliLHCData.cxx:322
 AliLHCData.cxx:323
 AliLHCData.cxx:324
 AliLHCData.cxx:325
 AliLHCData.cxx:326
 AliLHCData.cxx:327
 AliLHCData.cxx:328
 AliLHCData.cxx:329
 AliLHCData.cxx:330
 AliLHCData.cxx:331
 AliLHCData.cxx:332
 AliLHCData.cxx:333
 AliLHCData.cxx:334
 AliLHCData.cxx:335
 AliLHCData.cxx:336
 AliLHCData.cxx:337
 AliLHCData.cxx:338
 AliLHCData.cxx:339
 AliLHCData.cxx:340
 AliLHCData.cxx:341
 AliLHCData.cxx:342
 AliLHCData.cxx:343
 AliLHCData.cxx:344
 AliLHCData.cxx:345
 AliLHCData.cxx:346
 AliLHCData.cxx:347
 AliLHCData.cxx:348
 AliLHCData.cxx:349
 AliLHCData.cxx:350
 AliLHCData.cxx:351
 AliLHCData.cxx:352
 AliLHCData.cxx:353
 AliLHCData.cxx:354
 AliLHCData.cxx:355
 AliLHCData.cxx:356
 AliLHCData.cxx:357
 AliLHCData.cxx:358
 AliLHCData.cxx:359
 AliLHCData.cxx:360
 AliLHCData.cxx:361
 AliLHCData.cxx:362
 AliLHCData.cxx:363
 AliLHCData.cxx:364
 AliLHCData.cxx:365
 AliLHCData.cxx:366
 AliLHCData.cxx:367
 AliLHCData.cxx:368
 AliLHCData.cxx:369
 AliLHCData.cxx:370
 AliLHCData.cxx:371
 AliLHCData.cxx:372
 AliLHCData.cxx:373
 AliLHCData.cxx:374
 AliLHCData.cxx:375
 AliLHCData.cxx:376
 AliLHCData.cxx:377
 AliLHCData.cxx:378
 AliLHCData.cxx:379
 AliLHCData.cxx:380
 AliLHCData.cxx:381
 AliLHCData.cxx:382
 AliLHCData.cxx:383
 AliLHCData.cxx:384
 AliLHCData.cxx:385
 AliLHCData.cxx:386
 AliLHCData.cxx:387
 AliLHCData.cxx:388
 AliLHCData.cxx:389
 AliLHCData.cxx:390
 AliLHCData.cxx:391
 AliLHCData.cxx:392
 AliLHCData.cxx:393
 AliLHCData.cxx:394
 AliLHCData.cxx:395
 AliLHCData.cxx:396
 AliLHCData.cxx:397
 AliLHCData.cxx:398
 AliLHCData.cxx:399
 AliLHCData.cxx:400
 AliLHCData.cxx:401
 AliLHCData.cxx:402
 AliLHCData.cxx:403
 AliLHCData.cxx:404
 AliLHCData.cxx:405
 AliLHCData.cxx:406
 AliLHCData.cxx:407
 AliLHCData.cxx:408
 AliLHCData.cxx:409
 AliLHCData.cxx:410
 AliLHCData.cxx:411
 AliLHCData.cxx:412
 AliLHCData.cxx:413
 AliLHCData.cxx:414
 AliLHCData.cxx:415
 AliLHCData.cxx:416
 AliLHCData.cxx:417
 AliLHCData.cxx:418
 AliLHCData.cxx:419
 AliLHCData.cxx:420
 AliLHCData.cxx:421
 AliLHCData.cxx:422
 AliLHCData.cxx:423
 AliLHCData.cxx:424
 AliLHCData.cxx:425
 AliLHCData.cxx:426
 AliLHCData.cxx:427
 AliLHCData.cxx:428
 AliLHCData.cxx:429
 AliLHCData.cxx:430
 AliLHCData.cxx:431
 AliLHCData.cxx:432
 AliLHCData.cxx:433
 AliLHCData.cxx:434
 AliLHCData.cxx:435
 AliLHCData.cxx:436
 AliLHCData.cxx:437
 AliLHCData.cxx:438
 AliLHCData.cxx:439
 AliLHCData.cxx:440
 AliLHCData.cxx:441
 AliLHCData.cxx:442
 AliLHCData.cxx:443
 AliLHCData.cxx:444
 AliLHCData.cxx:445
 AliLHCData.cxx:446
 AliLHCData.cxx:447
 AliLHCData.cxx:448
 AliLHCData.cxx:449
 AliLHCData.cxx:450
 AliLHCData.cxx:451
 AliLHCData.cxx:452
 AliLHCData.cxx:453
 AliLHCData.cxx:454
 AliLHCData.cxx:455
 AliLHCData.cxx:456
 AliLHCData.cxx:457
 AliLHCData.cxx:458
 AliLHCData.cxx:459
 AliLHCData.cxx:460
 AliLHCData.cxx:461
 AliLHCData.cxx:462
 AliLHCData.cxx:463
 AliLHCData.cxx:464
 AliLHCData.cxx:465
 AliLHCData.cxx:466
 AliLHCData.cxx:467
 AliLHCData.cxx:468
 AliLHCData.cxx:469
 AliLHCData.cxx:470
 AliLHCData.cxx:471
 AliLHCData.cxx:472
 AliLHCData.cxx:473
 AliLHCData.cxx:474
 AliLHCData.cxx:475
 AliLHCData.cxx:476
 AliLHCData.cxx:477
 AliLHCData.cxx:478
 AliLHCData.cxx:479
 AliLHCData.cxx:480
 AliLHCData.cxx:481
 AliLHCData.cxx:482
 AliLHCData.cxx:483
 AliLHCData.cxx:484
 AliLHCData.cxx:485
 AliLHCData.cxx:486
 AliLHCData.cxx:487
 AliLHCData.cxx:488
 AliLHCData.cxx:489
 AliLHCData.cxx:490
 AliLHCData.cxx:491
 AliLHCData.cxx:492
 AliLHCData.cxx:493
 AliLHCData.cxx:494
 AliLHCData.cxx:495
 AliLHCData.cxx:496
 AliLHCData.cxx:497
 AliLHCData.cxx:498
 AliLHCData.cxx:499
 AliLHCData.cxx:500
 AliLHCData.cxx:501
 AliLHCData.cxx:502
 AliLHCData.cxx:503
 AliLHCData.cxx:504
 AliLHCData.cxx:505
 AliLHCData.cxx:506
 AliLHCData.cxx:507
 AliLHCData.cxx:508
 AliLHCData.cxx:509
 AliLHCData.cxx:510
 AliLHCData.cxx:511
 AliLHCData.cxx:512
 AliLHCData.cxx:513
 AliLHCData.cxx:514
 AliLHCData.cxx:515
 AliLHCData.cxx:516
 AliLHCData.cxx:517
 AliLHCData.cxx:518
 AliLHCData.cxx:519
 AliLHCData.cxx:520
 AliLHCData.cxx:521
 AliLHCData.cxx:522
 AliLHCData.cxx:523
 AliLHCData.cxx:524
 AliLHCData.cxx:525
 AliLHCData.cxx:526
 AliLHCData.cxx:527
 AliLHCData.cxx:528
 AliLHCData.cxx:529
 AliLHCData.cxx:530
 AliLHCData.cxx:531
 AliLHCData.cxx:532
 AliLHCData.cxx:533
 AliLHCData.cxx:534
 AliLHCData.cxx:535
 AliLHCData.cxx:536
 AliLHCData.cxx:537
 AliLHCData.cxx:538
 AliLHCData.cxx:539
 AliLHCData.cxx:540
 AliLHCData.cxx:541
 AliLHCData.cxx:542
 AliLHCData.cxx:543
 AliLHCData.cxx:544
 AliLHCData.cxx:545
 AliLHCData.cxx:546
 AliLHCData.cxx:547
 AliLHCData.cxx:548
 AliLHCData.cxx:549
 AliLHCData.cxx:550
 AliLHCData.cxx:551
 AliLHCData.cxx:552
 AliLHCData.cxx:553
 AliLHCData.cxx:554
 AliLHCData.cxx:555
 AliLHCData.cxx:556
 AliLHCData.cxx:557
 AliLHCData.cxx:558
 AliLHCData.cxx:559
 AliLHCData.cxx:560
 AliLHCData.cxx:561
 AliLHCData.cxx:562
 AliLHCData.cxx:563
 AliLHCData.cxx:564
 AliLHCData.cxx:565
 AliLHCData.cxx:566
 AliLHCData.cxx:567
 AliLHCData.cxx:568
 AliLHCData.cxx:569
 AliLHCData.cxx:570
 AliLHCData.cxx:571
 AliLHCData.cxx:572
 AliLHCData.cxx:573
 AliLHCData.cxx:574
 AliLHCData.cxx:575
 AliLHCData.cxx:576
 AliLHCData.cxx:577
 AliLHCData.cxx:578
 AliLHCData.cxx:579
 AliLHCData.cxx:580
 AliLHCData.cxx:581
 AliLHCData.cxx:582
 AliLHCData.cxx:583
 AliLHCData.cxx:584
 AliLHCData.cxx:585
 AliLHCData.cxx:586
 AliLHCData.cxx:587
 AliLHCData.cxx:588
 AliLHCData.cxx:589
 AliLHCData.cxx:590
 AliLHCData.cxx:591
 AliLHCData.cxx:592
 AliLHCData.cxx:593
 AliLHCData.cxx:594
 AliLHCData.cxx:595
 AliLHCData.cxx:596
 AliLHCData.cxx:597
 AliLHCData.cxx:598
 AliLHCData.cxx:599
 AliLHCData.cxx:600
 AliLHCData.cxx:601
 AliLHCData.cxx:602
 AliLHCData.cxx:603
 AliLHCData.cxx:604
 AliLHCData.cxx:605
 AliLHCData.cxx:606
 AliLHCData.cxx:607
 AliLHCData.cxx:608
 AliLHCData.cxx:609
 AliLHCData.cxx:610
 AliLHCData.cxx:611
 AliLHCData.cxx:612
 AliLHCData.cxx:613
 AliLHCData.cxx:614
 AliLHCData.cxx:615
 AliLHCData.cxx:616
 AliLHCData.cxx:617
 AliLHCData.cxx:618
 AliLHCData.cxx:619
 AliLHCData.cxx:620
 AliLHCData.cxx:621
 AliLHCData.cxx:622
 AliLHCData.cxx:623
 AliLHCData.cxx:624
 AliLHCData.cxx:625
 AliLHCData.cxx:626
 AliLHCData.cxx:627
 AliLHCData.cxx:628
 AliLHCData.cxx:629
 AliLHCData.cxx:630
 AliLHCData.cxx:631
 AliLHCData.cxx:632
 AliLHCData.cxx:633
 AliLHCData.cxx:634
 AliLHCData.cxx:635
 AliLHCData.cxx:636
 AliLHCData.cxx:637
 AliLHCData.cxx:638
 AliLHCData.cxx:639
 AliLHCData.cxx:640
 AliLHCData.cxx:641
 AliLHCData.cxx:642
 AliLHCData.cxx:643
 AliLHCData.cxx:644
 AliLHCData.cxx:645
 AliLHCData.cxx:646
 AliLHCData.cxx:647
 AliLHCData.cxx:648
 AliLHCData.cxx:649
 AliLHCData.cxx:650
 AliLHCData.cxx:651
 AliLHCData.cxx:652
 AliLHCData.cxx:653
 AliLHCData.cxx:654
 AliLHCData.cxx:655
 AliLHCData.cxx:656
 AliLHCData.cxx:657
 AliLHCData.cxx:658
 AliLHCData.cxx:659
 AliLHCData.cxx:660
 AliLHCData.cxx:661
 AliLHCData.cxx:662
 AliLHCData.cxx:663
 AliLHCData.cxx:664
 AliLHCData.cxx:665
 AliLHCData.cxx:666
 AliLHCData.cxx:667
 AliLHCData.cxx:668
 AliLHCData.cxx:669
 AliLHCData.cxx:670
 AliLHCData.cxx:671
 AliLHCData.cxx:672
 AliLHCData.cxx:673
 AliLHCData.cxx:674
 AliLHCData.cxx:675
 AliLHCData.cxx:676
 AliLHCData.cxx:677
 AliLHCData.cxx:678
 AliLHCData.cxx:679
 AliLHCData.cxx:680
 AliLHCData.cxx:681
 AliLHCData.cxx:682
 AliLHCData.cxx:683
 AliLHCData.cxx:684
 AliLHCData.cxx:685
 AliLHCData.cxx:686
 AliLHCData.cxx:687
 AliLHCData.cxx:688
 AliLHCData.cxx:689
 AliLHCData.cxx:690
 AliLHCData.cxx:691
 AliLHCData.cxx:692
 AliLHCData.cxx:693
 AliLHCData.cxx:694
 AliLHCData.cxx:695
 AliLHCData.cxx:696
 AliLHCData.cxx:697
 AliLHCData.cxx:698
 AliLHCData.cxx:699
 AliLHCData.cxx:700
 AliLHCData.cxx:701
 AliLHCData.cxx:702
 AliLHCData.cxx:703
 AliLHCData.cxx:704
 AliLHCData.cxx:705
 AliLHCData.cxx:706
 AliLHCData.cxx:707
 AliLHCData.cxx:708
 AliLHCData.cxx:709
 AliLHCData.cxx:710
 AliLHCData.cxx:711
 AliLHCData.cxx:712
 AliLHCData.cxx:713
 AliLHCData.cxx:714
 AliLHCData.cxx:715
 AliLHCData.cxx:716
 AliLHCData.cxx:717
 AliLHCData.cxx:718
 AliLHCData.cxx:719
 AliLHCData.cxx:720
 AliLHCData.cxx:721
 AliLHCData.cxx:722
 AliLHCData.cxx:723
 AliLHCData.cxx:724
 AliLHCData.cxx:725
 AliLHCData.cxx:726
 AliLHCData.cxx:727
 AliLHCData.cxx:728
 AliLHCData.cxx:729
 AliLHCData.cxx:730
 AliLHCData.cxx:731
 AliLHCData.cxx:732
 AliLHCData.cxx:733
 AliLHCData.cxx:734
 AliLHCData.cxx:735
 AliLHCData.cxx:736
 AliLHCData.cxx:737
 AliLHCData.cxx:738
 AliLHCData.cxx:739
 AliLHCData.cxx:740
 AliLHCData.cxx:741
 AliLHCData.cxx:742
 AliLHCData.cxx:743
 AliLHCData.cxx:744
 AliLHCData.cxx:745
 AliLHCData.cxx:746
 AliLHCData.cxx:747
 AliLHCData.cxx:748
 AliLHCData.cxx:749
 AliLHCData.cxx:750
 AliLHCData.cxx:751
 AliLHCData.cxx:752
 AliLHCData.cxx:753
 AliLHCData.cxx:754
 AliLHCData.cxx:755
 AliLHCData.cxx:756
 AliLHCData.cxx:757
 AliLHCData.cxx:758
 AliLHCData.cxx:759
 AliLHCData.cxx:760
 AliLHCData.cxx:761
 AliLHCData.cxx:762
 AliLHCData.cxx:763
 AliLHCData.cxx:764
 AliLHCData.cxx:765
 AliLHCData.cxx:766
 AliLHCData.cxx:767
 AliLHCData.cxx:768
 AliLHCData.cxx:769
 AliLHCData.cxx:770
 AliLHCData.cxx:771
 AliLHCData.cxx:772
 AliLHCData.cxx:773
 AliLHCData.cxx:774
 AliLHCData.cxx:775
 AliLHCData.cxx:776
 AliLHCData.cxx:777
 AliLHCData.cxx:778
 AliLHCData.cxx:779
 AliLHCData.cxx:780
 AliLHCData.cxx:781
 AliLHCData.cxx:782
 AliLHCData.cxx:783
 AliLHCData.cxx:784
 AliLHCData.cxx:785
 AliLHCData.cxx:786
 AliLHCData.cxx:787
 AliLHCData.cxx:788
 AliLHCData.cxx:789
 AliLHCData.cxx:790
 AliLHCData.cxx:791
 AliLHCData.cxx:792
 AliLHCData.cxx:793
 AliLHCData.cxx:794
 AliLHCData.cxx:795
 AliLHCData.cxx:796
 AliLHCData.cxx:797
 AliLHCData.cxx:798
 AliLHCData.cxx:799
 AliLHCData.cxx:800
 AliLHCData.cxx:801
 AliLHCData.cxx:802
 AliLHCData.cxx:803
 AliLHCData.cxx:804
 AliLHCData.cxx:805
 AliLHCData.cxx:806
 AliLHCData.cxx:807
 AliLHCData.cxx:808
 AliLHCData.cxx:809
 AliLHCData.cxx:810
 AliLHCData.cxx:811
 AliLHCData.cxx:812
 AliLHCData.cxx:813
 AliLHCData.cxx:814
 AliLHCData.cxx:815
 AliLHCData.cxx:816
 AliLHCData.cxx:817
 AliLHCData.cxx:818
 AliLHCData.cxx:819
 AliLHCData.cxx:820
 AliLHCData.cxx:821
 AliLHCData.cxx:822
 AliLHCData.cxx:823
 AliLHCData.cxx:824
 AliLHCData.cxx:825
 AliLHCData.cxx:826
 AliLHCData.cxx:827
 AliLHCData.cxx:828
 AliLHCData.cxx:829
 AliLHCData.cxx:830
 AliLHCData.cxx:831
 AliLHCData.cxx:832
 AliLHCData.cxx:833
 AliLHCData.cxx:834
 AliLHCData.cxx:835
 AliLHCData.cxx:836
 AliLHCData.cxx:837
 AliLHCData.cxx:838
 AliLHCData.cxx:839
 AliLHCData.cxx:840
 AliLHCData.cxx:841
 AliLHCData.cxx:842
 AliLHCData.cxx:843
 AliLHCData.cxx:844
 AliLHCData.cxx:845
 AliLHCData.cxx:846
 AliLHCData.cxx:847
 AliLHCData.cxx:848
 AliLHCData.cxx:849
 AliLHCData.cxx:850
 AliLHCData.cxx:851
 AliLHCData.cxx:852
 AliLHCData.cxx:853
 AliLHCData.cxx:854
 AliLHCData.cxx:855
 AliLHCData.cxx:856
 AliLHCData.cxx:857
 AliLHCData.cxx:858
 AliLHCData.cxx:859
 AliLHCData.cxx:860
 AliLHCData.cxx:861
 AliLHCData.cxx:862
 AliLHCData.cxx:863
 AliLHCData.cxx:864
 AliLHCData.cxx:865
 AliLHCData.cxx:866
 AliLHCData.cxx:867
 AliLHCData.cxx:868
 AliLHCData.cxx:869
 AliLHCData.cxx:870
 AliLHCData.cxx:871
 AliLHCData.cxx:872
 AliLHCData.cxx:873
 AliLHCData.cxx:874
 AliLHCData.cxx:875
 AliLHCData.cxx:876
 AliLHCData.cxx:877
 AliLHCData.cxx:878
 AliLHCData.cxx:879
 AliLHCData.cxx:880
 AliLHCData.cxx:881
 AliLHCData.cxx:882
 AliLHCData.cxx:883
 AliLHCData.cxx:884
 AliLHCData.cxx:885
 AliLHCData.cxx:886
 AliLHCData.cxx:887
 AliLHCData.cxx:888
 AliLHCData.cxx:889
 AliLHCData.cxx:890
 AliLHCData.cxx:891
 AliLHCData.cxx:892
 AliLHCData.cxx:893
 AliLHCData.cxx:894
 AliLHCData.cxx:895
 AliLHCData.cxx:896
 AliLHCData.cxx:897
 AliLHCData.cxx:898
 AliLHCData.cxx:899
 AliLHCData.cxx:900
 AliLHCData.cxx:901
 AliLHCData.cxx:902
 AliLHCData.cxx:903
 AliLHCData.cxx:904
 AliLHCData.cxx:905
 AliLHCData.cxx:906
 AliLHCData.cxx:907
 AliLHCData.cxx:908
 AliLHCData.cxx:909
 AliLHCData.cxx:910
 AliLHCData.cxx:911
 AliLHCData.cxx:912
 AliLHCData.cxx:913
 AliLHCData.cxx:914
 AliLHCData.cxx:915
 AliLHCData.cxx:916
 AliLHCData.cxx:917
 AliLHCData.cxx:918
 AliLHCData.cxx:919
 AliLHCData.cxx:920
 AliLHCData.cxx:921
 AliLHCData.cxx:922
 AliLHCData.cxx:923
 AliLHCData.cxx:924
 AliLHCData.cxx:925
 AliLHCData.cxx:926
 AliLHCData.cxx:927
 AliLHCData.cxx:928
 AliLHCData.cxx:929
 AliLHCData.cxx:930
 AliLHCData.cxx:931
 AliLHCData.cxx:932
 AliLHCData.cxx:933
 AliLHCData.cxx:934
 AliLHCData.cxx:935
 AliLHCData.cxx:936
 AliLHCData.cxx:937
 AliLHCData.cxx:938
 AliLHCData.cxx:939
 AliLHCData.cxx:940
 AliLHCData.cxx:941
 AliLHCData.cxx:942
 AliLHCData.cxx:943
 AliLHCData.cxx:944
 AliLHCData.cxx:945
 AliLHCData.cxx:946
 AliLHCData.cxx:947
 AliLHCData.cxx:948
 AliLHCData.cxx:949
 AliLHCData.cxx:950
 AliLHCData.cxx:951
 AliLHCData.cxx:952
 AliLHCData.cxx:953
 AliLHCData.cxx:954
 AliLHCData.cxx:955
 AliLHCData.cxx:956
 AliLHCData.cxx:957
 AliLHCData.cxx:958
 AliLHCData.cxx:959
 AliLHCData.cxx:960
 AliLHCData.cxx:961
 AliLHCData.cxx:962
 AliLHCData.cxx:963
 AliLHCData.cxx:964
 AliLHCData.cxx:965
 AliLHCData.cxx:966
 AliLHCData.cxx:967
 AliLHCData.cxx:968
 AliLHCData.cxx:969
 AliLHCData.cxx:970
 AliLHCData.cxx:971
 AliLHCData.cxx:972
 AliLHCData.cxx:973
 AliLHCData.cxx:974
 AliLHCData.cxx:975
 AliLHCData.cxx:976
 AliLHCData.cxx:977
 AliLHCData.cxx:978
 AliLHCData.cxx:979
 AliLHCData.cxx:980
 AliLHCData.cxx:981
 AliLHCData.cxx:982
 AliLHCData.cxx:983
 AliLHCData.cxx:984
 AliLHCData.cxx:985
 AliLHCData.cxx:986
 AliLHCData.cxx:987
 AliLHCData.cxx:988
 AliLHCData.cxx:989
 AliLHCData.cxx:990
 AliLHCData.cxx:991
 AliLHCData.cxx:992
 AliLHCData.cxx:993
 AliLHCData.cxx:994
 AliLHCData.cxx:995
 AliLHCData.cxx:996
 AliLHCData.cxx:997
 AliLHCData.cxx:998
 AliLHCData.cxx:999
 AliLHCData.cxx:1000
 AliLHCData.cxx:1001
 AliLHCData.cxx:1002
 AliLHCData.cxx:1003
 AliLHCData.cxx:1004
 AliLHCData.cxx:1005
 AliLHCData.cxx:1006
 AliLHCData.cxx:1007
 AliLHCData.cxx:1008
 AliLHCData.cxx:1009
 AliLHCData.cxx:1010
 AliLHCData.cxx:1011
 AliLHCData.cxx:1012
 AliLHCData.cxx:1013
 AliLHCData.cxx:1014
 AliLHCData.cxx:1015
 AliLHCData.cxx:1016
 AliLHCData.cxx:1017
 AliLHCData.cxx:1018
 AliLHCData.cxx:1019
 AliLHCData.cxx:1020
 AliLHCData.cxx:1021
 AliLHCData.cxx:1022
 AliLHCData.cxx:1023
 AliLHCData.cxx:1024
 AliLHCData.cxx:1025
 AliLHCData.cxx:1026
 AliLHCData.cxx:1027
 AliLHCData.cxx:1028
 AliLHCData.cxx:1029
 AliLHCData.cxx:1030
 AliLHCData.cxx:1031
 AliLHCData.cxx:1032
 AliLHCData.cxx:1033
 AliLHCData.cxx:1034
 AliLHCData.cxx:1035
 AliLHCData.cxx:1036
 AliLHCData.cxx:1037
 AliLHCData.cxx:1038
 AliLHCData.cxx:1039
 AliLHCData.cxx:1040
 AliLHCData.cxx:1041
 AliLHCData.cxx:1042
 AliLHCData.cxx:1043
 AliLHCData.cxx:1044
 AliLHCData.cxx:1045
 AliLHCData.cxx:1046
 AliLHCData.cxx:1047
 AliLHCData.cxx:1048
 AliLHCData.cxx:1049
 AliLHCData.cxx:1050
 AliLHCData.cxx:1051
 AliLHCData.cxx:1052
 AliLHCData.cxx:1053
 AliLHCData.cxx:1054
 AliLHCData.cxx:1055
 AliLHCData.cxx:1056
 AliLHCData.cxx:1057
 AliLHCData.cxx:1058
 AliLHCData.cxx:1059
 AliLHCData.cxx:1060
 AliLHCData.cxx:1061
 AliLHCData.cxx:1062
 AliLHCData.cxx:1063
 AliLHCData.cxx:1064
 AliLHCData.cxx:1065
 AliLHCData.cxx:1066
 AliLHCData.cxx:1067
 AliLHCData.cxx:1068
 AliLHCData.cxx:1069
 AliLHCData.cxx:1070
 AliLHCData.cxx:1071
 AliLHCData.cxx:1072
 AliLHCData.cxx:1073
 AliLHCData.cxx:1074
 AliLHCData.cxx:1075
 AliLHCData.cxx:1076
 AliLHCData.cxx:1077
 AliLHCData.cxx:1078
 AliLHCData.cxx:1079
 AliLHCData.cxx:1080
 AliLHCData.cxx:1081
 AliLHCData.cxx:1082
 AliLHCData.cxx:1083
 AliLHCData.cxx:1084
 AliLHCData.cxx:1085
 AliLHCData.cxx:1086
 AliLHCData.cxx:1087
 AliLHCData.cxx:1088
 AliLHCData.cxx:1089
 AliLHCData.cxx:1090
 AliLHCData.cxx:1091
 AliLHCData.cxx:1092
 AliLHCData.cxx:1093
 AliLHCData.cxx:1094
 AliLHCData.cxx:1095
 AliLHCData.cxx:1096
 AliLHCData.cxx:1097
 AliLHCData.cxx:1098
 AliLHCData.cxx:1099
 AliLHCData.cxx:1100
 AliLHCData.cxx:1101
 AliLHCData.cxx:1102
 AliLHCData.cxx:1103
 AliLHCData.cxx:1104
 AliLHCData.cxx:1105
 AliLHCData.cxx:1106
 AliLHCData.cxx:1107
 AliLHCData.cxx:1108
 AliLHCData.cxx:1109
 AliLHCData.cxx:1110
 AliLHCData.cxx:1111
 AliLHCData.cxx:1112
 AliLHCData.cxx:1113
 AliLHCData.cxx:1114
 AliLHCData.cxx:1115
 AliLHCData.cxx:1116
 AliLHCData.cxx:1117
 AliLHCData.cxx:1118
 AliLHCData.cxx:1119
 AliLHCData.cxx:1120
 AliLHCData.cxx:1121
 AliLHCData.cxx:1122
 AliLHCData.cxx:1123
 AliLHCData.cxx:1124
 AliLHCData.cxx:1125
 AliLHCData.cxx:1126
 AliLHCData.cxx:1127
 AliLHCData.cxx:1128
 AliLHCData.cxx:1129
 AliLHCData.cxx:1130
 AliLHCData.cxx:1131
 AliLHCData.cxx:1132
 AliLHCData.cxx:1133
 AliLHCData.cxx:1134
 AliLHCData.cxx:1135
 AliLHCData.cxx:1136
 AliLHCData.cxx:1137
 AliLHCData.cxx:1138
 AliLHCData.cxx:1139
 AliLHCData.cxx:1140
 AliLHCData.cxx:1141
 AliLHCData.cxx:1142
 AliLHCData.cxx:1143
 AliLHCData.cxx:1144
 AliLHCData.cxx:1145
 AliLHCData.cxx:1146
 AliLHCData.cxx:1147
 AliLHCData.cxx:1148
 AliLHCData.cxx:1149
 AliLHCData.cxx:1150
 AliLHCData.cxx:1151
 AliLHCData.cxx:1152
 AliLHCData.cxx:1153
 AliLHCData.cxx:1154
 AliLHCData.cxx:1155
 AliLHCData.cxx:1156
 AliLHCData.cxx:1157
 AliLHCData.cxx:1158
 AliLHCData.cxx:1159
 AliLHCData.cxx:1160
 AliLHCData.cxx:1161
 AliLHCData.cxx:1162
 AliLHCData.cxx:1163
 AliLHCData.cxx:1164
 AliLHCData.cxx:1165
 AliLHCData.cxx:1166
 AliLHCData.cxx:1167
 AliLHCData.cxx:1168
 AliLHCData.cxx:1169
 AliLHCData.cxx:1170
 AliLHCData.cxx:1171
 AliLHCData.cxx:1172
 AliLHCData.cxx:1173
 AliLHCData.cxx:1174
 AliLHCData.cxx:1175
 AliLHCData.cxx:1176
 AliLHCData.cxx:1177
 AliLHCData.cxx:1178
 AliLHCData.cxx:1179
 AliLHCData.cxx:1180
 AliLHCData.cxx:1181
 AliLHCData.cxx:1182
 AliLHCData.cxx:1183
 AliLHCData.cxx:1184
 AliLHCData.cxx:1185
 AliLHCData.cxx:1186
 AliLHCData.cxx:1187
 AliLHCData.cxx:1188
 AliLHCData.cxx:1189
 AliLHCData.cxx:1190
 AliLHCData.cxx:1191
 AliLHCData.cxx:1192
 AliLHCData.cxx:1193
 AliLHCData.cxx:1194
 AliLHCData.cxx:1195
 AliLHCData.cxx:1196
 AliLHCData.cxx:1197
 AliLHCData.cxx:1198
 AliLHCData.cxx:1199
 AliLHCData.cxx:1200
 AliLHCData.cxx:1201
 AliLHCData.cxx:1202
 AliLHCData.cxx:1203
 AliLHCData.cxx:1204
 AliLHCData.cxx:1205
 AliLHCData.cxx:1206
 AliLHCData.cxx:1207
 AliLHCData.cxx:1208
 AliLHCData.cxx:1209
 AliLHCData.cxx:1210
 AliLHCData.cxx:1211
 AliLHCData.cxx:1212
 AliLHCData.cxx:1213
 AliLHCData.cxx:1214
 AliLHCData.cxx:1215
 AliLHCData.cxx:1216
 AliLHCData.cxx:1217
 AliLHCData.cxx:1218
 AliLHCData.cxx:1219
 AliLHCData.cxx:1220
 AliLHCData.cxx:1221
 AliLHCData.cxx:1222
 AliLHCData.cxx:1223
 AliLHCData.cxx:1224
 AliLHCData.cxx:1225
 AliLHCData.cxx:1226
 AliLHCData.cxx:1227
 AliLHCData.cxx:1228
 AliLHCData.cxx:1229
 AliLHCData.cxx:1230
 AliLHCData.cxx:1231
 AliLHCData.cxx:1232
 AliLHCData.cxx:1233
 AliLHCData.cxx:1234
 AliLHCData.cxx:1235
 AliLHCData.cxx:1236
 AliLHCData.cxx:1237
 AliLHCData.cxx:1238
 AliLHCData.cxx:1239
 AliLHCData.cxx:1240
 AliLHCData.cxx:1241
 AliLHCData.cxx:1242
 AliLHCData.cxx:1243
 AliLHCData.cxx:1244
 AliLHCData.cxx:1245
 AliLHCData.cxx:1246
 AliLHCData.cxx:1247
 AliLHCData.cxx:1248
 AliLHCData.cxx:1249
 AliLHCData.cxx:1250
 AliLHCData.cxx:1251
 AliLHCData.cxx:1252
 AliLHCData.cxx:1253
 AliLHCData.cxx:1254
 AliLHCData.cxx:1255
 AliLHCData.cxx:1256
 AliLHCData.cxx:1257
 AliLHCData.cxx:1258
 AliLHCData.cxx:1259
 AliLHCData.cxx:1260
 AliLHCData.cxx:1261
 AliLHCData.cxx:1262
 AliLHCData.cxx:1263
 AliLHCData.cxx:1264
 AliLHCData.cxx:1265
 AliLHCData.cxx:1266
 AliLHCData.cxx:1267
 AliLHCData.cxx:1268
 AliLHCData.cxx:1269
 AliLHCData.cxx:1270
 AliLHCData.cxx:1271
 AliLHCData.cxx:1272
 AliLHCData.cxx:1273
 AliLHCData.cxx:1274
 AliLHCData.cxx:1275
 AliLHCData.cxx:1276
 AliLHCData.cxx:1277
 AliLHCData.cxx:1278
 AliLHCData.cxx:1279
 AliLHCData.cxx:1280
 AliLHCData.cxx:1281
 AliLHCData.cxx:1282
 AliLHCData.cxx:1283
 AliLHCData.cxx:1284
 AliLHCData.cxx:1285
 AliLHCData.cxx:1286
 AliLHCData.cxx:1287
 AliLHCData.cxx:1288
 AliLHCData.cxx:1289
 AliLHCData.cxx:1290
 AliLHCData.cxx:1291
 AliLHCData.cxx:1292
 AliLHCData.cxx:1293
 AliLHCData.cxx:1294
 AliLHCData.cxx:1295
 AliLHCData.cxx:1296
 AliLHCData.cxx:1297
 AliLHCData.cxx:1298
 AliLHCData.cxx:1299
 AliLHCData.cxx:1300
 AliLHCData.cxx:1301
 AliLHCData.cxx:1302
 AliLHCData.cxx:1303
 AliLHCData.cxx:1304
 AliLHCData.cxx:1305
 AliLHCData.cxx:1306
 AliLHCData.cxx:1307
 AliLHCData.cxx:1308
 AliLHCData.cxx:1309
 AliLHCData.cxx:1310
 AliLHCData.cxx:1311
 AliLHCData.cxx:1312
 AliLHCData.cxx:1313
 AliLHCData.cxx:1314
 AliLHCData.cxx:1315
 AliLHCData.cxx:1316
 AliLHCData.cxx:1317
 AliLHCData.cxx:1318
 AliLHCData.cxx:1319
 AliLHCData.cxx:1320
 AliLHCData.cxx:1321