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

/// \ingroup macros
/// \file MUONStatusMap.C
/// \brief Macro to check/test pad status and pad status map makers
///
/// \author Laurent Aphecetche

#if !defined(__CINT__) || defined(__MAKECINT__)
#include "AliCDBManager.h"
#include "AliCDBEntry.h"
#include "AliLog.h"
#include "AliMpCDB.h"
#include "AliMpDEManager.h"
#include "AliMUONCDB.h"
#include "AliMUONCalibrationData.h"
#include "AliMUONPadStatusMaker.h"
#include "AliMUONPadStatusMapMaker.h"
#include "AliMUONRecoParam.h"
#include "AliMUONVCalibParam.h"
#include "AliMUONVStore.h"
#include "AliMpConstants.h"
#include "AliMpDDLStore.h"
#include "AliMpDetElement.h"
#include "AliMpManuIterator.h"
#include "Riostream.h"
#include "TAxis.h"
#include "TCanvas.h"
#include "TLegend.h"
#include "TFile.h"
#include "TGraph.h"
#include "TBox.h"
#include "TH2F.h"
#include "TStyle.h"
#include "TText.h"
#include <vector>
#endif

namespace
{
  Int_t NTOTALNUMBEROFPADS(1064008);
}

//______________________________________________________________________________
void ReadIntegers(const char* filename, std::vector<int>& integers)
{
  /// Read integers from filename, where integers are either
  /// separated by "," or by return carriage
  ifstream in(gSystem->ExpandPathName(filename));
  int i;
  
  char line[10000];
  
  in.getline(line,10000,'\n');
  
  TString sline(line);
  
  if (sline.Contains(","))
  {
    TObjArray* a = sline.Tokenize(",");
    TIter next(a);
    TObjString* s;
    while ( ( s = static_cast<TObjString*>(next()) ) )
    {
      integers.push_back(s->String().Atoi());
    }
  }
  else
  {
    integers.push_back(sline.Atoi());
    
    while ( in >> i )
    {
      integers.push_back(i);
    }
  }
  
  std::sort(integers.begin(),integers.end());
}


//______________________________________________________________________________
void MUONStatusMap(AliMUONVStore*& vstatus,
                   AliMUONVStore*& vstatusMap,
                   const char* cdbStorage = "alien://folder=/alice/data/2011/OCDB",
                   Int_t runNumber=145292)
{  

  AliCDBManager::Instance()->SetDefaultStorage(cdbStorage);
  AliCDBManager::Instance()->SetRun(runNumber);
  
  AliMUONCDB::LoadMapping();
  
  AliMUONRecoParam* recoParam = AliMUONCDB::LoadRecoParam();
  
  AliMUONCalibrationData cd(runNumber);
  
  AliMUONPadStatusMaker statusMaker(cd);
  
  statusMaker.SetLimits(*recoParam);
  
  UInt_t mask = recoParam->PadGoodnessMask();

  statusMaker.Report(mask);
  
  vstatus = static_cast<AliMUONVStore*>(statusMaker.StatusStore()->Clone());
  
  const Bool_t deferredInitialization = kFALSE;
  
  AliMUONPadStatusMapMaker statusMapMaker(cd,mask,deferredInitialization);
    
  vstatusMap = static_cast<AliMUONVStore*>(statusMapMaker.StatusMap()->Clone());
}

//______________________________________________________________________________
Int_t GetBadChannels(Int_t runNumber,
                     Int_t& nbadped,
                     Int_t& nbadhv,
                     Int_t& nbadgain,
                     Int_t& nbadocc,
                     Int_t& nmissing,
                     Int_t& nreco,
                     Int_t chamber=-1)
{
  if (!AliCDBManager::Instance()->IsDefaultStorageSet())
  {
//    AliCDBManager::Instance()->SetDefaultStorage("alien://folder=/alice/data/2011/OCDB?cacheFold=/local/cdb");
    AliCDBManager::Instance()->SetDefaultStorage("raw://");
  }
  
  AliCDBManager::Instance()->SetRun(runNumber);
  
  AliMpCDB::LoadDDLStore();
  
  AliMUONCalibrationData cd(runNumber,true);
  
  AliMUONPadStatusMaker statusMaker(cd);
  
  AliMUONRecoParam* recoParam = AliMUONCDB::LoadRecoParam();

  statusMaker.SetLimits(*recoParam);
  
  AliMpManuIterator it;
  Int_t detElemId, manuId;
  
  Int_t pedCheck = ( 
                     AliMUONPadStatusMaker::kPedMeanZero |
                     AliMUONPadStatusMaker::kPedMeanTooLow |
                     AliMUONPadStatusMaker::kPedMeanTooHigh |
                     AliMUONPadStatusMaker::kPedSigmaTooLow |
                     AliMUONPadStatusMaker::kPedSigmaTooHigh );
     
  Int_t hvCheck = ( 
                   AliMUONPadStatusMaker::kHVError |
                   AliMUONPadStatusMaker::kHVTooLow |
                   AliMUONPadStatusMaker::kHVTooHigh |
                   AliMUONPadStatusMaker::kHVChannelOFF |
                   AliMUONPadStatusMaker::kHVSwitchOFF );

  
  Int_t occCheck = (
                    AliMUONPadStatusMaker::kManuOccupancyTooHigh 
                   );
                    
  Int_t ntotal(0);
  Int_t nbad(0);
  nbadped=0;
  nbadocc=0;
  nbadgain=0;
  nbadhv=0;
  nmissing=0;
  nreco=0;
  
  while ( it.Next(detElemId,manuId) )
  {
    AliMpDetElement* de = AliMpDDLStore::Instance()->GetDetElement(detElemId);
    
    if ( chamber >= 0 && AliMpDEManager::GetChamberId(detElemId) != chamber ) continue;
    
    for ( Int_t manuChannel = 0; manuChannel < AliMpConstants::ManuNofChannels(); ++manuChannel )
    {
      if ( de->IsConnectedChannel(manuId,manuChannel) )
      {
        ++ntotal;
        
        UInt_t status = statusMaker.PadStatus(detElemId, manuId, manuChannel);
        
        if (!status) continue;
        
        bool bad(false);
        
        if ( status & AliMUONPadStatusMaker::BuildStatus(pedCheck,0,0,0) ) 
        {
          ++nbadped;
          bad=true;
        }
        
        if ( status & AliMUONPadStatusMaker::BuildStatus(0,hvCheck,0,0) ) 
        {
          ++nbadhv;
          bad=true;
        }
        
        if ( status & AliMUONPadStatusMaker::BuildStatus(0,0,0,occCheck) ) 
        {
          ++nbadocc;
          bad=true;
        }
        
        if ( status & recoParam->PadGoodnessMask() ) 
        {
          ++nreco;
        }
        
        if ( status & AliMUONPadStatusMaker::BuildStatus(AliMUONPadStatusMaker::kMissing,0,0,AliMUONPadStatusMaker::kMissing) )
        {
          bad=true;
          ++nmissing;
        }
        
        if (bad) ++nbad;
      }
    }
  }
  
  if ( chamber<0 && ntotal!=NTOTALNUMBEROFPADS)
  {
    cerr << Form("ERROR ! NOT THE EXPECTED NUMBER OF CHANNELS (%d vs 1064008) FOR RUN %09d",
                 ntotal,runNumber) << endl;
  }
  else
  {
    cout << Form("Chamber %d - %d channels",chamber,ntotal) << endl;
    cout << Form("nbadped %5d nbadhv %5d nbadgain %5d nbadocc %5d nmissing %5d nreco %5d",
                 nbadped,nbadhv,nbadgain,nbadocc,nmissing,nreco) << endl;
  }
  
  AliCDBManager::Instance()->ClearCache(); 
 
  return nbad;
}

//______________________________________________________________________________
void Draw(TFile* f, const char* gname, TLegend* l, Bool_t normalized)
{
  if (!f) return;
  
  TGraph* g = static_cast<TGraph*>(f->Get(gname));
  
  if (!g) return;
  
  if ( normalized ) 
  {
    g = static_cast<TGraph*>(g->Clone());
    for ( Int_t i = 0; i < g->GetN(); ++i ) 
    {
      Double_t y = g->GetY()[i];
      g->SetPoint(i,g->GetX()[i],y/NTOTALNUMBEROFPADS);
    }
  }
  
  g->Draw("lp");
  g->GetXaxis()->SetNdivisions(505);
  g->GetXaxis()->SetNoExponent();
  
  if (l) l->AddEntry(g,gname,"LP");
}

//______________________________________________________________________________
void DrawPeriod(double run1, double run2, double ymin, double ymax, const char* label)
{
  TBox* b = new TBox(run1,ymin,run2,ymax);
  b->SetFillColor(5);
  b->Draw();
  TText* text = new TText((run1+run2)/2.0,ymax*0.6,label);
  text->SetTextAlign(22);
  text->SetTextSize(0.02);
  text->Draw();
}

//______________________________________________________________________________
void DrawEvolution(const char* file, bool normalized=true)
{

  TFile* f = TFile::Open(gSystem->ExpandPathName(file));
  
  if (!f) return;
  
  TCanvas* c = new TCanvas("mch-status-evolution","mch-status-evolution");
  
  c->SetGridy();
  c->SetTicky();
  
  c->Draw();
  
  TLegend* l = new TLegend(0.1,0.7,0.3,0.95,"ch evolution");

  TGraph* g = static_cast<TGraph*>(f->Get("nbad"));
  if (!g) return;
  
  int runmin = TMath::Nint(g->GetX()[0]);
  int runmax = TMath::Nint(g->GetX()[g->GetN()-1]);
  
  cout << Form("Run range found in file %s = %d - %d",file,runmin,runmax) << endl;
  
  double ymax(0.4);
  
  TH2* h = new TH2F("hframe","hframe;Run number;Fraction of dead channels",100,runmin-200,runmax+200,100,0,ymax);

  gStyle->SetOptStat(kFALSE);
  h->Draw();
  h->GetXaxis()->SetNoExponent();
  h->GetXaxis()->SetNdivisions(505);

  gStyle->SetOptTitle(kFALSE);

  DrawPeriod(115881,117222,0,ymax,"10b"); 

  DrawPeriod(119159,120824,0,ymax,"10c");

  DrawPeriod(122374,126424,0,ymax,"10d");

  DrawPeriod(127724,130850,0,ymax,"10e");

  DrawPeriod(133005,134929,0,ymax,"10f");

  DrawPeriod(135658,136376,0,ymax,"10g");

  DrawPeriod(137133,139513,0,ymax,"10h");
  
  DrawPeriod(143856,146860,0,ymax,"11a");

  DrawPeriod(148370,150702,0,ymax,"11b");

  DrawPeriod(151566,154583,0,ymax,"11c");

  DrawPeriod(158084,159606,0,ymax,"11d");

  DrawPeriod(160677,162717,0,ymax,"11e");

  DrawPeriod(162933,165744,0,ymax,"11f");

  DrawPeriod(167703,170593,0,ymax,"11h");

  // 2012
    
    DrawPeriod(176661,177295,0,ymax,"12a");

    DrawPeriod(177384,178053,0,ymax,"12b");

    DrawPeriod(179603,180569,0,ymax,"12c");

    DrawPeriod(183913,186320,0,ymax,"12d");
    
    DrawPeriod(186365,186602,0,ymax,"12e");
    
    DrawPeriod(186668,188123,0,ymax,"12f");
    
    DrawPeriod(188362,188503,0,ymax,"12g");
    
    DrawPeriod(189122,190110,0,ymax,"12h");
  
  // 2013
  
  DrawPeriod(195344,195483,0,ymax,"LHC13b");
  DrawPeriod(195529,195677,0,ymax,"LHC13c");
  DrawPeriod(195681,195873,0,ymax,"LHC13d");
  DrawPeriod(195949,196311,0,ymax,"LHC13e");
  DrawPeriod(196433,197388,0,ymax,"LHC13f");
  
  Draw(f,"nbad",l,normalized);
  Draw(f,"nbadped",l,normalized);
  Draw(f,"nbadocc",l,normalized);
  Draw(f,"nbadhv",l,normalized);
  Draw(f,"nmissing",l,normalized);
  Draw(f,"nreco",l,normalized);
  
  h->Draw("same");

  c->RedrawAxis("g");
  
  l->Draw();
}

//______________________________________________________________________________
void MUONStatusMapEvolution(const char* runlist, const char* outfile)
{
  // Compute the number of bad pads (because of bad ped, bad hv, bad occupancy
  // or missing in configuration)
  //
  // output a root file with the different graphs.
  //
  // output can be then plotted using the DrawEvolution function
  //
  // Note that the output of different runlists can then be merged simply using
  // the hadd program, and so then the DrawEvolution can be used over
  // a huge period, e.g. a full year, while this method is better restricted
  // to a period or even less (depending on your success of accessing the OCDB)
  //
  
  std::vector<int> runs;

  ReadIntegers(runlist,runs);
  
  if ( runs.empty() ) 
  {
    cout << "No runs to process..." << endl;
    return;    
  }
  
  int year(2013);
  
  if ( runs[0] <= 139699 ) year=2010;
  
  if ( runs[0] <= 176000 ) year=2011;
  
  if ( runs[0] <= 195344 ) year = 2012;
      
  AliCDBManager::Instance()->SetDefaultStorage(Form("alien://folder=/alice/data/%d/OCDB?cacheFold=/local/cdb",year));

//  AliCDBManager::Instance()->SetDefaultStorage("local:///Users/laurent/Alice/OCDBcopy2013");
//
  TList glist;
  
  glist.SetOwner(kTRUE);
  
  TGraph* gnbad = new TGraph(runs.size());
  gnbad->SetName("nbad");
  glist.Add(gnbad);
  
  TGraph* gnbadped = new TGraph(runs.size());
  gnbadped->SetName("nbadped");
  glist.Add(gnbadped);
  
  TGraph* gnbadocc = new TGraph(runs.size());
  gnbadocc->SetName("nbadocc");
  glist.Add(gnbadocc);
  
  TGraph* gnbadhv = new TGraph(runs.size());
  gnbadhv->SetName("nbadhv");
  glist.Add(gnbadhv);
  
  TGraph* gnmissing = new TGraph(runs.size());
  gnmissing->SetName("nmissing");
  glist.Add(gnmissing);

  TGraph* gnreco = new TGraph(runs.size());
  gnreco->SetName("nreco");
  glist.Add(gnreco);
  
  for ( std::vector<int>::size_type i = 0; i < runs.size(); ++i ) 
  {
    Int_t runNumber = runs[i];
    Int_t nbadped;
    Int_t nbadhv;
    Int_t nbadgain;
    Int_t nbadocc;
    Int_t nmissing;
    Int_t nreco;
    
    Int_t nbad = GetBadChannels(runNumber,nbadped,nbadhv,nbadgain,nbadocc,nmissing,nreco);
    
    gnbad->SetPoint(i,runNumber,nbad);
    gnbadped->SetPoint(i,runNumber,nbadped);
    gnbadhv->SetPoint(i,runNumber,nbadhv);
    gnbadocc->SetPoint(i,runNumber,nbadocc);
    gnmissing->SetPoint(i,runNumber,nmissing);
    gnreco->SetPoint(i,runNumber,nreco);
  }
  
  TIter next(&glist);
  TGraph* g;
  Int_t index(0);

  TFile f(outfile,"recreate");
  Int_t  color[] = {  1 ,  2 ,  3 ,  4,  6, 8 };
  Int_t marker[] = { 28 , 24 , 23 , 26, 30, 5 };

  while ( ( g = static_cast<TGraph*>(next() ) ) )
  {
    g->GetXaxis()->SetNdivisions(505);
    g->GetXaxis()->SetNoExponent();
    g->SetMinimum(0);
    g->GetYaxis()->SetNoExponent();
    g->SetLineColor(color[index]);
    g->SetMarkerStyle(marker[index]);
    g->SetMarkerColor(color[index]);
    g->SetMarkerSize(1.0);
    ++index;
    g->Write();
  }
    
  f.Close();
  
  
}
 MUONStatusMap.C:1
 MUONStatusMap.C:2
 MUONStatusMap.C:3
 MUONStatusMap.C:4
 MUONStatusMap.C:5
 MUONStatusMap.C:6
 MUONStatusMap.C:7
 MUONStatusMap.C:8
 MUONStatusMap.C:9
 MUONStatusMap.C:10
 MUONStatusMap.C:11
 MUONStatusMap.C:12
 MUONStatusMap.C:13
 MUONStatusMap.C:14
 MUONStatusMap.C:15
 MUONStatusMap.C:16
 MUONStatusMap.C:17
 MUONStatusMap.C:18
 MUONStatusMap.C:19
 MUONStatusMap.C:20
 MUONStatusMap.C:21
 MUONStatusMap.C:22
 MUONStatusMap.C:23
 MUONStatusMap.C:24
 MUONStatusMap.C:25
 MUONStatusMap.C:26
 MUONStatusMap.C:27
 MUONStatusMap.C:28
 MUONStatusMap.C:29
 MUONStatusMap.C:30
 MUONStatusMap.C:31
 MUONStatusMap.C:32
 MUONStatusMap.C:33
 MUONStatusMap.C:34
 MUONStatusMap.C:35
 MUONStatusMap.C:36
 MUONStatusMap.C:37
 MUONStatusMap.C:38
 MUONStatusMap.C:39
 MUONStatusMap.C:40
 MUONStatusMap.C:41
 MUONStatusMap.C:42
 MUONStatusMap.C:43
 MUONStatusMap.C:44
 MUONStatusMap.C:45
 MUONStatusMap.C:46
 MUONStatusMap.C:47
 MUONStatusMap.C:48
 MUONStatusMap.C:49
 MUONStatusMap.C:50
 MUONStatusMap.C:51
 MUONStatusMap.C:52
 MUONStatusMap.C:53
 MUONStatusMap.C:54
 MUONStatusMap.C:55
 MUONStatusMap.C:56
 MUONStatusMap.C:57
 MUONStatusMap.C:58
 MUONStatusMap.C:59
 MUONStatusMap.C:60
 MUONStatusMap.C:61
 MUONStatusMap.C:62
 MUONStatusMap.C:63
 MUONStatusMap.C:64
 MUONStatusMap.C:65
 MUONStatusMap.C:66
 MUONStatusMap.C:67
 MUONStatusMap.C:68
 MUONStatusMap.C:69
 MUONStatusMap.C:70
 MUONStatusMap.C:71
 MUONStatusMap.C:72
 MUONStatusMap.C:73
 MUONStatusMap.C:74
 MUONStatusMap.C:75
 MUONStatusMap.C:76
 MUONStatusMap.C:77
 MUONStatusMap.C:78
 MUONStatusMap.C:79
 MUONStatusMap.C:80
 MUONStatusMap.C:81
 MUONStatusMap.C:82
 MUONStatusMap.C:83
 MUONStatusMap.C:84
 MUONStatusMap.C:85
 MUONStatusMap.C:86
 MUONStatusMap.C:87
 MUONStatusMap.C:88
 MUONStatusMap.C:89
 MUONStatusMap.C:90
 MUONStatusMap.C:91
 MUONStatusMap.C:92
 MUONStatusMap.C:93
 MUONStatusMap.C:94
 MUONStatusMap.C:95
 MUONStatusMap.C:96
 MUONStatusMap.C:97
 MUONStatusMap.C:98
 MUONStatusMap.C:99
 MUONStatusMap.C:100
 MUONStatusMap.C:101
 MUONStatusMap.C:102
 MUONStatusMap.C:103
 MUONStatusMap.C:104
 MUONStatusMap.C:105
 MUONStatusMap.C:106
 MUONStatusMap.C:107
 MUONStatusMap.C:108
 MUONStatusMap.C:109
 MUONStatusMap.C:110
 MUONStatusMap.C:111
 MUONStatusMap.C:112
 MUONStatusMap.C:113
 MUONStatusMap.C:114
 MUONStatusMap.C:115
 MUONStatusMap.C:116
 MUONStatusMap.C:117
 MUONStatusMap.C:118
 MUONStatusMap.C:119
 MUONStatusMap.C:120
 MUONStatusMap.C:121
 MUONStatusMap.C:122
 MUONStatusMap.C:123
 MUONStatusMap.C:124
 MUONStatusMap.C:125
 MUONStatusMap.C:126
 MUONStatusMap.C:127
 MUONStatusMap.C:128
 MUONStatusMap.C:129
 MUONStatusMap.C:130
 MUONStatusMap.C:131
 MUONStatusMap.C:132
 MUONStatusMap.C:133
 MUONStatusMap.C:134
 MUONStatusMap.C:135
 MUONStatusMap.C:136
 MUONStatusMap.C:137
 MUONStatusMap.C:138
 MUONStatusMap.C:139
 MUONStatusMap.C:140
 MUONStatusMap.C:141
 MUONStatusMap.C:142
 MUONStatusMap.C:143
 MUONStatusMap.C:144
 MUONStatusMap.C:145
 MUONStatusMap.C:146
 MUONStatusMap.C:147
 MUONStatusMap.C:148
 MUONStatusMap.C:149
 MUONStatusMap.C:150
 MUONStatusMap.C:151
 MUONStatusMap.C:152
 MUONStatusMap.C:153
 MUONStatusMap.C:154
 MUONStatusMap.C:155
 MUONStatusMap.C:156
 MUONStatusMap.C:157
 MUONStatusMap.C:158
 MUONStatusMap.C:159
 MUONStatusMap.C:160
 MUONStatusMap.C:161
 MUONStatusMap.C:162
 MUONStatusMap.C:163
 MUONStatusMap.C:164
 MUONStatusMap.C:165
 MUONStatusMap.C:166
 MUONStatusMap.C:167
 MUONStatusMap.C:168
 MUONStatusMap.C:169
 MUONStatusMap.C:170
 MUONStatusMap.C:171
 MUONStatusMap.C:172
 MUONStatusMap.C:173
 MUONStatusMap.C:174
 MUONStatusMap.C:175
 MUONStatusMap.C:176
 MUONStatusMap.C:177
 MUONStatusMap.C:178
 MUONStatusMap.C:179
 MUONStatusMap.C:180
 MUONStatusMap.C:181
 MUONStatusMap.C:182
 MUONStatusMap.C:183
 MUONStatusMap.C:184
 MUONStatusMap.C:185
 MUONStatusMap.C:186
 MUONStatusMap.C:187
 MUONStatusMap.C:188
 MUONStatusMap.C:189
 MUONStatusMap.C:190
 MUONStatusMap.C:191
 MUONStatusMap.C:192
 MUONStatusMap.C:193
 MUONStatusMap.C:194
 MUONStatusMap.C:195
 MUONStatusMap.C:196
 MUONStatusMap.C:197
 MUONStatusMap.C:198
 MUONStatusMap.C:199
 MUONStatusMap.C:200
 MUONStatusMap.C:201
 MUONStatusMap.C:202
 MUONStatusMap.C:203
 MUONStatusMap.C:204
 MUONStatusMap.C:205
 MUONStatusMap.C:206
 MUONStatusMap.C:207
 MUONStatusMap.C:208
 MUONStatusMap.C:209
 MUONStatusMap.C:210
 MUONStatusMap.C:211
 MUONStatusMap.C:212
 MUONStatusMap.C:213
 MUONStatusMap.C:214
 MUONStatusMap.C:215
 MUONStatusMap.C:216
 MUONStatusMap.C:217
 MUONStatusMap.C:218
 MUONStatusMap.C:219
 MUONStatusMap.C:220
 MUONStatusMap.C:221
 MUONStatusMap.C:222
 MUONStatusMap.C:223
 MUONStatusMap.C:224
 MUONStatusMap.C:225
 MUONStatusMap.C:226
 MUONStatusMap.C:227
 MUONStatusMap.C:228
 MUONStatusMap.C:229
 MUONStatusMap.C:230
 MUONStatusMap.C:231
 MUONStatusMap.C:232
 MUONStatusMap.C:233
 MUONStatusMap.C:234
 MUONStatusMap.C:235
 MUONStatusMap.C:236
 MUONStatusMap.C:237
 MUONStatusMap.C:238
 MUONStatusMap.C:239
 MUONStatusMap.C:240
 MUONStatusMap.C:241
 MUONStatusMap.C:242
 MUONStatusMap.C:243
 MUONStatusMap.C:244
 MUONStatusMap.C:245
 MUONStatusMap.C:246
 MUONStatusMap.C:247
 MUONStatusMap.C:248
 MUONStatusMap.C:249
 MUONStatusMap.C:250
 MUONStatusMap.C:251
 MUONStatusMap.C:252
 MUONStatusMap.C:253
 MUONStatusMap.C:254
 MUONStatusMap.C:255
 MUONStatusMap.C:256
 MUONStatusMap.C:257
 MUONStatusMap.C:258
 MUONStatusMap.C:259
 MUONStatusMap.C:260
 MUONStatusMap.C:261
 MUONStatusMap.C:262
 MUONStatusMap.C:263
 MUONStatusMap.C:264
 MUONStatusMap.C:265
 MUONStatusMap.C:266
 MUONStatusMap.C:267
 MUONStatusMap.C:268
 MUONStatusMap.C:269
 MUONStatusMap.C:270
 MUONStatusMap.C:271
 MUONStatusMap.C:272
 MUONStatusMap.C:273
 MUONStatusMap.C:274
 MUONStatusMap.C:275
 MUONStatusMap.C:276
 MUONStatusMap.C:277
 MUONStatusMap.C:278
 MUONStatusMap.C:279
 MUONStatusMap.C:280
 MUONStatusMap.C:281
 MUONStatusMap.C:282
 MUONStatusMap.C:283
 MUONStatusMap.C:284
 MUONStatusMap.C:285
 MUONStatusMap.C:286
 MUONStatusMap.C:287
 MUONStatusMap.C:288
 MUONStatusMap.C:289
 MUONStatusMap.C:290
 MUONStatusMap.C:291
 MUONStatusMap.C:292
 MUONStatusMap.C:293
 MUONStatusMap.C:294
 MUONStatusMap.C:295
 MUONStatusMap.C:296
 MUONStatusMap.C:297
 MUONStatusMap.C:298
 MUONStatusMap.C:299
 MUONStatusMap.C:300
 MUONStatusMap.C:301
 MUONStatusMap.C:302
 MUONStatusMap.C:303
 MUONStatusMap.C:304
 MUONStatusMap.C:305
 MUONStatusMap.C:306
 MUONStatusMap.C:307
 MUONStatusMap.C:308
 MUONStatusMap.C:309
 MUONStatusMap.C:310
 MUONStatusMap.C:311
 MUONStatusMap.C:312
 MUONStatusMap.C:313
 MUONStatusMap.C:314
 MUONStatusMap.C:315
 MUONStatusMap.C:316
 MUONStatusMap.C:317
 MUONStatusMap.C:318
 MUONStatusMap.C:319
 MUONStatusMap.C:320
 MUONStatusMap.C:321
 MUONStatusMap.C:322
 MUONStatusMap.C:323
 MUONStatusMap.C:324
 MUONStatusMap.C:325
 MUONStatusMap.C:326
 MUONStatusMap.C:327
 MUONStatusMap.C:328
 MUONStatusMap.C:329
 MUONStatusMap.C:330
 MUONStatusMap.C:331
 MUONStatusMap.C:332
 MUONStatusMap.C:333
 MUONStatusMap.C:334
 MUONStatusMap.C:335
 MUONStatusMap.C:336
 MUONStatusMap.C:337
 MUONStatusMap.C:338
 MUONStatusMap.C:339
 MUONStatusMap.C:340
 MUONStatusMap.C:341
 MUONStatusMap.C:342
 MUONStatusMap.C:343
 MUONStatusMap.C:344
 MUONStatusMap.C:345
 MUONStatusMap.C:346
 MUONStatusMap.C:347
 MUONStatusMap.C:348
 MUONStatusMap.C:349
 MUONStatusMap.C:350
 MUONStatusMap.C:351
 MUONStatusMap.C:352
 MUONStatusMap.C:353
 MUONStatusMap.C:354
 MUONStatusMap.C:355
 MUONStatusMap.C:356
 MUONStatusMap.C:357
 MUONStatusMap.C:358
 MUONStatusMap.C:359
 MUONStatusMap.C:360
 MUONStatusMap.C:361
 MUONStatusMap.C:362
 MUONStatusMap.C:363
 MUONStatusMap.C:364
 MUONStatusMap.C:365
 MUONStatusMap.C:366
 MUONStatusMap.C:367
 MUONStatusMap.C:368
 MUONStatusMap.C:369
 MUONStatusMap.C:370
 MUONStatusMap.C:371
 MUONStatusMap.C:372
 MUONStatusMap.C:373
 MUONStatusMap.C:374
 MUONStatusMap.C:375
 MUONStatusMap.C:376
 MUONStatusMap.C:377
 MUONStatusMap.C:378
 MUONStatusMap.C:379
 MUONStatusMap.C:380
 MUONStatusMap.C:381
 MUONStatusMap.C:382
 MUONStatusMap.C:383
 MUONStatusMap.C:384
 MUONStatusMap.C:385
 MUONStatusMap.C:386
 MUONStatusMap.C:387
 MUONStatusMap.C:388
 MUONStatusMap.C:389
 MUONStatusMap.C:390
 MUONStatusMap.C:391
 MUONStatusMap.C:392
 MUONStatusMap.C:393
 MUONStatusMap.C:394
 MUONStatusMap.C:395
 MUONStatusMap.C:396
 MUONStatusMap.C:397
 MUONStatusMap.C:398
 MUONStatusMap.C:399
 MUONStatusMap.C:400
 MUONStatusMap.C:401
 MUONStatusMap.C:402
 MUONStatusMap.C:403
 MUONStatusMap.C:404
 MUONStatusMap.C:405
 MUONStatusMap.C:406
 MUONStatusMap.C:407
 MUONStatusMap.C:408
 MUONStatusMap.C:409
 MUONStatusMap.C:410
 MUONStatusMap.C:411
 MUONStatusMap.C:412
 MUONStatusMap.C:413
 MUONStatusMap.C:414
 MUONStatusMap.C:415
 MUONStatusMap.C:416
 MUONStatusMap.C:417
 MUONStatusMap.C:418
 MUONStatusMap.C:419
 MUONStatusMap.C:420
 MUONStatusMap.C:421
 MUONStatusMap.C:422
 MUONStatusMap.C:423
 MUONStatusMap.C:424
 MUONStatusMap.C:425
 MUONStatusMap.C:426
 MUONStatusMap.C:427
 MUONStatusMap.C:428
 MUONStatusMap.C:429
 MUONStatusMap.C:430
 MUONStatusMap.C:431
 MUONStatusMap.C:432
 MUONStatusMap.C:433
 MUONStatusMap.C:434
 MUONStatusMap.C:435
 MUONStatusMap.C:436
 MUONStatusMap.C:437
 MUONStatusMap.C:438
 MUONStatusMap.C:439
 MUONStatusMap.C:440
 MUONStatusMap.C:441
 MUONStatusMap.C:442
 MUONStatusMap.C:443
 MUONStatusMap.C:444
 MUONStatusMap.C:445
 MUONStatusMap.C:446
 MUONStatusMap.C:447
 MUONStatusMap.C:448
 MUONStatusMap.C:449
 MUONStatusMap.C:450
 MUONStatusMap.C:451
 MUONStatusMap.C:452
 MUONStatusMap.C:453
 MUONStatusMap.C:454
 MUONStatusMap.C:455
 MUONStatusMap.C:456
 MUONStatusMap.C:457
 MUONStatusMap.C:458
 MUONStatusMap.C:459
 MUONStatusMap.C:460
 MUONStatusMap.C:461
 MUONStatusMap.C:462
 MUONStatusMap.C:463
 MUONStatusMap.C:464
 MUONStatusMap.C:465
 MUONStatusMap.C:466
 MUONStatusMap.C:467
 MUONStatusMap.C:468
 MUONStatusMap.C:469
 MUONStatusMap.C:470
 MUONStatusMap.C:471
 MUONStatusMap.C:472
 MUONStatusMap.C:473
 MUONStatusMap.C:474
 MUONStatusMap.C:475
 MUONStatusMap.C:476
 MUONStatusMap.C:477
 MUONStatusMap.C:478
 MUONStatusMap.C:479
 MUONStatusMap.C:480
 MUONStatusMap.C:481
 MUONStatusMap.C:482
 MUONStatusMap.C:483
 MUONStatusMap.C:484
 MUONStatusMap.C:485
 MUONStatusMap.C:486
 MUONStatusMap.C:487
 MUONStatusMap.C:488
 MUONStatusMap.C:489
 MUONStatusMap.C:490
 MUONStatusMap.C:491
 MUONStatusMap.C:492
 MUONStatusMap.C:493
 MUONStatusMap.C:494
 MUONStatusMap.C:495
 MUONStatusMap.C:496
 MUONStatusMap.C:497
 MUONStatusMap.C:498
 MUONStatusMap.C:499
 MUONStatusMap.C:500
 MUONStatusMap.C:501
 MUONStatusMap.C:502
 MUONStatusMap.C:503
 MUONStatusMap.C:504
 MUONStatusMap.C:505
 MUONStatusMap.C:506
 MUONStatusMap.C:507
 MUONStatusMap.C:508
 MUONStatusMap.C:509
 MUONStatusMap.C:510
 MUONStatusMap.C:511
 MUONStatusMap.C:512