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$

/// \class AliMpFastSegmentation
/// An implementation of AliMpVSegmentation, which uses
/// some internal maps to speed up the (Has)PadByIndices and PadByLocation
/// methods.
/// 
/// L. Aphecetche, Subatech
///

#include "AliMpFastSegmentation.h"

#include "AliCodeTimer.h"
#include "AliLog.h"
#include "AliMpConnection.h"
#include "AliMpConstants.h"
#include "AliMpMotifMap.h"
#include "AliMpMotifPosition.h"
#include "AliMpMotifType.h"
#include "AliMpPad.h"
#include "AliMpSector.h"
#include "AliMpSlat.h"
#include "AliMpVPadIterator.h"
#include "AliMpEncodePair.h"

#include <TArrayI.h>

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

//#define CHECK

#ifdef CHECK
#include <cassert>
#endif

namespace
{
  ///
  /// The values in Encode and Encode2 are not exactly random.
  /// They are the result of a few "try and see" efforts to optimize the
  /// timing of the TExMap::GetValue (you should note that the TExMap implementation
  /// speed depends on the "non-uniformity" of the keys).
  ///
  /// So don't change those values w/o at least testing a bit the implications...
  /// But feel free to experiment though, in order to optimizer further ;-)
  ///
  Int_t Encode(Int_t a, Int_t b)
  {
    return a*1009 + b;
  }

  Int_t Encode2(Int_t a)
  {
    /// Ideally this method should be different for sectors and slats, as we have
    /// much less manus per DE for slats, and hence the "non-uniformity" is less...
    return ( a ^ (1<<10) ) << 16 ;
  }
}

//_____________________________________________________________________________
AliMpFastSegmentation::AliMpFastSegmentation(AliMpVSegmentation* vseg)
: AliMpVSegmentation(),
fHelper(vseg),
fMotifPositions(),
fIxIy(),
fManuId(),
fPositionX(0.),
fPositionY(0.)
{
  /// Ctor. We adopt vseg.
  
  if (!vseg) 
  {
    AliError("Will get a hard time working with a NULL vseg !");
    return;
  }
  
  AliCodeTimerAuto(vseg->ClassName(),0);
  
  fPositionX = vseg->GetPositionX();
  fPositionY = vseg->GetPositionY();
  
  TArrayI manus;
  
  vseg->GetAllElectronicCardIDs(manus);
  
  for ( Int_t i = 0; i < manus.GetSize(); ++i ) 
  {
    Int_t manuId = manus[i];
    
    AliMpMotifPosition* mp = vseg->MotifPosition(manuId);
    
    // Should never happen
    if ( ! mp ) {
      AliFatal("AliMpMotifPosition not found.");
    }  
    
    Int_t index = 1 + fMotifPositions.GetLast();

    fMotifPositions.AddLast(mp);

    fManuId.Add(Encode2(manuId),1+index);

    for ( Int_t manuChannel = 0; manuChannel < AliMpConstants::ManuNofChannels(); ++manuChannel )
    {
      if ( vseg->HasPadByLocation(manuId,manuChannel) )
      {
        AliMpPad pad = vseg->PadByLocation(manuId,manuChannel);
        
        fIxIy.Add(Encode(pad.GetIx(),pad.GetIy()),1+index);
      }
    }
  }
}

//_____________________________________________________________________________
AliMpFastSegmentation::~AliMpFastSegmentation()
{
  /// dtor
  delete fHelper;
}

//_____________________________________________________________________________
AliMpVPadIterator* 
AliMpFastSegmentation::CreateIterator(const AliMpArea& area) const
{
  /// Forward to our helper
  return fHelper->CreateIterator(area);
}

//_____________________________________________________________________________
AliMpVPadIterator* 
AliMpFastSegmentation::CreateIterator() const
{
  /// Forward to our helper
  return fHelper->CreateIterator();
}

//_____________________________________________________________________________
Int_t 
AliMpFastSegmentation::GetNeighbours(const AliMpPad& pad, TObjArray& neighbours,
                                     Bool_t includeSelf,
                                     Bool_t includeVoid) const
{
  /// Use default implementation
  return AliMpVSegmentation::GetNeighbours(pad,neighbours,includeSelf,includeVoid);
}

//_____________________________________________________________________________
AliMpPad 
AliMpFastSegmentation::PadByLocation(Int_t manuId, Int_t manuChannel, 
                                     Bool_t warning) const
{
  /// Get the pad by location, using the manuid map.
  
  Int_t index = fManuId.GetValue(Encode2(manuId));
  
  if (!index) 
  {
    if (warning)
    {
      AliWarning(Form("Manu ID %d not found",manuId));
      Print();
    }
    return AliMpPad::Invalid();
  }
  
  AliMpMotifPosition* motifPos = InternalMotifPosition(index);
  
  if (!motifPos)
  {
    AliError(Form("InternalMotifPosition(%d) failed",index));
    Print();
    return AliMpPad::Invalid();
  }
  
  AliMpVMotif* motif = motifPos->GetMotif();
  MpPair_t localIndices 
    =  motif->GetMotifType()->FindLocalIndicesByGassiNum(manuChannel);
	
  if ( localIndices < 0 ) 
  {
    if (warning) 
    {
      AliWarning(Form("The pad number %d doesn't exists", manuChannel));
      Print();
    }
    return AliMpPad::Invalid();
  }
	
#ifdef CHECK
  Double_t posx, posy;
  motif->PadPositionLocal(localIndices, posx, posy);
  posx += motifPos->GetPositionX() - fPositionX;
  posy += motifPos->GetPositionY() - fPositionY;

  Double_t dx, dy;
  motif->GetPadDimensionsByIndices(localIndices, dx, dy);
  
  AliMpPad pad1 = AliMpPad(manuId, manuChannel,
                           motifPos->GlobalIndices(localIndices),
                           posx, posy, dx, dy);

  AliMpPad pad2 = fHelper->PadByLocation(manuId, manuChannel,warning);
  if ( pad1 != pad2 ) 
  {
    Print();
    pad1.Print();
    pad2.Print();
    assert(pad1==pad2);
  }
#endif
  Double_t posx, posy;
  motif->PadPositionLocal(localIndices, posx, posy);
  posx += motifPos->GetPositionX() - fPositionX;
  posy += motifPos->GetPositionY() - fPositionY;

  Double_t dx, dy;
  motif->GetPadDimensionsByIndices(localIndices, dx, dy);

  return AliMpPad(manuId, manuChannel,
                  motifPos->GlobalIndices(localIndices),
                  posx, posy, dx, dy);
}

//_____________________________________________________________________________
AliMpMotifPosition*
AliMpFastSegmentation::InternalMotifPosition(Int_t index) const
{
  /// Get the internal manu from the index
  return static_cast<AliMpMotifPosition*>(fMotifPositions.UncheckedAt(index-1));
}

//_____________________________________________________________________________
AliMpPad 
AliMpFastSegmentation::PadByIndices (Int_t ix, Int_t iy, Bool_t warning) const
{
  /// Get pad by indices
  
  Int_t index = fIxIy.GetValue(Encode(ix, iy));
  
  if ( !index )
  {
    if (warning)
    {
      AliWarning(Form("ManuID not found for pad indices (%d,%d)", ix, iy));	  
      Print();
    }
    return AliMpPad::Invalid();
  }
  
  AliMpMotifPosition* motifPos = InternalMotifPosition(index);

  if (!motifPos)
	{
    AliError(Form("InternalMotifPosition(%d) failed",index));
    Print();
		return AliMpPad::Invalid();
	}
	
  AliMpVMotif* motif = motifPos->GetMotif();
  AliMpMotifType* motifType = motif->GetMotifType();
  MpPair_t localIndices(AliMp::Pair(ix, iy) - motifPos->GetLowIndicesLimit());
  AliMpConnection* connection = motifType->FindConnectionByLocalIndices(localIndices);
  
  if (!connection)
  {
    if ( warning )
    {
      AliWarning(Form("No connection for pad indices (%d,%d)", ix, iy));
    }
    return AliMpPad::Invalid();
  }
	
#ifdef CHECK
  AliMpPad pad2 = fHelper->PadByIndices(ix, iy, warning);

  Double_t posx, posy;
  motif->PadPositionLocal(localIndices, posx, posy);
  posx += motifPos->GetPositionX() - fPositionX;
  posy += motifPos->GetPositionY() - fPositionY;

  Double_t dx, dy;
  motif->GetPadDimensionsByIndices(localIndices, dx, dy);

  AliMpPad pad1 = AliMpPad(motifPos->GetID(),connection->GetManuChannel(),
                          ix, iy, posx, posy, dx, dy);
  
  assert(pad1==pad2);
#endif
  Double_t posx, posy;
  motif->PadPositionLocal(localIndices, posx, posy);
  posx += motifPos->GetPositionX() - fPositionX;
  posy += motifPos->GetPositionY() - fPositionY;
 
  Double_t dx, dy;
  motif->GetPadDimensionsByIndices(localIndices, dx, dy);

  return AliMpPad(motifPos->GetID(),connection->GetManuChannel(),
                  ix, iy, posx, posy, dx, dy);
  
}

//_____________________________________________________________________________
AliMpPad 
AliMpFastSegmentation::PadByPosition(Double_t x, Double_t y, Bool_t warning ) const
{
  /// Forward to our helper
  return fHelper->PadByPosition(x, y, warning);
}

//_____________________________________________________________________________
Int_t 
AliMpFastSegmentation::MaxPadIndexX() const
{
  /// Forward to our helper
  return fHelper->MaxPadIndexX();
}

//_____________________________________________________________________________
Int_t  
AliMpFastSegmentation::MaxPadIndexY() const
{
  /// Forward to our helper
  return fHelper->MaxPadIndexY();
}

//_____________________________________________________________________________
Int_t  
AliMpFastSegmentation::NofPads() const
{
  /// Forward to our helper
  return fHelper->NofPads();
}

//_____________________________________________________________________________
Int_t
AliMpFastSegmentation::GetNofElectronicCards() const
{
  /// Forward to our helper
  return fHelper->GetNofElectronicCards();
}

//_____________________________________________________________________________
void
AliMpFastSegmentation::GetAllElectronicCardIDs(TArrayI& ecn) const
{
  /// Forward to our helper
  fHelper->GetAllElectronicCardIDs(ecn);
}

//_____________________________________________________________________________
Bool_t 
AliMpFastSegmentation::HasPadByIndices(Int_t ix, Int_t iy) const
{
  /// Whether there is a pad at the given indices
  Int_t index = fIxIy.GetValue(Encode(ix, iy));
  
  if ( !index ) return kFALSE;
  
  AliMpMotifPosition* mp = InternalMotifPosition(index);
  
  Bool_t r1 = mp->HasPadByIndices(AliMp::Pair(ix, iy));
#ifdef CHECK
  Bool_t r2 = fHelper->HasPadByIndices(ix, iy);
  
  assert(r1==r2);
#endif
  return r1;
}

//_____________________________________________________________________________
Bool_t 
AliMpFastSegmentation::HasPadByLocation(Int_t manuId, Int_t manuChannel) const
{
  /// Whether there is a pad at the given location (de,manuid)
  
  Int_t index = fManuId.GetValue(Encode2(manuId));
  
  if (!index) return kFALSE;
  
  AliMpMotifPosition* mp = InternalMotifPosition(index);
  
  Bool_t r1 = mp->HasPadByManuChannel(manuChannel);
#ifdef CHECK
  Bool_t r2 = fHelper->HasPadByLocation(manuId, manuChannel);
  
  assert(r1==r2);
#endif
  return r1;
}

//_____________________________________________________________________________
void
AliMpFastSegmentation::Print(Option_t* opt) const
{
  /// Forward to our helper
  fHelper->Print(opt);
}

//_____________________________________________________________________________
AliMp::PlaneType
AliMpFastSegmentation::PlaneType() const
{
  /// Forward to our helper
  return fHelper->PlaneType();
}

//_____________________________________________________________________________
Double_t  
AliMpFastSegmentation::GetDimensionX() const
{
  /// Forward to our helper
  return fHelper->GetDimensionX();
}

//_____________________________________________________________________________
Double_t  
AliMpFastSegmentation::GetDimensionY() const
{
  /// Forward to our helper
  return fHelper->GetDimensionY();
}

//_____________________________________________________________________________
Double_t  
AliMpFastSegmentation::GetPositionX() const
{
  /// Forward to our helper
  return fHelper->GetPositionX();
}

//_____________________________________________________________________________
Double_t  
AliMpFastSegmentation::GetPositionY() const
{
  /// Forward to our helper
  return fHelper->GetPositionY();
}

//_____________________________________________________________________________
Bool_t
AliMpFastSegmentation::HasMotifPosition(Int_t manuId) const
{
  /// Whether or not we have a given manu
  return ( fManuId.GetValue(Encode2(manuId)) != 0);
}

//_____________________________________________________________________________
AliMpMotifPosition*
AliMpFastSegmentation::MotifPosition(Int_t manuId) const
{
  /// Get the motifPosition object of a given manu
  Int_t index = fManuId.GetValue(Encode2(manuId));

  if (!index) 
  {
    AliMpVPadIterator* it = CreateIterator();
    it->First();
    AliMpPad pad = it->CurrentItem();
    delete it;
    AliWarning(Form("DE %04d Manu ID %04d not found",pad.GetManuId(),manuId));
    return 0x0;
  }

  return InternalMotifPosition(index);
}

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