ROOT logo
#ifndef ALIMUONVTRACKERDATA_H
#define ALIMUONVTRACKERDATA_H

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

// $Id$

/// \ingroup calib
/// \class AliMUONVTrackerData
/// \brief Base class for MUON data that can be presented at different levels
/// in the hierarchy of the MUON system.
/// 
// Author Laurent Aphecetche, Subatech

#ifndef ROOT_TNamed
#  include "TNamed.h"
#endif
#ifndef ROOT_TString
#  include "TString.h"
#endif
#ifndef ROOT_TQObject
#   include <TQObject.h>
#endif

class AliMUONSparseHisto;
class AliMUONVStore;
class TCollection;
class TArrayI;

class AliMUONVTrackerData : public TNamed, public TQObject
{
public:
  
  AliMUONVTrackerData(const char* name="",const char* title="", 
                      Bool_t issingleevent=kFALSE);
  virtual ~AliMUONVTrackerData();
  
  /// Add values for one event from one full store
  virtual Bool_t Add(const AliMUONVStore& store, TArrayI* arrayOfNofEventsPerDDL=0x0) = 0;

  /// Replace values
  virtual Bool_t Replace(const AliMUONVStore& store) = 0;
  
  /// Get the value for a given buspatch and given dimension
  virtual Double_t BusPatch(Int_t busPatchId, Int_t dim=0) const = 0;
  
  /// Get the value for a given chamber and given dimension
  virtual Double_t Chamber(Int_t chamberId, Int_t dim=0) const = 0;
  
  /// Get the value for a given channel and given dimension
  virtual Double_t Channel(Int_t detElemId, Int_t manuId, Int_t manuChannel,
                           Int_t dim=0) const = 0;
  
  /// Reset the data
  virtual void Clear(Option_t* opt="") = 0;
  
  /// Get the number of times a given channel was hit
  virtual Double_t Count(Int_t detElemId, Int_t manuId, Int_t manuChannel) const = 0;

  /// Get the value for a given DE and given dimension
  virtual Double_t DetectionElement(Int_t detElemId, Int_t dim=0) const = 0;
  
  /// Get the name of a given (internal) dimension
  virtual TString DimensionName(Int_t dim) const = 0;

  /// Get the name of a given (external) dimension
  virtual TString ExternalDimensionName(Int_t dim) const = 0;

  /// Whether we have data for a given buspath
  virtual Bool_t HasBusPatch(Int_t busPatchId) const = 0;

  /// Whether we have a given channel or not
  virtual Bool_t HasChannel(Int_t detElemId, Int_t manuId, Int_t manuChannel) const;
  
  /// Whether we have data for a given chamber
  virtual Bool_t HasChamber(Int_t chamberId) const = 0;
  
  /// Whether we have data for a given detection element
  virtual Bool_t HasDetectionElement(Int_t detElemId) const = 0;
  
  /// Whether we have data for a given manu
  virtual Bool_t HasManu(Int_t detElemId, Int_t manuId) const = 0;

  /// Whether we have data for a given PCB
  virtual Bool_t HasPCB(Int_t detElemId, Int_t pcbIndex) const = 0;
  
  /// Whether we deal with only one event at a time
  virtual Bool_t IsSingleEvent() const = 0;
  
  /// Get the value for a given manu and given dimension
  virtual Double_t Manu(Int_t detElemId, Int_t manuId, Int_t dim=0) const = 0;
  
  /// The number of dimensions we are handling
  virtual Int_t NumberOfDimensions() const = 0;

  /// Convert from internal to external dimension
  virtual Int_t InternalToExternal(Int_t dim) const = 0;
  
  /// The number of dimensions we are inputting
  virtual Int_t ExternalDimension() const = 0;

  /** The number of events we've seen so far in a given DDL (or any DDL if param<0)
   ddlNumber is 0..19
   */
  virtual Int_t NumberOfEvents(Int_t ddlNumber) const = 0;

  /// Signal to indicate that the number of events changed
  virtual void NumberOfEventsChanged(); // *SIGNAL*
  
  /// Get our name
  const char* Name() const { return GetName(); }
  
  /// Get the value for a given PCDB and given dimension
  virtual Double_t PCB(Int_t detElemId, Int_t pcbIndex, Int_t dim=0) const = 0;
  
  /// Print all objects whose name matches wildcard
  virtual void Print(Option_t* wildcard="") const;
  
  /// Print, with option, all objects whose name matches wildcard
  virtual void Print(Option_t* wildcard, Option_t* opt) const = 0;

  /// Set the name of a given dimension
  virtual void SetDimensionName(Int_t index, const char* value) = 0;

  /// Whether or not we can make histograms.
  virtual Bool_t CanHistogram() const { return kFALSE; }
  
  /// Select a dimension to be histogrammed (if CanHistogram==kTRUE) only
  virtual void MakeHistogramForDimension(Int_t /* index */, Bool_t /* value */,
    Double_t /*xmin*/=0.0, Double_t /*xmax*/=4096.0) { }

  /// Get histogram range
  virtual void HistogramRange(Double_t& xmin, Double_t& xmax) const { xmin=xmax=0.0; }

  /// Whether we have histograms for a given dimension, or not
  virtual Bool_t IsHistogrammed(Int_t /*dim*/) const { return kFALSE; }

  /// Get sparse histogram for a given channel
  virtual AliMUONSparseHisto* GetChannelSparseHisto(Int_t detElemId, Int_t manuId, 
                                                    Int_t manuChannel, Int_t dim=0) const = 0;

  /// Get sparse histogram for a given manu (valid only if IsChannelLevelEnabled()==kFALSE and IsManuLevelEnabled()==kTRUE)
  virtual AliMUONSparseHisto* GetManuSparseHisto(Int_t detElemId, Int_t manuId, 
                                                 Int_t dim=0) const = 0;
  
  /// To allow merging of different objects
  virtual Long64_t Merge(TCollection* list) = 0;

	/// Disable recording of information at the channel level
	virtual void DisableChannelLevel() = 0;
	
	/// Whether we store values at the channel level
	virtual Bool_t IsChannelLevelEnabled() const = 0;

  /// Disable recording of information at the manu level (and below)
	virtual void DisableManuLevel() = 0;
	
	/// Whether we store values at the channel level
	virtual Bool_t IsManuLevelEnabled() const = 0;
  
  /// Whether we store values at the bus patch level or not
  virtual Bool_t IsBusPatchLevelEnabled() const = 0;
  
  /// Whether we store values at the PCB level or not
  virtual Bool_t IsPCBLevelEnabled() const = 0;
  
private:
  /// not implemented
  AliMUONVTrackerData(const AliMUONVTrackerData& rhs);
  /// not implemented
  AliMUONVTrackerData& operator=(const AliMUONVTrackerData& rhs);
  
  ClassDef(AliMUONVTrackerData,2) // Base class of MUON data that can be represented graphically
};

#endif
 AliMUONVTrackerData.h:1
 AliMUONVTrackerData.h:2
 AliMUONVTrackerData.h:3
 AliMUONVTrackerData.h:4
 AliMUONVTrackerData.h:5
 AliMUONVTrackerData.h:6
 AliMUONVTrackerData.h:7
 AliMUONVTrackerData.h:8
 AliMUONVTrackerData.h:9
 AliMUONVTrackerData.h:10
 AliMUONVTrackerData.h:11
 AliMUONVTrackerData.h:12
 AliMUONVTrackerData.h:13
 AliMUONVTrackerData.h:14
 AliMUONVTrackerData.h:15
 AliMUONVTrackerData.h:16
 AliMUONVTrackerData.h:17
 AliMUONVTrackerData.h:18
 AliMUONVTrackerData.h:19
 AliMUONVTrackerData.h:20
 AliMUONVTrackerData.h:21
 AliMUONVTrackerData.h:22
 AliMUONVTrackerData.h:23
 AliMUONVTrackerData.h:24
 AliMUONVTrackerData.h:25
 AliMUONVTrackerData.h:26
 AliMUONVTrackerData.h:27
 AliMUONVTrackerData.h:28
 AliMUONVTrackerData.h:29
 AliMUONVTrackerData.h:30
 AliMUONVTrackerData.h:31
 AliMUONVTrackerData.h:32
 AliMUONVTrackerData.h:33
 AliMUONVTrackerData.h:34
 AliMUONVTrackerData.h:35
 AliMUONVTrackerData.h:36
 AliMUONVTrackerData.h:37
 AliMUONVTrackerData.h:38
 AliMUONVTrackerData.h:39
 AliMUONVTrackerData.h:40
 AliMUONVTrackerData.h:41
 AliMUONVTrackerData.h:42
 AliMUONVTrackerData.h:43
 AliMUONVTrackerData.h:44
 AliMUONVTrackerData.h:45
 AliMUONVTrackerData.h:46
 AliMUONVTrackerData.h:47
 AliMUONVTrackerData.h:48
 AliMUONVTrackerData.h:49
 AliMUONVTrackerData.h:50
 AliMUONVTrackerData.h:51
 AliMUONVTrackerData.h:52
 AliMUONVTrackerData.h:53
 AliMUONVTrackerData.h:54
 AliMUONVTrackerData.h:55
 AliMUONVTrackerData.h:56
 AliMUONVTrackerData.h:57
 AliMUONVTrackerData.h:58
 AliMUONVTrackerData.h:59
 AliMUONVTrackerData.h:60
 AliMUONVTrackerData.h:61
 AliMUONVTrackerData.h:62
 AliMUONVTrackerData.h:63
 AliMUONVTrackerData.h:64
 AliMUONVTrackerData.h:65
 AliMUONVTrackerData.h:66
 AliMUONVTrackerData.h:67
 AliMUONVTrackerData.h:68
 AliMUONVTrackerData.h:69
 AliMUONVTrackerData.h:70
 AliMUONVTrackerData.h:71
 AliMUONVTrackerData.h:72
 AliMUONVTrackerData.h:73
 AliMUONVTrackerData.h:74
 AliMUONVTrackerData.h:75
 AliMUONVTrackerData.h:76
 AliMUONVTrackerData.h:77
 AliMUONVTrackerData.h:78
 AliMUONVTrackerData.h:79
 AliMUONVTrackerData.h:80
 AliMUONVTrackerData.h:81
 AliMUONVTrackerData.h:82
 AliMUONVTrackerData.h:83
 AliMUONVTrackerData.h:84
 AliMUONVTrackerData.h:85
 AliMUONVTrackerData.h:86
 AliMUONVTrackerData.h:87
 AliMUONVTrackerData.h:88
 AliMUONVTrackerData.h:89
 AliMUONVTrackerData.h:90
 AliMUONVTrackerData.h:91
 AliMUONVTrackerData.h:92
 AliMUONVTrackerData.h:93
 AliMUONVTrackerData.h:94
 AliMUONVTrackerData.h:95
 AliMUONVTrackerData.h:96
 AliMUONVTrackerData.h:97
 AliMUONVTrackerData.h:98
 AliMUONVTrackerData.h:99
 AliMUONVTrackerData.h:100
 AliMUONVTrackerData.h:101
 AliMUONVTrackerData.h:102
 AliMUONVTrackerData.h:103
 AliMUONVTrackerData.h:104
 AliMUONVTrackerData.h:105
 AliMUONVTrackerData.h:106
 AliMUONVTrackerData.h:107
 AliMUONVTrackerData.h:108
 AliMUONVTrackerData.h:109
 AliMUONVTrackerData.h:110
 AliMUONVTrackerData.h:111
 AliMUONVTrackerData.h:112
 AliMUONVTrackerData.h:113
 AliMUONVTrackerData.h:114
 AliMUONVTrackerData.h:115
 AliMUONVTrackerData.h:116
 AliMUONVTrackerData.h:117
 AliMUONVTrackerData.h:118
 AliMUONVTrackerData.h:119
 AliMUONVTrackerData.h:120
 AliMUONVTrackerData.h:121
 AliMUONVTrackerData.h:122
 AliMUONVTrackerData.h:123
 AliMUONVTrackerData.h:124
 AliMUONVTrackerData.h:125
 AliMUONVTrackerData.h:126
 AliMUONVTrackerData.h:127
 AliMUONVTrackerData.h:128
 AliMUONVTrackerData.h:129
 AliMUONVTrackerData.h:130
 AliMUONVTrackerData.h:131
 AliMUONVTrackerData.h:132
 AliMUONVTrackerData.h:133
 AliMUONVTrackerData.h:134
 AliMUONVTrackerData.h:135
 AliMUONVTrackerData.h:136
 AliMUONVTrackerData.h:137
 AliMUONVTrackerData.h:138
 AliMUONVTrackerData.h:139
 AliMUONVTrackerData.h:140
 AliMUONVTrackerData.h:141
 AliMUONVTrackerData.h:142
 AliMUONVTrackerData.h:143
 AliMUONVTrackerData.h:144
 AliMUONVTrackerData.h:145
 AliMUONVTrackerData.h:146
 AliMUONVTrackerData.h:147
 AliMUONVTrackerData.h:148
 AliMUONVTrackerData.h:149
 AliMUONVTrackerData.h:150
 AliMUONVTrackerData.h:151
 AliMUONVTrackerData.h:152
 AliMUONVTrackerData.h:153
 AliMUONVTrackerData.h:154
 AliMUONVTrackerData.h:155
 AliMUONVTrackerData.h:156
 AliMUONVTrackerData.h:157
 AliMUONVTrackerData.h:158
 AliMUONVTrackerData.h:159
 AliMUONVTrackerData.h:160
 AliMUONVTrackerData.h:161
 AliMUONVTrackerData.h:162
 AliMUONVTrackerData.h:163
 AliMUONVTrackerData.h:164
 AliMUONVTrackerData.h:165
 AliMUONVTrackerData.h:166
 AliMUONVTrackerData.h:167
 AliMUONVTrackerData.h:168
 AliMUONVTrackerData.h:169
 AliMUONVTrackerData.h:170
 AliMUONVTrackerData.h:171
 AliMUONVTrackerData.h:172
 AliMUONVTrackerData.h:173
 AliMUONVTrackerData.h:174
 AliMUONVTrackerData.h:175
 AliMUONVTrackerData.h:176
 AliMUONVTrackerData.h:177