Line data Source code
1 : #ifndef ALIMUONVDIGIT_H
2 : #define ALIMUONVDIGIT_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 AliMUONVDigit
11 : /// \brief ABC of a MUON digit
12 : // Author Laurent Aphecetche, Subatech
13 :
14 : #ifndef ROOT_TObject
15 : # include "TObject.h"
16 : #endif
17 :
18 414056 : class AliMUONVDigit : public TObject
19 : {
20 : public:
21 : AliMUONVDigit();
22 : AliMUONVDigit(Int_t detElemId, Int_t manuId, Int_t manuChannel, Int_t cathode);
23 : virtual ~AliMUONVDigit();
24 :
25 : virtual Bool_t IsEqual(const TObject* object) const;
26 : /// Advertise that we can be sorted in TCollections
27 0 : virtual Bool_t IsSortable() const { return kTRUE; }
28 : virtual Int_t Compare(const TObject* object) const;
29 :
30 : virtual const char* GetName() const;
31 :
32 : /// The detection element this digit belongs to
33 : virtual Int_t DetElemId() const=0;
34 : /// The x-index of this digit (>=0)
35 : virtual Int_t PadX() const=0;
36 : /// The y-index of this digit (>=0)
37 : virtual Int_t PadY() const=0;
38 : /// Cathode number this digit is on (0 or 1)
39 : virtual Int_t Cathode() const=0;
40 :
41 : /// The charge of this digit, calibrated or not depending on IsCalibrated()
42 : virtual Float_t Charge() const=0;
43 :
44 : /// Raw ADC value of this digit
45 : virtual Int_t ADC() const = 0;
46 :
47 : /// The electronic card id this digit belongs to (manuId for tracker, localboardId for trigger)
48 : virtual Int_t ManuId() const = 0;
49 : /// The channel within ManuId() this digit belongs to (manuChannel for tracker, localBoardChannel for trigger)
50 : virtual Int_t ManuChannel() const=0;
51 :
52 : /// Whether the ADC has saturated
53 : virtual Bool_t IsSaturated() const=0;
54 : /// Set the saturation status
55 : virtual void Saturated(Bool_t saturated=kTRUE)=0;
56 :
57 : /// Whether this (simulated) digit is purely noise
58 : virtual Bool_t IsNoiseOnly() const=0;
59 : /// Set the noiseOnly status
60 0 : virtual void NoiseOnly(Bool_t /*value*/=kTRUE) { }
61 :
62 : /// Whether this (simulated) digit got corrected by chamber efficiency
63 : virtual Bool_t IsEfficiencyApplied() const=0;
64 : /// Set the efficiencyApplied status
65 0 : virtual void EfficiencyApplied(Bool_t /*value*/=kTRUE) {}
66 :
67 : /// Whether this digit has been calibrated or not (see note 1 in AliMUONVDigit.cxx)
68 : virtual Bool_t IsCalibrated() const=0;
69 : /// Set the calibrated status (see note 1 in AliMUONVDigit.cxx)
70 : virtual void Calibrated(Bool_t value)=0;
71 :
72 : /// Whether this digit has charge in femto coulomb (see note 1 in AliMUONVDigit.cxx)
73 0 : virtual Bool_t IsChargeInFC() const { return kFALSE; }
74 : /// Set the unit value (see note 1 in AliMUONVDigit.cxx)
75 : virtual void ChargeInFC(Bool_t value=kTRUE)=0;
76 :
77 : /// Whether or not this digit was obtained from a conversion (e.g. real to simulated)
78 0 : virtual Bool_t IsConverted() const { return kFALSE; }
79 :
80 : /// Whether this digit is used somewhere (typically in a cluster)
81 : virtual Bool_t IsUsed() const = 0;
82 : /// Set the used status
83 : virtual void Used(Bool_t value) = 0;
84 :
85 : /// A word describing the status of the neighbours of this digit
86 : virtual UInt_t StatusMap() const=0;
87 : /// Set the statusMap
88 : virtual void SetStatusMap(UInt_t statusMap)=0;
89 :
90 : /// Set the ADC value
91 : virtual void SetADC(Int_t adc)=0;
92 : /// Set the ix and iy of this digit
93 : virtual void SetPadXY(Int_t padx, Int_t pady)=0;
94 : /// Set the charge of this digit
95 : virtual void SetCharge(Float_t q)=0;
96 : /// Add a charge
97 10 : virtual void AddCharge(Float_t q) { SetCharge(Charge()+q); }
98 :
99 : /// Merge this with other
100 : virtual Bool_t MergeWith(const AliMUONVDigit& other)=0;
101 :
102 : /// Whether this digit is a tracker digit (false if belongs to trigger)
103 3096 : virtual Bool_t IsTracker() const { return !IsTrigger(); }
104 : /** FIXME: how to get this information w/o hard-coding, yet being efficient ?
105 : Use one fFlags that must be set when creating the digit for instance ?
106 : */
107 3096 : virtual Bool_t IsTrigger() const { return DetElemId()>=1100; }
108 :
109 : virtual void Print(Option_t* opt="") const;
110 :
111 : /// Below are methods only relevant for MC digigts.
112 :
113 : /// Whether we implement MC methods.
114 : virtual Bool_t HasMCInformation() const = 0;
115 :
116 : /// Hit number that contributed to this simulated digit
117 0 : virtual Int_t Hit() const { return 0; }
118 : /// Set the hit number
119 0 : virtual void SetHit(Int_t /*n*/) { }
120 : /// Hit age
121 0 : virtual Float_t Time() const {return 0;}
122 : /// Set hit age
123 0 : virtual void SetTime(Float_t /*t*/) { }
124 : /// Number of tracks contributing to this digit
125 0 : virtual Int_t Ntracks() const { return 0; }
126 : /// Add a track (and its charge) to the list of tracks we handle
127 0 : virtual void AddTrack(Int_t /*trackNumber*/, Float_t /*trackCharge*/) {}
128 : /// Return the i-th track number
129 0 : virtual Int_t Track(Int_t /*i*/) const { return 0; }
130 : /// Return the i-th track charge
131 0 : virtual Float_t TrackCharge(Int_t /*i*/) const { return 0; }
132 : /// Patch track with a mask
133 0 : virtual void PatchTracks(Int_t /*mask*/) {}
134 :
135 : static UInt_t BuildUniqueID(Int_t detElemId, Int_t manuId,
136 : Int_t manuChannel, Int_t cathode);
137 :
138 : static void DecodeUniqueID(UInt_t uniqueID,
139 : Int_t& detElemId, Int_t& manuId,
140 : Int_t& manuChannel, Int_t& cathode);
141 :
142 : static Int_t DetElemId(UInt_t uniqueID);
143 : static Int_t ManuId(UInt_t uniqueID);
144 : static Int_t ManuChannel(UInt_t uniqueID);
145 : static Int_t Cathode(UInt_t uniqueID);
146 :
147 : /// Return the localBoardNumber from the uniqueID
148 0 : static Int_t LocalBoardNumber(UInt_t uniqueID) { return ManuId(uniqueID); }
149 : /// Return the localBoardChannel from the uniqueID
150 0 : static Int_t LocalBoardChannel(UInt_t uniqueID) { return ManuChannel(uniqueID); }
151 :
152 :
153 26 : ClassDef(AliMUONVDigit,0) // ABC of a MUON Digit
154 : };
155 :
156 : #endif
|