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

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

#include "AliMpSectorAreaHPadIterator.h"
#include "AliMpSectorSegmentation.h"
#include "AliMpConstants.h"

#include <Riostream.h>

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

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

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

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

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

//
// operators
//

//______________________________________________________________________________
AliMpSectorAreaHPadIterator& 
AliMpSectorAreaHPadIterator::operator = (const AliMpSectorAreaHPadIterator& 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;
  fCurrentRowPosition = right.fCurrentRowPosition;

  return *this;
} 

// 
// private methods
//

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

  return fCurrentPad.IsValid() ;
}

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

  Double_t dy = fkSegmentation->GetMinPadDimensionY();

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

//
// public methods
//

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

  if ( ! fkSegmentation ) {
    Fatal("First", "Segmentation is not defined");
    return;
  }  

  // Start position = left down corner of the area
  //
  
  fCurrentRowPosition = fkArea.DownBorder();
   
  Double_t posx, posy;
  fkArea.LeftDownCorner(posx, posy); 

  fCurrentPad = fkSegmentation->PadByDirection(posx, posy, fkArea.RightBorder());

  MoveUp();
  
  // Set the row position to the center of pad
  //
  if (fCurrentPad.IsValid()) fCurrentRowPosition = fCurrentPad.GetPositionY();
}

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

  if ( ! IsValid() ) return;
  
  // Start position = right board of current pad + little step

  fCurrentPad 
    = fkSegmentation->PadByDirection(
        fCurrentPad.GetPositionX() + fCurrentPad.GetDimensionX() + 
          AliMpConstants::LengthStep(), 
        fCurrentPad.GetPositionY(), 
        fkArea.RightBorder());  

  if ( fCurrentPad.IsValid() ) return;

  MoveUp();
}

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

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

  return fCurrentPad;
}
//______________________________________________________________________________
void AliMpSectorAreaHPadIterator::Invalidate()
{
/// Let the iterator point to the invalid position

  fCurrentPad = AliMpPad::Invalid();
  fCurrentRowPosition = 0;
}



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