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

//-----------------------------------------------------------------------------
// Class AliMpMotifMap
// -------------------
// Class describing the motif map container, where motifs are
// mapped to their string IDs.
// Included in AliRoot: 2003/05/02
// Authors: David Guez, Ivana Hrivnacova; IPN Orsay
//-----------------------------------------------------------------------------

#include "AliMpMotifMap.h"

#include "AliCodeTimer.h"
#include "AliMpExMapIterator.h"
#include "AliMpVMotif.h"
#include "AliMpMotif.h"
#include "AliMpMotifSpecial.h"
#include "AliMpMotifType.h"
#include "AliMpMotifPosition.h"
#include "AliMpEncodePair.h"

#include "AliLog.h"

#include <Riostream.h>
#include <TArrayI.h>

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

//_____________________________________________________________________________
AliMpMotifMap::AliMpMotifMap()
  : TObject(),
    fMotifs(),
    fMotifTypes(),
    fMotifPositions(),
    fMotifPositions2()
{
/// Standard constructor
  
  fMotifPositions2.SetOwner(false);
}

//_____________________________________________________________________________
AliMpMotifMap::AliMpMotifMap(TRootIOCtor* ioCtor) 
  : TObject(),
    fMotifs(ioCtor),
    fMotifTypes(ioCtor),
    fMotifPositions(ioCtor),
    fMotifPositions2(ioCtor)
{
/// Root IO constructor

   fMotifPositions2.SetOwner(false);
}

//_____________________________________________________________________________
AliMpMotifMap::~AliMpMotifMap() 
{
/// Destructor  

  // Delete all registered motifs, motif types, motif positions
}

// 
// private methods
//

//_____________________________________________________________________________
void  AliMpMotifMap::PrintMotif(const AliMpVMotif* motif) const
{
/// Print the motif.

  cout << motif->GetID().Data() << "  "
       << motif->GetMotifType()->GetID() << "    "
       << motif->DimensionX() << " "
       << motif->DimensionY();
}

//_____________________________________________________________________________
void  AliMpMotifMap::PrintMotifType(const AliMpMotifType* motifType) const
{
/// Print the motif type.

  cout << motifType->GetID().Data() << "  "
       << motifType->GetNofPadsX() << "  " 
       << motifType->GetNofPadsY() << "  ";
}

//_____________________________________________________________________________
void  AliMpMotifMap::PrintMotifPosition(
                          const AliMpMotifPosition* motifPosition) const
{
/// Print the motif position.

  cout << " ID " << motifPosition->GetID() << "  "
       << " Motif ID " << motifPosition->GetMotif()->GetID() << "  " 
       << " Pos (X,Y) = (" << motifPosition->GetPositionX() << ","
       << motifPosition->GetPositionY() << ")";
}

//_____________________________________________________________________________
void  AliMpMotifMap::PrintMotifPosition2(
                          const AliMpMotifPosition* motifPosition) const
{
/// Print the motif position.

  cout << setw(3) << motifPosition->GetLowLimitIx() << "  "
       << setw(3) << motifPosition->GetLowLimitIy() << "  "
       << setw(3) << motifPosition->GetHighLimitIx()  << " " 
       << setw(3) << motifPosition->GetHighLimitIy()  << " "
       << motifPosition->GetID() << "  ";
}

//_____________________________________________________________________________
void  AliMpMotifMap::PrintMotifs() const
{
/// Print all the motifs and their motif types 
/// for all motifs in the motifs map.

  if (fMotifs.GetSize()) {
    cout << "Dump of Motif Map - " << fMotifs.GetSize() << " entries:" << endl;
    Int_t counter = 0;        
    AliMpExMapIterator* it = fMotifs.CreateIterator();
    Int_t key;
    AliMpVMotif* motif;
    
    while ( ( motif = static_cast<AliMpVMotif*>(it->Next(key)) ) )
    {
         TString id  = fMotifs.AliMpExMap::GetString(key);
      cout << "Map element " 
           << setw(3) << counter++ << "   " 
           << id.Data() << "   " ;
      PrintMotif(motif);	   
      cout << endl;
    }
    cout << endl;
    delete it;
  }
}

//_____________________________________________________________________________
void  AliMpMotifMap::PrintMotifTypes() const
{
/// Print all the the motifs types and their motif dimensions
/// for all motif types in the motif types map.

  if (fMotifTypes.GetSize()) {
    cout << "Dump of Motif Type Map - " << fMotifTypes.GetSize() << " entries:" << endl;
    Int_t counter = 0;
    AliMpExMapIterator* it = fMotifTypes.CreateIterator();
    Int_t key;
    AliMpMotifType* motifType;
    
    while ( ( motifType = static_cast<AliMpMotifType*>(it->Next(key)) ) )
    {
      TString id  = AliMpExMap::GetString(key);
      cout << "Map element " 
           << setw(3) << counter++ << "   " 
           << id.Data() << "   " ;
      PrintMotifType(motifType);	   
      cout << endl;
    }
    cout << endl;
    delete it;
  }
}

//_____________________________________________________________________________
void 
AliMpMotifMap::GetAllMotifPositionsIDs(TArrayI& ecn) const
{
/// Fill the given array with all motif positions IDs (electronic card numbers)
/// defined in the map

  ecn.Set(fMotifPositions.GetSize());
  TIter next(fMotifPositions.CreateIterator());
  AliMpMotifPosition* motifPosition;
  Int_t i(0);
  while ( ( motifPosition = static_cast<AliMpMotifPosition*>(next()) ) )
  {
    ecn[i] = motifPosition->GetID();
    ++i;
  }
}

//_____________________________________________________________________________
UInt_t  AliMpMotifMap::GetNofMotifPositions() const
{
/// Return the number of all motif positions IDs (electronic card numbers)

  return fMotifPositions.GetSize();
} 

//_____________________________________________________________________________
AliMpMotifPosition* AliMpMotifMap::GetMotifPosition(UInt_t index) const
{
/// Return the motif position which is in the map on the index-th position

  AliCodeTimerAuto("",0);
  
  if ( index >= GetNofMotifPositions() ) {
    AliErrorStream() << "Index " << index << " outside limits." << endl;
    return 0;
  }   

  TIter next(fMotifPositions.CreateIterator());
  while (index-- > 0) next();
  return static_cast<AliMpMotifPosition*>(next());
}

//_____________________________________________________________________________
Int_t AliMpMotifMap::CalculateNofPads() const 
{
/// Calculate total number of pads in the map

  Int_t nofPads = 0;

  TIter next(fMotifPositions.CreateIterator());
  AliMpMotifPosition* motifPosition;
  while ( ( motifPosition = static_cast<AliMpMotifPosition*>(next()) ) )
  {
    nofPads += motifPosition->GetMotif()->GetMotifType()->GetNofPads();
  }

  return nofPads;
}

//_____________________________________________________________________________
void  AliMpMotifMap::PrintMotifPositions() const
{
/// Print all motif positions.

  if (fMotifPositions.GetSize()) {
    cout << "Dump of Motif Position Map - " << fMotifPositions.GetSize() << " entries:" << endl;
    Int_t counter = 0;        
    TIter next(fMotifPositions.CreateIterator());
    AliMpMotifPosition* motifPosition;
    
    while ( ( motifPosition = static_cast<AliMpMotifPosition*>(next()) ) )
    {
      cout << "Map element " 
           << setw(3) << counter++ << "   "; 
      PrintMotifPosition(motifPosition);	   
      cout << endl;
    }
    cout << endl;
  }
}

//_____________________________________________________________________________
void  AliMpMotifMap::PrintMotifPositions2() const
{
/// Print all motif positions from the second map
/// (by global indices)

  if (fMotifPositions2.GetSize()) 
  {
    cout << "Dump of Motif Position Map 2 - " << fMotifPositions2.GetSize() << " entries:" << endl;
    TIter next(fMotifPositions2.CreateIterator());
    AliMpMotifPosition* motifPosition(0x0);
    Int_t counter = 0;        
    
    while ( ( motifPosition = static_cast<AliMpMotifPosition*>(next()) ) )
    {
      cout << "Map element " << setw(3) << counter++ << "   "; 
      PrintMotifPosition2(motifPosition);	   
      cout << endl;
    }
    cout << endl;
  }
}

//
// public methods
//

//_____________________________________________________________________________
Bool_t AliMpMotifMap::AddMotif(AliMpVMotif* motif, Bool_t warn)
{
/// Add the specified motif 
/// if the motif with this ID is not yet present.

  AliMpVMotif* found = FindMotif(motif->GetID());
  if (found) {    
    if (warn && found == motif) 
      AliWarningStream() << "The motif is already in map." << endl;

    if (warn && found != motif) {
      AliWarningStream() 
        << "Another motif with the same ID is already in map." << endl; 
    }	     
    return false;
  }  

  fMotifs.Add(motif->GetID(), motif);

  return true;
}

//_____________________________________________________________________________
Bool_t AliMpMotifMap::AddMotifType(AliMpMotifType* motifType, Bool_t warn)
{
/// Add the specified motif type
/// if the motif with this ID is not yet present.

  AliMpMotifType* found = FindMotifType(motifType->GetID());
  if (found) {    
    if (warn && found == motifType) 
      AliWarningStream() << "The motif type is already in map." << endl;
      
    if (warn && found != motifType) { 
      AliWarningStream() 
        << "Another motif type with the same ID is already in map." << endl;
    }	     
    return false;
  }  

  fMotifTypes.Add(motifType->GetID(), motifType);

  return true;
}

//_____________________________________________________________________________
Bool_t AliMpMotifMap::AddMotifPosition(AliMpMotifPosition* motifPosition, Bool_t warn)
{
/// Add the specified motif position
/// if this position is not yet present.

  AliMpMotifPosition* found = FindMotifPosition(motifPosition->GetID());
  if (found) { 
    if (warn && found == motifPosition) {
      AliWarningStream()
           << "ID: " << motifPosition->GetID() 
           << "  found: " << found 
	   << "  new:   " << motifPosition << endl
	   << "This motif position is already in map." << endl;
    }  
    
    if (warn && found != motifPosition) { 
      AliWarningStream()
           << "ID: " << motifPosition->GetID() 
           << "  found: " << found 
	   << "  new:   " << motifPosition << endl
	   << "Another motif position with the same ID is already in map."
	   << endl;
    }
    	            
    return false;
  }  

  fMotifPositions.Add(motifPosition->GetID() << 16, motifPosition);

  return true;
}

//_____________________________________________________________________________
void AliMpMotifMap::FillMotifPositionMap2()
{
/// Fill the second map (by global indices) of motif positions.

  if (fMotifPositions2.GetSize() > 0 ) {
    AliWarningStream() <<"Map has been already filled." << endl;
    return;
  }  

  TIter next(fMotifPositions.CreateIterator());
  AliMpMotifPosition* motifPosition(0x0);
  while ( ( motifPosition = static_cast<AliMpMotifPosition*>(next()) ) )
  {
    fMotifPositions2.Add(motifPosition->GetLowLimitIx(),
                         motifPosition->GetLowLimitIy(), 
                         motifPosition);
  }
}

//_____________________________________________________________________________
void  AliMpMotifMap::Print(const char* opt) const
{
/// Print the motifs and motif types maps.

  TString sopt(opt);
  
  sopt.ToUpper();
  
  if ( sopt.Contains("MOTIFS") || sopt == "ALL" ) PrintMotifs();
  if ( sopt.Contains("MOTIFTYPES") || sopt == "ALL" ) PrintMotifTypes();
  if ( sopt.Contains("MOTIFPOSITIONS") || sopt == "ALL" ) PrintMotifPositions();
  if ( sopt.Contains("MOTIFPOSITIONS2") || sopt == "ALL" ) PrintMotifPositions2();
}

//_____________________________________________________________________________
void  AliMpMotifMap::PrintGlobalIndices(const char* fileName) const
{
/// Print all motif positions and their global indices.

  ofstream out(fileName, ios::out);

  if (fMotifPositions.GetSize()) {
    TIter next(fMotifPositions.CreateIterator());
    AliMpMotifPosition* motifPosition;
    while ( ( motifPosition = static_cast<AliMpMotifPosition*>(next()) ) )
    {
      out << setw(5) << motifPosition->GetID() << "     "
	  << setw(3) << motifPosition->GetLowLimitIx()  << " " 
	  << setw(3) << motifPosition->GetLowLimitIy() 
         << endl;
    }
    out << endl;
  }
}

//_____________________________________________________________________________
void  AliMpMotifMap::UpdateGlobalIndices(const char* fileName)
{
/// Update the motif positions global indices from the file.

  ifstream in(fileName, ios::in);

  Int_t motifPositionId, offx, offy;
    
  do {
    in >> motifPositionId >> offx >> offy;
    
    if (in.eof()) {
      FillMotifPositionMap2();
      return;
    }  
    
    AliMpMotifPosition* motifPosition = FindMotifPosition(motifPositionId);
	  
    if (motifPosition) {
       AliDebugStream(1) 
            << "Processing " 
            << motifPosition->GetID() << " " << offx << " " << offy << endl; 

       motifPosition->SetLowIndicesLimit(offx, offy);
       
       Int_t offx2 
         = offx + motifPosition->GetMotif()->GetMotifType()->GetNofPadsX() - 1;
	 
       Int_t offy2 
         = offy + motifPosition->GetMotif()->GetMotifType()->GetNofPadsY() - 1;
       
       motifPosition->SetHighIndicesLimit(offx2, offy2);
    }
    else {   
       AliWarningStream()
         << "Motif position " << motifPositionId << " not found" << endl;
    }
  }    
  while (!in.eof());
}


//_____________________________________________________________________________
AliMpVMotif* AliMpMotifMap::FindMotif(const TString& motifID) const
{
/// Find the motif with the specified ID.
  
  //AliCodeTimerAuto("",0);

  return (AliMpVMotif*)fMotifs.GetValue(motifID);
}

//_____________________________________________________________________________
AliMpVMotif* AliMpMotifMap::FindMotif(const TString& motifID, 
                                      const TString& motifTypeID,
			              Double_t padDimensionX, 
                                      Double_t padDimensionY ) const
{
/// Find the motif with the specified ID and returns it
/// only if its motif type and motif dimensions agree
/// with the given motifTypeID and motifDimensions.
/// Disagreement causes fatal error.
 
  //AliCodeTimerAuto("",0);

  AliMpVMotif* motif = FindMotif(motifID);

  if (motif && motif->GetMotifType()->GetID() != motifTypeID) {
      AliFatal("Motif has been already defined with a different type.");
      return 0;	    
  }

  // check pad dimension in case of a normal motif
  if ( motif && 
       dynamic_cast<AliMpMotif*>(motif) && 
       ( motif->GetPadDimensionX(0) != padDimensionX ||
         motif->GetPadDimensionY(0) != padDimensionY ) ) { 
      
      AliFatal("Motif type has been already defined with different dimensions.");
      return 0;

  } 

  // check case of a special motif
  if ( motif && 
      ( padDimensionX == 0. && padDimensionY == 0.) &&
       ! dynamic_cast<AliMpMotifSpecial*>(motif) ) {

      AliFatal("Motif type has been already defined with different dimensions.");
      return 0;

  } 
  
  return motif;
}

//_____________________________________________________________________________
AliMpMotifType* AliMpMotifMap::FindMotifType(const TString& motifTypeID) const
{
/// Find the motif type with the specified motif type ID.
  
  //AliCodeTimerAuto("",0);

  return (AliMpMotifType*)fMotifTypes.GetValue(motifTypeID);
}

//_____________________________________________________________________________
AliMpMotifPosition* 
AliMpMotifMap::FindMotifPosition(Int_t motifPositionID) const
{
/// Find the motif position with the specified motif position ID.
  
  //AliCodeTimerAuto("",0);

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