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$ 
// $MpId: AliMpDEIterator.cxx,v 1.6 2006/05/24 13:58:34 ivana Exp $
// Category: management

//-----------------------------------------------------------------------------
// Class AliMpDEIterator
// ------------------------
// The iterator over valid detection elements
// Author: Ivana Hrivnacova, IPN Orsay
//-----------------------------------------------------------------------------

#include "AliMpDEIterator.h"

#include "AliMpExMapIterator.h"
#include "AliMpDEStore.h"
#include "AliMpDetElement.h"
#include "AliMpDEManager.h"
#include "AliMpFiles.h"

#include "AliLog.h"

#include <Riostream.h>
#include <TSystem.h>

using std::endl;
/// \cond CLASSIMP
ClassImp(AliMpDEIterator)
/// \endcond

//______________________________________________________________________________
AliMpDEIterator::AliMpDEIterator()
: TObject(),
  fCurrentDE(0x0),
  fIterator(AliMpDEStore::Instance()->fDetElements.CreateIterator()),
  fChamberId(-1)
{  
/// Standard and default constructor
}

//______________________________________________________________________________

AliMpDEIterator::~AliMpDEIterator()
{
/// Destructor

  delete fIterator;
}

//
// public methods
//

//______________________________________________________________________________
void AliMpDEIterator::First()
{
/// Set iterator to the first DE Id defined 

  fIterator->Reset();
  fCurrentDE = static_cast<AliMpDetElement*>(fIterator->Next());
  fChamberId = -1;
}  

//______________________________________________________________________________
void AliMpDEIterator::First(Int_t chamberId)
{
/// Reset the iterator, so that it points to the first DE
 
  if ( ! AliMpDEManager::IsValidChamberId(chamberId) ) {
    AliErrorStream() << "Invalid chamber Id " << chamberId << endl;
    fIterator->Reset();
    fChamberId = -1;    
    fCurrentDE = 0x0;
    return;
  }    

  fIterator->Reset();
  fChamberId = -1;
  while ( fChamberId != chamberId ) 
  {
    fCurrentDE = static_cast<AliMpDetElement*>(fIterator->Next());
    if (!fCurrentDE) return;
    fChamberId = AliMpDEManager::GetChamberId(CurrentDEId());
  }
}

//______________________________________________________________________________
void AliMpDEIterator::Next()
{
/// Increment iterator to next DE

  if ( fChamberId < 0 ) 
  {
    fCurrentDE = static_cast<AliMpDetElement*>(fIterator->Next());
  }
  else
  {
    fCurrentDE = static_cast<AliMpDetElement*>(fIterator->Next());
    
    while ( fCurrentDE && (AliMpDEManager::GetChamberId(fCurrentDE->GetId()) != fChamberId) )
    {
      fCurrentDE = static_cast<AliMpDetElement*>(fIterator->Next());
      if (!fCurrentDE) return;
    }
  }
}

//______________________________________________________________________________
Bool_t AliMpDEIterator::IsDone() const
{
/// Is the iterator in the end?

  return ( fCurrentDE == 0x0 );
}   

//______________________________________________________________________________
AliMpDetElement* AliMpDEIterator::CurrentDE() const
{
/// Current DE Id

  return fCurrentDE;
}
    
//______________________________________________________________________________
Int_t 
AliMpDEIterator::CurrentDEId() const
{
/// Current DE Id

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