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

//-----------------------------------------------------------------------------
// Class AliMpVRowSegmentSpecial
// ----------------------------
// Class describing a special row segment composed of the 
// pad rows.
// Included in AliRoot: 2003/05/02
// Authors: David Guez, Ivana Hrivnacova; IPN Orsay
//-----------------------------------------------------------------------------

#include "AliMpVRowSegmentSpecial.h"
#include "AliMpRow.h"
#include "AliMpPadRow.h"
#include "AliMpVPadRowSegment.h"
#include "AliMpMotif.h"
#include "AliMpMotifType.h"
#include "AliMpMotifMap.h"
#include "AliMpMotifPosition.h"
#include "AliMpConstants.h"

#include <Riostream.h>

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

const Int_t  AliMpVRowSegmentSpecial::fgkMaxNofMotifPositionIds = 20;

//______________________________________________________________________________
AliMpVRowSegmentSpecial::AliMpVRowSegmentSpecial(AliMpRow* row, Double_t offsetX)
  : AliMpVRowSegment(),
    fRow(row),
    fOffsetX(offsetX),
    fPadRows(),
    fMotifs(),
    fMotifPositionIds(),
    fNofMotifPositionIds(0)
{
/// Standard constructor  
}

//______________________________________________________________________________
AliMpVRowSegmentSpecial::AliMpVRowSegmentSpecial() 
  : AliMpVRowSegment(),
    fRow(0),
    fOffsetX(0.),
    fPadRows(),
    fMotifs(),
    fMotifPositionIds(),
    fNofMotifPositionIds(0)
{
/// Default constructor  

   fMotifPositionIds.Set(fgkMaxNofMotifPositionIds);
}

//______________________________________________________________________________
AliMpVRowSegmentSpecial::~AliMpVRowSegmentSpecial() 
{
/// Destructor
  
  for (Int_t i=0; i<GetNofPadRows(); i++)
    delete fPadRows[i];
}

//
// protected methods  
//

//______________________________________________________________________________
AliMpPadRow*  AliMpVRowSegmentSpecial::FindPadRow(Double_t y) const
{
/// Find the pad row in the given y coordinate.

  Double_t lowBorder =  fRow->LowBorderY();
  Double_t highBorder = fRow->LowBorderY();
  
  for (Int_t i=0; i<GetNofPadRows(); i++) {    

    AliMpPadRow* padRow = GetPadRow(i);
    highBorder += 2.*padRow->HalfSizeY();

    if ( y >= lowBorder &&  y <= highBorder)
      return padRow;

    lowBorder = highBorder;
  }
  
  return 0;   	
}

//______________________________________________________________________________
AliMpVPadRowSegment*  
AliMpVRowSegmentSpecial::FindPadRowSegment(Int_t motifPositionId) const
{
/// Find the most down pad row segment with this motifPositionId.

  for (Int_t i=0; i<GetNofPadRows(); i++) {
    AliMpPadRow* padRow = GetPadRow(i);    

    for (Int_t j=0; j<padRow->GetNofPadRowSegments(); j++) { 
      AliMpVPadRowSegment* padRowSegment = padRow->GetPadRowSegment(j);

      if (padRowSegment->GetMotifPositionId() == motifPositionId) 
        return padRowSegment;
    }
  }
  return 0;   	
}

//______________________________________________________________________________
MpPair_t 
AliMpVRowSegmentSpecial::FindRelativeLowIndicesOf(Int_t motifPositionId) const 
{ 
/// Return the lowest pad indices where the motif of the given position ID
/// exist in this segment.

  Int_t ans0Ix = 0;
  Int_t ans0Iy = 1000;
  Int_t ansIx = 0;
  Int_t ansIy = 1000;
  
  Int_t maxNofPadsX=0;
  
  for (Int_t i=0; i<GetNofPadRows(); i++) {
    AliMpPadRow* padRow = GetPadRow(i);

    Int_t nofPadsX=0;
    for ( Int_t j=0; j<padRow->GetNofPadRowSegments(); j++ ) {
      AliMpVPadRowSegment* padRowSegment = padRow->GetPadRowSegment(j);
      nofPadsX += padRowSegment->GetNofPads();
      if (padRowSegment->GetMotifPositionId() == motifPositionId) {
         if ( ansIx < nofPadsX ) ansIx = nofPadsX;
         if ( ansIy >i ) ansIy = i;
                  // ansIx = max (nof pads of this pos ID)
                  // ansIy = min of pad row number
      }
    }  
    if ( nofPadsX > maxNofPadsX ) maxNofPadsX = nofPadsX;
  }    
  if ( ansIx == ans0Ix && ansIy == ans0Iy ) return -1;
  
  return AliMp::Pair(maxNofPadsX-ansIx, ansIy);
}
 
//______________________________________________________________________________
Int_t  AliMpVRowSegmentSpecial::MaxNofPadsInRow() const 
{ 
/// Return the maximum number of pads in this row segment along the X direction

  Int_t maxNofPads = 0;    

  for (Int_t i=0; i<GetNofPadRows(); i++){
    Int_t nofPads = GetPadRow(i)->GetNofPads(); 

    // Find maximum
    if (nofPads > maxNofPads) maxNofPads = nofPads;
  }
    
  return maxNofPads;
}

//______________________________________________________________________________
Bool_t AliMpVRowSegmentSpecial::HasMotif(const AliMpVMotif* motif) const
{
/// Return true if the specified motif is already in fMotifs vector,
/// returns false otherwise.

  for (Int_t i=0; i<fMotifs.GetEntriesFast(); i++)
    if (fMotifs[i] == (const TObject*)motif) return true;

  return false;	 
}

//______________________________________________________________________________
Int_t AliMpVRowSegmentSpecial::GetNofPadRows() const
{
/// Return number of pad rows.

  return fPadRows.GetEntriesFast();
}  

//______________________________________________________________________________
AliMpPadRow* AliMpVRowSegmentSpecial::GetPadRow(Int_t i) const
{
/// Return number of pad rows.

  return (AliMpPadRow*)fPadRows[i];
}  

//
// public methods  
//

//______________________________________________________________________________
void  AliMpVRowSegmentSpecial::AddPadRow(AliMpPadRow* padRow)
{
/// Add a pad row.

  padRow->SetOffsetX(fOffsetX);
  padRow->SetID(GetNofPadRows());

  fPadRows.Add(padRow);
}  

//______________________________________________________________________________
void AliMpVRowSegmentSpecial::UpdateMotifVector()
{
/// Add motifs associated with the pad row segments in the specified
/// pad row in the fMotifs vector.

  for (Int_t i=0; i<GetNofPadRows(); i++) {
    AliMpPadRow* padRow = GetPadRow(i);
 
    for (Int_t j=0; j<padRow->GetNofPadRowSegments(); j++) {
      AliMpVMotif* motif = padRow->GetPadRowSegment(j)->GetMotif();            

      if (!HasMotif(motif)) {
        fMotifs.Add(motif);
	
	// resize array if needed
	if (fNofMotifPositionIds<fgkMaxNofMotifPositionIds)
	  fMotifPositionIds.Set(fMotifPositionIds.GetSize()+
	                        fgkMaxNofMotifPositionIds);	 
        fMotifPositionIds.AddAt(
          padRow->GetPadRowSegment(j)->GetMotifPositionId(),
	  fNofMotifPositionIds++);
      }
    }  
  }
}

//______________________________________________________________________________
Double_t  AliMpVRowSegmentSpecial::HalfSizeY() const
{
/// Return the size in y of this row segment.

  Double_t halfSizeY = 0.;
  for (Int_t i=0; i<GetNofPadRows(); i++) {
    halfSizeY += GetPadRow(i)->HalfSizeY();
  }  
  
  return halfSizeY;
}

//______________________________________________________________________________
AliMpVMotif*  AliMpVRowSegmentSpecial::FindMotif(Double_t x, Double_t y) const
{
/// Return the motif of this row; 

  AliMpPadRow* padRow = FindPadRow(y);
  
  if ( ! padRow ) return 0;

  AliMpVPadRowSegment* padRowSegment = padRow->FindPadRowSegment(x);
    
  if (! padRowSegment ) return 0;

  return padRowSegment->GetMotif();
}  

//______________________________________________________________________________
Int_t AliMpVRowSegmentSpecial::FindMotifPositionId(Double_t x, Double_t y) const
{
/// Return the motif position identified for the given
/// geometric position.

  AliMpPadRow* padRow = FindPadRow(y);
  
  if ( ! padRow ) return 0;

  AliMpVPadRowSegment* padRowSegment = padRow->FindPadRowSegment(x);
    
  if ( ! padRowSegment ) return 0;

  return padRowSegment->GetMotifPositionId();
}

//______________________________________________________________________________
Bool_t AliMpVRowSegmentSpecial::HasMotifPosition(Int_t motifPositionId) const
{
/// Return true if the motif specified with the given position identifier
/// is in this segment.

  if (FindPadRowSegment(motifPositionId))
    return true;
  else  
    return false;   	
}

//______________________________________________________________________________
void AliMpVRowSegmentSpecial::MotifCenter(Int_t motifPositionId,
                                          Double_t& x, Double_t& y) const
{
/// Return the coordinates of the motif specified with
/// the given position identifier.

  // Try to get the motif position from the motif map first
  AliMpMotifPosition* motifPosition
    = GetRow()->GetMotifMap()->FindMotifPosition(motifPositionId);
    
  if (motifPosition) { 
    x = motifPosition->GetPositionX(), 
    y = motifPosition->GetPositionY();
  }
  else {  
    MotifCenterSlow(motifPositionId, x, y);
  }
}

//______________________________________________________________________________
Double_t AliMpVRowSegmentSpecial::GetDimensionX() const
{
/// Return the halflengths in x, y of the row segment rectangular envelope.

  Double_t x = 0.;		    
  for (Int_t i=0; i<GetNofPadRows(); i++) {    
    AliMpPadRow* padRow = GetPadRow(i); 
    
    // Find the biggest pad rows x halfsize
    Double_t xx 
      = (padRow->GetPadRowSegment(0)->RightBorderX() -
         padRow->GetPadRowSegment(padRow->GetNofPadRowSegments()-1)->LeftBorderX())/2.;
    if (xx > x) x = xx;		   
  }                  
    
  return x;   
}

//______________________________________________________________________________
Double_t AliMpVRowSegmentSpecial::GetDimensionY() const
{
/// Return the halflengths in x, y of the row segment rectangular envelope.

  Double_t y = 0.;  
  for (Int_t i=0; i<GetNofPadRows(); i++) {    
    AliMpPadRow* padRow = GetPadRow(i); 
    
    // Add all pad rows y halfsizes   
    y += padRow->HalfSizeY();
  }                  
    
  return y;   
}

//______________________________________________________________________________
AliMpRow*  AliMpVRowSegmentSpecial::GetRow() const
{
/// Return the row.which this row segment belongs to.

  return fRow;
}  

//______________________________________________________________________________
Int_t  AliMpVRowSegmentSpecial::GetNofMotifs() const 
{ 
/// Return the number of different motifs present in this row segment.

  return fMotifs.GetEntriesFast();
}  

//______________________________________________________________________________
AliMpVMotif* AliMpVRowSegmentSpecial::GetMotif(Int_t i) const  
{
/// Return the i-th motif present in this row segment.

   return (AliMpVMotif*)fMotifs[i]; 
}

//______________________________________________________________________________
Int_t  AliMpVRowSegmentSpecial::GetMotifPositionId(Int_t i) const 
{ 
/// Return the i-th motif position Id present in this row segment.

   return fMotifPositionIds[i]; 
} 

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