--- /dev/null
+// $Id$
+// Category: motif
+//
+// Class AliMpMotifPositionPadIterator
+// -----------------------------------
+// Class, which defines an iterator over the pads of a given motif type
+//
+// Authors: David Guez, Ivana Hrivnacova; IPN Orsay
+
+#include "AliMpMotifPositionPadIterator.h"
+#include "AliMpMotifPosition.h"
+#include "AliMpMotifType.h"
+#include "AliMpConnection.h"
+
+ClassImp(AliMpMotifPositionPadIterator)
+
+//______________________________________________________________________________
+AliMpMotifPositionPadIterator::AliMpMotifPositionPadIterator():
+ AliMpVPadIterator(),
+ fMotifPos(0),
+ fIterator()
+{
+// default constructor, set the current position to "invalid"
+}
+
+//______________________________________________________________________________
+
+AliMpMotifPositionPadIterator::AliMpMotifPositionPadIterator(
+ const AliMpMotifPosition* motifPos)
+ : AliMpVPadIterator(),
+ fMotifPos(motifPos),
+ fIterator(motifPos->GetMotif()->GetMotifType())
+{
+// normal constructor, let *this to invalid position
+}
+
+//______________________________________________________________________________
+AliMpMotifPositionPadIterator::AliMpMotifPositionPadIterator(
+ const AliMpMotifPositionPadIterator& right)
+ : AliMpVPadIterator(right),
+ fMotifPos(right.fMotifPos),
+ fIterator(right.fIterator)
+
+{
+// copy constructor
+}
+
+//______________________________________________________________________________
+AliMpMotifPositionPadIterator::~AliMpMotifPositionPadIterator()
+{
+// destructor
+}
+
+// operators
+
+//______________________________________________________________________________
+AliMpMotifPositionPadIterator&
+AliMpMotifPositionPadIterator::operator = (const AliMpMotifPositionPadIterator& right)
+{
+// assignement operator
+// if the right hand iterator isn't of good type
+// the current operator is invalidated
+
+ // check assignement to self
+ if (this == &right) return *this;
+
+ // base class assignement
+ AliMpVPadIterator::operator=(right);
+
+ fMotifPos = right.fMotifPos;
+ fIterator = right.fIterator;
+
+ return *this;
+}
+
+//private methods
+
+
+//______________________________________________________________________________
+Bool_t AliMpMotifPositionPadIterator::IsValid() const
+{
+// Is the iterator in a valid position?
+
+ return (fMotifPos!=0) && (!fIterator.IsDone());
+}
+
+//public methods
+
+//______________________________________________________________________________
+void AliMpMotifPositionPadIterator::First()
+{
+// Reset the iterator, so that it points to the first available
+// pad in the motif type
+
+ if (!fMotifPos) {
+ Invalidate();
+ return ;
+ }
+
+ fIterator.First();
+ return;
+}
+
+//______________________________________________________________________________
+void AliMpMotifPositionPadIterator::Next()
+{
+// Move the iterator to the next valid pad.
+ fIterator.Next();
+}
+
+//______________________________________________________________________________
+Bool_t AliMpMotifPositionPadIterator::IsDone() const
+{
+//
+ return !IsValid();
+}
+
+//______________________________________________________________________________
+AliMpPad AliMpMotifPositionPadIterator::CurrentItem() const
+{
+// Returns current pad.
+
+ if (!fMotifPos)
+ return AliMpPad::Invalid();
+ else {
+ AliMpIntPair ind = fIterator.CurrentItem().GetIndices();
+ AliMpMotifType* mt = fMotifPos->GetMotif()->GetMotifType();
+ AliMpConnection* connect =
+ mt->FindConnectionByLocalIndices(ind);
+ return AliMpPad(AliMpIntPair(fMotifPos->GetID(),connect->GetGassiNum()),
+ fMotifPos->GlobalIndices(ind),
+ fMotifPos->Position()+fMotifPos->GetMotif()->PadPositionLocal(ind),
+ fMotifPos->GetMotif()->GetPadDimensions(ind));
+ }
+}
+
+//______________________________________________________________________________
+void AliMpMotifPositionPadIterator::Invalidate()
+{
+// Let the iterator points to the invalid position
+ fIterator.Invalidate();
+}
+