Adaption to new fluka common blocks (E. Futo)
[u/mrichter/AliRoot.git] / TPC / AliTPCCluster.cxx
CommitLineData
cc80f89e 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$Log$
7775178f 18Revision 1.2 2000/04/17 09:37:33 kowal2
19removed obsolete AliTPCDigitsDisplay.C
20
cc80f89e 21Revision 1.1.4.2 2000/04/10 11:34:02 kowal2
22
23Clusters handling in a new data structure
24
25*/
26
27
28///////////////////////////////////////////////////////////////////////////////
29// //
30// Time Projection Chamber clusters objects //
31//
32// Origin: Marian Ivanov , GSI Darmstadt
33// //
34// //
35// //
36///////////////////////////////////////////////////////////////////////////////
37#include "AliTPC.h"
38#include "AliTPCCluster.h"
39#include "TClonesArray.h"
40#include "TDirectory.h"
41
42
43const Int_t kDefSize = 1; //defalut size
44
45
46ClassImp(AliTPCClustersRow)
47
48
49//*****************************************************************************
50//
51//_____________________________________________________________________________
52AliTPCClustersRow::AliTPCClustersRow()
53{
54 //
55 //default constructor
56 fNclusters=0;
7775178f 57 fClusters = new TClonesArray("AliTPCcluster",kDefSize);
58 fParam = 0;
cc80f89e 59}
60//_____________________________________________________________________________
61AliTPCClustersRow::AliTPCClustersRow(Int_t size)
62{
63 fNclusters=0;
64 fClusters = new TClonesArray("AliTPCcluster",size);
65}
66
67//_____________________________________________________________________________
68const AliTPCcluster* AliTPCClustersRow::operator[](Int_t i)
69{
70 //
71 // return cluster at internal position i
72 //
73 if (fClusters==0) return 0;
74 void * cl = fClusters->UncheckedAt(i);
75 if (cl==0) return 0;
76 return (AliTPCcluster*)cl;
77}
78//_____________________________________________________________________________
79void AliTPCClustersRow::Sort()
80{
81 // sort cluster
82 if (fClusters) fClusters->Sort();
83}
84
85//_____________________________________________________________________________
86void AliTPCClustersRow::InsertCluster(const AliTPCcluster * c)
87{
88 //
89 // Add a simulated cluster copy to the list
90 //
91 if(!fClusters) fClusters=new TClonesArray("AliTPCcluster",1000);
92 TClonesArray &lclusters = *fClusters;
93 new(lclusters[fNclusters++]) AliTPCcluster(*c);
94}
95
96//_____________________________________________________________________________
97Int_t AliTPCClustersRow::Find(Double_t y) const
98{
99 //
100 // return index of cluster nearest to given y position
101 //
102 AliTPCcluster* cl;
103 cl=(AliTPCcluster*)fClusters->UncheckedAt(0);
104 if (y <= cl->fY) return 0;
105 cl=(AliTPCcluster*)fClusters->UncheckedAt(fNclusters-1);
106 if (y > cl->fY) return fNclusters;
107 //if (y <= clusters[0]->fY) return 0;
108 //if (y > clusters[num_of_clusters-1]->fY) return num_of_clusters;
109 Int_t b=0, e=fNclusters-1, m=(b+e)/2;
110 // Int_t b=0, e=num_of_clusters-1, m=(b+e)/2;
111 for (; b<e; m=(b+e)/2) {
112 cl = (AliTPCcluster*)fClusters->UncheckedAt(m);
113 if (y > cl->fY) b=m+1;
114 // if (y > clusters[m]->fY) b=m+1;
115 else e=m;
116 }
117 return m;
118}
119
120
121//_____________________________________________________________________________
122
123ClassImp(AliTPCClustersArray)
124
125AliTPCClustersArray::AliTPCClustersArray()
126{
127 fParam = 0;
128}
129
130AliTPCClustersArray::~AliTPCClustersArray()
131{
132 //
133 //object is only owner of fParam
134 //
135 if (fParam) delete fParam;
136}
137
138const AliTPCClustersRow * AliTPCClustersArray::GetRow(Int_t sector,Int_t row)
139{
140 //
141 //return clusters ((AliTPCClustersRow *) per given sector and padrow
142 //
143 if (fParam==0) return 0;
144 Int_t index = fParam->GetIndex(sector,row);
145 return (AliTPCClustersRow *)(*this)[index];
146}
147
148Bool_t AliTPCClustersArray::LoadRow(Int_t sector,Int_t row)
149{
150 //
151 //return clusters ((AliTPCClustersRow *) per given sector and padrow
152 //
153 if (fParam==0) return 0;
154 Int_t index = fParam->GetIndex(sector,row);
155 return LoadSegment(index);
156}
157
158Bool_t AliTPCClustersArray::StoreRow(Int_t sector,Int_t row)
159{
160 //
161 //return clusters ((AliTPCClustersRow *) per given sector and padrow
162 //
163 if (fParam==0) return 0;
164 Int_t index = fParam->GetIndex(sector,row);
165 StoreSegment(index);
166 return kTRUE;
167}
168
169
170
171Bool_t AliTPCClustersArray::Setup(AliTPCParam *param)
172{
173 //
174 //setup function to adjust array parameters
175 //
176 if (param==0) return kFALSE;
177 fParam = new AliTPCParam(*param);
178 return MakeArray(fParam->GetNRowsTotal());
179}