1 #ifndef ALIMUONSPARSEHISTO_H
2 #define ALIMUONSPARSEHISTO_H
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5 * See cxx source for full Copyright notice */
10 /// \class AliMUONSparseHisto
11 /// \brief A very memory compact histogram to hold some tracker distributions
13 // Author Laurent Aphecetche, Subatech
19 class AliMUONSparseHisto : public TObject
29 AliMUONSparseHisto(Double_t xmin=0.0, Double_t xmax=4096.0);
30 AliMUONSparseHisto(const AliMUONSparseHisto& rhs);
31 AliMUONSparseHisto& operator=(const AliMUONSparseHisto& rhs);
33 virtual ~AliMUONSparseHisto();
35 /// Whether this histogram has underflow values
36 /// (no way to know the number of underflow, though)
37 Bool_t HasUnderflow() const { return TestBit(kUnderflow); }
39 /// Whether this histogram has overflow values
40 /// (no way to know the number of underflow, though)
41 Bool_t HasOverflow() const { return TestBit(kOverflow); }
43 Int_t Fill(Double_t value);
45 /// Return number of bins we hold
46 Int_t GetNbins() const { return fNbins; }
48 Double_t GetBinCenter(Int_t bin) const;
50 Int_t GetBinContent(Int_t bin) const;
52 virtual void Print(Option_t* opt="") const;
54 virtual void Clear(Option_t* opt="");
56 Int_t Find(Int_t binCenter) const;
58 virtual void Copy(TObject& object) const;
60 /// Return max value of bincenter
61 Double_t Xmax() const { return fXmax; }
63 /// Return min value of bincenter
64 Double_t Xmin() const { return fXmin; }
66 /// Number of bits used to code the x-value of the histogram
67 Int_t Nbits() const { return 12; }
71 UInt_t Encode(Int_t binCenter, Int_t binContent) const;
73 Double_t DecodeValue(Int_t value) const;
75 Int_t EncodeValue(Double_t value) const;
77 UInt_t GetBin(Int_t i) const;
79 Int_t BinCenter(UInt_t x) const;
81 Int_t BinContent(UInt_t x) const;
85 /// Conversion factor to go from float to int value (for bin content)
86 Double_t Factor() const { return fFactor; }
90 Int_t fNbins; ///< number of bins we hold
92 /// compacted content = (bin,value)
93 UInt_t* fArray; //[fNbins] compacted content = (bin,value)
95 Double_t fXmin; ///< min value of bincenter
96 Double_t fXmax; ///< max value of bincenter
98 Double_t fFactor; ///< to go from double to int
100 ClassDef(AliMUONSparseHisto,2) // Sparse histogram-like class for ADC distributions