1 /**************************************************************************
2 * Copyright(c) 2004, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
16 /** @file AliFMDBaseDigit.cxx
17 @author Christian Holm Christensen <cholm@nbi.dk>
18 @date Mon Mar 27 12:37:41 2006
19 @brief Digits for the FMD
22 //////////////////////////////////////////////////////////////////////
24 // Digits classes for the FMD
31 // - ADC count in this channel
38 // - Total energy deposited in the strip
39 // - ADC count in this channel
41 // As the Digits and SDigits have so much in common, the classes
42 // AliFMDDigit and AliFMDSDigit are implemented via a base
43 // class AliFMDBaseDigit.
45 // +-----------------+
46 // | AliFMDBaseDigit |
47 // +-----------------+
52 // +-------------+ +--------------+
53 // | AliFMDDigit | | AliFMDSDigit |
54 // +-------------+ +--------------+
56 // (Note, that I'd really would have liked to implement AliFMDHit as a
57 // derived class from some base class - say AliFMDStrip, and the Digit
58 // classes would (eventually) have derived from that as well.
59 // However, ROOT doesn't do well with multiple inheritance, so I chose
62 // Latest changes by Christian Holm Christensen
64 //////////////////////////////////////////////////////////////////////
66 #include "AliFMDBaseDigit.h" // ALIFMDDIGIT_H
67 #include "Riostream.h" // ROOT_Riostream
68 // #include <TString.h>
69 // #include <AliLog.h>
70 #include "AliFMDDebug.h" // Better debug macros
72 //====================================================================
73 ClassImp(AliFMDBaseDigit)
75 ; // This is here to keep Emacs from indenting the next line
78 //____________________________________________________________________
79 AliFMDBaseDigit::AliFMDBaseDigit()
87 //____________________________________________________________________
88 AliFMDBaseDigit::AliFMDBaseDigit(UShort_t detector,
92 : fDetector(detector),
99 // Creates a base data digit object
103 // detector Detector # (1, 2, or 3)
104 // ring Ring ID ('I' or 'O')
105 // sector Sector # (For inner/outer rings: 0-19/0-39)
106 // strip Strip # (For inner/outer rings: 0-511/0-255)
109 //____________________________________________________________________
111 AliFMDBaseDigit::Print(Option_t* /* option*/) const
113 // Print digit to standard out
114 cout << ClassName() << ": FMD" << GetName() << flush;
117 //____________________________________________________________________
119 AliFMDBaseDigit::GetName() const
121 // Get the name of a FMD digit.
123 fName = Form("FMD%d%c[%2d,%3d]", fDetector, fRing, fSector, fStrip);
126 #define fMaxStrips 512
127 #define fMaxSectors 40
130 //____________________________________________________________________
132 AliFMDBaseDigit::Hash() const
134 // Calculate a hash value based on the detector coordinates.
135 size_t ringi = (fRing == 'I' || fRing == 'i' ? 0 : 1);
136 return fStrip + fMaxStrips *
137 (fSector + fMaxSectors * (ringi + fMaxRings * (fDetector - 1)));
141 //____________________________________________________________________
143 AliFMDBaseDigit::Compare(const TObject* o) const
145 // Compare to other digit. If the passed pointer to TObject does
146 // not point to an object of class AliFMDBaseDigit (or one of it's
147 // derived classes), then a fatal exception is made.
149 // Returns -1, if this object's detector coordinates are smaller
150 // than passed object's detector coordinates.
152 // Returns 0, if this object's detector coordinates is the same as
153 // passed object's detector coordinates.
155 // Returns 1, if this object's detector coordinates are larger
156 // than passed object's detector coordinates.
158 AliFatal("Can not compare to NULL!");
159 if (o->IsA() != AliFMDBaseDigit::Class())
160 AliFatal(Form("Cannot compare to a %s object", o->ClassName()));
161 // AliFMDBaseDigit* of = static_cast<AliFMDBaseDigit*>(o);
162 if (Hash() == o->Hash()) return 0;
163 if (Hash() < o->Hash()) return -1;
168 //____________________________________________________________________