]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/mapping/AliMpPlaneAreaPadIterator.cxx
Coding conventions corrections only
[u/mrichter/AliRoot.git] / MUON / mapping / AliMpPlaneAreaPadIterator.cxx
1 // $Id$
2 // Category: plane
3 //
4 // Class AliMpPlaneAreaPadIterator
5 // -------------------------------
6 // Class, which defines an iterator over the pads 
7 // inside a given area in a plane in horizontal direction.
8 //
9 // Authors: David Guez, Ivana Hrivnacova; IPN Orsay
10
11 #include <Riostream.h>
12 #include <TVector2.h>
13
14 #include "AliMpPlaneAreaPadIterator.h"
15 #include "AliMpTransformPadIterator.h"
16 #include "AliMpPlaneSegmentation.h"
17 #include "AliMpSectorSegmentation.h"
18
19 ClassImp(AliMpPlaneAreaPadIterator)
20
21 //______________________________________________________________________________
22 AliMpPlaneAreaPadIterator::AliMpPlaneAreaPadIterator(
23                                 const AliMpPlaneSegmentation* segmentation,
24                                 const AliMpArea& area) 
25  : AliMpVPadIterator(),
26    fkPlaneSegmentation(segmentation),
27    fkArea(area),
28    fPadIterators()
29 {
30 // Normal constructor, start in invalid position
31  
32   DecomposeArea();
33
34   fCurrentIterator = fPadIterators.end();
35 }
36
37 //______________________________________________________________________________
38 AliMpPlaneAreaPadIterator::AliMpPlaneAreaPadIterator(
39                                 const AliMpPlaneAreaPadIterator& right)
40   : AliMpVPadIterator(right)
41 {
42 // Copy constructor
43  
44   Fatal("Copy constructor", "Not implemented");
45 }
46
47 //______________________________________________________________________________
48 AliMpPlaneAreaPadIterator::AliMpPlaneAreaPadIterator()
49  : AliMpVPadIterator(),
50    fkPlaneSegmentation(0),
51    fkArea(AliMpArea()),
52    fPadIterators()
53 {
54 // Dummy default constructor.
55 }
56
57 //______________________________________________________________________________
58 AliMpPlaneAreaPadIterator::~AliMpPlaneAreaPadIterator()
59 {
60 // Destructor
61
62   // delete created iterators here
63 }
64
65 //
66 // operators
67 //
68
69 //______________________________________________________________________________
70 AliMpPlaneAreaPadIterator& 
71 AliMpPlaneAreaPadIterator::operator = (const AliMpPlaneAreaPadIterator& right)
72 {
73 // Assignement operator
74
75   // check assignement to self
76   if (this == &right) return *this;
77
78   Fatal("operator =", "Assignement operator not provided.");
79
80   return *this;
81
82
83 //
84 // private methods
85 //
86
87 //______________________________________________________________________________
88 void AliMpPlaneAreaPadIterator::DecomposeArea()
89 {
90 // Decompose the area into areas belonging to the quadrants.
91 // --
92
93   for (Int_t i=0; i<fkPlaneSegmentation->GetNofTransformers(); i++) {
94   
95     AliMpTransformer* transformer = fkPlaneSegmentation->GetTransformer(i);
96     AliMpArea area = transformer->CutArea(fkArea);
97
98     if (area.IsValid()) {
99     
100       AliMpSectorSegmentation* segmentation 
101         = fkPlaneSegmentation->GetSectorSegmentation(transformer->GetScale());
102           
103       AliMpVPadIterator* sectorIt 
104         = segmentation->CreateIterator(area);
105             
106       fPadIterators.push_back(
107         new AliMpTransformPadIterator(sectorIt, transformer));
108     }   
109   }
110 }
111
112 //
113 // public methods
114 //
115
116 //______________________________________________________________________________
117 void AliMpPlaneAreaPadIterator::First()
118 {
119 // Reset the iterator, so that it points to the first available
120 // pad in the area
121 // ---
122   if (fPadIterators.size()==0) return;
123
124   fCurrentIterator = fPadIterators.begin();
125   (*fCurrentIterator)->First();
126
127   while ( fCurrentIterator != fPadIterators.end() &&
128           (*fCurrentIterator)->IsDone()) {
129          
130     fCurrentIterator++;
131     if (fCurrentIterator != fPadIterators.end()) {
132       (*fCurrentIterator)->First();
133     }    
134   }
135 }
136
137 //______________________________________________________________________________
138 void AliMpPlaneAreaPadIterator::Next()
139 {
140 // Move the iterator to the next valid pad.
141 // ---
142
143   (*fCurrentIterator)->Next();
144   
145   while ( fCurrentIterator != fPadIterators.end() &&
146           (*fCurrentIterator)->IsDone()) {
147          
148     fCurrentIterator++;
149     if (fCurrentIterator != fPadIterators.end()) {
150       (*fCurrentIterator)->First();
151     }    
152   }
153 }
154
155 //______________________________________________________________________________
156 Bool_t AliMpPlaneAreaPadIterator::IsDone() const
157 {
158 // 
159   return  fCurrentIterator == fPadIterators.end();
160 }
161
162 //______________________________________________________________________________
163 AliMpPad AliMpPlaneAreaPadIterator::CurrentItem() const 
164 {
165 // Returns the current pad.
166 // ---
167
168   if (fCurrentIterator != fPadIterators.end())
169     return (*fCurrentIterator)->CurrentItem();
170   else
171     return AliMpPad::Invalid();  
172 }
173
174 //______________________________________________________________________________
175 void AliMpPlaneAreaPadIterator::Invalidate()
176 {
177 // Invalidates all sector iterators and sets the current
178 // iterator to invalid position.
179 // ---
180  
181   PadIteratorVectorIterator it;
182   for (it=fPadIterators.begin(); it !=fPadIterators.end(); it++) {
183     (*it)->Invalidate(); 
184   }
185   
186   fCurrentIterator = fPadIterators.end();
187 }
188