ROOT logo
#ifndef ALI_MP_PCB_PAD_ITERATOR_H
#define ALI_MP_PCB_PAD_ITERATOR_H

/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

// $Id$
// $MpId$

/// \ingroup slat
/// \class AliMpPCBPadIterator
/// \brief Iterates over slat pads within a region of constant pad size.
///
//  Author: Laurent Aphecetche

#include "AliMpVPadIterator.h"

class AliMpArea;
class AliMpSlat;
class AliMpSlatSegmentation;

class AliMpPCBPadIterator : public AliMpVPadIterator
{
public:
  AliMpPCBPadIterator(const AliMpSlat* slat, const AliMpArea& area);
  virtual ~AliMpPCBPadIterator();
  
  void First();
  void Next();
  Bool_t IsDone() const;
  AliMpPad CurrentItem() const;
  void Invalidate();
  
  void Print(Option_t* opt="") const;
  
private:
  /// Not implemented
  AliMpPCBPadIterator(const AliMpPCBPadIterator& right);
  /// Not implemented
  AliMpPCBPadIterator&  operator = (const AliMpPCBPadIterator& right);
  
  Bool_t GetNextPosition(Int_t& ix, Int_t& iy) const;
  Bool_t CropArea(const AliMpArea& area);
  void SetPad(AliMpPad& pad, Int_t ix, Int_t iy);
  
private:
  const AliMpSlat*       fkSlat; //!< the slat we're iterating over
  AliMpSlatSegmentation* fSlatSegmentation; //!< segmentation pointer
  MpPair_t fMinIndices; //!< indices of bottom left of region to iterate over
  MpPair_t fMaxIndices; //!< indices of top right of region to iterate over
  MpPair_t fOffset; //!< current position
  AliMpPad fCurrentPad; //!< current pad
  Bool_t fIsDone; //!< whether we've finished or not
  
  ClassDef(AliMpPCBPadIterator,0) // Pad iterator for a zone of constant density, for St345.
};

#endif
 AliMpPCBPadIterator.h:1
 AliMpPCBPadIterator.h:2
 AliMpPCBPadIterator.h:3
 AliMpPCBPadIterator.h:4
 AliMpPCBPadIterator.h:5
 AliMpPCBPadIterator.h:6
 AliMpPCBPadIterator.h:7
 AliMpPCBPadIterator.h:8
 AliMpPCBPadIterator.h:9
 AliMpPCBPadIterator.h:10
 AliMpPCBPadIterator.h:11
 AliMpPCBPadIterator.h:12
 AliMpPCBPadIterator.h:13
 AliMpPCBPadIterator.h:14
 AliMpPCBPadIterator.h:15
 AliMpPCBPadIterator.h:16
 AliMpPCBPadIterator.h:17
 AliMpPCBPadIterator.h:18
 AliMpPCBPadIterator.h:19
 AliMpPCBPadIterator.h:20
 AliMpPCBPadIterator.h:21
 AliMpPCBPadIterator.h:22
 AliMpPCBPadIterator.h:23
 AliMpPCBPadIterator.h:24
 AliMpPCBPadIterator.h:25
 AliMpPCBPadIterator.h:26
 AliMpPCBPadIterator.h:27
 AliMpPCBPadIterator.h:28
 AliMpPCBPadIterator.h:29
 AliMpPCBPadIterator.h:30
 AliMpPCBPadIterator.h:31
 AliMpPCBPadIterator.h:32
 AliMpPCBPadIterator.h:33
 AliMpPCBPadIterator.h:34
 AliMpPCBPadIterator.h:35
 AliMpPCBPadIterator.h:36
 AliMpPCBPadIterator.h:37
 AliMpPCBPadIterator.h:38
 AliMpPCBPadIterator.h:39
 AliMpPCBPadIterator.h:40
 AliMpPCBPadIterator.h:41
 AliMpPCBPadIterator.h:42
 AliMpPCBPadIterator.h:43
 AliMpPCBPadIterator.h:44
 AliMpPCBPadIterator.h:45
 AliMpPCBPadIterator.h:46
 AliMpPCBPadIterator.h:47
 AliMpPCBPadIterator.h:48
 AliMpPCBPadIterator.h:49
 AliMpPCBPadIterator.h:50
 AliMpPCBPadIterator.h:51
 AliMpPCBPadIterator.h:52
 AliMpPCBPadIterator.h:53
 AliMpPCBPadIterator.h:54
 AliMpPCBPadIterator.h:55
 AliMpPCBPadIterator.h:56
 AliMpPCBPadIterator.h:57
 AliMpPCBPadIterator.h:58