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

/* $Id$ */

///////////////////////////////////////////////////////////////////////////////
// EMCAL Preprocessor class. It runs by Shuttle at the end of the run,
// calculates stuff to be posted in OCDB
//
// Author: Boris Polichtchouk, 4 October 2006
// Adapted for EMCAL by Gustavo Conesa Balbastre, October 2006
// Updated by David Silvermyr May 2008, based on TPC code
///////////////////////////////////////////////////////////////////////////////

//Root
#include "TFile.h"
#include "TTree.h"
#include "TEnv.h"
#include "TParameter.h"

#include <TTimeStamp.h>

//AliRoot
#include "AliShuttleInterface.h"
#include "AliEMCALPreprocessor.h"
#include "AliLog.h"
#include "AliDCSValue.h"
#include "AliCDBMetaData.h"
#include "AliEMCALTriggerTRUDCSConfig.h"
#include "AliEMCALTriggerSTUDCSConfig.h"
#include "AliEMCALTriggerDCSConfig.h"
#include "AliCaloCalibPedestal.h"
#include "AliCaloCalibSignal.h"
#include "AliEMCALSensorTempArray.h"

const Int_t kValCutTemp = 100;               // discard temperatures > 100 degrees
const Int_t kDiffCutTemp = 5;	             // discard temperature differences > 5 degrees
const TString kPedestalRunType = "PEDESTAL";  // pedestal run identifier
const TString kPhysicsRunType = "PHYSICS";   // physics run identifier
const TString kStandAloneRunType = "STANDALONE_BC"; // standalone run identifier
const TString kAmandaTemp = "PT_%02d.Temperature"; // Amanda string for temperature entries
//const Double_t kFitFraction = 0.7;                 // Fraction of DCS sensor fits required 
const Double_t kFitFraction = -1.0;          // Don't require minimum number of fits during commissioning 

const TString kMetaResponsible = "David Silvermyr";
//legacy comments and return codes from TPC
const TString kMetaComment = "Preprocessor AliEMCAL data base entries.";
const int kReturnCodeNoInfo = 9;
const int kReturnCodeNoObject = 2;
const int kReturnCodeNoEntries = 1;

const int kNTRU = 62; // EMCAL  (10 SM + 2/3) + (DCAL 10 SM) * 3 TRU per SM

ClassImp(AliEMCALPreprocessor)
  
//_______________________________________________________________________________________
AliEMCALPreprocessor::AliEMCALPreprocessor() :
  AliPreprocessor("EMC",0),
  fConfEnv(0), 
  fTemp(0), 
  fConfigOK(kTRUE)
{
  //default constructor
}

//_______________________________________________________________________________________
AliEMCALPreprocessor::AliEMCALPreprocessor(AliShuttleInterface* shuttle):
  AliPreprocessor("EMC",shuttle),
  fConfEnv(0), 
  fTemp(0), 
  fConfigOK(kTRUE)
{
  // Constructor AddRunType(kPedestalRunType);
  
  // define run types to be processed
  AddRunType(kPedestalRunType);
  AddRunType(kPhysicsRunType);
}

//______________________________________________________________________________________________
AliEMCALPreprocessor::AliEMCALPreprocessor(const AliEMCALPreprocessor&  ) :
  AliPreprocessor("EMCAL",0),
  fConfEnv(0), fTemp(0), fConfigOK(kTRUE)
{
  Fatal("AliEMCALPreprocessor", "copy constructor not implemented");
}

// assignment operator; use copy ctor to make life easy.
//______________________________________________________________________________________________
AliEMCALPreprocessor& AliEMCALPreprocessor::operator = (const AliEMCALPreprocessor &source ) 
{
  // assignment operator; use copy ctor
  if (&source == this) return *this;
  
  new (this) AliEMCALPreprocessor(source);
  return *this;
}

//____________________________________________________________________________
AliEMCALPreprocessor::~AliEMCALPreprocessor()
{
  // destructor
  if (fTemp) delete fTemp;
}

//______________________________________________________________________________________________
void AliEMCALPreprocessor::Initialize(Int_t run, UInt_t startTime,
				      UInt_t endTime)
{
  // Creates AliTestDataDCS object -- start maps half an hour beforre actual run start
  UInt_t startTimeLocal = startTime-1800;
  AliPreprocessor::Initialize(run, startTimeLocal, endTime);
  
  AliInfo(Form("\n\tRun %d \n\tStartTime %s \n\tEndTime %s", run,
	       TTimeStamp((time_t)startTime,0).AsString(),
	       TTimeStamp((time_t)endTime,0).AsString()));
  
  // Preprocessor configuration
  AliCDBEntry* entry = GetFromOCDB("Config", "Preprocessor");
  if (entry) fConfEnv = (TEnv*) entry->GetObject();
  if ( fConfEnv==0 ) {
    Log("AliEMCALPreprocessor: Preprocessor Config OCDB entry missing.\n");
    fConfigOK = kFALSE;
    return;
  }
  
  // Temperature sensors
  TTree *confTree = 0;
  
  TString tempConf = fConfEnv->GetValue("Temperature","ON");
  tempConf.ToUpper();
  if (tempConf != "OFF" ) {
    entry = GetFromOCDB("Config", "Temperature");
    if (entry) confTree = (TTree*) entry->GetObject();
    if ( confTree==0 ) {
      Log("AliEMCALPreprocessor: Temperature Config OCDB entry missing.\n");
      fConfigOK = kFALSE;
      return;
    }
    fTemp = new AliEMCALSensorTempArray(startTimeLocal, fEndTime, confTree, kAmandaTemp);
    fTemp->SetValCut(kValCutTemp);
    fTemp->SetDiffCut(kDiffCutTemp);
  }
  
  return;
}

//______________________________________________________________________________________________
UInt_t AliEMCALPreprocessor::Process(TMap* dcsAliasMap)
{
  // Fills data into EMCAL calibrations objects
  // Amanda servers provide information directly through dcsAliasMap
  
  if (!fConfigOK) return kReturnCodeNoInfo;
  UInt_t result = 0;
  TObjArray *resultArray = new TObjArray();
  TString errorHandling = fConfEnv->GetValue("ErrorHandling","ON");
  errorHandling.ToUpper();
  TObject * status;
  
  UInt_t dcsResult=0;
  if (errorHandling == "OFF" ) {
    if (!dcsAliasMap) dcsResult = kReturnCodeNoEntries;
    else if (dcsAliasMap->GetEntries() == 0 ) dcsResult = kReturnCodeNoEntries;  
    status = new TParameter<int>("dcsResult",dcsResult);
    resultArray->Add(status);
  } 
  else {
    if (!dcsAliasMap) return kReturnCodeNoInfo;
    else if (dcsAliasMap->GetEntries() == 0 ) return kReturnCodeNoInfo;
  }
  
    
  TString runType = GetRunType();
  
  // Temperature sensors are processed by AliEMCALCalTemp
  TString tempConf = fConfEnv->GetValue("Temperature","ON");
  tempConf.ToUpper();
  if (tempConf != "OFF" && dcsAliasMap ) {
    UInt_t tempResult = MapTemperature(dcsAliasMap);
    result=tempResult;
    status = new TParameter<int>("tempResult",tempResult);
    resultArray->Add(status);
  }
  // Trigger configuration processing: only for Physics runs
  TString triggerConf = fConfEnv->GetValue("Trigger","ON");
  triggerConf.ToUpper();
  if( runType == kPhysicsRunType ) {
    if (triggerConf != "OFF" && dcsAliasMap ) {
      UInt_t triggerResult = MapTriggerConfig(dcsAliasMap);
      result+=triggerResult;
      status = new TParameter<int>("triggerResult",triggerResult);
      resultArray->Add(status);
    }
  }
  
  // Other calibration information will be retrieved through FXS files
  //  examples:
  //    TList* fileSourcesDAQ = GetFile(AliShuttleInterface::kDAQ, "pedestals");
  //    const char* fileNamePed = GetFile(AliShuttleInterface::kDAQ, "pedestals", "LDC1");
  //
  //    TList* fileSourcesHLT = GetFile(AliShuttleInterface::kHLT, "calib");
  //    const char* fileNameHLT = GetFile(AliShuttleInterface::kHLT, "calib", "LDC1");
  
  // PEDESTAL ENTRIES:
  
  if ( runType == kPedestalRunType ) {
    Int_t numSources = 1;
    Int_t pedestalSource[2] = {AliShuttleInterface::kDAQ, AliShuttleInterface::kHLT} ;
    TString source = fConfEnv->GetValue("Pedestal","DAQ");
    source.ToUpper();
    if (source != "OFF" ) { 
      if ( source == "HLT") pedestalSource[0] = AliShuttleInterface::kHLT;
      if (!GetHLTStatus()) pedestalSource[0] = AliShuttleInterface::kDAQ;
      if (source == "HLTDAQ" ) {
        numSources=2;
        pedestalSource[0] = AliShuttleInterface::kHLT;
        pedestalSource[1] = AliShuttleInterface::kDAQ;
      }
      if (source == "DAQHLT" ) numSources=2;
      UInt_t pedestalResult=0;
      for (Int_t i=0; i<numSources; i++ ) {	
        pedestalResult = ExtractPedestals(pedestalSource[i]);
        if ( pedestalResult == 0 ) break;
      }
      result += pedestalResult;
      status = new TParameter<int>("pedestalResult",pedestalResult);
      resultArray->Add(status);
    }
  }
  
  // SIGNAL/LED ENTRIES:
  if( runType == kPhysicsRunType ) {
    Int_t numSources = 1;
    Int_t signalSource[2] = {AliShuttleInterface::kDAQ,AliShuttleInterface::kHLT} ;
    TString source = fConfEnv->GetValue("Signal","DAQ");
    source.ToUpper();
    if ( source != "OFF") { 
      if ( source == "HLT") signalSource[0] = AliShuttleInterface::kHLT;
      if (!GetHLTStatus()) signalSource[0] = AliShuttleInterface::kDAQ;
      if (source == "HLTDAQ" ) {
        numSources=2;
        signalSource[0] = AliShuttleInterface::kHLT;
        signalSource[1] = AliShuttleInterface::kDAQ;
      }
      if (source == "DAQHLT" ) numSources=2;
      UInt_t signalResult=0;
      for (Int_t i=0; i<numSources; i++ ) {	
        signalResult = ExtractSignal(signalSource[i]);
        if ( signalResult == 0 ) break;
      }
      result += signalResult;
      status = new TParameter<int>("signalResult",signalResult);
      resultArray->Add(status);
    }
  }
  
  
  // overall status at the end
  if (errorHandling == "OFF" ) {
    AliCDBMetaData metaData;
    metaData.SetBeamPeriod(0);
    metaData.SetResponsible(kMetaResponsible);
    metaData.SetComment("Preprocessor AliEMCAL status.");
    Bool_t storeOK = Store("Calib", "PreprocStatus", resultArray, &metaData, 0, kFALSE);
    resultArray->Delete();
    result = 0;
    if ( !storeOK )  result=1;
    return result;
  } 
  else { 
    return result;
  }
  
}
//______________________________________________________________________________________________
UInt_t AliEMCALPreprocessor::MapTemperature(TMap* dcsAliasMap)
{ // extract DCS temperature maps. Perform fits to save space
  UInt_t result=0;

  TMap *map = fTemp->ExtractDCS(dcsAliasMap);
  if (map) {
    fTemp->MakeSplineFit(map);
    Double_t fitFraction = 1.0*fTemp->NumFits()/fTemp->NumSensors(); 
    if (fitFraction > kFitFraction ) {
      AliInfo(Form("Temperature values extracted, fits performed.\n"));
    } 
    else { 
      Log ("Too few temperature maps fitted. \n");
      result = kReturnCodeNoInfo;
    }
  } 
  else {
    Log("No temperature map extracted. \n");
    result = kReturnCodeNoInfo;
  }
  delete map;
  // Now store the final CDB file
  
  if ( result == 0 ) { // some info was found
    AliCDBMetaData metaData;
    metaData.SetBeamPeriod(0);
    metaData.SetResponsible(kMetaResponsible);
    metaData.SetComment(kMetaComment);
    
    Bool_t storeOK = Store("Calib", "Temperature", fTemp, &metaData, 0, kFALSE);
    if ( !storeOK )  result=1;
    AliInfo(Form("Temperature info stored. result %d\n", result));
  }
  
  return result;
}

//______________________________________________________________________________________________
UInt_t AliEMCALPreprocessor::MapTriggerConfig(TMap* dcsAliasMap)
{ // extract DCS trigger info
	
	
	AliInfo("Print DCS alias map content");
	dcsAliasMap->Print();
	
  AliInfo(Form("Get TRU info from DCS DPs.\n"));
  Int_t i, iTRU;
  const Int_t bufsize = 1000;
  char buf[bufsize];

  AliDCSValue *dcsVal;
  TObjArray *arrL0ALGSEL, *arrPEAKFINDER, *arrGLOBALTHRESH, *arrCOSMTHRESH;
  TObjArray *arrMASK[6];
	
  TObjArray *arrSTUG[3][2], *arrSTUJ[3][2];
  TObjArray *arrSTUD, *arrSTUR, *arrSTUF;
	
  // overall object to hold STU and DCS config info
  // DS comment: for now only holds TRU info, i.e. only partially filled
  // (STU info only in raw data header; unfortunately not also picked up via DCS DPs)
  AliEMCALTriggerDCSConfig *trigConfig = new AliEMCALTriggerDCSConfig();
  // allocate space for TRU objects
  TClonesArray *truArr = new TClonesArray("AliEMCALTriggerTRUDCSConfig", kNTRU);
  for( iTRU = 0; iTRU < kNTRU; iTRU++){
    new((*truArr)[iTRU]) AliEMCALTriggerTRUDCSConfig();
  }
  trigConfig->SetTRUArr(truArr);

  AliEMCALTriggerSTUDCSConfig *stuConfig = new AliEMCALTriggerSTUDCSConfig();
	
  // loop through all TRUs
  bool debug = true; // debug flag for AliInfo printouts for each TRU
  for( iTRU = 0; iTRU < kNTRU; iTRU++){
    if (debug) AliInfo( Form("iTRU %d \n", iTRU) );
    // get the shuttled values
    snprintf( buf, bufsize, "EMC_TRU%02d_L0ALGSEL", iTRU );
    arrL0ALGSEL = (TObjArray*) dcsAliasMap->GetValue( buf );
    snprintf( buf, bufsize, "EMC_TRU%02d_PEAKFINDER", iTRU );
    arrPEAKFINDER = (TObjArray*) dcsAliasMap->GetValue( buf );
    snprintf( buf, bufsize, "EMC_TRU%02d_GLOBALTHRESH", iTRU );
    arrGLOBALTHRESH = (TObjArray*) dcsAliasMap->GetValue( buf );
    snprintf( buf, bufsize, "EMC_TRU%02d_COSMTHRESH", iTRU );
    arrCOSMTHRESH = (TObjArray*) dcsAliasMap->GetValue( buf );
    
    for( i = 0; i < 6; i++ ){
      snprintf( buf, bufsize, "EMC_TRU%02d_MASK%d", iTRU, i );
      arrMASK[i] = (TObjArray*) dcsAliasMap->GetValue( buf );
    }
    
    // fill the objects
    AliEMCALTriggerTRUDCSConfig* truConfig = trigConfig->GetTRUDCSConfig(iTRU);
    if( ! truConfig ){
      AliWarning( Form("EMC TRU%02d config not retrieved!\n", iTRU ));
      continue;
    }

    // get last entries. fill the TRU object
    if( ! arrL0ALGSEL ){
      AliWarning( Form("EMC_TRU%02d_L0ALGSEL alias not found!\n", iTRU ));
    }
    else{
      if (debug) AliInfo( Form("arrL0ALGSEL has %d entries \n", arrL0ALGSEL->GetEntries()) );
      if ( arrL0ALGSEL->GetEntries() > 0 ) {
	dcsVal = (AliDCSValue *) arrL0ALGSEL->At( arrL0ALGSEL->GetEntries() - 1 );
	if (dcsVal) {
		truConfig->SetL0SEL( dcsVal->GetUInt() );
    if (debug) AliInfo( Form("saving value: %u\n", dcsVal->GetUInt()) );
	}
      }
      else
      AliWarning( Form("EMC_TRU%02d_L0ALGSEL has no entries!\n", iTRU ));
    }

    if( ! arrPEAKFINDER ){
      AliWarning( Form("EMC_TRU%02d_PEAKFINDER alias not found!\n", iTRU ));
    }
    else{
      if (debug) AliInfo( Form("arrPEAKFINDER has %d entries \n", arrPEAKFINDER->GetEntries()) );
      if ( arrPEAKFINDER->GetEntries() > 0 ) {
	dcsVal = (AliDCSValue *) arrPEAKFINDER->At( arrPEAKFINDER->GetEntries() - 1 );
	if (dcsVal){
		truConfig->SetSELPF( dcsVal->GetUInt() );
    if (debug) AliInfo( Form("saving value: %u\n", dcsVal->GetUInt()) );
	}
      }
      else
      AliWarning( Form("EMC_TRU%02d_PEAKFINDER has no entries!\n", iTRU ));
    }

    if( ! arrGLOBALTHRESH ){
      AliWarning( Form("EMC_TRU%02d_GLOBALTHRESH alias not found!\n", iTRU ));
    }
    else{
      if (debug) AliInfo( Form("arrGLOBALTHRESH has %d entries \n", arrGLOBALTHRESH->GetEntries()) );
      if ( arrGLOBALTHRESH->GetEntries() > 0 ) {
	dcsVal = (AliDCSValue *) arrGLOBALTHRESH->At( arrGLOBALTHRESH->GetEntries() - 1 );
	if (dcsVal){
		truConfig->SetGTHRL0( dcsVal->GetUInt() );
    if (debug) AliInfo( Form("saving value: %u\n", dcsVal->GetUInt()) );
	}
      }
      else
      AliWarning( Form("EMC_TRU%02d_GLOBALTHRESH has no entries!\n", iTRU ));
    }

    if( ! arrCOSMTHRESH ){
      AliWarning( Form("EMC_TRU%02d_COSMTHRESH alias not found!\n", iTRU ));
    }
    else{
      if (debug) AliInfo( Form("arrCOSMTHRESH has %d entries \n", arrCOSMTHRESH->GetEntries()) );
      if ( arrCOSMTHRESH->GetEntries() > 0 ) {
	dcsVal = (AliDCSValue *) arrCOSMTHRESH->At( arrCOSMTHRESH->GetEntries() - 1 );
	if (dcsVal){
		truConfig->SetL0COSM( dcsVal->GetUInt() );
    if (debug) AliInfo( Form("saving value: %u\n", dcsVal->GetUInt()) );
	}
      }
      else
      AliWarning( Form("EMC_TRU%02d_COSMTHRESH has no entries!\n", iTRU ));
    }
    
    for( i = 0; i < 6; i++ ){
      if( ! arrMASK[i] ){
	AliWarning( Form("EMC_TRU%02d_MASK%d alias not found!\n", iTRU, i ));
      }
      else{
	if (debug) AliInfo( Form("arrMASK[%d] has %d entries \n", i, arrMASK[i]->GetEntries()) );
	if ( arrMASK[i]->GetEntries() > 0 ) {
	  dcsVal = (AliDCSValue *) arrMASK[i]->At( arrMASK[i]->GetEntries() - 1 );
	  if (dcsVal){
			truConfig->SetMaskReg( dcsVal->GetUInt(), i );
    if (debug) AliInfo( Form("saving value: %u\n", dcsVal->GetUInt()) );
	}
	}
      else
      AliWarning( Form("EMC_TRU%02d_MASK%d has no entries!\n", iTRU, i ));
      }
    }
    
  } // TRUs
  AliInfo(Form("TRU info retrieved.\n"));
		
  // STU
  for (i = 0; i < 3; i++) {
		for (int j = 0; j < 2; j++) {
			arrSTUG[i][j] = (TObjArray*)dcsAliasMap->GetValue(Form("EMC_STU_G%c%d", i + 65, j));
			arrSTUJ[i][j] = (TObjArray*)dcsAliasMap->GetValue(Form("EMC_STU_J%c%d", i + 65, j));	
			
			if (!arrSTUG[i][j]) {
				AliWarning(Form("EMC_STU_G%c%d alias not found!", i + 65, j));
			} else {
				if (debug) AliInfo( Form("EMC_STU_G%c%d has %d entries", i + 65, j, arrSTUG[i][j]->GetEntries()));
				if (arrSTUG[i][j]->GetEntries() > 0) {
					dcsVal = (AliDCSValue*)arrSTUG[i][j]->At(arrSTUG[i][j]->GetEntries() - 1);
					if (dcsVal) {
						stuConfig->SetG(i, j, dcsVal->GetInt());
						if (debug) AliInfo(Form("saving value: %u", dcsVal->GetInt()));
					}
				} else
					AliWarning(Form("EMC_STU_G%c%d has no entry!", i + 65, j));
			}
			
			if (!arrSTUJ[i][j]) {
				AliWarning(Form("EMC_STU_J%c%d alias not found!", i + 65, j));
			} else {
				if (debug) AliInfo( Form("EMC_STU_J%c%d has %d entries", i + 65, j, arrSTUJ[i][j]->GetEntries()));
				if (arrSTUJ[i][j]->GetEntries() > 0) {
					dcsVal = (AliDCSValue*)arrSTUJ[i][j]->At(arrSTUJ[i][j]->GetEntries() - 1);
					if (dcsVal) {
						stuConfig->SetJ(i, j, dcsVal->GetInt());
						if (debug) AliInfo(Form("saving value: %u", dcsVal->GetInt()));
					}
				} else
					AliWarning(Form("EMC_STU_J%c%d has no entry!", i + 65, j));
			}
		}
	}
	
	arrSTUD = (TObjArray*)dcsAliasMap->GetValue("EMC_STU_GETRAW");
	arrSTUR = (TObjArray*)dcsAliasMap->GetValue("EMC_STU_REGION");	
	arrSTUF = (TObjArray*)dcsAliasMap->GetValue("EMC_STU_FWVERS");	

	if (!arrSTUD) {
		AliWarning("EMC_STU_GETRAW alias not found!");
	} else {
		if (debug) AliInfo(Form("EMC_STU_GETRAW has %d entries", arrSTUD->GetEntries()));
		if (arrSTUD->GetEntries() > 0) {
			dcsVal = (AliDCSValue*)arrSTUD->At(arrSTUD->GetEntries() - 1);
			if (dcsVal) {
				stuConfig->SetRawData(dcsVal->GetInt());
				if (debug) AliInfo(Form("saving value: %u", dcsVal->GetInt()));
			}
		} else
			AliWarning("EMC_STU_GETRAW has no entry!");
	}
	
	if (!arrSTUR) {
		AliWarning("EMC_STU_REGION");
	} else {
		if (debug) AliInfo( Form("EMC_STU_REGION has %d entries", arrSTUR->GetEntries()));
		if (arrSTUR->GetEntries() > 0) {
			dcsVal = (AliDCSValue*)arrSTUR->At(arrSTUR->GetEntries() - 1);
			if (dcsVal) {
				stuConfig->SetRegion(dcsVal->GetInt());
				if (debug) AliInfo(Form("saving value: %u", dcsVal->GetInt()));
			}
		} else
			AliWarning("EMC_STU_REGION has no entry!");
	}
	
	if (!arrSTUF) {
		AliWarning("EMC_STU_FWVERS");
	} else {
		if (debug) AliInfo(Form("EMC_STU_FWVERS has %d entries", arrSTUF->GetEntries()));
		if (arrSTUF->GetEntries() > 0) {
			dcsVal = (AliDCSValue*)arrSTUF->At(arrSTUF->GetEntries() - 1);
			if (dcsVal) {
				stuConfig->SetFw(dcsVal->GetInt());
				if (debug) AliInfo(Form("saving value: %u", dcsVal->GetInt()));
			}
		} else
			AliWarning("EMC_STU_FWVERS has no entry!");
	}
	
	trigConfig->SetSTUObj(stuConfig);
	
	AliInfo(Form("STU info retrieved."));

	
  // save the objects
  AliCDBMetaData metaData;
  metaData.SetBeamPeriod(0);
  metaData.SetResponsible(kMetaResponsible);
  metaData.SetComment(kMetaComment); 
      
  UInt_t result=0;
  Bool_t storeOK = Store("Calib", "Trigger", trigConfig, &metaData, 0, kFALSE);
  if ( !storeOK )  result=1;
  AliInfo(Form("TRU info stored. result %d\n", result));

  return result;
}

//______________________________________________________________________________________________
UInt_t AliEMCALPreprocessor::ExtractPedestals(Int_t sourceFXS)
{
  //  Read pedestal file from file exchange server
  //  Only store if new pedestal info is available
  //
  UInt_t result=0;

  AliCaloCalibPedestal *calibPed = new AliCaloCalibPedestal(AliCaloCalibPedestal::kEmCal);
  calibPed->Init();

  TList* list = GetFileSources(sourceFXS,"pedestals");
  if (list && list->GetEntries()>0) {
    
    //  loop through all files from LDCs

    int changes = 0;
    UInt_t index = 0;
    while (list->At(index)!=NULL) {
      TObjString* fileNameEntry = (TObjString*) list->At(index);
      if (fileNameEntry!=NULL) {
        TString fileName = GetFile(sourceFXS, "pedestals",
				   fileNameEntry->GetString().Data());
        TFile *f = TFile::Open(fileName);
        if (!f) {
	  Log ("Error opening pedestal file.");
	  result = kReturnCodeNoObject;
	  break;
	}
        AliCaloCalibPedestal *calPed;
	f->GetObject("emcCalibPedestal",calPed);
        if ( !calPed ) {
	  Log ("No pedestal calibration object in file.");
	  result = kReturnCodeNoObject;
	  break;
	}
	if ( calPed->GetNEvents()>0 && calPed->GetNChanFills()>0 ) {
	  // add info for the modules available in the present file
	  Bool_t status = calibPed->AddInfo(calPed);
	  if (status) { changes++; }
	}
	
        delete calPed; 
        f->Close();
      }
      index++;
    }  // while(list)
    
    //
    //  Store updated pedestal entry to OCDB
    //
    if (changes>0) {
      AliCDBMetaData metaData;
      metaData.SetBeamPeriod(0);
      metaData.SetResponsible(kMetaResponsible);
      metaData.SetComment(kMetaComment); 
      
      Bool_t storeOK = StoreReferenceData("Calib", "Pedestals", calibPed, &metaData);
      if ( !storeOK ) result++;
    }
  } 
  else {
    Log ("Error: no entries in input file list!");
    result = kReturnCodeNoEntries;
  }
  
  return result;
}

//______________________________________________________________________________________________
UInt_t AliEMCALPreprocessor::ExtractSignal(Int_t sourceFXS)
{ //  Read signal file from file exchange server
  //  Only store if new signal info is available
  //
  UInt_t result=0;
  AliCaloCalibSignal *calibSig = new AliCaloCalibSignal(AliCaloCalibSignal::kEmCal); 
  
  TList* list = GetFileSources(sourceFXS,"signal");
  if (list && list->GetEntries()>0) {

    //  loop through all files from LDCs
    
    int changes = 0;
    UInt_t index = 0;
    while (list->At(index)!=NULL) {
      TObjString* fileNameEntry = (TObjString*) list->At(index);
      if (fileNameEntry!=NULL) {
        TString fileName = GetFile(sourceFXS, "signal",
				   fileNameEntry->GetString().Data());
        TFile *f = TFile::Open(fileName);
        if (!f) {
	  Log ("Error opening signal file.");
	  result = kReturnCodeNoObject;
	  break;
	}
	AliCaloCalibSignal *calSig;
	f->GetObject("emcCalibSignal",calSig);
        if ( !calSig ) {
	  Log ("No signal calibration object in file.");
	  result = kReturnCodeNoObject;
	  break;
	}
	if ( calSig->GetNEvents()>0 ) {
	  // add info for the modules available in the present file
	  Bool_t status = calibSig->AddInfo(calSig);
	  if (status) { changes++; }
	}
	
        delete calSig; 
        f->Close();
      }
      index++;
    }  // while(list)
    
    //
    //  Store updated signal entry to OCDB
    //
    if (changes>0) {
      AliCDBMetaData metaData;
      metaData.SetBeamPeriod(0);
      metaData.SetResponsible(kMetaResponsible);
      metaData.SetComment(kMetaComment); 
      
      Bool_t storeOK = Store("Calib", "LED", calibSig, &metaData, 0, kFALSE);
      if ( !storeOK ) result++;
    }
  } 
  else {
    Log ("Error: no entries in input file list!");
    result = kReturnCodeNoEntries;
  }

  return result;
}


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