4 // Class AliMpPlaneAreaPadIterator
5 // -------------------------------
6 // Class, which defines an iterator over the pads
7 // inside a given area in a plane in horizontal direction.
9 // Authors: David Guez, Ivana Hrivnacova; IPN Orsay
11 #include <Riostream.h>
14 #include "AliMpPlaneAreaPadIterator.h"
15 #include "AliMpTransformPadIterator.h"
16 #include "AliMpPlaneSegmentation.h"
17 #include "AliMpSectorSegmentation.h"
19 ClassImp(AliMpPlaneAreaPadIterator)
21 //______________________________________________________________________________
22 AliMpPlaneAreaPadIterator::AliMpPlaneAreaPadIterator(
23 const AliMpPlaneSegmentation* segmentation,
24 const AliMpArea& area)
25 : AliMpVPadIterator(),
26 fkPlaneSegmentation(segmentation),
30 // Normal constructor, start in invalid position
34 fCurrentIterator = fPadIterators.end();
37 //______________________________________________________________________________
38 AliMpPlaneAreaPadIterator::AliMpPlaneAreaPadIterator(
39 const AliMpPlaneAreaPadIterator& right)
40 : AliMpVPadIterator(right)
44 Fatal("Copy constructor", "Not implemented");
47 //______________________________________________________________________________
48 AliMpPlaneAreaPadIterator::AliMpPlaneAreaPadIterator()
49 : AliMpVPadIterator(),
50 fkPlaneSegmentation(0),
54 // Dummy default constructor.
57 //______________________________________________________________________________
58 AliMpPlaneAreaPadIterator::~AliMpPlaneAreaPadIterator()
62 // delete created iterators here
69 //______________________________________________________________________________
70 AliMpPlaneAreaPadIterator&
71 AliMpPlaneAreaPadIterator::operator = (const AliMpPlaneAreaPadIterator& right)
73 // Assignement operator
75 // check assignement to self
76 if (this == &right) return *this;
78 Fatal("operator =", "Assignement operator not provided.");
87 //______________________________________________________________________________
88 void AliMpPlaneAreaPadIterator::DecomposeArea()
90 // Decompose the area into areas belonging to the quadrants.
93 for (Int_t i=0; i<fkPlaneSegmentation->GetNofTransformers(); i++) {
95 AliMpTransformer* transformer = fkPlaneSegmentation->GetTransformer(i);
96 AliMpArea area = transformer->CutArea(fkArea);
100 AliMpSectorSegmentation* segmentation
101 = fkPlaneSegmentation->GetSectorSegmentation(transformer->GetScale());
103 AliMpVPadIterator* sectorIt
104 = segmentation->CreateIterator(area);
106 fPadIterators.push_back(
107 new AliMpTransformPadIterator(sectorIt, transformer));
116 //______________________________________________________________________________
117 void AliMpPlaneAreaPadIterator::First()
119 // Reset the iterator, so that it points to the first available
122 if (fPadIterators.size()==0) return;
124 fCurrentIterator = fPadIterators.begin();
125 (*fCurrentIterator)->First();
127 while ( fCurrentIterator != fPadIterators.end() &&
128 (*fCurrentIterator)->IsDone()) {
131 if (fCurrentIterator != fPadIterators.end()) {
132 (*fCurrentIterator)->First();
137 //______________________________________________________________________________
138 void AliMpPlaneAreaPadIterator::Next()
140 // Move the iterator to the next valid pad.
143 (*fCurrentIterator)->Next();
145 while ( fCurrentIterator != fPadIterators.end() &&
146 (*fCurrentIterator)->IsDone()) {
149 if (fCurrentIterator != fPadIterators.end()) {
150 (*fCurrentIterator)->First();
155 //______________________________________________________________________________
156 Bool_t AliMpPlaneAreaPadIterator::IsDone() const
159 return fCurrentIterator == fPadIterators.end();
162 //______________________________________________________________________________
163 AliMpPad AliMpPlaneAreaPadIterator::CurrentItem() const
165 // Returns the current pad.
168 if (fCurrentIterator != fPadIterators.end())
169 return (*fCurrentIterator)->CurrentItem();
171 return AliMpPad::Invalid();
174 //______________________________________________________________________________
175 void AliMpPlaneAreaPadIterator::Invalidate()
177 // Invalidates all sector iterators and sets the current
178 // iterator to invalid position.
181 PadIteratorVectorIterator it;
182 for (it=fPadIterators.begin(); it !=fPadIterators.end(); it++) {
186 fCurrentIterator = fPadIterators.end();