]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/MUONmapping/AliMpSectorPadIterator.cxx
MUON + CheckCompiler
[u/mrichter/AliRoot.git] / MUON / MUONmapping / AliMpSectorPadIterator.cxx
diff --git a/MUON/MUONmapping/AliMpSectorPadIterator.cxx b/MUON/MUONmapping/AliMpSectorPadIterator.cxx
new file mode 100755 (executable)
index 0000000..b4301cb
--- /dev/null
@@ -0,0 +1,205 @@
+/**************************************************************************
+ * 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: AliMpSectorPadIterator.cxx,v 1.6 2006/05/24 13:58:46 ivana Exp $
+// Category: sector
+
+//-----------------------------------------------------------------------------
+// Class AliMpSectorPadIterator
+// ----------------------------
+// Class, which defines an iterator over the pads of a sector
+// Included in AliRoot: 2003/05/02
+// Authors: David Guez, Ivana Hrivnacova; IPN Orsay
+//-----------------------------------------------------------------------------
+
+
+#include "AliMpSectorPadIterator.h"
+#include "AliMpSector.h"
+#include "AliMpMotifType.h"
+
+#include "AliMpRow.h"
+#include "AliMpVRowSegment.h"
+#include "AliMpMotifMap.h"
+#include "AliMpMotifPosition.h"
+
+/// \cond CLASSIMP
+ClassImp(AliMpSectorPadIterator)
+/// \endcond
+
+//______________________________________________________________________________
+AliMpSectorPadIterator::AliMpSectorPadIterator()
+  : AliMpVPadIterator(),
+    fkSector(0),
+    fCurrentIndex(0),
+    fMotifPos(0),
+    fIterator()
+{
+/// Default constructor, set the current position to "invalid"
+}
+
+//______________________________________________________________________________
+AliMpSectorPadIterator::AliMpSectorPadIterator(const AliMpSector* sector)
+  : AliMpVPadIterator(),
+    fkSector(sector),
+    fCurrentIndex(0),
+    fMotifPos(0),
+    fIterator()
+{
+/// Standard constructor, set *this to invalid position  
+}
+
+//______________________________________________________________________________
+AliMpSectorPadIterator::AliMpSectorPadIterator(const AliMpSectorPadIterator& right)
+  : AliMpVPadIterator(right),
+    fkSector(0),
+    fCurrentIndex(0),
+    fMotifPos(0),
+    fIterator()
+{
+/// Copy constructor
+  *this = right;
+}
+
+//______________________________________________________________________________
+AliMpSectorPadIterator::~AliMpSectorPadIterator()
+{
+/// Destructor
+}
+
+//
+// operators
+//
+
+//______________________________________________________________________________
+AliMpSectorPadIterator& 
+AliMpSectorPadIterator::operator = (const AliMpSectorPadIterator& right)
+{
+/// Assignment operator
+
+  // check assignment to self
+  if (this == &right) return *this;
+
+  // base class assignment
+  AliMpVPadIterator::operator=(right);
+
+  fkSector      = right.fkSector;
+  fCurrentIndex = right.fCurrentIndex,
+  fMotifPos     = right.fMotifPos;
+  fIterator     = right.fIterator;
+
+  return *this;
+} 
+
+//private methods
+
+//______________________________________________________________________________
+AliMpMotifPosition* AliMpSectorPadIterator::ResetToCurrentMotifPosition()
+{
+/// Find the AliMpMotifType object associated with the triplet
+/// (fCurrentRow, fCurrentSeg, fCurrentMotif),
+/// place it in the private fMotifType member and return it.
+
+  if ( fCurrentIndex == fkSector->GetMotifMap()->GetNofMotifPositions() ) {
+    Invalidate();
+    return 0;
+  }  
+    
+  fMotifPos = fkSector->GetMotifMap()->GetMotifPosition(fCurrentIndex);
+  fIterator = AliMpMotifPositionPadIterator(fMotifPos);
+  fIterator.First();
+
+  return fMotifPos;
+}
+
+//______________________________________________________________________________
+Bool_t AliMpSectorPadIterator::IsValid() const
+{
+/// Is the iterator in a valid position?
+
+    return (fkSector!=0) && (fMotifPos!=0);
+} 
+
+//
+//public methods
+//
+
+//______________________________________________________________________________
+void AliMpSectorPadIterator::First()
+{
+/// Reset the iterator, so that it points to the first available
+/// pad in the sector
+
+    if (!fkSector) {
+        Invalidate();
+        return;
+    }
+    fCurrentIndex =0;
+    ResetToCurrentMotifPosition();
+
+    return;
+}
+
+//______________________________________________________________________________
+void AliMpSectorPadIterator::Next()
+{
+/// Move the iterator to the next valid pad.
+
+  if (!IsValid()) return;
+
+  fIterator.Next();
+  
+  if (!fIterator.IsDone()) return;
+  
+
+  // Go to the next motif, in the current segment
+  ++fCurrentIndex;
+  if (ResetToCurrentMotifPosition()) return;
+
+  Invalidate();
+  return;
+
+}
+
+//______________________________________________________________________________
+Bool_t AliMpSectorPadIterator::IsDone() const
+{
+/// Is the iterator in the end? 
+
+  return ! IsValid();
+}
+
+//______________________________________________________________________________
+AliMpPad AliMpSectorPadIterator::CurrentItem () const 
+{
+/// Return current pad.
+
+  if (!IsValid())
+    return AliMpPad::Invalid();
+      
+
+  // no more verification, since IsValid() is TRUE here.
+  return fIterator.CurrentItem();
+}
+
+//______________________________________________________________________________
+void AliMpSectorPadIterator::Invalidate()
+{
+/// Let the iterator point to the invalid position
+    fMotifPos = 0;
+    fIterator.Invalidate();
+} 
+