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$

#include "AliMUONPedestalSubprocessor.h"

#include "AliCDBMetaData.h"
#include "AliCDBEntry.h"
#include "AliDAQ.h"
#include "AliLog.h"
#include "AliMUON2DMap.h"
#include "AliMUON2DStoreValidator.h"
#include "AliMUONCalibParamNF.h"
#include "AliMUONPreprocessor.h"
#include "AliMUONTrackerIO.h"
#include "AliMpConstants.h"
#include "AliMpDDLStore.h"
#include "TObjString.h"
#include <Riostream.h>
#include <TList.h>
#include <TObjString.h>
#include <TSystem.h>
#include <sstream>

//-----------------------------------------------------------------------------
/// \class AliMUONPedestalSubprocessor
///
/// Implementation of AliMUONVSubprocessor class to deal with MUON TRK pedestals.
///
/// Pedestals are read in from an ascii file, with the format :               \n
///---------------------------------------------------------------------------\n
/// BUS_PATCH MANU_ADDR CHANNEL      MEAN       SIGMA                         \n
///---------------------------------------------------------------------------\n
///
/// \author L. Aphecetche
//-----------------------------------------------------------------------------

/// \cond CLASSIMP
ClassImp(AliMUONPedestalSubprocessor)
/// \endcond

//_____________________________________________________________________________
AliMUONPedestalSubprocessor::AliMUONPedestalSubprocessor(AliMUONPreprocessor* master)
: AliMUONVSubprocessor(master,
                       "Pedestals",
                       "Upload MUON Tracker pedestals to OCDB"),
fPedestals(0x0),
fConfig(0x0),
fConfigChanged(kFALSE),
fTooFewEvents(kFALSE)
{
  /// default ctor
}

//_____________________________________________________________________________
AliMUONPedestalSubprocessor::~AliMUONPedestalSubprocessor()
{
  /// dtor
  delete fPedestals;
  delete fConfig;
}

//_____________________________________________________________________________
Bool_t
AliMUONPedestalSubprocessor::HasConfigChanged(const AliMUONVStore& newConfig) const
{
  /// Check whether the config changed. 
  /// Any error will return kTRUE to trig a config upload (safer way).
  
  AliCDBEntry* entry = Master()->GetFromOCDB("Calib","Config");
  if (!entry)
  {
    AliError("Could not get MUON/Calib/Config entry for current run ! That's not OK !");
    return kTRUE;
  }
  AliMUONVStore* oldConfig = dynamic_cast<AliMUONVStore*>(entry->GetObject());
  if (!oldConfig)
  {
    AliError("Could not get MUON/Calib/Config object for current run (wrong type ?) ! That's not OK !");
    return kTRUE;
  }
  
  if ( oldConfig->GetSize() != newConfig.GetSize() ) 
  {
    return kTRUE;
  }
  
  TIter next(oldConfig->CreateIterator());
  AliMUONVCalibParam* old;
  
  while ( ( old = static_cast<AliMUONVCalibParam*>(next()) ) )
  {
    Int_t detElemId = old->ID0();
    Int_t manuId = old->ID1();
    
    if ( ! newConfig.FindObject(detElemId,manuId) )
    {
      // not found in new. Configurations are different. Return right now.
      return kTRUE;
    }
  }
  
  // all tests OK. Configuration has not changed.
  return kFALSE;
}


//_____________________________________________________________________________
Bool_t 
AliMUONPedestalSubprocessor::Initialize(Int_t run, UInt_t startTime, UInt_t endTime)
{
  /// When starting a new run, reads in the pedestals ASCII files.
  
  const Int_t kSystem = AliMUONPreprocessor::kDAQ;
  const char* kId = "PEDESTALS";
  
  delete fPedestals;
  fPedestals = new AliMUON2DMap(kTRUE);
  
  delete fConfig;
  fConfig = new AliMUON2DMap(kTRUE);
  
  fTooFewEvents = kFALSE;
  
  Master()->Log(Form("Reading pedestal files for Run %d startTime %u endTime %u",
                     run,startTime,endTime));
  
  TList* sources = Master()->GetFileSources(kSystem,kId);
  TIter next(sources);
  TObjString* o(0x0);
  Int_t n(0);
  Int_t npedFiles(0);
  
  while ( ( o = static_cast<TObjString*>(next()) ) )
  {
    TString fileName(Master()->GetFile(kSystem,kId,o->GetName()));
    Int_t ok = ReadPedestalFile(fileName.Data());
    if (ok>0)
    {
      n += ok;
      ++npedFiles;
    }
  }

  delete sources;
  
  if (!n)
  {
    Master()->Log("Failed to read any pedestals");

    delete fPedestals;
    fPedestals = 0;
    delete fConfig;
    fConfig = 0;

    // OK, we did not get our pedestals. Check if the ped run itself
    // was bad, i.e. too few events
    TString nevents(Master()->GetRunParameter("totalEvents"));
    
    if ( nevents.Atoi() < 50 ) 
    {
      Master()->Log(Form("The run had only %d events, so the failure to read pedestals is normal",nevents.Atoi()));
      // too few events, failure is normal, returns OK.
      fTooFewEvents = kTRUE;
      return kTRUE;
    }
    
    // no ped, but run looks clean, that's an error
    return kFALSE;
  }
  
  const char* kIdConf = "CONFIG";

  sources = Master()->GetFileSources(kSystem,kIdConf);
  TIter nextConf(sources);
  Int_t nconf(0);
  Int_t nconfFiles(0);
  
  while ( ( o = static_cast<TObjString*>(nextConf()) ) )
  {
    TString fileName(Master()->GetFile(kSystem,kIdConf,o->GetName()));
    Int_t ok = ReadConfigFile(fileName.Data());
    if (ok>0)
    {
      nconf += ok;
      ++nconfFiles;
    }
  }
  
  delete sources;
  
  if ( npedFiles != nconfFiles )
  {
    Master()->Log(Form("ERROR : Number of config files (%d) different from number of pedestal files (%d)",nconfFiles,npedFiles));
    delete fPedestals;
    fPedestals = 0;
    delete fConfig;
    fConfig = 0;
    return kFALSE;
  }
  
  fConfigChanged = HasConfigChanged(*fConfig);
  
  return kTRUE;
}

//_____________________________________________________________________________
UInt_t 
AliMUONPedestalSubprocessor::Process(TMap* /*dcsAliasMap*/)
{
  /// Store the pedestals into the CDB
  
  if (!fPedestals || !fConfig) 
  {
    if ( fTooFewEvents ) 
    {
      // ped run was too short, no reason to complain about that, it's "normal" 
      // not to have pedestals in that case.
      return 0;
    }
    else
    {
      // this is the only reason to fail for the moment : getting no pedestal or no config
      // at all.
      return 1;
    }
  }
    
  AliMUON2DStoreValidator validator;

  Master()->Log("Validating");

  TObjArray* chambers = validator.Validate(*fPedestals,fConfig);
  
  if (chambers)
  {
    // we hereby report what's missing, but this is not a reason to fail ;-)
    // the only reason to fail would be if we got no pedestal at all
    TList lines;
    lines.SetOwner(kTRUE);
  
    validator.Report(lines,*chambers);
  
    TIter next(&lines);
    TObjString* line;
  
    while ( ( line = static_cast<TObjString*>(next()) ) )
    {
      Master()->Log(line->String().Data());
    }
  }
  
  Master()->Log("Storing pedestals...");
  if ( fConfigChanged ) 
  {
    Master()->Log("...and configuration, as it has changed");
  }
  
  AliCDBMetaData metaData;
	metaData.SetBeamPeriod(0);
	metaData.SetResponsible("MUON TRK");
  TString comment("Computed by AliMUONPedestalSubprocessor $Id$");
  comment.ReplaceAll("$","");
	metaData.SetComment(comment.Data());
  
  Bool_t validToInfinity = kTRUE;
	Bool_t result = Master()->Store("Calib", "Pedestals", fPedestals, &metaData, 0, validToInfinity);
  if ( fConfigChanged ) 
  {
    result = result && Master()->Store("Calib", "Config", fConfig, &metaData, 0, validToInfinity);
  }
  return ( result != kTRUE ); // return 0 if everything is ok.  
}

//_____________________________________________________________________________
Int_t
AliMUONPedestalSubprocessor::ReadPedestalFile(const char* filename)
{
  /// Read the pedestals from an ASCII file.                                  \n
  /// Format of that file is one line per channel :                           \n
  ///-------------------------------------------------------------------------\n
  /// BUS_PATCH MANU_ADDR CHANNEL      MEAN       SIGMA                       \n
  ///-------------------------------------------------------------------------\n
  ///                                                                         \n
  /// Return kFALSE if reading was not successfull.                           \n
  ///
  
  TString sFilename(gSystem->ExpandPathName(filename));
  
  Master()->Log(Form("Reading %s",sFilename.Data()));
  
  Int_t n = AliMUONTrackerIO::ReadPedestals(sFilename.Data(),*fPedestals);
  
  switch (n)
  {
    case -1:
      Master()->Log(Form("Could not open %s",sFilename.Data()));
      break;
  }
  
  return n;
}

//_____________________________________________________________________________
Int_t
AliMUONPedestalSubprocessor::ReadConfigFile(const char* filename)
{
  /// Read the configuration from an ASCII file.                              
  /// Format of that file is one line per manu :                              
  /// BUS_PATCH MANU_ADDR
  /// Return kFALSE if reading was not successfull.                           
  ///
  
  TString sFilename(gSystem->ExpandPathName(filename));
  
  Master()->Log(Form("Reading %s",sFilename.Data()));
  
  Int_t n = AliMUONTrackerIO::ReadConfig(sFilename.Data(),*fConfig);
  
  switch (n)
  {
    case -1:
      Master()->Log(Form("Could not open %s",sFilename.Data()));
      break;
  }
  
  return n;
}


//_____________________________________________________________________________
void
AliMUONPedestalSubprocessor::Print(Option_t* opt) const
{
  /// ouput to screen
  if (fPedestals) fPedestals->Print("",opt);
  if (fConfig) fConfig->Print("",opt);
}

 AliMUONPedestalSubprocessor.cxx:1
 AliMUONPedestalSubprocessor.cxx:2
 AliMUONPedestalSubprocessor.cxx:3
 AliMUONPedestalSubprocessor.cxx:4
 AliMUONPedestalSubprocessor.cxx:5
 AliMUONPedestalSubprocessor.cxx:6
 AliMUONPedestalSubprocessor.cxx:7
 AliMUONPedestalSubprocessor.cxx:8
 AliMUONPedestalSubprocessor.cxx:9
 AliMUONPedestalSubprocessor.cxx:10
 AliMUONPedestalSubprocessor.cxx:11
 AliMUONPedestalSubprocessor.cxx:12
 AliMUONPedestalSubprocessor.cxx:13
 AliMUONPedestalSubprocessor.cxx:14
 AliMUONPedestalSubprocessor.cxx:15
 AliMUONPedestalSubprocessor.cxx:16
 AliMUONPedestalSubprocessor.cxx:17
 AliMUONPedestalSubprocessor.cxx:18
 AliMUONPedestalSubprocessor.cxx:19
 AliMUONPedestalSubprocessor.cxx:20
 AliMUONPedestalSubprocessor.cxx:21
 AliMUONPedestalSubprocessor.cxx:22
 AliMUONPedestalSubprocessor.cxx:23
 AliMUONPedestalSubprocessor.cxx:24
 AliMUONPedestalSubprocessor.cxx:25
 AliMUONPedestalSubprocessor.cxx:26
 AliMUONPedestalSubprocessor.cxx:27
 AliMUONPedestalSubprocessor.cxx:28
 AliMUONPedestalSubprocessor.cxx:29
 AliMUONPedestalSubprocessor.cxx:30
 AliMUONPedestalSubprocessor.cxx:31
 AliMUONPedestalSubprocessor.cxx:32
 AliMUONPedestalSubprocessor.cxx:33
 AliMUONPedestalSubprocessor.cxx:34
 AliMUONPedestalSubprocessor.cxx:35
 AliMUONPedestalSubprocessor.cxx:36
 AliMUONPedestalSubprocessor.cxx:37
 AliMUONPedestalSubprocessor.cxx:38
 AliMUONPedestalSubprocessor.cxx:39
 AliMUONPedestalSubprocessor.cxx:40
 AliMUONPedestalSubprocessor.cxx:41
 AliMUONPedestalSubprocessor.cxx:42
 AliMUONPedestalSubprocessor.cxx:43
 AliMUONPedestalSubprocessor.cxx:44
 AliMUONPedestalSubprocessor.cxx:45
 AliMUONPedestalSubprocessor.cxx:46
 AliMUONPedestalSubprocessor.cxx:47
 AliMUONPedestalSubprocessor.cxx:48
 AliMUONPedestalSubprocessor.cxx:49
 AliMUONPedestalSubprocessor.cxx:50
 AliMUONPedestalSubprocessor.cxx:51
 AliMUONPedestalSubprocessor.cxx:52
 AliMUONPedestalSubprocessor.cxx:53
 AliMUONPedestalSubprocessor.cxx:54
 AliMUONPedestalSubprocessor.cxx:55
 AliMUONPedestalSubprocessor.cxx:56
 AliMUONPedestalSubprocessor.cxx:57
 AliMUONPedestalSubprocessor.cxx:58
 AliMUONPedestalSubprocessor.cxx:59
 AliMUONPedestalSubprocessor.cxx:60
 AliMUONPedestalSubprocessor.cxx:61
 AliMUONPedestalSubprocessor.cxx:62
 AliMUONPedestalSubprocessor.cxx:63
 AliMUONPedestalSubprocessor.cxx:64
 AliMUONPedestalSubprocessor.cxx:65
 AliMUONPedestalSubprocessor.cxx:66
 AliMUONPedestalSubprocessor.cxx:67
 AliMUONPedestalSubprocessor.cxx:68
 AliMUONPedestalSubprocessor.cxx:69
 AliMUONPedestalSubprocessor.cxx:70
 AliMUONPedestalSubprocessor.cxx:71
 AliMUONPedestalSubprocessor.cxx:72
 AliMUONPedestalSubprocessor.cxx:73
 AliMUONPedestalSubprocessor.cxx:74
 AliMUONPedestalSubprocessor.cxx:75
 AliMUONPedestalSubprocessor.cxx:76
 AliMUONPedestalSubprocessor.cxx:77
 AliMUONPedestalSubprocessor.cxx:78
 AliMUONPedestalSubprocessor.cxx:79
 AliMUONPedestalSubprocessor.cxx:80
 AliMUONPedestalSubprocessor.cxx:81
 AliMUONPedestalSubprocessor.cxx:82
 AliMUONPedestalSubprocessor.cxx:83
 AliMUONPedestalSubprocessor.cxx:84
 AliMUONPedestalSubprocessor.cxx:85
 AliMUONPedestalSubprocessor.cxx:86
 AliMUONPedestalSubprocessor.cxx:87
 AliMUONPedestalSubprocessor.cxx:88
 AliMUONPedestalSubprocessor.cxx:89
 AliMUONPedestalSubprocessor.cxx:90
 AliMUONPedestalSubprocessor.cxx:91
 AliMUONPedestalSubprocessor.cxx:92
 AliMUONPedestalSubprocessor.cxx:93
 AliMUONPedestalSubprocessor.cxx:94
 AliMUONPedestalSubprocessor.cxx:95
 AliMUONPedestalSubprocessor.cxx:96
 AliMUONPedestalSubprocessor.cxx:97
 AliMUONPedestalSubprocessor.cxx:98
 AliMUONPedestalSubprocessor.cxx:99
 AliMUONPedestalSubprocessor.cxx:100
 AliMUONPedestalSubprocessor.cxx:101
 AliMUONPedestalSubprocessor.cxx:102
 AliMUONPedestalSubprocessor.cxx:103
 AliMUONPedestalSubprocessor.cxx:104
 AliMUONPedestalSubprocessor.cxx:105
 AliMUONPedestalSubprocessor.cxx:106
 AliMUONPedestalSubprocessor.cxx:107
 AliMUONPedestalSubprocessor.cxx:108
 AliMUONPedestalSubprocessor.cxx:109
 AliMUONPedestalSubprocessor.cxx:110
 AliMUONPedestalSubprocessor.cxx:111
 AliMUONPedestalSubprocessor.cxx:112
 AliMUONPedestalSubprocessor.cxx:113
 AliMUONPedestalSubprocessor.cxx:114
 AliMUONPedestalSubprocessor.cxx:115
 AliMUONPedestalSubprocessor.cxx:116
 AliMUONPedestalSubprocessor.cxx:117
 AliMUONPedestalSubprocessor.cxx:118
 AliMUONPedestalSubprocessor.cxx:119
 AliMUONPedestalSubprocessor.cxx:120
 AliMUONPedestalSubprocessor.cxx:121
 AliMUONPedestalSubprocessor.cxx:122
 AliMUONPedestalSubprocessor.cxx:123
 AliMUONPedestalSubprocessor.cxx:124
 AliMUONPedestalSubprocessor.cxx:125
 AliMUONPedestalSubprocessor.cxx:126
 AliMUONPedestalSubprocessor.cxx:127
 AliMUONPedestalSubprocessor.cxx:128
 AliMUONPedestalSubprocessor.cxx:129
 AliMUONPedestalSubprocessor.cxx:130
 AliMUONPedestalSubprocessor.cxx:131
 AliMUONPedestalSubprocessor.cxx:132
 AliMUONPedestalSubprocessor.cxx:133
 AliMUONPedestalSubprocessor.cxx:134
 AliMUONPedestalSubprocessor.cxx:135
 AliMUONPedestalSubprocessor.cxx:136
 AliMUONPedestalSubprocessor.cxx:137
 AliMUONPedestalSubprocessor.cxx:138
 AliMUONPedestalSubprocessor.cxx:139
 AliMUONPedestalSubprocessor.cxx:140
 AliMUONPedestalSubprocessor.cxx:141
 AliMUONPedestalSubprocessor.cxx:142
 AliMUONPedestalSubprocessor.cxx:143
 AliMUONPedestalSubprocessor.cxx:144
 AliMUONPedestalSubprocessor.cxx:145
 AliMUONPedestalSubprocessor.cxx:146
 AliMUONPedestalSubprocessor.cxx:147
 AliMUONPedestalSubprocessor.cxx:148
 AliMUONPedestalSubprocessor.cxx:149
 AliMUONPedestalSubprocessor.cxx:150
 AliMUONPedestalSubprocessor.cxx:151
 AliMUONPedestalSubprocessor.cxx:152
 AliMUONPedestalSubprocessor.cxx:153
 AliMUONPedestalSubprocessor.cxx:154
 AliMUONPedestalSubprocessor.cxx:155
 AliMUONPedestalSubprocessor.cxx:156
 AliMUONPedestalSubprocessor.cxx:157
 AliMUONPedestalSubprocessor.cxx:158
 AliMUONPedestalSubprocessor.cxx:159
 AliMUONPedestalSubprocessor.cxx:160
 AliMUONPedestalSubprocessor.cxx:161
 AliMUONPedestalSubprocessor.cxx:162
 AliMUONPedestalSubprocessor.cxx:163
 AliMUONPedestalSubprocessor.cxx:164
 AliMUONPedestalSubprocessor.cxx:165
 AliMUONPedestalSubprocessor.cxx:166
 AliMUONPedestalSubprocessor.cxx:167
 AliMUONPedestalSubprocessor.cxx:168
 AliMUONPedestalSubprocessor.cxx:169
 AliMUONPedestalSubprocessor.cxx:170
 AliMUONPedestalSubprocessor.cxx:171
 AliMUONPedestalSubprocessor.cxx:172
 AliMUONPedestalSubprocessor.cxx:173
 AliMUONPedestalSubprocessor.cxx:174
 AliMUONPedestalSubprocessor.cxx:175
 AliMUONPedestalSubprocessor.cxx:176
 AliMUONPedestalSubprocessor.cxx:177
 AliMUONPedestalSubprocessor.cxx:178
 AliMUONPedestalSubprocessor.cxx:179
 AliMUONPedestalSubprocessor.cxx:180
 AliMUONPedestalSubprocessor.cxx:181
 AliMUONPedestalSubprocessor.cxx:182
 AliMUONPedestalSubprocessor.cxx:183
 AliMUONPedestalSubprocessor.cxx:184
 AliMUONPedestalSubprocessor.cxx:185
 AliMUONPedestalSubprocessor.cxx:186
 AliMUONPedestalSubprocessor.cxx:187
 AliMUONPedestalSubprocessor.cxx:188
 AliMUONPedestalSubprocessor.cxx:189
 AliMUONPedestalSubprocessor.cxx:190
 AliMUONPedestalSubprocessor.cxx:191
 AliMUONPedestalSubprocessor.cxx:192
 AliMUONPedestalSubprocessor.cxx:193
 AliMUONPedestalSubprocessor.cxx:194
 AliMUONPedestalSubprocessor.cxx:195
 AliMUONPedestalSubprocessor.cxx:196
 AliMUONPedestalSubprocessor.cxx:197
 AliMUONPedestalSubprocessor.cxx:198
 AliMUONPedestalSubprocessor.cxx:199
 AliMUONPedestalSubprocessor.cxx:200
 AliMUONPedestalSubprocessor.cxx:201
 AliMUONPedestalSubprocessor.cxx:202
 AliMUONPedestalSubprocessor.cxx:203
 AliMUONPedestalSubprocessor.cxx:204
 AliMUONPedestalSubprocessor.cxx:205
 AliMUONPedestalSubprocessor.cxx:206
 AliMUONPedestalSubprocessor.cxx:207
 AliMUONPedestalSubprocessor.cxx:208
 AliMUONPedestalSubprocessor.cxx:209
 AliMUONPedestalSubprocessor.cxx:210
 AliMUONPedestalSubprocessor.cxx:211
 AliMUONPedestalSubprocessor.cxx:212
 AliMUONPedestalSubprocessor.cxx:213
 AliMUONPedestalSubprocessor.cxx:214
 AliMUONPedestalSubprocessor.cxx:215
 AliMUONPedestalSubprocessor.cxx:216
 AliMUONPedestalSubprocessor.cxx:217
 AliMUONPedestalSubprocessor.cxx:218
 AliMUONPedestalSubprocessor.cxx:219
 AliMUONPedestalSubprocessor.cxx:220
 AliMUONPedestalSubprocessor.cxx:221
 AliMUONPedestalSubprocessor.cxx:222
 AliMUONPedestalSubprocessor.cxx:223
 AliMUONPedestalSubprocessor.cxx:224
 AliMUONPedestalSubprocessor.cxx:225
 AliMUONPedestalSubprocessor.cxx:226
 AliMUONPedestalSubprocessor.cxx:227
 AliMUONPedestalSubprocessor.cxx:228
 AliMUONPedestalSubprocessor.cxx:229
 AliMUONPedestalSubprocessor.cxx:230
 AliMUONPedestalSubprocessor.cxx:231
 AliMUONPedestalSubprocessor.cxx:232
 AliMUONPedestalSubprocessor.cxx:233
 AliMUONPedestalSubprocessor.cxx:234
 AliMUONPedestalSubprocessor.cxx:235
 AliMUONPedestalSubprocessor.cxx:236
 AliMUONPedestalSubprocessor.cxx:237
 AliMUONPedestalSubprocessor.cxx:238
 AliMUONPedestalSubprocessor.cxx:239
 AliMUONPedestalSubprocessor.cxx:240
 AliMUONPedestalSubprocessor.cxx:241
 AliMUONPedestalSubprocessor.cxx:242
 AliMUONPedestalSubprocessor.cxx:243
 AliMUONPedestalSubprocessor.cxx:244
 AliMUONPedestalSubprocessor.cxx:245
 AliMUONPedestalSubprocessor.cxx:246
 AliMUONPedestalSubprocessor.cxx:247
 AliMUONPedestalSubprocessor.cxx:248
 AliMUONPedestalSubprocessor.cxx:249
 AliMUONPedestalSubprocessor.cxx:250
 AliMUONPedestalSubprocessor.cxx:251
 AliMUONPedestalSubprocessor.cxx:252
 AliMUONPedestalSubprocessor.cxx:253
 AliMUONPedestalSubprocessor.cxx:254
 AliMUONPedestalSubprocessor.cxx:255
 AliMUONPedestalSubprocessor.cxx:256
 AliMUONPedestalSubprocessor.cxx:257
 AliMUONPedestalSubprocessor.cxx:258
 AliMUONPedestalSubprocessor.cxx:259
 AliMUONPedestalSubprocessor.cxx:260
 AliMUONPedestalSubprocessor.cxx:261
 AliMUONPedestalSubprocessor.cxx:262
 AliMUONPedestalSubprocessor.cxx:263
 AliMUONPedestalSubprocessor.cxx:264
 AliMUONPedestalSubprocessor.cxx:265
 AliMUONPedestalSubprocessor.cxx:266
 AliMUONPedestalSubprocessor.cxx:267
 AliMUONPedestalSubprocessor.cxx:268
 AliMUONPedestalSubprocessor.cxx:269
 AliMUONPedestalSubprocessor.cxx:270
 AliMUONPedestalSubprocessor.cxx:271
 AliMUONPedestalSubprocessor.cxx:272
 AliMUONPedestalSubprocessor.cxx:273
 AliMUONPedestalSubprocessor.cxx:274
 AliMUONPedestalSubprocessor.cxx:275
 AliMUONPedestalSubprocessor.cxx:276
 AliMUONPedestalSubprocessor.cxx:277
 AliMUONPedestalSubprocessor.cxx:278
 AliMUONPedestalSubprocessor.cxx:279
 AliMUONPedestalSubprocessor.cxx:280
 AliMUONPedestalSubprocessor.cxx:281
 AliMUONPedestalSubprocessor.cxx:282
 AliMUONPedestalSubprocessor.cxx:283
 AliMUONPedestalSubprocessor.cxx:284
 AliMUONPedestalSubprocessor.cxx:285
 AliMUONPedestalSubprocessor.cxx:286
 AliMUONPedestalSubprocessor.cxx:287
 AliMUONPedestalSubprocessor.cxx:288
 AliMUONPedestalSubprocessor.cxx:289
 AliMUONPedestalSubprocessor.cxx:290
 AliMUONPedestalSubprocessor.cxx:291
 AliMUONPedestalSubprocessor.cxx:292
 AliMUONPedestalSubprocessor.cxx:293
 AliMUONPedestalSubprocessor.cxx:294
 AliMUONPedestalSubprocessor.cxx:295
 AliMUONPedestalSubprocessor.cxx:296
 AliMUONPedestalSubprocessor.cxx:297
 AliMUONPedestalSubprocessor.cxx:298
 AliMUONPedestalSubprocessor.cxx:299
 AliMUONPedestalSubprocessor.cxx:300
 AliMUONPedestalSubprocessor.cxx:301
 AliMUONPedestalSubprocessor.cxx:302
 AliMUONPedestalSubprocessor.cxx:303
 AliMUONPedestalSubprocessor.cxx:304
 AliMUONPedestalSubprocessor.cxx:305
 AliMUONPedestalSubprocessor.cxx:306
 AliMUONPedestalSubprocessor.cxx:307
 AliMUONPedestalSubprocessor.cxx:308
 AliMUONPedestalSubprocessor.cxx:309
 AliMUONPedestalSubprocessor.cxx:310
 AliMUONPedestalSubprocessor.cxx:311
 AliMUONPedestalSubprocessor.cxx:312
 AliMUONPedestalSubprocessor.cxx:313
 AliMUONPedestalSubprocessor.cxx:314
 AliMUONPedestalSubprocessor.cxx:315
 AliMUONPedestalSubprocessor.cxx:316
 AliMUONPedestalSubprocessor.cxx:317
 AliMUONPedestalSubprocessor.cxx:318
 AliMUONPedestalSubprocessor.cxx:319
 AliMUONPedestalSubprocessor.cxx:320
 AliMUONPedestalSubprocessor.cxx:321
 AliMUONPedestalSubprocessor.cxx:322
 AliMUONPedestalSubprocessor.cxx:323
 AliMUONPedestalSubprocessor.cxx:324
 AliMUONPedestalSubprocessor.cxx:325
 AliMUONPedestalSubprocessor.cxx:326
 AliMUONPedestalSubprocessor.cxx:327
 AliMUONPedestalSubprocessor.cxx:328
 AliMUONPedestalSubprocessor.cxx:329
 AliMUONPedestalSubprocessor.cxx:330
 AliMUONPedestalSubprocessor.cxx:331
 AliMUONPedestalSubprocessor.cxx:332
 AliMUONPedestalSubprocessor.cxx:333
 AliMUONPedestalSubprocessor.cxx:334
 AliMUONPedestalSubprocessor.cxx:335
 AliMUONPedestalSubprocessor.cxx:336
 AliMUONPedestalSubprocessor.cxx:337
 AliMUONPedestalSubprocessor.cxx:338
 AliMUONPedestalSubprocessor.cxx:339
 AliMUONPedestalSubprocessor.cxx:340
 AliMUONPedestalSubprocessor.cxx:341
 AliMUONPedestalSubprocessor.cxx:342
 AliMUONPedestalSubprocessor.cxx:343
 AliMUONPedestalSubprocessor.cxx:344
 AliMUONPedestalSubprocessor.cxx:345
 AliMUONPedestalSubprocessor.cxx:346
 AliMUONPedestalSubprocessor.cxx:347
 AliMUONPedestalSubprocessor.cxx:348
 AliMUONPedestalSubprocessor.cxx:349
 AliMUONPedestalSubprocessor.cxx:350
 AliMUONPedestalSubprocessor.cxx:351
 AliMUONPedestalSubprocessor.cxx:352