ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

// $Id$
// $MpId: AliMpMotifPositionPadIterator.cxx,v 1.6 2006/05/24 13:58:41 ivana Exp $
// Category: motif

//-----------------------------------------------------------------------------
// Class AliMpMotifPositionPadIterator
// -----------------------------------
// Class, which defines an iterator over the pads of a given motif type
// Included in AliRoot: 2003/05/02
// Authors: David Guez, Ivana Hrivnacova; IPN Orsay
//-----------------------------------------------------------------------------

#include "AliMpMotifPositionPadIterator.h"
#include "AliMpMotifPosition.h"
#include "AliMpMotifType.h"
#include "AliMpConnection.h"
#include "AliMpEncodePair.h"

/// \cond CLASSIMP
ClassImp(AliMpMotifPositionPadIterator)
/// \endcond

//______________________________________________________________________________
AliMpMotifPositionPadIterator::AliMpMotifPositionPadIterator():
    AliMpVPadIterator(),
    fkMotifPos(0),
    fIterator()
{
/// Default constructor, set the current position to "invalid"
}

//______________________________________________________________________________

AliMpMotifPositionPadIterator::AliMpMotifPositionPadIterator(
                                    const AliMpMotifPosition* motifPos)
  : AliMpVPadIterator(),
    fkMotifPos(motifPos),
    fIterator(motifPos->GetMotif()->GetMotifType())
{
/// Standard constructor, let *this to invalid position
}

//______________________________________________________________________________
AliMpMotifPositionPadIterator::AliMpMotifPositionPadIterator(
                                    const AliMpMotifPositionPadIterator& right)
  : AliMpVPadIterator(right),
    fkMotifPos(right.fkMotifPos),
    fIterator(right.fIterator)
    
{
/// Copy constructor
}

//______________________________________________________________________________
AliMpMotifPositionPadIterator::~AliMpMotifPositionPadIterator()
{
/// Destructor
}

// operators

//______________________________________________________________________________
AliMpMotifPositionPadIterator& 
AliMpMotifPositionPadIterator::operator = (const AliMpMotifPositionPadIterator& right)
{
/// Assignment operator

// if the right hand iterator isn't of good type
// the current operator is invalidated

  // check assignment to self
  if (this == &right) return *this;

  // base class assignment
  AliMpVPadIterator::operator=(right);

  fkMotifPos = right.fkMotifPos;
  fIterator = right.fIterator;

  return *this;
}  

//private methods


//______________________________________________________________________________
Bool_t AliMpMotifPositionPadIterator::IsValid() const
{
/// Is the iterator in a valid position?

    return (fkMotifPos!=0) && (!fIterator.IsDone());
} 

//
// public methods
//

//______________________________________________________________________________
void AliMpMotifPositionPadIterator::First()
{
/// Reset the iterator, so that it points to the first available
/// pad in the motif type

    if (!fkMotifPos) {
        Invalidate();
        return ;
    }

    fIterator.First();
    return;
}

//______________________________________________________________________________
void AliMpMotifPositionPadIterator::Next()
{
/// Move the iterator to the next valid pad.

  fIterator.Next();
}

//______________________________________________________________________________
Bool_t AliMpMotifPositionPadIterator::IsDone() const
{
/// Is the iterator in the end? 

  return !IsValid();
}

//______________________________________________________________________________
AliMpPad AliMpMotifPositionPadIterator::CurrentItem() const 
{
/// Return current pad.

    if (!fkMotifPos)
        return AliMpPad::Invalid();
    else {
      MpPair_t ind = fIterator.CurrentItem().GetIndices();
      AliMpMotifType* mt = fkMotifPos->GetMotif()->GetMotifType();
      AliMpConnection* connect = 
        mt->FindConnectionByLocalIndices(ind);

      Double_t posx, posy;
      fkMotifPos->GetMotif()->PadPositionLocal(ind, posx, posy);
      posx += fkMotifPos->GetPositionX();
      posy += fkMotifPos->GetPositionY();
        
      Double_t dx, dy;
      fkMotifPos->GetMotif()->GetPadDimensionsByIndices(ind, dx, dy);           

      return AliMpPad(
                  fkMotifPos->GetID(),connect->GetManuChannel(), 
                  fkMotifPos->GlobalIndices(ind),
                  posx, posy, dx, dy);
    }
}

//______________________________________________________________________________
void AliMpMotifPositionPadIterator::Invalidate()
{
/// Let the iterator point to the invalid position

  fIterator.Invalidate();
} 

 AliMpMotifPositionPadIterator.cxx:1
 AliMpMotifPositionPadIterator.cxx:2
 AliMpMotifPositionPadIterator.cxx:3
 AliMpMotifPositionPadIterator.cxx:4
 AliMpMotifPositionPadIterator.cxx:5
 AliMpMotifPositionPadIterator.cxx:6
 AliMpMotifPositionPadIterator.cxx:7
 AliMpMotifPositionPadIterator.cxx:8
 AliMpMotifPositionPadIterator.cxx:9
 AliMpMotifPositionPadIterator.cxx:10
 AliMpMotifPositionPadIterator.cxx:11
 AliMpMotifPositionPadIterator.cxx:12
 AliMpMotifPositionPadIterator.cxx:13
 AliMpMotifPositionPadIterator.cxx:14
 AliMpMotifPositionPadIterator.cxx:15
 AliMpMotifPositionPadIterator.cxx:16
 AliMpMotifPositionPadIterator.cxx:17
 AliMpMotifPositionPadIterator.cxx:18
 AliMpMotifPositionPadIterator.cxx:19
 AliMpMotifPositionPadIterator.cxx:20
 AliMpMotifPositionPadIterator.cxx:21
 AliMpMotifPositionPadIterator.cxx:22
 AliMpMotifPositionPadIterator.cxx:23
 AliMpMotifPositionPadIterator.cxx:24
 AliMpMotifPositionPadIterator.cxx:25
 AliMpMotifPositionPadIterator.cxx:26
 AliMpMotifPositionPadIterator.cxx:27
 AliMpMotifPositionPadIterator.cxx:28
 AliMpMotifPositionPadIterator.cxx:29
 AliMpMotifPositionPadIterator.cxx:30
 AliMpMotifPositionPadIterator.cxx:31
 AliMpMotifPositionPadIterator.cxx:32
 AliMpMotifPositionPadIterator.cxx:33
 AliMpMotifPositionPadIterator.cxx:34
 AliMpMotifPositionPadIterator.cxx:35
 AliMpMotifPositionPadIterator.cxx:36
 AliMpMotifPositionPadIterator.cxx:37
 AliMpMotifPositionPadIterator.cxx:38
 AliMpMotifPositionPadIterator.cxx:39
 AliMpMotifPositionPadIterator.cxx:40
 AliMpMotifPositionPadIterator.cxx:41
 AliMpMotifPositionPadIterator.cxx:42
 AliMpMotifPositionPadIterator.cxx:43
 AliMpMotifPositionPadIterator.cxx:44
 AliMpMotifPositionPadIterator.cxx:45
 AliMpMotifPositionPadIterator.cxx:46
 AliMpMotifPositionPadIterator.cxx:47
 AliMpMotifPositionPadIterator.cxx:48
 AliMpMotifPositionPadIterator.cxx:49
 AliMpMotifPositionPadIterator.cxx:50
 AliMpMotifPositionPadIterator.cxx:51
 AliMpMotifPositionPadIterator.cxx:52
 AliMpMotifPositionPadIterator.cxx:53
 AliMpMotifPositionPadIterator.cxx:54
 AliMpMotifPositionPadIterator.cxx:55
 AliMpMotifPositionPadIterator.cxx:56
 AliMpMotifPositionPadIterator.cxx:57
 AliMpMotifPositionPadIterator.cxx:58
 AliMpMotifPositionPadIterator.cxx:59
 AliMpMotifPositionPadIterator.cxx:60
 AliMpMotifPositionPadIterator.cxx:61
 AliMpMotifPositionPadIterator.cxx:62
 AliMpMotifPositionPadIterator.cxx:63
 AliMpMotifPositionPadIterator.cxx:64
 AliMpMotifPositionPadIterator.cxx:65
 AliMpMotifPositionPadIterator.cxx:66
 AliMpMotifPositionPadIterator.cxx:67
 AliMpMotifPositionPadIterator.cxx:68
 AliMpMotifPositionPadIterator.cxx:69
 AliMpMotifPositionPadIterator.cxx:70
 AliMpMotifPositionPadIterator.cxx:71
 AliMpMotifPositionPadIterator.cxx:72
 AliMpMotifPositionPadIterator.cxx:73
 AliMpMotifPositionPadIterator.cxx:74
 AliMpMotifPositionPadIterator.cxx:75
 AliMpMotifPositionPadIterator.cxx:76
 AliMpMotifPositionPadIterator.cxx:77
 AliMpMotifPositionPadIterator.cxx:78
 AliMpMotifPositionPadIterator.cxx:79
 AliMpMotifPositionPadIterator.cxx:80
 AliMpMotifPositionPadIterator.cxx:81
 AliMpMotifPositionPadIterator.cxx:82
 AliMpMotifPositionPadIterator.cxx:83
 AliMpMotifPositionPadIterator.cxx:84
 AliMpMotifPositionPadIterator.cxx:85
 AliMpMotifPositionPadIterator.cxx:86
 AliMpMotifPositionPadIterator.cxx:87
 AliMpMotifPositionPadIterator.cxx:88
 AliMpMotifPositionPadIterator.cxx:89
 AliMpMotifPositionPadIterator.cxx:90
 AliMpMotifPositionPadIterator.cxx:91
 AliMpMotifPositionPadIterator.cxx:92
 AliMpMotifPositionPadIterator.cxx:93
 AliMpMotifPositionPadIterator.cxx:94
 AliMpMotifPositionPadIterator.cxx:95
 AliMpMotifPositionPadIterator.cxx:96
 AliMpMotifPositionPadIterator.cxx:97
 AliMpMotifPositionPadIterator.cxx:98
 AliMpMotifPositionPadIterator.cxx:99
 AliMpMotifPositionPadIterator.cxx:100
 AliMpMotifPositionPadIterator.cxx:101
 AliMpMotifPositionPadIterator.cxx:102
 AliMpMotifPositionPadIterator.cxx:103
 AliMpMotifPositionPadIterator.cxx:104
 AliMpMotifPositionPadIterator.cxx:105
 AliMpMotifPositionPadIterator.cxx:106
 AliMpMotifPositionPadIterator.cxx:107
 AliMpMotifPositionPadIterator.cxx:108
 AliMpMotifPositionPadIterator.cxx:109
 AliMpMotifPositionPadIterator.cxx:110
 AliMpMotifPositionPadIterator.cxx:111
 AliMpMotifPositionPadIterator.cxx:112
 AliMpMotifPositionPadIterator.cxx:113
 AliMpMotifPositionPadIterator.cxx:114
 AliMpMotifPositionPadIterator.cxx:115
 AliMpMotifPositionPadIterator.cxx:116
 AliMpMotifPositionPadIterator.cxx:117
 AliMpMotifPositionPadIterator.cxx:118
 AliMpMotifPositionPadIterator.cxx:119
 AliMpMotifPositionPadIterator.cxx:120
 AliMpMotifPositionPadIterator.cxx:121
 AliMpMotifPositionPadIterator.cxx:122
 AliMpMotifPositionPadIterator.cxx:123
 AliMpMotifPositionPadIterator.cxx:124
 AliMpMotifPositionPadIterator.cxx:125
 AliMpMotifPositionPadIterator.cxx:126
 AliMpMotifPositionPadIterator.cxx:127
 AliMpMotifPositionPadIterator.cxx:128
 AliMpMotifPositionPadIterator.cxx:129
 AliMpMotifPositionPadIterator.cxx:130
 AliMpMotifPositionPadIterator.cxx:131
 AliMpMotifPositionPadIterator.cxx:132
 AliMpMotifPositionPadIterator.cxx:133
 AliMpMotifPositionPadIterator.cxx:134
 AliMpMotifPositionPadIterator.cxx:135
 AliMpMotifPositionPadIterator.cxx:136
 AliMpMotifPositionPadIterator.cxx:137
 AliMpMotifPositionPadIterator.cxx:138
 AliMpMotifPositionPadIterator.cxx:139
 AliMpMotifPositionPadIterator.cxx:140
 AliMpMotifPositionPadIterator.cxx:141
 AliMpMotifPositionPadIterator.cxx:142
 AliMpMotifPositionPadIterator.cxx:143
 AliMpMotifPositionPadIterator.cxx:144
 AliMpMotifPositionPadIterator.cxx:145
 AliMpMotifPositionPadIterator.cxx:146
 AliMpMotifPositionPadIterator.cxx:147
 AliMpMotifPositionPadIterator.cxx:148
 AliMpMotifPositionPadIterator.cxx:149
 AliMpMotifPositionPadIterator.cxx:150
 AliMpMotifPositionPadIterator.cxx:151
 AliMpMotifPositionPadIterator.cxx:152
 AliMpMotifPositionPadIterator.cxx:153
 AliMpMotifPositionPadIterator.cxx:154
 AliMpMotifPositionPadIterator.cxx:155
 AliMpMotifPositionPadIterator.cxx:156
 AliMpMotifPositionPadIterator.cxx:157
 AliMpMotifPositionPadIterator.cxx:158
 AliMpMotifPositionPadIterator.cxx:159
 AliMpMotifPositionPadIterator.cxx:160
 AliMpMotifPositionPadIterator.cxx:161
 AliMpMotifPositionPadIterator.cxx:162
 AliMpMotifPositionPadIterator.cxx:163
 AliMpMotifPositionPadIterator.cxx:164
 AliMpMotifPositionPadIterator.cxx:165
 AliMpMotifPositionPadIterator.cxx:166
 AliMpMotifPositionPadIterator.cxx:167
 AliMpMotifPositionPadIterator.cxx:168
 AliMpMotifPositionPadIterator.cxx:169
 AliMpMotifPositionPadIterator.cxx:170
 AliMpMotifPositionPadIterator.cxx:171
 AliMpMotifPositionPadIterator.cxx:172
 AliMpMotifPositionPadIterator.cxx:173
 AliMpMotifPositionPadIterator.cxx:174
 AliMpMotifPositionPadIterator.cxx:175
 AliMpMotifPositionPadIterator.cxx:176
 AliMpMotifPositionPadIterator.cxx:177
 AliMpMotifPositionPadIterator.cxx:178
 AliMpMotifPositionPadIterator.cxx:179