]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MUON/mapping/AliMpMotifTypePadIterator.cxx
Adding includes now needed by ROOT
[u/mrichter/AliRoot.git] / MUON / mapping / AliMpMotifTypePadIterator.cxx
CommitLineData
dee1d5f1 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
5f91c9e8 16// $Id$
13985652 17// $MpId: AliMpMotifTypePadIterator.cxx,v 1.6 2006/05/24 13:58:41 ivana Exp $
5f91c9e8 18// Category: motif
19//
20// Class AliMpMotifTypePadIterator
21// -------------------------------
22// Class, which defines an iterator over the pads of a given motif type
dbe945cc 23// Included in AliRoot: 2003/05/02
5f91c9e8 24// Authors: David Guez, Ivana Hrivnacova; IPN Orsay
25
26#include "AliMpMotifTypePadIterator.h"
27#include "AliMpMotifType.h"
28
13985652 29/// \cond CLASSIMP
5f91c9e8 30ClassImp(AliMpMotifTypePadIterator)
13985652 31/// \endcond
5f91c9e8 32
33//______________________________________________________________________________
34AliMpMotifTypePadIterator::AliMpMotifTypePadIterator():
35 AliMpVPadIterator(),
36 fMotifType(0),
37 fCurrentPosition(AliMpIntPair::Invalid())
38{
dee1d5f1 39/// Default constructor, set the current position to "invalid"
5f91c9e8 40}
41
42//______________________________________________________________________________
43AliMpMotifTypePadIterator::AliMpMotifTypePadIterator(
44 const AliMpMotifType* motifType)
45 : AliMpVPadIterator(),
46 fMotifType(motifType),
47 fCurrentPosition(AliMpIntPair::Invalid())
48{
dee1d5f1 49/// Standard constructor, let *this to invalid position
5f91c9e8 50}
51
52//______________________________________________________________________________
53AliMpMotifTypePadIterator::AliMpMotifTypePadIterator(
54 const AliMpMotifTypePadIterator& right)
55 : AliMpVPadIterator(right),
56 fMotifType(right.fMotifType),
57 fCurrentPosition(right.fCurrentPosition)
58
59{
dee1d5f1 60/// Copy constructor
5f91c9e8 61}
62
63//______________________________________________________________________________
64AliMpMotifTypePadIterator::~AliMpMotifTypePadIterator()
65{
dee1d5f1 66/// Destructor
5f91c9e8 67}
68
69// operators
70
71//______________________________________________________________________________
72AliMpMotifTypePadIterator&
73AliMpMotifTypePadIterator::operator = (const AliMpMotifTypePadIterator& right)
74{
dee1d5f1 75/// Assignment operator. \n
76/// If the right hand iterator isn't of good type
77/// the current operator is invalidated
5f91c9e8 78
dee1d5f1 79 // check assignment to self
5f91c9e8 80 if (this == &right) return *this;
81
dee1d5f1 82 // base class assignment
5f91c9e8 83 AliMpVPadIterator::operator=(right);
84
85 fMotifType = right.fMotifType;
86 fCurrentPosition = right.fCurrentPosition;
87
88 return *this;
89}
90
91//
92//private methods
93//
94
95//______________________________________________________________________________
96AliMpIntPair
97AliMpMotifTypePadIterator::FindFirstPadInLine(AliMpIntPair indices) const
98{
dee1d5f1 99/// Find the indices of the first pad in the same line
13985652 100/// as the \a indices, and in column, at least equal, to the
101/// one of \a indices
5f91c9e8 102
103 if (!fMotifType) return AliMpIntPair::Invalid();
104
105 while (indices.GetFirst() < fMotifType->GetNofPadsX()) {
106 if (fMotifType->HasPad(indices)) return indices;
107 indices += AliMpIntPair(1,0);
108 }
109 return AliMpIntPair::Invalid();
110}
111
112//______________________________________________________________________________
113Bool_t AliMpMotifTypePadIterator::IsValid() const
114{
dee1d5f1 115/// Is the iterator in a valid position?
5f91c9e8 116
117 return fMotifType!=0 && fCurrentPosition.IsValid();
118}
119
120//
121//public methods
122//
123
124//______________________________________________________________________________
125void AliMpMotifTypePadIterator::First()
126{
dee1d5f1 127/// Reset the iterator, so that it points to the first available
128/// pad in the motif type
5f91c9e8 129
130 if (!fMotifType) {
131 Invalidate();
132 return ;
133 }
134 fCurrentPosition = AliMpIntPair(0,0);
135 if (fMotifType->HasPad(fCurrentPosition)) return;
136
137
138 // if (0,0) is not available
139 // place itself to the first avalable motif after (0,0) (if exists)
140 // ++(*this);
141 Next();
142
143 return;
144}
145
146//______________________________________________________________________________
147void AliMpMotifTypePadIterator::Next()
148{
dee1d5f1 149/// Move the iterator to the next valid pad.
5f91c9e8 150
151 //if (!IsValid()) return *this;
152 if (!IsValid()) return;
153
154 while (fCurrentPosition.GetSecond() < fMotifType->GetNofPadsY()){
155 AliMpIntPair nextTry
156 = FindFirstPadInLine(fCurrentPosition + AliMpIntPair(1,0));
157 if (nextTry.IsValid()){
158 fCurrentPosition = nextTry;
159 return;
160 }
161 fCurrentPosition.SetFirst(-1);
162 fCurrentPosition.SetSecond(fCurrentPosition.GetSecond()+1);
163 }
164
165 // if the loop is finished, there's not available pads at all...
166 Invalidate();
167 return;
168}
169
170//______________________________________________________________________________
171Bool_t AliMpMotifTypePadIterator::IsDone() const
172{
dee1d5f1 173/// Is the iterator in the end ?
174
5f91c9e8 175 return !IsValid();
176}
177
178//______________________________________________________________________________
179AliMpPad AliMpMotifTypePadIterator::CurrentItem() const
180{
dee1d5f1 181/// Return current pad.
5f91c9e8 182
183 if (!fMotifType)
184 return AliMpPad::Invalid();
185 else
186 return AliMpPad(AliMpIntPair::Invalid(),
187 fCurrentPosition,TVector2(),TVector2());
188}
189
190//______________________________________________________________________________
191void AliMpMotifTypePadIterator::Invalidate()
192{
dee1d5f1 193/// Let the iterator point to the invalid position
194
5f91c9e8 195 fCurrentPosition = AliMpIntPair::Invalid();
196
197}
198