Coding conventions
[u/mrichter/AliRoot.git] / MUON / mapping / AliMpMotifPositionPadIterator.cxx
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
16 // $Id$
17 // $MpId: AliMpMotifPositionPadIterator.cxx,v 1.6 2006/05/24 13:58:41 ivana Exp $
18 // Category: motif
19
20 //-----------------------------------------------------------------------------
21 // Class AliMpMotifPositionPadIterator
22 // -----------------------------------
23 // Class, which defines an iterator over the pads of a given motif type
24 // Included in AliRoot: 2003/05/02
25 // Authors: David Guez, Ivana Hrivnacova; IPN Orsay
26 //-----------------------------------------------------------------------------
27
28 #include "AliMpMotifPositionPadIterator.h"
29 #include "AliMpMotifPosition.h"
30 #include "AliMpMotifType.h"
31 #include "AliMpConnection.h"
32
33 /// \cond CLASSIMP
34 ClassImp(AliMpMotifPositionPadIterator)
35 /// \endcond
36
37 //______________________________________________________________________________
38 AliMpMotifPositionPadIterator::AliMpMotifPositionPadIterator():
39     AliMpVPadIterator(),
40     fkMotifPos(0),
41     fIterator()
42 {
43 /// Default constructor, set the current position to "invalid"
44 }
45
46 //______________________________________________________________________________
47
48 AliMpMotifPositionPadIterator::AliMpMotifPositionPadIterator(
49                                     const AliMpMotifPosition* motifPos)
50   : AliMpVPadIterator(),
51     fkMotifPos(motifPos),
52     fIterator(motifPos->GetMotif()->GetMotifType())
53 {
54 /// Standard constructor, let *this to invalid position
55 }
56
57 //______________________________________________________________________________
58 AliMpMotifPositionPadIterator::AliMpMotifPositionPadIterator(
59                                     const AliMpMotifPositionPadIterator& right)
60   : AliMpVPadIterator(right),
61     fkMotifPos(right.fkMotifPos),
62     fIterator(right.fIterator)
63     
64 {
65 /// Copy constructor
66 }
67
68 //______________________________________________________________________________
69 AliMpMotifPositionPadIterator::~AliMpMotifPositionPadIterator()
70 {
71 /// Destructor
72 }
73
74 // operators
75
76 //______________________________________________________________________________
77 AliMpMotifPositionPadIterator& 
78 AliMpMotifPositionPadIterator::operator = (const AliMpMotifPositionPadIterator& right)
79 {
80 /// Assignment operator
81
82 // if the right hand iterator isn't of good type
83 // the current operator is invalidated
84
85   // check assignment to self
86   if (this == &right) return *this;
87
88   // base class assignment
89   AliMpVPadIterator::operator=(right);
90
91   fkMotifPos = right.fkMotifPos;
92   fIterator = right.fIterator;
93
94   return *this;
95 }  
96
97 //private methods
98
99
100 //______________________________________________________________________________
101 Bool_t AliMpMotifPositionPadIterator::IsValid() const
102 {
103 /// Is the iterator in a valid position?
104
105     return (fkMotifPos!=0) && (!fIterator.IsDone());
106
107
108 //
109 // public methods
110 //
111
112 //______________________________________________________________________________
113 void AliMpMotifPositionPadIterator::First()
114 {
115 /// Reset the iterator, so that it points to the first available
116 /// pad in the motif type
117
118     if (!fkMotifPos) {
119         Invalidate();
120         return ;
121     }
122
123     fIterator.First();
124     return;
125 }
126
127 //______________________________________________________________________________
128 void AliMpMotifPositionPadIterator::Next()
129 {
130 /// Move the iterator to the next valid pad.
131
132   fIterator.Next();
133 }
134
135 //______________________________________________________________________________
136 Bool_t AliMpMotifPositionPadIterator::IsDone() const
137 {
138 /// Is the iterator in the end? 
139
140   return !IsValid();
141 }
142
143 //______________________________________________________________________________
144 AliMpPad AliMpMotifPositionPadIterator::CurrentItem() const 
145 {
146 /// Return current pad.
147
148     if (!fkMotifPos)
149         return AliMpPad::Invalid();
150     else {
151       AliMpIntPair ind = fIterator.CurrentItem().GetIndices();
152       AliMpMotifType* mt = fkMotifPos->GetMotif()->GetMotifType();
153       AliMpConnection* connect = 
154         mt->FindConnectionByLocalIndices(ind);
155       return AliMpPad(AliMpIntPair(fkMotifPos->GetID(),connect->GetGassiNum()),
156                   fkMotifPos->GlobalIndices(ind),
157                   fkMotifPos->Position()+fkMotifPos->GetMotif()->PadPositionLocal(ind),
158                   fkMotifPos->GetMotif()->GetPadDimensions(ind));
159     }
160 }
161
162 //______________________________________________________________________________
163 void AliMpMotifPositionPadIterator::Invalidate()
164 {
165 /// Let the iterator point to the invalid position
166
167   fIterator.Invalidate();
168
169