Adding more bins in QA (Alis)
[u/mrichter/AliRoot.git] / MUON / AliMUONVDigitStore.h
CommitLineData
8c740498 1#ifndef ALIMUONVDIGITSTORE_H
2#define ALIMUONVDIGITSTORE_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 AliMUONVDigitStore
11/// \brief Interface for a digit container
12///
13// Author Laurent Aphecetche, Subatech
14
15#ifndef ALIMUONVSTORE_H
16# include "AliMUONVStore.h"
17#endif
18
19#ifndef ALIMUONVDIGIT_H
20# include "AliMUONVDigit.h" // must be there for covariant return type of FindObjet methods
21#endif
22
23class AliMUONVDigitStore : public AliMUONVStore
24{
25public:
26
27 /// Replacement policy : what to do when adding a digit to the store
28 enum EReplacePolicy { kAllow, kDeny, kMerge, kIgnore };
29
30public:
31 AliMUONVDigitStore();
32 virtual ~AliMUONVDigitStore();
33
34 /// Add an object, if it is of the right class
35 virtual Bool_t Add(TObject* object);
36
37 /// Create an (empty) object of the same concrete class as *this
38 virtual AliMUONVDigitStore* Create() const = 0;
39
40 static AliMUONVDigitStore* Create(TTree& tree);
41
2ed392cf 42 static AliMUONVDigitStore* Create(const char* classname);
43
8c740498 44 /// Create a digit
45 virtual AliMUONVDigit* CreateDigit(Int_t detElemId, Int_t manuId,
46 Int_t manuChannel, Int_t cathode) const = 0;
47
48 /// Add a digit and return the newly created digit
49 virtual AliMUONVDigit* Add(Int_t detElemId,
50 Int_t manuId,
51 Int_t manuChannel,
52 Int_t cathode,
53 EReplacePolicy replace);
54
55 /** Add a (s)digit. Digit is adopted.
56 @param digit the digit to be added
57 @param replace specify what to do if the digit is already there.
58 kAllow means replacement is allowed, kDeny means it is forbidden (in which
59 case we return 0x0), and kMerge means both digits will be merged).
60 Finally, kIgnore means no check is done at all. This is the most rapid option,
61 but also the more dangerous ;-)
62 */
63 virtual AliMUONVDigit* Add(const AliMUONVDigit& digit, EReplacePolicy replace) = 0;
64
65 /// Create an iterator to loop over all our digits.
66 virtual TIterator* CreateIterator() const = 0;
67
68 /** Create an iterator to loop over all digits of a group of detection elements,
69 and a given cathode (if cathode != -1)
70 */
71 virtual TIterator* CreateIterator(Int_t firstDetElemId,
72 Int_t lastDetElemId,
73 Int_t cathode=2) const = 0;
74
75 /// Create an iterator to loop over tracker digits only
76 virtual TIterator* CreateTrackerIterator() const = 0;
77
78 /// Create an iterator to loop over trigger digits only
79 virtual TIterator* CreateTriggerIterator() const = 0;
80
81 using AliMUONVStore::FindObject;
2ed392cf 82
83 /// Find an object (default is to forward to FindObject(object->GetUniqueID())
84 virtual AliMUONVDigit* FindObject(const TObject* object) const;
8c740498 85
2ed392cf 86 /// Find an object by its uniqueID
87 virtual AliMUONVDigit* FindObject(UInt_t uniqueID) const;
8c740498 88
2ed392cf 89 /// Find a digit by the quadruplet (de,manu,channel,cathode)
90 virtual AliMUONVDigit* FindObject(Int_t detElemId, Int_t manuId, Int_t manuChannel, Int_t cathode) const = 0;
8c740498 91
92 /// Number of digits we store
93 virtual Int_t GetSize() const = 0;
94
95 /// Remove an element
96 virtual AliMUONVDigit* Remove(AliMUONVDigit& digit) = 0;
97
98 /// Number of digits in a given detection element
99 virtual Int_t GetSize(Int_t detElemId) const { return GetSize(detElemId,2); }
100
101 /// Number of digits in a given detection element and a given cathode (2 for both cathodes)
102 virtual Int_t GetSize(Int_t detElemId, Int_t cathode) const;
103
91b67b6f 104 /// Whether we have any MC related information (e.g. at least one simulated digit)
105 virtual Bool_t HasMCInformation() const = 0;
106
8c740498 107 ClassDef(AliMUONVDigitStore,1) // Digit container interface
108};
109
110#endif