]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONVDigit.h
Restoring backward compatibility of the SSD calibration objects + output of the SSD...
[u/mrichter/AliRoot.git] / MUON / AliMUONVDigit.h
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 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   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   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   virtual void EfficiencyApplied(Bool_t /*value*/=kTRUE) {}
66   
67   /// Whether this digit has been calibrated or not
68   virtual Bool_t IsCalibrated() const=0;
69   /// Set the calibrated status
70   virtual void Calibrated(Bool_t value)=0;
71   
72   /// Whether this digit is used somewhere (typically in a cluster)
73   virtual Bool_t IsUsed() const = 0;
74   /// Set the used status
75   virtual void Used(Bool_t value) = 0;
76   
77   /// A word describing the status of the neighbours of this digit
78   virtual UInt_t StatusMap() const=0;
79   /// Set the statusMap
80   virtual void SetStatusMap(UInt_t statusMap)=0;
81   
82   /// Set the ADC value
83   virtual void SetADC(Int_t adc)=0;
84   /// Set the ix and iy of this digit
85   virtual void SetPadXY(Int_t padx, Int_t pady)=0;
86   /// Set the charge of this digit
87   virtual void SetCharge(Float_t q)=0;
88   /// Add a charge
89   virtual void AddCharge(Float_t q) { SetCharge(Charge()+q); }
90   
91   /// Merge this with other
92   virtual Bool_t MergeWith(const AliMUONVDigit& other)=0;
93   
94   /// Whether this digit is a tracker digit (false if belongs to trigger)
95   virtual Bool_t IsTracker() const { return !IsTrigger(); }
96   /** FIXME: how to get this information w/o hard-coding, yet being efficient ?
97     Use one fFlags that must be set when creating the digit for instance ?
98     */
99   virtual Bool_t IsTrigger() const { return DetElemId()>=1100; }
100   
101   virtual void Print(Option_t* opt="") const;
102   
103   /// Below are methods only relevant for MC digigts.
104   
105   /// Whether we implement MC methods.
106   virtual Bool_t HasMCInformation() const = 0; 
107   
108   /// Hit number that contributed to this simulated digit
109   virtual Int_t Hit() const { return 0; }
110   /// Set the hit number
111   virtual void SetHit(Int_t /*n*/) { }
112   /// Number of tracks contributing to this digit
113   virtual Int_t Ntracks() const { return 0; }
114   /// Add a track (and its charge) to the list of tracks we handle
115   virtual void AddTrack(Int_t /*trackNumber*/, Float_t /*trackCharge*/) {}
116   /// Return the i-th track number
117   virtual Int_t Track(Int_t /*i*/) const { return 0; }
118   /// Return the i-th track charge
119   virtual Float_t TrackCharge(Int_t /*i*/) const { return 0; }
120   /// Patch track with a mask
121   virtual void PatchTracks(Int_t /*mask*/) {}
122   
123   static UInt_t BuildUniqueID(Int_t detElemId, Int_t manuId, 
124                               Int_t manuChannel, Int_t cathode);
125   
126   static void DecodeUniqueID(UInt_t uniqueID,
127                              Int_t& detElemId, Int_t& manuId, 
128                              Int_t& manuChannel, Int_t& cathode);
129   
130   static Int_t DetElemId(UInt_t uniqueID);
131   static Int_t ManuId(UInt_t uniqueID);
132   static Int_t ManuChannel(UInt_t uniqueID);
133   static Int_t Cathode(UInt_t uniqueID);
134
135   /// Return the localBoardNumber from the uniqueID  
136   static Int_t LocalBoardNumber(UInt_t uniqueID) { return ManuId(uniqueID); }
137   /// Return the localBoardChannel from the uniqueID
138   static Int_t LocalBoardChannel(UInt_t uniqueID) { return ManuChannel(uniqueID); }
139   
140   
141   ClassDef(AliMUONVDigit,0) // ABC of a MUON Digit
142 };
143
144 #endif