Line data Source code
1 : #ifndef ALIMUONDIGITSTOREVIMPL_H
2 : #define ALIMUONDIGITSTOREVIMPL_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 :
9 : /// \ingroup base
10 : /// \class AliMUONDigitStoreVImpl
11 : /// \brief Base implementation of VDigitStore
12 : ///
13 : // author Laurent Aphecetche
14 :
15 : #ifndef ALIMUONVDIGITSTORE_H
16 : # include "AliMUONVDigitStore.h"
17 : #endif
18 :
19 : class TClonesArray;
20 : class AliMUON2DMap;
21 :
22 : class AliMUONDigitStoreVImpl : public AliMUONVDigitStore
23 : {
24 : friend class AliMUONDigitStoreVImplIterator;
25 :
26 : public:
27 : AliMUONDigitStoreVImpl(const char* concreteClassName);
28 : AliMUONDigitStoreVImpl(const AliMUONDigitStoreVImpl& rhs);
29 : AliMUONDigitStoreVImpl& operator=(const AliMUONDigitStoreVImpl& rhs);
30 : virtual ~AliMUONDigitStoreVImpl();
31 :
32 : /// Whether we can be connected to a TTree
33 0 : virtual Bool_t CanConnect() const { return kTRUE; }
34 :
35 : virtual Bool_t Connect(TTree& tree, Bool_t alone = kTRUE) const;
36 :
37 : virtual void Clear(Option_t* opt="");
38 :
39 : virtual AliMUONVDigit* CreateDigit(Int_t detElemId, Int_t manuId,
40 : Int_t manuChannel, Int_t cathode) const = 0;
41 :
42 : using AliMUONVDigitStore::Add;
43 :
44 : virtual AliMUONVDigit* Add(const AliMUONVDigit& digit, EReplacePolicy replace);
45 :
46 : virtual TIterator* CreateIterator() const;
47 :
48 : virtual TIterator* CreateIterator(Int_t firstDetElemId,
49 : Int_t lastDetElemId,
50 : Int_t cathode=2) const;
51 :
52 : virtual TIterator* CreateTrackerIterator() const;
53 :
54 : virtual TIterator* CreateTriggerIterator() const;
55 :
56 : using AliMUONVStore::FindObject;
57 :
58 : virtual AliMUONVDigit* FindObject(UInt_t uniqueID) const;
59 :
60 : virtual AliMUONVDigit* FindObject(Int_t detElemId, Int_t manuId,
61 : Int_t manuChannel, Int_t cathode) const;
62 :
63 : using AliMUONVDigitStore::GetSize;
64 :
65 : virtual Int_t GetSize() const;
66 :
67 : virtual AliMUONVDigit* Remove(AliMUONVDigit& digit);
68 :
69 : protected:
70 : /// Add concrete digit
71 : virtual AliMUONVDigit* AddConcreteDigit(TClonesArray& a,
72 : const AliMUONVDigit& digit,
73 : Int_t index) = 0;
74 :
75 : private:
76 :
77 : AliMUONVDigit* Find(const AliMUONVDigit& digit) const;
78 :
79 : void UpdateIndex(const AliMUONVDigit& digit, Int_t index);
80 :
81 : Int_t FindIndex(const AliMUONVDigit& digit) const;
82 : Int_t FindIndex(Int_t detElemId, Int_t internalManuId, Int_t manuChannel) const;
83 :
84 : void ReIndex();
85 : void ClearIndex();
86 :
87 : private:
88 : TClonesArray* fDigits; ///< collection of digits
89 : AliMUON2DMap* fMap; //!<! index map for fast digit retrieval
90 : Bool_t fIndexed; //!<! whether our internal indices fDEs and fManus are uptodate
91 :
92 18 : ClassDef(AliMUONDigitStoreVImpl,1) // Implementation of AliMUONVDigitStore
93 : };
94 :
95 : #endif
|