ROOT logo
#ifndef ALIMUONPADSTATUSMAPMAKER_H
#define ALIMUONPADSTATUSMAPMAKER_H

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

// $Id$

/// \ingroup rec
/// \class AliMUONPadStatusMapMaker
/// \brief Convert a pad status container into a pad status *map* container
/// 
//  Author Laurent Aphecetche

#ifndef ROOT_TObject
#  include "TObject.h"
#endif

class AliMUONPadStatusMaker;
class AliMUONVCalibParam;
class AliMUONVStore;

class AliMUONPadStatusMapMaker : public TObject
{
public:
  AliMUONPadStatusMapMaker(const AliMUONPadStatusMaker& padStatusMaker,
                           Int_t mask,
                           Bool_t deferredInitialization=kTRUE);
  virtual ~AliMUONPadStatusMapMaker();
  
  /** Get access to internal status map store (for debug only, as it may not be complete,
    depending on whether you've already called StatusMap() for all possible de,manu,channel
    combinations or not...
    */
  AliMUONVStore* StatusMap() const { return fStatusMap; }
  
  Int_t StatusMap(Int_t detElemId, Int_t manuId, Int_t manuChannel) const;
  
  /// Return status bit map to tell a pad is bad
  static Int_t SelfDeadMask() { return fgkSelfDead; }
  
  void RefreshRejectProbabilities(); 
  
private:
  /// Not implemented
  AliMUONPadStatusMapMaker(const AliMUONPadStatusMapMaker&);
  /// Not implemented
  AliMUONPadStatusMapMaker& operator=(const AliMUONPadStatusMapMaker&);

private:
    
  AliMUONVCalibParam* ComputeStatusMap(Int_t detElemId, Int_t manuId) const;
  
private:
  
  static Int_t fgkSelfDead; //!< status bit map to tell a pad is bad

  /// Bit numbers
  enum EBitNumbers
  {
    kLeftBottomBit = 6,
    kLeftBit = 7,
    kLeftTopBit = 8,
    kBottomBit = 11,
    kCenterBit = 12,
    kTopBit = 13,
    kRightBottomBit = 16,
    kRightBit = 17,
    kRightTopBit = 18
  };
  
  const AliMUONPadStatusMaker& fkStatusMaker; //!< to access pad statuses
  Int_t fMask; //!< mask to be tested
  mutable AliMUONVStore* fStatusMap; //!< status map
  AliMUONVStore* fRejectProbabilities; //!< reject probabilities (channel based, computed once per run)
  AliMUONVStore* fRejectList; //!< reject list (which channels should be rejected, might change event-by-event for simulations)
  Bool_t fComputeOnDemand; //!< whether we authorize to compute things on demand or not
  
  ClassDef(AliMUONPadStatusMapMaker,0) // Pad status map maker
};

#endif
 AliMUONPadStatusMapMaker.h:1
 AliMUONPadStatusMapMaker.h:2
 AliMUONPadStatusMapMaker.h:3
 AliMUONPadStatusMapMaker.h:4
 AliMUONPadStatusMapMaker.h:5
 AliMUONPadStatusMapMaker.h:6
 AliMUONPadStatusMapMaker.h:7
 AliMUONPadStatusMapMaker.h:8
 AliMUONPadStatusMapMaker.h:9
 AliMUONPadStatusMapMaker.h:10
 AliMUONPadStatusMapMaker.h:11
 AliMUONPadStatusMapMaker.h:12
 AliMUONPadStatusMapMaker.h:13
 AliMUONPadStatusMapMaker.h:14
 AliMUONPadStatusMapMaker.h:15
 AliMUONPadStatusMapMaker.h:16
 AliMUONPadStatusMapMaker.h:17
 AliMUONPadStatusMapMaker.h:18
 AliMUONPadStatusMapMaker.h:19
 AliMUONPadStatusMapMaker.h:20
 AliMUONPadStatusMapMaker.h:21
 AliMUONPadStatusMapMaker.h:22
 AliMUONPadStatusMapMaker.h:23
 AliMUONPadStatusMapMaker.h:24
 AliMUONPadStatusMapMaker.h:25
 AliMUONPadStatusMapMaker.h:26
 AliMUONPadStatusMapMaker.h:27
 AliMUONPadStatusMapMaker.h:28
 AliMUONPadStatusMapMaker.h:29
 AliMUONPadStatusMapMaker.h:30
 AliMUONPadStatusMapMaker.h:31
 AliMUONPadStatusMapMaker.h:32
 AliMUONPadStatusMapMaker.h:33
 AliMUONPadStatusMapMaker.h:34
 AliMUONPadStatusMapMaker.h:35
 AliMUONPadStatusMapMaker.h:36
 AliMUONPadStatusMapMaker.h:37
 AliMUONPadStatusMapMaker.h:38
 AliMUONPadStatusMapMaker.h:39
 AliMUONPadStatusMapMaker.h:40
 AliMUONPadStatusMapMaker.h:41
 AliMUONPadStatusMapMaker.h:42
 AliMUONPadStatusMapMaker.h:43
 AliMUONPadStatusMapMaker.h:44
 AliMUONPadStatusMapMaker.h:45
 AliMUONPadStatusMapMaker.h:46
 AliMUONPadStatusMapMaker.h:47
 AliMUONPadStatusMapMaker.h:48
 AliMUONPadStatusMapMaker.h:49
 AliMUONPadStatusMapMaker.h:50
 AliMUONPadStatusMapMaker.h:51
 AliMUONPadStatusMapMaker.h:52
 AliMUONPadStatusMapMaker.h:53
 AliMUONPadStatusMapMaker.h:54
 AliMUONPadStatusMapMaker.h:55
 AliMUONPadStatusMapMaker.h:56
 AliMUONPadStatusMapMaker.h:57
 AliMUONPadStatusMapMaker.h:58
 AliMUONPadStatusMapMaker.h:59
 AliMUONPadStatusMapMaker.h:60
 AliMUONPadStatusMapMaker.h:61
 AliMUONPadStatusMapMaker.h:62
 AliMUONPadStatusMapMaker.h:63
 AliMUONPadStatusMapMaker.h:64
 AliMUONPadStatusMapMaker.h:65
 AliMUONPadStatusMapMaker.h:66
 AliMUONPadStatusMapMaker.h:67
 AliMUONPadStatusMapMaker.h:68
 AliMUONPadStatusMapMaker.h:69
 AliMUONPadStatusMapMaker.h:70
 AliMUONPadStatusMapMaker.h:71
 AliMUONPadStatusMapMaker.h:72
 AliMUONPadStatusMapMaker.h:73
 AliMUONPadStatusMapMaker.h:74
 AliMUONPadStatusMapMaker.h:75
 AliMUONPadStatusMapMaker.h:76
 AliMUONPadStatusMapMaker.h:77
 AliMUONPadStatusMapMaker.h:78
 AliMUONPadStatusMapMaker.h:79
 AliMUONPadStatusMapMaker.h:80
 AliMUONPadStatusMapMaker.h:81
 AliMUONPadStatusMapMaker.h:82