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

//-----------------------------------------------------------------------------
// Class AliMpMotifType
// --------------------
// Class that defines the motif properties.
// Included in AliRoot: 2003/05/02
// Authors: David Guez, Ivana Hrivnacova; IPN Orsay
//-----------------------------------------------------------------------------

#include "AliMpMotifType.h"
#include "AliMpExMapIterator.h"
#include "AliMpMotifTypePadIterator.h"
#include "AliMpConnection.h"
#include "AliMpConstants.h"
#include "AliMpFiles.h"
#include "AliMpEncodePair.h"

#include "AliLog.h"

#include <TSystem.h>
#include <Riostream.h>

#include <cstdlib>

using std::cout;
using std::endl;
using std::ofstream;
using std::setw;
/// \cond CLASSIMP
ClassImp(AliMpMotifType)
/// \endcond

const Int_t AliMpMotifType::fgkPadNumForA = 65;

//______________________________________________________________________________
AliMpMotifType::AliMpMotifType(const TString &id) 
: TObject(),
fID(id),
fNofPadsX(0),   
fNofPadsY(0),
fNofPads(0),
fMaxNofPads(AliMpConstants::ManuNofChannels()),
fConnectionsByLocalIndices(fMaxNofPads*fMaxNofPads),
fConnectionsByManuChannel(fMaxNofPads)
{
  /// Standard constructor                                                   \n
  /// Please note that id should be of the form %s for station 1,2,
  //  %s-%e-%e for station345 and %sx%e for stationTrigger

  fConnectionsByLocalIndices.SetOwner(kTRUE);
  fConnectionsByManuChannel.SetOwner(kFALSE);
  AliDebug(1,Form("this=%p id=%s",this,id.Data()));
}

//______________________________________________________________________________
AliMpMotifType::AliMpMotifType(TRootIOCtor*) 
: TObject(),
fID(""),
fNofPadsX(0),   
fNofPadsY(0),
fNofPads(0),
fMaxNofPads(0),
fConnectionsByLocalIndices(),
fConnectionsByManuChannel()
{
  /// Default constructor
  AliDebug(1,Form("this=%p",this));
}

//______________________________________________________________________________
AliMpMotifType::AliMpMotifType(const AliMpMotifType& rhs)
: TObject(),
fID(""),
fNofPadsX(0),   
fNofPadsY(0),
fNofPads(0),
fMaxNofPads(0),
fConnectionsByLocalIndices(),
fConnectionsByManuChannel()
{
  /// Copy constructor
  AliDebug(1,Form("this=%p (copy ctor)",this));
  rhs.Copy(*this);
}

//______________________________________________________________________________
AliMpMotifType&
AliMpMotifType::operator=(const AliMpMotifType& rhs)
{
  /// Assignment operator
  
  TObject::operator=(rhs);
  rhs.Copy(*this);
  return *this;  
}

//______________________________________________________________________________
TObject*
AliMpMotifType::Clone(const char* /*newname*/) const 
{
  /// Returns a full copy of this object
  return new AliMpMotifType(*this);
}

//______________________________________________________________________________
void
AliMpMotifType::Copy(TObject& object) const
{
  /// Copy object

  TObject::Copy(object);
  AliMpMotifType& mt = static_cast<AliMpMotifType&>(object);
  mt.fID = fID;
  mt.fNofPadsX = fNofPadsX;
  mt.fNofPadsY = fNofPadsY;
  mt.fNofPads = fNofPads;
  mt.fMaxNofPads = fMaxNofPads;
  mt.fConnectionsByLocalIndices = fConnectionsByLocalIndices;
  mt.fConnectionsByManuChannel = fConnectionsByManuChannel;  
}

//______________________________________________________________________________
AliMpMotifType::~AliMpMotifType() 
{
  /// Destructor

  AliDebug(1,Form("this=%p",this));
}

//______________________________________________________________________________
AliMpVPadIterator* AliMpMotifType::CreateIterator() const
{
/// Create new motif type iterator

  return new AliMpMotifTypePadIterator(this);
}

//______________________________________________________________________________
void AliMpMotifType::SetNofPads(Int_t nofPadsX, Int_t nofPadsY)
{
  /// Change the number of pads in this motif

  fNofPadsX = nofPadsX;
  fNofPadsY = nofPadsY;
}


//______________________________________________________________________________
Int_t AliMpMotifType::PadNum(const TString &padName) const
{
  /// Transform a pad name into the equivalent pad number

  if ( (padName[0]>='A') && (padName[0]<='Z') )
    return fgkPadNumForA+padName[0]-'A';
  else
    return atoi(padName.Data());
}

//______________________________________________________________________________
TString AliMpMotifType::PadName(Int_t padNum) const
{
  /// Transform a pad number into its equivalent pad name

  if (padNum<fgkPadNumForA)
    return Form("%d",padNum);
  else
    return char('A'+padNum-fgkPadNumForA);
}

//______________________________________________________________________________
Bool_t 
AliMpMotifType::AddConnection(AliMpConnection* connection)
{
  /// Add the connection to the map
  
  if (!connection) return kFALSE;
  
  Int_t ix = connection->GetLocalIx();
  Int_t iy = connection->GetLocalIy();
  
  Int_t manuChannel = connection->GetManuChannel();
  
  if ( ix >=0 && ix < fMaxNofPads &&
      iy >=0 && iy < fMaxNofPads && 
      manuChannel >= 0 && manuChannel < AliMpConstants::ManuNofChannels())
  {
  
    Int_t index = ix + iy*AliMpConstants::ManuNofChannels();
    
    AliMpConnection* c = FindConnectionByLocalIndices(
                             connection->GetLocalIndices());
    
    if (c)
    {
      AliError(Form("Connection already exists for ix=%d iy=%d",ix,iy));
      return kFALSE;
    }
    
    ++fNofPads;

    fConnectionsByLocalIndices[index] = connection;
    fConnectionsByManuChannel[manuChannel] = connection;
    
    connection->SetOwner(this);
    
    return kTRUE;
  
  }
  return kFALSE;
}  

//______________________________________________________________________________
AliMpConnection*
AliMpMotifType::FindConnectionByPadNum(Int_t padNum) const
{
  /// Retrieve the AliMpConnection pointer from its pad num
  /// This method is quite inefficient as we're looping over all connections
  
  TIter next(&fConnectionsByManuChannel);
  AliMpConnection* connection;
  
  while ( ( connection = static_cast<AliMpConnection*>(next()) ) )
  {
    if (connection->GetPadNum()==padNum) return connection;
  }    
  return 0x0;
}

//______________________________________________________________________________
AliMpConnection*
AliMpMotifType::FindConnectionByLocalIndices(MpPair_t localIndices) const
{
  /// Retrieve the AliMpConnection pointer from its position (in pad unit)

  return FindConnectionByLocalIndices(AliMp::PairFirst(localIndices),
                                      AliMp::PairSecond(localIndices));
}

//______________________________________________________________________________
AliMpConnection*
AliMpMotifType::FindConnectionByLocalIndices(Int_t ix, Int_t iy) const
{
  /// Retrieve the AliMpConnection pointer from its position (in pad unit)

  if ( ix < fNofPadsX && iy < fNofPadsY && ix >= 0 && iy >= 0 )
  {  
    Int_t index = ix + iy*fMaxNofPads;

    return static_cast<AliMpConnection*>(fConnectionsByLocalIndices.UncheckedAt(index));
  }
  else
  {
    return 0x0;
  }
}

//______________________________________________________________________________
AliMpConnection*
AliMpMotifType::FindConnectionByGassiNum(Int_t gassiNum) const
{
  /// Return the connection for the given gassiplex number
  
  if ( gassiNum >=0 && gassiNum < fMaxNofPads ) 
  {
    return static_cast<AliMpConnection*>(fConnectionsByManuChannel.UncheckedAt(gassiNum));
  }
  
  return 0x0;
}

//______________________________________________________________________________
AliMpConnection*
AliMpMotifType::FindConnectionByKaptonNum(Int_t kaptonNum) const
{
  /// Give the connection related to the given kapton number
  /// Inefficient method as we loop over connections to find the right one
  
  TIter next(&fConnectionsByManuChannel);
  AliMpConnection* connection;
  
  while ( ( connection = static_cast<AliMpConnection*>(next()) ) )
  {
    if ( connection && connection->GetKaptonNum()==kaptonNum) return connection;
  }
  return 0x0;
}

//______________________________________________________________________________
AliMpConnection*
AliMpMotifType::FindConnectionByBergNum(Int_t bergNum) const
{
  /// Retrieve the connection from a Berg connector number
  /// Inefficient method as we loop over connections to find the right one
  
  TIter next(&fConnectionsByManuChannel);
  AliMpConnection* connection;
  
  while ( ( connection = static_cast<AliMpConnection*>(next()) ) )
  {
    if ( connection && connection->GetBergNum()==bergNum) return connection;
  }
  return 0x0;
}


//______________________________________________________________________________
MpPair_t AliMpMotifType::FindLocalIndicesByConnection(const AliMpConnection* connection) const
{
  /// Reurn the pad position from the connection pointer.

  return connection->GetLocalIndices();
}

//______________________________________________________________________________
MpPair_t AliMpMotifType::FindLocalIndicesByPadNum(Int_t padNum) const
{
  /// Retrieve the AliMpConnection pointer from its pad num
  
  AliMpConnection* connection = FindConnectionByPadNum(padNum);
  
  if ( ! connection) return -1;
  
  return connection->GetLocalIndices();
}

//______________________________________________________________________________
MpPair_t AliMpMotifType::FindLocalIndicesByGassiNum(Int_t gassiNum) const
{
  /// Return the connection for the given gassiplex number
  
  AliMpConnection* connection = FindConnectionByGassiNum(gassiNum);
  
  if ( ! connection) return -1;

  return connection->GetLocalIndices();
}

//______________________________________________________________________________
MpPair_t AliMpMotifType::FindLocalIndicesByKaptonNum(Int_t kaptonNum) const
{
  /// Give the connection related to the given kapton number

  AliMpConnection* connection = FindConnectionByKaptonNum(kaptonNum);
  
  if ( ! connection) return -1;

  return connection->GetLocalIndices();
}

//______________________________________________________________________________
MpPair_t AliMpMotifType::FindLocalIndicesByBergNum(Int_t bergNum) const
{
  /// Retrieve the connection from a Berg connector number
  
  AliMpConnection* connection = FindConnectionByBergNum(bergNum);
  
  if ( ! connection) return -1;

  return connection->GetLocalIndices();
}

//______________________________________________________________________________
Bool_t 
AliMpMotifType::HasPadByLocalIndices(MpPair_t localIndices) const
{
  /// Return true if the pad indexed by \a localIndices has a connection
    
  return ( FindConnectionByLocalIndices(localIndices) != 0x0 );
}

//______________________________________________________________________________
Bool_t 
AliMpMotifType::HasPadByLocalIndices(Int_t localIx, Int_t localIy) const
{
  /// Return true if the pad indexed by \a localIndices has a connection
    
  return ( FindConnectionByLocalIndices(localIx, localIy) != 0x0 );
}

//______________________________________________________________________________
Bool_t 
AliMpMotifType::HasPadByManuChannel(Int_t manuChannel) const
{
  /// Return true if the pad indexed by \a localIndices has a connection
  
//  if ( manuChannel >= fNofPads ) return kFALSE;
  
  return ( FindConnectionByGassiNum(manuChannel) != 0x0 );
}

//______________________________________________________________________________
void AliMpMotifType::Print(Option_t *option) const
{
  /// Print the map of the motif. In each cell, the value
  /// printed depends of option, as the following:
  /// - option="N" the "name" of the pad is written
  /// - option="K" the Kapton connect. number attached to the pad is written
  /// - option="B" the Berg connect. number attached to the pad is written
  /// - option="G" the Gassiplex channel number attached to the pad is written
  /// otherwise the number of the pad is written
  ///
  /// NOTE : this method is really not optimized, in case 'N' or '',
  /// but the Print() this should not be very important in a Print() method

  switch (option[0]){
  case 'N':cout<<"Name mapping";
    break;
  case 'K':cout<<"Kapton mapping";
    break;
  case 'B':cout<<"Berg mapping";
    break;
  case 'G':cout<<"Gassiplex number mapping";
    break;
  default:cout<<"Pad mapping";
  }
  cout<<" in the motif "<<fID<<endl;
  cout<<"-----------------------------------"<<endl;

  for (Int_t j=fNofPadsY-1;j>=0;j--){
    for (Int_t i=0;i<fNofPadsX;i++){
      AliMpConnection *connexion = FindConnectionByLocalIndices(i,j);
      TString str;
      if (connexion){
        AliDebug(1,Form("i,j=%2d,%2d connexion=%p",i,j,connexion));
        
        switch (option[0]){
          case 'N':str=PadName(connexion->GetPadNum());
            break;
          case 'K':str=Form("%d",connexion->GetKaptonNum());
            break;
          case 'B':str=Form("%d",connexion->GetBergNum());
            break;
          case 'G':str=Form("%d",connexion->GetManuChannel());
            break;
          default:str= Form("%d",connexion->GetPadNum());
        }
        cout<<setw(2)<<str;
      } else cout<<setw(2)<<"--";
      cout<<" ";
    }
    cout<<endl;
  }
}

//_____________________________________________________________________________
Bool_t
AliMpMotifType::Save() const
{
/// Save this motif type

  return Save(fID.Data());
}

//_____________________________________________________________________________
Bool_t
AliMpMotifType::Save(const char* motifName) const
{
  /// Generate the 2 files needed to describe the motif
  
  TString padPosFileName(AliMpFiles::PadPosFileName(motifName));
  
  TString motifTypeFileName(AliMpFiles::MotifFileName(motifName));

  // first a protection : do not allow overwriting existing files...
  Bool_t test = gSystem->AccessPathName(padPosFileName.Data());
  if (test==kFALSE) // AccessPathName has a strange return value convention...
  {
    AliError("Cannot overwrite existing padPos file");
    return kFALSE;
  }
  test = gSystem->AccessPathName(motifTypeFileName.Data());
  if (test==kFALSE)
  {
    AliError("Cannot overwrite existing motifType file");
    return kFALSE;    
  }
  
  ofstream padPosFile(padPosFileName.Data());
  ofstream motifFile(motifTypeFileName.Data());
  
  motifFile <<  "# Motif " << motifName << endl
    << "#" << endl
    << "#connecteur_berg kapton padname not_used" << endl
    << "#for slats there's no kapton connector, so it's always 1" 
    << " (zero make the reader" << endl
    << "#exit, so it's not a valid value here)." << endl
    << "#" << endl;
  
  for ( Int_t ix = 0; ix < GetNofPadsX(); ++ix ) 
  {
    for ( Int_t iy = 0; iy < GetNofPadsY(); ++iy ) 
    {
      AliMpConnection* con = FindConnectionByLocalIndices(ix,iy);
      if (con)
      {
        motifFile << con->GetBergNum() << "\t1\t" << con->GetPadNum() << "\t-" << endl;
        padPosFile << con->GetPadNum() << "\t" << ix << "\t" << iy << endl;
      }
    }
  }
  
  padPosFile.close();
  motifFile.close();
  
  return kTRUE;
}



 AliMpMotifType.cxx:1
 AliMpMotifType.cxx:2
 AliMpMotifType.cxx:3
 AliMpMotifType.cxx:4
 AliMpMotifType.cxx:5
 AliMpMotifType.cxx:6
 AliMpMotifType.cxx:7
 AliMpMotifType.cxx:8
 AliMpMotifType.cxx:9
 AliMpMotifType.cxx:10
 AliMpMotifType.cxx:11
 AliMpMotifType.cxx:12
 AliMpMotifType.cxx:13
 AliMpMotifType.cxx:14
 AliMpMotifType.cxx:15
 AliMpMotifType.cxx:16
 AliMpMotifType.cxx:17
 AliMpMotifType.cxx:18
 AliMpMotifType.cxx:19
 AliMpMotifType.cxx:20
 AliMpMotifType.cxx:21
 AliMpMotifType.cxx:22
 AliMpMotifType.cxx:23
 AliMpMotifType.cxx:24
 AliMpMotifType.cxx:25
 AliMpMotifType.cxx:26
 AliMpMotifType.cxx:27
 AliMpMotifType.cxx:28
 AliMpMotifType.cxx:29
 AliMpMotifType.cxx:30
 AliMpMotifType.cxx:31
 AliMpMotifType.cxx:32
 AliMpMotifType.cxx:33
 AliMpMotifType.cxx:34
 AliMpMotifType.cxx:35
 AliMpMotifType.cxx:36
 AliMpMotifType.cxx:37
 AliMpMotifType.cxx:38
 AliMpMotifType.cxx:39
 AliMpMotifType.cxx:40
 AliMpMotifType.cxx:41
 AliMpMotifType.cxx:42
 AliMpMotifType.cxx:43
 AliMpMotifType.cxx:44
 AliMpMotifType.cxx:45
 AliMpMotifType.cxx:46
 AliMpMotifType.cxx:47
 AliMpMotifType.cxx:48
 AliMpMotifType.cxx:49
 AliMpMotifType.cxx:50
 AliMpMotifType.cxx:51
 AliMpMotifType.cxx:52
 AliMpMotifType.cxx:53
 AliMpMotifType.cxx:54
 AliMpMotifType.cxx:55
 AliMpMotifType.cxx:56
 AliMpMotifType.cxx:57
 AliMpMotifType.cxx:58
 AliMpMotifType.cxx:59
 AliMpMotifType.cxx:60
 AliMpMotifType.cxx:61
 AliMpMotifType.cxx:62
 AliMpMotifType.cxx:63
 AliMpMotifType.cxx:64
 AliMpMotifType.cxx:65
 AliMpMotifType.cxx:66
 AliMpMotifType.cxx:67
 AliMpMotifType.cxx:68
 AliMpMotifType.cxx:69
 AliMpMotifType.cxx:70
 AliMpMotifType.cxx:71
 AliMpMotifType.cxx:72
 AliMpMotifType.cxx:73
 AliMpMotifType.cxx:74
 AliMpMotifType.cxx:75
 AliMpMotifType.cxx:76
 AliMpMotifType.cxx:77
 AliMpMotifType.cxx:78
 AliMpMotifType.cxx:79
 AliMpMotifType.cxx:80
 AliMpMotifType.cxx:81
 AliMpMotifType.cxx:82
 AliMpMotifType.cxx:83
 AliMpMotifType.cxx:84
 AliMpMotifType.cxx:85
 AliMpMotifType.cxx:86
 AliMpMotifType.cxx:87
 AliMpMotifType.cxx:88
 AliMpMotifType.cxx:89
 AliMpMotifType.cxx:90
 AliMpMotifType.cxx:91
 AliMpMotifType.cxx:92
 AliMpMotifType.cxx:93
 AliMpMotifType.cxx:94
 AliMpMotifType.cxx:95
 AliMpMotifType.cxx:96
 AliMpMotifType.cxx:97
 AliMpMotifType.cxx:98
 AliMpMotifType.cxx:99
 AliMpMotifType.cxx:100
 AliMpMotifType.cxx:101
 AliMpMotifType.cxx:102
 AliMpMotifType.cxx:103
 AliMpMotifType.cxx:104
 AliMpMotifType.cxx:105
 AliMpMotifType.cxx:106
 AliMpMotifType.cxx:107
 AliMpMotifType.cxx:108
 AliMpMotifType.cxx:109
 AliMpMotifType.cxx:110
 AliMpMotifType.cxx:111
 AliMpMotifType.cxx:112
 AliMpMotifType.cxx:113
 AliMpMotifType.cxx:114
 AliMpMotifType.cxx:115
 AliMpMotifType.cxx:116
 AliMpMotifType.cxx:117
 AliMpMotifType.cxx:118
 AliMpMotifType.cxx:119
 AliMpMotifType.cxx:120
 AliMpMotifType.cxx:121
 AliMpMotifType.cxx:122
 AliMpMotifType.cxx:123
 AliMpMotifType.cxx:124
 AliMpMotifType.cxx:125
 AliMpMotifType.cxx:126
 AliMpMotifType.cxx:127
 AliMpMotifType.cxx:128
 AliMpMotifType.cxx:129
 AliMpMotifType.cxx:130
 AliMpMotifType.cxx:131
 AliMpMotifType.cxx:132
 AliMpMotifType.cxx:133
 AliMpMotifType.cxx:134
 AliMpMotifType.cxx:135
 AliMpMotifType.cxx:136
 AliMpMotifType.cxx:137
 AliMpMotifType.cxx:138
 AliMpMotifType.cxx:139
 AliMpMotifType.cxx:140
 AliMpMotifType.cxx:141
 AliMpMotifType.cxx:142
 AliMpMotifType.cxx:143
 AliMpMotifType.cxx:144
 AliMpMotifType.cxx:145
 AliMpMotifType.cxx:146
 AliMpMotifType.cxx:147
 AliMpMotifType.cxx:148
 AliMpMotifType.cxx:149
 AliMpMotifType.cxx:150
 AliMpMotifType.cxx:151
 AliMpMotifType.cxx:152
 AliMpMotifType.cxx:153
 AliMpMotifType.cxx:154
 AliMpMotifType.cxx:155
 AliMpMotifType.cxx:156
 AliMpMotifType.cxx:157
 AliMpMotifType.cxx:158
 AliMpMotifType.cxx:159
 AliMpMotifType.cxx:160
 AliMpMotifType.cxx:161
 AliMpMotifType.cxx:162
 AliMpMotifType.cxx:163
 AliMpMotifType.cxx:164
 AliMpMotifType.cxx:165
 AliMpMotifType.cxx:166
 AliMpMotifType.cxx:167
 AliMpMotifType.cxx:168
 AliMpMotifType.cxx:169
 AliMpMotifType.cxx:170
 AliMpMotifType.cxx:171
 AliMpMotifType.cxx:172
 AliMpMotifType.cxx:173
 AliMpMotifType.cxx:174
 AliMpMotifType.cxx:175
 AliMpMotifType.cxx:176
 AliMpMotifType.cxx:177
 AliMpMotifType.cxx:178
 AliMpMotifType.cxx:179
 AliMpMotifType.cxx:180
 AliMpMotifType.cxx:181
 AliMpMotifType.cxx:182
 AliMpMotifType.cxx:183
 AliMpMotifType.cxx:184
 AliMpMotifType.cxx:185
 AliMpMotifType.cxx:186
 AliMpMotifType.cxx:187
 AliMpMotifType.cxx:188
 AliMpMotifType.cxx:189
 AliMpMotifType.cxx:190
 AliMpMotifType.cxx:191
 AliMpMotifType.cxx:192
 AliMpMotifType.cxx:193
 AliMpMotifType.cxx:194
 AliMpMotifType.cxx:195
 AliMpMotifType.cxx:196
 AliMpMotifType.cxx:197
 AliMpMotifType.cxx:198
 AliMpMotifType.cxx:199
 AliMpMotifType.cxx:200
 AliMpMotifType.cxx:201
 AliMpMotifType.cxx:202
 AliMpMotifType.cxx:203
 AliMpMotifType.cxx:204
 AliMpMotifType.cxx:205
 AliMpMotifType.cxx:206
 AliMpMotifType.cxx:207
 AliMpMotifType.cxx:208
 AliMpMotifType.cxx:209
 AliMpMotifType.cxx:210
 AliMpMotifType.cxx:211
 AliMpMotifType.cxx:212
 AliMpMotifType.cxx:213
 AliMpMotifType.cxx:214
 AliMpMotifType.cxx:215
 AliMpMotifType.cxx:216
 AliMpMotifType.cxx:217
 AliMpMotifType.cxx:218
 AliMpMotifType.cxx:219
 AliMpMotifType.cxx:220
 AliMpMotifType.cxx:221
 AliMpMotifType.cxx:222
 AliMpMotifType.cxx:223
 AliMpMotifType.cxx:224
 AliMpMotifType.cxx:225
 AliMpMotifType.cxx:226
 AliMpMotifType.cxx:227
 AliMpMotifType.cxx:228
 AliMpMotifType.cxx:229
 AliMpMotifType.cxx:230
 AliMpMotifType.cxx:231
 AliMpMotifType.cxx:232
 AliMpMotifType.cxx:233
 AliMpMotifType.cxx:234
 AliMpMotifType.cxx:235
 AliMpMotifType.cxx:236
 AliMpMotifType.cxx:237
 AliMpMotifType.cxx:238
 AliMpMotifType.cxx:239
 AliMpMotifType.cxx:240
 AliMpMotifType.cxx:241
 AliMpMotifType.cxx:242
 AliMpMotifType.cxx:243
 AliMpMotifType.cxx:244
 AliMpMotifType.cxx:245
 AliMpMotifType.cxx:246
 AliMpMotifType.cxx:247
 AliMpMotifType.cxx:248
 AliMpMotifType.cxx:249
 AliMpMotifType.cxx:250
 AliMpMotifType.cxx:251
 AliMpMotifType.cxx:252
 AliMpMotifType.cxx:253
 AliMpMotifType.cxx:254
 AliMpMotifType.cxx:255
 AliMpMotifType.cxx:256
 AliMpMotifType.cxx:257
 AliMpMotifType.cxx:258
 AliMpMotifType.cxx:259
 AliMpMotifType.cxx:260
 AliMpMotifType.cxx:261
 AliMpMotifType.cxx:262
 AliMpMotifType.cxx:263
 AliMpMotifType.cxx:264
 AliMpMotifType.cxx:265
 AliMpMotifType.cxx:266
 AliMpMotifType.cxx:267
 AliMpMotifType.cxx:268
 AliMpMotifType.cxx:269
 AliMpMotifType.cxx:270
 AliMpMotifType.cxx:271
 AliMpMotifType.cxx:272
 AliMpMotifType.cxx:273
 AliMpMotifType.cxx:274
 AliMpMotifType.cxx:275
 AliMpMotifType.cxx:276
 AliMpMotifType.cxx:277
 AliMpMotifType.cxx:278
 AliMpMotifType.cxx:279
 AliMpMotifType.cxx:280
 AliMpMotifType.cxx:281
 AliMpMotifType.cxx:282
 AliMpMotifType.cxx:283
 AliMpMotifType.cxx:284
 AliMpMotifType.cxx:285
 AliMpMotifType.cxx:286
 AliMpMotifType.cxx:287
 AliMpMotifType.cxx:288
 AliMpMotifType.cxx:289
 AliMpMotifType.cxx:290
 AliMpMotifType.cxx:291
 AliMpMotifType.cxx:292
 AliMpMotifType.cxx:293
 AliMpMotifType.cxx:294
 AliMpMotifType.cxx:295
 AliMpMotifType.cxx:296
 AliMpMotifType.cxx:297
 AliMpMotifType.cxx:298
 AliMpMotifType.cxx:299
 AliMpMotifType.cxx:300
 AliMpMotifType.cxx:301
 AliMpMotifType.cxx:302
 AliMpMotifType.cxx:303
 AliMpMotifType.cxx:304
 AliMpMotifType.cxx:305
 AliMpMotifType.cxx:306
 AliMpMotifType.cxx:307
 AliMpMotifType.cxx:308
 AliMpMotifType.cxx:309
 AliMpMotifType.cxx:310
 AliMpMotifType.cxx:311
 AliMpMotifType.cxx:312
 AliMpMotifType.cxx:313
 AliMpMotifType.cxx:314
 AliMpMotifType.cxx:315
 AliMpMotifType.cxx:316
 AliMpMotifType.cxx:317
 AliMpMotifType.cxx:318
 AliMpMotifType.cxx:319
 AliMpMotifType.cxx:320
 AliMpMotifType.cxx:321
 AliMpMotifType.cxx:322
 AliMpMotifType.cxx:323
 AliMpMotifType.cxx:324
 AliMpMotifType.cxx:325
 AliMpMotifType.cxx:326
 AliMpMotifType.cxx:327
 AliMpMotifType.cxx:328
 AliMpMotifType.cxx:329
 AliMpMotifType.cxx:330
 AliMpMotifType.cxx:331
 AliMpMotifType.cxx:332
 AliMpMotifType.cxx:333
 AliMpMotifType.cxx:334
 AliMpMotifType.cxx:335
 AliMpMotifType.cxx:336
 AliMpMotifType.cxx:337
 AliMpMotifType.cxx:338
 AliMpMotifType.cxx:339
 AliMpMotifType.cxx:340
 AliMpMotifType.cxx:341
 AliMpMotifType.cxx:342
 AliMpMotifType.cxx:343
 AliMpMotifType.cxx:344
 AliMpMotifType.cxx:345
 AliMpMotifType.cxx:346
 AliMpMotifType.cxx:347
 AliMpMotifType.cxx:348
 AliMpMotifType.cxx:349
 AliMpMotifType.cxx:350
 AliMpMotifType.cxx:351
 AliMpMotifType.cxx:352
 AliMpMotifType.cxx:353
 AliMpMotifType.cxx:354
 AliMpMotifType.cxx:355
 AliMpMotifType.cxx:356
 AliMpMotifType.cxx:357
 AliMpMotifType.cxx:358
 AliMpMotifType.cxx:359
 AliMpMotifType.cxx:360
 AliMpMotifType.cxx:361
 AliMpMotifType.cxx:362
 AliMpMotifType.cxx:363
 AliMpMotifType.cxx:364
 AliMpMotifType.cxx:365
 AliMpMotifType.cxx:366
 AliMpMotifType.cxx:367
 AliMpMotifType.cxx:368
 AliMpMotifType.cxx:369
 AliMpMotifType.cxx:370
 AliMpMotifType.cxx:371
 AliMpMotifType.cxx:372
 AliMpMotifType.cxx:373
 AliMpMotifType.cxx:374
 AliMpMotifType.cxx:375
 AliMpMotifType.cxx:376
 AliMpMotifType.cxx:377
 AliMpMotifType.cxx:378
 AliMpMotifType.cxx:379
 AliMpMotifType.cxx:380
 AliMpMotifType.cxx:381
 AliMpMotifType.cxx:382
 AliMpMotifType.cxx:383
 AliMpMotifType.cxx:384
 AliMpMotifType.cxx:385
 AliMpMotifType.cxx:386
 AliMpMotifType.cxx:387
 AliMpMotifType.cxx:388
 AliMpMotifType.cxx:389
 AliMpMotifType.cxx:390
 AliMpMotifType.cxx:391
 AliMpMotifType.cxx:392
 AliMpMotifType.cxx:393
 AliMpMotifType.cxx:394
 AliMpMotifType.cxx:395
 AliMpMotifType.cxx:396
 AliMpMotifType.cxx:397
 AliMpMotifType.cxx:398
 AliMpMotifType.cxx:399
 AliMpMotifType.cxx:400
 AliMpMotifType.cxx:401
 AliMpMotifType.cxx:402
 AliMpMotifType.cxx:403
 AliMpMotifType.cxx:404
 AliMpMotifType.cxx:405
 AliMpMotifType.cxx:406
 AliMpMotifType.cxx:407
 AliMpMotifType.cxx:408
 AliMpMotifType.cxx:409
 AliMpMotifType.cxx:410
 AliMpMotifType.cxx:411
 AliMpMotifType.cxx:412
 AliMpMotifType.cxx:413
 AliMpMotifType.cxx:414
 AliMpMotifType.cxx:415
 AliMpMotifType.cxx:416
 AliMpMotifType.cxx:417
 AliMpMotifType.cxx:418
 AliMpMotifType.cxx:419
 AliMpMotifType.cxx:420
 AliMpMotifType.cxx:421
 AliMpMotifType.cxx:422
 AliMpMotifType.cxx:423
 AliMpMotifType.cxx:424
 AliMpMotifType.cxx:425
 AliMpMotifType.cxx:426
 AliMpMotifType.cxx:427
 AliMpMotifType.cxx:428
 AliMpMotifType.cxx:429
 AliMpMotifType.cxx:430
 AliMpMotifType.cxx:431
 AliMpMotifType.cxx:432
 AliMpMotifType.cxx:433
 AliMpMotifType.cxx:434
 AliMpMotifType.cxx:435
 AliMpMotifType.cxx:436
 AliMpMotifType.cxx:437
 AliMpMotifType.cxx:438
 AliMpMotifType.cxx:439
 AliMpMotifType.cxx:440
 AliMpMotifType.cxx:441
 AliMpMotifType.cxx:442
 AliMpMotifType.cxx:443
 AliMpMotifType.cxx:444
 AliMpMotifType.cxx:445
 AliMpMotifType.cxx:446
 AliMpMotifType.cxx:447
 AliMpMotifType.cxx:448
 AliMpMotifType.cxx:449
 AliMpMotifType.cxx:450
 AliMpMotifType.cxx:451
 AliMpMotifType.cxx:452
 AliMpMotifType.cxx:453
 AliMpMotifType.cxx:454
 AliMpMotifType.cxx:455
 AliMpMotifType.cxx:456
 AliMpMotifType.cxx:457
 AliMpMotifType.cxx:458
 AliMpMotifType.cxx:459
 AliMpMotifType.cxx:460
 AliMpMotifType.cxx:461
 AliMpMotifType.cxx:462
 AliMpMotifType.cxx:463
 AliMpMotifType.cxx:464
 AliMpMotifType.cxx:465
 AliMpMotifType.cxx:466
 AliMpMotifType.cxx:467
 AliMpMotifType.cxx:468
 AliMpMotifType.cxx:469
 AliMpMotifType.cxx:470
 AliMpMotifType.cxx:471
 AliMpMotifType.cxx:472
 AliMpMotifType.cxx:473
 AliMpMotifType.cxx:474
 AliMpMotifType.cxx:475
 AliMpMotifType.cxx:476
 AliMpMotifType.cxx:477
 AliMpMotifType.cxx:478
 AliMpMotifType.cxx:479
 AliMpMotifType.cxx:480
 AliMpMotifType.cxx:481
 AliMpMotifType.cxx:482
 AliMpMotifType.cxx:483
 AliMpMotifType.cxx:484
 AliMpMotifType.cxx:485
 AliMpMotifType.cxx:486
 AliMpMotifType.cxx:487
 AliMpMotifType.cxx:488
 AliMpMotifType.cxx:489
 AliMpMotifType.cxx:490
 AliMpMotifType.cxx:491
 AliMpMotifType.cxx:492
 AliMpMotifType.cxx:493
 AliMpMotifType.cxx:494
 AliMpMotifType.cxx:495
 AliMpMotifType.cxx:496
 AliMpMotifType.cxx:497
 AliMpMotifType.cxx:498
 AliMpMotifType.cxx:499
 AliMpMotifType.cxx:500
 AliMpMotifType.cxx:501
 AliMpMotifType.cxx:502
 AliMpMotifType.cxx:503
 AliMpMotifType.cxx:504
 AliMpMotifType.cxx:505
 AliMpMotifType.cxx:506
 AliMpMotifType.cxx:507
 AliMpMotifType.cxx:508
 AliMpMotifType.cxx:509
 AliMpMotifType.cxx:510
 AliMpMotifType.cxx:511
 AliMpMotifType.cxx:512
 AliMpMotifType.cxx:513
 AliMpMotifType.cxx:514
 AliMpMotifType.cxx:515
 AliMpMotifType.cxx:516
 AliMpMotifType.cxx:517
 AliMpMotifType.cxx:518
 AliMpMotifType.cxx:519
 AliMpMotifType.cxx:520
 AliMpMotifType.cxx:521
 AliMpMotifType.cxx:522
 AliMpMotifType.cxx:523
 AliMpMotifType.cxx:524
 AliMpMotifType.cxx:525
 AliMpMotifType.cxx:526
 AliMpMotifType.cxx:527