]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/mapping/AliMpMotifPositionPadIterator.cxx
Code for MUON Station1 (I.Hrivnacova)
[u/mrichter/AliRoot.git] / MUON / mapping / AliMpMotifPositionPadIterator.cxx
diff --git a/MUON/mapping/AliMpMotifPositionPadIterator.cxx b/MUON/mapping/AliMpMotifPositionPadIterator.cxx
new file mode 100755 (executable)
index 0000000..c9cb635
--- /dev/null
@@ -0,0 +1,143 @@
+// $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();
+} 
+