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 AliMUONDigitStoreVImplIterator
///
/// Implementation of AliMUONVDataIterator for AliMUONDigitStoreVImpl
///
/// \author Laurent Aphecetche, Subatech
///
//-----------------------------------------------------------------------------

#include "AliMUONDigitStoreVImplIterator.h"

#include "AliMUONVDigit.h"
#include "AliMUONDigitStoreVImpl.h"
#include "AliMUON2DMap.h"
#include "AliMUONVCalibParam.h"
#include <TClonesArray.h>
#include <TError.h>

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

//_____________________________________________________________________________
AliMUONDigitStoreVImplIterator::AliMUONDigitStoreVImplIterator(const AliMUONDigitStoreVImpl* store)
: TIterator(),
fkStore(store),
fFirstDetElemId(100),
fLastDetElemId(1417),
fCathode(2),
fStoreIterator(store->fMap->CreateIterator()),
fCurrentCalibParam(0x0),
fCurrentCalibParamIndex(-1)
{
  /// ctor for full iteration
}

//_____________________________________________________________________________
AliMUONDigitStoreVImplIterator::AliMUONDigitStoreVImplIterator(const AliMUONDigitStoreVImpl* store,
                                                               Int_t firstDE,
                                                               Int_t lastDE,
                                                               Int_t cathode)
: TIterator(),
fkStore(store),
fFirstDetElemId(firstDE),
fLastDetElemId(lastDE),
fCathode(cathode),
fStoreIterator(store->fMap->CreateIterator(firstDE,lastDE)),
fCurrentCalibParam(0x0),
fCurrentCalibParamIndex(-1)
{
  /// ctor for partial iteration
}

//_____________________________________________________________________________
AliMUONDigitStoreVImplIterator&
AliMUONDigitStoreVImplIterator::operator=(const TIterator&)
{
  // overriden assignment operator (imposed by Root's declaration of Titerator ?)
  Fatal("TIterator::operator=","Not implementeable"); // because there's no clone in TIterator :-(
  return *this;
}

//_____________________________________________________________________________
AliMUONDigitStoreVImplIterator::~AliMUONDigitStoreVImplIterator()
{
  /// dtor
  delete fStoreIterator;
}

//_____________________________________________________________________________
TObject*
AliMUONDigitStoreVImplIterator::Next()
{
  /// Return next digit in store
  if ( !fCurrentCalibParam ) 
  {
    fCurrentCalibParam = static_cast<AliMUONVCalibParam*>(fStoreIterator->Next());
    fCurrentCalibParamIndex = 0;
    if ( !fCurrentCalibParam ) return 0x0;
  }
  
  Int_t ix(-1);
  AliMUONVDigit* d(0x0);
  
  if ( fCathode == 2 ) 
  {
    while ( fCurrentCalibParamIndex < 64 && ix < 0 )
    {
      ix = fCurrentCalibParam->ValueAsInt(fCurrentCalibParamIndex++);
    };
    
    if (ix>=0)
    {
      d = static_cast<AliMUONVDigit*>(fkStore->fDigits->UncheckedAt(ix));
    }  
  }
  else
  {
    while ( d == 0x0 ) 
    {
      while ( fCurrentCalibParamIndex < 64 && ix < 0 )
      {
        ix = fCurrentCalibParam->ValueAsInt(fCurrentCalibParamIndex++);
      };
    
      if (ix>=0)
      {
        d = static_cast<AliMUONVDigit*>(fkStore->fDigits->UncheckedAt(ix));
        
        if (  fCathode == 2 || d->Cathode() == fCathode ) 
        {
          break;
        }
        d = 0x0;
        ix = -1;
      }
      else
      {
        break;
      }
    }
  }
  
  if (ix<0) 
  {
    fCurrentCalibParam = 0x0;
    return Next();
  }
  
  return d;
}

//_____________________________________________________________________________
void
AliMUONDigitStoreVImplIterator::Reset()
{
  /// Reset the iterator
  fCurrentCalibParam = 0x0;
  fCurrentCalibParamIndex = 0;  
  fStoreIterator->Reset();
}
 AliMUONDigitStoreVImplIterator.cxx:1
 AliMUONDigitStoreVImplIterator.cxx:2
 AliMUONDigitStoreVImplIterator.cxx:3
 AliMUONDigitStoreVImplIterator.cxx:4
 AliMUONDigitStoreVImplIterator.cxx:5
 AliMUONDigitStoreVImplIterator.cxx:6
 AliMUONDigitStoreVImplIterator.cxx:7
 AliMUONDigitStoreVImplIterator.cxx:8
 AliMUONDigitStoreVImplIterator.cxx:9
 AliMUONDigitStoreVImplIterator.cxx:10
 AliMUONDigitStoreVImplIterator.cxx:11
 AliMUONDigitStoreVImplIterator.cxx:12
 AliMUONDigitStoreVImplIterator.cxx:13
 AliMUONDigitStoreVImplIterator.cxx:14
 AliMUONDigitStoreVImplIterator.cxx:15
 AliMUONDigitStoreVImplIterator.cxx:16
 AliMUONDigitStoreVImplIterator.cxx:17
 AliMUONDigitStoreVImplIterator.cxx:18
 AliMUONDigitStoreVImplIterator.cxx:19
 AliMUONDigitStoreVImplIterator.cxx:20
 AliMUONDigitStoreVImplIterator.cxx:21
 AliMUONDigitStoreVImplIterator.cxx:22
 AliMUONDigitStoreVImplIterator.cxx:23
 AliMUONDigitStoreVImplIterator.cxx:24
 AliMUONDigitStoreVImplIterator.cxx:25
 AliMUONDigitStoreVImplIterator.cxx:26
 AliMUONDigitStoreVImplIterator.cxx:27
 AliMUONDigitStoreVImplIterator.cxx:28
 AliMUONDigitStoreVImplIterator.cxx:29
 AliMUONDigitStoreVImplIterator.cxx:30
 AliMUONDigitStoreVImplIterator.cxx:31
 AliMUONDigitStoreVImplIterator.cxx:32
 AliMUONDigitStoreVImplIterator.cxx:33
 AliMUONDigitStoreVImplIterator.cxx:34
 AliMUONDigitStoreVImplIterator.cxx:35
 AliMUONDigitStoreVImplIterator.cxx:36
 AliMUONDigitStoreVImplIterator.cxx:37
 AliMUONDigitStoreVImplIterator.cxx:38
 AliMUONDigitStoreVImplIterator.cxx:39
 AliMUONDigitStoreVImplIterator.cxx:40
 AliMUONDigitStoreVImplIterator.cxx:41
 AliMUONDigitStoreVImplIterator.cxx:42
 AliMUONDigitStoreVImplIterator.cxx:43
 AliMUONDigitStoreVImplIterator.cxx:44
 AliMUONDigitStoreVImplIterator.cxx:45
 AliMUONDigitStoreVImplIterator.cxx:46
 AliMUONDigitStoreVImplIterator.cxx:47
 AliMUONDigitStoreVImplIterator.cxx:48
 AliMUONDigitStoreVImplIterator.cxx:49
 AliMUONDigitStoreVImplIterator.cxx:50
 AliMUONDigitStoreVImplIterator.cxx:51
 AliMUONDigitStoreVImplIterator.cxx:52
 AliMUONDigitStoreVImplIterator.cxx:53
 AliMUONDigitStoreVImplIterator.cxx:54
 AliMUONDigitStoreVImplIterator.cxx:55
 AliMUONDigitStoreVImplIterator.cxx:56
 AliMUONDigitStoreVImplIterator.cxx:57
 AliMUONDigitStoreVImplIterator.cxx:58
 AliMUONDigitStoreVImplIterator.cxx:59
 AliMUONDigitStoreVImplIterator.cxx:60
 AliMUONDigitStoreVImplIterator.cxx:61
 AliMUONDigitStoreVImplIterator.cxx:62
 AliMUONDigitStoreVImplIterator.cxx:63
 AliMUONDigitStoreVImplIterator.cxx:64
 AliMUONDigitStoreVImplIterator.cxx:65
 AliMUONDigitStoreVImplIterator.cxx:66
 AliMUONDigitStoreVImplIterator.cxx:67
 AliMUONDigitStoreVImplIterator.cxx:68
 AliMUONDigitStoreVImplIterator.cxx:69
 AliMUONDigitStoreVImplIterator.cxx:70
 AliMUONDigitStoreVImplIterator.cxx:71
 AliMUONDigitStoreVImplIterator.cxx:72
 AliMUONDigitStoreVImplIterator.cxx:73
 AliMUONDigitStoreVImplIterator.cxx:74
 AliMUONDigitStoreVImplIterator.cxx:75
 AliMUONDigitStoreVImplIterator.cxx:76
 AliMUONDigitStoreVImplIterator.cxx:77
 AliMUONDigitStoreVImplIterator.cxx:78
 AliMUONDigitStoreVImplIterator.cxx:79
 AliMUONDigitStoreVImplIterator.cxx:80
 AliMUONDigitStoreVImplIterator.cxx:81
 AliMUONDigitStoreVImplIterator.cxx:82
 AliMUONDigitStoreVImplIterator.cxx:83
 AliMUONDigitStoreVImplIterator.cxx:84
 AliMUONDigitStoreVImplIterator.cxx:85
 AliMUONDigitStoreVImplIterator.cxx:86
 AliMUONDigitStoreVImplIterator.cxx:87
 AliMUONDigitStoreVImplIterator.cxx:88
 AliMUONDigitStoreVImplIterator.cxx:89
 AliMUONDigitStoreVImplIterator.cxx:90
 AliMUONDigitStoreVImplIterator.cxx:91
 AliMUONDigitStoreVImplIterator.cxx:92
 AliMUONDigitStoreVImplIterator.cxx:93
 AliMUONDigitStoreVImplIterator.cxx:94
 AliMUONDigitStoreVImplIterator.cxx:95
 AliMUONDigitStoreVImplIterator.cxx:96
 AliMUONDigitStoreVImplIterator.cxx:97
 AliMUONDigitStoreVImplIterator.cxx:98
 AliMUONDigitStoreVImplIterator.cxx:99
 AliMUONDigitStoreVImplIterator.cxx:100
 AliMUONDigitStoreVImplIterator.cxx:101
 AliMUONDigitStoreVImplIterator.cxx:102
 AliMUONDigitStoreVImplIterator.cxx:103
 AliMUONDigitStoreVImplIterator.cxx:104
 AliMUONDigitStoreVImplIterator.cxx:105
 AliMUONDigitStoreVImplIterator.cxx:106
 AliMUONDigitStoreVImplIterator.cxx:107
 AliMUONDigitStoreVImplIterator.cxx:108
 AliMUONDigitStoreVImplIterator.cxx:109
 AliMUONDigitStoreVImplIterator.cxx:110
 AliMUONDigitStoreVImplIterator.cxx:111
 AliMUONDigitStoreVImplIterator.cxx:112
 AliMUONDigitStoreVImplIterator.cxx:113
 AliMUONDigitStoreVImplIterator.cxx:114
 AliMUONDigitStoreVImplIterator.cxx:115
 AliMUONDigitStoreVImplIterator.cxx:116
 AliMUONDigitStoreVImplIterator.cxx:117
 AliMUONDigitStoreVImplIterator.cxx:118
 AliMUONDigitStoreVImplIterator.cxx:119
 AliMUONDigitStoreVImplIterator.cxx:120
 AliMUONDigitStoreVImplIterator.cxx:121
 AliMUONDigitStoreVImplIterator.cxx:122
 AliMUONDigitStoreVImplIterator.cxx:123
 AliMUONDigitStoreVImplIterator.cxx:124
 AliMUONDigitStoreVImplIterator.cxx:125
 AliMUONDigitStoreVImplIterator.cxx:126
 AliMUONDigitStoreVImplIterator.cxx:127
 AliMUONDigitStoreVImplIterator.cxx:128
 AliMUONDigitStoreVImplIterator.cxx:129
 AliMUONDigitStoreVImplIterator.cxx:130
 AliMUONDigitStoreVImplIterator.cxx:131
 AliMUONDigitStoreVImplIterator.cxx:132
 AliMUONDigitStoreVImplIterator.cxx:133
 AliMUONDigitStoreVImplIterator.cxx:134
 AliMUONDigitStoreVImplIterator.cxx:135
 AliMUONDigitStoreVImplIterator.cxx:136
 AliMUONDigitStoreVImplIterator.cxx:137
 AliMUONDigitStoreVImplIterator.cxx:138
 AliMUONDigitStoreVImplIterator.cxx:139
 AliMUONDigitStoreVImplIterator.cxx:140
 AliMUONDigitStoreVImplIterator.cxx:141
 AliMUONDigitStoreVImplIterator.cxx:142
 AliMUONDigitStoreVImplIterator.cxx:143
 AliMUONDigitStoreVImplIterator.cxx:144
 AliMUONDigitStoreVImplIterator.cxx:145
 AliMUONDigitStoreVImplIterator.cxx:146
 AliMUONDigitStoreVImplIterator.cxx:147
 AliMUONDigitStoreVImplIterator.cxx:148
 AliMUONDigitStoreVImplIterator.cxx:149
 AliMUONDigitStoreVImplIterator.cxx:150
 AliMUONDigitStoreVImplIterator.cxx:151
 AliMUONDigitStoreVImplIterator.cxx:152
 AliMUONDigitStoreVImplIterator.cxx:153
 AliMUONDigitStoreVImplIterator.cxx:154
 AliMUONDigitStoreVImplIterator.cxx:155
 AliMUONDigitStoreVImplIterator.cxx:156
 AliMUONDigitStoreVImplIterator.cxx:157
 AliMUONDigitStoreVImplIterator.cxx:158