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 manu The MANU ID of the channel as found in the raw data word.
57 * \param channel The MANU channel ID as found in the raw data word.
58 * \param signal The ADC signal value as found in the raw data word.
59 * \param rawDataWord The actual raw data word.
65 UInt_t rawDataWord = 0
68 fManu(manu), fAddress(channel), fSignal(signal),
69 fRawDataWord(rawDataWord)
75 virtual ~AliChannel() {}
78 * Returns the MANU address.
80 Short_t Manu() const { return fManu; }
83 * Returns the channel address of the MANU.
85 Short_t Address() const { return fAddress; }
88 * Returns the ADC signal measured on the channel.
90 Short_t Signal() const { return fSignal; }
93 * Returns the raw data word as found in the tracking DDL payload.
95 UInt_t RawDataWord() const { return fRawDataWord; }
97 virtual void Print(Option_t* option = NULL) const;
99 // Methods inherited from TObject
100 virtual Bool_t IsSortable() const { return kTRUE; }
101 Int_t Compare(const TObject* obj) const;
103 // Implement comparison operators.
104 bool operator == (const AliChannel& c) const
106 return fManu == c.fManu and fAddress == c.fAddress
107 and fSignal == c.fSignal
108 and fRawDataWord == c.fRawDataWord;
111 bool operator != (const AliChannel& c) const
113 return not this->operator == (c);
118 Short_t fManu; ///< The MANU address on the electronics.
119 Short_t fAddress; ///< The channel address on the electronics.
120 Short_t fSignal; ///< ADC value of signal.
121 UInt_t fRawDataWord; ///< The raw data word as found in the DDL stream.
123 ClassDef(AliHLTMUONRecHit::AliChannel, 3); // A MANU channel forming part of a cluster that was considered during hit reconstruction in dHLT.
127 * Construct a new AliHLTMUONRecHit object with coordinate (x, y, z).
128 * @param x X coordinate of hit
129 * @param y Y coordinate of hit
130 * @param z Z coordinate of hit
131 * @param sourceDDL The DDL from which this hit originates.
132 * @param detectorId The ID number for the AliRoot detector element on
133 * which this hit resides.
134 * @param clusterId The cluster ID number assigned to the hit's cluster.
135 * @param nChExp The expected number of channels that form the cluster.
141 Int_t sourceDDL = -1,
142 Int_t detElemId = -1,
143 Int_t clusterId = -1,
146 TObject(), fCoordinate(x, y, z), fSourceDDL(sourceDDL),
147 fDetElemId(detElemId), fClusterId(clusterId), fNchExp(nChExp),
148 fChannels("AliHLTMUONRecHit::AliChannel", 6)
152 * Default destructor.
154 virtual ~AliHLTMUONRecHit() {}
157 * Returns the 3D hit coordinate.
159 const TVector3& Coordinate() const { return fCoordinate; }
162 * Returns the X coordinate of the reconstructed hit in centimetres.
164 Double_t X() const { return fCoordinate.X(); }
167 * Returns the Y coordinate of the reconstructed hit in centimetres.
169 Double_t Y() const { return fCoordinate.Y(); }
172 * Returns the Z coordinate of the reconstructed hit in centimetres.
174 Double_t Z() const { return fCoordinate.Z(); }
177 * Returns the source DDL from which this hit originates.
178 * -1 is returned if this was not set.
180 Int_t SourceDDL() const { return fSourceDDL; }
183 * Returns the detector element ID on which this reconstructed hit resides.
184 * -1 is returned if this was not set.
186 Int_t DetElemId() const { return fDetElemId; }
189 * Returns the chamber number of this hit in the range [1..14].
190 * If -1 is returned then the chamber number is not known because the
191 * detector element ID was not set or is invalid.
192 * @param warn Indicates if any warning should be printed in case of problems.
194 Int_t Chamber(bool warn = true) const;
197 * Returns the ID number given to the hit's cluster.
199 Int_t ClusterId() const { return fClusterId; }
202 * Returns the expected number of channels that are to be added to this hit.
203 * If the number of calls to AddChannel does not correspond to this value
204 * then we lost some debugging information along the way.
206 UInt_t ExpectedNchannels() const { return fNchExp; }
209 * Sets the debugging information for this hit.
210 * @param detElemId The detector element ID.
211 * @param clusterId Cluster ID of the hit's cluster.
212 * @param nChExp Number of expected channels forming the cluster.
213 * @param sourceDDL The source DDL of this hit.
216 Int_t detElemId, Int_t clusterId, UInt_t nChExp,
221 * Sets the hit coordinate.
223 void SetHit(Float_t x, Float_t y, Float_t z)
225 fCoordinate.SetXYZ(x, y, z);
229 * Returns the number of channels associated with this hit.
231 Int_t Nchannels() const { return fChannels.GetEntriesFast(); }
234 * Returns the i'th channel associated with this hit.
235 * @param i Should be a number in the range [0..n), where n = Nchannels().
237 const AliChannel* GetChannel(Int_t i) const
239 return static_cast<const AliChannel*>(fChannels[i]);
243 * Adds a new channel to this hit if it is on a tracking chamber.
244 * @param manu The MANU number
245 * @param channel The MANU channel address.
246 * @param signal The ADC signal value measured on the channel.
247 * @param rawDataWord This is the raw data word as read from the DDL.
250 Short_t manu, Short_t channel, Short_t signal,
255 * Prints the details of the reconstructed hit.
256 * @param option A case sensitive string that can contain one of the
258 * "compact" - Prints just the coordinates of the hit in a terse format.
259 * "detail" - Prints the coordinates and detector element ID.
260 * "all" - Prints all known information about this hit including
261 * channel information forming the cluster that was reconstructed.
262 * If the string contains an empty option or NULL then the default is
263 * to print compactly.
265 virtual void Print(Option_t* option = NULL) const;
267 // Methods inherited from TObject
268 virtual Bool_t IsSortable() const { return kTRUE; }
269 Int_t Compare(const TObject* obj) const;
271 // Implement comparison operators.
272 bool operator == (const AliHLTMUONRecHit& hit) const
274 return X() == hit.X() and Y() == hit.Y() and Z() == hit.Z();
277 bool operator != (const AliHLTMUONRecHit& hit) const
279 return not this->operator == (hit);
284 TVector3 fCoordinate; ///< The 3D coordinate of the hit in AliRoot global coordinates (cm).
286 // The following is debugging information and may not be filled if the
287 // dHLT components were not set to produce this information.
288 Int_t fSourceDDL; ///< The DDL from which this hit originates.
289 Int_t fDetElemId; ///< Detector element ID number.
290 Int_t fClusterId; ///< The cluster ID number used to relate all the channels to each other.
291 UInt_t fNchExp; ///< The number of channels that were supposed to be found.
292 TClonesArray fChannels; ///< The channels forming part of the cluster from which this hit was reconstructed.
294 ClassDef(AliHLTMUONRecHit, 3); // A reconstructed hit translated from dHLT raw data into ROOT format.
297 #endif // ALIHLTMUONRECHIT_H