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 Fatal("operator =", "Not implemented.");
83 //______________________________________________________________________________
84 void AliMpPlaneAreaPadIterator::DecomposeArea()
86 // Decompose the area into areas belonging to the quadrants.
89 for (Int_t i=0; i<fkPlaneSegmentation->GetNofTransformers(); i++) {
91 AliMpTransformer* transformer = fkPlaneSegmentation->GetTransformer(i);
92 AliMpArea area = transformer->CutArea(fkArea);
96 AliMpSectorSegmentation* segmentation
97 = fkPlaneSegmentation->GetSectorSegmentation(transformer->GetScale());
99 AliMpVPadIterator* sectorIt
100 = segmentation->CreateIterator(area);
102 fPadIterators.push_back(
103 new AliMpTransformPadIterator(sectorIt, transformer));
112 //______________________________________________________________________________
113 void AliMpPlaneAreaPadIterator::First()
115 // Reset the iterator, so that it points to the first available
118 if (fPadIterators.size()==0) return;
120 fCurrentIterator = fPadIterators.begin();
121 (*fCurrentIterator)->First();
123 while ( fCurrentIterator != fPadIterators.end() &&
124 (*fCurrentIterator)->IsDone()) {
127 if (fCurrentIterator != fPadIterators.end()) {
128 (*fCurrentIterator)->First();
133 //______________________________________________________________________________
134 void AliMpPlaneAreaPadIterator::Next()
136 // Move the iterator to the next valid pad.
139 (*fCurrentIterator)->Next();
141 while ( fCurrentIterator != fPadIterators.end() &&
142 (*fCurrentIterator)->IsDone()) {
145 if (fCurrentIterator != fPadIterators.end()) {
146 (*fCurrentIterator)->First();
151 //______________________________________________________________________________
152 Bool_t AliMpPlaneAreaPadIterator::IsDone() const
155 return fCurrentIterator == fPadIterators.end();
158 //______________________________________________________________________________
159 AliMpPad AliMpPlaneAreaPadIterator::CurrentItem() const
161 // Returns the current pad.
164 if (fCurrentIterator != fPadIterators.end())
165 return (*fCurrentIterator)->CurrentItem();
167 return AliMpPad::Invalid();
170 //______________________________________________________________________________
171 void AliMpPlaneAreaPadIterator::Invalidate()
173 // Invalidates all sector iterators and sets the current
174 // iterator to invalid position.
177 PadIteratorVectorIterator it;
178 for (it=fPadIterators.begin(); it !=fPadIterators.end(); it++) {
182 fCurrentIterator = fPadIterators.end();