1 #ifndef ALIHLTMUONRECHIT_H
2 #define ALIHLTMUONRECHIT_H
3 /* This file is property of and copyright by the ALICE HLT Project *
4 * ALICE Experiment at CERN, All rights reserved. *
5 * See cxx source for full Copyright notice */
10 * @file AliHLTMUONRecHit.h
11 * @author Artur Szostak <artursz@iafrica.com>
13 * @brief Declaration of a reconstructed hit ROOT object to store 3D hit
14 * coordinates translated from dHLT raw data.
18 #include "TClonesArray.h"
23 * A 3D hit object used to store hits reconstructed on the tracking chambers by
24 * the dHLT. These objects store information translated into ROOT format from
25 * dHLT raw data. Reconstructed hit values of (0, 0, 0) indicate an invalid or
28 class AliHLTMUONRecHit : public TObject
31 * Stream operator for usage with std::ostream classes.
32 * Allows usage such as:
33 * AliHLTMUONRecHit h; std::cout << h;
35 friend std::ostream& operator << (std::ostream& stream, const AliHLTMUONRecHit& hit);
40 * The Channel class stores extra debugging information about the channels
41 * and raw data words that were considered during reconstruction of a hit
42 * by the dHLT hit reconstructor component.
44 class Channel : public TObject
47 * Stream operator for usage with std::ostream classes.
49 friend std::ostream& operator << (std::ostream& stream, const Channel& c);
57 UInt_t rawDataWord = 0
60 fManu(manu), fAddress(channel), fSignal(signal),
61 fRawDataWord(rawDataWord)
67 * Returns the MANU address.
69 Short_t Manu() const { return fManu; }
72 * Returns the channel address of the MANU.
74 Short_t Address() const { return fAddress; }
77 * Returns the ADC signal measured on the channel.
79 Short_t Signal() const { return fSignal; }
82 * Returns the raw data word as found in the tracking DDL payload.
84 UInt_t RawDataWord() const { return fRawDataWord; }
86 virtual void Print(Option_t* option = NULL) const;
88 // Methods inherited from TObject
89 virtual Bool_t IsSortable() const { return kTRUE; }
90 Int_t Compare(const TObject* obj) const;
92 // Implement comparison operators.
93 bool operator == (const Channel& c) const
95 return fManu == c.fManu and fAddress == c.fAddress
96 and fSignal == c.fSignal
97 and fRawDataWord == c.fRawDataWord;
100 bool operator != (const Channel& hit) const
102 return not this->operator == (hit);
107 Short_t fManu; // The MANU address on the electronics.
108 Short_t fAddress; // The channel address on the electronics.
109 Short_t fSignal; // ADC value of signal.
110 UInt_t fRawDataWord; // The raw data word as found in the DDL stream.
112 ClassDef(AliHLTMUONRecHit::Channel, 1); // A MANU channel forming part of a cluster that was considered during hit reconstruction in dHLT.
116 * Construct a new AliHLTMUONRecHit object with coordinate (x, y, z).
117 * @param x X coordinate of hit
118 * @param y Y coordinate of hit
119 * @param z Z coordinate of hit
120 * @param sourceDDL The DDL from which this hit originates.
121 * @param detectorId The ID number for the AliRoot detector element on
122 * which this hit resides.
123 * @param clusterId The cluster ID number assigned to the hit's cluster.
124 * @param nChExp The expected number of channels that form the cluster.
130 Int_t sourceDDL = -1,
131 Int_t detElemId = -1,
132 Int_t clusterId = -1,
135 fCoordinate(x, y, z), fSourceDDL(sourceDDL),
136 fDetElemId(detElemId), fClusterId(clusterId), fNchExp(nChExp),
137 fChannels("AliHLTMUONRecHit::Channel", 6)
140 virtual ~AliHLTMUONRecHit() {}
143 * Returns the 3D hit coordinate.
145 const TVector3& Coordinate() const { return fCoordinate; }
148 * Returns the X coordinate of the reconstructed hit in centimetres.
150 Double_t X() const { return fCoordinate.X(); }
153 * Returns the Y coordinate of the reconstructed hit in centimetres.
155 Double_t Y() const { return fCoordinate.Y(); }
158 * Returns the Z coordinate of the reconstructed hit in centimetres.
160 Double_t Z() const { return fCoordinate.Z(); }
163 * Returns the source DDL from which this hit originates.
164 * -1 is returned if this was not set.
166 Int_t SourceDDL() const { return fSourceDDL; }
169 * Returns the detector element ID on which this reconstructed hit resides.
170 * -1 is returned if this was not set.
172 Int_t DetElemId() const { return fDetElemId; }
175 * Returns the chamber number of this hit in the range [1..14].
176 * If -1 is returned then the chamber number is not known because the
177 * extra debugging information such as detector element ID was not set.
178 * @param warn Indicates if any warning should be printed in case of problems.
180 Int_t Chamber(bool warn = true) const;
183 * Returns the ID number given to the hit's cluster.
185 Int_t ClusterId() const { return fClusterId; }
188 * Returns the expected number of channels that are to be added to this hit.
189 * If the number of calls to AddChannel does not correspond to this value
190 * then we lost some debugging information along the way.
192 UInt_t ExpectedNchannels() const { return fNchExp; }
195 * Sets the debugging information for this hit.
196 * @param detElemId The detector element ID.
197 * @param clusterId Cluster ID of the hit's cluster.
198 * @param nChExp Number of expected channels forming the cluster.
199 * @param sourceDDL The source DDL of this hit.
202 Int_t detElemId, Int_t clusterId, UInt_t nChExp,
207 * Sets the hit coordinate.
209 void SetHit(Float_t x, Float_t y, Float_t z)
211 fCoordinate.SetXYZ(x, y, z);
215 * Returns the number of channels associated with this hit.
217 Int_t Nchannels() const { return fChannels.GetEntriesFast(); }
220 * Returns the i'th channel associated with this hit.
221 * @param i Should be a number in the range [0..n), where n = Nchannels().
223 const Channel* GetChannel(Int_t i) const
225 return static_cast<const Channel*>(fChannels[i]);
229 * Adds a new channel to this hit if it is on a tracking chamber.
230 * @param manu The MANU number
231 * @param channel The MANU channel address.
232 * @param signal The ADC signal value measured on the channel.
233 * @param rawDataWord This is the raw data word as read from the DDL.
236 Short_t manu, Short_t channel, Short_t signal,
241 * Prints the details of the reconstructed hit.
242 * @param option A case sensitive string that can contain one of the
244 * "compact" - Prints just the coordinates of the hit in a terse format.
245 * "detail" - Prints the coordinates and detector element ID.
246 * "all" - Prints all known information about this hit including
247 * channel information forming the cluster that was reconstructed.
248 * If the string contains an empty option or NULL then the default is
249 * to print compactly.
251 virtual void Print(Option_t* option = NULL) const;
253 // Methods inherited from TObject
254 virtual Bool_t IsSortable() const { return kTRUE; }
255 Int_t Compare(const TObject* obj) const;
257 // Implement comparison operators.
258 bool operator == (const AliHLTMUONRecHit& hit) const
260 return X() == hit.X() and Y() == hit.Y() and Z() == hit.Z();
263 bool operator != (const AliHLTMUONRecHit& hit) const
265 return not this->operator == (hit);
270 TVector3 fCoordinate; // The 3D coordinate of the hit in AliRoot global coordinates (cm).
272 // The following is debugging information and may not be filled if the
273 // dHLT components were not set to produce this information.
274 Int_t fSourceDDL; // The DDL from which this hit originates.
275 Int_t fDetElemId; // Detector element ID number.
276 Int_t fClusterId; // The cluster ID number used to relate all the channels to each other.
277 UInt_t fNchExp; // The number of channels that were supposed to be found.
278 TClonesArray fChannels; // The channels forming part of the cluster from which this hit was reconstructed.
280 ClassDef(AliHLTMUONRecHit, 1); // A reconstructed hit translated from dHLT raw data into ROOT format.
283 #endif // ALIHLTMUONRECHIT_H