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: AliMpSlatSegmentation.cxx,v 1.12 2006/05/24 13:58:50 ivana Exp $

//-----------------------------------------------------------------------------
// Caution !!
// Implementation note.
// The position(s) used in the interface are supposed to be relative
// to the slat center (AliMpSlat::Position()), whereas internally
// the x,y are relative to bottom-left corner.
//-----------------------------------------------------------------------------

#include "AliMpSlatSegmentation.h"

#include "AliLog.h"
#include "AliMpArea.h"
#include "AliMpConnection.h"
#include "AliMpConstants.h"
#include "AliLog.h"
#include "AliMpMotif.h"
#include "AliMpMotifPosition.h"
#include "AliMpMotifType.h"
#include "AliMpSlat.h"
#include "AliMpSlatPadIterator.h"
#include "AliMpEncodePair.h"

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

//_____________________________________________________________________________
AliMpSlatSegmentation::AliMpSlatSegmentation() 
: AliMpVSegmentation(),
  fkSlat(0),
  fIsOwner(false)
{
  ///
  /// Default ctor. Not to be used really.
  ///
  AliDebug(1,Form("this=%p Empty ctor",this));
}

//_____________________________________________________________________________
AliMpSlatSegmentation::AliMpSlatSegmentation(const AliMpSlat* slat, Bool_t own) 
: AliMpVSegmentation(), 
  fkSlat(slat),
  fIsOwner(own)
{
  ///
  /// Normal ctor.
  ///
  AliDebug(1,Form("this=%p Normal ctor slat=%p",this,slat));
}

//_____________________________________________________________________________
AliMpSlatSegmentation::~AliMpSlatSegmentation()
{
  ///
  /// Dtor (empty).
  ///
 
  if ( fIsOwner ) delete fkSlat;
 
  // Int_t i(0);//just to be able to put a breakpoint in gdb
  AliDebug(1,Form("this=%p",this));			
}

//_____________________________________________________________________________
AliMpVPadIterator*
AliMpSlatSegmentation::CreateIterator(const AliMpArea& area) const
{
  ///
  /// Returns an iterator to loop over the pad contained within given area.
  ///
  AliMpArea a(area.GetPositionX()+fkSlat->GetPositionX(),
              area.GetPositionY()+fkSlat->GetPositionY(),
              area.GetDimensionX(), 
              area.GetDimensionY());
  AliDebug(3,Form("Converted input area wrt to slat center : "
                  "%7.2f,%7.2f->%7.2f,%7.2f to wrt slat lower-left : "
                  "%7.2f,%7.2f->%7.2f,%7.2f ",
                  area.LeftBorder(),area.DownBorder(),
                  area.RightBorder(),area.UpBorder(),
                  a.LeftBorder(),a.DownBorder(),
                  a.RightBorder(),a.UpBorder()));
                  
  return new AliMpSlatPadIterator(fkSlat,a);
}

//_____________________________________________________________________________
AliMpVPadIterator*
AliMpSlatSegmentation::CreateIterator() const
{
  /// Returns an iterator to loop over all pads of that segmentation
  ///
  /// FIXME: we currently just forward this to the other CreateIterator,
  /// with the proper region. Might be more efficient to write a dedicated
  /// iterator ? Test that idea.
  
  AliMpArea area(0.0,0.0,fkSlat->DX(),fkSlat->DY());
  return CreateIterator(area);
}

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

//_____________________________________________________________________________
Double_t  
AliMpSlatSegmentation::GetDimensionX() const
{
/// Return slat x dimensions
  return Slat()->DX();
}

//_____________________________________________________________________________
Double_t  
AliMpSlatSegmentation::GetDimensionY() const
{
/// Return slat y dimensions
  return Slat()->DY();
}

//_____________________________________________________________________________
void 
AliMpSlatSegmentation::GetAllElectronicCardIDs(TArrayI& ecn) const
{
  /// Fill the array ecn with all manuIds

  Slat()->GetAllMotifPositionsIDs(ecn);
}

//_____________________________________________________________________________
const char*
AliMpSlatSegmentation::GetName() const
{
  /// The name of this segmentation is "SlatSegmentation"+slatName

  TString name("SlatSegmentation");
  if ( fkSlat) 
  {
    name += ".";
    name += fkSlat->GetName();
  }
  return name.Data();
}

//_____________________________________________________________________________
Int_t 
AliMpSlatSegmentation::MaxPadIndexX() const
{
  ///
  /// Returns the value of the largest pad index in x-direction.
  ///
  
  return fkSlat->GetMaxPadIndexX();
}

//_____________________________________________________________________________
Int_t 
AliMpSlatSegmentation::MaxPadIndexY() const
{
  ///
  /// Returns the value of the largest pad index in y-direction.
  ///
  
  return fkSlat->GetMaxNofPadsY()-1;
}

//_____________________________________________________________________________
Int_t 
AliMpSlatSegmentation::NofPads() const
{
/// Return number of pads defined in the slat
  
  return fkSlat->NofPads();
}

//_____________________________________________________________________________
AliMpPad
AliMpSlatSegmentation::PadByLocation(Int_t manuId, Int_t manuChannel, 
                                     Bool_t warning) const
{
  ///
  /// Returns the pad specified by its location, where location is the 
  /// pair (ManuID,ManuChannel).
  /// If warning=kTRUE and the pad does not exist, a warning message is 
  /// printed.
  ///
  /// AliMpPad::Invalid() is returned if there's no pad at the given location.
  ///
  AliMpMotifPosition* motifPos = fkSlat->FindMotifPosition(manuId);
	
  if (!motifPos)
  {
    if (warning)
    {
      AliWarning(Form("Manu ID %d not found in slat %s",
                       manuId, fkSlat->GetID()));
    }
    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));
    }
    return AliMpPad::Invalid();
  }

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

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

//_____________________________________________________________________________
AliMpPad
AliMpSlatSegmentation::PadByIndices(Int_t ix, Int_t iy, 
                                    Bool_t warning) const
{
  ///
  /// Returns the pad specified by its integer indices.
  /// If warning=kTRUE and the pad does not exist, a warning message is 
  /// printed.
  ///
  /// AliMpPad::Invalid() is returned if there's no pad at the given location.
  ///
  ///  
  /// FIXME: except for the FindMotifPosition below, this method
  /// is exactly as the one in AliMpSectorSegmentation.
  /// See if we can merge them somehow.
	
  AliMpMotifPosition* motifPos = fkSlat->FindMotifPosition(ix,iy);
  
  if (!motifPos)
  {
    if ( warning ) 
    {
      AliWarning(Form("No motif found containing pad location (%d,%d)",ix,iy));	  
    }
    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 location (%d,%d)",ix,iy));
    }
    return AliMpPad::Invalid();
  }

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

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

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

//_____________________________________________________________________________
AliMpPad
AliMpSlatSegmentation::PadByPosition(Double_t x, Double_t y, 
                                     Bool_t warning) const
{
  ///
  /// Returns the pad specified by its (floating point) position.
  /// If warning=kTRUE and the pad does not exist, a warning message is 
  /// printed.
  ///
  /// AliMpPad::Invalid() is returned if there's no pad at the given location.
  ///
  
  Double_t blPosX(x);
  Double_t blPosY(y);
  
  blPosX += fkSlat->GetPositionX();
  blPosY += fkSlat->GetPositionY(); // position relative to bottom-left of the slat.
  
  AliMpMotifPosition* motifPos = fkSlat->FindMotifPosition(blPosX,blPosY);
	
  if (!motifPos)
  {
    if (warning) 
    {
      AliWarning(Form("Slat %s Position (%e,%e)/center (%e,%e)/bottom-left cm "
                      " outside limits",fkSlat->GetID(),x,y,
                      blPosX,blPosY));
    }
    return AliMpPad::Invalid();
  }
	
  AliMpVMotif* motif =  motifPos->GetMotif();  

  blPosX -= motifPos->GetPositionX();
  blPosY -= motifPos->GetPositionY();
  MpPair_t localIndices = motif->PadIndicesLocal(blPosX, blPosY);
	
  AliMpConnection* connect = 
    motif->GetMotifType()->FindConnectionByLocalIndices(localIndices);
	
  if (!connect)
  {
    if (warning) 
    {
      AliWarning(Form("Slat %s localIndices (%d,%d) outside motif %s limits",
                      fkSlat->GetID(),AliMp::PairFirst(localIndices),
                      AliMp::PairSecond(localIndices),motif->GetID().Data()));
    }
    return AliMpPad::Invalid();
  }

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

  Double_t dx, dy;
  motif->GetPadDimensionsByIndices(localIndices, dx, dy);
    
  return AliMpPad(motifPos->GetID(),connect->GetManuChannel(),
                  motifPos->GlobalIndices(localIndices),
                  posx, posy, dx, dy);
}

//_____________________________________________________________________________
AliMp::PlaneType
AliMpSlatSegmentation::PlaneType() const
{
  return Slat()->PlaneType();
}

//_____________________________________________________________________________
void
AliMpSlatSegmentation::Print(Option_t* opt) const
{
/// Printing

  fkSlat->Print(opt);
}

//_____________________________________________________________________________
const AliMpSlat* 
AliMpSlatSegmentation::Slat() const
{
  ///
  /// Returns the pointer to the referenced slat.
  ///
  
  return fkSlat;
}

//_____________________________________________________________________________
Bool_t 
AliMpSlatSegmentation::HasPadByIndices(Int_t ix, Int_t iy) const
{
  /// Tell whether we have a pad at indices=(ix,iy)
  
  AliMpMotifPosition* motifPos = Slat()->FindMotifPosition(ix, iy);
  
  if (motifPos) return motifPos->HasPadByIndices(AliMp::Pair(ix, iy));
  
  return kFALSE;
}

//_____________________________________________________________________________
Bool_t 
AliMpSlatSegmentation::HasPadByLocation(Int_t manuId, Int_t manuChannel) const
{
  /// Tell whether we have a pad at location=(manuId,manuChannel)
  
  AliMpMotifPosition* motifPos = Slat()->FindMotifPosition(manuId);
  
  if ( motifPos ) return motifPos->HasPadByManuChannel(manuChannel);
  
  return kFALSE;  
}


//_____________________________________________________________________________
Int_t 
AliMpSlatSegmentation::GetNofElectronicCards() const
{
  /// Get the number of manus of this slat
  return Slat()->GetNofElectronicCards();

}

//_____________________________________________________________________________
Double_t  
AliMpSlatSegmentation::GetPositionX() const
{
/// Return x position of slat origin
  return Slat()->GetPositionX();
}

//_____________________________________________________________________________
Double_t  
AliMpSlatSegmentation::GetPositionY() const
{
/// Return y position of slat origin

  return Slat()->GetPositionY();
}

//_____________________________________________________________________________
Bool_t 
AliMpSlatSegmentation::HasMotifPosition(Int_t manuId) const
{
  /// Use default implementation
  return AliMpVSegmentation::HasMotifPosition(manuId);
}

//_____________________________________________________________________________
AliMpMotifPosition* 
AliMpSlatSegmentation::MotifPosition(Int_t manuId) const
{
  /// Get back a given manu
  return Slat()->FindMotifPosition(manuId);
}

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