ROOT logo
/**************************************************************************
* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
*                                                                        *
* Author: The ALICE Off-line Project.                                    *
* Contributors are mentioned in the code where appropriate.              *
*                                                                        *
* Permission to use, copy, modify and distribute this software and its   *
* documentation strictly for non-commercial purposes is hereby granted   *
* without fee, provided that the above copyright notice appears in all   *
* copies and that both the copyright notice and this permission notice   *
* appear in the supporting documentation. The authors make no claims     *
* about the suitability of this software for any purpose. It is          *
* provided "as is" without express or implied warranty.                  *
**************************************************************************/

// $Id$

#include "AliMUON2DStoreValidator.h"

#include "AliLog.h"
#include "AliMUONCheckItem.h"
#include "AliMUONVCalibParam.h"
#include "AliMUONVStore.h"
#include "AliMpConstants.h"
#include "AliMpDDLStore.h"
#include "AliMpDEManager.h"
#include "AliMpDetElement.h"
#include "AliMpManuIterator.h"
#include <Riostream.h>
#include <TList.h>
#include <TObjArray.h>
#include <TObjString.h>

//-----------------------------------------------------------------------------
/// \class AliMUON2DStoreValidator
///
/// Determine which channels, manus, DEs, stations are missing
/// from a VStore, which must be 2D, and the 2 dimensions must be
/// (detElemId,manuId).
/// This is mainly to be used during (shuttle) preprocessing
/// to insure that what we'll put in the CDB is as complete as possible,
/// and to detect possible problem.
///
/// We made an effort to present the result of the validation in the most
/// concise way (i.e. if all channels of a DE are missing, we do not list 
/// them, we just write "DE dead" ;-) )
/// 
/// The list of missing things is kept in a structure of objects defined as :
/// 
/// fMissing = TObjArray[0..N tracking chambers]
///
/// fMissing[iChamber] = AliMUONCheckItem which contains n AliMUONCheckItem, 
/// where n is the number of DE for that chamber
///
/// fMissing[iChamber]->GetItem(de) = AliMUONCheckItem which contains m
/// AliMUONCheckItem where m is the number of Manu for that DE
///
/// fMissing[iChamber]->GetItem(de)->GetItem(manu) = AliMUONCheckItem which 
/// contains k TObjString = Form("%d",manuChannel)
///
/// \author Laurent Aphecetche
//-----------------------------------------------------------------------------

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

//_____________________________________________________________________________
AliMUON2DStoreValidator::AliMUON2DStoreValidator() 
: TObject(),
  fChambers(0x0),
  fStatus(0x0)
{
    /// ctor
}

//_____________________________________________________________________________
AliMUON2DStoreValidator::~AliMUON2DStoreValidator()
{
  /// dtor
  delete fChambers;
  delete fStatus;
}

//_____________________________________________________________________________
AliMUONCheckItem* 
AliMUON2DStoreValidator::GetChamber(Int_t chamberID)
{
  /// Return (and create if not present) the given chamber
  /// chamberID in 0..NCh()
  
  if ( chamberID < 0 || chamberID >= AliMpConstants::NofTrackingChambers() )
  {
    AliFatal(Form("Invalid chamber number %d",chamberID));
    return 0x0;
  }
  
  if (!fChambers) 
  {
    fChambers = new TObjArray(AliMpConstants::NofTrackingChambers());
  }
    
  AliMUONCheckItem* chamber = 
    static_cast<AliMUONCheckItem*>(fChambers->At(chamberID));
  
  if (!chamber)
  {
    chamber = new AliMUONCheckItem(chamberID,
                                   AliMpDEManager::GetNofDEInChamber(chamberID),
                                   "Chamber");
    fChambers->AddAt(chamber,chamberID);
  }
  return chamber;
}

//_____________________________________________________________________________
AliMUONCheckItem* 
AliMUON2DStoreValidator::GetDE(Int_t detElemId)
{
  /// Return (and create if not present) a given detection element
  
  Int_t chamberID = AliMpDEManager::GetChamberId(detElemId);
  AliMUONCheckItem* chamber = GetChamber(chamberID);  
  AliMUONCheckItem* de = 
    static_cast<AliMUONCheckItem*>(chamber->GetItem(detElemId));
  if (!de)
  {
    AliDebug(3,Form("Did not find DE %4d into chamber %d, will create it",
                    detElemId,chamberID));
    de = new AliMUONCheckItem(detElemId,
                              AliMpDDLStore::Instance()->GetDetElement(detElemId)->NofManus(),
                              "Detection Element");
    Bool_t ok = chamber->AddItem(detElemId,de);
    if (!ok)
    {
      AliError(Form("Could not add DE %4d into chamber %2d",detElemId,chamberID));
    }
  }
  return de;
}

//_____________________________________________________________________________
AliMUONCheckItem* 
AliMUON2DStoreValidator::GetManu(Int_t detElemId, Int_t manuId)
{
  /// Return (and create) a given manu
  
  AliMUONCheckItem* de = GetDE(detElemId);
  AliMUONCheckItem* manu = static_cast<AliMUONCheckItem*>(de->GetItem(manuId));
  if (!manu)
  {
    manu = new AliMUONCheckItem(manuId,AliMpDDLStore::Instance()->GetDetElement(detElemId)->NofChannelsInManu(manuId),"Manu");
    Bool_t ok = de->AddItem(manuId,manu);
    if (!ok)
    {
      AliError(Form("Could not add manu %4d into DE %4d",manuId,detElemId));
    }
    
  }
  return manu;
}

//_____________________________________________________________________________
void
AliMUON2DStoreValidator::AddMissingChannel(Int_t detElemId, 
                                           Int_t manuId, Int_t manuChannel)
{
  /// Add one missing channel to the list of missing things
  
  AliDebug(3,Form("DE %4d Manu %4d Channel %2d is missing",
                  detElemId,manuId,manuChannel));

  AliMUONCheckItem* manu = GetManu(detElemId,manuId);
  Bool_t ok = manu->AddItem(manuChannel,new TObjString(Form("%2d",manuChannel)));
  if (!ok)
  {
    AliError(Form("Could not add channel %2d to manuId %4d in DE %4d",
                    manuChannel,manuId,detElemId));
  }
}

//_____________________________________________________________________________
void
AliMUON2DStoreValidator::AddMissingManu(Int_t detElemId, Int_t manuId)
{
  /// Add one missing manu to the list of missing things
  
  AliDebug(3,Form("DE %4d Manu %4d is completely missing",
                  detElemId,manuId));

  Int_t n(AliMpDDLStore::Instance()->GetDetElement(detElemId)->NofChannelsInManu(manuId));

  for ( Int_t i = 0; i < n; ++i )
  {
    AddMissingChannel(detElemId,manuId,i);
  }
}

//_____________________________________________________________________________
void
AliMUON2DStoreValidator::ReportManu(TList& lines, const AliMUONCheckItem& manu)
{  
  /// Report list of missing channels from this manu
  
  TObjString* channel(0x0);
  TIter next(manu.CreateIterator());
  
  while ( ( channel = static_cast<TObjString*>(next()) ) )
  {
    lines.Add(new TObjString(Form("\t\t\tChannel %s is missing or dead",
                                  channel->GetString().Data())));
  }
  
}

//_____________________________________________________________________________
void
AliMUON2DStoreValidator::ReportDE(TList& lines, const AliMUONCheckItem& de)
{  
  /// Report list of missing manus from this de
  AliMUONCheckItem* manu(0x0);
  
  TIter next(de.CreateIterator());
  
  lines.Add(new TObjString(Form("DE %5d",de.GetID())));
  
  
  while ( ( manu = static_cast<AliMUONCheckItem*>(next()) ) )
  {
    if ( manu->IsDead() )
    {
      lines.Add(new TObjString(Form("\t\tManu %4d is missing or dead",manu->GetID())));
    }
    else
    {
      ReportManu(lines,*manu);
    }
  }
}

//_____________________________________________________________________________
void
AliMUON2DStoreValidator::ReportChamber(TList& lines, const AliMUONCheckItem& chamber)
{  
  /// Report list of missing de from this chamber
  
  AliMUONCheckItem* de(0x0);
  TIter next(chamber.CreateIterator());
  
  while ( ( de = static_cast<AliMUONCheckItem*>(next()) ) )
  {
    if ( de->IsDead() )
    {
      lines.Add(new TObjString(Form("\tDE %4d is missing or dead",de->GetID())));
    }
    else
    {
      ReportDE(lines,*de);
    }
  }
}

//_____________________________________________________________________________
void
AliMUON2DStoreValidator::Report(TList& lines) const
{ 
  /// 
  if (fChambers) 
  {
    Report(lines,*fChambers); 
  }
}

//_____________________________________________________________________________
void
AliMUON2DStoreValidator::Report(TList& lines, const TObjArray& chambers)
{
  /// Reports what is missing, trying to be as concise as possible.
  
  for ( Int_t iChamber = 0; iChamber <= chambers.GetLast(); ++iChamber )
  {
    AliMUONCheckItem* chamber = static_cast<AliMUONCheckItem*>(chambers.At(iChamber));
    if ( chamber )
    {
      if ( chamber->IsDead() )
      {
        lines.Add(new TObjString(Form("Chamber %2d is missing or dead",iChamber)));
      }
      else
      {
        ReportChamber(lines,*chamber);
      }
    }
  }
}

//_____________________________________________________________________________
TObjArray* 
AliMUON2DStoreValidator::Validate(const AliMUONVStore& store,
                                  AliMUONVStore* config)
{                                  
  /// Validate the store. Check only the presence of all manus (i.e.
  /// check nothing about the values themselves). 
  /// Absence of manus which are not in the config is considered as normal.
  
  Bool_t (*kCheck)(const AliMUONVCalibParam&,Int_t) = 0x0;
  return Validate(store,kCheck,config);
}

//_____________________________________________________________________________
TObjArray* 
AliMUON2DStoreValidator::Validate(const AliMUONVStore& store,
                                  Bool_t (*check)(const AliMUONVCalibParam&,Int_t),
                                  AliMUONVStore* config)
{
  /// Validate the store. 
  /// The check method is used to decide if a store content value
  /// is valid or not.
  
  delete fChambers;
  fChambers = 0x0;
  
  // Now checks if some full manus are missing

  AliMpManuIterator it;

  Int_t detElemId;
  Int_t manuId;
  
  while ( it.Next(detElemId,manuId) )
  {
    AliMUONVCalibParam* test = 
      static_cast<AliMUONVCalibParam*>(store.FindObject(detElemId,manuId));
    if (!test)
    {
      // completely missing manu
      if ( !config || ( config && config->FindObject(detElemId,manuId ) ) )
      {
        // manu is in the config but not in the store : that's an error
        AddMissingManu(detElemId,manuId);
      }
    }
    else
    {
      if (!check) continue;
      
      AliMpDetElement* de = AliMpDDLStore::Instance()->GetDetElement(detElemId);
      
      // manu is there, check all its channels
      for ( Int_t manuChannel = 0 ; manuChannel < test->Size(); ++manuChannel )
      {
        if ( de->IsConnectedChannel(manuId,manuChannel) &&
             !check(*test,manuChannel) )             
        {
          AddMissingChannel(detElemId,manuId,manuChannel);
        }
      }
    }
  }
  return fChambers;
  
}


//_____________________________________________________________________________
TObjArray* 
AliMUON2DStoreValidator::Validate(const AliMUONVStore& store,
                                  Float_t invalidFloatValue,
                                  AliMUONVStore* config)
{
  /// Validate the store. 
  /// The invalidFloatValue is used to decide if a store content value
  /// is valid or not.
  
  delete fChambers;
  fChambers = 0x0;
  
  // Now checks if some full manus are missing

  AliMpManuIterator it;
  Int_t detElemId;
  Int_t manuId;
  
  while ( it.Next(detElemId,manuId) )
  {
    AliMUONVCalibParam* test = 
      static_cast<AliMUONVCalibParam*>(store.FindObject(detElemId,manuId));
    if (!test)
    {
      if ( !config || ( config && config->FindObject(detElemId,manuId ) ) )
      {
        // completely missing manu
        AddMissingManu(detElemId,manuId);
      }
    }
    else
    {
      // manu is there, check all its channels
      AliMpDetElement* de = AliMpDDLStore::Instance()->GetDetElement(detElemId);
      
      for ( Int_t manuChannel = 0 ; manuChannel < test->Size(); ++manuChannel )
      {
        if ( de->IsConnectedChannel(manuId,manuChannel) &&
             ( test->ValueAsFloat(manuChannel,0) == invalidFloatValue ||
               test->ValueAsFloat(manuChannel,1) == invalidFloatValue ) )             
        {
          AddMissingChannel(detElemId,manuId,manuChannel);
        }
      }
    }
  }
  return fChambers;
}


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