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$

//-----------------------------------------------------------------------------
/// \class AliMUONPadStatusMaker
///
/// Make a 2DStore of pad statuses, using different sources of information,
/// like pedestal values, gain values, and HV values.
///
/// \author Laurent Aphecetche
//-----------------------------------------------------------------------------

#include "AliMUONPadStatusMaker.h"

#include "AliMUON2DMap.h"
#include "AliMUON2DStoreValidator.h"
#include "AliMUONCalibParamNI.h"
#include "AliMUONCalibrationData.h"
#include "AliMUONLogger.h"
#include "AliMUONRecoParam.h"
#include "AliMUONStringIntMap.h"
#include "AliMUONTrackerData.h"
#include "AliMUONVCalibParam.h"

#include "AliMpArea.h"
#include "AliMpArrayI.h"
#include "AliMpCDB.h"
#include "AliMpConstants.h"
#include "AliMpDDLStore.h"
#include "AliMpDEManager.h"
#include "AliMpDetElement.h"
#include "AliMpDCSNamer.h"
#include "AliMpManuIterator.h"
#include "AliMpManuUID.h"

#include "AliCDBEntry.h"
#include "AliCDBManager.h"
#include "AliCodeTimer.h"
#include "AliDCSValue.h"
#include "AliLog.h"

#include <Riostream.h>
#include <TArrayI.h>
#include <TExMap.h>
#include <TFile.h>
#include <TKey.h>
#include <TMap.h>
#include <TROOT.h>
#include <TString.h>
#include <TSystem.h>

using std::cout;
using std::endl;
/// \cond CLASSIMP
ClassImp(AliMUONPadStatusMaker)
/// \endcond

//_____________________________________________________________________________
AliMUONPadStatusMaker::AliMUONPadStatusMaker(const AliMUONCalibrationData& calibData)
: fkCalibrationData(calibData),
fGainA1Limits(0,1E30),
fGainA2Limits(-1E-30,1E30),
fGainThresLimits(0,4095),
fPedMeanLimits(0,4095),
fPedSigmaLimits(0,4095),
fManuOccupancyLimits(0,1.0),
fBuspatchOccupancyLimits(0,1.0),
fDEOccupancyLimits(0,1.0),
fStatus(new AliMUON2DMap(true)),
fHV(0x0),
fPedestals(calibData.Pedestals()),
fGains(calibData.Gains()),
fTrackerData(0x0)
{
  /// ctor
  if ( calibData.OccupancyMap() )
  {
    /// create a tracker data from the occupancy map
    fTrackerData = new AliMUONTrackerData("OCC","OCC",*(calibData.OccupancyMap()));
  }     
  if ( calibData.HV() )
  {
    /// Only create the fHV internal store if there are some HV values available
    fHV = new TExMap;
  }
  
  SetHVLimit(-1,0.0);
}

//_____________________________________________________________________________
AliMUONPadStatusMaker::~AliMUONPadStatusMaker()
{
  /// dtor.
 
  delete fStatus;
  delete fHV;
  delete fTrackerData;
}

//_____________________________________________________________________________
TString
AliMUONPadStatusMaker::AsString(Int_t status)
{
  /// return a human readable version of the integer status
  
  if ( status == 0 ) 
  {
    return "Brave New World";
  }
  
  Int_t pedStatus;
  Int_t gainStatus;
  Int_t hvStatus;
  Int_t occStatus;
  
  DecodeStatus(status,pedStatus,hvStatus,gainStatus,occStatus);
  
  TString s;
  
  if ( pedStatus & kPedMeanZero ) s += "& Ped Mean is Zero ";
  if ( pedStatus & kPedMeanTooLow ) s += "& Ped Mean Too Low ";
  if ( pedStatus & kPedMeanTooHigh ) s += "& Ped Mean Too High ";
  if ( pedStatus & kPedSigmaTooLow ) s += "& Ped Sigma Too Low ";
  if ( pedStatus & kPedSigmaTooHigh ) s += "& Ped Sigma Too High ";
  if ( pedStatus & kPedMissing ) s += "& Ped is missing ";
  
	if ( gainStatus & kGainA1TooLow ) s+="& Gain A1 is Too Low ";
	if ( gainStatus & kGainA1TooHigh ) s+="& Gain A1 is Too High ";
	if ( gainStatus & kGainA2TooLow ) s+="& Gain A2 is Too Low ";
	if ( gainStatus & kGainA2TooHigh ) s+="& Gain A2 is Too High ";
	if ( gainStatus & kGainThresTooLow ) s+="& Gain Thres is Too Low ";
	if ( gainStatus & kGainThresTooHigh ) s+="& Gain Thres is Too High ";
	if ( gainStatus & kGainMissing ) s+="& Gain is missing ";
	
	if ( hvStatus & kHVError ) s+="& HV is on error ";
	if ( hvStatus & kHVTooLow ) s+="& HV is Too Low ";
	if ( hvStatus & kHVTooHigh ) s+="& HV is Too High ";
	if ( hvStatus & kHVChannelOFF ) s+="& HV has channel OFF ";
	if ( hvStatus & kHVSwitchOFF ) s+="& HV has switch OFF ";
	if ( hvStatus & kHVMissing ) s+="& HV is missing ";

  if ( occStatus & kManuOccupancyTooHigh ) s+="& manu occupancy too high ";
  if ( occStatus & kManuOccupancyTooLow ) s+="& manu occupancy too low ";
  if ( occStatus & kBusPatchOccupancyTooHigh ) s+="& bus patch occupancy too high ";
  if ( occStatus & kBusPatchOccupancyTooLow ) s+="& bus patch occupancy too low ";
  if ( occStatus & kDEOccupancyTooHigh ) s+="& DE occupancy too high ";
  if ( occStatus & kDEOccupancyTooLow ) s+="& DE occupancy too low ";
  
  if ( s[0] == '&' ) s[0] = ' ';
  
  return s;
}

//_____________________________________________________________________________
TString
AliMUONPadStatusMaker::AsCondition(Int_t mask)
{
  /// return a human readable version of the mask's equivalent condition
  
  TString s(AsString(mask));
  
  s.ReplaceAll("&","|");
  
  return s;
}

//_____________________________________________________________________________
Int_t
AliMUONPadStatusMaker::BuildStatus(Int_t pedStatus, 
                                   Int_t hvStatus, 
                                   Int_t gainStatus,
                                   Int_t occStatus)
{
  /// Build a complete status from specific parts (ped,hv,gain)
  
  return ( hvStatus & 0xFF ) | ( ( pedStatus & 0xFF ) << 8 ) | 
  ( ( gainStatus & 0xFF ) << 16 ) |
  ( ( occStatus & 0xFF ) << 24 ) ;
}

//_____________________________________________________________________________
void
AliMUONPadStatusMaker::DecodeStatus(Int_t status, 
                                    Int_t& pedStatus, 
                                    Int_t& hvStatus, 
                                    Int_t& gainStatus,
                                    Int_t& occStatus)
{
  /// Decode complete status into specific parts (ped,hv,gain)
  
  occStatus = ( status & 0xFF000000 ) >> 24;
  gainStatus = ( status & 0xFF0000 ) >> 16;
  pedStatus = ( status & 0xFF00 ) >> 8;
  hvStatus = (status & 0xFF);
}

//_____________________________________________________________________________
Bool_t 
AliMUONPadStatusMaker::HVSt12Status(Int_t detElemId, Int_t sector,
                                    Bool_t& hvChannelTooLow,
                                    Bool_t& hvChannelTooHigh,
                                    Bool_t& hvChannelON) const
{
  /// Get HV status for one HV sector of St12
  
  /// For a given PCB in a given DE, get the HV status (both the channel
  /// and the switch).
  /// Returns false if hv switch changed during the run.
  
  AliCodeTimerAuto("",0)
  
  if (!fHV) return kFALSE;
  
  Bool_t error = kFALSE;
  hvChannelTooLow = kFALSE;
  hvChannelTooHigh = kFALSE;
  hvChannelON = kTRUE;

  Int_t chamberId = AliMpDEManager::GetChamberId(detElemId);
  
  AliMpDCSNamer hvNamer("TRACKER");
  
  TString hvChannel(hvNamer.DCSAliasName(detElemId,sector));
  
  TMap* hvMap = fkCalibrationData.HV();
  TPair* hvPair = static_cast<TPair*>(hvMap->FindObject(hvChannel.Data()));
  if (!hvPair)
  {
    AliError(Form("Did not find expected alias (%s) for DE %d",
                  hvChannel.Data(),detElemId));  
    error = kTRUE;
  }
  else
  {
    TObjArray* values = static_cast<TObjArray*>(hvPair->Value());
    if (!values)
    {
      AliError(Form("Could not get values for alias %s",hvChannel.Data()));
      error = kTRUE;
    }
    else
    {
      // find out min value, and makes a cut
      Float_t hvMin(1E9);
      TIter next(values);
      AliDCSValue* val;
      
      while ( ( val = static_cast<AliDCSValue*>(next()) ) )
      {
        Float_t hv = val->GetFloat();
        hvMin = TMath::Min(hv,hvMin);
      }
      
      float lowThreshold = HVLimit(chamberId);
            
      if ( hvMin < lowThreshold ) hvChannelTooLow = kTRUE;
      if ( hvMin < hvNamer.TrackerHVOFF() ) hvChannelON = kFALSE;
    }
  }
  
  return error;
}

//_____________________________________________________________________________
Float_t
AliMUONPadStatusMaker::SwitchValue(const TObjArray& dcsArray)
{
  /// Loop over the dcs value for a single switch to decide whether
  /// we should consider it on or off
  
  // we'll count the number of ON/OFF for this pad, to insure
  // consistency (i.e. if status changed during the run, we should
  // at least notify this fact ;-) and hope it's not the norm)
  Int_t nTrue(0);
  Int_t nFalse(0);
  TIter next(&dcsArray);
  AliDCSValue* val;
  
  while ( ( val = static_cast<AliDCSValue*>(next()) ) )
  {
    if ( val->GetBool() )
    {
      ++nTrue;
    }
    else
    {
      ++nFalse;
    }
  }
  
  if ( (nTrue>0 && nFalse>0) )
  {
    // change of state during the run, consider it off
    return 0.0;
  }
  
  if ( nFalse ) 
  {
    /// switch = FALSE means the HV was flowding up to the PCB.
    /// i.e. switch = FALSE = ON
    return 1.0;    
  }
  
  return 0.0;
}

//_____________________________________________________________________________
Bool_t 
AliMUONPadStatusMaker::HVSt345Status(Int_t detElemId, Int_t pcbIndex,
                                     Bool_t& hvChannelTooLow,
                                     Bool_t& hvChannelTooHigh,
                                     Bool_t& hvChannelON,
                                     Bool_t& hvSwitchON) const
{
  /// For a given PCB in a given DE, get the HV status (both the channel
  /// and the switch).
  /// Returns false if something goes wrong (in particular if 
  /// hv switch changed during the run).
  
  AliCodeTimerAuto("",0)
  
  if (!fHV) return kFALSE;
  
  Bool_t error = kFALSE;
  hvChannelTooLow = kFALSE;
  hvChannelTooHigh = kFALSE;
  hvSwitchON = kTRUE;
  hvChannelON = kTRUE;
  
  AliMpDCSNamer hvNamer("TRACKER");
  
  Int_t chamberId = AliMpDEManager::GetChamberId(detElemId);
  
  TString hvChannel(hvNamer.DCSAliasName(detElemId));
  
  TMap* hvMap = fkCalibrationData.HV();
  
  TPair* hvPair = static_cast<TPair*>(hvMap->FindObject(hvChannel.Data()));
  if (!hvPair)
  {
    AliError(Form("Did not find expected alias (%s) for DE %d",
                  hvChannel.Data(),detElemId));  
    error = kTRUE;
  }
  else
  {
    TObjArray* values = static_cast<TObjArray*>(hvPair->Value());
    if (!values)
    {
      AliError(Form("Could not get values for alias %s",hvChannel.Data()));
      error = kTRUE;
    }
    else
    {
      // find out min value, and makes a cut
      Float_t hvMin(1E9);
      TIter next(values);
      AliDCSValue* val;
      
      while ( ( val = static_cast<AliDCSValue*>(next()) ) )
      {
        Float_t hv = val->GetFloat();
        hvMin = TMath::Min(hv,hvMin);
      }

      float lowThreshold = HVLimit(chamberId);

      if ( hvMin < lowThreshold ) hvChannelTooLow = kTRUE;
      if ( hvMin < hvNamer.TrackerHVOFF() ) hvChannelON = kFALSE;
    }
  }
  
  TString hvSwitch(hvNamer.DCSSwitchAliasName(detElemId,pcbIndex));
  TPair* switchPair = static_cast<TPair*>(hvMap->FindObject(hvSwitch.Data()));
  if (!switchPair)
  {
    AliError(Form("Did not find expected alias (%s) for DE %d PCB %d",
                  hvSwitch.Data(),detElemId,pcbIndex));
    error = kTRUE;
  }
  else
  {
    TObjArray* values = static_cast<TObjArray*>(switchPair->Value());
    if (!values)
    {    
      AliError(Form("Could not get values for alias %s",hvSwitch.Data()));
      error = kTRUE;
    }
    else
    {
      Float_t sv = SwitchValue(*values);
      if ( sv < 0.99 ) hvSwitchON = kFALSE;
    }
  }
  return error;
}

//_____________________________________________________________________________
Int_t
AliMUONPadStatusMaker::HVStatus(Int_t detElemId, Int_t manuId) const
{
  /// Get HV status of one manu
  
  AliCodeTimerAuto("",0)
  
  if ( !fHV ) return kMissing;

  Long_t lint = fHV->GetValue(AliMpManuUID::BuildUniqueID(detElemId,manuId));
  
  if ( lint ) 
  {
    return (Int_t)(lint - 1);
  }

  Int_t status(0);
  
  AliMpDCSNamer hvNamer("TRACKER");
  
  switch ( AliMpDEManager::GetStationType(detElemId) )
  {
    case AliMp::kStation12:
    {
      int sector = hvNamer.ManuId2Sector(detElemId,manuId);
      if ( sector >= 0 ) 
      {
        Bool_t hvChannelTooLow, hvChannelTooHigh, hvChannelON;
        Bool_t error = HVSt12Status(detElemId,sector,
                                    hvChannelTooLow,
                                    hvChannelTooHigh,
                                    hvChannelON);
        if ( error ) status |= kHVError;
        if ( hvChannelTooLow ) status |= kHVTooLow;
        if ( hvChannelTooHigh ) status |= kHVTooHigh; 
        if ( !hvChannelON ) status |= kHVChannelOFF;
        // assign this status to all the other manus handled by the same HV channel
        SetHVStatus(detElemId,sector,status);
      }
    }
      break;
    case AliMp::kStation345:
    {
      int pcbIndex = hvNamer.ManuId2PCBIndex(detElemId,manuId);
      if ( pcbIndex >= 0 ) 
      {
        Bool_t hvChannelTooLow, hvChannelTooHigh, hvChannelON,hvSwitchON;
        Bool_t error = HVSt345Status(detElemId,pcbIndex,
                                     hvChannelTooLow,hvChannelTooHigh,
                                     hvChannelON,hvSwitchON);
        if ( error ) status |= kHVError;
        if ( hvChannelTooLow ) status |= kHVTooLow;
        if ( hvChannelTooHigh ) status |= kHVTooHigh; 
        if ( !hvSwitchON ) status |= kHVSwitchOFF; 
        if ( !hvChannelON) status |= kHVChannelOFF;
        // assign this status to all the other manus handled by the same HV channel
        SetHVStatus(detElemId,pcbIndex,status);
      }
    }
      break;
    default:
      break;
  }
  
  return status;
}

//_____________________________________________________________________________
AliMUONVCalibParam* 
AliMUONPadStatusMaker::Neighbours(Int_t detElemId, Int_t manuId) const
{
  /// Get the neighbours parameters for a given manu
  AliMUONVStore* neighbourStore = fkCalibrationData.Neighbours();
  return static_cast<AliMUONVCalibParam*>(neighbourStore->FindObject(detElemId,manuId));
}

//_____________________________________________________________________________
AliMUONVStore* 
AliMUONPadStatusMaker::NeighboursStore() const
{
  /// Return the store containing all the neighbours
  return fkCalibrationData.Neighbours();
}

//_____________________________________________________________________________
AliMUONVCalibParam*
AliMUONPadStatusMaker::ComputeStatus(Int_t detElemId, Int_t manuId) const
{
  /// Compute the status of a given manu, using all available information,
  /// i.e. pedestals, gains, and HV
  
  AliMUONVCalibParam* param = new AliMUONCalibParamNI(1,AliMpConstants::ManuNofChannels(),detElemId,manuId,-1);
  fStatus->Add(param);

  AliMUONVCalibParam* pedestals = static_cast<AliMUONVCalibParam*>(fPedestals->FindObject(detElemId,manuId));

  AliMUONVCalibParam* gains = static_cast<AliMUONVCalibParam*>(fGains->FindObject(detElemId,manuId));
  
  Int_t hvStatus = HVStatus(detElemId,manuId);

  Int_t occStatus = OccupancyStatus(detElemId,manuId);
  
  for ( Int_t manuChannel = 0; manuChannel < param->Size(); ++manuChannel )
  {
    Int_t pedStatus(0);
    
    if (pedestals) 
    {
      Float_t pedMean = pedestals->ValueAsFloatFast(manuChannel,0);
      Float_t pedSigma = pedestals->ValueAsFloatFast(manuChannel,1);
      if ( pedMean < fPedMeanLimits.X() ) pedStatus |= kPedMeanTooLow;
      else if ( pedMean > fPedMeanLimits.Y() ) pedStatus |= kPedMeanTooHigh;
      if ( pedSigma < fPedSigmaLimits.X() ) pedStatus |= kPedSigmaTooLow;
      else if ( pedSigma > fPedSigmaLimits.Y() ) pedStatus |= kPedSigmaTooHigh;
      if ( pedMean == 0 ) pedStatus |= kPedMeanZero;
    }
    else
    {
      pedStatus = kPedMissing;
    }
    
    Int_t gainStatus(0);
  
    if ( gains ) 
    {
      Float_t a0 = gains->ValueAsFloatFast(manuChannel,0);
      Float_t a1 = gains->ValueAsFloatFast(manuChannel,1);
      Float_t thres = gains->ValueAsFloatFast(manuChannel,2);
  
      if ( a0 < fGainA1Limits.X() ) gainStatus |= kGainA1TooLow;
      else if ( a0 > fGainA1Limits.Y() ) gainStatus |= kGainA1TooHigh;
      if ( a1 < fGainA2Limits.X() ) gainStatus |= kGainA2TooLow;
      else if ( a1 > fGainA2Limits.Y() ) gainStatus |= kGainA2TooHigh;
      if ( thres < fGainThresLimits.X() ) gainStatus |= kGainThresTooLow;
      else if ( thres > fGainThresLimits.Y() ) gainStatus |= kGainThresTooHigh;
    }
    else
    {
      gainStatus = kGainMissing;
    }
    
    Int_t status = BuildStatus(pedStatus,hvStatus,gainStatus,occStatus);
      
    param->SetValueAsIntFast(manuChannel,0,status);
  }
  
  return param;
}

//_____________________________________________________________________________
Int_t 
AliMUONPadStatusMaker::OccupancyStatus(Int_t detElemId, Int_t manuId) const
{
  /// Get the "other" status for a given manu
 
  Int_t rv(0);
  
  if ( fTrackerData ) 
  {
    const Int_t occIndex = 2;
    
    Double_t occ = fTrackerData->DetectionElement(detElemId,occIndex);
    
    if ( occ <= fDEOccupancyLimits.X() )
    {
      rv |= kDEOccupancyTooLow;
    } 
    else if ( occ > fDEOccupancyLimits.Y() )
    {
      rv |= kDEOccupancyTooHigh;
    }
    
    Int_t busPatchId = AliMpDDLStore::Instance()->GetBusPatchId(detElemId,manuId);
    
    occ = fTrackerData->BusPatch(busPatchId,occIndex);

    if ( occ <= fBuspatchOccupancyLimits.X() )
    {
      rv |= kBusPatchOccupancyTooLow;
    } 
    else if ( occ > fBuspatchOccupancyLimits.Y() )
    {
      rv |= kBusPatchOccupancyTooHigh;
    }
    
    occ = fTrackerData->Manu(detElemId,manuId,occIndex);
    
    if ( occ <= fManuOccupancyLimits.X() )
    {
      rv |= kManuOccupancyTooLow;
    } 
    else if ( occ > fManuOccupancyLimits.Y() )
    {
      rv |= kManuOccupancyTooHigh;
    }
  }
  return rv;
}

//_____________________________________________________________________________
AliMUONVCalibParam* 
AliMUONPadStatusMaker::PadStatus(Int_t detElemId, Int_t manuId) const
{
  /// Get the status container for a given manu
  
  AliMUONVCalibParam* param = static_cast<AliMUONVCalibParam*>(fStatus->FindObject(detElemId,manuId));
  if (!param)
  {
    // not already there, so compute it now
    AliCodeTimerAuto("ComputeStatus",0);
    param = ComputeStatus(detElemId,manuId);
  }
  return param;
}

//_____________________________________________________________________________
Int_t 
AliMUONPadStatusMaker::PadStatus(Int_t detElemId, Int_t manuId, Int_t manuChannel) const
{
  /// Get the status for a given channel
  
  AliMUONVCalibParam* param = static_cast<AliMUONVCalibParam*>(fStatus->FindObject(detElemId,manuId));
  if (!param)
  {
    // not already there, so compute it now
    param = ComputeStatus(detElemId,manuId);
  }
  return param->ValueAsInt(manuChannel,0);
}

//_____________________________________________________________________________
void
AliMUONPadStatusMaker::SetHVStatus(Int_t detElemId, Int_t index, Int_t status) const
{
  /// Assign status to all manus in a given HV "zone" (defined by index, meaning
  /// is different thing from St12 and St345)
  
  AliCodeTimerAuto("",0)
  
  AliMpDetElement* de = AliMpDDLStore::Instance()->GetDetElement(detElemId);
  
  const AliMpArrayI* manus = de->ManusForHV(index);
  
  for ( Int_t i = 0; i < manus->GetSize(); ++ i ) 
  {
    Int_t manuId = manus->GetValue(i);
    fHV->Add(AliMpManuUID::BuildUniqueID(detElemId,manuId),status + 1);
  }
}

//_____________________________________________________________________________
Double_t
AliMUONPadStatusMaker::HVLimit(Int_t chamberId) const
{
  /// Get HV limit for a given chamber
  if ( chamberId >=0 && chamberId < 10 ) 
  {
    return fHVLimit[chamberId];
  }
  return 0.0;
}

//_____________________________________________________________________________
void
AliMUONPadStatusMaker::SetHVLimit(Int_t chamberId, Double_t hv) 
{
  /// Set hv limit for a given chamber (or all if chamberId==-1)
  
  if ( chamberId == -1 ) 
  {
    for ( Int_t i = 0; i < 10; ++i ) 
    {
      fHVLimit[i] = hv;
    }
  }
  else if ( chamberId >= 0 && chamberId < 10 ) 
  {
    fHVLimit[chamberId]=hv;
  }
  else
  {
    AliError(Form("chamberId=%d is invalid",chamberId));
  }
}

//_____________________________________________________________________________
void
AliMUONPadStatusMaker::SetLimits(const AliMUONRecoParam& recoParams) 
{
  /// Set the limits from the recoparam
  
  for ( int i = 0; i < 10; ++i )
  {
    SetHVLimit(i,recoParams.HVLimit(i));
  }
  
  SetPedMeanLimits(recoParams.PedMeanLowLimit(),recoParams.PedMeanHighLimit());
  SetPedSigmaLimits(recoParams.PedSigmaLowLimit(),recoParams.PedSigmaHighLimit());
  
  SetGainA1Limits(recoParams.GainA1LowLimit(),recoParams.GainA1HighLimit());
  SetGainA2Limits(recoParams.GainA2LowLimit(),recoParams.GainA2HighLimit());
  SetGainThresLimits(recoParams.GainThresLowLimit(),recoParams.GainThresHighLimit());
  
  SetManuOccupancyLimits(recoParams.ManuOccupancyLowLimit(),recoParams.ManuOccupancyHighLimit());
  SetBuspatchOccupancyLimits(recoParams.BuspatchOccupancyLowLimit(),recoParams.BuspatchOccupancyHighLimit());
  SetDEOccupancyLimits(recoParams.DEOccupancyLowLimit(),recoParams.DEOccupancyHighLimit());  
}

//_____________________________________________________________________________
void 
AliMUONPadStatusMaker::Report(UInt_t mask)
{
  /// Report the number of bad pads, according to the mask,
  /// and the various reasons why they are bad (with occurence rates)
  
  AliInfo("");
  AliCodeTimerAuto("",0);

  AliMUONLogger log(1064008);
  
  Int_t nBadPads(0);
  Int_t nPads(0);
  
  AliMpManuIterator it;
  
  Int_t detElemId, manuId;
  
  while ( it.Next(detElemId,manuId) )
  {
    AliMpDetElement* de = AliMpDDLStore::Instance()->GetDetElement(detElemId);
    
    for ( Int_t i = 0; i < AliMpConstants::ManuNofChannels(); ++i )
    {
      if ( de->IsConnectedChannel(manuId,i) ) 
      {
        ++nPads;
        
        Int_t status = PadStatus(detElemId,manuId,i);          
        
        if ( mask && ( status & mask) ) // note that if mask == 0, all pads are good...
        {
          ++nBadPads;
          log.Log(AsString(status));
        }
      }
    }
  }
  
  if (!nPads) 
  {
    AliError("Got no pad from the iterator ?! That's not normal. Please check !");
    return;
  }
  
  TString msg;
  Int_t ntimes;
  
  cout << Form("According to mask %x (human readable form below) %6d pads are bad (over a total of %6d, i.e. %7.2f %%)",
               mask,nBadPads,nPads,nBadPads*100.0/nPads) << endl;
  cout << AliMUONPadStatusMaker::AsCondition(mask) << endl;
  cout << "--------" << endl;
  
  while ( log.Next(msg,ntimes) )
  {
    cout << Form("The message (%120s) occured %15d times (%7.4f %%)",msg.Data(),ntimes,ntimes*100.0/nPads) << endl;
  }
  
}

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