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: AliMpSectorAreaVPadIterator.cxx,v 1.8 2006/05/24 13:58:46 ivana Exp $
// Category: sector

//-----------------------------------------------------------------------------
// Class AliMpSectorAreaVPadIterator
// ---------------------------------
// Class, which defines an iterator over the pads 
// inside a given area in a sector in vertical direction.
// Included in AliRoot: 2003/05/02
// Authors: David Guez, Ivana Hrivnacova; IPN Orsay
//-----------------------------------------------------------------------------

#include "AliMpSectorAreaVPadIterator.h"
#include "AliMpSectorSegmentation.h"
#include "AliMpConstants.h"

#include "AliLog.h"

#include <Riostream.h>

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

//______________________________________________________________________________
AliMpSectorAreaVPadIterator::AliMpSectorAreaVPadIterator(
                                const AliMpSectorSegmentation* segmentation,
                                const AliMpArea& area) 
 : AliMpVPadIterator(),
   fkSegmentation(segmentation),
   fkArea(area),
   fCurrentPad(AliMpPad::Invalid()),
   fCurrentColumnPosition(0.)
{
/// Standard constructor, start in invalid position
}

//______________________________________________________________________________
AliMpSectorAreaVPadIterator::AliMpSectorAreaVPadIterator(
                                const AliMpSectorAreaVPadIterator& right)
  : AliMpVPadIterator(right),
    fkSegmentation(0),
    fkArea(AliMpArea()),
    fCurrentPad(AliMpPad::Invalid()),
    fCurrentColumnPosition(0.)
{
/// Copy constructor
 
  *this = right;
}

//______________________________________________________________________________
AliMpSectorAreaVPadIterator::AliMpSectorAreaVPadIterator()
 : AliMpVPadIterator(),
   fkSegmentation(0),
   fkArea(AliMpArea()),
   fCurrentPad(AliMpPad::Invalid()),
   fCurrentColumnPosition(0.)
{
/// Default constructor.
}

//______________________________________________________________________________
AliMpSectorAreaVPadIterator::~AliMpSectorAreaVPadIterator()
{
/// Destructor
}

//
// operators
//

//______________________________________________________________________________
AliMpSectorAreaVPadIterator& 
AliMpSectorAreaVPadIterator::operator = (const AliMpSectorAreaVPadIterator& right)
{
/// Assignment operator

  // check assignment to self
  if (this == &right) return *this;

  // base class assignment
  AliMpVPadIterator::operator=(right);

  fkSegmentation = right.fkSegmentation;
  fkArea         = right.fkArea;
  fCurrentPad    = right.fCurrentPad;
  fCurrentColumnPosition = right.fCurrentColumnPosition;

  return *this;
} 

// 
// private methods
//

//______________________________________________________________________________
Bool_t AliMpSectorAreaVPadIterator::IsValid() const
{
/// Is the iterator in a valid position?

  return fCurrentPad.IsValid() ;
}

//______________________________________________________________________________
void AliMpSectorAreaVPadIterator::MoveRight()
{
/// Increase the current row position and searches the first valid pad.

  Double_t dx = fkSegmentation->GetMinPadDimensionX();

  while ( !fCurrentPad.IsValid() && 
          fCurrentColumnPosition + dx < fkArea.RightBorder())
  {
    fCurrentColumnPosition += 2.*dx;
    
    fCurrentPad 
      = fkSegmentation->PadByDirection(fCurrentColumnPosition, fkArea.DownBorder(), 
                                       fkArea.UpBorder());
  } 
}

//
// public methods
//

//______________________________________________________________________________
void AliMpSectorAreaVPadIterator::First()
{
/// Reset the iterator, so that it points to the first available
/// pad in the area

  if (!fkSegmentation) {
    AliFatal("Segmentation is not defined");
    return;
  }  

  // Start position = left down corner of the area
  //
  fCurrentColumnPosition = fkArea.LeftBorder();

  Double_t posx, posy;
  fkArea.LeftDownCorner(posx, posy); 
  
  fCurrentPad = fkSegmentation->PadByDirection(posx, posy, fkArea.UpBorder());
  
  MoveRight();

  // Set the column position to the center of pad
  //
  if (fCurrentPad.IsValid()) fCurrentColumnPosition = fCurrentPad.GetPositionX();
}

//______________________________________________________________________________
void AliMpSectorAreaVPadIterator::Next()
{
/// Move the iterator to the next valid pad.

  if (!IsValid()) return;
  
  // Start position = up board of current pad + little step
  //
  fCurrentPad 
    = fkSegmentation->PadByDirection(
        fCurrentPad.GetPositionX(), 
        fCurrentPad.GetPositionY() + fCurrentPad.GetDimensionY() + 
          AliMpConstants::LengthStep(), 
        fkArea.UpBorder());  
  
  if (fCurrentPad.IsValid()) return;

  MoveRight();
}

//______________________________________________________________________________
Bool_t AliMpSectorAreaVPadIterator::IsDone() const
{
/// Is the iterator in the end ?
 
  return !IsValid();
}

//______________________________________________________________________________
AliMpPad AliMpSectorAreaVPadIterator::CurrentItem () const 
{
/// Return current pad.

  return fCurrentPad;
}
//______________________________________________________________________________
void AliMpSectorAreaVPadIterator::Invalidate()
{
/// Let the iterator point to the invalid position
 
  fCurrentPad = AliMpPad::Invalid();
  fCurrentColumnPosition = 0;
}



 AliMpSectorAreaVPadIterator.cxx:1
 AliMpSectorAreaVPadIterator.cxx:2
 AliMpSectorAreaVPadIterator.cxx:3
 AliMpSectorAreaVPadIterator.cxx:4
 AliMpSectorAreaVPadIterator.cxx:5
 AliMpSectorAreaVPadIterator.cxx:6
 AliMpSectorAreaVPadIterator.cxx:7
 AliMpSectorAreaVPadIterator.cxx:8
 AliMpSectorAreaVPadIterator.cxx:9
 AliMpSectorAreaVPadIterator.cxx:10
 AliMpSectorAreaVPadIterator.cxx:11
 AliMpSectorAreaVPadIterator.cxx:12
 AliMpSectorAreaVPadIterator.cxx:13
 AliMpSectorAreaVPadIterator.cxx:14
 AliMpSectorAreaVPadIterator.cxx:15
 AliMpSectorAreaVPadIterator.cxx:16
 AliMpSectorAreaVPadIterator.cxx:17
 AliMpSectorAreaVPadIterator.cxx:18
 AliMpSectorAreaVPadIterator.cxx:19
 AliMpSectorAreaVPadIterator.cxx:20
 AliMpSectorAreaVPadIterator.cxx:21
 AliMpSectorAreaVPadIterator.cxx:22
 AliMpSectorAreaVPadIterator.cxx:23
 AliMpSectorAreaVPadIterator.cxx:24
 AliMpSectorAreaVPadIterator.cxx:25
 AliMpSectorAreaVPadIterator.cxx:26
 AliMpSectorAreaVPadIterator.cxx:27
 AliMpSectorAreaVPadIterator.cxx:28
 AliMpSectorAreaVPadIterator.cxx:29
 AliMpSectorAreaVPadIterator.cxx:30
 AliMpSectorAreaVPadIterator.cxx:31
 AliMpSectorAreaVPadIterator.cxx:32
 AliMpSectorAreaVPadIterator.cxx:33
 AliMpSectorAreaVPadIterator.cxx:34
 AliMpSectorAreaVPadIterator.cxx:35
 AliMpSectorAreaVPadIterator.cxx:36
 AliMpSectorAreaVPadIterator.cxx:37
 AliMpSectorAreaVPadIterator.cxx:38
 AliMpSectorAreaVPadIterator.cxx:39
 AliMpSectorAreaVPadIterator.cxx:40
 AliMpSectorAreaVPadIterator.cxx:41
 AliMpSectorAreaVPadIterator.cxx:42
 AliMpSectorAreaVPadIterator.cxx:43
 AliMpSectorAreaVPadIterator.cxx:44
 AliMpSectorAreaVPadIterator.cxx:45
 AliMpSectorAreaVPadIterator.cxx:46
 AliMpSectorAreaVPadIterator.cxx:47
 AliMpSectorAreaVPadIterator.cxx:48
 AliMpSectorAreaVPadIterator.cxx:49
 AliMpSectorAreaVPadIterator.cxx:50
 AliMpSectorAreaVPadIterator.cxx:51
 AliMpSectorAreaVPadIterator.cxx:52
 AliMpSectorAreaVPadIterator.cxx:53
 AliMpSectorAreaVPadIterator.cxx:54
 AliMpSectorAreaVPadIterator.cxx:55
 AliMpSectorAreaVPadIterator.cxx:56
 AliMpSectorAreaVPadIterator.cxx:57
 AliMpSectorAreaVPadIterator.cxx:58
 AliMpSectorAreaVPadIterator.cxx:59
 AliMpSectorAreaVPadIterator.cxx:60
 AliMpSectorAreaVPadIterator.cxx:61
 AliMpSectorAreaVPadIterator.cxx:62
 AliMpSectorAreaVPadIterator.cxx:63
 AliMpSectorAreaVPadIterator.cxx:64
 AliMpSectorAreaVPadIterator.cxx:65
 AliMpSectorAreaVPadIterator.cxx:66
 AliMpSectorAreaVPadIterator.cxx:67
 AliMpSectorAreaVPadIterator.cxx:68
 AliMpSectorAreaVPadIterator.cxx:69
 AliMpSectorAreaVPadIterator.cxx:70
 AliMpSectorAreaVPadIterator.cxx:71
 AliMpSectorAreaVPadIterator.cxx:72
 AliMpSectorAreaVPadIterator.cxx:73
 AliMpSectorAreaVPadIterator.cxx:74
 AliMpSectorAreaVPadIterator.cxx:75
 AliMpSectorAreaVPadIterator.cxx:76
 AliMpSectorAreaVPadIterator.cxx:77
 AliMpSectorAreaVPadIterator.cxx:78
 AliMpSectorAreaVPadIterator.cxx:79
 AliMpSectorAreaVPadIterator.cxx:80
 AliMpSectorAreaVPadIterator.cxx:81
 AliMpSectorAreaVPadIterator.cxx:82
 AliMpSectorAreaVPadIterator.cxx:83
 AliMpSectorAreaVPadIterator.cxx:84
 AliMpSectorAreaVPadIterator.cxx:85
 AliMpSectorAreaVPadIterator.cxx:86
 AliMpSectorAreaVPadIterator.cxx:87
 AliMpSectorAreaVPadIterator.cxx:88
 AliMpSectorAreaVPadIterator.cxx:89
 AliMpSectorAreaVPadIterator.cxx:90
 AliMpSectorAreaVPadIterator.cxx:91
 AliMpSectorAreaVPadIterator.cxx:92
 AliMpSectorAreaVPadIterator.cxx:93
 AliMpSectorAreaVPadIterator.cxx:94
 AliMpSectorAreaVPadIterator.cxx:95
 AliMpSectorAreaVPadIterator.cxx:96
 AliMpSectorAreaVPadIterator.cxx:97
 AliMpSectorAreaVPadIterator.cxx:98
 AliMpSectorAreaVPadIterator.cxx:99
 AliMpSectorAreaVPadIterator.cxx:100
 AliMpSectorAreaVPadIterator.cxx:101
 AliMpSectorAreaVPadIterator.cxx:102
 AliMpSectorAreaVPadIterator.cxx:103
 AliMpSectorAreaVPadIterator.cxx:104
 AliMpSectorAreaVPadIterator.cxx:105
 AliMpSectorAreaVPadIterator.cxx:106
 AliMpSectorAreaVPadIterator.cxx:107
 AliMpSectorAreaVPadIterator.cxx:108
 AliMpSectorAreaVPadIterator.cxx:109
 AliMpSectorAreaVPadIterator.cxx:110
 AliMpSectorAreaVPadIterator.cxx:111
 AliMpSectorAreaVPadIterator.cxx:112
 AliMpSectorAreaVPadIterator.cxx:113
 AliMpSectorAreaVPadIterator.cxx:114
 AliMpSectorAreaVPadIterator.cxx:115
 AliMpSectorAreaVPadIterator.cxx:116
 AliMpSectorAreaVPadIterator.cxx:117
 AliMpSectorAreaVPadIterator.cxx:118
 AliMpSectorAreaVPadIterator.cxx:119
 AliMpSectorAreaVPadIterator.cxx:120
 AliMpSectorAreaVPadIterator.cxx:121
 AliMpSectorAreaVPadIterator.cxx:122
 AliMpSectorAreaVPadIterator.cxx:123
 AliMpSectorAreaVPadIterator.cxx:124
 AliMpSectorAreaVPadIterator.cxx:125
 AliMpSectorAreaVPadIterator.cxx:126
 AliMpSectorAreaVPadIterator.cxx:127
 AliMpSectorAreaVPadIterator.cxx:128
 AliMpSectorAreaVPadIterator.cxx:129
 AliMpSectorAreaVPadIterator.cxx:130
 AliMpSectorAreaVPadIterator.cxx:131
 AliMpSectorAreaVPadIterator.cxx:132
 AliMpSectorAreaVPadIterator.cxx:133
 AliMpSectorAreaVPadIterator.cxx:134
 AliMpSectorAreaVPadIterator.cxx:135
 AliMpSectorAreaVPadIterator.cxx:136
 AliMpSectorAreaVPadIterator.cxx:137
 AliMpSectorAreaVPadIterator.cxx:138
 AliMpSectorAreaVPadIterator.cxx:139
 AliMpSectorAreaVPadIterator.cxx:140
 AliMpSectorAreaVPadIterator.cxx:141
 AliMpSectorAreaVPadIterator.cxx:142
 AliMpSectorAreaVPadIterator.cxx:143
 AliMpSectorAreaVPadIterator.cxx:144
 AliMpSectorAreaVPadIterator.cxx:145
 AliMpSectorAreaVPadIterator.cxx:146
 AliMpSectorAreaVPadIterator.cxx:147
 AliMpSectorAreaVPadIterator.cxx:148
 AliMpSectorAreaVPadIterator.cxx:149
 AliMpSectorAreaVPadIterator.cxx:150
 AliMpSectorAreaVPadIterator.cxx:151
 AliMpSectorAreaVPadIterator.cxx:152
 AliMpSectorAreaVPadIterator.cxx:153
 AliMpSectorAreaVPadIterator.cxx:154
 AliMpSectorAreaVPadIterator.cxx:155
 AliMpSectorAreaVPadIterator.cxx:156
 AliMpSectorAreaVPadIterator.cxx:157
 AliMpSectorAreaVPadIterator.cxx:158
 AliMpSectorAreaVPadIterator.cxx:159
 AliMpSectorAreaVPadIterator.cxx:160
 AliMpSectorAreaVPadIterator.cxx:161
 AliMpSectorAreaVPadIterator.cxx:162
 AliMpSectorAreaVPadIterator.cxx:163
 AliMpSectorAreaVPadIterator.cxx:164
 AliMpSectorAreaVPadIterator.cxx:165
 AliMpSectorAreaVPadIterator.cxx:166
 AliMpSectorAreaVPadIterator.cxx:167
 AliMpSectorAreaVPadIterator.cxx:168
 AliMpSectorAreaVPadIterator.cxx:169
 AliMpSectorAreaVPadIterator.cxx:170
 AliMpSectorAreaVPadIterator.cxx:171
 AliMpSectorAreaVPadIterator.cxx:172
 AliMpSectorAreaVPadIterator.cxx:173
 AliMpSectorAreaVPadIterator.cxx:174
 AliMpSectorAreaVPadIterator.cxx:175
 AliMpSectorAreaVPadIterator.cxx:176
 AliMpSectorAreaVPadIterator.cxx:177
 AliMpSectorAreaVPadIterator.cxx:178
 AliMpSectorAreaVPadIterator.cxx:179
 AliMpSectorAreaVPadIterator.cxx:180
 AliMpSectorAreaVPadIterator.cxx:181
 AliMpSectorAreaVPadIterator.cxx:182
 AliMpSectorAreaVPadIterator.cxx:183
 AliMpSectorAreaVPadIterator.cxx:184
 AliMpSectorAreaVPadIterator.cxx:185
 AliMpSectorAreaVPadIterator.cxx:186
 AliMpSectorAreaVPadIterator.cxx:187
 AliMpSectorAreaVPadIterator.cxx:188
 AliMpSectorAreaVPadIterator.cxx:189
 AliMpSectorAreaVPadIterator.cxx:190
 AliMpSectorAreaVPadIterator.cxx:191
 AliMpSectorAreaVPadIterator.cxx:192
 AliMpSectorAreaVPadIterator.cxx:193
 AliMpSectorAreaVPadIterator.cxx:194
 AliMpSectorAreaVPadIterator.cxx:195
 AliMpSectorAreaVPadIterator.cxx:196
 AliMpSectorAreaVPadIterator.cxx:197
 AliMpSectorAreaVPadIterator.cxx:198
 AliMpSectorAreaVPadIterator.cxx:199
 AliMpSectorAreaVPadIterator.cxx:200
 AliMpSectorAreaVPadIterator.cxx:201
 AliMpSectorAreaVPadIterator.cxx:202
 AliMpSectorAreaVPadIterator.cxx:203
 AliMpSectorAreaVPadIterator.cxx:204
 AliMpSectorAreaVPadIterator.cxx:205
 AliMpSectorAreaVPadIterator.cxx:206
 AliMpSectorAreaVPadIterator.cxx:207
 AliMpSectorAreaVPadIterator.cxx:208
 AliMpSectorAreaVPadIterator.cxx:209
 AliMpSectorAreaVPadIterator.cxx:210
 AliMpSectorAreaVPadIterator.cxx:211
 AliMpSectorAreaVPadIterator.cxx:212
 AliMpSectorAreaVPadIterator.cxx:213
 AliMpSectorAreaVPadIterator.cxx:214
 AliMpSectorAreaVPadIterator.cxx:215
 AliMpSectorAreaVPadIterator.cxx:216