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 AliMUONPadStatusMapMaker
/// 
/// Convert a pad statuses into pad status maps.
/// 
/// A pad status is one 32-bits word describing whether this pad pedestal, gains
/// hv is correct or not.
///
/// A pad status *map* is one 32-bits (of which 24 only are used)
/// word describing whether this pad neighbours are ok or not
/// (whether a pad is ok or not is determined by applying a given
/// bitmask to the pad status word). Each bit in this word is related to one
/// neighbour, assuming the pad itself is at bit 0
///
/// ----------------
/// |  3 |  5 |  8 |
/// ----------------
/// |  2 |  0 |  7 |
/// ----------------
/// |  1 |  4 |  6 |
/// ----------------
///
/// Note that for instance in NonBending plane of slats, at the boundaries
/// between two pad densities, the pictures is a bit different, e.g.
/// (bits in () are always zero)
///
/// so some care must be taken when designing a mask to be tested ;-) if you
/// want to go farther than immediate neighbours...
///
/// If a pad is at a physical boundary, is will for sure have some bits at 1
/// (i.e. a non-existing neighbour is considered = bad).
///
///
/// add something about the reject list/probabilities here... (LA)
///
/// \author Laurent Aphecetche
//-----------------------------------------------------------------------------

#include "AliMUONPadStatusMapMaker.h"

#include "AliCodeTimer.h"
#include "AliLog.h"
#include "AliMpDDLStore.h"
#include "AliMpDetElement.h"
#include "AliMpManuIterator.h"
#include "AliMUON2DMap.h"
#include "AliMUONCalibParamNF.h"
#include "AliMUONCalibParamNI.h"
#include "AliMUONCalibrationData.h"
#include "AliMUONPadStatusMaker.h"
#include "AliMUONRejectList.h"
#include "AliMUONVCalibParam.h"
#include "AliMUONVStore.h"
#include "AliMpConstants.h"
#include <Riostream.h>
#include <TList.h>
#include "TRandom.h"
#include <cassert>

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

Int_t AliMUONPadStatusMapMaker::fgkSelfDead = 1;

//_____________________________________________________________________________
AliMUONPadStatusMapMaker::AliMUONPadStatusMapMaker(const AliMUONPadStatusMaker& padStatusMaker,
                                                   Int_t mask,
                                                   Bool_t deferredInitialization) 
: TObject(),
fkStatusMaker(padStatusMaker),
fMask(mask),
fStatusMap(new AliMUON2DMap(true)),
fRejectProbabilities(new AliMUON2DMap(true)),
fRejectList(0x0),
fComputeOnDemand(deferredInitialization)
{
  /// ctor
  if (!deferredInitialization)
  {
    AliCodeTimerAuto("Computing complete status map at once",0);
    AliMUONVStore* neighboursStore = padStatusMaker.NeighboursStore();
    AliMUONVCalibParam* param;
    TIter next(neighboursStore->CreateIterator());
    while ( ( param = static_cast<AliMUONVCalibParam*>(next()) ) )
    {
      Int_t detElemId = param->ID0();
      Int_t manuId = param->ID1();
      ComputeStatusMap(detElemId,manuId);
    }
  }
  
  /// Whatever the deferred flag is, we *have* to compute the reject 
  /// probabilities here and now, for *all* channels.
  
  AliMUONRejectList* rl = padStatusMaker.CalibrationData().RejectList();
  
  if (rl)
  {
    AliMpManuIterator it;
    Int_t detElemId;
    Int_t manuId;
    
    while ( it.Next(detElemId,manuId) )
    {
      AliMpDetElement* de = AliMpDDLStore::Instance()->GetDetElement(detElemId);
      Int_t busPatchId = AliMpDDLStore::Instance()->GetBusPatchId(detElemId,manuId);
      
      AliMUONVCalibParam* param = new AliMUONCalibParamNF(1,AliMpConstants::ManuNofChannels(),detElemId,manuId,0);
      
      Int_t n(0);
      
      for ( Int_t i = 0; i < AliMpConstants::ManuNofChannels(); ++i ) 
      {
        Float_t proba(0.0);
        
        if ( de->IsConnectedChannel(manuId,i) )
        {
          proba = TMath::Max(rl->DetectionElementProbability(detElemId),rl->BusPatchProbability(busPatchId));
          
          proba = TMath::Max(proba,rl->ManuProbability(detElemId,manuId));
          
          proba = TMath::Max(proba,rl->ChannelProbability(detElemId,manuId,i));
          
          if ( proba > 0 ) 
          {
            ++n;
            param->SetValueAsFloat(i,0,proba);
          }
        }
      }
      
      if ( n > 0 ) 
      {
        fRejectProbabilities->Add(param);
      }
      else
      {
        // no need to add empty stuff...
        delete param;
      }
    }
  
    if ( rl->IsBinary())
    {
      fRejectList = fRejectProbabilities;
      fRejectProbabilities = 0x0;
      AliDebug(1,"RejectList = RejectProbabilities");
      StdoutToAliDebug(1,fRejectList->Print("","MEAN"));
    }
    else
    {
      AliWarning("Will run with non trivial survival probabilities for channels, manus, etc... Better check this is a simulation and not real data !");
      fRejectList = new AliMUON2DMap(true);
    }
  }
  else
  {
    fRejectList = fRejectProbabilities;
    fRejectProbabilities = 0x0;
    AliInfo("No RejectList found, so no RejectList will be used.");
  }
}

//_____________________________________________________________________________
AliMUONPadStatusMapMaker::~AliMUONPadStatusMapMaker()
{
  /// dtor
  delete fStatusMap;
  delete fRejectProbabilities;
  delete fRejectList;
}

//_____________________________________________________________________________
AliMUONVCalibParam*
AliMUONPadStatusMapMaker::ComputeStatusMap(Int_t detElemId, Int_t manuId) const
{
  /// Compute the status map for a given manu, and add it to our internal
  /// fStatusMap internal storage
  
  AliCodeTimerAuto("(Int_t,Int_t)",0)
    
  AliMUONVCalibParam* param = new AliMUONCalibParamNI(1,AliMpConstants::ManuNofChannels(),
                                                      detElemId,manuId,-1);    
                                    
  Bool_t ok = fStatusMap->Add(param);
  if (!ok)
  {
    AliFatal(Form("Could not add manu %d of de %d",manuId,detElemId));
  }
                                  
  AliMUONVCalibParam* neighbours = fkStatusMaker.Neighbours(detElemId,manuId);
  
  AliMUONVCalibParam* statusParam = fkStatusMaker.PadStatus(detElemId,manuId);
  
  Int_t n = neighbours->Dimension();
  
  for ( Int_t manuChannel = 0; manuChannel < param->Size(); ++manuChannel )
  {
    Int_t statusMap(0);
    
    Int_t x = neighbours->ValueAsIntFast(manuChannel,0);
    if ( x < 0 ) 
    {
      // channel is not a valid one (i.e. (manuId,manuChannel) is not an existing pad)
      statusMap = -1;//fgkSelfDead;
      continue;
    }
        
    for ( Int_t i = 0; i < n; ++i )
    {
      // Compute the statusmap related to the status of neighbouring
      // pads. An invalid pad means "outside of edges".
            
      Int_t y = neighbours->ValueAsIntFast(manuChannel,i);      
      Int_t m,c;
      neighbours->UnpackValue(y,m,c);
      if ( c < 0 ) continue;
      Int_t status = 0;
      if ( !m )
      {
        status = -1;
      }
      else
      {
        status = statusParam->ValueAsIntFast(c); //fkStatusMaker.PadStatus(detElemId,m,c);
      }
      if ( ( fMask != 0 ) && ( (status & fMask) != 0 ) )
      {
        statusMap |= (1<<i);
      }
    }    
    param->SetValueAsIntFast(manuChannel,0,statusMap);
  }
  return param;
}

//_____________________________________________________________________________
void 
AliMUONPadStatusMapMaker::RefreshRejectProbabilities()
{
  /// From the (fixed) fRejectProbabilities, compute
  /// a fRejectList that will be valid for one event
  /// If fRejectProbabilities=0x0 it means we're dealing with
  /// trivial probabilities (0 or 1) and those are assumed to be already
  /// in fRejectList then.
  
  if ( !fRejectProbabilities ) return;
  
  AliCodeTimerAuto("",0);
  
  fRejectList->Clear();
  
  TIter next(fRejectProbabilities->CreateIterator());
  AliMUONVCalibParam* paramProba;
  AliMUONVCalibParam* paramReject;
  
  while ( ( paramProba = static_cast<AliMUONVCalibParam*>(next()) ) )
  {
    paramReject = new AliMUONCalibParamNF(1,paramProba->Size(),paramProba->ID0(),paramProba->ID1(),0.0);
    
    Int_t n(0);
    
    for ( Int_t i = 0; i < paramProba->Size(); ++i ) 
    {
      Float_t proba = paramProba->ValueAsFloat(i);
      Float_t x(proba);
      
      if ( proba > 0.0 && proba < 1.0 ) 
      {
        x = gRandom->Rndm();
        proba = ( x < proba ) ? 1.0 : 0.0;
      }
      
      if (proba>0.0)
      {
        ++n;
        paramReject->SetValueAsFloat(i,0,proba);
      }
    }
    if (n) fRejectList->Add(paramReject);
  }
}

//_____________________________________________________________________________
Int_t
AliMUONPadStatusMapMaker::StatusMap(Int_t detElemId, Int_t manuId, 
                                    Int_t manuChannel) const
                                      
{
  /// Get the pad status map
  
  AliMUONVCalibParam* param = static_cast<AliMUONVCalibParam*>(fStatusMap->FindObject(detElemId,manuId));
  if (!param)
  {
    if ( fComputeOnDemand ) 
    {
      // not yet computed, so do it now
      param = ComputeStatusMap(detElemId,manuId);
    }
    else
    {
      // we're locked. probably a bad manuId ?
      return fgkSelfDead;
    }
  }
  
  Int_t statusMap = param->ValueAsInt(manuChannel);
  
  AliMUONVCalibParam* r = static_cast<AliMUONVCalibParam*>(fRejectList->FindObject(detElemId,manuId));
  
  if (r)
  {
    Float_t v= r->ValueAsFloat(manuChannel);
    
    assert (v==0.0 || v==1.0 ); 

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