**************************************************************************/
// $Id$
-// $MpId: AliMpNeighboursPadIterator.cxx,v 1.9 2005/09/26 16:12:23 ivana Exp $
+// $MpId: AliMpNeighboursPadIterator.cxx,v 1.11 2006/03/02 16:37:30 ivana Exp $
// Category: sector
//
// Class AliMpNeighboursPadIterator
// Included in AliRoot: 2003/05/02
// Authors: David Guez, Ivana Hrivnacova; IPN Orsay
-#include <TVector2.h>
-
#include "AliMpNeighboursPadIterator.h"
#include "AliMpIntPair.h"
#include "AliMpSectorSegmentation.h"
#include "AliMpRow.h"
#include "AliMpConstants.h"
-ClassImp(AliMpNeighboursPadIterator)
+#include <TVector2.h>
const UInt_t AliMpNeighboursPadIterator::fgkInvalidIndex = 9999;
//never so much neighbours...
+ClassImp(AliMpNeighboursPadIterator)
+
//______________________________________________________________________________
AliMpNeighboursPadIterator::AliMpNeighboursPadIterator()
: AliMpVPadIterator(),
//
//______________________________________________________________________________
-Bool_t AliMpNeighboursPadIterator::IsNeighbours(const AliMpPad& pad) const
+Bool_t AliMpNeighboursPadIterator::IsNeighbour(const AliMpPad& pad) const
{
/// Return true if the pad located by <padIndice> is a neighbour of those
/// located at <fCenterPad>
-
+ if ( !pad.IsValid() ) return kFALSE;
+
TVector2 relPos = pad.Position() - fCenterPad.Position();
TVector2 bounds = pad.Dimensions() + fCenterPad.Dimensions();
return (TMath::Abs(relPos.X())- bounds.X()<AliMpConstants::LengthTolerance()) &&
PadVector ans;
Bool_t cont=kTRUE;
do {
- if (IsNeighbours(current))
+ if (IsNeighbour(current))
ans.push_back(current);
else
cont=kFALSE;
TVector2 nextPos = current.Position() + TVector2(
current.Dimensions().X()*(AliMpConstants::LengthStep()+1.)*direction.GetFirst(),
current.Dimensions().Y()*(AliMpConstants::LengthStep()+1.)*direction.GetSecond());
- current = fkSegmentation->PadByPosition(nextPos);
+ current = fkSegmentation->PadByPosition(nextPos, false);
} while (cont);
return ans;
}
PadVector* ans = new PadVector();
Bool_t cont=kTRUE;
do {
- if (IsNeighbours(current))
+ if (IsNeighbour(current))
ans->Add(new AliMpPad(current));
else
cont=kFALSE;
TVector2 nextPos = current.Position() + TVector2(
current.Dimensions().X()*(AliMpConstants::LengthStep()+1.)*direction.GetFirst(),
current.Dimensions().Y()*(AliMpConstants::LengthStep()+1.)*direction.GetSecond());
- current = fkSegmentation->PadByPosition(nextPos);
+ current = fkSegmentation->PadByPosition(nextPos, false);
} while (cont);
return ans;
}