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: AliMpRow.cxx,v 1.9 2006/05/24 13:58:46 ivana Exp $
// Category: sector

//-----------------------------------------------------------------------------
// Class AliMpRow
// --------------
// Class describing a row composed of the row segments.
// Included in AliRoot: 2003/05/02
// Authors: David Guez, Ivana Hrivnacova; IPN Orsay
//-----------------------------------------------------------------------------

#include "AliMpRow.h"
#include "AliMpVRowSegment.h"
#include "AliMpVRowSegmentSpecial.h"
#include "AliMpRowSegmentRSpecial.h"
#include "AliMpVMotif.h"
#include "AliMpMotifType.h"
#include "AliMpMotifPosition.h"
#include "AliMpMotifMap.h"
#include "AliMpConstants.h"

#include "AliLog.h"

#include <TMath.h>
#include <Riostream.h>

using std::endl;
/// \cond CLASSIMP
ClassImp(AliMpRow)
/// \endcond

//_____________________________________________________________________________
AliMpRow::AliMpRow(Int_t id, AliMpMotifMap* motifMap) 
  : AliMpVIndexed(),
    fID(id),
    fOffsetY(0.),
    fSegments(),
    fMotifMap(motifMap)
{
/// Standard constructor
}

//_____________________________________________________________________________
AliMpRow::AliMpRow() 
  : AliMpVIndexed(),
    fID(0),
    fOffsetY(0.),
    fSegments(),
    fMotifMap(0)
{
/// Default constructor
}

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

  fSegments.Delete();
}

//
// private methods
//

//_____________________________________________________________________________
AliMpVRowSegment*  AliMpRow::FindRowSegment(Int_t ix) const
{    
/// Find first normal row segment with low indices limit >= ix.

  for (Int_t i=0; i<GetNofRowSegments(); i++) {
    AliMpVRowSegment* segment = GetRowSegment(i);

    if (!dynamic_cast<AliMpVRowSegmentSpecial*>(segment) &&
         segment->GetHighLimitIx() >= ix)
	 
     return segment;	 
  }   

  return 0;	 
}

//_____________________________________________________________________________
AliMpMotifPosition*  
AliMpRow::FindMotifPosition(AliMpVRowSegment* segment, Int_t ix) const
{
/// Find first motif position in the specified row segment 
/// with high indices limit >= ix.

  if (!segment) return 0;

  for (Int_t i=0; i<segment->GetNofMotifs(); i++){
     AliMpMotifPosition* motifPosition 
       = GetMotifMap()->FindMotifPosition(segment->GetMotifPositionId(i));
       
     if(!motifPosition) {
       Fatal("FindMotifPosition", "Not found.");
       return 0;
     }  
     
     if (motifPosition->GetHighLimitIx()>=ix) 
       return motifPosition;
  }
  
  return 0;     
}


//_____________________________________________________________________________
void AliMpRow::SetHighIndicesLimits(Int_t iy)
{
/// Set the global indices high limit to its row segments,
/// motif positions with a given value.
/// Keep ix unmodified.

  for (Int_t j=0; j<GetNofRowSegments(); j++) {
     AliMpVRowSegment* rowSegment = GetRowSegment(j);       
     rowSegment
       ->SetHighIndicesLimit(rowSegment->GetHighLimitIx(),iy);

    for (Int_t k=0; k<rowSegment->GetNofMotifs(); k++) {

      Int_t motifPositionId = rowSegment->GetMotifPositionId(k);
      AliMpMotifPosition* motifPosition 
	= GetMotifMap()->FindMotifPosition(motifPositionId);

      motifPosition
	->SetHighIndicesLimit(motifPosition->GetHighLimitIx(), iy);
     
    }
  }  
}

//_____________________________________________________________________________
void  AliMpRow::CheckEmpty() const
{
/// Give a fatal if the row is empty.

  if (GetNofRowSegments() == 0) 
    Fatal("CheckEmpty", "Empty row");
}

//
// public methods
//

//_____________________________________________________________________________
void AliMpRow::AddRowSegment(AliMpVRowSegment* rowSegment)
{
/// Add row segment at the end.

  fSegments.Add(rowSegment);
}  
  
//_____________________________________________________________________________
void AliMpRow::AddRowSegmentInFront(AliMpVRowSegment* rowSegment)
{
/// Insert row segment in the first vector position.

  fSegments.AddFirst(rowSegment);
}  
  
//_____________________________________________________________________________
AliMpVRowSegment* AliMpRow::FindRowSegment(Double_t x) const
{
/// Find the row segment for the specified x position;
/// return 0 if no row segment is found.

  for (Int_t i=0; i<GetNofRowSegments(); i++) {

    AliMpVRowSegment* rs = (AliMpVRowSegment*)fSegments.At(i);

    if (x >= rs->LeftBorderX() && x <= rs->RightBorderX())
      return rs;
  }
  
  return 0;    
}    

//_____________________________________________________________________________
Double_t AliMpRow::LowBorderY() const
{
/// Return the lowest row offset (the Y coordinate of the position of the
/// low border of motif).

  CheckEmpty();

  return fOffsetY - GetRowSegment(0)->HalfSizeY();
}  

//_____________________________________________________________________________
Double_t AliMpRow::UpperBorderY() const
{
/// Return the uppermost row offset (the Y coordinate of the position of the
/// upper border of motif).
\
  CheckEmpty();

  return fOffsetY + GetRowSegment(0)->HalfSizeY();
}  

//_____________________________________________________________________________
AliMpVPadIterator* AliMpRow::CreateIterator() const
{
/// Iterator is not implemented.

  Fatal("CreateIterator", "Iterator is not implemented.");
  
  return 0;
}  

//_____________________________________________________________________________
void AliMpRow::SetMotifPositions()
{
/// Create motif positions objects and fills them in the motif map.

  CheckEmpty();

  for (Int_t j=0; j<GetNofRowSegments(); j++) {
     AliMpVRowSegment* rowSegment = GetRowSegment(j);

     for (Int_t k=0; k<rowSegment->GetNofMotifs(); k++) {
        // Get values 
	Int_t motifPositionId = rowSegment->GetMotifPositionId(k);
	AliMpVMotif* motif = rowSegment->GetMotif(k);
        
        Double_t posx, posy;
	rowSegment->MotifCenter(motifPositionId, posx, posy);
       
        AliMpMotifPosition* motifPosition 
	  = new AliMpMotifPosition(motifPositionId, motif, posx, posy);

        // set the initial value to of HighIndicesLimit() Invalid()
        // (this is used for calculation of indices in case of
        // special row segments)
        motifPosition->SetHighIndicesLimit(0, 0, false);

        //Bool_t warn = (rowSegment->GetNofMotifs()==1); 
        Bool_t warn = true;
	if (dynamic_cast<AliMpVRowSegmentSpecial*>(rowSegment)) warn = false; 
               // supress warnings for special row segments
	       // which motifs can overlap the row borders
	       
        Bool_t added = GetMotifMap()->AddMotifPosition(motifPosition, warn);
	
	if (!added) delete motifPosition;	
     }  
  }
}    

//_____________________________________________________________________________
void AliMpRow::SetGlobalIndices(AliMp::Direction constPadSizeDirection, 
                                AliMpRow* rowBefore)
{
/// Set the global indices limits to its row segments, motif positions
/// and itself.

  Int_t ix = AliMpConstants::StartPadIndex();
  Int_t iy = AliMpConstants::StartPadIndex();

  for (Int_t j=0; j<GetNofRowSegments(); j++) {
     AliMpVRowSegment* rowSegment = GetRowSegment(j);
     
     ix += rowSegment->GetLowLimitIx();

     for (Int_t k=0; k<rowSegment->GetNofMotifs(); k++) {
     
       // Find the y index value of the low edge
       if (rowBefore) {
         if (constPadSizeDirection == AliMp::kY) {
           iy = rowBefore->GetHighLimitIy()+1;
         } 
	 else {
           AliMpVRowSegment* seg = rowBefore->FindRowSegment(ix);	
	   AliMpMotifPosition* motPos =  FindMotifPosition(seg, ix);
	   if (!dynamic_cast<AliMpRowSegmentRSpecial*>(rowSegment)) {
             if (!motPos) {
	       Fatal("SetGlobalIndices", "Motif position in rowBefore not found.");
               return;
             }  
	   
             iy = motPos->GetHighLimitIy()+1;
	   }  
         }
       } 

       // Set (ix, iy) to k-th motif position and update ix
       ix = rowSegment->SetIndicesToMotifPosition(k, AliMp::Pair(ix, iy));
    }
    rowSegment->SetGlobalIndices(rowBefore);    
  }

  // The low/high indices limits has to be taken as the highest/lowest from all 
  // row segments
  Int_t ixl = 9999;
  Int_t iyl = 9999;
  Int_t ixh = AliMpConstants::StartPadIndex();
  Int_t iyh = AliMpConstants::StartPadIndex();

  for (Int_t i=0; i<GetNofRowSegments(); i++) {
    
    AliMpVRowSegment* rowSegment = GetRowSegment(i);
    
    if ( rowSegment->GetLowLimitIx() < ixl ) 
       ixl = rowSegment->GetLowLimitIx();
       
    if ( rowSegment->GetLowLimitIy() < iyl ) 
       iyl = rowSegment->GetLowLimitIy();

    if ( rowSegment->GetHighLimitIx() > ixh ) 
       ixh = rowSegment->GetHighLimitIx();
       
    if ( rowSegment->GetHighLimitIy() > iyh ) 
       iyh = rowSegment->GetHighLimitIy();
  }     

  SetLowIndicesLimit(ixl, iyl);
  SetHighIndicesLimit(ixh, iyh);
}

//_____________________________________________________________________________
Double_t  AliMpRow::GetPositionX() const
{
/// Return the position of the row centre.

  return ( GetRowSegment(0)->LeftBorderX() +
           GetRowSegment(GetNofRowSegments()-1)->RightBorderX() )/2.;
}

//_____________________________________________________________________________
Double_t  AliMpRow::GetPositionY() const
{
/// Return the position of the row centre.

  return fOffsetY;  
}

//_____________________________________________________________________________
Double_t  AliMpRow::GetDimensionX() const
{
/// Return the maximum halflengths of the row in x, y.

  return ( GetRowSegment(GetNofRowSegments()-1)->RightBorderX() -
           GetRowSegment(0)->LeftBorderX() )/2.;
}

//_____________________________________________________________________________
Double_t  AliMpRow::GetDimensionY() const
{
/// Return the maximum halflengths of the row in x, y.

  return GetRowSegment(0)->HalfSizeY();  
}

//_____________________________________________________________________________
void AliMpRow::SetRowSegmentOffsets(Double_t offsetx)
{
/// Set the row segments offsets in X .

  CheckEmpty();
  
  AliMpVRowSegment* previous = 0;

  for (Int_t j=0; j<GetNofRowSegments(); j++) {
     AliMpVRowSegment* rowSegment = GetRowSegment(j);

     Double_t offsetX;
     if (previous) 
      offsetX = previous->RightBorderX();
    else
      offsetX = offsetx;  
  
    rowSegment->SetOffset(offsetX, 0.);
    previous = rowSegment;  
  }
}


//_____________________________________________________________________________
Double_t AliMpRow::SetOffsetY(Double_t offsetY)
{
/// Set the row offset (the Y coordinate of the position of the
/// center of motif) and returns the offset of the top border.

  CheckEmpty();

  AliMpVRowSegment* first = GetRowSegment(0);
  Double_t rowSizeY = first->HalfSizeY();
  
  // Check if all next row segments have motif of
  // the same size in y
  for (Int_t i=1; i<GetNofRowSegments(); i++) {
     Double_t sizeY = GetRowSegment(i)->HalfSizeY();
     
     if (TMath::Abs(sizeY - rowSizeY) >= AliMpConstants::LengthTolerance()) {
       Fatal("SetOffsetY", "Motif with different Y size in one row");
       return 0.;
     }  
  }

  offsetY += rowSizeY ;
    
  fOffsetY = offsetY;
    
  return offsetY += rowSizeY;
}  

//_____________________________________________________________________________
Int_t AliMpRow::GetNofRowSegments() const 
{
/// Return number of row segments.

  return fSegments.GetSize();
}  

//_____________________________________________________________________________
AliMpVRowSegment* AliMpRow::GetRowSegment(Int_t i) const 
{
/// Return i-th row segment.

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