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 coordinates.
17 #include "TClonesArray.h"
22 * A 3D hit object used to store hits reconstructed on the tracking chambers by
23 * the dHLT. These objects store information translated into ROOT format from
24 * dHLT raw data. Reconstructed hit values of (0, 0, 0) indicate an invalid or
26 * This class is mainly for testing or as a helper object for dHLT specific analysis,
27 * since it is sometimes easier to store and handle ROOT objects.
29 class AliHLTMUONRecHit : public TObject
32 * Stream operator for usage with std::ostream classes.
33 * Allows usage such as:
34 * AliHLTMUONRecHit h; std::cout << h;
36 friend std::ostream& operator << (std::ostream& stream, const AliHLTMUONRecHit& hit);
41 * The AliChannel class stores extra debugging information about the channels
42 * and raw data words that were considered during reconstruction of a hit
43 * by the dHLT hit reconstructor component.
45 class AliChannel : public TObject
48 * Stream operator for usage with std::ostream classes.
50 friend std::ostream& operator << (std::ostream& stream, const AliChannel& c);
56 * \param busPatch The bus patch ID of the channel as found in the DDL raw data.
57 * \param manu The MANU ID of the channel as found in the raw data word.
58 * \param channel The MANU channel ID as found in the raw data word.
59 * \param signal The ADC signal value as found in the raw data word.
60 * \param rawDataWord The actual raw data word.
63 Short_t busPatch = -1,
67 UInt_t rawDataWord = 0
69 TObject(), fBusPatch(busPatch),
70 fManu(manu), fAddress(channel), fSignal(signal),
71 fRawDataWord(rawDataWord)
77 virtual ~AliChannel() {}
80 * Returns the bus patch ID of the channel.
82 Short_t BusPatch() const { return fBusPatch; }
85 * Returns the MANU address.
87 Short_t Manu() const { return fManu; }
90 * Returns the channel address of the MANU.
92 Short_t Address() const { return fAddress; }
95 * Returns the ADC signal measured on the channel.
97 Short_t Signal() const { return fSignal; }
100 * Returns the raw data word as found in the tracking DDL payload.
102 UInt_t RawDataWord() const { return fRawDataWord; }
105 * Returns true if the channel is for the bending plane.
107 Bool_t InBendingPlane() const { return (fRawDataWord & (1<<28)) == 0; }
110 * Returns true if the channel is for the non-bending plane.
112 Bool_t InNonBendingPlane() const { return (fRawDataWord & (1<<28)) != 0; }
114 virtual void Print(Option_t* option = NULL) const;
116 // Methods inherited from TObject
117 virtual Bool_t IsSortable() const { return kTRUE; }
118 Int_t Compare(const TObject* obj) const;
120 // Implement comparison operators.
121 bool operator == (const AliChannel& c) const
123 return fManu == c.fManu and fAddress == c.fAddress
124 and fSignal == c.fSignal
125 and fRawDataWord == c.fRawDataWord;
128 bool operator != (const AliChannel& c) const
130 return not this->operator == (c);
135 Short_t fBusPatch; ///< The bus patch ID for the channel.
136 Short_t fManu; ///< The MANU address on the electronics.
137 Short_t fAddress; ///< The channel address on the electronics.
138 Short_t fSignal; ///< ADC value of signal.
139 UInt_t fRawDataWord; ///< The raw data word as found in the DDL stream.
141 ClassDef(AliHLTMUONRecHit::AliChannel, 5); // A MANU channel forming part of a cluster that was considered during hit reconstruction in dHLT.
145 * Construct a new AliHLTMUONRecHit object with coordinate (x, y, z).
146 * @param x X coordinate of hit
147 * @param y Y coordinate of hit
148 * @param z Z coordinate of hit
149 * @param sourceDDL The DDL from which this hit originates.
150 * @param detectorId The ID number for the AliRoot detector element on
151 * which this hit resides.
152 * @param clusterId The cluster ID number assigned to the hit's cluster.
153 * @param nChExpB The expected number of channels in the bending plane that form the cluster.
154 * @param nChExpNB The expected number of channels in the non-bending plane that form the cluster.
155 * @param chargeB The charge of the cluster in the bending plane.
156 * @param chargeNB The charge of the cluster in the non-bending plane.
162 Int_t sourceDDL = -1,
163 Int_t detElemId = -1,
164 Int_t clusterId = -1,
165 UShort_t nChExpB = 0,
166 UShort_t nChExpNB = 0,
167 Float_t chargeB = -1,
168 Float_t chargeNB = -1
170 TObject(), fCoordinate(x, y, z), fSourceDDL(sourceDDL),
171 fDetElemId(detElemId), fClusterId(clusterId), fNchExpB(nChExpB),
172 fNchExpNB(nChExpNB), fChannels("AliHLTMUONRecHit::AliChannel", 6),
173 fChargeB(chargeB), fChargeNB(chargeNB)
177 * Default destructor.
179 virtual ~AliHLTMUONRecHit() {}
182 * Returns the 3D hit coordinate.
184 const TVector3& Coordinate() const { return fCoordinate; }
187 * Returns the X coordinate of the reconstructed hit in centimetres.
189 Double_t X() const { return fCoordinate.X(); }
192 * Returns the Y coordinate of the reconstructed hit in centimetres.
194 Double_t Y() const { return fCoordinate.Y(); }
197 * Returns the Z coordinate of the reconstructed hit in centimetres.
199 Double_t Z() const { return fCoordinate.Z(); }
202 * Returns the source DDL from which this hit originates.
203 * -1 is returned if this was not set.
205 Int_t SourceDDL() const { return fSourceDDL; }
208 * Returns the detector element ID on which this reconstructed hit resides.
209 * -1 is returned if this was not set.
211 Int_t DetElemId() const { return fDetElemId; }
214 * Returns the chamber number of this hit in the range [1..14].
215 * If -1 is returned then the chamber number is not known because the
216 * detector element ID was not set or is invalid.
217 * @param warn Indicates if any warning should be printed in case of problems.
219 Int_t Chamber(bool warn = true) const;
222 * Returns the ID number given to the hit's cluster.
224 Int_t ClusterId() const { return fClusterId; }
227 * Returns the expected total number of channels that are to be added to this hit.
228 * If the number of calls to AddChannel does not correspond to this value
229 * then we lost some debugging information along the way.
231 UInt_t ExpectedNchannels() const { return ExpectedNchannelsB() + ExpectedNchannelsNB(); }
234 * Returns the expected number of channels in the bending plane that are to
235 * be added to this hit.
237 UInt_t ExpectedNchannelsB() const { return fNchExpB; }
240 * Returns the expected number of channels in the non-bending plane that
241 * are to be added to this hit.
243 UInt_t ExpectedNchannelsNB() const { return fNchExpNB; }
246 * Returns the total charge of the cluster.
248 Float_t TotalCharge() const { return fChargeB + fChargeNB; }
251 * Returns the charge of the cluster in the bending plane.
253 Float_t ChargeB() const { return fChargeB; }
256 * Returns the charge of the cluster in the non-bending plane.
258 Float_t ChargeNB() const { return fChargeNB; }
261 * Sets the extra debugging information for this hit.
262 * @param detElemId The detector element ID.
263 * @param clusterId Cluster ID of the hit's cluster.
264 * @param nChExpB Number of expected channels in the bending plane forming the cluster.
265 * @param nChExpNB Number of expected channels in the non-bending plane forming the cluster.
266 * @param chargeB The charge of the cluster in the bending plane.
267 * @param chargeNB The charge of the cluster in the non-bending plane.
268 * @param sourceDDL The source DDL of this hit.
271 Int_t detElemId, Int_t clusterId,
272 UShort_t nChExpB, UShort_t nChExpNB,
273 Float_t chargeB, Float_t chargeNB,
278 * Sets the hit coordinate.
280 void SetHit(Float_t x, Float_t y, Float_t z)
282 fCoordinate.SetXYZ(x, y, z);
286 * Returns the total number of channels associated with this hit.
288 Int_t Nchannels() const { return fChannels.GetEntriesFast(); }
291 * Returns the i'th channel associated with this hit.
292 * @param i Should be a number in the range [0..n), where n = Nchannels().
294 const AliChannel* GetChannel(Int_t i) const
296 return static_cast<const AliChannel*>(fChannels[i]);
300 * Adds a new channel to this hit if it is on a tracking chamber.
301 * @param buspatch The bus patch ID of the channel.
302 * @param manu The MANU number
303 * @param channel The MANU channel address.
304 * @param signal The ADC signal value measured on the channel.
305 * @param rawDataWord This is the raw data word as read from the DDL.
308 Short_t buspatch, Short_t manu, Short_t channel,
309 Short_t signal, UInt_t rawDataWord
313 * Prints the details of the reconstructed hit.
314 * @param option A case sensitive string that can contain one of the
316 * "compact" - Prints just the coordinates of the hit in a terse format.
317 * "detail" - Prints the coordinates and detector element ID.
318 * "all" - Prints all known information about this hit including
319 * channel information forming the cluster that was reconstructed.
320 * If the string contains an empty option or NULL then the default is
321 * to print compactly.
323 virtual void Print(Option_t* option = NULL) const;
325 // Methods inherited from TObject
326 virtual Bool_t IsSortable() const { return kTRUE; }
327 Int_t Compare(const TObject* obj) const;
329 // Implement comparison operators.
330 bool operator == (const AliHLTMUONRecHit& hit) const
332 return X() == hit.X() and Y() == hit.Y() and Z() == hit.Z();
335 bool operator != (const AliHLTMUONRecHit& hit) const
337 return not this->operator == (hit);
342 TVector3 fCoordinate; ///< The 3D coordinate of the hit in AliRoot global coordinates (cm).
344 // The following is debugging information and may not be filled if the
345 // dHLT components were not set to produce this information.
346 Int_t fSourceDDL; ///< The DDL from which this hit originates.
347 Int_t fDetElemId; ///< Detector element ID number.
348 Int_t fClusterId; ///< The cluster ID number used to relate all the channels to each other.
349 UShort_t fNchExpB; ///< The number of channels in the bending plane that were supposed to be found.
350 UShort_t fNchExpNB; ///< The number of channels in the non-bending plane that were supposed to be found.
351 TClonesArray fChannels; ///< The channels forming part of the cluster from which this hit was reconstructed.
352 Float_t fChargeB; ///< The charge of the cluster in the bending plane.
353 Float_t fChargeNB; ///< The charge of the cluster in the non-bending plane.
355 ClassDef(AliHLTMUONRecHit, 5); // A reconstructed hit translated from dHLT raw data into ROOT format.
358 #endif // ALIHLTMUONRECHIT_H