Handle deletion of AliFMDAltroMapping object. If we make the object
[u/mrichter/AliRoot.git] / FMD / AliFMDIndex.cxx
CommitLineData
55f0ce5b 1/**************************************************************************
2 * Copyright(c) 2004, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
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 **************************************************************************/
15/* $Id$ */
16/** @file AliFMDDigit.cxx
17 @author Christian Holm Christensen <cholm@nbi.dk>
18 @date Mon Mar 27 12:37:41 2006
19 @brief Digits for the FMD
20*/
21//////////////////////////////////////////////////////////////////////
22//
23// Class that holds an FMD index. That is, it holds the detector
24// coordinates for a given strip:
25//
26// Variable | Type | Range | Description
27// ---------+----------+---------+------------------
28// detector | UShort_t | 1-3 | Detector number
29// ring | Char_t | 'I'/'O' | Ring identifier
30// sector | UShort_t | 0-39 | Sector number
31// strip | UShort_t | 0-511 | Strip number
32//
33//////////////////////////////////////////////////////////////////////
34
35#include "AliFMDIndex.h" // ALIFMDINDEX_H
36#include "Riostream.h" // ROOT_Riostream
37#include <TString.h> // ROOT_TString
38#include <AliFMDMap.h>
39
40//====================================================================
cdd730d0 41using std::cout;
42using std::flush;
55f0ce5b 43ClassImp(AliFMDIndex)
44#if 0
45 ; // This is here to keep Emacs from indenting the next line
46#endif
47
48//____________________________________________________________________
49AliFMDIndex::AliFMDIndex()
50 : fDetector(0),
51 fRing('\0'),
52 fSector(0),
53 fStrip(0),
b5ee4425 54 fName(""),
55 fHash(-1)
02a27b50 56{
57 // CTOR
58}
55f0ce5b 59
60//____________________________________________________________________
61AliFMDIndex::AliFMDIndex(const AliFMDIndex& o)
62 : fDetector(o.fDetector),
63 fRing(o.fRing),
64 fSector(o.fSector),
65 fStrip(o.fStrip),
b5ee4425 66 fName(""),
55f0ce5b 67 fHash(o.fHash)
68{
69 // Copy constructor
70}
71
72//____________________________________________________________________
73AliFMDIndex::AliFMDIndex(UShort_t detector,
74 Char_t ring,
75 UShort_t sector,
76 UShort_t strip)
77 : fDetector(detector),
78 fRing(ring),
79 fSector(sector),
80 fStrip(strip),
b5ee4425 81 fName(""),
55f0ce5b 82 fHash(-1)
83{
84 //
85 // Creates a base data digit object
86 //
87 // Parameters
88 //
89 // detector Detector # (1, 2, or 3)
90 // ring Ring ID ('I' or 'O')
91 // sector Sector # (For inner/outer rings: 0-19/0-39)
92 // strip Strip # (For inner/outer rings: 0-511/0-255)
93}
94
95//____________________________________________________________________
96AliFMDIndex&
97AliFMDIndex::operator=(const AliFMDIndex& o)
98{
99 // Assignment operator
d015ecfe 100 if (&o == this) return *this;
55f0ce5b 101 fDetector = o.fDetector;
102 fRing = o.fRing;
103 fSector = o.fSector;
104 fStrip = o.fStrip;
105 fHash = o.fHash;
106 return *this;
107}
108
109//____________________________________________________________________
110Int_t
111AliFMDIndex::Hash() const
112{
02a27b50 113 // calculate hash value
55f0ce5b 114 if (fHash < 0) {
115 size_t ringi = (fRing == 'I' || fRing == 'i' ? 0 : 1);
116 fHash = (fStrip +
117 AliFMDMap::kMaxStrips *
118 (fSector + AliFMDMap::kMaxSectors *
119 (ringi + AliFMDMap::kMaxRings * (fDetector-1))));
120 }
121 return fHash;
122}
123
124
125//____________________________________________________________________
126void
127AliFMDIndex::Print(Option_t* /* option*/) const
128{
129 // Print digit to standard out
130 cout << Name() << flush;
131}
132
133//____________________________________________________________________
134const char*
135AliFMDIndex::Name() const
136{
02a27b50 137 // GEt the name of the index
55f0ce5b 138 if (fName.IsNull())
139 fName = Form("FMD%d%c[%2d,%3d]", fDetector, fRing, fSector, fStrip);
140 return fName.Data();
141}
142
143//====================================================================
144ClassImp(AliFMDObjIndex)
145#if 0
146 ; // This is here to keep Emacs from indenting the next line
147#endif
148
149//____________________________________________________________________
150Int_t
151AliFMDObjIndex::Compare(const TObject* o) const
152{
02a27b50 153 // Compare to another index
55f0ce5b 154 const AliFMDObjIndex* a = dynamic_cast<const AliFMDObjIndex*>(o);
155 if (!a) {
156 Fatal("Compare",
157 "trying to compare to something not a AliFMDObjIndex object, "
158 "but a %s object", o->ClassName());
159 return 0;
160 }
161 if (this->operator<(*a)) return -1;
162 if (this->operator==(*a)) return 0;
163 return 1;
164}
165
166//____________________________________________________________________
167//
168// EOF
169//