]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TPC/Rec/AliTPCclusterMI.cxx
Adding protection for null clusters in assignment operator
[u/mrichter/AliRoot.git] / TPC / Rec / AliTPCclusterMI.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, 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
16 //-------------------------------------------------------
17 //          Implementation of the TPC cluser
18 //
19 //   Origin: Marian Ivanov   Marian.Ivanov@cern.ch
20 // 
21 //  AliTPC parallel tracker - 
22 //  Description of this class together with its intended usage
23 //  will follow shortly
24 //  
25 //-------------------------------------------------------
26
27 /* $Id$ */
28
29 #include "AliTPCclusterMI.h"
30 #include "AliTPCclusterInfo.h"
31 #include "AliTrackPointArray.h"
32 #include "AliGeomManager.h"
33 #include "AliLog.h"
34
35 ClassImp(AliTPCclusterMI)
36
37
38 AliTPCclusterMI::AliTPCclusterMI():
39   AliCluster(),
40   fInfo(0),
41   fTimeBin(0),  //time bin coordinate
42   fPad(0),  //pad coordinate
43   fQ(0),       //Q of cluster (in ADC counts)  
44   fMax(0),      //maximal amplitude in cluster
45   fType(0),     //type of the cluster 0 means golden 
46   fUsed(0),     //counter of usage  
47   fDetector(0), //detector  number
48   fRow(0)      //row number number
49 {
50   //
51   // default constructor
52   //
53 }
54
55 AliTPCclusterMI::AliTPCclusterMI(const AliTPCclusterMI & cluster):
56   AliCluster(cluster),
57   fInfo(0),
58   fTimeBin(cluster.fTimeBin),
59   fPad(cluster.fPad),
60   fQ(cluster.fQ),
61   fMax(cluster.fMax),
62   fType(cluster.fType),
63   fUsed(cluster.fUsed),
64   fDetector(cluster.fDetector),
65   fRow(cluster.fRow)
66 {
67   //
68   // copy constructor
69   // 
70   //  AliInfo("Copy constructor\n");
71   if (cluster.fInfo) fInfo = new AliTPCclusterInfo(*(cluster.fInfo));
72 }
73
74 AliTPCclusterMI & AliTPCclusterMI::operator = (const AliTPCclusterMI & cluster)
75 {
76   //
77   // assignment operator
78   // 
79   //  AliInfo("Asignment operator\n");
80   if (this == &cluster) return (*this);
81
82   (AliCluster&)(*this) = (AliCluster&)cluster;
83   fQ    = cluster.fQ;
84   fType = cluster.fType;
85   fMax  = cluster.fMax;
86   fUsed = cluster.fUsed;
87   fDetector = cluster.fDetector;
88   fRow  = cluster.fRow;
89   fTimeBin = cluster.fTimeBin;
90   fPad     = cluster.fPad;
91   delete fInfo;
92   fInfo = 0;
93   if (cluster.fInfo) fInfo = new AliTPCclusterInfo(*(cluster.fInfo));
94   return *this;
95 }
96
97
98
99
100 AliTPCclusterMI::AliTPCclusterMI(Int_t *lab, Float_t *hit) : 
101   AliCluster(0,hit,0.,0.,lab),
102   fInfo(0),
103   fTimeBin(0),  //time bin coordinate
104   fPad(0),  //pad coordinate
105   fQ(0),       //Q of cluster (in ADC counts)  
106   fMax(0),      //maximal amplitude in cluster
107   fType(0),     //type of the cluster 0 means golden 
108   fUsed(0),     //counter of usage  
109   fDetector(0), //detector  number
110   fRow(0)      //row number number
111 {
112   //
113   // constructor
114   //
115   fQ = (UShort_t)hit[4];
116   fInfo = 0;
117 }
118
119 AliTPCclusterMI::~AliTPCclusterMI() {
120   //
121   // destructor
122   //
123   if (fInfo) delete fInfo;
124   fInfo = 0;
125 }
126
127
128
129 Bool_t AliTPCclusterMI::IsSortable() const
130 {
131   //
132   //
133   return kTRUE;
134
135 }
136
137 Int_t AliTPCclusterMI::Compare(const TObject* obj) const
138 {
139   //
140   // compare according y
141   AliTPCclusterMI * o2 = (AliTPCclusterMI*)obj;
142   return (o2->GetY()>GetY())? -1:1; 
143 }
144
145
146 void AliTPCclusterMI::SetDetector(Int_t detector){
147   //
148   // set volume ID 
149   //  
150   fDetector = (UChar_t)(detector%72);
151   AliGeomManager::ELayerID id = (fDetector<36) ? 
152     AliGeomManager::kTPC1 :AliGeomManager::kTPC2 ;
153   Int_t modId = (fDetector<36)?fDetector: fDetector-36;
154   SetVolumeId(AliGeomManager::LayerToVolUID(id,modId));  
155 }
156
157
158 void AliTPCclusterMI::SetInfo(AliTPCclusterInfo * info) {
159   //
160   //
161   //
162   if (fInfo) delete fInfo;
163   fInfo = info;
164 }
165
166
167 AliTPCclusterMI* AliTPCclusterMI::MakeCluster(AliTrackPoint* /*point*/) {
168   //
169   // make AliTPCclusterMI out of AliTrackPoint
170   // (not yet implemented)
171   
172   return NULL;
173 }
174
175
176 AliTrackPoint* AliTPCclusterMI::MakePoint() {
177   //
178   // make AliTrackPoint out of AliTPCclusterMI
179   //
180
181   AliTrackPoint* point = new AliTrackPoint();
182   Float_t xyz[3]={0.};
183   Float_t cov[6]={0.};
184   GetGlobalXYZ(xyz);
185   GetGlobalCov(cov);
186   // voluem ID to add later ....
187   point->SetXYZ(xyz);
188   point->SetCov(cov);
189
190   return point;
191 }
192
193 //______________________________________________________________________________
194 void AliTPCclusterMI::SetGlobalTrackPoint( const AliCluster &cl, AliTrackPoint &point )
195 {
196   //
197   // Set global AliTrackPoint
198   //
199   
200   Float_t xyz[3]={0.};
201   Float_t cov[6]={0.};
202   cl.GetGlobalXYZ(xyz);
203   cl.GetGlobalCov(cov);
204   // voluem ID to add later ....
205   point.SetXYZ(xyz);
206   point.SetCov(cov);
207 }