ROOT logo
#ifndef ALI_MP_SEGMENTATION_H
#define ALI_MP_SEGMENTATION_H

/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

// $Id$ 
// $MpId: AliMpSegmentation.h,v 1.7 2006/05/24 13:58:16 ivana Exp $ 

/// \ingroup management
/// \class AliMpSegmentation
/// \brief Singleton container class for mapping segmentations
///
/// It provides access to mapping segmentations based on the
/// AliMpVSegmentation interface and to segmentations underlying
/// detectors (sector, slat, trigger).                                  \n
/// Mapping segmentations for all detection elements
/// are created at the first call to AliMpSegmentation::Instance().
/// The class is a singleton, it has all constructors
/// private, except for the special constructor for Root I/O.
///
/// \author Ivana Hrivnacova, IPN Orsay; Laurent Aphecetche, SUBATECH

#ifndef ROOT_TObject
#  include <TObject.h>
#endif

#ifndef ALI_MP_STRING_OBJ_MAP_H
#  include "AliMpStringObjMap.h"
#endif

#ifndef ALI_MP_EX_MAP_H
#  include "AliMpExMap.h"
#endif

#ifndef ALI_MP_CATHOD_TYPE_H
#  include "AliMpCathodType.h"
#endif

class AliMpDEStore;
class AliMpSegmentation;
class AliMpVSegmentation;
class AliMpSlatMotifMap;
class AliMpDataStreams;
class AliMpSector;
class AliMpSlat;
class AliMpTrigger;
class TRootIOCtor;

using std::ofstream;

class AliMpSegmentation : public  TObject {

  public:
    AliMpSegmentation(TRootIOCtor* ioCtor);
    virtual ~AliMpSegmentation();
    
    // static methods
    static AliMpSegmentation* Instance(Bool_t warn = true);
    static AliMpSegmentation* ReadData(const AliMpDataStreams& dataStreams, 
                                       Bool_t warn = true);

    // methods
    
    //
    // Access to segmentations
    //
    
    const AliMpVSegmentation* GetMpSegmentation(
                                 Int_t detElemId, AliMp::CathodType cath, 
			         Bool_t warn = true) const;

    const AliMpVSegmentation* GetMpSegmentationByElectronics(
                                 Int_t detElemId, Int_t elCardID, 
			         Bool_t warn = true) const;
    //
    // Access to sectors, slats, triggers
    //

    const AliMpSector*  GetSector(const AliMpVSegmentation* kSegmentation, 
                                  Bool_t warn = true) const;
    const AliMpSector*  GetSector(Int_t detElemId, AliMp::CathodType cath, 
                                  Bool_t warn = true) const;
    const AliMpSector*  GetSectorByElectronics(Int_t detElemId, Int_t elCardID, 
                                  Bool_t warn = true) const;
  
    const AliMpSlat*    GetSlat(const AliMpVSegmentation* kSegmentation, 
                                  Bool_t warn = true) const;
    const AliMpSlat*    GetSlat(Int_t detElemId, AliMp::CathodType cath, 
                                  Bool_t warn = true) const;
    const AliMpSlat*    GetSlatByElectronics(Int_t detElemId, Int_t elCardID, 
                                  Bool_t warn = true) const;
  
    const AliMpTrigger* GetTrigger(const AliMpVSegmentation* kSegmentation, 
                                  Bool_t warn = true) const;
    const AliMpTrigger* GetTrigger(Int_t detElemId, AliMp::CathodType cath, 
                                  Bool_t warn = true) const;
    const AliMpTrigger* GetTriggerByElectronics(Int_t detElemId, Int_t elCardID, 
                                  Bool_t warn = true) const;
  
  private:
    AliMpSegmentation(const AliMpDataStreams& dataStreams);
    /// Not implemented
    AliMpSegmentation(const AliMpSegmentation& rhs);
    /// Not implemented
    AliMpSegmentation& operator=(const AliMpSegmentation& rhs);

    AliMpVSegmentation* CreateMpSegmentation(
                              const AliMpDataStreams& dataStreams,
                              Int_t detElemId, AliMp::CathodType cath);
                              

    AliMpExMap* FillElCardsMap(Int_t detElemId);

    // static data members
    static AliMpSegmentation* fgInstance; ///< Singleton instance

    // data members
    AliMpDEStore*      fDetElements;    ///< Detection element store
    AliMpStringObjMap  fMpSegmentations;///< Map of mapping segmentations to DE seg names
    AliMpExMap         fElCardsMap;     ///< Map of el. cards IDs to segmentations
    AliMpSlatMotifMap* fSlatMotifMap;   ///< Map of motif, motifTypes to avoid duplications and allow proper deletion
    
  ClassDef(AliMpSegmentation,3)  // The factory for building mapping segmentations
};

#endif //ALI_MP_SEGMENTATION_H















 AliMpSegmentation.h:1
 AliMpSegmentation.h:2
 AliMpSegmentation.h:3
 AliMpSegmentation.h:4
 AliMpSegmentation.h:5
 AliMpSegmentation.h:6
 AliMpSegmentation.h:7
 AliMpSegmentation.h:8
 AliMpSegmentation.h:9
 AliMpSegmentation.h:10
 AliMpSegmentation.h:11
 AliMpSegmentation.h:12
 AliMpSegmentation.h:13
 AliMpSegmentation.h:14
 AliMpSegmentation.h:15
 AliMpSegmentation.h:16
 AliMpSegmentation.h:17
 AliMpSegmentation.h:18
 AliMpSegmentation.h:19
 AliMpSegmentation.h:20
 AliMpSegmentation.h:21
 AliMpSegmentation.h:22
 AliMpSegmentation.h:23
 AliMpSegmentation.h:24
 AliMpSegmentation.h:25
 AliMpSegmentation.h:26
 AliMpSegmentation.h:27
 AliMpSegmentation.h:28
 AliMpSegmentation.h:29
 AliMpSegmentation.h:30
 AliMpSegmentation.h:31
 AliMpSegmentation.h:32
 AliMpSegmentation.h:33
 AliMpSegmentation.h:34
 AliMpSegmentation.h:35
 AliMpSegmentation.h:36
 AliMpSegmentation.h:37
 AliMpSegmentation.h:38
 AliMpSegmentation.h:39
 AliMpSegmentation.h:40
 AliMpSegmentation.h:41
 AliMpSegmentation.h:42
 AliMpSegmentation.h:43
 AliMpSegmentation.h:44
 AliMpSegmentation.h:45
 AliMpSegmentation.h:46
 AliMpSegmentation.h:47
 AliMpSegmentation.h:48
 AliMpSegmentation.h:49
 AliMpSegmentation.h:50
 AliMpSegmentation.h:51
 AliMpSegmentation.h:52
 AliMpSegmentation.h:53
 AliMpSegmentation.h:54
 AliMpSegmentation.h:55
 AliMpSegmentation.h:56
 AliMpSegmentation.h:57
 AliMpSegmentation.h:58
 AliMpSegmentation.h:59
 AliMpSegmentation.h:60
 AliMpSegmentation.h:61
 AliMpSegmentation.h:62
 AliMpSegmentation.h:63
 AliMpSegmentation.h:64
 AliMpSegmentation.h:65
 AliMpSegmentation.h:66
 AliMpSegmentation.h:67
 AliMpSegmentation.h:68
 AliMpSegmentation.h:69
 AliMpSegmentation.h:70
 AliMpSegmentation.h:71
 AliMpSegmentation.h:72
 AliMpSegmentation.h:73
 AliMpSegmentation.h:74
 AliMpSegmentation.h:75
 AliMpSegmentation.h:76
 AliMpSegmentation.h:77
 AliMpSegmentation.h:78
 AliMpSegmentation.h:79
 AliMpSegmentation.h:80
 AliMpSegmentation.h:81
 AliMpSegmentation.h:82
 AliMpSegmentation.h:83
 AliMpSegmentation.h:84
 AliMpSegmentation.h:85
 AliMpSegmentation.h:86
 AliMpSegmentation.h:87
 AliMpSegmentation.h:88
 AliMpSegmentation.h:89
 AliMpSegmentation.h:90
 AliMpSegmentation.h:91
 AliMpSegmentation.h:92
 AliMpSegmentation.h:93
 AliMpSegmentation.h:94
 AliMpSegmentation.h:95
 AliMpSegmentation.h:96
 AliMpSegmentation.h:97
 AliMpSegmentation.h:98
 AliMpSegmentation.h:99
 AliMpSegmentation.h:100
 AliMpSegmentation.h:101
 AliMpSegmentation.h:102
 AliMpSegmentation.h:103
 AliMpSegmentation.h:104
 AliMpSegmentation.h:105
 AliMpSegmentation.h:106
 AliMpSegmentation.h:107
 AliMpSegmentation.h:108
 AliMpSegmentation.h:109
 AliMpSegmentation.h:110
 AliMpSegmentation.h:111
 AliMpSegmentation.h:112
 AliMpSegmentation.h:113
 AliMpSegmentation.h:114
 AliMpSegmentation.h:115
 AliMpSegmentation.h:116
 AliMpSegmentation.h:117
 AliMpSegmentation.h:118
 AliMpSegmentation.h:119
 AliMpSegmentation.h:120
 AliMpSegmentation.h:121
 AliMpSegmentation.h:122
 AliMpSegmentation.h:123
 AliMpSegmentation.h:124
 AliMpSegmentation.h:125
 AliMpSegmentation.h:126
 AliMpSegmentation.h:127
 AliMpSegmentation.h:128
 AliMpSegmentation.h:129
 AliMpSegmentation.h:130
 AliMpSegmentation.h:131
 AliMpSegmentation.h:132
 AliMpSegmentation.h:133
 AliMpSegmentation.h:134
 AliMpSegmentation.h:135
 AliMpSegmentation.h:136
 AliMpSegmentation.h:137
 AliMpSegmentation.h:138
 AliMpSegmentation.h:139
 AliMpSegmentation.h:140
 AliMpSegmentation.h:141
 AliMpSegmentation.h:142