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

#include "AliMpSlat.h"

#include "AliMpExMapIterator.h"
#include "AliLog.h"
#include "AliMpMotifPosition.h"
#include "AliMpPCB.h"

#include "Riostream.h"

#include "TArrayI.h"

#include <cassert>

//-----------------------------------------------------------------------------
/// Representation of a slat cathode (bending or non-bending).
///
/// A slat can be viewed as a "collection" of PCBs of various densities
/// (the density is defined by the size of the pads composing the PCB).
///
/// All the PCBs have a least the same height, if not the same width. In most
/// of the case, height=width=40 cm, at least for St345 (for trigger,
/// width varies)
// 
/// \author Laurent Aphecetche
//-----------------------------------------------------------------------------

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

//_____________________________________________________________________________
AliMpSlat::AliMpSlat(TRootIOCtor* ioCtor) 
: TObject(), 
  fId(""), 
  fPlaneType(AliMp::kNonBendingPlane),
  fDX(0), 
  fDY(0),
  fNofPadsX(0), 
  fMaxNofPadsY(0),
  fManuMap(ioCtor),
  fPCBs(),
  fPositionX(0.),
  fPositionY(0.),
  fNofPads(0)
{
    ///
    /// Empty ctor.
    ///
  AliDebug(1,Form("this=%p Empty ctor",this));

    fPCBs.SetOwner(kTRUE);
    fManuMap.SetOwner(kFALSE);
}

//_____________________________________________________________________________
AliMpSlat::AliMpSlat(const char* id, AliMp::PlaneType bendingOrNonBending)
: TObject(), 
  fId(id), 
  fPlaneType(bendingOrNonBending),
  fDX(0), 
  fDY(0),
  fNofPadsX(0), 
  fMaxNofPadsY(0),
  fManuMap(),
  fPCBs(),
  fPositionX(0.),
  fPositionY(0.),
  fNofPads(0)
{
    ///
    /// Normal ctor
    ///
  AliDebug(1,Form("this=%p id=%s",this,id));			

    fPCBs.SetOwner(kTRUE);
    fManuMap.SetOwner(kFALSE);
}

//_____________________________________________________________________________
AliMpSlat::~AliMpSlat()
{
  ///
  /// Dtor.
  ///
  AliDebug(1,Form("this=%p fId=%s",this,fId.Data()));			

  fPCBs.Delete();
}

//_____________________________________________________________________________
void
AliMpSlat::Add(const AliMpPCB& pcbType, const TArrayI& manuList) 
{
  ///
  /// Adds a PCB to this slat. The manuList specifies the ids of the manu
  /// that compose the PCB. The manuList ordering is important, as the 
  /// assumption is that it's ordered counter-clockwise, starting from
  /// the lower-left of the PCB.
  ///
  Int_t ixOffset = 0;
  if ( GetSize() )
	{
		ixOffset = GetPCB(GetSize()-1)->Ixmax()+1;
	}
  else
  {
    ixOffset = pcbType.Ixmin();
  }
  Double_t xOffset = DX()*2;
  AliMpPCB* pcb = pcbType.Clone(manuList,ixOffset,xOffset);
  fPCBs.AddLast(pcb);
  fDY = TMath::Max(pcb->DY(),fDY);
  fDX += pcb->DX();
  fNofPadsX += pcb->GetNofPadsX();
  fMaxNofPadsY = TMath::Max(fMaxNofPadsY,pcb->GetNofPadsY());
  Int_t n(0);
  for ( Int_t i = 0; i < pcb->GetSize(); ++i )
	{
		AliMpMotifPosition* mp = pcb->GetMotifPosition(i);
		Int_t manuID = mp->GetID();
    // Before inserting a new key, check if it's already there
    TObject* there = fManuMap.GetValue(manuID);
    if ( there == 0 )
    {
      ++n;
      AliDebug(1,Form("Adding %d-th manuId=%d (%d) to ManuMap (size=%d)",n,manuID,mp->GetID(),fManuMap.GetSize()));
      fManuMap.Add(manuID,(TObject*)mp);
    }
    else
    {
      AliError(Form("ManuID %d is duplicated for PCB %s",manuID,pcbType.GetID()));      
    }
  }
  fPositionX = DX();
  fPositionY = DY();
  fNofPads += pcb->NofPads();
}

//_____________________________________________________________________________
Double_t
AliMpSlat::DX() const
{
  ///
  /// Returns the x-half-size of the slat.
  ///
  return fDX;
}

//_____________________________________________________________________________
Double_t
AliMpSlat::DY() const
{
  ///
  /// Returns the y-half-size of the slat.
  ///
  return fDY;
}

//_____________________________________________________________________________
AliMpMotifPosition*
AliMpSlat::FindMotifPosition(Int_t manuID) const
{
  ///
  /// Returns the motifPosition referenced by it manuID
  ///
  return static_cast<AliMpMotifPosition*>(fManuMap.GetValue(manuID));
}

//_____________________________________________________________________________
AliMpMotifPosition*
AliMpSlat::FindMotifPosition(Int_t ix, Int_t iy) const
{
  ///
  /// - 1. Find the PCB containing ix (iy not needed for this)
  /// - 2. Forward the request to the PCB, using pcb local indices.
	//
  const AliMpPCB* pcb = FindPCB(ix);
  if ( pcb )
	{
		return pcb->FindMotifPosition(ix,iy);
	}
  else
	{
		return 0;
	}
}

//_____________________________________________________________________________
AliMpMotifPosition*
AliMpSlat::FindMotifPosition(Double_t x, Double_t y) const
{
  ///
  /// Returns the motifPosition containing position (x,y)
  ///
  const AliMpPCB* pcb = FindPCB(x,y);
  if (pcb)
	{
		return pcb->FindMotifPosition(x,y);
	}
  else
	{
		return 0;
	}
}

//_____________________________________________________________________________
AliMpPCB*
AliMpSlat::FindPCB(Int_t ix) const
{
  ///
  /// Returns the PCB containing x-integer-position ix
  ///
  for ( Int_t i = 0; i < GetSize(); ++i ) 
	{
		AliMpPCB* pcb = GetPCB(i);
		if ( ix >= pcb->Ixmin() && ix <= pcb->Ixmax() )
		{
			return pcb;
		}
	}
  return 0;
}

//_____________________________________________________________________________
Int_t
AliMpSlat::FindPCBIndex(Int_t ix) const
{
  ///
  /// Returns the index of the PCB containing x-integer-position ix.
  ///
  for ( Int_t i = 0; i < GetSize(); ++i ) 
	{
		AliMpPCB* pcb = GetPCB(i);
		if ( ix >= pcb->Ixmin() && ix <= pcb->Ixmax() )
		{
			return i;
		}
	}
  return -1;
}

//_____________________________________________________________________________
AliMpPCB*
AliMpSlat::FindPCB(Double_t x, Double_t y) const
{
  ///
  /// Returns the PCB containing position (x,y)
  ///
  for ( Int_t i = 0; i < GetSize(); ++i ) 
	{
		AliMpPCB* pcb = GetPCB(i);
//		if ( x >= pcb->Xmin() && x < pcb->Xmax() &&
//				 y >= pcb->Ymin() && y < pcb->Ymax() )
//		{
//			return pcb;
//		}
    if ( x < pcb->Xmin() || x >= pcb->Xmax() ||
         y < pcb->Ymin() || y >= pcb->Ymax() )
    {
      continue;
    }
    return pcb;
	}
  return 0;
}

//_____________________________________________________________________________
Int_t
AliMpSlat::FindPCBIndex(Double_t x, Double_t y) const
{
  ///
  /// Returns the index of the PCB containing position (x,y)
  ///
  for ( Int_t i = 0; i < GetSize(); ++i ) 
	{
		AliMpPCB* pcb = GetPCB(i);
		if ( x >= pcb->Xmin() && x < pcb->Xmax() &&
				 y >= pcb->Ymin() && y < pcb->Ymax() )
		{
			return i;
		}
	}
  return -1;
}

//_____________________________________________________________________________
Int_t 
AliMpSlat::FindPCBIndexByMotifPositionID(Int_t manuId) const
{
  /// Find the index of the PCB containing a given manu
  for ( Int_t i = 0; i< GetSize(); ++i )
  {
    AliMpPCB* pcb = GetPCB(i);
    if ( pcb->HasMotifPositionID(manuId) ) return i;
  }
  return -1;
}

//_____________________________________________________________________________
void
AliMpSlat::ForcePosition(Double_t x, Double_t y)
{
  ///
  /// Force the position to be different from (DX(),DY()).
  /// Normally only used by triggerSlats (for layers).
  /// Beware that this method must be called once all PCB have been added,
  /// as the Add() method resets the position.
  ///
  fPositionX = x;
  fPositionY = y;
}

//_____________________________________________________________________________
void
AliMpSlat::GetAllMotifPositionsIDs(TArrayI& ecn) const
{
  ///
  /// Return all the manuIds (=MotifPositionIDs) of this slat
  ///
  Int_t nofElectronicCards(GetNofElectronicCards());
  assert(nofElectronicCards>0);
  ecn.Set(nofElectronicCards);
  TIter next(fManuMap.CreateIterator());
  AliMpMotifPosition* mp;
  Int_t n(0);
  while ( ( mp = static_cast<AliMpMotifPosition*>(next()) ) )
  {
    ecn.AddAt(mp->GetID(),n);
    ++n;
  }
  assert(n==nofElectronicCards);
}

//_____________________________________________________________________________
const char*
AliMpSlat::GetID() const
{
  ///
  /// Returns the name of this slat.
  ///
  return fId.Data();
}

//_____________________________________________________________________________
Int_t 
AliMpSlat::GetMaxNofPadsY() const
{
  ///
  /// Returns the maximum number of pads to be found in this slat y-direction.
  /// 
  return fMaxNofPadsY;
}

//_____________________________________________________________________________
Int_t 
AliMpSlat::GetMaxPadIndexX() const
{
  ///
  /// Returns the max ix that is valid for this slat.
  ///
  AliMpPCB* last = GetPCB(GetSize()-1);
  if (last)
  {
    return last->Ixmax();
  }
  return 0;
}

//_____________________________________________________________________________
const char*
AliMpSlat::GetName() const
{
  ///
  /// Returns the name of this slat, which is composed of its ID with
  /// the plane type as a suffix.
  ///
  TString name(GetID());
  if ( fPlaneType == AliMp::kBendingPlane )
  {
    name += ".Bending";
  }
  else if ( fPlaneType == AliMp::kNonBendingPlane )
  {
    name += ".NonBending";
  }
  else
  {
    name += ".Invalid";
  }
  return name.Data();  
}

//_____________________________________________________________________________
Int_t
AliMpSlat::GetNofElectronicCards() const
{
  ///
  /// Returns the number of manus that compose the readout of this slat.
  ///
  return fManuMap.GetSize();
}

//_____________________________________________________________________________
Int_t
AliMpSlat::GetNofPadsX() const
{
  ///
  /// Returns the number of pad in x-direction.
  ///
  return fNofPadsX;
}

//_____________________________________________________________________________
AliMpPCB*
AliMpSlat::GetPCB(Int_t i) const
{
  ///
  /// Returns the i-th PCB of this slat.
  ///
  if ( i >= fPCBs.GetEntriesFast() ) return 0;
  return (AliMpPCB*)fPCBs[i];
}

//_____________________________________________________________________________
Int_t
AliMpSlat::GetSize() const
{
  ///
  /// Returns the number of PCB in this slat.
  ///
  return fPCBs.GetEntriesFast();
}

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