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: AliMpSegmentation.cxx,v 1.7 2006/05/24 13:58:34 ivana Exp $
// Category: management

//-----------------------------------------------------------------------------
// Class AliMpSegmentation
// -----------------------
// Singleton container class for mapping segmentations
// Authors: Ivana Hrivnacova, IPN Orsay
//          Laurent Aphecetche, SUBATECH
//-----------------------------------------------------------------------------

#include "AliMpSegmentation.h"

#include "AliMpDataStreams.h"
#include "AliMpDetElement.h"
#include "AliMpDEStore.h"
#include "AliMpDEManager.h"
#include "AliMpDEIterator.h"
#include "AliMpExMap.h"
#include "AliMpFastSegmentation.h"
//#include "AliMpFastSegmentationV2.h"
#include "AliMpSector.h"
#include "AliMpSectorReader.h"
#include "AliMpSectorSegmentation.h"
#include "AliMpSlat.h"
#include "AliMpSlatSegmentation.h"
#include "AliMpSt345Reader.h"
#include "AliMpTrigger.h"
#include "AliMpTriggerReader.h"
#include "AliMpTriggerSegmentation.h"
#include "AliMpCathodType.h"
#include "AliMpSlatMotifMap.h"


#include "AliLog.h"

#include <Riostream.h>
#include <TMap.h>
#include <TObjString.h>
#include <TSystem.h>
#include <TClass.h>

#include <cassert>

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

AliMpSegmentation* AliMpSegmentation::fgInstance = 0;

//
// static methods
//

//______________________________________________________________________________
AliMpSegmentation* AliMpSegmentation::Instance(Bool_t warn)
{
/// Return its instance

  if ( ! fgInstance && warn ) {
    AliWarningClass("Segmentation has not been loaded");
  }  
    
  return fgInstance;
}    

//______________________________________________________________________________
AliMpSegmentation* AliMpSegmentation::ReadData(const AliMpDataStreams& dataStreams,
                                               Bool_t warn)
{
/// Load the sementation from ASCII data files
/// and return its instance

  if ( fgInstance ) {
    if ( warn )
      AliWarningClass("Segmentation has been already loaded");
    return fgInstance;
  }  
  
  if ( dataStreams.GetReadFromFiles() )
    AliInfoClass("Reading segmentation from ASCII files.");

  fgInstance = new AliMpSegmentation(dataStreams);
  return fgInstance;
}    

//
// ctors, dtor
//

//______________________________________________________________________________
AliMpSegmentation::AliMpSegmentation(const AliMpDataStreams& dataStreams)
: TObject(),
  fDetElements(0),
  fMpSegmentations(true),
  fElCardsMap(),
  fSlatMotifMap(new AliMpSlatMotifMap)
{  
/// Standard constructor - segmentation is loaded from ASCII data files

  AliDebug(1,"");
  
  fElCardsMap.SetOwner(kTRUE);
  
  // Load DE data
  if ( ! AliMpDEStore::Instance(false) )  
    AliMpDEStore::ReadData(dataStreams);
  fDetElements = AliMpDEStore::Instance();  

  // Create mapping segmentations for all detection elements
  AliMpDEIterator it;
  for ( it.First(); ! it.IsDone(); it.Next() ) 
  {
    Int_t n(0);
    
    for ( Int_t cath = AliMp::kCath0; cath <= AliMp::kCath1; ++cath ) 
    { 
      if ( CreateMpSegmentation(dataStreams,
                                it.CurrentDEId(), AliMp::GetCathodType(cath)) ) ++n;
    }
     
    if ( n == 2 &&  // should always be the case except when we play with the CreateMpSegmentation method...
        AliMpDEManager::GetStationType(it.CurrentDEId()) != AliMp::kStationTrigger ) // only for tracker
    {
        // Fill el cards map for all detection elements
        // of tracking chambers
        FillElCardsMap(it.CurrentDEId());
    }      
  } 
}

//______________________________________________________________________________
AliMpSegmentation::AliMpSegmentation(TRootIOCtor* ioCtor)
: TObject(),
  fDetElements(0),
  fMpSegmentations(),
  fElCardsMap(ioCtor),
  fSlatMotifMap(0)
{  
/// Constructor for IO

  AliDebug(1,"");

  fgInstance = this;
}

//______________________________________________________________________________
AliMpSegmentation::~AliMpSegmentation()
{
/// Destructor

  AliDebug(1,"");

  delete fDetElements;

  // Segmentations are deleted with fMpSegmentations 
  // El cards arrays are deleted with fElCardsMap
  
  delete fSlatMotifMap;
  
  fgInstance = 0;
}

//
// private methods
//

//______________________________________________________________________________
AliMpVSegmentation* 
AliMpSegmentation::CreateMpSegmentation(const AliMpDataStreams& dataStreams,
                                        Int_t detElemId, AliMp::CathodType cath)
{
/// Create mapping segmentation for given detElemId and cath
/// or return it if it was already built

  // Check detElemId & cath  
  if ( ! AliMpDEManager::IsValidDetElemId(detElemId, true) ) return 0;

  // If segmentation is already built, just return it
  //
  AliMpDetElement* detElement = AliMpDEManager::GetDetElement(detElemId);
  TString deSegName = detElement->GetSegName(cath);
  TObject* object = fMpSegmentations.Get(deSegName);
  if ( object ) return (AliMpVSegmentation*)object;

  AliDebugStream(3)
    << "Creating segmentation for detElemId=" << detElemId 
    << " cath=" << cath << endl;
  
  // Read mapping data and create segmentation
  //
  AliMp::StationType stationType = detElement->GetStationType();
  AliMp::PlaneType planeType = detElement->GetPlaneType(cath);
  TString deTypeName = detElement->GetSegType();

  AliMpVSegmentation* mpSegmentation = 0;

  if ( stationType == AliMp::kStation12 ) {
    AliMq::Station12Type station12Type = detElement->GetStation12Type();
    AliMpSectorReader reader(station12Type, planeType);
    AliMpSector* sector = reader.BuildSector(dataStreams);
    mpSegmentation = new AliMpFastSegmentation(new AliMpSectorSegmentation(sector, true));
  }
  else if ( stationType == AliMp::kStation345 ) { 
    AliMpSt345Reader reader(fSlatMotifMap);
    AliMpSlat* slat = reader.ReadSlat(dataStreams, deTypeName, planeType);
    mpSegmentation = new AliMpFastSegmentation(new AliMpSlatSegmentation(slat, true));
  }
  else if ( stationType == AliMp::kStationTrigger ) {
    AliMpTriggerReader reader(fSlatMotifMap);
    AliMpTrigger* trigger = reader.ReadSlat(dataStreams, deTypeName, planeType);
    mpSegmentation = new AliMpTriggerSegmentation(trigger, true);
  }
  else   
    AliErrorStream() << "Unknown station type" << endl;

  if ( mpSegmentation ) fMpSegmentations.Add(deSegName, mpSegmentation); 
  
//  StdoutToAliDebug(3, fSlatMotifMap.Print(););
  
  return mpSegmentation;
} 

//_____________________________________________________________________________
AliMpExMap*
AliMpSegmentation::FillElCardsMap(Int_t detElemId)
{
/// Fill the map of electronic cards IDs to segmentations for
/// given detElemId

  AliDebugStream(2) << "detElemId=" << detElemId << endl;;
  
  AliMpExMap* mde = new AliMpExMap;
  mde->SetOwner(kFALSE);
  fElCardsMap.Add(detElemId,mde);

  const AliMpVSegmentation* seg[2];
  TArrayI ecn[2];
  
  for ( Int_t cathode = AliMp::kCath0; cathode <= AliMp::kCath1; ++cathode )
  {
    seg[cathode] = GetMpSegmentation(detElemId,AliMp::GetCathodType(cathode));
    seg[cathode]->GetAllElectronicCardIDs(ecn[cathode]);
    for ( Int_t i = 0; i < ecn[cathode].GetSize(); ++i )
    {
      mde->Add(ecn[cathode][i],const_cast<AliMpVSegmentation*>(seg[cathode]));
    }
  }
  
  assert( mde->GetSize() > 0 );
  
  return mde;
  
}

//
// public methods
//

//______________________________________________________________________________
const AliMpVSegmentation* 
AliMpSegmentation::GetMpSegmentation(
                      Int_t detElemId, AliMp::CathodType cath, Bool_t warn) const
{
/// Return mapping segmentation for given detElemId and cath

  // Check detElemId & cath  
  if ( ! AliMpDEManager::IsValidDetElemId(detElemId, false) ) {
    
    if ( warn ) {
      AliWarningStream() 
        << "Invalid detElemId " << detElemId << endl;
    }	
    return 0;
  }  

  // If segmentation is already built, just return it
  //
  AliMpDetElement* detElement = AliMpDEManager::GetDetElement(detElemId);
  TString deSegName = detElement->GetSegName(cath);
  TObject* object = fMpSegmentations.Get(deSegName);
  if ( ! object ) {
    // Should never happen
    AliErrorStream() 
      << "Segmentation for detElemId/cathod " 
	<< detElemId << ", " << cath << " not defined" << endl;
    return 0;
  }  
  
  return static_cast<AliMpVSegmentation*>(object);
} 

//_____________________________________________________________________________
const AliMpVSegmentation* 
AliMpSegmentation::GetMpSegmentationByElectronics(
                      Int_t detElemId, Int_t ecId, Bool_t warn) const
{
/// Return mapping segmentation for given detElemId and electronic card Id
/// (motif position Id)

  AliMpExMap* m = static_cast<AliMpExMap*>(fElCardsMap.GetValue(detElemId));
  
  if (!m) {
    // Should never happen
    AliErrorStream() 
      << "Cannot find the el cards map for detElemId " << detElemId << endl;
    return 0;
  }  

  TObject* object = m->GetValue(ecId);
  if ( ! object ) {
    if ( warn ) {
      AliErrorStream() 
        << "Segmentation for electronic card " 
	<< ecId << " not found" << endl;
    }	
    return 0;
  }  
   
  return static_cast<AliMpVSegmentation*>(object);
}

//_____________________________________________________________________________
const AliMpSector*  
AliMpSegmentation::GetSector(const AliMpVSegmentation* kSegmentation, 
                             Bool_t warn) const
{
/// Return sector for given mapping segmentation.
/// If segmentation is not of sector type, zero is returned 
/// and an Error is issued if warn is set true (default). 

  if ( ! kSegmentation ) return 0;

  if ( kSegmentation->StationType() != AliMp::kStation12 ) {
    if ( warn ) {
      AliErrorStream() 
        << "Segmentation is not of sector type" << endl;
     }   
     return 0;
  }
    
  // If fast segmentation
  const AliMpFastSegmentation* fseg 
    = dynamic_cast<const AliMpFastSegmentation*>(kSegmentation);
  if ( fseg ) {   
    return 
      static_cast<const AliMpSectorSegmentation*>(fseg->GetHelper())->GetSector();
  }
  
  // If fast segmentation V2
/*  
  const AliMpFastSegmentationV2* fsegV2 
    = dynamic_cast<const AliMpFastSegmentationV2*>(kSegmentation);
  if ( fsegV2 ) {   
    return 
      static_cast<const AliMpSectorSegmentation*>(fsegV2->GetHelper())->GetSector();
  }
*/  
  // If sector segmentation
  const AliMpSectorSegmentation* sseg 
    = dynamic_cast<const AliMpSectorSegmentation*>(kSegmentation);
  if ( sseg ) {   
    return sseg->GetSector();
  }
  
  // Should not get to this line
  AliErrorStream() << "Segemntation type not identified." << endl;
  return 0;         
}
                             
//_____________________________________________________________________________
const AliMpSector*  
AliMpSegmentation::GetSector(Int_t detElemId, AliMp::CathodType cath, 
                             Bool_t warn) const
{
/// Return sector for given detElemId and cath.
/// If segmentation is not of sector type, zero is returned 
/// and an Error is issued if warn is set true (default). 

  return GetSector(GetMpSegmentation(detElemId, cath, warn), warn);
}    
      
//_____________________________________________________________________________
const AliMpSector*  
AliMpSegmentation::GetSectorByElectronics(Int_t detElemId, Int_t elCardID, 
                             Bool_t warn) const
{
/// Return sector for given detElemId and elCardID.
/// If segmentation is not of sector type, zero is returned 
/// and an Error is issued if warn is set true (default). 

  return GetSector(GetMpSegmentationByElectronics(detElemId, elCardID, warn), warn);
}    
      
//_____________________________________________________________________________
const AliMpSlat*    
AliMpSegmentation::GetSlat(const AliMpVSegmentation* kSegmentation, 
                           Bool_t warn) const
{                           
/// Return slat for given mapping segmentation.
/// If segmentation is not of slat type, zero is returned 
/// and an Error is issued if warn is set true (default). 

  if ( ! kSegmentation ) return 0;
 
  if ( kSegmentation->StationType() != AliMp::kStation345 ) {
     if ( warn ) {
       AliErrorStream() 
         << "Segmentation is not of slat type" << endl;
     }    
     return 0;
  }
  
  // If fast segmentation
  const AliMpFastSegmentation* fseg 
    = dynamic_cast<const AliMpFastSegmentation*>(kSegmentation);
  if ( fseg ) {   
    return 
      static_cast<const AliMpSlatSegmentation*>(fseg->GetHelper())->Slat();
  }
  
  // If fast segmentation V2
/*
  const AliMpFastSegmentationV2* fsegV2 
    = dynamic_cast<const AliMpFastSegmentationV2*>(kSegmentation);
  if ( fsegV2 ) {   
    return 
      static_cast<const AliMpSlatSegmentation*>(fsegV2->GetHelper())->Slat();
  }
*/  
  // If slat segmentation
  const AliMpSlatSegmentation* sseg 
    = dynamic_cast<const AliMpSlatSegmentation*>(kSegmentation);
    
  if ( sseg ) {   
    return sseg->Slat();
  }
  
  // Should not get to this line
  AliErrorStream() << "Segemntation type not identified." << endl;
  return 0;         
}    
                           
//_____________________________________________________________________________
const AliMpSlat*  
AliMpSegmentation::GetSlat(Int_t detElemId, AliMp::CathodType cath, 
                           Bool_t warn) const
{
/// Return slat for given detElemId and cath.
/// If segmentation is not of slat type, zero is returned 
/// and an Error is issued if warn is set true (default). 

  return GetSlat(GetMpSegmentation(detElemId, cath, warn), warn);
}    

//_____________________________________________________________________________
const AliMpSlat*  
AliMpSegmentation::GetSlatByElectronics(Int_t detElemId, Int_t elCardID, 
                           Bool_t warn) const
{
/// Return slat for given detElemId and elCardID.
/// If segmentation is not of slat type, zero is returned 
/// and an Error is issued if warn is set true (default). 

  return GetSlat(GetMpSegmentationByElectronics(detElemId, elCardID, warn), warn);
}    

//_____________________________________________________________________________
const AliMpTrigger* 
AliMpSegmentation::GetTrigger(const AliMpVSegmentation* kSegmentation, 
                              Bool_t warn) const
{                               
/// Return trigger for given mapping segmentation.
/// If segmentation is not of trigger type, zero is returned 
/// and an Error is issued if warn is set true (default). 

  if ( ! kSegmentation ) return 0;
 
  if ( kSegmentation->StationType() != AliMp::kStationTrigger ) {
     if ( warn ) {
       AliErrorStream() 
         << "Segmentation is not of trigger type" << endl;
     }    
     return 0;
  }
  
  // If slat segmentation
  const AliMpTriggerSegmentation* tseg 
    = dynamic_cast<const AliMpTriggerSegmentation*>(kSegmentation);
  if ( tseg ) {   
    return tseg->Slat();
  }
  
  // If fast segmentation
  const AliMpFastSegmentation* fseg 
    = dynamic_cast<const AliMpFastSegmentation*>(kSegmentation);
    
  if ( fseg ) {   
    return 
      static_cast<const AliMpTriggerSegmentation*>(fseg->GetHelper())->Slat();
  }
  
  // If fast segmentation V2
/*  
  const AliMpFastSegmentationV2* fsegV2 
    = dynamic_cast<const AliMpFastSegmentationV2*>(kSegmentation);
    
  if ( fsegV2 ) {   
    return 
      static_cast<const AliMpTriggerSegmentation*>(fsegV2->GetHelper())->Slat();
  }
*/  
  
  // Should not get to this line
  AliErrorStream() << "Segemntation type not identified." << endl;
  return 0;         
}    

//_____________________________________________________________________________
const AliMpTrigger*  
AliMpSegmentation::GetTrigger(Int_t detElemId, AliMp::CathodType cath, 
                              Bool_t warn) const
{
/// Return trigger for given detElemId and cath.
/// If segmentation is not of trigger type, zero is returned 
/// and an Error is issued if warn is set true (default). 

  return GetTrigger(GetMpSegmentation(detElemId, cath, warn), warn);
}    

//_____________________________________________________________________________
const AliMpTrigger*  
AliMpSegmentation::GetTriggerByElectronics(Int_t detElemId, Int_t elCardID, 
                              Bool_t warn) const
{
/// Return trigger for given detElemId and elCardID.
/// If segmentation is not of trigger type, zero is returned 
/// and an Error is issued if warn is set true (default). 

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