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: AliMpMotif.cxx,v 1.8 2006/05/24 13:58:41 ivana Exp $
// Category: motif

//-----------------------------------------------------------------------------
// Class AliMpMotif
// ----------------
// Class that defines a motif with its unique ID
// and the motif type.
// Included in AliRoot: 2003/05/02
// Authors: David Guez, Ivana Hrivnacova; IPN Orsay
//-----------------------------------------------------------------------------

#include "AliMpMotif.h"

#include "AliMpConstants.h"
#include "AliMpEncodePair.h"
#include "AliMpMotifType.h"

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

//_____________________________________________________________________________
AliMpMotif::AliMpMotif()
  : AliMpVMotif(),
    fPadDimensionX(0.),
    fPadDimensionY(0.)
{
  /// Default constructor
}

//_____________________________________________________________________________
AliMpMotif::AliMpMotif(const TString &id, AliMpMotifType *motifType,
                       Double_t dx, Double_t dy)
  : AliMpVMotif(id,motifType),
    fPadDimensionX(dx),
    fPadDimensionY(dy)
{
  /// Standard constructor.                                                \n
  /// The dimension in a given direction is calculated by
  /// multiplying the total dimension by the number of pads

}
//_____________________________________________________________________________
AliMpMotif::~AliMpMotif()
{
  /// Destructor
}


//_____________________________________________________________________________
void AliMpMotif::GetPadDimensionsByIndices(MpPair_t localIndices,
                                           Double_t& dx, Double_t& dy) const
{
  /// Give the dimension of the specified pad in the motif

  if ( GetMotifType()->HasPadByLocalIndices(localIndices) ) {
    dx = fPadDimensionX;
    dy = fPadDimensionY;
  }   
  else {
    Warning("GetPadDimensionsByIndices","indices outside range");
    dx = 0.;
    dy = 0.;
  }
}

//_____________________________________________________________________________
void AliMpMotif::GetPadDimensionsByIndices(Int_t ixLocal, Int_t iyLocal,
                                           Double_t& dx, Double_t& dy) const
{
  /// Give the dimension of the specified pad in the motif

  GetPadDimensionsByIndices(AliMp::Pair(ixLocal, iyLocal), dx, dy);
}

//_____________________________________________________________________________
Double_t AliMpMotif::DimensionX() const
{
  /// Give the x dimension of the motif

  return GetMotifType()->GetNofPadsX()*fPadDimensionX;
}

//_____________________________________________________________________________
Double_t AliMpMotif::DimensionY() const
{
  /// Give the y dimension of the motif

  return GetMotifType()->GetNofPadsY()*fPadDimensionY;
}

//_____________________________________________________________________________
void AliMpMotif::PadPositionLocal(MpPair_t localIndices,
                         Double_t& posx, Double_t& posy ) const 
{
  /// Give the local position of the pad number (ix,iy)
  /// (0,0 is the center of the motif)

  PadPositionLocal(AliMp::PairFirst(localIndices), 
                   AliMp::PairSecond(localIndices),
                   posx, posy);
}

//_____________________________________________________________________________
void AliMpMotif::PadPositionLocal(Int_t ixLocal, Int_t iyLocal,
                         Double_t& posx, Double_t& posy) const 
{
  /// Give the local position of the pad number (ix,iy)
  /// (0,0 is the center of the motif)

  posx = (2.*ixLocal+1.)*fPadDimensionX - DimensionX();
  posy = (2.*iyLocal+1.)*fPadDimensionY - DimensionY();
}

//_____________________________________________________________________________
MpPair_t AliMpMotif::PadIndicesLocal(Double_t localPosX, Double_t localPosY) const
{
  /// Return the pad indices from a given local position
  /// or (-1,-1) if this position doesn't correspond to any valid
  /// connection

  Double_t lowerLeftX = localPosX;
  Double_t lowerLeftY = localPosY;
  
  lowerLeftX += DimensionX();
  lowerLeftY += DimensionY();

  if ( lowerLeftX < - AliMpConstants::LengthTolerance() || 
       lowerLeftY < - AliMpConstants::LengthTolerance() ) 
    {
      return -1;
    }

  Int_t ix = (Int_t)(lowerLeftX/(2.*fPadDimensionX));
  Int_t iy = (Int_t)(lowerLeftY/(2.*fPadDimensionY));
  
  if ( ! GetMotifType()->FindConnectionByLocalIndices(ix,iy) )
  {
    return -1;
  }
  
  return AliMp::Pair(ix,iy);
}
 AliMpMotif.cxx:1
 AliMpMotif.cxx:2
 AliMpMotif.cxx:3
 AliMpMotif.cxx:4
 AliMpMotif.cxx:5
 AliMpMotif.cxx:6
 AliMpMotif.cxx:7
 AliMpMotif.cxx:8
 AliMpMotif.cxx:9
 AliMpMotif.cxx:10
 AliMpMotif.cxx:11
 AliMpMotif.cxx:12
 AliMpMotif.cxx:13
 AliMpMotif.cxx:14
 AliMpMotif.cxx:15
 AliMpMotif.cxx:16
 AliMpMotif.cxx:17
 AliMpMotif.cxx:18
 AliMpMotif.cxx:19
 AliMpMotif.cxx:20
 AliMpMotif.cxx:21
 AliMpMotif.cxx:22
 AliMpMotif.cxx:23
 AliMpMotif.cxx:24
 AliMpMotif.cxx:25
 AliMpMotif.cxx:26
 AliMpMotif.cxx:27
 AliMpMotif.cxx:28
 AliMpMotif.cxx:29
 AliMpMotif.cxx:30
 AliMpMotif.cxx:31
 AliMpMotif.cxx:32
 AliMpMotif.cxx:33
 AliMpMotif.cxx:34
 AliMpMotif.cxx:35
 AliMpMotif.cxx:36
 AliMpMotif.cxx:37
 AliMpMotif.cxx:38
 AliMpMotif.cxx:39
 AliMpMotif.cxx:40
 AliMpMotif.cxx:41
 AliMpMotif.cxx:42
 AliMpMotif.cxx:43
 AliMpMotif.cxx:44
 AliMpMotif.cxx:45
 AliMpMotif.cxx:46
 AliMpMotif.cxx:47
 AliMpMotif.cxx:48
 AliMpMotif.cxx:49
 AliMpMotif.cxx:50
 AliMpMotif.cxx:51
 AliMpMotif.cxx:52
 AliMpMotif.cxx:53
 AliMpMotif.cxx:54
 AliMpMotif.cxx:55
 AliMpMotif.cxx:56
 AliMpMotif.cxx:57
 AliMpMotif.cxx:58
 AliMpMotif.cxx:59
 AliMpMotif.cxx:60
 AliMpMotif.cxx:61
 AliMpMotif.cxx:62
 AliMpMotif.cxx:63
 AliMpMotif.cxx:64
 AliMpMotif.cxx:65
 AliMpMotif.cxx:66
 AliMpMotif.cxx:67
 AliMpMotif.cxx:68
 AliMpMotif.cxx:69
 AliMpMotif.cxx:70
 AliMpMotif.cxx:71
 AliMpMotif.cxx:72
 AliMpMotif.cxx:73
 AliMpMotif.cxx:74
 AliMpMotif.cxx:75
 AliMpMotif.cxx:76
 AliMpMotif.cxx:77
 AliMpMotif.cxx:78
 AliMpMotif.cxx:79
 AliMpMotif.cxx:80
 AliMpMotif.cxx:81
 AliMpMotif.cxx:82
 AliMpMotif.cxx:83
 AliMpMotif.cxx:84
 AliMpMotif.cxx:85
 AliMpMotif.cxx:86
 AliMpMotif.cxx:87
 AliMpMotif.cxx:88
 AliMpMotif.cxx:89
 AliMpMotif.cxx:90
 AliMpMotif.cxx:91
 AliMpMotif.cxx:92
 AliMpMotif.cxx:93
 AliMpMotif.cxx:94
 AliMpMotif.cxx:95
 AliMpMotif.cxx:96
 AliMpMotif.cxx:97
 AliMpMotif.cxx:98
 AliMpMotif.cxx:99
 AliMpMotif.cxx:100
 AliMpMotif.cxx:101
 AliMpMotif.cxx:102
 AliMpMotif.cxx:103
 AliMpMotif.cxx:104
 AliMpMotif.cxx:105
 AliMpMotif.cxx:106
 AliMpMotif.cxx:107
 AliMpMotif.cxx:108
 AliMpMotif.cxx:109
 AliMpMotif.cxx:110
 AliMpMotif.cxx:111
 AliMpMotif.cxx:112
 AliMpMotif.cxx:113
 AliMpMotif.cxx:114
 AliMpMotif.cxx:115
 AliMpMotif.cxx:116
 AliMpMotif.cxx:117
 AliMpMotif.cxx:118
 AliMpMotif.cxx:119
 AliMpMotif.cxx:120
 AliMpMotif.cxx:121
 AliMpMotif.cxx:122
 AliMpMotif.cxx:123
 AliMpMotif.cxx:124
 AliMpMotif.cxx:125
 AliMpMotif.cxx:126
 AliMpMotif.cxx:127
 AliMpMotif.cxx:128
 AliMpMotif.cxx:129
 AliMpMotif.cxx:130
 AliMpMotif.cxx:131
 AliMpMotif.cxx:132
 AliMpMotif.cxx:133
 AliMpMotif.cxx:134
 AliMpMotif.cxx:135
 AliMpMotif.cxx:136
 AliMpMotif.cxx:137
 AliMpMotif.cxx:138
 AliMpMotif.cxx:139
 AliMpMotif.cxx:140
 AliMpMotif.cxx:141
 AliMpMotif.cxx:142
 AliMpMotif.cxx:143
 AliMpMotif.cxx:144
 AliMpMotif.cxx:145
 AliMpMotif.cxx:146
 AliMpMotif.cxx:147
 AliMpMotif.cxx:148
 AliMpMotif.cxx:149
 AliMpMotif.cxx:150
 AliMpMotif.cxx:151
 AliMpMotif.cxx:152
 AliMpMotif.cxx:153
 AliMpMotif.cxx:154
 AliMpMotif.cxx:155
 AliMpMotif.cxx:156
 AliMpMotif.cxx:157
 AliMpMotif.cxx:158
 AliMpMotif.cxx:159
 AliMpMotif.cxx:160