Separating run-dependent mapping data from data, which are not
[u/mrichter/AliRoot.git] / MUON / AliMUONSparseHisto.h
CommitLineData
8741815f 1#ifndef ALIMUONSPARSEHISTO_H
2#define ALIMUONSPARSEHISTO_H
3
4/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5* See cxx source for full Copyright notice */
6
7// $Id$
8
e41c38cf 9/// \ingroup calib
8741815f 10/// \class AliMUONSparseHisto
10eb3d17 11/// \brief A very memory compact histogram to hold some tracker distributions
8741815f 12///
13// Author Laurent Aphecetche, Subatech
14
15#ifndef ROOT_TObject
16# include "TObject.h"
17#endif
18
19class AliMUONSparseHisto : public TObject
20{
21public:
10eb3d17 22
23 enum
24 {
25 kUnderflow = BIT(20),
26 kOverflow = BIT(21)
27 };
28
29 AliMUONSparseHisto(Double_t xmin=0.0, Double_t xmax=4096.0);
8741815f 30 AliMUONSparseHisto(const AliMUONSparseHisto& rhs);
31 AliMUONSparseHisto& operator=(const AliMUONSparseHisto& rhs);
32
33 virtual ~AliMUONSparseHisto();
34
e83120bd 35 Bool_t Add(const AliMUONSparseHisto& h);
36
cf71107e 37 /// Whether this histogram has underflow values
38 /// (no way to know the number of underflow, though)
10eb3d17 39 Bool_t HasUnderflow() const { return TestBit(kUnderflow); }
40
cf71107e 41 /// Whether this histogram has overflow values
42 /// (no way to know the number of underflow, though)
10eb3d17 43 Bool_t HasOverflow() const { return TestBit(kOverflow); }
44
45 Int_t Fill(Double_t value);
8741815f 46
47 /// Return number of bins we hold
48 Int_t GetNbins() const { return fNbins; }
10eb3d17 49
50 Double_t GetBinCenter(Int_t bin) const;
8741815f 51
52 Int_t GetBinContent(Int_t bin) const;
53
54 virtual void Print(Option_t* opt="") const;
55
56 virtual void Clear(Option_t* opt="");
10eb3d17 57
58 Int_t Find(Int_t binCenter) const;
8741815f 59
10eb3d17 60 virtual void Copy(TObject& object) const;
61
62 /// Return max value of bincenter
63 Double_t Xmax() const { return fXmax; }
8741815f 64
10eb3d17 65 /// Return min value of bincenter
66 Double_t Xmin() const { return fXmin; }
8741815f 67
cf71107e 68 /// Number of bits used to code the x-value of the histogram
10eb3d17 69 Int_t Nbits() const { return 12; }
8741815f 70
8741815f 71private:
10eb3d17 72
73 UInt_t Encode(Int_t binCenter, Int_t binContent) const;
74
75 Double_t DecodeValue(Int_t value) const;
76
77 Int_t EncodeValue(Double_t value) const;
78
79 UInt_t GetBin(Int_t i) const;
80
81 Int_t BinCenter(UInt_t x) const;
82
83 Int_t BinContent(UInt_t x) const;
84
85 void Expand();
86
cf71107e 87 /// Conversion factor to go from float to int value (for bin content)
10eb3d17 88 Double_t Factor() const { return fFactor; }
8741815f 89
90private:
91
92 Int_t fNbins; ///< number of bins we hold
93
94 /// compacted content = (bin,value)
10eb3d17 95 UInt_t* fArray; //[fNbins] compacted content = (bin,value)
96
97 Double_t fXmin; ///< min value of bincenter
98 Double_t fXmax; ///< max value of bincenter
99
100 Double_t fFactor; ///< to go from double to int
8741815f 101
10eb3d17 102 ClassDef(AliMUONSparseHisto,2) // Sparse histogram-like class for ADC distributions
8741815f 103};
104
105#endif