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 AliMUONDigitStoreVImpl
///
/// Base implementation of VDigitStore, where digits are simply put
/// within a single TClonesArray (to get compact output on disk) and
/// fast search is achieved by using a separate index (a 2Dmap)
///
/// Note that this class is a base implementation only, because to add
/// a digit to a TClonesArray, you need to give the concrete class
/// name (made in subclass by overriding :
///
/// AliMUONVDigit* AddConcreteDigit(TClonesArray&,const AliMUONVDigit&, Int_t)
///
/// and
///
/// AliMUONVDigit* CreateDigit((Int_t detElemId, Int_t manuId,
/// Int_t manuChannel, Int_t cathode) const
/// 
/// methods.
///
/// \author Laurent Aphecetche
//-----------------------------------------------------------------------------

#include "AliMUONDigitStoreVImpl.h"

#include "AliLog.h"
#include "AliMUONDigitStoreVImplIterator.h"
#include "AliMUON2DMap.h"
#include "AliMUONTreeManager.h"
#include "AliMUONCalibParamNI.h"
#include "AliMpConstants.h"
#include <TClonesArray.h>
#include <TTree.h>
#include <TString.h>
#include <Riostream.h>

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

namespace
{
  TString BaseName(const TString& name)
  {
    /// Name of the branch, depending on the tree name
    if ( name == "TreeS" ) return "MUONSDigit";
    if ( name == "TreeD" ) return "MUONDigit";
    return "";
  }
  
  Int_t InternalManuId(Int_t cathode, Int_t manuId)
  {
    /// Very local convention to insure that trigger digits are not
    /// mixed (as by default a same manuId can be in cath 0 or 1, which
    /// is never the case for tracker)
    ///
    /// WARNING : the resulting manuId must still be contained within 16 bits !
    ///
    return manuId | ( cathode << 15 );
  }
  
}

//_____________________________________________________________________________
AliMUONDigitStoreVImpl::AliMUONDigitStoreVImpl(const char* concreteClassName)
: AliMUONVDigitStore(),
  fDigits(new TClonesArray(concreteClassName,100)),
  fMap(0x0),
  fIndexed(kFALSE)
{
    /// ctor
}

//_____________________________________________________________________________
AliMUONDigitStoreVImpl::AliMUONDigitStoreVImpl(const AliMUONDigitStoreVImpl&)
: AliMUONVDigitStore(),
fDigits(0x0),
fMap(0x0),
fIndexed(kFALSE)
{
  /// copy ctor
  AliError("Please implement me");
}

//_____________________________________________________________________________
AliMUONDigitStoreVImpl& 
AliMUONDigitStoreVImpl::operator=(const AliMUONDigitStoreVImpl&)
{
  /// assignement operator
  AliError("Please implement me");
  return *this;
}


//_____________________________________________________________________________
AliMUONDigitStoreVImpl::~AliMUONDigitStoreVImpl()
{
  /// dtor
  delete fDigits;
  delete fMap;
}

//_____________________________________________________________________________
Bool_t 
AliMUONDigitStoreVImpl::Connect(TTree& tree, Bool_t alone) const
{
  /// Connect this to the tree.
  
  TString branchName(BaseName(tree.GetName()));
  branchName += ".";
  AliMUONTreeManager tman;
  Bool_t ok;
  
  if (tree.GetBranch(branchName.Data()))
  {
    if ( alone ) tman.UpdateBranchStatuses(tree,BaseName(tree.GetName()));
    ok = tman.SetAddress(tree,branchName.Data(),
                         const_cast<TClonesArray**>(&fDigits));
  }
  else
  {
    ok = tman.MakeBranch(tree,ClassName(),"TClonesArray",branchName.Data(),
                         const_cast<TClonesArray**>(&fDigits));
  }
  
  return ok;
}

//_____________________________________________________________________________
void 
AliMUONDigitStoreVImpl::Clear(Option_t*)
{
  /// Clear the internal digit array AND the index
  fDigits->Clear("C");
  ClearIndex();
}

//_____________________________________________________________________________
void
AliMUONDigitStoreVImpl::ClearIndex()
{
  /// Clear our internal index
  if ( fMap ) 
  {
    fMap->Clear();
  }
  else
  {
    fMap = new AliMUON2DMap(true);
  }
  fIndexed = kFALSE;
}

//_____________________________________________________________________________
AliMUONVDigit* 
AliMUONDigitStoreVImpl::Add(const AliMUONVDigit& vdigit, EReplacePolicy replace)
{
  /// Try to add a digit to the store. Return whether the try was successfull
  /// or not.
  /// 
  /// If the digit is already there, the action taken depends on "replace"
  /// kAllow -> replacement will occur (i.e. return kTRUE)
  /// kDeny -> replacement will *not* occur (and returned value is kFALSE)
  /// kMerge -> both digits will be merged into one (return kTRUE)
  ///
  
  if ( replace != kIgnore )
  {
    AliMUONVDigit* alreadyThere = Find(vdigit);
    if ( alreadyThere ) 
    {
      if ( replace == kDeny ) return 0x0;
      if ( replace == kMerge )
      {
        alreadyThere->MergeWith(vdigit);
        return alreadyThere;
      }
    }
  }
  
  
  Int_t n = fDigits->GetLast()+1;

  AliMUONVDigit* d = AddConcreteDigit(*fDigits,vdigit,n);
  
  if ( d )
  {
    UpdateIndex(*d,n);
  }
  
  return d;
}

//_____________________________________________________________________________
TIterator* 
AliMUONDigitStoreVImpl::CreateIterator() const
{
  /// Create an iterator over the full store
  return fDigits->MakeIterator();
}

//_____________________________________________________________________________
TIterator* 
AliMUONDigitStoreVImpl::CreateIterator(Int_t firstDetElemId, 
                                    Int_t lastDetElemId,
                                    Int_t cathode) const
{
  /// Create an iterator on a given part of the store
  (const_cast<AliMUONDigitStoreVImpl*>(this))->ReIndex();

  return new AliMUONDigitStoreVImplIterator(this,firstDetElemId,lastDetElemId,cathode);
}

//_____________________________________________________________________________
TIterator*
AliMUONDigitStoreVImpl::CreateTrackerIterator() const
{
  /// Create an iterator to loop over tracker digits only
  
  (const_cast<AliMUONDigitStoreVImpl*>(this))->ReIndex();

  return new AliMUONDigitStoreVImplIterator(this,100,1025);
}

//_____________________________________________________________________________
TIterator* 
AliMUONDigitStoreVImpl::CreateTriggerIterator() const
{
  /// Create an iterator to loop over trigger digits only
  (const_cast<AliMUONDigitStoreVImpl*>(this))->ReIndex();

  return new AliMUONDigitStoreVImplIterator(this,1100,1417);
}

//_____________________________________________________________________________
AliMUONVDigit* 
AliMUONDigitStoreVImpl::Find(const AliMUONVDigit& digit) const
{
  /// Find a given digit
  /// Note that we only check for the id of the digit (i.e. de,manu,...)
  /// not for the actual content (charge, ...) to decide whether
  /// it's the same digit or not
  
  return FindObject(digit.DetElemId(),digit.ManuId(),digit.ManuChannel(),
                    digit.Cathode());
}

//_____________________________________________________________________________
void
AliMUONDigitStoreVImpl::ReIndex()
{
  /// Recompute the fMap, which map (de,manu,ch) to an index within
  /// the fDigits array
  
  if ( fIndexed ) return;
  
  ClearIndex();
  
  TIter next(fDigits);
  AliMUONVDigit* d;
  Int_t digitIndex(0);
  
  while ( ( d = static_cast<AliMUONVDigit*>(next()) ) )
  {
    UpdateIndex(*d,digitIndex++);
  }
  
  fIndexed = kTRUE;
}

//_____________________________________________________________________________
void
AliMUONDigitStoreVImpl::UpdateIndex(const AliMUONVDigit& digit, Int_t index)
{
  /// Update the internal index given this new digit
  if (!fMap) fMap = new AliMUON2DMap(true);
  
  Int_t manuId = InternalManuId(digit.Cathode(),digit.ManuId());
                        
  AliMUONVCalibParam* param = 
  static_cast<AliMUONVCalibParam*>
  (fMap->FindObject(digit.DetElemId(),manuId));

  if (!param)
  {
    param = new AliMUONCalibParamNI(1,64,digit.DetElemId(),manuId,-1);
    fMap->Add(param);
  }
  param->SetValueAsInt(digit.ManuChannel(),0,index);
  fIndexed = kTRUE;
}

//_____________________________________________________________________________
Int_t
AliMUONDigitStoreVImpl::FindIndex(Int_t detElemId, Int_t internalManuId,
                                  Int_t manuChannel) const
{
  /// Find the index of a given (de,internalManu,ch) triplet
  
  AliMUONVCalibParam* param = 
  static_cast<AliMUONVCalibParam*>
  (fMap->FindObject(detElemId,internalManuId));
  
  if (param)
  {
    return param->ValueAsInt(manuChannel);
  }
  
  return -1;
}

//_____________________________________________________________________________
Int_t
AliMUONDigitStoreVImpl::FindIndex(const AliMUONVDigit& digit) const
{
  /// Find the index of a given digit
  return FindIndex(digit.DetElemId(),
                   InternalManuId(digit.Cathode(),digit.ManuId()),
                   digit.ManuChannel());
}

//_____________________________________________________________________________
AliMUONVDigit* 
AliMUONDigitStoreVImpl::FindObject(UInt_t uniqueID) const
{
  /// Find digit by its uniqueID
  
  return FindObject(AliMUONVDigit::DetElemId(uniqueID),
                    AliMUONVDigit::ManuId(uniqueID),
                    AliMUONVDigit::ManuChannel(uniqueID),
                    AliMUONVDigit::Cathode(uniqueID));
}

//_____________________________________________________________________________
AliMUONVDigit* 
AliMUONDigitStoreVImpl::FindObject(Int_t detElemId, Int_t manuId, Int_t manuChannel, 
                                Int_t cathode) const
{
  /// Find a digit

  (const_cast<AliMUONDigitStoreVImpl*>(this))->ReIndex();

  Int_t index = FindIndex(detElemId,InternalManuId(cathode,manuId),manuChannel);
  
  if (index>=0 ) 
  {
    return static_cast<AliMUONVDigit*>(fDigits->UncheckedAt(index));
  }
  
  return 0x0;
}

//_____________________________________________________________________________
Int_t 
AliMUONDigitStoreVImpl::GetSize() const
{
  /// Return the number of digits we hold
  return fDigits->GetLast()+1;
}

//_____________________________________________________________________________
AliMUONVDigit* 
AliMUONDigitStoreVImpl::Remove(AliMUONVDigit& digit)
{
  /// Remove a digit
  AliMUONVDigit* d = static_cast<AliMUONVDigit*>(fDigits->Remove(&digit));
  if (d) 
  {
    UpdateIndex(*d,-1);
  }
  return d;
}

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